From 05beee52007ee7ee9b0c8b9f1089ca26d7f843b8 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 18 Aug 2004 02:45:43 +0000 Subject: [PATCH] PR 338 * elflink.c (bfd_elf_record_link_assignment): Add comment about changing bfd_link_hash_undefined to bfd_link_hash_new. * ldexp.c (fold_name): Don't call bfd_link_add_undef if the symbol was already on the undefs list. --- bfd/ChangeLog | 6 ++++++ bfd/elflink.c | 7 ++++++- ld/ChangeLog | 6 ++++++ ld/ldexp.c | 3 ++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e4f0e7a30..7c24b394a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2004-08-18 Alan Modra + + 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 * elfxx-target.h (bfd_elfNN_get_synthetic_symtab): Only define diff --git a/bfd/elflink.c b/bfd/elflink.c index 1e2f335d3..7793e82a3 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 d96be457f..a8b8ba479 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2004-08-18 Alan Modra + + 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 * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern): Dot diff --git a/ld/ldexp.c b/ld/ldexp.c index 06b1fa1a2..e7587c171 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; -- 2.11.4.GIT