aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elf-bfd.h4
-rw-r--r--bfd/elflink.c8
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;