LD script: global symbols and multiple defintions

Alan Modra amodra@gmail.com
Thu Dec 18 22:33:00 GMT 2014

On Thu, Dec 18, 2014 at 05:24:04PM +0000, Ted Carter wrote:
> 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:
>      {
>        .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."

Ah, sorry, I was being a little dense.

> 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?

According to the documentation, I guess so.  The source however has
	      /* FIXME: Should we worry if the symbol is already
		 defined?  */
It's been that way for a long time.

Alan Modra
Australia Development Lab, IBM

More information about the Binutils mailing list