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:
Stefan Schulze Frielinghaus
2023-01-10 14:34:16 +01:00
parent 18737d1479
commit aefebe82dc
4 changed files with 24 additions and 4 deletions

View File

@@ -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;

View File

@@ -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;

View 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 ................

View 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