Fix ARC TLS support.
authorClaudiu Zissulescu <claziss@synopsys.com>
Mon, 1 Feb 2016 17:03:56 +0000 (17:03 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 1 Feb 2016 17:03:56 +0000 (17:03 +0000)
       * 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.

gas/ChangeLog
gas/config/tc-arc.c
gas/testsuite/gas/arc/tls-relocs1.d [new file with mode: 0644]
gas/testsuite/gas/arc/tls-relocs1.s [new file with mode: 0644]

index 6e7319d96c2a035155e8de6a71ab901721bf8f04..d219d4274062c8cd8ec0b87be52974978d7a6d9c 100644 (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
index 40ba0ad18fa41a6e699f4f54d09c6fd7e28444b6..20a48f7a751b898392f9dd9ad7fd4e366d7214d4 100644 (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:
diff --git a/gas/testsuite/gas/arc/tls-relocs1.d b/gas/testsuite/gas/arc/tls-relocs1.d
new file mode 100644 (file)
index 0000000..3944874
--- /dev/null
@@ -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
diff --git a/gas/testsuite/gas/arc/tls-relocs1.s b/gas/testsuite/gas/arc/tls-relocs1.s
new file mode 100644 (file)
index 0000000..fc71e66
--- /dev/null
@@ -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
This page took 0.030107 seconds and 4 git commands to generate.