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:
Claudiu Zissulescu 2016-02-01 17:03:56 +00:00 committed by Nick Clifton
parent 4f1d62057f
commit b125bd1727
4 changed files with 54 additions and 2 deletions

View File

@ -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

View File

@ -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:

View 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

View 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