ignore common definitions of function symbols in unlinked archives

This commit is contained in:
Nick Clifton 2001-02-07 23:42:15 +00:00
parent 7340082dc8
commit 7da9d88fe4
2 changed files with 15 additions and 4 deletions

View 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> 2001-02-07 Todd Vierling <tv@wasabisystems.com>
* libbfd-in.h (bfd_target_vector): Change extern array to pointer. * libbfd-in.h (bfd_target_vector): Change extern array to pointer.

View File

@ -80,9 +80,9 @@ elf_bfd_link_add_symbols (abfd, info)
} }
} }
/* 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 static boolean
is_global_symbol_definition (abfd, sym) is_global_data_symbol_definition (abfd, sym)
bfd * abfd ATTRIBUTE_UNUSED; bfd * abfd ATTRIBUTE_UNUSED;
Elf_Internal_Sym * sym; Elf_Internal_Sym * sym;
{ {
@ -91,6 +91,10 @@ is_global_symbol_definition (abfd, sym)
&& ELF_ST_BIND (sym->st_info) < STB_LOOS) && ELF_ST_BIND (sym->st_info) < STB_LOOS)
return false; 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 the section is undefined, then so is the symbol. */
if (sym->st_shndx == SHN_UNDEF) if (sym->st_shndx == SHN_UNDEF)
return false; return false;
@ -116,7 +120,7 @@ is_global_symbol_definition (abfd, sym)
} }
/* Search the symbol table of the archive element of the archive ABFD /* 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. */ the symbol is defined in this element. */
static boolean static boolean
elf_link_is_defined_archive_symbol (abfd, symdef) 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) if (strcmp (name, symdef->name) == 0)
{ {
result = is_global_symbol_definition (abfd, & sym); result = is_global_data_symbol_definition (abfd, & sym);
break; break;
} }
} }