* elflink.c (_bfd_elf_fix_symbol_flags): Loop on indirect syms.

(_bfd_elf_adjust_dynamic_symbol): Remove FIXME.
This commit is contained in:
Alan Modra 2011-07-14 03:57:18 +00:00
parent 9df0ef5fe7
commit ec24dc8809
2 changed files with 10 additions and 5 deletions

View file

@ -1,3 +1,8 @@
2011-07-14 Alan Modra <amodra@gmail.com>
* elflink.c (_bfd_elf_fix_symbol_flags): Loop on indirect syms.
(_bfd_elf_adjust_dynamic_symbol): Remove FIXME.
2011-07-14 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (struct ppc_link_hash_table): Add plt_static_chain.

View file

@ -2517,7 +2517,7 @@ _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
struct elf_link_hash_entry *weakdef;
weakdef = h->u.weakdef;
if (h->root.type == bfd_link_hash_indirect)
while (h->root.type == bfd_link_hash_indirect)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
BFD_ASSERT (h->root.type == bfd_link_hash_defined
@ -2621,12 +2621,12 @@ _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
if (h->u.weakdef != NULL)
{
/* If we get to this point, we know there is an implicit
reference by a regular object file via the weak symbol H.
FIXME: Is this really true? What if the traversal finds
H->U.WEAKDEF before it finds H? */
/* If we get to this point, there is an implicit reference to
H->U.WEAKDEF by a regular object file via the weak symbol H. */
h->u.weakdef->ref_regular = 1;
/* Ensure that the backend adjust_dynamic_symbol function sees
H->U.WEAKDEF before H by recursively calling ourselves. */
if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif))
return FALSE;
}