This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: Add new i386/x86-64 TLS transition tests


I am checking in this patch to add some new i386/x86-64 TLS transition
tests. Those failed code sequences work if no TLS transition is
done.

H.J.
---
2007-08-24  H.J. Lu  <hongjiu.lu@intel.com>

	* ld-i386/i386.exp (i386tests): Add a test for TLS IE->LE
	transition.
	Run tlsie2, tlsie3, tlsie4 and tlsie5.

	* ld-i386/tlsie1.dd: New file.
	* ld-i386/tlsie1.s: Likewise.
	* ld-i386/tlsie2.d: Likewise.
	* ld-i386/tlsie2.s: Likewise.
	* ld-i386/tlsie3.d: Likewise.
	* ld-i386/tlsie3.s: Likewise.
	* ld-i386/tlsie4.d: Likewise.
	* ld-i386/tlsie4.s: Likewise.
	* ld-i386/tlsie5.d: Likewise.
	* ld-i386/tlsie5.s: Likewise.
	* ld-x86-64/tlsgd2.d: Likewise.
	* ld-x86-64/tlsgd2.s: Likewise.
	* ld-x86-64/tlsgd3.d: Likewise.
	* ld-x86-64/tlsgd3.s: Likewise.
	* ld-x86-64/tlsie1.dd: Likewise.
	* ld-x86-64/tlsie1.s: Likewise.
	* ld-x86-64/tlsie2.d: Likewise.
	* ld-x86-64/tlsie2.s: Likewise.
	* ld-x86-64/tlsie3.d: Likewise.
	* ld-x86-64/tlsie3.s: Likewise.

	* ld-x86-64/x86-64.exp (x86_64tests): Add a test for TLS LD->LE
	transition.
	Run tlsgd2, tlsgd3, tlsie2 and tlsie3.

--- ld/testsuite/ld-i386/i386.exp.check	2007-08-14 12:48:39.000000000 -0700
+++ ld/testsuite/ld-i386/i386.exp	2007-08-24 12:21:10.000000000 -0700
@@ -115,6 +115,9 @@ set i386tests {
     {"TLS LD->LE transition" "-melf_i386"
      "--32" {tlsld1.s}
      {{objdump -dwr tlsld1.dd}} "tlsld1"}
+    {"TLS IE->LE transition" "-melf_i386"
+     "--32" {tlsie1.s}
+     {{objdump -dwr tlsie1.dd}} "tlsie1"}
 }
 
 run_ld_link_tests $i386tests
@@ -125,3 +128,7 @@ run_dump_test "pcrel16"
 run_dump_test "pcrel16abs"
 run_dump_test "alloc"
 run_dump_test "warn1"
