------- Comment #11 from bigotp at acm dot org 2010-08-13 20:11 ------- (In reply to comment #9) > (In reply to comment #8) > > Hm, I only can see references to "symbol" not to either function or variable > > declaration in the documentation. Can you cite the part that makes you > > think > > it restricts the use to functions? > > It's documented in the section on function attributes, but not listed in the > section on variable attributes. Compare 'deprecated' or 'weak', which are > listed in both places.
Is there any intention to restrict use of weakref to functions? It seems to be exactly what I want to use to allow a translation unit to reference a memory-mapped register by its vendor-defined name, while not making that name a global symbol that impacts other translation units, nor providing the actual register address until the final link phase: static volatile uint16_t P1IN __attribute((weakref("__P1IN"))); uint16_t c3 () { return P1IN; } with __P1IN = 0x0020; in a linker script. Other approaches seem to require that I have a definition for __P1IN available at the time the object file is generated, which means I'd have a potential for conflict if a different object file happened to include a header that gave the register a different address; or that I use: volatile uint16_t P1IN __attribute((weak)); uint16_t c3 () { return P1IN; } which clutters the namespace. Heck, I'll submit a patch to gcc/doc/extend.texi that explicitly allows use of weakref on variables if that'd help. -- bigotp at acm dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bigotp at acm dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25140