aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2011-07-14 03:57:18 +0000
committerAlan Modra <amodra@gmail.com>2011-07-14 03:57:18 +0000
commitec24dc88099d9b8f59ee6884697cf8a15a4da727 (patch)
tree19c429bf7bfb3de69ce8544c34a208bbf5cfdb02 /bfd
parent9df0ef5fe7ecd8bd8dc591ea3bdb2d3fb089d710 (diff)
downloadgdb-ec24dc88099d9b8f59ee6884697cf8a15a4da727.zip
gdb-ec24dc88099d9b8f59ee6884697cf8a15a4da727.tar.gz
gdb-ec24dc88099d9b8f59ee6884697cf8a15a4da727.tar.bz2
* elflink.c (_bfd_elf_fix_symbol_flags): Loop on indirect syms.
(_bfd_elf_adjust_dynamic_symbol): Remove FIXME.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elflink.c10
2 files changed, 10 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c6154fe..0d70d2d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,10 @@
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.
(build_plt_stub): Add plt_static_chain param, don't load r11 if false.
(build_tls_get_addr_stub): Likewise.
diff --git a/bfd/elflink.c b/bfd/elflink.c
index dc3840e..2e592f5 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;
}