From 0a640d719684f25bdb88ae60148c6978e6131701 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 24 Oct 2018 18:08:13 -0700 Subject: [PATCH] ELF: Hide symbols defined in discarded input sections When assigning symbol version, we should hide debug symbols defined in discarded sections from IR objects so that they can be removed later. bfd/ PR ld/23818 * elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols defined in discarded input sections. ld/ PR ld/23818 * testsuite/ld-plugin/lto.exp: Run PR ld/23818 test. * testsuite/ld-plugin/pr23818.d: New file. * testsuite/ld-plugin/pr23818.t: Likewise. * testsuite/ld-plugin/pr23818a.c: Likewise. * testsuite/ld-plugin/pr23818b.c: Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/elflink.c | 12 ++++++++++-- ld/ChangeLog | 9 +++++++++ ld/testsuite/ld-plugin/lto.exp | 6 ++++++ ld/testsuite/ld-plugin/pr23818.d | 4 ++++ ld/testsuite/ld-plugin/pr23818.t | 4 ++++ ld/testsuite/ld-plugin/pr23818a.c | 4 ++++ ld/testsuite/ld-plugin/pr23818b.c | 7 +++++++ 8 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 ld/testsuite/ld-plugin/pr23818.d create mode 100644 ld/testsuite/ld-plugin/pr23818.t create mode 100644 ld/testsuite/ld-plugin/pr23818a.c create mode 100644 ld/testsuite/ld-plugin/pr23818b.c diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7e9fb6837c5..0959688f616 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2018-10-24 H.J. Lu + + PR ld/23818 + * elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols + defined in discarded input sections. + 2018-10-24 Alan Modra * elf32-arm.c (elf32_arm_size_stubs): Ignore as-needed libs that diff --git a/bfd/elflink.c b/bfd/elflink.c index 87440db9605..4eca389bd18 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -2359,13 +2359,21 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) return FALSE; } + bed = get_elf_backend_data (info->output_bfd); + /* We only need version numbers for symbols defined in regular objects. */ if (!h->def_regular) - return TRUE; + { + /* Hide symbols defined in discarded input sections. */ + if ((h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && discarded_section (h->root.u.def.section)) + (*bed->elf_backend_hide_symbol) (info, h, TRUE); + return TRUE; + } hide = FALSE; - bed = get_elf_backend_data (info->output_bfd); p = strchr (h->root.root.string, ELF_VER_CHR); if (p != NULL && h->verinfo.vertree == NULL) { diff --git a/ld/ChangeLog b/ld/ChangeLog index f0a373d036b..60265758c7f 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2018-10-24 H.J. Lu + + PR ld/23818 + * testsuite/ld-plugin/lto.exp: Run PR ld/23818 test. + * testsuite/ld-plugin/pr23818.d: New file. + * testsuite/ld-plugin/pr23818.t: Likewise. + * testsuite/ld-plugin/pr23818a.c: Likewise. + * testsuite/ld-plugin/pr23818b.c: Likewise. + 2018-10-23 Alan Modra * testsuite/ld-elf/shared.exp: Don't build pr19073 test on alpha. diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index 18829fdd64a..008bde79de7 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -219,6 +219,12 @@ set lto_link_tests [list \ [list "Build pr22751.a" \ "$plug_opt" "-flto $lto_no_fat $INT128_CFLAGS" \ {pr22751.c} {} "pr22751.a"] \ + [list "Build libpr23818.so" \ + "-shared -flto -g -Wl,-version-script,pr23818.t" \ + "-g -flto $lto_fat" \ + {pr23818a.c pr23818b.c} \ + {{"readelf" {-s --wide} "pr23818.d"}} \ + "libpr23818.so"] \ ] if { [at_least_gcc_version 4 7] } { diff --git a/ld/testsuite/ld-plugin/pr23818.d b/ld/testsuite/ld-plugin/pr23818.d new file mode 100644 index 00000000000..5753cd64fd7 --- /dev/null +++ b/ld/testsuite/ld-plugin/pr23818.d @@ -0,0 +1,4 @@ +#failif +#... +.*0+ +[A-Z]+ +GLOBAL +DEFAULT +ABS foo +#... diff --git a/ld/testsuite/ld-plugin/pr23818.t b/ld/testsuite/ld-plugin/pr23818.t new file mode 100644 index 00000000000..45bca5580e6 --- /dev/null +++ b/ld/testsuite/ld-plugin/pr23818.t @@ -0,0 +1,4 @@ +{ + global: bar; + local: *; +}; diff --git a/ld/testsuite/ld-plugin/pr23818a.c b/ld/testsuite/ld-plugin/pr23818a.c new file mode 100644 index 00000000000..5b5ccbf7cbf --- /dev/null +++ b/ld/testsuite/ld-plugin/pr23818a.c @@ -0,0 +1,4 @@ +void +foo () +{ +} diff --git a/ld/testsuite/ld-plugin/pr23818b.c b/ld/testsuite/ld-plugin/pr23818b.c new file mode 100644 index 00000000000..d4be333a39e --- /dev/null +++ b/ld/testsuite/ld-plugin/pr23818b.c @@ -0,0 +1,7 @@ +void foo (void); + +void +bar (void) +{ + foo (); +} -- 2.30.2