diff options
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r-- | bfd/elflink.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c index de13d04..20057f5 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -1036,6 +1036,7 @@ _bfd_elf_merge_symbol (bfd *abfd, bfd_boolean newweak, oldweak, newfunc, oldfunc; const struct elf_backend_data *bed; char *new_version; + bfd_boolean default_sym = *matched; *skip = FALSE; *override = FALSE; @@ -1557,6 +1558,18 @@ _bfd_elf_merge_symbol (bfd *abfd, sec = *psec; } + /* There are multiple definitions of a normal symbol. + Skip the default symbol as well. */ + if (olddef && !olddyn && !oldweak && newdef && !newdyn && !newweak + && !default_sym && h->def_regular) + { + /* Handle a multiple definition. */ + (*info->callbacks->multiple_definition) (info, &h->root, + abfd, sec, *pvalue); + *skip = TRUE; + return TRUE; + } + /* If both the old and the new symbols look like common symbols in a dynamic object, set the size of the symbol to the larger of the two. */ |