TLS: DTPOFF can accept offsets, stored into addendum. Remove the need of base
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>
This commit is contained in:
parent
b9316f5985
commit
05bbf0164a
2 changed files with 8 additions and 23 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue