aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-i386
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2009-08-02 23:55:49 +0000
committerH.J. Lu <hjl.tools@gmail.com>2009-08-02 23:55:49 +0000
commit1d85728fd7299ff10bdcc066db96fb7e26748d58 (patch)
tree6aeeca69facc0b9b94d325b6989ae49364e4d5e9 /ld/testsuite/ld-i386
parent249da6857069f9c7bb7ac7cab91be8346ba5b94e (diff)
downloadfsf-binutils-gdb-1d85728fd7299ff10bdcc066db96fb7e26748d58.zip
fsf-binutils-gdb-1d85728fd7299ff10bdcc066db96fb7e26748d58.tar.gz
fsf-binutils-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 'ld/testsuite/ld-i386')
-rw-r--r--ld/testsuite/ld-i386/i386.exp1
-rw-r--r--ld/testsuite/ld-i386/tlspie1.d6
-rw-r--r--ld/testsuite/ld-i386/tlspie1.s64
3 files changed, 71 insertions, 0 deletions
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index 18e8d80..df2fcfc 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -139,3 +139,4 @@ run_dump_test "hidden3"
run_dump_test "protected1"
run_dump_test "protected2"
run_dump_test "protected3"
+run_dump_test "tlspie1"
diff --git a/ld/testsuite/ld-i386/tlspie1.d b/ld/testsuite/ld-i386/tlspie1.d
new file mode 100644
index 0000000..bac5dc6
--- /dev/null
+++ b/ld/testsuite/ld-i386/tlspie1.d
@@ -0,0 +1,6 @@
+#name: TLS with PIE
+#as: --32
+#ld: -melf_i386 -pie
+#readelf: -r
+
+There are no relocations in this file.
diff --git a/ld/testsuite/ld-i386/tlspie1.s b/ld/testsuite/ld-i386/tlspie1.s
new file mode 100644
index 0000000..c2b6151
--- /dev/null
+++ b/ld/testsuite/ld-i386/tlspie1.s
@@ -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