aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf64-x86-64.c4
-rw-r--r--ld/testsuite/ChangeLog8
-rw-r--r--ld/testsuite/ld-x86-64/tlsle1.d6
-rw-r--r--ld/testsuite/ld-x86-64/tlsle1.s11
-rw-r--r--ld/testsuite/ld-x86-64/x86-64.exp2
6 files changed, 35 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 42dd8e3..f15da41 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2009-07-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10434
+ * elf64-x86-64.c (elf64_x86_64_check_relocs): Check executable
+ instead of shared for R_X86_64_TPOFF32.
+ (elf64_x86_64_relocate_section): Likewise.
+
2009-07-23 Ulrich Drepper <drepper@redhat.com>
* elf-bfd.h (struct elf_link_hash_entry): Add unique_global field.
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 718f076..2364233 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -1231,7 +1231,7 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
goto create_got;
case R_X86_64_TPOFF32:
- if (info->shared)
+ if (!info->executable)
{
if (h)
name = h->root.root.string;
@@ -3639,7 +3639,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
break;
case R_X86_64_TPOFF32:
- BFD_ASSERT (! info->shared);
+ BFD_ASSERT (info->executable);
relocation = elf64_x86_64_tpoff (info, relocation);
break;
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index e1333f2..c50a807 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2009-07-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/10434
+ * ld-x86-64/tlsle1.d: New.
+ * ld-x86-64/tlsle1.s: Likewise.
+
+ * ld-x86-64/x86-64.exp: Run tlsle1.
+
2009-07-21 H.J. Lu <hongjiu.lu@intel.com>
PR ld/10426
diff --git a/ld/testsuite/ld-x86-64/tlsle1.d b/ld/testsuite/ld-x86-64/tlsle1.d
new file mode 100644
index 0000000..2142ef5
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/tlsle1.d
@@ -0,0 +1,6 @@
+#name: TLS LE with PIE
+#as: --64
+#ld: -melf_x86_64 -pie
+#readelf: -r
+
+There are no relocations in this file.
diff --git a/ld/testsuite/ld-x86-64/tlsle1.s b/ld/testsuite/ld-x86-64/tlsle1.s
new file mode 100644
index 0000000..4346a5d
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/tlsle1.s
@@ -0,0 +1,11 @@
+ .text
+ .globl _start
+_start:
+ movl $0, %fs:foo@TPOFF
+ .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/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 0b8e614..cb6c1a6 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -92,4 +92,4 @@ run_dump_test "hidden3"
run_dump_test "protected1"
run_dump_test "protected2"
run_dump_test "protected3"
-
+run_dump_test "tlsle1"