Linux.com

Home Linux Community Forums Programming and Development Software Development ld: not enough room for program headers ...

ld: not enough room for program headers ...

Link to this post 28 Mar 11

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 */
ENTRY(_start)
phys = 0x00100000;

SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
. = ALIGN(4096);
}
data = .; /* This is here because of some buggy versions of ld */
.data : AT(phys + (data - code))
{
*(.data)
. = ALIGN(4096);
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(.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.

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

Link to this post 07 Apr 11

I haven't had a chance to fully analyze the side-effects of what you are doing with the address fixups, but there are 3 sections, but I think the fixups are questionable, which may be what is causing you to have inadequate room for all 3 headers. This is just a guess at this point, until I have some more time to figure out exactly what you are doing. Not being able to see what you are doing with the .o files doesn't help the process any either... :-(

Who we are ?

The Linux Foundation is a non-profit consortium dedicated to the growth of Linux.

More About the foundation...

Frequent Questions

Join / Linux Training / Board