Re: Can weak references refer to a variable (instead of a function)?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Erik Leunissen <e.leunissen@xxxxxxxxx> writes:

> Weak references are explained in section 6.30 of the GCC manual
> (Declaring Attributes of Functions).
>                          ^^^^^^^^^
>
> The example in that section declares a function x() as a weak
> reference to some symbol y in another translation unit/object file.

There are a few different versions of weak symbols, and I'm not sure
which one you mean.  Are you talking about __attribute__ ((weak,
alias("name"))), or just __attribute__ ((weak)), or __attribute__
((weakref("name")))?


> No mention of variables, either as the alias or the symbol referred to.
>
> All of this leads me to understand that weak references apply to
> functions only.

Let's say you are talking about __attribute__ ((weakref("name"))).  That
works for variables as well as functions, at least on ELF systems.


> a. is that true for both the alias and the symbol to which it refers?

I guess no.


> b. with respect to the symbol referred to, does it matter what its
> storage class is (global extent, static local extent or automatic
> local extent)?

It certainly can't be automatic.  It can be static and defined in the
same file, or it can be global.


> c. does it matter whether the link is resolved by the link editor or
> dynamically, at runtime, by the loader?

No.  __attribute__ ((weakref("name"))) only works with static symbols,
so it is basicall just renaming the symbol in the compiler.  No
significant linker action is involved.

Ian


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux