This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[ARC PATCH 3/3] TLS: DTPOFF can accept offsets, stored into addendum. Remove the need of base
- From: Cupertino Miranda <Cupertino dot Miranda at synopsys dot com>
- To: binutils at sourceware dot org
- Cc: Claudiu dot Zissulescu at synopsys dot com, Francois dot Bedard at synopsys dot com, Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>
- Date: Tue, 5 Jul 2016 17:17:20 +0200
- Subject: [ARC PATCH 3/3] TLS: DTPOFF can accept offsets, stored into addendum. Remove the need of base
- Authentication-results: sourceware.org; auth=none
- References: <20160705151720.5448-1-cmiranda@synopsys.com>
From: Claudiu Zissulescu <claziss@synopsys.com>
2016-07-05 Claudiu Zissulescu <claziss@synopsys.com>
* config/tc-arc.c (arc_reloc_op_tag): Allow complex ops for dtpoff.
(tc_gen_reloc): Change.
---
gas/config/tc-arc.c | 25 ++-----------------------
1 file changed, 2 insertions(+), 23 deletions(-)
diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c
index 2046604..70886dd 100644
--- a/gas/config/tc-arc.c
+++ b/gas/config/tc-arc.c
@@ -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;
}
--
2.9.0