From: H.J. Lu Date: Thu, 30 Aug 2018 15:01:36 +0000 (-0700) Subject: Treat SHT_FINI_ARRAY and SHT_PREINIT_ARRAY as relocatable sections X-Git-Tag: users/ARM/embedded-binutils-master-2018q4~938 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=385e5b9039d12d3c2ab25023e827ee9a681c1aad;p=thirdparty%2Fbinutils-gdb.git Treat SHT_FINI_ARRAY and SHT_PREINIT_ARRAY as relocatable sections Since SHT_FINI_ARRAY and SHT_PREINIT_ARRAY sections are relocatable, this patch fixes readelf and adds a testcase. binutils/ * readelf.c (process_section_headers): Treat SHT_FINI_ARRAY and SHT_PREINIT_ARRAY as relocatable sections. gas/ * testsuite/gas/elf/elf.exp: Run section14. * testsuite/gas/elf/section14.d: New file. * testsuite/gas/elf/section14.s: Likewise. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 6b036db6a2e..a3d13543750 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2018-08-30 H.J. Lu + + * readelf.c (process_section_headers): Treat SHT_FINI_ARRAY and + SHT_PREINIT_ARRAY as relocatable sections. + 2018-08-30 Chenghua Xu * MAINTAINERS: Add myself as a MIPS port maintainer. diff --git a/binutils/readelf.c b/binutils/readelf.c index 194f1c3e0cf..9c675ddf1e1 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -6359,6 +6359,8 @@ process_section_headers (Filedata * filedata) && filedata->section_headers[section->sh_info].sh_type != SHT_NOBITS && filedata->section_headers[section->sh_info].sh_type != SHT_NOTE && filedata->section_headers[section->sh_info].sh_type != SHT_INIT_ARRAY + && filedata->section_headers[section->sh_info].sh_type != SHT_FINI_ARRAY + && filedata->section_headers[section->sh_info].sh_type != SHT_PREINIT_ARRAY /* FIXME: Are other section types valid ? */ && filedata->section_headers[section->sh_info].sh_type < SHT_LOOS)) { diff --git a/gas/ChangeLog b/gas/ChangeLog index 37b3560f32b..aa8633a98fe 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2018-08-30 H.J. Lu + + * testsuite/gas/elf/elf.exp: Run section14. + * testsuite/gas/elf/section14.d: New file. + * testsuite/gas/elf/section14.s: Likewise. + 2018-08-29 Daniel Cederman * testsuite/gas/sparc/leon.d: New test. diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index a7c793b0b0c..ee4aa57c247 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -219,6 +219,7 @@ if { [is_elf_format] } then { run_dump_test "section12a" run_dump_test "section12b" run_dump_test "section13" + run_dump_test "section14" run_dump_test "dwarf2-1" run_dump_test "dwarf2-2" run_dump_test "dwarf2-3" diff --git a/gas/testsuite/gas/elf/section14.d b/gas/testsuite/gas/elf/section14.d new file mode 100644 index 00000000000..82b8a776ce5 --- /dev/null +++ b/gas/testsuite/gas/elf/section14.d @@ -0,0 +1,10 @@ +#name: array sections +#as: --no-pad-sections +#readelf: -S --wide + +There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+: + +Section Headers: + +\[Nr\] Name +Type +Addr(ess|) +Off +Size +ES +Flg +Lk +Inf +Al + +\[ 0\] +NULL +0+ +0+ +0+ +0+ +0 +0 +0 +#pass diff --git a/gas/testsuite/gas/elf/section14.s b/gas/testsuite/gas/elf/section14.s new file mode 100644 index 00000000000..992bbe68a84 --- /dev/null +++ b/gas/testsuite/gas/elf/section14.s @@ -0,0 +1,18 @@ + .section .init_array + .align 4 + .type init_array, %object + .size init_array, 4 +init_array: + .dc.a foo + .section .preinit_array + .align 4 + .type preinit_array, %object + .size preinit_array, 4 +preinit_array: + .dc.a foo + .section .fini_array + .align 4 + .type fini_array, %object + .size fini_array, 4 +fini_array: + .dc.a foo