2007-08-24 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 24 Aug 2007 19:39:19 +0000 (19:39 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 24 Aug 2007 19:39:19 +0000 (19:39 +0000)
* 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.

23 files changed:
ld/testsuite/ChangeLog
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/tlsie1.dd [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie1.s [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie2.d [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie2.s [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie3.d [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie3.s [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie4.d [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie4.s [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie5.d [new file with mode: 0644]
ld/testsuite/ld-i386/tlsie5.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsgd2.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsgd2.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsgd3.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsgd3.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsie1.dd [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsie1.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsie2.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsie2.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsie3.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsie3.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp

index ad425418a52dbeaf2b8c2a0a1499455404db0792..ecd896ca62418c7d9f210a04755e1c5c73b40ae2 100644 (file)
@@ -1,3 +1,34 @@
+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.
+
 2007-08-23  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ld-i386/tlsbinpic.s: Add a new GD -> IE test.
index 2c7c14b317ec7d0e651c1b0f1fc0885271fa44cf..10f90ce62796e862e4190c5ed9be28546537a1d8 100644 (file)
@@ -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"
diff --git a/ld/testsuite/ld-i386/tlsie1.dd b/ld/testsuite/ld-i386/tlsie1.dd
new file mode 100644 (file)
index 0000000..2cebc70
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-i386/tlsie1.s b/ld/testsuite/ld-i386/tlsie1.s
new file mode 100644 (file)
index 0000000..d4ad569
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-i386/tlsie2.d b/ld/testsuite/ld-i386/tlsie2.d
new file mode 100644 (file)
index 0000000..ebb85fd
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-i386/tlsie2.s b/ld/testsuite/ld-i386/tlsie2.s
new file mode 100644 (file)
index 0000000..72df617
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-i386/tlsie3.d b/ld/testsuite/ld-i386/tlsie3.d
new file mode 100644 (file)
index 0000000..d993f30
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-i386/tlsie3.s b/ld/testsuite/ld-i386/tlsie3.s
new file mode 100644 (file)
index 0000000..865156d
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-i386/tlsie4.d b/ld/testsuite/ld-i386/tlsie4.d
new file mode 100644 (file)
index 0000000..3ca8fdd
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-i386/tlsie4.s b/ld/testsuite/ld-i386/tlsie4.s
new file mode 100644 (file)
index 0000000..3469f29
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-i386/tlsie5.d b/ld/testsuite/ld-i386/tlsie5.d
new file mode 100644 (file)
index 0000000..3febeb1
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-i386/tlsie5.s b/ld/testsuite/ld-i386/tlsie5.s
new file mode 100644 (file)
index 0000000..affee31
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-x86-64/tlsgd2.d b/ld/testsuite/ld-x86-64/tlsgd2.d
new file mode 100644 (file)
index 0000000..494560b
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-x86-64/tlsgd2.s b/ld/testsuite/ld-x86-64/tlsgd2.s
new file mode 100644 (file)
index 0000000..f583c85
--- /dev/null
@@ -0,0 +1,5 @@
+       .text
+       .globl _start
+_start:
+       leaq    foo@TLSGD(%rip), %rdi
+       call    __tls_get_addr
diff --git a/ld/testsuite/ld-x86-64/tlsgd3.d b/ld/testsuite/ld-x86-64/tlsgd3.d
new file mode 100644 (file)
index 0000000..40f8e3d
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-x86-64/tlsgd3.s b/ld/testsuite/ld-x86-64/tlsgd3.s
new file mode 100644 (file)
index 0000000..e1e7e60
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-x86-64/tlsie1.dd b/ld/testsuite/ld-x86-64/tlsie1.dd
new file mode 100644 (file)
index 0000000..74dc39b
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-x86-64/tlsie1.s b/ld/testsuite/ld-x86-64/tlsie1.s
new file mode 100644 (file)
index 0000000..c7722b1
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-x86-64/tlsie2.d b/ld/testsuite/ld-x86-64/tlsie2.d
new file mode 100644 (file)
index 0000000..97dcc28
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-x86-64/tlsie2.s b/ld/testsuite/ld-x86-64/tlsie2.s
new file mode 100644 (file)
index 0000000..c9b9bfb
--- /dev/null
@@ -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
diff --git a/ld/testsuite/ld-x86-64/tlsie3.d b/ld/testsuite/ld-x86-64/tlsie3.d
new file mode 100644 (file)
index 0000000..8c982a6
--- /dev/null
@@ -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.*
diff --git a/ld/testsuite/ld-x86-64/tlsie3.s b/ld/testsuite/ld-x86-64/tlsie3.s
new file mode 100644 (file)
index 0000000..13faf34
--- /dev/null
@@ -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
index 3d251292a7631ceb696f3ca28708fd0f5ef5262e..cd2609108aae3bd9e9b1cbfe213a3e56ff10b1f1 100644 (file)
@@ -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"