Welcome to the new Linux Foundation Forum!

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):

[email protected]##-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.

Comments

  • woboylewoboyle Posts: 501
    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... :-(
Sign In or Register to comment.