+++ This bug was initially created as a clone of Bug #6443 +++ __thread int a; __thread int b __attribute((tls_model ("local-exec"))); __thread int c __attribute((tls_model ("initial-exec"))); __thread int d __attribute((tls_model ("local-dynamic"))); __thread int e __attribute((tls_model ("global-dynamic"))); int main (void) { return a + b + c + d + e; } compiled/linked with -O2 -pie -fpie on various arches either doesn't link at all, or makes completely unnecessarily a DT_TEXTREL PIE. Tried x86_64, i386, ppc, ppc64. For the TLS transitions and relocations, PIEs should be handled like other executables, so many info->shared checks need to be replaced with !info->executable. For the TLS relocations, even when the executable is position independent, the offsets within the PIE's TLS block are known at link time and so relocations like R_X86_64_TPOFF32 can be relocated fully at link time. While this is now fixed on i?86/x86_64 and perhaps ppc/ppc64, it isn't fixed on s390/s390x. See https://bugzilla.redhat.com/show_bug.cgi?id=872148
(In reply to Jakub Jelinek from comment #0) > While this is now fixed on i?86/x86_64 and perhaps ppc/ppc64, it isn't fixed > on s390/s390x. See https://bugzilla.redhat.com/show_bug.cgi?id=872148 Should be fixed with: https://sourceware.org/ml/binutils/2014-09/msg00067.html