LD script: global symbols and multiple defintions

Ted Carter tcarter@broadcom.com
Thu Dec 18 17:24:00 GMT 2014


No, not using PROVIDE since the symbol would use the definition from the program.  I'm interested in what should happen when linker script variables conflict with symbols in the program.  The only reference in the ld docs I could find on this topic was the example in PROVIDE.  From the example:

     SECTIONS
     {
       .text :
         {
           *(.text)
           _etext = .;
           PROVIDE(etext = .);
         }
     }

"In this example, if the program defines `_etext' (with a leading underscore), the linker will give a multiple definition error."

If I replace _etext with foo and link with an object file that defines foo, like in my snippet, shouldn't I get an error?

Regards, Ted.

-----Original Message-----
From: Alan Modra [mailto:amodra@gmail.com] 
Sent: Wednesday, December 17, 2014 10:54 PM
To: Ted Carter
Cc: binutils@sourceware.org
Subject: Re: LD script: global symbols and multiple defintions

On Thu, Dec 18, 2014 at 12:59:34AM +0000, Ted Carter wrote:
> I was expecting that a global symbol defined in a linker script (e.g. foo =
> 0x3000) would produce a multiple definition error if a non-weak symbol is
> already defined in an object file on the link line, but this didn't happen.
>  Instead, references will always resolve to the global definition without
> throwing a diag if it's defined elsewhere.  My expectation is based on
> verbage in https://sourceware.org/binutils/docs-2.24/ld/PROVIDE.html#PROVIDE.

But you were not using PROVIDE??

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list