Fix ARC TLS support.
* config/tc-arc.c (md_apply_fix): Allow addendum. (arc_reloc_op): Allow complex expressions for tpoff. (md_apply_fix): Handle resolved TLS local symbol. * gas/arc/tls-relocs1.d: New file. * gas/arc/tls-relocs1.s: Likewise.
This commit is contained in:
parent
4f1d62057f
commit
b125bd1727
4 changed files with 54 additions and 2 deletions
|
@ -1,3 +1,12 @@
|
|||
2016-01-26 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* config/tc-arc.c (md_apply_fix): Allow addendum.
|
||||
(arc_reloc_op): Allow complex expressions for tpoff.
|
||||
(md_apply_fix): Handle resolved TLS local symbol.
|
||||
|
||||
* testsuite/gas/arc/tls-relocs1.d: New file.
|
||||
* testsuite/gas/arc/tls-relocs1.s: Likewise.
|
||||
|
||||
2016-02-01 Loria <Loria@phantasia.org>
|
||||
|
||||
PR target/19311
|
||||
|
|
|
@ -363,7 +363,7 @@ static const struct arc_reloc_op_tag
|
|||
DEF (tlsgd, BFD_RELOC_ARC_TLS_GD_GOT, 0),
|
||||
DEF (tlsie, BFD_RELOC_ARC_TLS_IE_GOT, 0),
|
||||
DEF (tpoff9, BFD_RELOC_ARC_TLS_LE_S9, 0),
|
||||
DEF (tpoff, BFD_RELOC_ARC_TLS_LE_32, 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),
|
||||
};
|
||||
|
@ -1301,7 +1301,8 @@ md_apply_fix (fixS *fixP,
|
|||
{
|
||||
case BFD_RELOC_ARC_TLS_DTPOFF:
|
||||
case BFD_RELOC_ARC_TLS_LE_32:
|
||||
fixP->fx_offset = 0;
|
||||
if (fixP->fx_done)
|
||||
break;
|
||||
/* Fall through. */
|
||||
case BFD_RELOC_ARC_TLS_GD_GOT:
|
||||
case BFD_RELOC_ARC_TLS_IE_GOT:
|
||||
|
@ -1363,6 +1364,12 @@ md_apply_fix (fixS *fixP,
|
|||
from ld rx,[pcl,@sym@gotpc] to add rx,pcl,@sym@gotpc. */
|
||||
as_bad (_("Unsupported operation on reloc"));
|
||||
return;
|
||||
|
||||
case BFD_RELOC_ARC_TLS_DTPOFF:
|
||||
case BFD_RELOC_ARC_TLS_LE_32:
|
||||
gas_assert (!fixP->fx_addsy);
|
||||
gas_assert (!fixP->fx_subsy);
|
||||
|
||||
case BFD_RELOC_ARC_GOTOFF:
|
||||
case BFD_RELOC_ARC_32_ME:
|
||||
case BFD_RELOC_ARC_PC32:
|
||||
|
|
12
gas/testsuite/gas/arc/tls-relocs1.d
Normal file
12
gas/testsuite/gas/arc/tls-relocs1.d
Normal file
|
@ -0,0 +1,12 @@
|
|||
#as: -mcpu=archs
|
||||
#objdump: -dr
|
||||
|
||||
.*: +file format .*arc.*
|
||||
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
00000000 <foo>:
|
||||
0: 2100 3f82 0000 0000 add r2,r25,0
|
||||
4: R_ARC_TLS_LE_32 a\+0x30
|
||||
8: 2000 0f80 0000 003c add r0,r0,0x3c
|
24
gas/testsuite/gas/arc/tls-relocs1.s
Normal file
24
gas/testsuite/gas/arc/tls-relocs1.s
Normal file
|
@ -0,0 +1,24 @@
|
|||
;;; TLS tests: check tpoff addendum and resolving local TLS symbols.
|
||||
|
||||
.cpu HS
|
||||
.global a
|
||||
.section .tbss,"awT",@nobits
|
||||
.align 4
|
||||
.type a, @object
|
||||
.size a, 60
|
||||
a:
|
||||
.zero 60
|
||||
|
||||
.type local_tls_var, @object
|
||||
.size local_tls_var, 4
|
||||
local_tls_var:
|
||||
.zero 4
|
||||
|
||||
|
||||
.section .text
|
||||
.align 4
|
||||
foo:
|
||||
;;; Test if the tpoff addendum is correctly generated.
|
||||
add r2,r25,@a@tpoff+48
|
||||
;;; Test if local TLS symbol is correctly resolved.
|
||||
add r0,r0,@local_tls_var@dtpoff@.tbss
|
Loading…
Add table
Reference in a new issue