Layout fixed area using linker instead of assembler.

The fixed offset requirements of the 16bit code can be done using
    multiple sections and a linker script.  Using the linker allows
    for more flexibility.
Also, have the 16bit code generate sections for every function and
    variable definition.
diff --git a/Makefile b/Makefile
index 13ef54b..424dd0b 100644
--- a/Makefile
+++ b/Makefile
@@ -31,6 +31,7 @@
 override CFLAGS = $(COMMONCFLAGS) -g -DMODE16=0
 CFLAGS16INC = $(COMMONCFLAGS) -DMODE16=1 -fno-jump-tables -fno-defer-pop \
               $(call cc-option,$(CC),--param large-stack-frame=4,)
+CFLAGS16INC += -ffunction-sections -fdata-sections
 CFLAGS16 = $(CFLAGS16INC) -g
 
 TABLETMP=$(addprefix $(OUT), $(patsubst %.c,%.16.s,$(TABLESRC)))
@@ -44,6 +45,7 @@
 endif
 
 OBJCOPY=objcopy
+OBJDUMP=objdump
 NM=nm
 STRIP=strip
 
@@ -103,6 +105,12 @@
 	@echo "  Linking (no relocs) $@"
 	$(Q)$(LD) -r -d -T $(OUT)rombios32.lds $< -o $@
 
+$(OUT)romlayout.lds: $(OUT)romlayout16.o
+	@echo "  Building layout information $@"
+	$(Q)$(OBJDUMP) -h $< | ./tools/layoutrom.py > $@
+
+$(OUT)rombios16.lds: $(OUT)romlayout.lds
+
 $(OUT)rom16.o: $(OUT)romlayout16.o $(OUT)rom32.o $(OUT)rombios16.lds
 	@echo "  Linking (16bit) $@"
 	$(Q)$(OBJCOPY) --prefix-symbols=_code32_ $(OUT)rom32.o $(OUT)rom32.rename.o