[PATCH] s390x: Set .got sh_entsize only if .got size > 0

Andreas Krebbel krebbel@linux.ibm.com
Mon Nov 23 07:52:19 GMT 2020


On 21.11.20 15:09, H.J. Lu wrote:
> 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.
Ok. Thanks!

Andreas

> ---
>  bfd/elf64-s390.c                 |  2 +-
>  ld/testsuite/ld-s390/pr26918-1.d |  5 +++++
>  ld/testsuite/ld-s390/pr26918-1.s | 19 +++++++++++++++++++
>  ld/testsuite/ld-s390/s390.exp    |  7 +++++++
>  4 files changed, 32 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/elf64-s390.c b/bfd/elf64-s390.c
> index 41b19bcd2c..d6a46b1d8c 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/testsuite/ld-s390/pr26918-1.d b/ld/testsuite/ld-s390/pr26918-1.d
> new file mode 100644
> index 0000000000..b02c2b6280
> --- /dev/null
> +++ b/ld/testsuite/ld-s390/pr26918-1.d
> @@ -0,0 +1,5 @@
> +#as: -m64 -mzarch -march=z900
> +#ld: -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 0000000000..980bc41564
> --- /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 660cf4b8b0..ee3438e8a7 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]
> +}
> 



More information about the Binutils mailing list