From c68867051ce45d6bab5af31af9d514140932a622 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 18 Jun 1997 15:36:33 +0000 Subject: [PATCH] * elflink.h (elf_link_add_object_symbols): Don't let a common symbol in a regular object override a common symbol in a shared object if the latter was found via an indirect symbol. --- bfd/ChangeLog | 6 ++++++ bfd/elflink.h | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 1ee22b093d7..36a25220934 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +Wed Jun 18 11:35:42 1997 Ian Lance Taylor + + * elflink.h (elf_link_add_object_symbols): Don't let a common + symbol in a regular object override a common symbol in a shared + object if the latter was found via an indirect symbol. + Tue Jun 17 11:55:02 1997 Ian Lance Taylor * cofflink.c (_bfd_coff_link_input_bfd): If stripping debugging diff --git a/bfd/elflink.h b/bfd/elflink.h index df74afe2ad4..09a7d8b2252 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -741,6 +741,7 @@ elf_link_add_object_symbols (abfd, info) { Elf_Internal_Versym iver; int vernum; + boolean indirect; boolean override; if (ever != NULL) @@ -850,9 +851,14 @@ elf_link_add_object_symbols (abfd, info) if (h->root.type == bfd_link_hash_new) h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF; + indirect = false; while (h->root.type == bfd_link_hash_indirect || h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; + { + if (h->root.type == bfd_link_hash_indirect) + indirect = true; + h = (struct elf_link_hash_entry *) h->root.u.i.link; + } /* FIXME: There are too many cases here, and it's too confusing. This code needs to be reorganized somehow. */ @@ -1008,7 +1014,8 @@ elf_link_add_object_symbols (abfd, info) && (h->root.u.def.section->flags & SEC_ALLOC) != 0 && (h->root.u.def.section->flags & SEC_LOAD) == 0 && h->size > 0 - && h->type != STT_FUNC) + && h->type != STT_FUNC + && ! indirect) { /* It would be best if we could set the hash table entry to a common symbol, but we don't know what to use for -- 2.30.2