diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2009-08-02 23:55:49 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2009-08-02 23:55:49 +0000 |
commit | 1d85728fd7299ff10bdcc066db96fb7e26748d58 (patch) | |
tree | 6aeeca69facc0b9b94d325b6989ae49364e4d5e9 /bfd/elf32-i386.c | |
parent | 249da6857069f9c7bb7ac7cab91be8346ba5b94e (diff) | |
download | gdb-1d85728fd7299ff10bdcc066db96fb7e26748d58.zip gdb-1d85728fd7299ff10bdcc066db96fb7e26748d58.tar.gz gdb-1d85728fd7299ff10bdcc066db96fb7e26748d58.tar.bz2 |
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.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 868e9d4..c8e018a 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; |