s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie
authorStefan Liebler <stli@linux.ibm.com>
Thu, 28 Apr 2022 12:30:55 +0000 (14:30 +0200)
committerAndreas Krebbel <krebbel@linux.ibm.com>
Thu, 28 Apr 2022 12:52:06 +0000 (14:52 +0200)
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.

bfd/elf64-s390.c

index 00ee386baabe5e74d68032c31312856391b0e213..0b851f7ac0eb5cf67a8eea876bb8bc29ef722ab9 100644 (file)
@@ -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.  */