ignore common definitions of function symbols in unlinked archives
authorNick Clifton <nickc@redhat.com>
Wed, 7 Feb 2001 23:42:15 +0000 (23:42 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 7 Feb 2001 23:42:15 +0000 (23:42 +0000)
bfd/ChangeLog
bfd/elflink.h

index ab54002f8b020cd76ad76633513e379a871e7faa..3b5442b4eb52311a9567c2353cad3dd9da89a7c1 100644 (file)
@@ -1,3 +1,10 @@
+2001-02-07  Jakub Jelinek  <jakub@redhat.com>
+
+       * elflink.h (is_global_symbol_definition): Rename to
+       is_global_data_symbol_definition and have it reject function
+       symbols.
+       (elf_link_is_defined_archive_symbol): Use renamed function.
+
 2001-02-07  Todd Vierling  <tv@wasabisystems.com>
 
        * libbfd-in.h (bfd_target_vector): Change extern array to pointer.
index d3b44e8831a0d05ced0b68ac17c14d5bc4df97e6..9464ff2e1067ef18201a62b7a046bee5dadb8248 100644 (file)
@@ -80,9 +80,9 @@ elf_bfd_link_add_symbols (abfd, info)
     }
 }
 \f
-/* Return true iff this is a non-common definition of a symbol.  */
+/* Return true iff this is a non-common, definition of a non-function symbol.  */
 static boolean
-is_global_symbol_definition (abfd, sym)
+is_global_data_symbol_definition (abfd, sym)
      bfd * abfd ATTRIBUTE_UNUSED;
      Elf_Internal_Sym * sym;
 {
@@ -91,6 +91,10 @@ is_global_symbol_definition (abfd, sym)
       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
     return false;
 
+  /* Function symbols do not count.  */
+  if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
+    return false;
+
   /* If the section is undefined, then so is the symbol.  */
   if (sym->st_shndx == SHN_UNDEF)
     return false;
@@ -116,7 +120,7 @@ is_global_symbol_definition (abfd, sym)
 }
 
 /* Search the symbol table of the archive element of the archive ABFD
-   whoes archove map contains a mention of SYMDEF, and determine if
+   whoes archive map contains a mention of SYMDEF, and determine if
    the symbol is defined in this element.  */
 static boolean
 elf_link_is_defined_archive_symbol (abfd, symdef)
@@ -201,7 +205,7 @@ elf_link_is_defined_archive_symbol (abfd, symdef)
 
       if (strcmp (name, symdef->name) == 0)
        {
-         result = is_global_symbol_definition (abfd, & sym);
+         result = is_global_data_symbol_definition (abfd, & sym);
          break;
        }
     }