* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy is_func

and is_func_descriptor.
	(func_desc_adjust): Hide function code sym in shared libs unless
	there is a matching exported function descriptor sym.
This commit is contained in:
Alan Modra
2002-05-24 04:07:38 +00:00
parent 7f7432881e
commit ea1e4b0d54
2 changed files with 43 additions and 27 deletions

View File

@ -1,3 +1,10 @@
2002-05-24 Alan Modra <amodra@bigpond.net.au>
* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy is_func
and is_func_descriptor.
(func_desc_adjust): Hide function code sym in shared libs unless
there is a matching exported function descriptor sym.
2002-05-23 Jakub Jelinek <jakub@redhat.com>
* elf.c (_bfd_elf_make_section_from_shdr): Set SEC_THREAD_LOCAL

View File

@ -2583,8 +2583,11 @@ ppc64_elf_copy_indirect_symbol (dir, ind)
eind->dyn_relocs = NULL;
}
edir->is_func |= eind->is_func;
edir->is_func_descriptor |= eind->is_func_descriptor;
/* We don't need to copy is_func and is_func_descriptor; They're
never set when copy_indirect_symbol is called for indirect
symbols at the add_symbols stage of linking, and they're not
relevant when copy_indirect_symbol is called for weakdefs.
weakdefs are only held for non-function syms. */
_bfd_elf_link_hash_copy_indirect (dir, ind);
}
@ -3236,8 +3239,14 @@ func_desc_adjust (h, inf)
been imported from another library. Function code syms that
are really in the library we must leave global to prevent the
linker dragging in a definition from a static library. */
force_local = ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
&& info->shared);
force_local = (info->shared
&& ((h->elf_link_hash_flags
& ELF_LINK_HASH_DEF_REGULAR) == 0
|| fdh == NULL
|| (fdh->elf_link_hash_flags
& ELF_LINK_HASH_DEF_REGULAR) == 0
|| (fdh->elf_link_hash_flags
& ELF_LINK_FORCED_LOCAL) != 0));
_bfd_elf_link_hash_hide_symbol (info, h, force_local);
}