ld: section can't be allocated in segment 1

Clemens Koller clemens.koller@anagramm.de
Fri Oct 19 17:29:00 GMT 2007


Hello!

I just tried to compile a standalone bootloader (u-boot) with the latest binutils-2.18
and gcc-4.2.2 on a
$ uname -a
Linux fox 2.6.22-rc6-gb75ae860 #5 Fri Jun 29 19:58:04 CEST 2007 ppc e500 GNU/Linux

But I run into a problem with the linker script:

$ ld -Bstatic -T /share/home/clemens/work/u-boot/u-boot-1.3.0-rc3/board/tqm85xx/u-boot.lds -Ttext 0xfffc0000  -n $UNDEF_SYM cpu/mpc85xx/start.o cpu/mpc85xx/resetvec.o \
--start-group lib_generic/libgeneric.a board/tqm85xx/libtqm85xx.a cpu/mpc85xx/libmpc85xx.a lib_ppc/libppc.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/bios_emulator/libatibiosemu.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/onenand/libonenand.a drivers/net/libnet.a drivers/qe/qe.a drivers/serial/libserial.a drivers/sk98lin/libsk98lin.a post/libpost.a post/drivers/libpostdrivers.a post/lib_ppc/libpostppc.a post/lib_ppc/fpu/libpostppcfpu.a common/libcommon.a libfdt/libfdt.a --end-group -L /usr/lib/gcc/powerpc-unknown-linux-gnu/4.2.2 -lgcc \
-Map u-boot.map -o u-boot
ld: u-boot: section `.bootpg' can't be allocated in segment 1
ld: final link failed: Bad value
make: *** [u-boot] Error 1

What is the meaning of this error message? A "bad value" can be just everything.
With the older binutils-2.17 and gcc-4.2.0 this compiles just fine.

The linker script u-boot.lds contains:
----8<----------------
OUTPUT_ARCH(powerpc)
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
/* Do we need any of these for elf?
    __DYNAMIC = 0;    */
SECTIONS
{
   .resetvec 0xFFFFFFFC :
   {
     *(.resetvec)
   } = 0xffff

   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o (.bootpg)
     board/tqm85xx/init.o (.bootpg)
   } = 0xffff

   /* Read-only sections, merged into text segment: */
   . = + SIZEOF_HEADERS;
   .interp : { *(.interp) }
   .hash          : { *(.hash)           }
   .dynsym        : { *(.dynsym)         }
   .dynstr        : { *(.dynstr)         }
   .rel.text      : { *(.rel.text)               }
   .rela.text     : { *(.rela.text)      }
   .rel.data      : { *(.rel.data)               }
   .rela.data     : { *(.rela.data)      }
   .rel.rodata    : { *(.rel.rodata)     }
   .rela.rodata   : { *(.rela.rodata)    }
   .rel.got       : { *(.rel.got)                }
   .rela.got      : { *(.rela.got)               }
   .rel.ctors     : { *(.rel.ctors)      }
   .rela.ctors    : { *(.rela.ctors)     }
   .rel.dtors     : { *(.rel.dtors)      }
   .rela.dtors    : { *(.rela.dtors)     }
   .rel.bss       : { *(.rel.bss)                }
   .rela.bss      : { *(.rela.bss)               }
   .rel.plt       : { *(.rel.plt)                }
   .rela.plt      : { *(.rela.plt)               }
   .init          : { *(.init)   }
   .plt : { *(.plt) }
   .text      :
   {
     cpu/mpc85xx/start.o (.text)
     board/tqm85xx/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
     cpu/mpc85xx/cpu.o (.text)
     cpu/mpc85xx/speed.o (.text)
     cpu/mpc85xx/pci.o (.text)
     common/dlmalloc.o (.text)
     lib_generic/crc32.o (.text)
     lib_ppc/extable.o (.text)
     lib_generic/zlib.o (.text)
     *(.text)
     *(.fixup)
     *(.got1)
    }
     _etext = .;
     PROVIDE (etext = .);
     .rodata    :
    {
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
     *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
   .dtors     : { *(.dtors)   }

   /* Read-write section, merged into data segment: */
   . = (. + 0x00FF) & 0xFFFFFF00;
   _erotext = .;
   PROVIDE (erotext = .);
   .reloc   :
   {
     *(.got)
     _GOT2_TABLE_ = .;
     *(.got2)
     _FIXUP_TABLE_ = .;
     *(.fixup)
   }
   __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
   __fixup_entries = (. - _FIXUP_TABLE_) >> 2;

   .data    :
   {
     *(.data)
     *(.data1)
     *(.sdata)
     *(.sdata2)
     *(.dynamic)
     CONSTRUCTORS
   }
   _edata  =  .;
   PROVIDE (edata = .);

   . = .;
   __u_boot_cmd_start = .;
   .u_boot_cmd : { *(.u_boot_cmd) }
   __u_boot_cmd_end = .;

   . = .;
   __start___ex_table = .;
   __ex_table : { *(__ex_table) }
   __stop___ex_table = .;

   . = ALIGN(256);
   __init_begin = .;
   .text.init : { *(.text.init) }
   .data.init : { *(.data.init) }
   . = ALIGN(256);
   __init_end = .;

   __bss_start = .;
   .bss       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
    *(.bss)
    *(COMMON)
   }
   _end = . ;
   PROVIDE (end = .);
}
----8<----------------

What has changed that it's now bogus?  Maybe some of you can give me
a hint to obvious problems. I RTFM, but it will take me some time to
dig into all the details here as I am not familiar with linker scripts
at all. :-(

Thank you,
-- 
Clemens Koller
__________________________________
R&D Imaging Devices
Anagramm GmbH
Rupert-Mayer-Straße 45/1
Linhof WerksgelÀnde
D-81379 MÃŒnchen
Tel.089-741518-50
Fax 089-741518-19
http://www.anagramm-technology.com



More information about the Binutils mailing list