aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elflink.c7
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/ldexp.c3
4 files changed, 20 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index e4f0e7a..7c24b39 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ PR 338
+ * elflink.c (bfd_elf_record_link_assignment): Add comment about
+ changing bfd_link_hash_undefined to bfd_link_hash_new.
+
2004-08-17 Jakub Jelinek <jakub@redhat.com>
* elfxx-target.h (bfd_elfNN_get_synthetic_symtab): Only define
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 1e2f335..7793e82 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -434,7 +434,12 @@ bfd_elf_record_link_assignment (bfd *output_bfd ATTRIBUTE_UNUSED,
/* Since we're defining the symbol, don't let it seem to have not
been defined. record_dynamic_symbol and size_dynamic_sections
- may depend on this. */
+ may depend on this.
+ ??? Changing bfd_link_hash_undefined to bfd_link_hash_new (or
+ to bfd_link_hash_undefweak, see linker.c:link_action) runs the risk
+ of some later symbol manipulation setting the symbol back to
+ bfd_link_hash_undefined, and the linker trying to add the symbol to
+ the undefs list twice. */
if (h->root.type == bfd_link_hash_undefweak
|| h->root.type == bfd_link_hash_undefined)
h->root.type = bfd_link_hash_new;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index d96be45..a8b8ba4 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-18 Alan Modra <amodra@bigpond.net.au>
+
+ PR 338
+ * ldexp.c (fold_name): Don't call bfd_link_add_undef if the symbol
+ was already on the undefs list.
+
2004-08-17 Alan Modra <amodra@bigpond.net.au>
* emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern): Dot
diff --git a/ld/ldexp.c b/ld/ldexp.c
index 06b1fa1..e7587c1 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -576,7 +576,8 @@ fold_name (etree_type *tree,
{
h->type = bfd_link_hash_undefined;
h->u.undef.abfd = NULL;
- bfd_link_add_undef (link_info.hash, h);
+ if (h->und_next == NULL)
+ bfd_link_add_undef (link_info.hash, h);
}
}
break;