Index: misc/mkhd.sh
===================================================================
--- misc/mkhd.sh	(revision 87361de754d161ca2a24be0d40bfcf08294c1184)
+++ misc/mkhd.sh	(revision cd1d0dbda8955b8350519569393ec7fb33edad47)
@@ -31,14 +31,24 @@
 echo >&2
 
-getsym _Lo_RAM; SYM_LO_RAM=${RET}
-getsym _etext;  SYM_ETEXT=${RET}
-getsym _edata;  SYM_EDATA=${RET}
-getsym _end;    SYM_END=${RET}
+getsym _stext; SYM_STEXT=${RET}
+getsym _etext; SYM_ETEXT=${RET}
+getsym _sdata; SYM_SDATA=${RET}
+getsym _edata; SYM_EDATA=${RET}
+getsym _sbss;  SYM_SBSS=${RET}
+getsym _ebss;  SYM_EBSS=${RET}
 
 echo >&2
 
-LEN_TEXT=$((${SYM_ETEXT} - ${SYM_LO_RAM}))
-LEN_DATA=$((${SYM_EDATA} - ${SYM_ETEXT}))
-LEN_BSS=$((${SYM_END} - ${SYM_EDATA}))
+LEN_TEXT=$((${SYM_SDATA} - ${SYM_STEXT}))
+LEN_DATA=$((${SYM_EDATA} - ${SYM_SDATA}))
+LEN_IMAG=$((${LEN_TEXT} + ${LEN_DATA}))
+LEN_BSS=$((${SYM_EBSS} - ${SYM_SBSS}))
+
+printf '  sz_text  0x%08x  %6s\n' ${LEN_TEXT} ${LEN_TEXT} >&2
+printf '  sz_data  0x%08x  %6s\n' ${LEN_DATA} ${LEN_DATA} >&2
+printf '  sz_imag  0x%08x  %6s\n' ${LEN_IMAG} ${LEN_IMAG} >&2
+printf '   sz_bss  0x%08x  %6s\n' ${LEN_BSS}  ${LEN_BSS}  >&2
+
+echo >&2
 
 out8() {
@@ -64,5 +74,5 @@
 }
 
-out16 24602
+out16 24603
 out32 ${LEN_TEXT}
 out32 ${LEN_DATA}
@@ -70,4 +80,6 @@
 out32 0
 out32 0
-out32 ${SYM_LO_RAM}
+out32 ${SYM_STEXT}
 out16 65535
+out32 ${SYM_SDATA}
+out32 ${SYM_SBSS}
Index: misc/ram.ld
===================================================================
--- misc/ram.ld	(revision 87361de754d161ca2a24be0d40bfcf08294c1184)
+++ misc/ram.ld	(revision cd1d0dbda8955b8350519569393ec7fb33edad47)
@@ -3,20 +3,24 @@
 SECTIONS
 {
-    .text (0x10000) :
+    .text (0x10000):
     {
+        _stext = .;
         *(.text .text.*)
         *(.rodata .rodata.*)
-        _etext = .;
+        _etext = ALIGN(0x10);
     }
 
-    .data : ALIGN(0x10)
+    .data (_etext):
     {
+        _sdata = .;
         *(.data .data.*)
-        _edata = .;
+        _edata = ALIGN(0x10);
     }
 
-    .bss : ALIGN(0x10)
+    .bss (_edata):
     {
+        _sbss = .;
         *(.bss .bss.*)
+        _ebss = .;
     }
 
Index: misc/rom.ld
===================================================================
--- misc/rom.ld	(revision 87361de754d161ca2a24be0d40bfcf08294c1184)
+++ misc/rom.ld	(revision cd1d0dbda8955b8350519569393ec7fb33edad47)
@@ -3,22 +3,24 @@
 SECTIONS
 {
-    .text (0x100000) :
+    .text (0x100000):
     {
+        _stext = .;
         *(.text .text.*)
         *(.rodata .rodata.*)
-        _etext = .;
+        _etext = ALIGN(0x10);
     }
 
-    .data : ALIGN(0x10)
+    .data (_etext):
     {
+        _sdata = .;
         *(.data .data.*)
         _edata = .;
     }
 
-    .bss (0x400) :
+    .bss (0x400):
     {
+        _sbss = .;
         *(.bss .bss.*)
+        _ebss = .;
     }
-
-    _end = .;
 }
