From 4c7236d3cb7b971bbdc97b6aec348a4aa0594a9b Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sun, 8 Oct 2017 14:29:52 -0700 Subject: [PATCH] tilegx: Set this_hdr.sh_entsize only if section size > 0 This fixes: /export/build/gnu/binutils-cross/build-tilegx-linux/ld/ld-new -o tmpdir/comm-data -z norelro -L/export/gnu/import/git/sources/binutils-gdb/ld/testsuite/ld-elf -T comm-data2.ld -Ltmpdir -lcomm-data tmpdir/comm-data2.o sh: line 1: 9208 Segmentation fault (core dumped) /export/build/gnu/binutils-cross/build-tilegx-linux/ld/ld-new -o tmpdir/comm-data -z norelro -L/export/gnu/import/git/sources/binutils-gdb/ld/testsuite/ld-elf -T comm-data2.ld -Ltmpdir -lcomm-data tmpdir/comm-data2.o 2>&1 FAIL: Common symbol override test * elfxx-tilegx.c (tilegx_elf_finish_dynamic_sections): Set this_hdr.sh_entsize only if section size > 0. --- bfd/ChangeLog | 5 +++++ bfd/elfxx-tilegx.c | 18 +++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7d7bf58738..2d1af3a1e5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2017-10-08 H.J. Lu + + * elfxx-tilegx.c (tilegx_elf_finish_dynamic_sections): Set + this_hdr.sh_entsize only if section size > 0. + 2017-10-08 H.J. Lu * elfxx-x86.c (elf_x86_allocate_dynrelocs): Reformat. diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c index a413fb6a9d..b83adc8464 100644 --- a/bfd/elfxx-tilegx.c +++ b/bfd/elfxx-tilegx.c @@ -4313,10 +4313,10 @@ tilegx_elf_finish_dynamic_sections (bfd *output_bfd, entry size. */ pad_size = PLT_ENTRY_SIZE - PLT_HEADER_SIZE - PLT_TAIL_SIZE; memset (splt->contents + splt->size - pad_size, 0, pad_size); - } - elf_section_data (splt->output_section)->this_hdr.sh_entsize - = PLT_ENTRY_SIZE; + elf_section_data (splt->output_section)->this_hdr.sh_entsize + = PLT_ENTRY_SIZE; + } } if (htab->elf.sgotplt) @@ -4337,10 +4337,10 @@ tilegx_elf_finish_dynamic_sections (bfd *output_bfd, TILEGX_ELF_PUT_WORD (htab, output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + GOT_ENTRY_SIZE (htab)); - } - elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize = - GOT_ENTRY_SIZE (htab); + elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize = + GOT_ENTRY_SIZE (htab); + } } if (htab->elf.sgot) @@ -4354,10 +4354,10 @@ tilegx_elf_finish_dynamic_sections (bfd *output_bfd, 0); TILEGX_ELF_PUT_WORD (htab, output_bfd, val, htab->elf.sgot->contents); - } - elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = - GOT_ENTRY_SIZE (htab); + elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = + GOT_ENTRY_SIZE (htab); + } } return TRUE;