TLS on x86-64 question..

Jakub Jelinek jakub@redhat.com
Fri Sep 5 10:37:00 GMT 2003


On Fri, Sep 05, 2003 at 11:57:56AM +0200, Andreas Jaeger wrote:
> 
> If I compile the following small program on x86-64 (with either GCC
> 3.3 CVS, GCC 3.3 hammer-branch CVS or 3.4 CVS) I get the following
> error:
> 
> $ /opt/gcc/3.3-devel/bin/gcc  -g -c tls.c -o tls.o -fPIC -ftls-model=local-exec
> $ /opt/gcc/3.3-devel/bin/gcc -g -o tls.so -shared tls.o
> /usr/bin/ld: tls.o: relocation R_X86_64_TPOFF32 can not be used when making a shared object; recompile with -fPIC
> tls.o: could not read symbols: Bad value
> collect2: ld returned 1 exit status
> 
> The program is:
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> static __thread int foo;
> 
> int getTLSVar(void)
> {
>     return foo; 
> } 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> This works fine on other platforms, e.g. i386.
> 
> Jakub, any ideas on this one?

local-exec is not supported in shared libraries on x86_64 (well, it is not
supported on most arches).
It is the same thing as supporting -fno-pic code in shared libraries
- local-exec would mean TLS relocations against .text segment.

	Jakub



More information about the Binutils mailing list