S/390: Don't replace R_390_TLS_LE32/64 with R_390_TLS_TPOFF for PIE.
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Fri, 19 Sep 2014 10:44:54 +0000 (12:44 +0200)
committerAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Fri, 19 Sep 2014 10:46:50 +0000 (12:46 +0200)
bfd:

2014-09-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

* elf32-s390.c: Don't replace R_390_TLS_LE32 with R_390_TLS_TPOFF
for PIE.
* elf64-s390.c: Don't replace R_390_TLS_LE64 with R_390_TLS_TPOFF
for PIE.

bfd/ChangeLog
bfd/elf32-s390.c
bfd/elf64-s390.c

index b2e6140..12797b5 100644 (file)
@@ -1,3 +1,10 @@
+2014-09-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * elf32-s390.c: Don't replace R_390_TLS_LE32 with R_390_TLS_TPOFF
+       for PIE.
+       * elf64-s390.c: Don't replace R_390_TLS_LE64 with R_390_TLS_TPOFF
+       for PIE.
+
 2014-09-18  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        PR gdb/17407
index 11c726f..ebcb028 100644 (file)
@@ -1250,6 +1250,12 @@ elf_s390_check_relocs (bfd *abfd,
          /* Fall through.  */
 
        case R_390_TLS_LE32:
+         /* For static linking and executables this reloc will be
+            calculated at linktime otherwise a TLS_TPOFF runtime
+            reloc will be generated.  */
+         if (r_type == R_390_TLS_LE32 && info->pie)
+           break;
+
          if (!info->shared)
            break;
          info->flags |= DF_STATIC_TLS;
@@ -3104,7 +3110,7 @@ elf_s390_relocate_section (bfd *output_bfd,
          break;
 
        case R_390_TLS_LE32:
-         if (info->shared)
+         if (info->shared && !info->pie)
            {
              /* Linking a shared library with non-fpic code requires
                 a R_390_TLS_TPOFF relocation.  */
index d7b2f08..b2f1aa5 100644 (file)
@@ -1183,6 +1183,12 @@ elf_s390_check_relocs (bfd *abfd,
          /* Fall through */
 
        case R_390_TLS_LE64:
+         /* For static linking and executables this reloc will be
+            calculated at linktime otherwise a TLS_TPOFF runtime
+            reloc will be generated.  */
+         if (r_type == R_390_TLS_LE64 && info->pie)
+           break;
+
          if (!info->shared)
            break;
          info->flags |= DF_STATIC_TLS;
@@ -3074,7 +3080,7 @@ elf_s390_relocate_section (bfd *output_bfd,
          break;
 
        case R_390_TLS_LE64:
-         if (info->shared)
+         if (info->shared && !info->pie)
            {
              /* Linking a shared library with non-fpic code requires
                 a R_390_TLS_TPOFF relocation.  */