[Bug c/48568] New: Missing documentation for __attribute__((visibility ("protected"))) on variables.
nisse at lysator dot liu.se
gcc-bugzilla@gcc.gnu.org
Tue Apr 12 08:57:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48568
Summary: Missing documentation for __attribute__((visibility
("protected"))) on variables.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: nisse@lysator.liu.se
I discovered that __attribute__((visibility ("protected"))) is supported on
variables, not just on functions. This should be documented in the node
"Variable Attributes" in the GCC manual
This feature is useful in particular for accessing read-only tables (allocated
in the .rodata section) from PIC code. By default, access to such data in other
compilation units is done via the GOT table. Using the above attribute (and
assuming that the definition is linked into in the same shared library file),
the GOT lookup is omitted, and instead one gets a direct access via pc-relative
addressing. I was working on GNU/linux x86_64, where this corresponds to
.protected table
lea table(%rip), %rax # To get the address of the table
rather than the default
mov table@GOTPCREL(%rip), %rax
in assembler input. I admit I don't fully understand the .protected pseudo op,
but it's appearantly essential for getting the linker to do the right thing
when linking the shared library (gcc -shared table-def.o table-use.o -o
lib.so).
Regards,
/Niels Möller
More information about the Gcc-bugs
mailing list