forked from Imagelibrary/binutils-gdb
IBM zSystems: Fix offset relative to static TLS
For local exec TLS relocations of the form foo@NTPOFF+x the addend was ignored. bfd/ChangeLog: * elf32-s390.c (elf_s390_relocate_section): Honor addend for R_390_TLS_LE32. * elf64-s390.c (elf_s390_relocate_section): Honor addend for R_390_TLS_LE64. ld/ChangeLog: * testsuite/ld-s390/reloctlsle-1.d: New test. * testsuite/ld-s390/reloctlsle-1.s: New test.
This commit is contained in:
@@ -2706,7 +2706,7 @@ elf_s390_relocate_section (bfd *output_bfd,
|
||||
/* This relocation gets optimized away by the local exec
|
||||
access optimization. */
|
||||
BFD_ASSERT (! unresolved_reloc);
|
||||
bfd_put_32 (output_bfd, -tpoff (info, relocation),
|
||||
bfd_put_32 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
|
||||
contents + rel->r_offset);
|
||||
continue;
|
||||
}
|
||||
@@ -2901,7 +2901,7 @@ elf_s390_relocate_section (bfd *output_bfd,
|
||||
else
|
||||
{
|
||||
BFD_ASSERT (! unresolved_reloc);
|
||||
bfd_put_32 (output_bfd, -tpoff (info, relocation),
|
||||
bfd_put_32 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
|
||||
contents + rel->r_offset);
|
||||
}
|
||||
continue;
|
||||
|
||||
@@ -2714,7 +2714,7 @@ elf_s390_relocate_section (bfd *output_bfd,
|
||||
/* This relocation gets optimized away by the local exec
|
||||
access optimization. */
|
||||
BFD_ASSERT (! unresolved_reloc);
|
||||
bfd_put_64 (output_bfd, -tpoff (info, relocation),
|
||||
bfd_put_64 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
|
||||
contents + rel->r_offset);
|
||||
continue;
|
||||
}
|
||||
@@ -2907,7 +2907,7 @@ elf_s390_relocate_section (bfd *output_bfd,
|
||||
else
|
||||
{
|
||||
BFD_ASSERT (! unresolved_reloc);
|
||||
bfd_put_64 (output_bfd, -tpoff (info, relocation),
|
||||
bfd_put_64 (output_bfd, -tpoff (info, relocation) + rel->r_addend,
|
||||
contents + rel->r_offset);
|
||||
}
|
||||
continue;
|
||||
|
||||
6
ld/testsuite/ld-s390/reloctlsle-1.d
Normal file
6
ld/testsuite/ld-s390/reloctlsle-1.d
Normal file
@@ -0,0 +1,6 @@
|
||||
#as: -m64 -mzarch -march=z900
|
||||
#ld: -m elf64_s390 -static
|
||||
#readelf: -x .data
|
||||
|
||||
Hex dump of section '.data':
|
||||
0x[0-9a-f]+ ffffffff fffffff0 ffffffff fffffff8 ................
|
||||
14
ld/testsuite/ld-s390/reloctlsle-1.s
Normal file
14
ld/testsuite/ld-s390/reloctlsle-1.s
Normal file
@@ -0,0 +1,14 @@
|
||||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
larl %r0,bar
|
||||
|
||||
.section .tbss,"awT",@nobits
|
||||
.align 8
|
||||
foo: .zero 8
|
||||
.zero 8
|
||||
|
||||
.data
|
||||
.align 8
|
||||
.quad foo@NTPOFF
|
||||
bar: .quad foo@NTPOFF+8
|
||||
Reference in New Issue
Block a user