TLS: DTPOFF can accept offsets, stored into addendum. Remove the need of base
authorClaudiu Zissulescu <claziss@synopsys.com>
Thu, 30 Jun 2016 13:11:57 +0000 (15:11 +0200)
committerClaudiu Zissulescu <claziss@synopsys.com>
Mon, 11 Jul 2016 13:24:46 +0000 (15:24 +0200)
gas/ChangeLog:

2016-07-05  Claudiu Zissulescu  <claziss@synopsys.com>

  * config/tc-arc.c (arc_reloc_op_tag): Allow complex ops for dtpoff.
  (tc_gen_reloc): Remove passing DTPOFF base info into reloc addendum as it is
  no longer needed.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
gas/ChangeLog
gas/config/tc-arc.c

index d4f2e9b72cecba885aa891dfb386f24638ae6ccd..da041999472ff819ac5851153907b2235689e23c 100644 (file)
@@ -1,3 +1,9 @@
+2016-07-11  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       * config/tc-arc.c (arc_reloc_op_tag): Allow complex ops for dtpoff.
+       (tc_gen_reloc): Remove passing DTPOFF base info into reloc addendum
+       as it is no longer needed.
+
 2016-07-04  Jan Beulich  <jbeulich@suse.com>
 
        * config/tc-i386.c (check_qword_reg): Correct register kind
index 2046604d76d65ed139eb50a20fc23ff6c67eca4c..70886dd55e59bcfc712429b866279df5fa71119e 100644 (file)
@@ -502,7 +502,7 @@ static const struct arc_reloc_op_tag
   DEF (tpoff9,  BFD_RELOC_ARC_TLS_LE_S9,       0),
   DEF (tpoff,   BFD_RELOC_ARC_TLS_LE_32,       1),
   DEF (dtpoff9, BFD_RELOC_ARC_TLS_DTPOFF_S9,   0),
-  DEF (dtpoff,  BFD_RELOC_ARC_TLS_DTPOFF,      0),
+  DEF (dtpoff,  BFD_RELOC_ARC_TLS_DTPOFF,      1),
 };
 
 static const int arc_num_reloc_op
@@ -3130,28 +3130,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED,
 
   gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative);
 
-  if (code == BFD_RELOC_ARC_TLS_DTPOFF
-      || code ==  BFD_RELOC_ARC_TLS_DTPOFF_S9)
-    {
-      asymbol *sym
-       = fixP->fx_subsy ? symbol_get_bfdsym (fixP->fx_subsy) : NULL;
-      /* We just want to store a 24 bit index, but we have to wait
-        till after write_contents has been called via
-        bfd_map_over_sections before we can get the index from
-        _bfd_elf_symbol_from_bfd_symbol.  Thus, the write_relocs
-        function is elf32-arc.c has to pick up the slack.
-        Unfortunately, this leads to problems with hosts that have
-        pointers wider than long (bfd_vma).  There would be various
-        ways to handle this, all error-prone :-(  */
-      reloc->addend = (bfd_vma) sym;
-      if ((asymbol *) reloc->addend != sym)
-       {
-         as_bad ("Can't store pointer\n");
-         return NULL;
-       }
-    }
-  else
-    reloc->addend = fixP->fx_offset;
+  reloc->addend = fixP->fx_offset;
 
   return reloc;
 }
This page took 0.027689 seconds and 4 git commands to generate.