A message for Linux.com registered users: We are in the process of making changes to the Linux forums. Starting Monday, 8/13/18 at 6:00 PM PT, you will be unable to access the forums. They will re-launch as soon as possible on Wednesday, 8/15/18 with new features and improved functionality. Thank you for your patience and stay tuned for the new improved forums.

March 28, 2011

ld: not enough room for program headers ...

Okay, this isn't really software, it's virtual firmware, but I find this is a common problem...

I receive this error with LD (and it's quite annoying):

root@##-systems$ ld link.ld -o vfirmA01.bin setup.o _globl.o panic.o stage1.o vga.o loader.o
ld: vfirmA02.bin: not enough room for program headers (allocated 2, need 3)
ld: final link failed: Bad value

That error makes no sense (I know exactly what it means, I've done my research. You'll see why in just a second).

Here's my linker script (link.ld):

OUTPUT_FORMAT("binary") /* Binary, not elf */
phys = 0x00100000;

.text phys : AT(phys) {
code = .;
. = ALIGN(4096);
data = .; /* This is here because of some buggy versions of ld */
.data : AT(phys + (data - code))
. = ALIGN(4096);
.bss : AT(phys + (bss - code))
bss = .;
. = ALIGN(4096);
end = .;

The output("binary") is why I don't understand the error, as that error is with the elf linker script! Please help, I've begun to eat myself over this.

When I say 'binary' I mean a flat binary (aout) without the elf formatting.

Click Here!