RFC: Don't output symbol version requirement for non-DT_NEEDED libs
Alan Modra
amodra@gmail.com
Mon Dec 1 03:51:00 GMT 2014
On Fri, Nov 28, 2014 at 10:27:26AM -0500, Carlos O'Donell wrote:
> On 11/27/2014 07:06 PM, Joseph Myers wrote:
> > Actually, I think it's a linker bug not a glibc bug. If you don't link
> > with a library providing a symbol you use, I don't think any information
> > at all about how it might be resolved with some library you didn't link
> > against should be embedded in the binary: not a DT_NEEDED entry, and not a
> > version requirement. I don't think you can presume at static link time,
> > with a weak undefined symbol like that, "this symbol isn't needed, but if
> > defined at runtime it must have this version" (as opposed to "this symbol
> > isn't needed, and might have any version at runtime", which is the safe
> > assumption).
>
> I had not considered it like that. I agree with your rationale.
>
> In which case this is clearly a bug in binutils and Alan's patch
> is correct.
>
> I tried to come up with a case where this would matter, but from
> first principles I couldn't construct any sensible test cases.
If the version *does* matter, then mentioning on the command line
the library that defines the symbol will result in both the symbol
being versioned and the library in DT_NEEDED.
I've gone ahead and committed the linker patch, to 2.25 too. Thanks
to all who contributed to this thread.
--
Alan Modra
Australia Development Lab, IBM
More information about the Binutils
mailing list