CCVER=gcc46: Adjust Makefile so boot2 remains < 7.5kb
authorJohn Marino <draco@marino.st>
Sat, 4 Feb 2012 17:27:41 +0000 (18:27 +0100)
committerJohn Marino <draco@marino.st>
Sat, 4 Feb 2012 19:44:47 +0000 (20:44 +0100)
A big sticking point with getting gcc46 to successfully buildworld was
getting boot2 to come in at 7680 bytes or less.  Unmodified it was
weighing in 784 bytes too much.  Every applying several byte-reducing
changes to it from FreeBSD only knocked off about 380 bytes.

Comparing the assembly dumps between versions built by the base
compiler and gcc46 didn't reveal that much, but using the readelf
utility on both did.  GCC 4.6 was embedding the .eh_frame section
to the object file generated from boot2.c which was adding over 1900
bytes to it.

After adding three command line switches to the makefile, the
exception handler section is prohibited from building.  There are
4968 bytes still available, down from 4988 bytes seen with the base
compiler.  The updates from FreeBSD can be applied later to free up
more memory but for now it's not required.

sys/boot/pc32/boot2/Makefile

index 97fd6b1..63055d1 100644 (file)
@@ -41,11 +41,11 @@ ORG1D = `${.OBJDIR}/bootasmdef.nx -d MEM_BIOS_LADDR`
 #
 ORG2=  `${.OBJDIR}/bootasmdef.nx BOOT2_VORIGIN`
 
 #
 ORG2=  `${.OBJDIR}/bootasmdef.nx BOOT2_VORIGIN`
 
-# gcc3.x
-#      -fno-guess-branch-probability
-#      -mno-align-long-strings
-CFLAGS=        -elf -ffreestanding -Os -fno-builtin \
+CFLAGS=        -Os \
+       -fno-guess-branch-probability \
        -fomit-frame-pointer \
        -fomit-frame-pointer \
+       -fno-unwind-tables \
+       -fno-asynchronous-unwind-tables \
        -DBOOT2 \
        -I${.CURDIR}/../../common \
        -I${.CURDIR}/../../../../lib/libstand \
        -DBOOT2 \
        -I${.CURDIR}/../../common \
        -I${.CURDIR}/../../../../lib/libstand \