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.
This commit is contained in:
H.J. Lu
2009-08-02 23:55:49 +00:00
parent 249da68570
commit 1d85728fd7
10 changed files with 177 additions and 14 deletions

View File

@@ -1,3 +1,14 @@
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.
2009-07-31 Hans-Peter Nilsson <hp@bitrange.com>
* ld-mmix/x.s, ld-mmix/y.s, ld-mmix/zeroeh.ld,

View File

@@ -139,3 +139,4 @@ run_dump_test "hidden3"
run_dump_test "protected1"
run_dump_test "protected2"
run_dump_test "protected3"
run_dump_test "tlspie1"

View File

@@ -0,0 +1,6 @@
#name: TLS with PIE
#as: --32
#ld: -melf_i386 -pie
#readelf: -r
There are no relocations in this file.

View File

@@ -0,0 +1,64 @@
.text
.globl ___tls_get_addr
.type ___tls_get_addr, @function
___tls_get_addr:
ret
.size ___tls_get_addr, .-___tls_get_addr
.globl _start
.type _start, @function
_start:
pushl %ebp
movl %esp, %ebp
pushl %esi
pushl %ebx
call .L3
.L3:
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-.L3], %ebx
movl %gs:foo2@NTPOFF, %esi
addl %gs:foo1@NTPOFF, %esi
movl foo3@GOTNTPOFF(%ebx), %eax
addl %gs:(%eax), %esi
leal foo4@TLSGD(,%ebx,1), %eax
call ___tls_get_addr@PLT
addl (%eax), %esi
leal foo5@TLSGD(,%ebx,1), %eax
call ___tls_get_addr@PLT
addl (%eax), %esi
movl %esi, %eax
popl %ebx
popl %esi
leave
ret
.size _start, .-_start
.globl foo1
.section .tbss,"awT",@nobits
.align 4
.type foo1, @object
.size foo1, 4
foo1:
.zero 4
.globl foo2
.align 4
.type foo2, @object
.size foo2, 4
foo2:
.zero 4
.globl foo3
.align 4
.type foo3, @object
.size foo3, 4
foo3:
.zero 4
.globl foo4
.align 4
.type foo4, @object
.size foo4, 4
foo4:
.zero 4
.globl foo5
.align 4
.type foo5, @object
.size foo5, 4
foo5:
.zero 4

View File

@@ -0,0 +1,6 @@
#name: TLS with PIE
#as: --64
#ld: -melf_x86_64 -pie
#readelf: -r
There are no relocations in this file.

View File

@@ -0,0 +1,58 @@
.text
.globl __tls_get_addr
.type __tls_get_addr, @function
__tls_get_addr:
ret
.size __tls_get_addr, .-__tls_get_addr
.globl _start
.type _start, @function
_start:
movq foo3@GOTTPOFF(%rip), %rax
pushq %rbx
movl %fs:foo2@TPOFF, %ebx
addl %fs:foo1@TPOFF, %ebx
addl %fs:(%rax), %ebx
leaq foo4@TLSLD(%rip), %rdi
call __tls_get_addr@PLT
addl foo4@DTPOFF(%rax), %ebx
.byte 0x66
leaq foo5@TLSGD(%rip), %rdi
.value 0x6666
rex64
call __tls_get_addr@PLT
addl (%rax), %ebx
movl %ebx, %eax
popq %rbx
ret
.size _start, .-_start
.globl foo1
.section .tbss,"awT",@nobits
.align 4
.type foo1, @object
.size foo1, 4
foo1:
.zero 4
.globl foo2
.align 4
.type foo2, @object
.size foo2, 4
foo2:
.zero 4
.globl foo3
.align 4
.type foo3, @object
.size foo3, 4
foo3:
.zero 4
.globl foo4
.align 4
.type foo4, @object
.size foo4, 4
foo4:
.zero 4
.globl foo5
.align 4
.type foo5, @object
.size foo5, 4
foo5:
.zero 4

View File

@@ -96,3 +96,4 @@ run_dump_test "protected2-l1om"
run_dump_test "protected3"
run_dump_test "protected3-l1om"
run_dump_test "tlsle1"
run_dump_test "tlspie1"