diff options
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf64-x86-64.c | 4 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/tlsle1.d | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/tlsle1.s | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/x86-64.exp | 2 |
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" |