summaryrefslogtreecommitdiff
path: root/bfd/elf32-i386.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl@lucon.org>2009-08-02 23:55:49 +0000
committerH.J. Lu <hjl@lucon.org>2009-08-02 23:55:49 +0000
commitdbf02c371dc6282a5ab78d4dabe846b15ef70d47 (patch)
treede916f777b77e034ca1649b819e462528ce8be6f /bfd/elf32-i386.c
parent4dfe0d94139d9fb331679f1d17cfe0a789b5a502 (diff)
downloadbinutils-redhat-dbf02c371dc6282a5ab78d4dabe846b15ef70d47.tar.gz
2009-08-02 H.J. Lu <hongjiu.lu@intel.com>
Jakub Jelinek <jakub@redhat.com> PR ld/6443 * elf32-i386.c (elf_i386_tls_transition): Check executable instead of shared for TLS when building PIE. (elf_i386_check_relocs): Likewise. (elf_i386_allocate_dynrelocs): Likewise. (elf_i386_relocate_section): Likewise. * elf64-x86-64.c (elf64_x86_64_tls_transition): Check executable instead of shared for TLS when building PIE. (elf64_x86_64_check_relocs): Likewise. (elf64_x86_64_allocate_dynrelocs): Likewise. (elf64_x86_64_relocate_section): Likewise. ld/testsuite/ 2009-08-02 H.J. Lu <hongjiu.lu@intel.com> PR ld/6443 * ld-i386/i386.exp: Run tlspie1. * ld-x86-64/x86-64.exp: tlspie1. * ld-i386/tlspie1.d: New. * ld-i386/tlspie1.s: Likewise. * ld-x86-64/tlspie1.d: Likewise. * ld-x86-64/tlspie1.s: Likewise.
Diffstat (limited to 'bfd/elf32-i386.c')
-rw-r--r--bfd/elf32-i386.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 868e9d4328..c8e018a6cb 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -1164,7 +1164,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd,
case R_386_TLS_IE_32:
case R_386_TLS_IE:
case R_386_TLS_GOTIE:
- if (!info->shared)
+ if (info->executable)
{
if (h == NULL)
to_type = R_386_TLS_LE_32;
@@ -1180,7 +1180,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd,
{
unsigned int new_to_type = to_type;
- if (!info->shared
+ if (info->executable
&& h != NULL
&& h->dynindx == -1
&& (tls_type & GOT_TLS_IE))
@@ -1206,7 +1206,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd,
break;
case R_386_TLS_LDM:
- if (!info->shared)
+ if (info->executable)
to_type = R_386_TLS_LE_32;
break;
@@ -1460,7 +1460,7 @@ elf_i386_check_relocs (bfd *abfd,
case R_386_TLS_IE_32:
case R_386_TLS_IE:
case R_386_TLS_GOTIE:
- if (info->shared)
+ if (!info->executable)
info->flags |= DF_STATIC_TLS;
/* Fall through */
@@ -1578,7 +1578,7 @@ elf_i386_check_relocs (bfd *abfd,
case R_386_TLS_LE_32:
case R_386_TLS_LE:
- if (!info->shared)
+ if (info->executable)
break;
info->flags |= DF_STATIC_TLS;
/* Fall through */
@@ -2116,7 +2116,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* If R_386_TLS_{IE_32,IE,GOTIE} symbol is now local to the binary,
make it a R_386_TLS_LE_32 requiring no TLS entry. */
if (h->got.refcount > 0
- && !info->shared
+ && info->executable
&& h->dynindx == -1
&& (elf_i386_hash_entry(h)->tls_type & GOT_TLS_IE))
h->got.offset = (bfd_vma) -1;
@@ -3366,7 +3366,7 @@ elf_i386_relocate_section (bfd *output_bfd,
break;
case R_386_TLS_IE:
- if (info->shared)
+ if (!info->executable)
{
Elf_Internal_Rela outrel;
bfd_byte *loc;
@@ -3932,7 +3932,7 @@ elf_i386_relocate_section (bfd *output_bfd,
case R_386_TLS_LE_32:
case R_386_TLS_LE:
- if (info->shared)
+ if (!info->executable)
{
Elf_Internal_Rela outrel;
asection *sreloc;