52 lines
1.9 KiB
Diff
52 lines
1.9 KiB
Diff
|
From 9a01457e02e7bb594ff9a9ac62a38c909e2e3083 Mon Sep 17 00:00:00 2001
|
||
|
From: Stefan Liebler <stli@linux.ibm.com>
|
||
|
Date: Thu, 28 Apr 2022 14:30:55 +0200
|
||
|
Subject: [PATCH] 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)
|
||
|
---
|
||
|
bfd/elf64-s390.c | 15 ++++++++++++++-
|
||
|
1 file changed, 14 insertions(+), 1 deletion(-)
|
||
|
|
||
|
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. */
|
||
|
--
|
||
|
2.27.0
|
||
|
|