* elflink.h (elf_link_add_object_symbols): Consistently treat
authorIan Lance Taylor <ian@airs.com>
Thu, 15 May 1997 21:38:26 +0000 (21:38 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 15 May 1997 21:38:26 +0000 (21:38 +0000)
uninitialized symbols in shared objects as common symbols.

bfd/ChangeLog
bfd/elflink.h

index 6bcd44a5b9466e0c56674737bf03a28fe5758edc..84f3d403a55d862b7661370d38f131ef6e6fcd55 100644 (file)
@@ -11,7 +11,8 @@ Thu May 15 14:31:28 1997  Nick Clifton  <nickc@cygnus.com>
 Thu May 15 16:40:20 1997  Ian Lance Taylor  <ian@cygnus.com>
 
        * elflink.h (elf_link_add_object_symbols): Force ELF symbol size
-       to common symbol size.
+       to common symbol size.  Consistently treat uninitialized symbols
+       in shared objects as common symbols.
 
 Fri May  9 10:15:27 1997  Nick Clifton  <nickc@cygnus.com>
 
index 43425c02f8b5149eb66699e8f6752fe161c942d5..78f57ffc63e0e85972d5b71b931e1bce2cee202c 100644 (file)
@@ -913,26 +913,16 @@ elf_link_add_object_symbols (abfd, info)
              && definition
              && h->root.type == bfd_link_hash_common
              && (sec->flags & SEC_ALLOC) != 0
-             && (sec->flags & SEC_LOAD) == 0)
+             && (sec->flags & SEC_LOAD) == 0
+             && sym.st_size > 0
+             && bind != STB_WEAK
+             && ELF_ST_TYPE (sym.st_info) != STT_FUNC)
            {
-             if (! ((*info->callbacks->multiple_common)
-                    (info, h->root.root.string,
-                     h->root.u.c.p->section->owner, bfd_link_hash_common,
-                     h->root.u.c.size, abfd, bfd_link_hash_common,
-                     sym.st_size)))
-               goto error_return;
-
-             /* If the symbol in the shared library is smaller than
-                 the one we already have, then override it to stick
-                 with the larger symbol.  Set SIZE_CHANGE_OK because
-                 we only want to warn if requested with --warn-common.  */
-             if (sym.st_size < h->size)
-               {
-                 override = true;
-                 sec = bfd_und_section_ptr;
-                 definition = false;
-                 size_change_ok = true;
-               }
+             override = true;
+             sec = bfd_com_section_ptr;
+             definition = false;
+             value = sym.st_size;
+             size_change_ok = true;
            }
 
          /* Similarly, if we are not looking at a dynamic object, and