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