From 385e5b9039d12d3c2ab25023e827ee9a681c1aad Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 30 Aug 2018 08:01:36 -0700 Subject: [PATCH] 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. --- binutils/ChangeLog | 5 +++++ binutils/readelf.c | 2 ++ gas/ChangeLog | 6 ++++++ gas/testsuite/gas/elf/elf.exp | 1 + gas/testsuite/gas/elf/section14.d | 10 ++++++++++ gas/testsuite/gas/elf/section14.s | 18 ++++++++++++++++++ 6 files changed, 42 insertions(+) create mode 100644 gas/testsuite/gas/elf/section14.d create mode 100644 gas/testsuite/gas/elf/section14.s 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 -- 2.30.2