From: Alan Modra Date: Thu, 17 Apr 2014 03:38:32 +0000 (+0930) Subject: Fix LTO mismatched TLS reference X-Git-Tag: gdb-7.8-release~542 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4c34aff883e4fcc958a2d2c98874a035efc07651;p=external%2Fbinutils.git Fix LTO mismatched TLS reference PR 16846 * elflink.c (_bfd_elf_merge_symbol): Ignore TLS mismatch when current bfd is a plugin. Don't always set type_change_ok when old bfd is a plugin. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c9af9da..bf71f22 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2014-04-17 Alan Modra + + PR 16846 + * elflink.c (_bfd_elf_merge_symbol): Ignore TLS mismatch when + current bfd is a plugin. Don't always set type_change_ok + when old bfd is a plugin. + 2014-04-16 Tristan Gingold * mach-o-x86-64.c (bfd_mach_o_x86_64_mkobject): Adjust cpusubtype diff --git a/bfd/elflink.c b/bfd/elflink.c index 3de00e1..6756fb1 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -1105,15 +1105,14 @@ _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". */ - else if (oldbfd != NULL - && ELF_ST_TYPE (sym->st_info) != h->type - && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS)) + /* Check TLS symbols. We don't check undefined symbols introduced + by "ld -u" which have no type (and oldbfd NULL), and we don't + check symbols from plugins because they also have no type. */ + if (oldbfd != NULL + && (oldbfd->flags & BFD_PLUGIN) == 0 + && (abfd->flags & BFD_PLUGIN) == 0 + && 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;