* elflink.h (elf_fix_symbol_flags): For non-default visibilities,

only hide symbols marked STV_INTERNAL or STV_HIDDEN.
This commit is contained in:
Hans-Peter Nilsson 2001-04-09 03:24:32 +00:00
parent 7700434b5c
commit d954b04094
2 changed files with 13 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2001-04-09 Hans-Peter Nilsson <hp@axis.com>
* elflink.h (elf_fix_symbol_flags): For non-default visibilities,
only hide symbols marked STV_INTERNAL or STV_HIDDEN.
2001-04-05 Steven J. Hill <sjhill@cotw.com> 2001-04-05 Steven J. Hill <sjhill@cotw.com>
* config.bfd (mips*el*-*-linux-gnu*): Use traditional little * config.bfd (mips*el*-*-linux-gnu*): Use traditional little

View File

@ -3515,12 +3515,16 @@ elf_fix_symbol_flags (h, eif)
/* If -Bsymbolic was used (which means to bind references to global /* If -Bsymbolic was used (which means to bind references to global
symbols to the definition within the shared object), and this symbols to the definition within the shared object), and this
symbol was defined in a regular object, then it actually doesn't symbol was defined in a regular object, then it actually doesn't
need a PLT entry. Likewise, if the symbol has any kind of need a PLT entry, and we can accomplish that by forcing it local.
visibility (internal, hidden, or protected), it doesn't need a Likewise, if the symbol has hidden or internal visibility.
PLT. */ FIXME: It might be that we also do not need a PLT for other
non-hidden visibilities, but we would have to tell that to the
backend specifically; we can't just clear PLT-related data here. */
if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
&& eif->info->shared && eif->info->shared
&& (eif->info->symbolic || ELF_ST_VISIBILITY (h->other)) && (eif->info->symbolic
|| ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
|| ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0) && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
{ {
struct elf_backend_data *bed; struct elf_backend_data *bed;