Wed Jul 30 21:30:35 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
authorIan Lance Taylor <ian@airs.com>
Thu, 31 Jul 1997 01:35:46 +0000 (01:35 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 31 Jul 1997 01:35:46 +0000 (01:35 +0000)
* elflink.h (NAME(bfd_elf,record_link_assignment)): Remove any
version info if this symbol came from a dynamic object.
(elf_link_add_object_symbols): Set the version info of a symbol
only if the object actually contains version definitions and
defines this symbol.

bfd/ChangeLog
bfd/elflink.h

index ef22c97..f58d494 100644 (file)
@@ -1,3 +1,11 @@
+Wed Jul 30 21:30:35 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * elflink.h (NAME(bfd_elf,record_link_assignment)): Remove any
+       version info if this symbol came from a dynamic object.
+       (elf_link_add_object_symbols): Set the version info of a symbol
+       only if the object actually contains version definitions and
+       defines this symbol.
+
 Mon Jul 28 18:07:43 1997  Rob Savoye  <rob@chinadoll.cygnus.com>
 
        * aclocal.m4: Add CYGWIN and EXEEXT autoconf macros.
 Mon Jul 28 18:07:43 1997  Rob Savoye  <rob@chinadoll.cygnus.com>
 
        * aclocal.m4: Add CYGWIN and EXEEXT autoconf macros.
index a40e1d4..3898116 100644 (file)
@@ -1211,10 +1211,10 @@ elf_link_add_object_symbols (abfd, info)
          if (h->root.type == bfd_link_hash_common)
            old_alignment = h->root.u.c.p->alignment_power;
 
          if (h->root.type == bfd_link_hash_common)
            old_alignment = h->root.u.c.p->alignment_power;
 
-         if (ever != NULL
+         if (elf_tdata (abfd)->verdef != NULL
              && ! override
              && vernum > 1
              && ! override
              && vernum > 1
-             && (h->verinfo.verdef == NULL || definition))
+             && definition)
            h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
        }
 
            h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
        }
 
@@ -2103,6 +2103,15 @@ NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
     h->root.type = bfd_link_hash_undefined;
 
       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
     h->root.type = bfd_link_hash_undefined;
 
+  /* If this symbol is not being provided by the linker script, and it is
+     currently defined by a dynamic object, but not by a regular object,
+     then clear out any version information because the symbol will not be
+     associated with the dynamic object any more.  */
+  if (!provide
+      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+    h->verinfo.verdef = NULL;
+
   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
   h->type = STT_OBJECT;
 
   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
   h->type = STT_OBJECT;