* elflink.c (_bfd_elf_merge_symbol): Allow type changes for

plugin symbols.  Fix segfault on linker scrip defined syms.
This commit is contained in:
Alan Modra 2011-06-21 14:55:26 +00:00
parent 7529d48023
commit 3a5dbfb250
2 changed files with 14 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2011-06-22 Alan Modra <amodra@gmail.com>
* elflink.c (_bfd_elf_merge_symbol): Allow type changes for
plugin symbols. Fix segfault on linker scrip defined syms.
2011-06-20 Jakub Jelinek <jakub@redhat.com>
PR ld/12570

View File

@ -1080,11 +1080,15 @@ _bfd_elf_merge_symbol (bfd *abfd,
return TRUE;
}
/* Plugin symbol type isn't currently set. Stop bogus errors. */
if (oldbfd != NULL && (oldbfd->flags & BFD_PLUGIN) != 0)
*type_change_ok = TRUE;
/* Check TLS symbol. We don't check undefined symbol introduced by
"ld -u". */
if ((ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS)
&& ELF_ST_TYPE (sym->st_info) != h->type
&& oldbfd != NULL)
else if (oldbfd != NULL
&& ELF_ST_TYPE (sym->st_info) != h->type
&& (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS))
{
bfd *ntbfd, *tbfd;
bfd_boolean ntdef, tdef;
@ -1423,7 +1427,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
if (newdef && olddef && newweak)
{
/* Don't skip new non-IR weak syms. */
if (!((oldbfd->flags & BFD_PLUGIN) != 0
if (!(oldbfd != NULL
&& (oldbfd->flags & BFD_PLUGIN) != 0
&& (abfd->flags & BFD_PLUGIN) == 0))
*skip = TRUE;