From 1e364ec981cd5bb9a0349cebe7af2068f4c8236c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 19 Jul 2003 04:12:22 +0000 Subject: [PATCH] 2003-07-18 H.J. Lu * elf-bfd.h (SYMBOL_REFERENCES_LOCAL): Fix a typo. (SYMBOL_CALLS_LOCAL): Likewise. * elflink.c (_bfd_elf_dynamic_symbol_p): Return TRUE immediately if symbol isn't defined locally. --- bfd/ChangeLog | 8 ++++++++ bfd/elf-bfd.h | 4 ++-- bfd/elflink.c | 8 ++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index adb20cfa582..de3fd642807 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2003-07-18 H.J. Lu + + * elf-bfd.h (SYMBOL_REFERENCES_LOCAL): Fix a typo. + (SYMBOL_CALLS_LOCAL): Likewise. + + * elflink.c (_bfd_elf_dynamic_symbol_p): Return TRUE + immediately if symbol isn't defined locally. + 2003-07-18 Richard Henderson * elflink.c (_bfd_elf_dynamic_symbol_p): New. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 7d154fc735c..2fc64abb7e7 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -212,11 +212,11 @@ struct elf_link_hash_entry it's necessary for shared libs to also reference the .plt even though the symbol is really local to the shared lib. */ #define SYMBOL_REFERENCES_LOCAL(INFO, H) \ - _bfd_elf_dynamic_symbol_p (H, INFO, 1) + !_bfd_elf_dynamic_symbol_p (H, INFO, 1) /* Will _calls_ to this symbol always call the version in this object? */ #define SYMBOL_CALLS_LOCAL(INFO, H) \ - _bfd_elf_dynamic_symbol_p (H, INFO, 0) + !_bfd_elf_dynamic_symbol_p (H, INFO, 0) /* Records local symbols to be emitted in the dynamic symbol table. */ diff --git a/bfd/elflink.c b/bfd/elflink.c index 2fd588ae110..744641433c8 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -2494,6 +2494,10 @@ _bfd_elf_dynamic_symbol_p (h, info, ignore_protected) || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; + /* If it isn't defined locally, then clearly it's dynamic. */ + if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) + return TRUE; + /* If it was forced local, then clearly it's not dynamic. */ if (h->dynindx == -1) return FALSE; @@ -2526,10 +2530,6 @@ _bfd_elf_dynamic_symbol_p (h, info, ignore_protected) break; } - /* If it isn't defined locally, then clearly it's dynamic. */ - if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0) - return TRUE; - /* Otherwise, the symbol is dynamic if binding rules don't tell us that it remains local. */ return !binding_stays_local_p; -- 2.30.2