diff options
author | Nick Clifton <nickc@redhat.com> | 2001-02-07 23:42:15 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2001-02-07 23:42:15 +0000 |
commit | 7da9d88fe4efed1e933fd0a1dbf681199b9c27bb (patch) | |
tree | 0ddd54bbf8ded3d1fcbbef43fc44861cda29a261 /bfd | |
parent | 7340082dc8d4b1fcd14f6d18fc0086fdae31d556 (diff) | |
download | fsf-binutils-gdb-7da9d88fe4efed1e933fd0a1dbf681199b9c27bb.zip fsf-binutils-gdb-7da9d88fe4efed1e933fd0a1dbf681199b9c27bb.tar.gz fsf-binutils-gdb-7da9d88fe4efed1e933fd0a1dbf681199b9c27bb.tar.bz2 |
ignore common definitions of function symbols in unlinked archives
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elflink.h | 12 |
2 files changed, 15 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ab54002..3b5442b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. diff --git a/bfd/elflink.h b/bfd/elflink.h index d3b44e8..9464ff2 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -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 -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; } } |