What's wrong with this linker script?

Steve Snyder steves@formation.com
Wed Mar 13 08:28:00 GMT 2002


Hello.

Below is a linker script that I inherited from another project using the
same hardware.  That project was done using the Diab toolset, whereas my
project is using the Gnu toolset for development.  At link time ld
complaints about this script:

    ldppc -X -N -M -Map egu_diag.map -o egu_diag -Tegu_diag.cmd obj1.o
obj2.o
    ldppc: ADDR uses undefined section FLASHCODE

Hmmm... "undefined section"?  It looks good to me.

I don't know if this is significant, but the Gnu tools are (host=x86,
target=ppc) older versions as distributed by Wind River.  Running
"ldppc --version" returns this string:

    ld version cygnus-2.6 (with BFD cygnus-2.6)

Can anyone advise me on what is wrong with the FLASHCODE definition below?

Please CC me with any responses as I am not subscribed to this list.

Thank you.

---------------------------------

MEMORY
{
   DRAM      : ORIGIN = 0x00000000, LENGTH = 0x00200000
   GLOBALS   : ORIGIN = 0x00200000, LENGTH = 0x00200000
   FLASHCODE : ORIGIN = 0x00400000, LENGTH = 0x00200000
   PLD       : ORIGIN = 0x00600000, LENGTH = 0x00000010
   EUMB      : ORIGIN = 0x00600020, LENGTH = 0x00100000
   FLASH1    : ORIGIN = 0xFFF00000, LENGTH = 0x00020000
}

SECTIONS
{
   .text :
   {
     *(.boot_init) *(.text)
   } > FLASH1
   .burn_flash_code (ADDR(.text) + SIZEOF(.text)) : {} > FLASHCODE
   .bss     : {} > DRAM
   .sdram   : {} > GLOBALS
   .epic    : {} > EUMB
   .pld     : {} > PLD
   .sdata   : {} > DRAM
   .data    : {} > DRAM
}

/* This section defines the beginning and ending of the burn flash code
   to be moved to DRAM prior of using */

__DATA_ROM = ADDR(.text) + SIZEOF(.text);
__DATA_RAM = ADDR(FLASHCODE);
__DATA_END = ADDR(FLASHCODE) + SIZEOF(.burn_flash_code);

___DATA_ROM = __DATA_ROM;
___DATA_RAM = __DATA_RAM;
___DATA_END = __DATA_END;



More information about the Binutils mailing list