This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] bfd/s390: Fix DT_PLTRELSZ in presence of R_390_IRELATIVE.
- From: Marcin KoÅcielnicki <koriakin at 0x04 dot net>
- To: binutils at sourceware dot org
- Cc: amodra at gmail dot com, Marcin KoÅcielnicki <koriakin at 0x04 dot net>
- Date: Wed, 8 Jun 2016 18:19:26 +0200
- Subject: [PATCH] bfd/s390: Fix DT_PLTRELSZ in presence of R_390_IRELATIVE.
- Authentication-results: sourceware.org; auth=none
This was broken by 4ade44b727ee77adaa9c22719935d012e253a5e6,
which changed the calculation to use the .rela.plt linker section
instead of its output section - thus skipping .rela.iplt .
Fix the calculations to include it.
bfd/ChangeLog:
* elf32-s390.c (elf_s390_finish_dynamic_sections): Include
.rela.iplt in DT_PLTRELSZ.
* elf64-s390.c (elf_s390_finish_dynamic_sections): Likewise,
for DT_PLTRELSZ and DT_RELASZ as well.
---
OK to push?
bfd/elf32-s390.c | 3 +--
bfd/elf64-s390.c | 6 ++----
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
index 9480f72..1f058d2 100644
--- a/bfd/elf32-s390.c
+++ b/bfd/elf32-s390.c
@@ -3958,8 +3958,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
break;
case DT_PLTRELSZ:
- s = htab->elf.srelplt;
- dyn.d_un.d_val = s->size;
+ dyn.d_un.d_val = htab->elf.srelplt->size + htab->elf.irelplt->size;
break;
}
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index cf174f8..a39e1c9 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -3754,8 +3754,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
break;
case DT_PLTRELSZ:
- s = htab->elf.srelplt;
- dyn.d_un.d_val = s->size;
+ dyn.d_un.d_val = htab->elf.srelplt->size + htab->elf.irelplt->size;
break;
case DT_RELASZ:
@@ -3766,8 +3765,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
linker script arranges for .rela.plt to follow all
other relocation sections, we don't have to worry
about changing the DT_RELA entry. */
- s = htab->elf.srelplt;
- dyn.d_un.d_val -= s->size;
+ dyn.d_un.d_val -= htab->elf.srelplt->size + htab->elf.irelplt->size;
break;
}
--
2.8.2