2004-10-01 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 2 Oct 2004 00:18:31 +0000 (00:18 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 2 Oct 2004 00:18:31 +0000 (00:18 +0000)
* config/tc-ppc.c (md_apply_fix3): Call S_SET_THREAD_LOCAL for
TLS relocations.
* config/tc-s390.c (md_apply_fix3): Likewise.
* config/tc-sparc.c (md_apply_fix3): Likewise.

gas/ChangeLog
gas/config/tc-ppc.c
gas/config/tc-s390.c
gas/config/tc-sparc.c

index 3f8fff4a1b358dab46a3bb8315d88348ee20cc33..78febb83bd3696fb4f13f98abe08529a52e1c645 100644 (file)
@@ -1,3 +1,10 @@
+2004-10-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/tc-ppc.c (md_apply_fix3): Call S_SET_THREAD_LOCAL for
+       TLS relocations.
+       * config/tc-s390.c (md_apply_fix3): Likewise.
+       * config/tc-sparc.c (md_apply_fix3): Likewise.
+
 2004-10-01  Paul Brook  <paul@codesourcery.com>
 
        * config/tc-arm.c (arm_elf_section_type): New function.
index eb119ea6823ba6b5abc980e7b069677f93d6b490..410c0f2278851b8441085f306800574321102d25 100644 (file)
@@ -5846,6 +5846,8 @@ md_apply_fix3 (fixP, valP, seg)
          break;
 
        case BFD_RELOC_PPC_TLS:
+         break;
+
        case BFD_RELOC_PPC_DTPMOD:
        case BFD_RELOC_PPC_TPREL16:
        case BFD_RELOC_PPC_TPREL16_LO:
@@ -5885,6 +5887,7 @@ md_apply_fix3 (fixP, valP, seg)
        case BFD_RELOC_PPC64_DTPREL16_HIGHERA:
        case BFD_RELOC_PPC64_DTPREL16_HIGHEST:
        case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:
+         S_SET_THREAD_LOCAL (fixP->fx_addsy);
          break;
 #endif
          /* Because SDA21 modifies the register field, the size is set to 4
index 02427283d9e7e8f1dc719d2e1cedbdf89937aa9c..83b671d7beda6afce5fae8ba95311b207090c4ec 100644 (file)
@@ -2217,10 +2217,12 @@ md_apply_fix3 (fixP, valP, seg)
        case BFD_RELOC_390_TLS_DTPMOD:
        case BFD_RELOC_390_TLS_DTPOFF:
        case BFD_RELOC_390_TLS_TPOFF:
+         S_SET_THREAD_LOCAL (fixP->fx_addsy);
          /* Fully resolved at link time.  */
          break;
        case BFD_RELOC_390_TLS_IEENT:
          /* Fully resolved at link time.  */
+         S_SET_THREAD_LOCAL (fixP->fx_addsy);
          value += 2;
          break;
 
index ba6b4ed5689a0834cc91c4344c9cb22737a9bc1c..da10db2f575e2a1f14c14e6b1e33e5b3121c71e2 100644 (file)
@@ -3012,7 +3012,41 @@ md_apply_fix3 (fixP, valP, segment)
 #ifdef OBJ_ELF
   /* SPARC ELF relocations don't use an addend in the data field.  */
   if (fixP->fx_addsy != NULL)
-    return;
+    {
+      switch (fixP->fx_r_type)
+       {
+       case BFD_RELOC_SPARC_TLS_GD_HI22:
+       case BFD_RELOC_SPARC_TLS_GD_LO10:
+       case BFD_RELOC_SPARC_TLS_GD_ADD:
+       case BFD_RELOC_SPARC_TLS_GD_CALL:
+       case BFD_RELOC_SPARC_TLS_LDM_HI22:
+       case BFD_RELOC_SPARC_TLS_LDM_LO10:
+       case BFD_RELOC_SPARC_TLS_LDM_ADD:
+       case BFD_RELOC_SPARC_TLS_LDM_CALL:
+       case BFD_RELOC_SPARC_TLS_LDO_HIX22:
+       case BFD_RELOC_SPARC_TLS_LDO_LOX10:
+       case BFD_RELOC_SPARC_TLS_LDO_ADD:
+       case BFD_RELOC_SPARC_TLS_IE_HI22:
+       case BFD_RELOC_SPARC_TLS_IE_LO10:
+       case BFD_RELOC_SPARC_TLS_IE_LD:
+       case BFD_RELOC_SPARC_TLS_IE_LDX:
+       case BFD_RELOC_SPARC_TLS_IE_ADD:
+       case BFD_RELOC_SPARC_TLS_LE_HIX22:
+       case BFD_RELOC_SPARC_TLS_LE_LOX10:
+       case BFD_RELOC_SPARC_TLS_DTPMOD32:
+       case BFD_RELOC_SPARC_TLS_DTPMOD64:
+       case BFD_RELOC_SPARC_TLS_DTPOFF32:
+       case BFD_RELOC_SPARC_TLS_DTPOFF64:
+       case BFD_RELOC_SPARC_TLS_TPOFF32:
+       case BFD_RELOC_SPARC_TLS_TPOFF64:
+         S_SET_THREAD_LOCAL (fixP->fx_addsy);
+
+       default:
+         break;
+       }
+
+      return;
+    }
 #endif
 
   /* This is a hack.  There should be a better way to