Commit 2c4995ba authored by H.J. Lu's avatar H.J. Lu

ld: Set non_ir_ref_regular for --undefined SYMBOL

Set non_ir_ref_regular to TRUE for symbols forced into the output file
so that they won't be removed by garbage collection with LTO.

	PR ld/23309
	* ldlang.c (insert_undefined): Set non_ir_ref_regular to TRUE.
	* plugin.c (is_visible_from_outside): Don't scan entry_symbol.
	* testsuite/ld-plugin/pr23309.c: New file.
	* testsuite/ld-plugin/pr23309.d: Likewise.

(cherry picked from commit 94d401b8)
parent 3839e940
2018-07-05 H.J. Lu <hongjiu.lu@intel.com>
PR ld/23309
* ldlang.c (insert_undefined): Set non_ir_ref_regular to TRUE.
* plugin.c (is_visible_from_outside): Don't scan entry_symbol.
* testsuite/ld-plugin/pr23309.c: New file.
* testsuite/ld-plugin/pr23309.d: Likewise.
2018-07-05 Nick Clifton <nickc@redhat.com>
* po/bg.po: Updated Bulgarian translation.
......
......@@ -3413,6 +3413,7 @@ insert_undefined (const char *name)
{
h->type = bfd_link_hash_undefined;
h->u.undef.abfd = NULL;
h->non_ir_ref_regular = TRUE;
if (is_elf_hash_table (link_info.hash))
((struct elf_link_hash_entry *) h)->mark = 1;
bfd_link_add_undef (link_info.hash, h);
......
......@@ -625,8 +625,6 @@ static inline bfd_boolean
is_visible_from_outside (struct ld_plugin_symbol *lsym,
struct bfd_link_hash_entry *blhe)
{
struct bfd_sym_chain *sym;
if (bfd_link_relocatable (&link_info))
return TRUE;
if (blhe->non_ir_ref_dynamic
......@@ -658,11 +656,6 @@ is_visible_from_outside (struct ld_plugin_symbol *lsym,
|| lsym->visibility == LDPV_PROTECTED);
}
for (sym = &entry_symbol; sym != NULL; sym = sym->next)
if (sym->name
&& strcmp (sym->name, blhe->root.string) == 0)
return TRUE;
return FALSE;
}
......
......@@ -242,6 +242,10 @@ set lto_compile_elf_tests [list \
[list "Compile 8b" \
"" "-flto -O2" \
{lto-8b.c} {} ""] \
[list "PR ld/23309" \
"-O2 -flto -fuse-linker-plugin -fvisibility=hidden -ffunction-sections -Wl,--gc-sections,-u,KeepMe" \
"-O2 -flto -fuse-linker-plugin -fvisibility=hidden -ffunction-sections" \
{pr23309.c} {{"nm" {} "pr23309.d"}} "pr23309.exe" "c"] \
]
# Generate input files for complex LTO tests for ELF.
......
int
main (void)
{
return 0;
}
void
KeepMe (void)
{
}
#...
[0-9a-f]+ . _?KeepMe
#pass
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment