[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