[PATCH] PR ld/19636: [x86] Resolve undefweak and defined symbols in executable

Michael Matz matz@suse.de
Wed Feb 24 17:50:00 GMT 2016


Hi,

On Wed, 24 Feb 2016, H.J. Lu wrote:

> > Can you cite something to support this statement?  Is everyone here of
> > this opinion?
> >
> 
> Weak symbol was introduced for system libraries.  gABI has "Unresolved
> weak symbols have a zero value."

Sure, in the paragraph talking about archive members.  Ripping it out of 
context can also mean "Unresolved at runtime".

> The behavior of weak symbols in areas not specified by this document
> is implementation defined. Weak symbols are intended primarily for use
> in system software. Applications using weak symbols are unreliable
> since changes in the runtime environment might cause the execution to
> fail.

And this even supports my view, it specifically talks about changes in the 
runtime environment, which wouldn't matter if the link editor resolved 
everything.

> Ld at link-time and ld.so at run-time do want to use vale 0 for 
> unresolved weak symbols.  We used to treat STB_WEAK differently in ld.so 
> and later changed to treat STB_WEAK the same as STB_GLOBAL for defined 
> symbols, i.e. there are no weak defined symbols at run-time.

That makes sort of sense even, but I'm talking about _references_ to weak 
symbols.  If ld resolved undef-weaks, then there would be nothing left for 
ld.so to handle, so the fact that it does handle them also indicates that 
ld should not.


Ciao,
Michael.



More information about the Binutils mailing list