From d664fd41e15f058aab41b70c567ad09f2fab1115 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 11 Jan 2018 15:36:40 -0800 Subject: Ignore dynamic references on forced local symbols We should ignore dynamic references on forced local symbols during garbage collection since they can never be referenced dynamically. bfd/ PR ld/22649 * elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Ignore dynamic references on forced local symbols. ld/ PR ld/22649 * testsuite/ld-elf/pr22649-1.s: New file. * testsuite/ld-elf/pr22649-2a.s: Likewise. * testsuite/ld-elf/pr22649-2b.s: Likewise. * testsuite/ld-elf/pr22649.msg: Likewise. * testsuite/ld-elf/shared.exp: Run ld/22649 tests. --- bfd/elflink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bfd/elflink.c') diff --git a/bfd/elflink.c b/bfd/elflink.c index 4c92a04..e3751fa 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -13277,7 +13277,7 @@ bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf) if ((h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) - && (h->ref_dynamic + && ((h->ref_dynamic && !h->forced_local) || ((h->def_regular || ELF_COMMON_DEF_P (h)) && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN -- cgit v1.1