diff options
author | Matthew Gretton-Dann <matthew.gretton-dann@arm.com> | 2010-04-14 08:29:33 +0000 |
---|---|---|
committer | Matthew Gretton-Dann <matthew.gretton-dann@arm.com> | 2010-04-14 08:29:33 +0000 |
commit | 895fa45f398c6815252ed56c8a1b7992f40ccaa0 (patch) | |
tree | 2ee4767c67fae2d000d301d2398cb2883b61e700 /bfd/elflink.c | |
parent | 5558e7e691534636afa28f6bf68bfd83530d8054 (diff) | |
download | gdb-895fa45f398c6815252ed56c8a1b7992f40ccaa0.zip gdb-895fa45f398c6815252ed56c8a1b7992f40ccaa0.tar.gz gdb-895fa45f398c6815252ed56c8a1b7992f40ccaa0.tar.bz2 |
* bfd/elflink.c (_bfd_elf_merge_symbol): Tighten up the test for early
exit due to merging the same weak symbol to test that the symbols are
actually weak.
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r-- | bfd/elflink.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c index 98ea753..f445912 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -1013,6 +1013,11 @@ _bfd_elf_merge_symbol (bfd *abfd, break; } + /* Differentiate strong and weak symbols. */ + newweak = bind == STB_WEAK; + oldweak = (h->root.type == bfd_link_hash_defweak + || h->root.type == bfd_link_hash_undefweak); + /* In cases involving weak versioned symbols, we may wind up trying to merge a symbol with itself. Catch that here, to avoid the confusion that results if we try to override a symbol with @@ -1020,6 +1025,7 @@ _bfd_elf_merge_symbol (bfd *abfd, _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a dynamic object, which we do want to handle here. */ if (abfd == oldbfd + && (newweak || oldweak) && ((abfd->flags & DYNAMIC) == 0 || !h->def_regular)) return TRUE; @@ -1241,11 +1247,6 @@ _bfd_elf_merge_symbol (bfd *abfd, return TRUE; } - /* Differentiate strong and weak symbols. */ - newweak = bind == STB_WEAK; - oldweak = (h->root.type == bfd_link_hash_defweak - || h->root.type == bfd_link_hash_undefweak); - if (bind == STB_GNU_UNIQUE) h->unique_global = 1; |