This is the mail archive of the
mailing list for the glibc project.
Dynamic tag assignment request: Disable symbol version coverage check
- From: Florian Weimer <fweimer at redhat dot com>
- To: gnu-gabi at sourceware dot org
- Cc: binutils at sourceware dot org, libc-alpha at sourceware dot org
- Date: Wed, 09 Oct 2019 11:23:43 +0200
- Subject: Dynamic tag assignment request: Disable symbol version coverage check
I'd like to receive an assignment for a dynamic tag value which we will
use in the dynamic linker to disable the coverage check for symbol
This is what the coverage check does: For each verneed entry, it checks
that the name shared object (identified by its soname) implements all
the versions listed in the vernaux entries for the verneed entry. I
believe this check was added so that the loader can tell immediately at
load time if all the required symbols are present, even if lazy binding
is used. (Obviously, this requires proper symbol versioning practices,
and one cannot add a new symbol to an existing version once the shared
object has been released to the world.)
A side-effect of this check is that it is currently impossible to use
LD_PRELOAD to load new symbol versions that come from linking to a newer
version of a shared object. The coverage check will not notice that the
version is provided by the preloaded object and will still fail.
In contrast, if the glibc dynamic loader encounters the new dynamic tag
in any of the initially loaded objects, it will disable the version
coverage check. The idea is that a developer who builds an LD_PRELOAD
object can set the dynamic tag and add completely new symbol versions.
>From a user perspective, it will look like just another preloaded
I guess I'm looking for an assignment like this:
#define DT_GNU_NOSYMVERCHECK 0x6ffffdf4
This is GNU-specific because symbol versioning is a GNU innovation.
(Solaris has shared object versioning, but it is completely different,
despite version scripts sharing some syntactic similarities.)