diff options
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r-- | ld/ldlang.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index 5ffc844..a77e8fa 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -6808,6 +6808,19 @@ undef_start_stop (struct bfd_link_hash_entry *h) } h->type = bfd_link_hash_undefined; h->u.undef.abfd = NULL; + if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour) + { + const struct elf_backend_data *bed; + struct elf_link_hash_entry *eh = (struct elf_link_hash_entry *) h; + unsigned int was_forced = eh->forced_local; + + bed = get_elf_backend_data (link_info.output_bfd); + (*bed->elf_backend_hide_symbol) (&link_info, eh, TRUE); + if (!eh->ref_regular_nonweak) + h->type = bfd_link_hash_undefweak; + eh->def_regular = 0; + eh->forced_local = was_forced; + } } } |