From: Andreas Krebbel Date: Fri, 28 Jul 2017 16:35:36 +0000 (+0200) Subject: S/390: Fix segfault when linking -shared -nostartfiles X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=04a3789c7b49d4566d180e55e203859b4555890e;p=thirdparty%2Fbinutils-gdb.git S/390: Fix segfault when linking -shared -nostartfiles Regression-tested on s390x. bfd/ChangeLog: 2017-07-28 Andreas Krebbel Backport from mainline 2017-07-28 Andreas Krebbel * elf32-s390.c (elf_s390_finish_dynamic_sections): Add NULL pointer check for htab->elf.irelplt. * elf64-s390.c (elf_s390_finish_dynamic_sections): Likewise. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a81b9824279..496a5ca5565 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2017-07-28 Andreas Krebbel + + Backport from mainline + 2017-07-28 Andreas Krebbel + + * elf32-s390.c (elf_s390_finish_dynamic_sections): Add NULL + pointer check for htab->elf.irelplt. + * elf64-s390.c (elf_s390_finish_dynamic_sections): Likewise. + 2017-07-25 Tristan Gingold * version.m4: Bump version to 2.28.2 diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index ddb6f5b255e..7f22ae1a5d8 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -3930,7 +3930,9 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTRELSZ: - dyn.d_un.d_val = htab->elf.srelplt->size + htab->elf.irelplt->size; + dyn.d_un.d_val = htab->elf.srelplt->size; + if (htab->elf.irelplt) + dyn.d_un.d_val += htab->elf.irelplt->size; break; } diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index fbbf8d6e1de..a59777c2df9 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -3729,7 +3729,9 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTRELSZ: - dyn.d_un.d_val = htab->elf.srelplt->size + htab->elf.irelplt->size; + dyn.d_un.d_val = htab->elf.srelplt->size; + if (htab->elf.irelplt) + dyn.d_un.d_val += htab->elf.irelplt->size; break; case DT_RELASZ: @@ -3740,7 +3742,9 @@ 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. */ - dyn.d_un.d_val -= htab->elf.srelplt->size + htab->elf.irelplt->size; + dyn.d_un.d_val -= htab->elf.srelplt->size; + if (htab->elf.irelplt) + dyn.d_un.d_val -= htab->elf.irelplt->size; break; }