From: Jakub Jelinek Date: Tue, 1 Oct 2002 09:10:46 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a45bb67df201470589b4adc8b50190bdbec903cb;p=binutils-gdb.git bfd/ * elf32-i386.c (elf_i386_relocate_section): Resolve R_386_TLS_LDO_32 to st_value + addend in non-code sections. * elf64-x86-64.c (elf64_x86_64_relocate_section): Resolve R_X86_64_DTPOFF32 to st_value + addend in non-code sections. ld/testsuite/ * ld-i386/i386.exp: Add tlsg test. * ld-i386/tlsg.s: New test. * ld-i386/tlsg.sd: New test. * ld-i386/tlsbin.dd: Change LD into LD -> LE in comments. * ld-i386/tlsbinpic.s: Likewise. * ld-x86-64/x86-64.exp: Add tlsg test. * ld-x86-64/tlsg.s: New test. * ld-x86-64/tlsg.sd: New test. * ld-x86-64/tlsbin.dd: Change LD into LD -> LE in comments. * ld-x86-64/tlsbinpic.s: Likewise. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f4fb4e00e60..9ce67794579 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2002-10-01 Jakub Jelinek + + * elf32-i386.c (elf_i386_relocate_section): Resolve R_386_TLS_LDO_32 + to st_value + addend in non-code sections. + * elf64-x86-64.c (elf64_x86_64_relocate_section): Resolve + R_X86_64_DTPOFF32 to st_value + addend in non-code sections. + 2002-09-30 Gavin Romig-Koch Ken Raeburn Aldy Hernandez diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index b71d78eb073..6bd277e6368 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2926,7 +2926,7 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section, break; case R_386_TLS_LDO_32: - if (info->shared) + if (info->shared || (input_section->flags & SEC_CODE) == 0) relocation -= dtpoff_base (info); else /* When converting LDO to LE, we must negate. */ diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index fa2f2ee5ec1..2f92eae38a4 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2496,7 +2496,7 @@ elf64_x86_64_relocate_section (output_bfd, info, input_bfd, input_section, break; case R_X86_64_DTPOFF32: - if (info->shared) + if (info->shared || (input_section->flags & SEC_CODE) == 0) relocation -= dtpoff_base (info); else relocation = tpoff (info, relocation); diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 35dda7b4d33..55a1208bd71 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2002-10-01 Jakub Jelinek + + * ld-i386/i386.exp: Add tlsg test. + * ld-i386/tlsg.s: New test. + * ld-i386/tlsg.sd: New test. + * ld-i386/tlsbin.dd: Change LD into LD -> LE in comments. + * ld-i386/tlsbinpic.s: Likewise. + * ld-x86-64/x86-64.exp: Add tlsg test. + * ld-x86-64/tlsg.s: New test. + * ld-x86-64/tlsg.sd: New test. + * ld-x86-64/tlsbin.dd: Change LD into LD -> LE in comments. + * ld-x86-64/tlsbinpic.s: Likewise. + 2002-09-30 Alan Modra * ld-powerpc/powerpc.exp: Restrict to 32 bit ELF. diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index 15821ebdbfe..795efc218db 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -52,6 +52,9 @@ set i386tests { "--32" {tlsnopic1.s tlsnopic2.s} {{readelf -Ssrl tlsnopic.rd} {objdump -drj.text tlsnopic.dd} {objdump -sj.got tlsnopic.sd}} "libtlsnopic.so"} + {"TLS in debug sections" "-melf_i386" + "--32" {tlsg.s} + {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"} {"Reloc section order" "-shared -melf_i386" "--32" {reloc.s} {{objdump -hw reloc.d}} "reloc.so"} } diff --git a/ld/testsuite/ld-i386/tlsbin.dd b/ld/testsuite/ld-i386/tlsbin.dd index 9ad0cc3ed32..83c34092273 100644 --- a/ld/testsuite/ld-i386/tlsbin.dd +++ b/ld/testsuite/ld-i386/tlsbin.dd @@ -89,7 +89,7 @@ Disassembly of section .text: 8049082: 90[ ]+nop * 8049083: 90[ ]+nop * 8049084: 90[ ]+nop * -# LD +# LD -> LE 8049085: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax 804908b: 90[ ]+nop * 804908c: 8d 74 26 00[ ]+lea 0x0\(%esi,1\),%esi @@ -105,7 +105,7 @@ Disassembly of section .text: 80490a1: 90[ ]+nop * 80490a2: 90[ ]+nop * 80490a3: 90[ ]+nop * -# LD against hidden variables +# LD -> LE against hidden variables 80490a4: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax 80490aa: 90[ ]+nop * 80490ab: 8d 74 26 00[ ]+lea 0x0\(%esi,1\),%esi diff --git a/ld/testsuite/ld-i386/tlsbinpic.s b/ld/testsuite/ld-i386/tlsbinpic.s index 027773a3e97..c6b6efa1d9a 100644 --- a/ld/testsuite/ld-i386/tlsbinpic.s +++ b/ld/testsuite/ld-i386/tlsbinpic.s @@ -83,7 +83,7 @@ fn2: call ___tls_get_addr@plt nop;nop;nop;nop - /* LD */ + /* LD -> LE */ leal sl1@tlsldm(%ebx), %eax call ___tls_get_addr@PLT nop;nop @@ -92,7 +92,7 @@ fn2: leal sl2@dtpoff(%eax), %ecx nop;nop;nop;nop - /* LD against hidden variables */ + /* LD -> LE against hidden variables */ leal sh1@tlsldm(%ebx), %eax call ___tls_get_addr@PLT nop;nop diff --git a/ld/testsuite/ld-i386/tlsg.s b/ld/testsuite/ld-i386/tlsg.s new file mode 100644 index 00000000000..b8e1a5d766d --- /dev/null +++ b/ld/testsuite/ld-i386/tlsg.s @@ -0,0 +1,12 @@ + .section .tbss,"awT",@nobits + .align 4 + .skip 24 + .type a,@object + .size a,4 +a: + .zero 4 + .text + .globl _start +_start: + .section .debug_foobar + .long a@dtpoff diff --git a/ld/testsuite/ld-i386/tlsg.sd b/ld/testsuite/ld-i386/tlsg.sd new file mode 100644 index 00000000000..d79476221bc --- /dev/null +++ b/ld/testsuite/ld-i386/tlsg.sd @@ -0,0 +1,10 @@ +#source: tlsg.s +#as: --32 +#ld: -melf_i386 +#objdump: -sj.debug_foobar +#target: i?86-*-* + +.*: +file format elf32-i386 + +Contents of section .debug_foobar: + 0+ 18000000 +.* diff --git a/ld/testsuite/ld-x86-64/tlsbin.dd b/ld/testsuite/ld-x86-64/tlsbin.dd index 288b2cd187d..c6aef681529 100644 --- a/ld/testsuite/ld-x86-64/tlsbin.dd +++ b/ld/testsuite/ld-x86-64/tlsbin.dd @@ -67,7 +67,7 @@ Disassembly of section .text: 401065: 90[ ]+nop * 401066: 90[ ]+nop * 401067: 90[ ]+nop * -# LD +# LD -> LE 401068: 66 66 66 64 48 8b 04[ ]+mov %fs:0x0,%rax 40106f: 25 00 00 00 00 * 401074: 90[ ]+nop * @@ -82,7 +82,7 @@ Disassembly of section .text: 401087: 90[ ]+nop * 401088: 90[ ]+nop * 401089: 90[ ]+nop * -# LD against hidden variables +# LD -> LE against hidden variables 40108a: 66 66 66 64 48 8b 04[ ]+mov %fs:0x0,%rax 401091: 25 00 00 00 00 * 401096: 90[ ]+nop * diff --git a/ld/testsuite/ld-x86-64/tlsbinpic.s b/ld/testsuite/ld-x86-64/tlsbinpic.s index da6085f233d..0f5765a52ff 100644 --- a/ld/testsuite/ld-x86-64/tlsbinpic.s +++ b/ld/testsuite/ld-x86-64/tlsbinpic.s @@ -70,7 +70,7 @@ fn2: call __tls_get_addr@plt nop;nop;nop;nop - /* LD */ + /* LD -> LE */ leaq sl1@tlsld(%rip), %rdi call __tls_get_addr@plt nop;nop @@ -79,7 +79,7 @@ fn2: leaq sl2@dtpoff+2(%rax), %r9 nop;nop;nop;nop - /* LD against hidden variables */ + /* LD -> LE against hidden variables */ leaq sh1@tlsld(%rip), %rdi call __tls_get_addr@plt nop;nop diff --git a/ld/testsuite/ld-x86-64/tlsg.s b/ld/testsuite/ld-x86-64/tlsg.s new file mode 100644 index 00000000000..048e98f019c --- /dev/null +++ b/ld/testsuite/ld-x86-64/tlsg.s @@ -0,0 +1,12 @@ + .section .tbss,"awT",@nobits + .align 4 + .skip 24 + .type a,@object + .size a,4 +a: + .zero 4 + .text + .globl _start +_start: + .section .debug_foobar + .long a@dtpoff, 0 diff --git a/ld/testsuite/ld-x86-64/tlsg.sd b/ld/testsuite/ld-x86-64/tlsg.sd new file mode 100644 index 00000000000..4eaf3cdf26b --- /dev/null +++ b/ld/testsuite/ld-x86-64/tlsg.sd @@ -0,0 +1,10 @@ +#source: tlsg.s +#as: --64 +#ld: -melf_x86_64 +#objdump: -sj.debug_foobar +#target: x86_64-*-* + +.*: +file format elf64-x86-64 + +Contents of section .debug_foobar: + 0+ 18000000 0+ +.* diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index edfae9a7820..1bbae430c2b 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -46,6 +46,9 @@ set x86_64tests { {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd} {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}} "tlsbin"} + {"TLS in debug sections" "-melf_x86_64" + "--64" {tlsg.s} + {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"} } run_ld_link_tests $x86_64tests