From 84fdbf1a2c901965414eafc96e3bd15fc72ac123 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 6 Nov 2018 16:06:52 +0000 Subject: [PATCH] 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 * 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 | 11 ++++++++++- 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(+), 1 deletion(-) 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 401b7f13396..273fbc8b23b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2018-11-06 H.J. Lu + + PR ld/23818 + * elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols + defined in discarded input sections. + 2018-09-12 H.J. Lu PR ld/23499 diff --git a/bfd/elflink.c b/bfd/elflink.c index 02618bed8fe..46091b63411 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -2358,10 +2358,19 @@ _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); diff --git a/ld/ChangeLog b/ld/ChangeLog index fb979d737d3..326f7163047 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2018-11-06 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-08-12 H.J. Lu * testsuite/ld-x86-64/pr23486b.d: Swap pr23486a.s and pr23486a.s. diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index 7c50b0f1021..4ce74f25878 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.47.2