+2018-01-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/22721
+ * elfxx-x86.c (_bfd_x86_elf_link_check_relocs): Check the
+ versioned __tls_get_addr symbol.
+
2018-01-19 Nick Clifton <nickc@redhat.com>
* po/fr.po: Updated French translation.
htab->tls_get_addr,
FALSE, FALSE, FALSE);
if (h != NULL)
- elf_x86_hash_entry (h)->tls_get_addr = 1;
+ {
+ elf_x86_hash_entry (h)->tls_get_addr = 1;
+
+ /* Check the versioned __tls_get_addr symbol. */
+ while (h->root.type == bfd_link_hash_indirect)
+ {
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ elf_x86_hash_entry (h)->tls_get_addr = 1;
+ }
+ }
/* "__ehdr_start" will be defined by linker as a hidden symbol
later if it is referenced and not defined. */
+2018-01-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/22721
+ * testsuite/ld-plugin/lto.exp: Run PR ld/22721 tests.
+ * testsuite/ld-plugin/pr22721.t: New file.
+ * testsuite/ld-plugin/pr22721a.s: Likewise.
+ * testsuite/ld-plugin/pr22721b.c: Likewise.
+
2018-01-18 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/ld-elf/group1.d: Also xfail Solaris.
} {
fail $testname
}
+
+ run_cc_link_tests [list \
+ [list \
+ "Build pr22721a.so" \
+ "-shared -nostdlib -nostartfiles -Wl,-version-script,pr22721.t" \
+ "" \
+ {pr22721a.s} \
+ {} \
+ "pr22721a.so" \
+ ] \
+ [list \
+ "Build pr22721b.o" \
+ "$plug_opt" \
+ "-O2 -fPIC -flto $lto_no_fat" \
+ {pr22721b.c} \
+ ] \
+ [list \
+ "Build PR ld/pr22721" \
+ "-O2 -flto -fuse-linker-plugin -nostdlib -nostartfiles \
+ -Wl,-e,_start tmpdir/pr22721b.o tmpdir/pr22721a.so" \
+ "" \
+ {dummy.c} \
+ {} \
+ "pr22721.exe"
+ ] \
+ ]
}
set testname "PR ld/12942 (3)"
set exec_output [run_host_cmd "$CXX" "-O2 -flto -fuse-linker-plugin tmpdir/pr12942b.o tmpdir/pr12942a.o"]
--- /dev/null
+SUNWprivate_1.1 {
+global:
+ __tls_get_addr;
+ ___tls_get_addr;
+local:
+ *;
+};
--- /dev/null
+ .text
+ .globl __tls_get_addr
+ .globl ___tls_get_addr
+ .type __tls_get_addr,%function
+ .set ___tls_get_addr, __tls_get_addr
+__tls_get_addr:
+ .byte 0
+ .size __tls_get_addr, .-__tls_get_addr
--- /dev/null
+__thread int foo_var = 1;
+
+int
+_start (void)
+{
+ return foo_var;
+}