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.
This commit is contained in:
parent
97724570fe
commit
a45bb67df2
@ -1,3 +1,10 @@
|
||||
2002-10-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* 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 <gavin@redhat.com>
|
||||
Ken Raeburn <raeburn@cygnus.com>
|
||||
Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
@ -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. */
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -1,3 +1,16 @@
|
||||
2002-10-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* 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 <amodra@bigpond.net.au>
|
||||
|
||||
* ld-powerpc/powerpc.exp: Restrict to 32 bit ELF.
|
||||
|
||||
@ -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"}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
12
ld/testsuite/ld-i386/tlsg.s
Normal file
12
ld/testsuite/ld-i386/tlsg.s
Normal file
@ -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
|
||||
10
ld/testsuite/ld-i386/tlsg.sd
Normal file
10
ld/testsuite/ld-i386/tlsg.sd
Normal file
@ -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 +.*
|
||||
@ -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 *
|
||||
|
||||
@ -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
|
||||
|
||||
12
ld/testsuite/ld-x86-64/tlsg.s
Normal file
12
ld/testsuite/ld-x86-64/tlsg.s
Normal file
@ -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
|
||||
10
ld/testsuite/ld-x86-64/tlsg.sd
Normal file
10
ld/testsuite/ld-x86-64/tlsg.sd
Normal file
@ -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+ +.*
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user