OSDN Git Service

2003-07-18 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl>
Sat, 19 Jul 2003 04:12:21 +0000 (04:12 +0000)
committerhjl <hjl>
Sat, 19 Jul 2003 04:12:21 +0000 (04:12 +0000)
* 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
bfd/elf-bfd.h
bfd/elflink.c

index adb20cf..de3fd64 100644 (file)
@@ -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.
index 7d154fc..2fc64ab 100644 (file)
@@ -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.  */
 
index 2fd588a..7446414 100644 (file)
@@ -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;