diff options
author | Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> | 2023-01-10 14:34:16 +0100 |
---|---|---|
committer | Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> | 2023-01-10 14:34:16 +0100 |
commit | aefebe82dc89711384b85329daa48d04c1d3a45b (patch) | |
tree | 11200422b2e566a41b07e2229c51692034a179b0 /bfd | |
parent | 18737d14799d609054994987dd75631430637a99 (diff) | |
download | fsf-binutils-gdb-aefebe82dc89711384b85329daa48d04c1d3a45b.zip fsf-binutils-gdb-aefebe82dc89711384b85329daa48d04c1d3a45b.tar.gz fsf-binutils-gdb-aefebe82dc89711384b85329daa48d04c1d3a45b.tar.bz2 |
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.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/elf32-s390.c | 4 | ||||
-rw-r--r-- | bfd/elf64-s390.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 061307d..9496b14 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -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; diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 5279660..bcf5903 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -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; |