OSDN Git Service

* elflink.c (elf_smash_syms): Expand comments.
authorAlan Modra <amodra@bigpond.net.au>
Wed, 2 Feb 2005 02:36:35 +0000 (02:36 +0000)
committerAlan Modra <amodra@bigpond.net.au>
Wed, 2 Feb 2005 02:36:35 +0000 (02:36 +0000)
(elf_link_add_object_symbols): Only call elf_smash_syms for
as-needed dynamic objects.

bfd/ChangeLog
bfd/elflink.c

index 699bcc1..c942cff 100644 (file)
@@ -1,5 +1,9 @@
 2005-02-02  Alan Modra  <amodra@bigpond.net.au>
 
+       * elflink.c (elf_smash_syms): Expand comments.
+       (elf_link_add_object_symbols): Only call elf_smash_syms for
+       as-needed dynamic objects.
+
        * elfxx-ia64.c (elfNN_ia64_new_elf_hash_entry): Don't clear
        everything, just the field specific to ia64.
        * elf64-hppa.c (elf64_hppa_new_dyn_hash_entry): Likewise.
@@ -93,7 +97,7 @@
 
        * elf32-arm.c (elf32_arm_symbian_special_sections): Do not set
        SHF_WRITE for .init_array, .fini_array, and .preinit_array.
-       
+
 2005-01-31  Nick Clifton  <nickc@redhat.com>
 
        * confg.bfd: Make targets scheduled for obsoletion (m68k-lynxos,
        * bin-in2.h (bfd_elf32_arm_set_target_relocs): Update prototype.
        * elf32-arm.c (elf32_arm_link_hash_table): Add fix_v4bx flag.
        (bfd_elf32_arm_set_target_relocs): Add formal parameter fix_v4bx for
-       passing flag value from ld. Set flag value in global hash table entry. 
+       passing flag value from ld. Set flag value in global hash table entry.
        (elf32_arm_final_link_relocate): Add code to implement R_ARM_V4BX
-       relocation. 
+       relocation.
 
 2005-01-27  Andrew Cagney  <cagney@gnu.org>
 
 2005-01-25  Mark Mitchell  <mark@codesourcery.com>
 
        * elf32-arm.c (elf_backend_default_use_rela_p): Define to zero for
-       SymbianOS. 
+       SymbianOS.
 
 2005-01-25  Alexandre Oliva  <aoliva@redhat.com>
 
index 9d07c4c..0e8bff4 100644 (file)
@@ -2815,7 +2815,12 @@ elf_add_dt_needed_tag (bfd *abfd,
 
 /* Called via elf_link_hash_traverse, elf_smash_syms sets all symbols
    belonging to NOT_NEEDED to bfd_link_hash_new.  We know there are no
-   references to these symbols.  */
+   references from regular objects to these symbols.
+
+   ??? Should we do something about references from other dynamic
+   obects?  If not, we potentially lose some warnings about undefined
+   symbols.  But how can we recover the initial undefined / undefweak
+   state?  */
 
 struct elf_smash_syms_data
 {
@@ -4094,8 +4099,11 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
     free (isymbuf);
   isymbuf = NULL;
 
-  if (!add_needed)
+  if (!add_needed
+      && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
     {
+      /* Remove symbols defined in an as-needed shared lib that wasn't
+        needed.  */
       struct elf_smash_syms_data inf;
       inf.not_needed = abfd;
       inf.htab = hash_table;