From cbf097d7b024fad33d13cc43ff0d35f2e0b11898 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 23 Nov 2020 05:06:51 -0800 Subject: [PATCH] s390x: Set .got sh_entsize only if .got size > 0 bfd/ PR ld/26918 * elf64-s390.c (elf_s390_finish_dynamic_sections): Set .got sh_entsize only if .got size > 0. ld: PR ld/26918 * testsuite/ld-s390/pr26918-1.d: New file. * testsuite/ld-s390/pr26918-1.s: Likewise. * testsuite/ld-s390/s390.exp: Run all *.d tests. --- bfd/ChangeLog | 6 ++++++ bfd/elf64-s390.c | 2 +- ld/ChangeLog | 7 +++++++ ld/testsuite/ld-s390/pr26918-1.d | 5 +++++ ld/testsuite/ld-s390/pr26918-1.s | 19 +++++++++++++++++++ ld/testsuite/ld-s390/s390.exp | 7 +++++++ 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-s390/pr26918-1.d create mode 100644 ld/testsuite/ld-s390/pr26918-1.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 36a048a872a..6a552c701bd 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2020-11-23 H.J. Lu + + PR ld/26918 + * elf64-s390.c (elf_s390_finish_dynamic_sections): Set .got + sh_entsize only if .got size > 0. + 2020-11-21 Nelson Chu * elfnn-riscv.c (_bfd_riscv_relax_section): Add a new relax pass diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 41b19bcd2ce..d6a46b1d8c4 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -3547,7 +3547,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.hgot->root.u.def.section->contents + 16); } - if (elf_section_data (htab->elf.splt->output_section) != NULL) + if (htab->elf.sgot != NULL && htab->elf.sgot->size > 0) elf_section_data (htab->elf.sgot->output_section) ->this_hdr.sh_entsize = 8; } diff --git a/ld/ChangeLog b/ld/ChangeLog index 2ee87783bd2..2d687f9ed30 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2020-11-23 H.J. Lu + + PR ld/26918 + * testsuite/ld-s390/pr26918-1.d: New file. + * testsuite/ld-s390/pr26918-1.s: Likewise. + * testsuite/ld-s390/s390.exp: Run all *.d tests. + 2020-11-23 Shahab Vahedi * testsuite/ld-arc/tls_ie-01.d: Use a more general pattern. diff --git a/ld/testsuite/ld-s390/pr26918-1.d b/ld/testsuite/ld-s390/pr26918-1.d new file mode 100644 index 00000000000..147ed980633 --- /dev/null +++ b/ld/testsuite/ld-s390/pr26918-1.d @@ -0,0 +1,5 @@ +#as: -m64 -mzarch -march=z900 +#ld: -m elf64_s390 -e start -static +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-s390/pr26918-1.s b/ld/testsuite/ld-s390/pr26918-1.s new file mode 100644 index 00000000000..980bc41564a --- /dev/null +++ b/ld/testsuite/ld-s390/pr26918-1.s @@ -0,0 +1,19 @@ + .machinemode zarch + .machine "z900" +.text + .align 8 +.globl start + .type start, @function +start: + larl %r1,foo@GOTENT + lg %r1,0(%r1) + lgf %r2,0(%r1) + br %r14 + .size start, .-start +.globl foo +.bss + .align 4 + .type foo, @object + .size foo, 4 +foo: + .zero 4 diff --git a/ld/testsuite/ld-s390/s390.exp b/ld/testsuite/ld-s390/s390.exp index 660cf4b8b07..ee3438e8a7e 100644 --- a/ld/testsuite/ld-s390/s390.exp +++ b/ld/testsuite/ld-s390/s390.exp @@ -95,3 +95,10 @@ if [istarget "s390x-*-*"] { run_ld_link_tests $s390tests run_ld_link_tests $s390xtests } + +set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]] +foreach t $test_list { + # We need to strip the ".d", but can leave the dirname. + verbose [file rootname $t] + run_dump_test [file rootname $t] +} -- 2.30.2