I've never seen this before when building a kernel. My guess is that it basically boils down to, "Your kernel's too bloody big, stop building it as a monolith and learn to use modules." Is that right?
Craig make[2]: Entering directory `/usr/src/linux/arch/i386/boot/compressed' tmppiggy=_tmp_$$piggy; \ rm -f $tmppiggy $tmppiggy.gz $tmppiggy.lnk; \ objcopy -O binary -R .note -R .comment -S /usr/src/linux/vmlinux $tmppiggy; \ gzip -f -9 < $tmppiggy > $tmppiggy.gz; \ echo "SECTIONS { .data : { input_len = .; LONG(input_data_end - input_data) input_data = .; *(.data) input_data_end = .; }}" > $tmppiggy.lnk; \ ld -m elf_i386 -r -o piggy.o -b binary $tmppiggy.gz -b elf32-i386 -T $tmppiggy.lnk; \ rm -f $tmppiggy $tmppiggy.gz $tmppiggy.lnk gcc -D__ASSEMBLY__ -D__KERNEL__ -I/usr/src/linux/include -traditional -c head.S gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686 -c misc.c ld -m elf_i386 -Ttext 0x100000 -e startup_32 -o bvmlinux head.o misc.o piggy.o ld: bvmlinux: Not enough room for program headers (allocated 2, need 3) ld: final link failed: Bad value make[2]: *** [bvmlinux] Error 1 make[2]: Leaving directory `/usr/src/linux/arch/i386/boot/compressed' make[1]: *** [compressed/bvmlinux] Error 2 make[1]: Leaving directory `/usr/src/linux/arch/i386/boot' make: *** [bzImage] Error 2