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.
This commit is contained in:
H.J. Lu 2018-10-24 18:08:13 -07:00
parent 0e139b8787
commit 0a640d7196
8 changed files with 50 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2018-10-24 H.J. Lu <hongjiu.lu@intel.com>
PR ld/23818
* elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols
defined in discarded input sections.
2018-10-24 Alan Modra <amodra@gmail.com>
* elf32-arm.c (elf32_arm_size_stubs): Ignore as-needed libs that

View File

@ -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)
{

View File

@ -1,3 +1,12 @@
2018-10-24 H.J. Lu <hongjiu.lu@intel.com>
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 <amodra@gmail.com>
* testsuite/ld-elf/shared.exp: Don't build pr19073 test on alpha.

View File

@ -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] } {

View File

@ -0,0 +1,4 @@
#failif
#...
.*0+ +[A-Z]+ +GLOBAL +DEFAULT +ABS foo
#...

View File

@ -0,0 +1,4 @@
{
global: bar;
local: *;
};

View File

@ -0,0 +1,4 @@
void
foo ()
{
}

View File

@ -0,0 +1,7 @@
void foo (void);
void
bar (void)
{
foo ();
}