From ec24dc88099d9b8f59ee6884697cf8a15a4da727 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 14 Jul 2011 03:57:18 +0000 Subject: [PATCH] * elflink.c (_bfd_elf_fix_symbol_flags): Loop on indirect syms. (_bfd_elf_adjust_dynamic_symbol): Remove FIXME. --- bfd/ChangeLog | 5 +++++ bfd/elflink.c | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c6154fea28..0d70d2d598 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2011-07-14 Alan Modra + + * elflink.c (_bfd_elf_fix_symbol_flags): Loop on indirect syms. + (_bfd_elf_adjust_dynamic_symbol): Remove FIXME. + 2011-07-14 Alan Modra * elf64-ppc.c (struct ppc_link_hash_table): Add plt_static_chain. diff --git a/bfd/elflink.c b/bfd/elflink.c index dc3840e33d..2e592f5e0f 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -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; }