bfd/s390: Fix DT_PLTRELSZ in presence of R_390_IRELATIVE.
authorMarcin Kościelnicki <koriakin@0x04.net>
Wed, 8 Jun 2016 12:01:31 +0000 (14:01 +0200)
committerMarcin Kościelnicki <koriakin@0x04.net>
Thu, 16 Jun 2016 15:22:14 +0000 (17:22 +0200)
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.

bfd/ChangeLog
bfd/elf32-s390.c
bfd/elf64-s390.c

index ad9e027..09150db 100644 (file)
@@ -1,3 +1,10 @@
+2016-06-16  Marcin Kościelnicki  <koriakin@0x04.net>
+
+       * 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.
+
 2016-06-16  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf32-i386.c (elf_i386_check_relocs): Skip relocations in
index 9480f72..1f058d2 100644 (file)
@@ -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;
            }
 
index cf174f8..a39e1c9 100644 (file)
@@ -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;
            }