From d664fd41e15f058aab41b70c567ad09f2fab1115 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 11 Jan 2018 15:36:40 -0800 Subject: [PATCH] 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/ChangeLog | 6 +++++ bfd/elflink.c | 2 +- ld/ChangeLog | 9 +++++++ ld/testsuite/ld-elf/pr22649-1.s | 4 +++ ld/testsuite/ld-elf/pr22649-2a.s | 8 ++++++ ld/testsuite/ld-elf/pr22649-2b.s | 7 +++++ ld/testsuite/ld-elf/pr22649.msg | 1 + ld/testsuite/ld-elf/shared.exp | 45 ++++++++++++++++++++++++++++++++ 8 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-elf/pr22649-1.s create mode 100644 ld/testsuite/ld-elf/pr22649-2a.s create mode 100644 ld/testsuite/ld-elf/pr22649-2b.s create mode 100644 ld/testsuite/ld-elf/pr22649.msg diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8f2feae455b..5ceb5a0e661 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2018-01-11 H.J. Lu + + PR ld/22649 + * elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Ignore dynamic + references on forced local symbols. + 2018-01-11 H.J. Lu PR ld/22677 diff --git a/bfd/elflink.c b/bfd/elflink.c index 4c92a048cea..e3751fa122c 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 diff --git a/ld/ChangeLog b/ld/ChangeLog index 34fdb1f031d..977d779d264 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2018-01-11 H.J. Lu + + 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. + 2018-01-11 H.J. Lu PR ld/22677 diff --git a/ld/testsuite/ld-elf/pr22649-1.s b/ld/testsuite/ld-elf/pr22649-1.s new file mode 100644 index 00000000000..9a7da7e9194 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22649-1.s @@ -0,0 +1,4 @@ + .data + .globl foo +foo: + .dc.a bar diff --git a/ld/testsuite/ld-elf/pr22649-2a.s b/ld/testsuite/ld-elf/pr22649-2a.s new file mode 100644 index 00000000000..b5908b061c0 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22649-2a.s @@ -0,0 +1,8 @@ + .data + .hidden foo + .hidden bar + .globl foo + .globl bar +foo: +bar: + .dc.a foo diff --git a/ld/testsuite/ld-elf/pr22649-2b.s b/ld/testsuite/ld-elf/pr22649-2b.s new file mode 100644 index 00000000000..999686cb658 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22649-2b.s @@ -0,0 +1,7 @@ + .data + .hidden foo + .globl foo + .globl bar +foo: +bar: + .dc.a foo diff --git a/ld/testsuite/ld-elf/pr22649.msg b/ld/testsuite/ld-elf/pr22649.msg new file mode 100644 index 00000000000..b4e45bd6627 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22649.msg @@ -0,0 +1 @@ +.*: Removing unused section '\.data' in file 'tmpdir/pr22649-2.*\.o' diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index 0c545688796..95bac379001 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -81,6 +81,51 @@ run_ld_link_tests [list \ {} \ "pr22471" \ ] \ + [list \ + "Build pr22649-1.so" \ + "$LFLAGS -shared" \ + "" \ + "$AFLAGS_PIC" \ + {pr22649-1.s} \ + {} \ + "pr22649-1.so" \ + ] \ + [list \ + "Build pr22649-2a.so" \ + "$LFLAGS -shared -gc-sections -print-gc-sections" \ + "" \ + "$AFLAGS_PIC" \ + {pr22649-2a.s} \ + {{ld pr22649.msg}} \ + "pr22649-2a.so" \ + ] \ + [list \ + "Build pr22649-2b.so" \ + "$LFLAGS -shared -gc-sections -print-gc-sections" \ + "tmpdir/pr22649-1.so" \ + "$AFLAGS_PIC" \ + {pr22649-2a.s} \ + {{ld pr22649.msg}} \ + "pr22649-2b.so" \ + ] \ + [list \ + "Build pr22649-2c.so" \ + "$LFLAGS -shared -gc-sections -print-gc-sections" \ + "" \ + "$AFLAGS_PIC" \ + {pr22649-2b.s} \ + {} \ + "pr22649-2b.so" \ + ] \ + [list \ + "Build pr22649-2d.so" \ + "$LFLAGS -shared -gc-sections -print-gc-sections" \ + "tmpdir/pr22649-1.so" \ + "$AFLAGS_PIC" \ + {pr22649-2b.s} \ + {} \ + "pr22649-2b.so" \ + ] \ ] run_ld_link_tests [list \ -- 2.30.2