Dynamic TLS GOT entries would not be relocated.
authorCupertino Miranda <cmiranda@synopsys.com>
Thu, 21 Jul 2016 13:32:35 +0000 (15:32 +0200)
committerCupertino Miranda <cmiranda@synopsys.com>
Fri, 26 Aug 2016 10:09:17 +0000 (12:09 +0200)
Forgot to set should_relocate to TRUE in case of GOT and TLS relocations of
undefined symbols for shared libraries.
In dynamic libraries if symbol is not known the instruction relocation would
not be resolved to point to the respective .got entry.
A test was created to detect similar future mistakes.

bfd/ChangeLog:

Cupertino Miranda  <cmiranda@synopsys.com>

* elf32-arc.c (elf_arc_relocate_section): Changed. Set should_relocate
to TRUE for GOT and TLS relocs.

ld/ChangeLog:

Cupertino Miranda  <cmiranda@synopsys.com>

* ld/testsuite/ld-arc/tls_gd-01.s: Added a testcase for this patch.
* ld/testsuite/ld-arc/tls_gd-01.d: Likewise.

bfd/ChangeLog
bfd/elf32-arc.c
ld/ChangeLog
ld/testsuite/ld-arc/tls_gd-01.d [new file with mode: 0644]
ld/testsuite/ld-arc/tls_gd-01.s [new file with mode: 0644]

index 169b8b5e270fec6fcce37b48505eca59cdcd713d..3d4dc40a33f354827957593a67b674748427d5c9 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-26  Cupertino Miranda  <cmiranda@synopsys.com>
+
+       * elf32-arc.c (elf_arc_relocate_section): Changed. Set should_relocate
+       to TRUE for GOT and TLS relocs.
+
 2016-08-26  Cupertino Miranda  <cmiranda@synospsys.com>
 
        * elf32-arc.c (elf_arc_finish_dynamic_sections): Changed.
index 5ba170e7fa69dc0fed690123ee6b8335206223e5..b726dab960d0aba56c2bd1813aba1d41a41637ba 100644 (file)
@@ -1374,6 +1374,8 @@ elf_arc_relocate_section (bfd *                     output_bfd,
       if ((is_reloc_for_GOT (howto)
           || is_reloc_for_TLS (howto)))
        {
+         reloc_data.should_relocate = TRUE;
+
          struct got_entry **list
            = get_got_entry_list_for_symbol (output_bfd, r_symndx, h);
 
index 76c28631ff15015d34f067a448afb0c4779c8c7d..bf186c5d26158173c601ec6c97e2ab0906b2e8da 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-26  Cupertino Miranda  <cmiranda@synopsys.com>
+
+       * ld/testsuite/ld-arc/tls_gd-01.s: Added a testcase for this patch.
+       * ld/testsuite/ld-arc/tls_gd-01.d: Likewise.
+
 2016-08-26  Cupertino Miranda  <cmiranda@synopsys.com>
 
        * testsuite/ld-arc/tls_ie-01.s: Added to verify associated fix.
diff --git a/ld/testsuite/ld-arc/tls_gd-01.d b/ld/testsuite/ld-arc/tls_gd-01.d
new file mode 100644 (file)
index 0000000..f7027af
--- /dev/null
@@ -0,0 +1,13 @@
+#source: tls_gd-01.s
+#as: -mcpu=arc700
+#ld: -shared
+#objdump: -d
+
+[^:]+:     file format elf32-littlearc
+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <__start>:
+ [0-9a-f]+:    2700 7f80 0000 2080     add     r0,pcl,0x2080
+ [0-9a-f]+:    2700 7f80 0000 2080     add     r0,pcl,0x2080
diff --git a/ld/testsuite/ld-arc/tls_gd-01.s b/ld/testsuite/ld-arc/tls_gd-01.s
new file mode 100644 (file)
index 0000000..5fbfc54
--- /dev/null
@@ -0,0 +1,7 @@
+       .text
+       .align 4
+
+        .global __start
+__start:
+       add r0, pcl, @baz@tlsgd
+       add r0, pcl, @bar@tlsgd