Weak references, --as-needed, and pthreads
Cary Coutant
ccoutant@gmail.com
Thu Jun 21 20:58:00 GMT 2018
>>> In general, it really must pick the base version for the symbol because
>>> the
>>> binary could have been produced before symbol versioning was introduced
>>> for
>>> this particular library.
>>>
>>> In particular, a reference (weak or strong) to any glibc symbol really
>>> must
>>> have an attached symbol version, especially if a weak function symbol is
>>> actually used to call the function, otherwise the binary is invalid and
>>> might fail to work with any future glibc update.
I've committed this patch, which lets a dynamic definition override an
earlier one if the earlier one is from a not-needed library, so that
we can retain the version information from the binding to the needed
library. In order to do that, the tracking of needed/not-needed had to
be moved up to symbol resolution time, instead of during
Symbol_table::set_dynsym_indexes().
In cases where we still end up discarding version information, I've
added a warning.
> Yes, and it should emit a weak version, so that loading of the library with
> the weak reference is not rejected if the referenced library does not
> provide that symbol version.
I have not done this; I'll save it for a follow-up, after I figure out
what a weak version is and how to emit one.
-cary
2018-06-21 Cary Coutant <ccoutant@gmail.com>
gold/
* resolve.cc (Symbol_table::resolve): Rename tobinding to
orig_tobinding. Call set_is_needed() for objects that resolve
non-weak references.
(Symbol_table::should_override): Allow a dynamic definition to
override an earlier one in a not-needed library.
* symtab.cc (Symbol_table::set_dynsym_indexes): Remove separate
processing for as-needed symbols. Add warning when discarding
version informatin.
* testsuite/Makefile.am (weak_as_needed): New test case.
* testsuite/Makefile.in: Regenerate.
* testsuite/weak_as_needed.sh: New test script.
* testsuite/weak_as_needed_a.c: New source file.
* testsuite/weak_as_needed_b.c: New source file.
* testsuite/weak_as_needed_b.script: New version script.
* testsuite/weak_as_needed_c.c: New source file.
* testsuite/weak_as_needed_c.script: New version script.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: weak-as-needed.patch
Type: application/octet-stream
Size: 13341 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20180621/40ba362f/attachment.obj>
More information about the Binutils
mailing list