diff options
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf-bfd.h | 4 | ||||
-rw-r--r-- | bfd/elflink.c | 8 |
3 files changed, 14 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index adb20cf..de3fd64 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2003-07-18 H.J. Lu <hongjiu.lu@intel.com> + + * 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 <rth@redhat.com> * elflink.c (_bfd_elf_dynamic_symbol_p): New. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 7d154fc..2fc64ab 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 2fd588a..7446414 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; |