From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gnu.wildebeest.org (wildebeest.demon.nl [212.238.236.112]) by sourceware.org (Postfix) with ESMTPS id 8DA523894C1A for ; Sat, 12 Dec 2020 22:42:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 8DA523894C1A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=klomp.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mark@klomp.org Received: from librem (deer0x15.wildebeest.org [172.31.17.151]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 3F26B3032B60; Sat, 12 Dec 2020 23:42:16 +0100 (CET) Received: by librem (Postfix, from userid 1000) id CFBC5C03EB; Sat, 12 Dec 2020 23:41:16 +0100 (CET) From: Mark Wielaard To: elfutils-devel@sourceware.org Cc: Mark Wielaard Subject: [PATCH 2/2] Handle SHF_GNU_RETAIN in eu-readelf and eu-elflint. Date: Sat, 12 Dec 2020 23:38:55 +0100 Message-Id: <20201212223855.30878-2-mark@klomp.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201212223855.30878-1-mark@klomp.org> References: <20201212223855.30878-1-mark@klomp.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Dec 2020 22:42:19 -0000 readelf -S now shows 'R' when SHF_GNU_RETAIN is set. elflint accepts SHF_GNU_RETAIN when set on section in --gnu mode. Signed-off-by: Mark Wielaard --- src/ChangeLog | 5 ++++ src/elflint.c | 3 +++ src/readelf.c | 2 ++ tests/ChangeLog | 7 ++++++ tests/Makefile.am | 2 ++ tests/run-retain.sh | 44 ++++++++++++++++++++++++++++++++++++ tests/testfile-retain.o.bz2 | Bin 0 -> 261 bytes 7 files changed, 63 insertions(+) create mode 100755 tests/run-retain.sh create mode 100644 tests/testfile-retain.o.bz2 diff --git a/src/ChangeLog b/src/ChangeLog index f5a02a36..e6ff981f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2020-12-12 Mark Wielaard + + * elflint.c (check_sections): Handle SHF_GNU_RETAIN. + * readelf.c (print_shdr): Likewise. + 2020-12-12 Dmitry V. Levin * ar.c (write_member, do_oper_insert): Fix spelling typo in comment. diff --git a/src/elflint.c b/src/elflint.c index 6e219ced..6ca1879e 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -3935,6 +3935,9 @@ section [%2zu] '%s': size not multiple of entry size\n"), cnt, section_name (ebl, cnt), sh_flags & SHF_MASKPROC); sh_flags &= ~(GElf_Xword) SHF_MASKPROC; } + if (sh_flags & SHF_MASKOS) + if (gnuld) + sh_flags &= ~(GElf_Xword) SHF_GNU_RETAIN; if (sh_flags != 0) ERROR (gettext ("section [%2zu] '%s' contains unknown flag(s)" " %#" PRIx64 "\n"), diff --git a/src/readelf.c b/src/readelf.c index f51b41d7..dbb0c73f 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1298,6 +1298,8 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\ *cp++ = 'O'; if (shdr->sh_flags & SHF_EXCLUDE) *cp++ = 'E'; + if (shdr->sh_flags & SHF_GNU_RETAIN) + *cp++ = 'R'; *cp = '\0'; const char *sname; diff --git a/tests/ChangeLog b/tests/ChangeLog index 2c83f690..cb6d5f8b 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +2020-12-12 Mark Wielaard + + * testfile-retain.o.bz2: New test file. + * run-retain.sh: New test. + * Makefile.am (TESTS): Add run-retain.sh. + (EXTRA_DIST): Add run-retain.sh and testfile-retain.o.bz2 + 2020-12-12 Dmitry V. Levin * dwarf-die-addr-die.c (main): Fix spelling typo in error diagnostics. diff --git a/tests/Makefile.am b/tests/Makefile.am index 3cca2251..502becff 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -125,6 +125,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-readelf-aranges.sh run-readelf-line.sh run-readelf-z.sh \ run-readelf-frames.sh \ run-readelf-n.sh \ + run-retain.sh \ run-native-test.sh run-bug1-test.sh \ run-debuglink.sh run-debugaltlink.sh run-buildid.sh \ dwfl-bug-addr-overflow run-addrname-test.sh \ @@ -318,6 +319,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile_gnu_props.32be.o.bz2 \ testfile_gnu_props.64be.o.bz2 \ testfile-gnu-property-note-aarch64.bz2 \ + run-retain.sh testfile-retain.o.bz2 \ run-allfcts-multi.sh \ test-offset-loop.bz2 test-offset-loop.alt.bz2 \ run-prelink-addr-test.sh \ diff --git a/tests/run-retain.sh b/tests/run-retain.sh new file mode 100755 index 00000000..c5376de4 --- /dev/null +++ b/tests/run-retain.sh @@ -0,0 +1,44 @@ +# Copyright (C) 2020 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/test-subr.sh + +# - retian.s +# .section .data.retain,"R" +# .word 1 +# +# as -o testfile-retain.o retain.s + +testfiles testfile-retain.o + +testrun_compare ${abs_top_builddir}/src/readelf -S testfile-retain.o << EOF +There are 9 section headers, starting at offset 0x158: + +Section Headers: +[Nr] Name Type Addr Off Size ES Flags Lk Inf Al +[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0 +[ 1] .text PROGBITS 0000000000000000 00000040 00000000 0 AX 0 0 1 +[ 2] .data PROGBITS 0000000000000000 00000040 00000000 0 WA 0 0 1 +[ 3] .bss NOBITS 0000000000000000 00000040 00000000 0 WA 0 0 1 +[ 4] .data.retain PROGBITS 0000000000000000 00000040 00000002 0 WAR 0 0 1 +[ 5] .note.gnu.property NOTE 0000000000000000 00000048 00000030 0 A 0 0 8 +[ 6] .symtab SYMTAB 0000000000000000 00000078 00000090 24 7 6 8 +[ 7] .strtab STRTAB 0000000000000000 00000108 00000001 0 0 0 1 +[ 8] .shstrtab STRTAB 0000000000000000 00000109 0000004c 0 0 0 1 + +EOF + +testrun ${abs_top_builddir}/src/elflint --gnu testfile-retain.o diff --git a/tests/testfile-retain.o.bz2 b/tests/testfile-retain.o.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..7571c0ec934a51be7f272c3467de561524c50a32 GIT binary patch literal 261 zcmV+g0s8(zT4*^jL0KkKStGCDz5oE<|D=EDs7T<2Kp{iL0zfw7-eAB0KmafR)-Z@Q zGL4iN1Tr#U36YGU6!IaEH8f#8Gz7>R8fd^`DKs)^qb7g>riOqt3m_5KgZ2MQk4jJ4 zh8>_%0mBd|j3Q*j(eyIdzEV0sH|Wan048W(Qp2T)CPgv?lODO8iQ{1Ouq=QHBmkEa z5KF48v(08GM3FUeZls|BNaLQ>*bJzSNzoN&0e~Npg^5T+hZkl<5a^eoi!IC4VOU*xf|_0mM-Uafg}EI51Ngg= LDZ+$-9e)Mz^L20Z literal 0 HcmV?d00001 -- 2.20.1