+run_dump_test "tlsie2"
+run_dump_test "tlsie3"
+run_dump_test "tlsie4"
+run_dump_test "tlsie5"
--- ld/testsuite/ld-i386/tlsie1.dd.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie1.dd	2007-08-24 12:09:09.000000000 -0700
@@ -0,0 +1,18 @@
+#source: tlsie1.s
+#as: --32
+#ld: -melf_i386 tmpdir/tlsld1
+#objdump: -drw
+#target: i?86-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ 	]*[a-f0-9]+:	81 c1 fc ff ff ff    	add    \$0xfffffffc,%ecx
+[ 	]*[a-f0-9]+:	81 c1 fc ff ff ff    	add    \$0xfffffffc,%ecx
+[ 	]*[a-f0-9]+:	c7 c0 fc ff ff ff    	mov    \$0xfffffffc,%eax
+[ 	]*[a-f0-9]+:	c7 c1 fc ff ff ff    	mov    \$0xfffffffc,%ecx
+[ 	]*[a-f0-9]+:	b8 fc ff ff ff       	mov    \$0xfffffffc,%eax
+[ 	]*[a-f0-9]+:	c7 c1 fc ff ff ff    	mov    \$0xfffffffc,%ecx
+#pass
--- ld/testsuite/ld-i386/tlsie1.s.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie1.s	2007-08-24 12:08:21.000000000 -0700
@@ -0,0 +1,16 @@
+	.text
+	.globl _start
+_start:
+	addl	foo@gotntpoff(%ebx), %ecx
+	addl	foo@indntpoff, %ecx
+	movl	foo@gotntpoff(%ebx), %eax
+	movl	foo@gotntpoff(%ebx), %ecx
+	movl	foo@indntpoff, %eax
+	movl	foo@indntpoff, %ecx
+	.globl foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-i386/tlsie2.d.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie2.d	2007-08-24 12:18:24.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_GOTIE with %eax)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_GOTIE to R_386_TLS_LE_32 against `foo'.*failed.*
--- ld/testsuite/ld-i386/tlsie2.s.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie2.s	2007-08-24 12:11:53.000000000 -0700
@@ -0,0 +1,12 @@
+	.text
+	.globl _start
+_start:
+	leal	foo@gotntpoff(%ebx), %eax
+	movl	(%eax), %eax
+	.globl foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-i386/tlsie3.d.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie3.d	2007-08-24 12:18:58.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_GOTIE)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_GOTIE to R_386_TLS_LE_32 against `foo'.*failed.*
--- ld/testsuite/ld-i386/tlsie3.s.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie3.s	2007-08-24 12:19:23.000000000 -0700
@@ -0,0 +1,12 @@
+	.text
+	.globl _start
+_start:
+	leal	foo@gotntpoff(%ebx), %ecx
+	movl	(%ecx), %ecx
+	.globl foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-i386/tlsie4.d.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie4.d	2007-08-24 12:21:46.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_IE with %eax)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_IE to R_386_TLS_LE_32 against `foo'.*failed.*
--- ld/testsuite/ld-i386/tlsie4.s.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie4.s	2007-08-24 12:20:32.000000000 -0700
@@ -0,0 +1,12 @@
+	.text
+	.globl _start
+_start:
+	leal	foo@indntpoff(%ebx), %eax
+	movl	(%eax), %eax
+	.globl foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-i386/tlsie5.d.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie5.d	2007-08-24 12:22:01.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (R_386_TLS_IE)
+#as: --32
+#ld: -melf_i386
+#error: .*TLS transition from R_386_TLS_IE to R_386_TLS_LE_32 against `foo'.*failed.*
--- ld/testsuite/ld-i386/tlsie5.s.check	2007-08-24 12:23:25.000000000 -0700
+++ ld/testsuite/ld-i386/tlsie5.s	2007-08-24 12:22:45.000000000 -0700
@@ -0,0 +1,12 @@
+	.text
+	.globl _start
+_start:
+	leal	foo@indntpoff, %ecx
+	movl	(%ecx), %ecx
+	.globl foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-x86-64/tlsgd2.d.check	2007-08-24 10:29:32.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsgd2.d	2007-08-24 12:13:17.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS GD->IE transition check
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_TLSGD to R_X86_64_GOTTPOFF against `foo'.*failed.*
--- ld/testsuite/ld-x86-64/tlsgd2.s.check	2007-08-24 10:29:28.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsgd2.s	2007-08-24 11:16:02.000000000 -0700
@@ -0,0 +1,5 @@
+	.text
+	.globl _start
+_start:
+	leaq	foo@TLSGD(%rip), %rdi
+	call	__tls_get_addr
--- ld/testsuite/ld-x86-64/tlsgd3.d.check	2007-08-24 10:29:40.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsgd3.d	2007-08-24 12:13:22.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS GD->LE transition check
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_TLSGD to R_X86_64_TPOFF32 against `a local symbol'.*failed.*
--- ld/testsuite/ld-x86-64/tlsgd3.s.check	2007-08-24 10:29:44.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsgd3.s	2007-08-24 11:17:44.000000000 -0700
@@ -0,0 +1,11 @@
+	.text
+	.globl _start
+_start:
+	leaq	foo@TLSGD(%rip), %rdi
+	call	__tls_get_addr
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-x86-64/tlsie1.dd.check	2007-08-24 11:51:44.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsie1.dd	2007-08-24 11:47:21.000000000 -0700
@@ -0,0 +1,16 @@
+#source: tlsie1.s
+#as: --64
+#ld: -melf_x86_64 tmpdir/tlsie1
+#objdump: -drw
+#target: x86_64-*-linux*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+[ 	]*[a-f0-9]+:	48 c7 c0 fc ff ff ff 	mov    \$0xfffffffffffffffc,%rax
+[ 	]*[a-f0-9]+:	48 8d 80 fc ff ff ff 	lea    -0x4\(%rax\),%rax
+[ 	]*[a-f0-9]+:	49 c7 c4 fc ff ff ff 	mov    \$0xfffffffffffffffc,%r12
+[ 	]*[a-f0-9]+:	49 81 c4 fc ff ff ff 	add    \$0xfffffffffffffffc,%r12
+#pass
--- ld/testsuite/ld-x86-64/tlsie1.s.check	2007-08-24 11:21:38.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsie1.s	2007-08-24 11:45:21.000000000 -0700
@@ -0,0 +1,14 @@
+	.text
+	.globl _start
+_start:
+	movq	foo@GOTTPOFF(%rip), %rax
+	addq	foo@GOTTPOFF(%rip), %rax
+	movq	foo@GOTTPOFF(%rip), %r12
+	addq	foo@GOTTPOFF(%rip), %r12
+	.globl	foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-x86-64/tlsie2.d.check	2007-08-24 11:51:39.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsie2.d	2007-08-24 12:16:12.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_GOTTPOFF to R_X86_64_TPOFF32 against `foo'.*failed.*
--- ld/testsuite/ld-x86-64/tlsie2.s.check	2007-08-24 11:51:29.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsie2.s	2007-08-24 11:48:07.000000000 -0700
@@ -0,0 +1,12 @@
+	.text
+	.globl _start
+_start:
+	leaq	foo@GOTTPOFF(%rip), %rax
+	movq	(%rax), %rax
+	.globl	foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-x86-64/tlsie3.d.check	2007-08-24 11:51:34.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsie3.d	2007-08-24 12:16:06.000000000 -0700
@@ -0,0 +1,4 @@
+#name: TLS IE->LE transition check (%r12)
+#as: --64
+#ld: -melf_x86_64
+#error: .*TLS transition from R_X86_64_GOTTPOFF to R_X86_64_TPOFF32 against `foo'.*failed.*
--- ld/testsuite/ld-x86-64/tlsie3.s.check	2007-08-24 11:51:32.000000000 -0700
+++ ld/testsuite/ld-x86-64/tlsie3.s	2007-08-24 11:50:05.000000000 -0700
@@ -0,0 +1,12 @@
+	.text
+	.globl _start
+_start:
+	leaq	foo@GOTTPOFF(%rip), %r12
+	movq	(%r12), %r12
+	.globl	foo
+	.section	.tdata,"awT",@progbits
+	.align 4
+	.type	foo, @object
+	.size	foo, 4
+foo:
+	.long	100
--- ld/testsuite/ld-x86-64/x86-64.exp.check	2007-08-14 12:48:39.000000000 -0700
+++ ld/testsuite/ld-x86-64/x86-64.exp	2007-08-24 11:50:40.000000000 -0700
@@ -72,6 +72,9 @@ set x86_64tests {
     {"TLS LD->LE transition" "-melf_x86_64"
      "--64" {tlsld1.s}
      {{objdump -dwr tlsld1.dd}} "tlsld1"}
+    {"TLS IE->LE transition" "-melf_x86_64"
+     "--64" {tlsie1.s}
+     {{objdump -dwr tlsie1.dd}} "tlsie1"}
 }
 
 run_ld_link_tests $x86_64tests
@@ -79,3 +82,7 @@ run_ld_link_tests $x86_64tests
 run_dump_test "abs"
 run_dump_test "pcrel8"
 run_dump_test "pcrel16"
+run_dump_test "tlsgd2"
+run_dump_test "tlsgd3"
+run_dump_test "tlsie2"
+run_dump_test "tlsie3"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]