No .got section in ELF

Richard Henderson rth@redhat.com
Thu Nov 26 03:11:00 GMT 2009


On 11/25/2009 06:24 PM, yunfeng zhang wrote:
> It seems that original limitation isn't clear or sufficient
>
> For a sample:
>
> // f.c
> int g;
> void foo(void)
> {
> 	g = 1;
> }
>
> compile with `gcc -shared -fPIC -Wl,-soname,f.so,-Map,f.map -o f.so f.c'...

With -fPIC, the variable G may be overridden by another variable of the 
same name from another shared object earlier in the search path.  That 
is, the offset is *not* fixed because the final address of G may reside 
in a different .so file.

Change your program to

   static int g;

or

   extern int g __attribute__((visibility("hidden")));
   int g;

and compare the results.  In either case G is known to resolve to the 
instance present in f.so.  In either case we'll use a constant offset.

You really need to understand how ELF actually works before suggesting 
that it's broken.


r~



More information about the Gcc mailing list