Compiling this little program as a PIE leads to problems on x86-64:
$ cat w.c
__thread int a;
int
main(void)
{
return a;
}
Using
gcc -o w -g -O2 -pie -fpie w.c
one sees
/usr/bin/ld: /tmp/ccU3JvLp.o: relocation R_X86_64_TPOFF32 against `a' can not
be used when making a shared object; recompile with -fPIC
R_X86_64_TPOFF32 is the correct relocation to use for non-PIC binaries but PIEs
must be PIC. It's probably just a simple mistake where instead of testing for
PIC vs non-PIC the test checks for executable vs DSO.
This is no regression. It also exists in gcc 4.1 (the oldest version available
here).
--
Summary: TLS and PIE don't mix on x86-64
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: drepper at redhat dot com
GCC host triplet: x86_64-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34475