RFC: weakref GCC attribute and .weakref assembly directive
Daniel Jacobowitz
drow@false.org
Thu Oct 13 13:41:00 GMT 2005
On Thu, Oct 13, 2005 at 08:33:01AM -0500, Aaron W. LaFramboise wrote:
> Could you compare your novel weak references to PECOFF's notion of "weak
> externals"?
>
> .weak sym1 = sym2 # Analogous to: .weakref sym1, sym2
>
> "If a definition of sym1 is linked, then an external reference to the
> symbol is resolved normally.
>
> If a definition of sym1 is not linked, then all references to the weak
> external for sym1 refer to sym2 instead.
>
> The external symbol, sym2, must always be linked; typically it is
> defined in the module containing the weak reference to sym1" (PECOFF 6.0
> 5.5.3).
>
> Note that PECOFF weak external symbols have external linkage, but they
> will never be used to resolve an undefined reference in another object
> at link-time.
>
>
> I am thinking that the difference is that PECOFF weak externals can be
> resolved by definitions anywhere in the final link, while your new weak
> references can only be overriden by definitions within the same
> translation unit. Does this seem correct?
The difference is that ".weak sym1 = sym2" resolves to sym1 (if
available) else sym2; but ".weakref sym1, sym2" resolves to sym2 (if
available) else zero. Also sym1 does not become an external, only a
local alias, IIRC.
--
Daniel Jacobowitz
CodeSourcery, LLC
More information about the Binutils
mailing list