This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Add STB_SECONDARY to gABI
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Generic System V Application Binary Interface <generic-abi at googlegroups dot com>, GCC Development <gcc at gcc dot gnu dot org>, Binutils <binutils at sourceware dot org>, GNU C Library <libc-alpha at sourceware dot org>, "Ansari, Zia" <zia dot ansari at intel dot com>
- Date: Sat, 12 May 2012 06:52:54 -0700
- Subject: Add STB_SECONDARY to gABI
Here is the final proposal to add STB_SECONDARY to gABI.
Any comments?
Thanks.
--
H.J.
---
We want to provide a relocatable object which can take advantage of all
versions of a supported OS. For a function, foo, in the C library, we
can use it only if it is available on all versions of the C library or
we provide our own implementation of foo. With our own foo, the one in
the C library will never be used. Here is a proposal to add STB_SECONDARY
to gABI to support the secondary definition so that a software vendor
can provide an alternative implementation in case it isn't available
in the C library.
STB_SECONDARY
Secondary symbols are similar to weak symbols, but their definitions
have even lower precedence. The difference between secondary symbols
and weak symbols are
1. The link editor must search archive library and extract
archive members to resolve defined and undefined secondary symbol.
2. When the link editor searches a shared object, it must honor
the global or weak definition in the shared object and ignore the
secondary one with the same name.
3. The link editor ignores the secondary definition if there is
a global, weak or common definition with the same name. Multiple
secondary definitions with the same name will not cause an error.
The first appearance of the secondary definition should be honored
and the rest are ignored.
4. The link editor may treat the secondary definition in the
shared object as a global definition.
5. Unresolved secondary symbols have a zero value.
The purpose of this symbol binding is to provide the primary
definition as a global, weak or common symbol in an archive library
or a shared object while keeping a secondary definition in a
relocatable object. If there is no primary definition, the
secondary definition will be used.
When secondary definitions become part of an executable or shared
object, linker may convert them to global or local definitions.
At run-time, when resolving a symbol, after seeing a secondary
definition, the dynamic linker must keep searching until a
global or weak definition is found. If a global or weak
definition is found, it will be used to satisfy the symbol lookup.
Otherwise, the secondary definition will be used.
If the dlopen loads a global or weak definition after the program
has already resolved references to a secondary definition, those
references remain bound to the secondary definition. Any
references resolved after the dlopen, for which the dlopened
module is included in the module search list, would be resolved
to the global or weak definition.
STB_SECONDARY is defined as:
#define STB_SECONDARY 3 /* Secondary symbol */