aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Liebler <stli@linux.ibm.com>2022-04-28 14:30:55 +0200
committerAndreas K. Hüttel <dilfridge@gentoo.org>2022-06-06 14:14:40 +0200
commit9667e2de38db0c92fa9cc56c6f971076004d401b (patch)
treea452232037fa31a6157d23b5d16448eede024ac1
parents390: Avoid dynamic TLS relocs in PIE (diff)
downloadbinutils-gdb-9667e2de38db0c92fa9cc56c6f971076004d401b.tar.gz
binutils-gdb-9667e2de38db0c92fa9cc56c6f971076004d401b.tar.bz2
binutils-gdb-9667e2de38db0c92fa9cc56c6f971076004d401b.zip
s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie
In static-pie case, there are IRELATIVE-relocs in .rela.iplt (htab->irelplt), which will later be grouped to .rela.plt. On s390, the IRELATIVE relocations are always located in .rela.iplt - even for non-static case. Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added to the dynamic section even if htab->srelplt->size == 0. See _bfd_elf_add_dynamic_tags in bfd/elflink.c. bfd/ elf64-s390.c (elf_s390_size_dynamic_sections): Enforce DT_JMPREL via htab->elf.dt_jmprel_required. (cherry picked from commit d942d8db12adf4c9e5c7d9ed6496a779ece7149e) (cherry picked from commit 9a01457e02e7bb594ff9a9ac62a38c909e2e3083)
-rw-r--r--bfd/elf64-s390.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index 00ee386baab..0b851f7ac0e 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -1876,7 +1876,20 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
else if (startswith (bfd_section_name (s), ".rela"))
{
if (s->size != 0 && s != htab->elf.srelplt)
- relocs = true;
+ {
+ relocs = true;
+ if (s == htab->elf.irelplt)
+ {
+ /* In static-pie case, there are IRELATIVE-relocs in
+ .rela.iplt (htab->irelplt), which will later be grouped
+ to .rela.plt. On s390, the IRELATIVE relocations are
+ always located in .rela.iplt - even for non-static case.
+ Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
+ to the dynamic section even if htab->srelplt->size == 0.
+ See _bfd_elf_add_dynamic_tags in bfd/elflink.c. */
+ htab->elf.dt_jmprel_required = true;
+ }
+ }
/* We use the reloc_count field as a counter if we need
to copy relocs into the output file. */