This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: TLS on x86-64 question..


On Fri, Sep 05, 2003 at 12:41:09PM +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).
> 
> In that case shouldn't gcc already reject the combination -fPIC
> -ftls-model=local-exec?

-fPIC code can be used in binaries as well (-fPIC is the most widely usable
code that can be used in binaries, PIEs and shared libraries; -fPIE can
only be used in binaries and PIEs and -fno-pic in none of that).
So if the user explicitely asks for local exec mode, I think he should get
it.

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]