Relinking rom32.o twice seems flaky - make third link stage.

Sigh - ld seems to move things around when relinking files.  So,
    separate out the link stages so that everything is incremental.
Also, improve diagnostics of checkrom.py tool.
diff --git a/src/rombios.lds.S b/src/rombios.lds.S
new file mode 100644
index 0000000..16347f6
--- /dev/null
+++ b/src/rombios.lds.S
@@ -0,0 +1,29 @@
+// Linker definitions for merging 16 and 32 bit code
+//
+// Copyright (C) 2008  Kevin O'Connor <kevin@koconnor.net>
+//
+// This file may be distributed under the terms of the GNU GPLv3 license.
+
+#include "config.h"
+
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH("i386")
+ENTRY(post32);
+SECTIONS
+{
+        .text code32_start : {
+                *(.text)
+
+                . = code16_start ;
+                final_code16_start = . ;
+                *(.text16)
+
+                . = code16_fixed_start ;
+                final_code16_fixed_start = . ;
+                *(.text16.fixed.addr)
+                }
+
+        .bss __bss_start : {
+                *(.bss)
+                }
+}
diff --git a/src/rombios16.lds.S b/src/rombios16.lds.S
index 4609c1c..43fcdef 100644
--- a/src/rombios16.lds.S
+++ b/src/rombios16.lds.S
@@ -10,13 +10,21 @@
 OUTPUT_ARCH("i386")
 SECTIONS
 {
-        .text16 ( _code32_code16_start - BUILD_BIOS_ADDR ) : {
+        . = ( _code32_code32_end - BUILD_BIOS_ADDR ) ;
+        code16_start = . ;
+        .text16 : {
                 *(.text)
                 *(.rodata*)
                 *(.data)
                 }
+        freespace1_start = . ;
+        code16_end = . ;
 
-        .text16.fixed.addr BUILD_START_FIXED : {
+        . = BUILD_START_FIXED ;
+        code16_fixed_start = . ;
+        freespace1_end = . ;
+        .text16.fixed.addr : {
                 *(.text.fixed.addr)
                 }
+        code16_fixed_end = . ;
 }
diff --git a/src/rombios32.lds.S b/src/rombios32.lds.S
index 095703f..6b66f03 100644
--- a/src/rombios32.lds.S
+++ b/src/rombios32.lds.S
@@ -1,4 +1,4 @@
-// Linker definitions for 16 and 32 bit code
+// Linker definitions for 32 bit code
 //
 // Copyright (C) 2008  Kevin O'Connor <kevin@koconnor.net>
 //
@@ -8,37 +8,25 @@
 
 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
 OUTPUT_ARCH("i386")
-ENTRY(post32);
 SECTIONS
 {
-        .text BUILD_BIOS_ADDR : {
-                code32_start = . ;
+        . = BUILD_BIOS_ADDR ;
+        code32_start = . ;
+        .text : {
                 *(.text)
-
-                . = ALIGN(16) ;
                 code32_rodata = . ;
                 *(.rodata*)
-
-                . = ALIGN(16) ;
                 code32_data = . ;
                 *(.data)
-                code32_end = . ;
-
                 . = ALIGN(16) ;
-                code16_start = . ;
-                *(.text16)
-                code16_end = . ;
-                freespace1_start = . ;
-
-                . = BUILD_START_FIXED ;
-                freespace1_end = . ;
-                *(.text16.fixed.addr)
                 }
+        code32_end = . ;
 
-        .bss BUILD_BSS_ADDR : {
-                 __bss_start = . ;
+        . = BUILD_BSS_ADDR ;
+        __bss_start = . ;
+        .bss : {
                  *(.bss)
                  *(COMMON)
-                 __bss_end = . ;
                  }
+        __bss_end = . ;
 }