From patchwork Tue May 31 02:26:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guillermo E. Martinez" X-Patchwork-Id: 54541 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D14BD3954441 for ; Tue, 31 May 2022 02:26:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D14BD3954441 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1653964012; bh=Oz1LJgmUmUy7rchBqV9RUgHU297N9XJ6tn1crPWURV8=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:Cc:From; b=BETWVNB/+LErTKTVkPqUaeza6Fre4bzMc07ri2bStQCKyuGqNbDTdzPB0PCmem8iV WtxKrqB2wK/G/xeST7mBwwmDawgVZ6Ej20Y/iqWVMaJATXT5yUcGrCMz4OsvB85MMq x9LttL1MBPLRVuRj8hMQ0tlskIwggBok2FMK/LbM= X-Original-To: elfutils-devel@sourceware.org Delivered-To: elfutils-devel@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id D45C7384B0C9 for ; Tue, 31 May 2022 02:26:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D45C7384B0C9 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 24V0Xw6v032424 for ; Tue, 31 May 2022 02:26:37 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3gbcahkwcs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 31 May 2022 02:26:37 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 24V2FPkT014094 for ; Tue, 31 May 2022 02:26:35 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2171.outbound.protection.outlook.com [104.47.57.171]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3gc8jwjsf7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 31 May 2022 02:26:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q12rntOpQ6LbAis+cG0UT2762U95Vo9bi0wmIvBtin0UG9vIny9ga7V25uTVScx7f1AC0tVQtF++NQ/vPfosofoEiJOrAgKDKFRUh7MuTLKEn++aCrHCDBCbnG6+e6Ml7bZGAfo9AbcN5sYnlx6tP9WMrmNEJqFotAsi+dYQNzFiqV/vcXBT1uwPGBiSsL1emZ5nMLvbRTBu1ksKBnMPsQLQUAp7u4mpms7TqlMV8XugR3vl0m1XG0X3GUpznbEibghyqD/mYFk7pKP62GRjO3l4nHMlZ2Q8pV6/BIepmjOa0y1wfPmvuHoJQHqR+/9suvfwuAal00Si38QMXam0nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Oz1LJgmUmUy7rchBqV9RUgHU297N9XJ6tn1crPWURV8=; b=VPUGnOMHG4uMsJNx0KULsmJcu0vDWQ0MBR9Ra+fC6IIHtOQT3MhyNo2AKmurAGCv8fdosMbH6IoU5Ezl8BiGszfc8f5g3G4soEML4EYde4SACuD9j7dxaDDHVK203fhubEVKPl3rqtShG85J+1QYLOlIT/6bH28NGE/9MQWZKL4799c5HtQVAdX2YYuQLKFWE5oDicvFaKLFZR0fYH0s+JG+syGhreTwGCh1ZjirqIP5j1EuDcF4BKwe5bMKNY3yQxPfESKMPYa4uD+1j5HbkpK1gY9s9s8cPHSuT87D8LW0R7NgqE3nKfHczUvuejZt2012xtJGbNlMmENuwWb4uA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from MWHPR10MB1407.namprd10.prod.outlook.com (2603:10b6:300:23::20) by BL0PR10MB2802.namprd10.prod.outlook.com (2603:10b6:208:33::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.15; Tue, 31 May 2022 02:26:33 +0000 Received: from MWHPR10MB1407.namprd10.prod.outlook.com ([fe80::5d6c:93b5:dfd8:c058]) by MWHPR10MB1407.namprd10.prod.outlook.com ([fe80::5d6c:93b5:dfd8:c058%4]) with mapi id 15.20.5293.019; Tue, 31 May 2022 02:26:33 +0000 To: elfutils-devel@sourceware.org Subject: [PATCH] strip: keep .ctf section in stripped file Date: Mon, 30 May 2022 21:26:19 -0500 Message-Id: <20220531022619.419179-1-guillermo.e.martinez@oracle.com> X-Mailer: git-send-email 2.35.1 X-ClientProxiedBy: SA9P223CA0006.NAMP223.PROD.OUTLOOK.COM (2603:10b6:806:26::11) To MWHPR10MB1407.namprd10.prod.outlook.com (2603:10b6:300:23::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: beb19d3e-6a30-4a59-8c4f-08da42acfa4d X-MS-TrafficTypeDiagnostic: BL0PR10MB2802:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lQE+7tCEv69QeMPud/u/a9j4e55ImyQ1W4KIxPI9VyvCs3t933QkaAT/hOArsTMxNYcp3xXc/GY8nKqP5TSkqKIoRk/hD0ZQZM6wd5d74V8OTIgU6ynQerRwIg7UK1BzDQ1mJ73GqYwHrn8Gc9qlojgklX5RIWNL6+0LiqDRHU6+IY0ot9VMj741OofZDD7wLyLqm+xonviA2PV7Sek4+nJQha/tR0z46ogZcXG93u40ZE7RDj8TuqogboxewYQGJjPiJxaNcSH7DBpCnCkT92Pl7FKcXRJqPHynTokEroGQCwxXyhtLSKoME34/T5NXeDjaRu8S5UGoJ+XjGI6ihhHak8YLw9XL6FopQn9UHjOg+qGuX8vv20XIrG5OVsxVR5S0p3TIowIumYGHz51TcgEoFbPakPz8alFYWD9cHhY0wHs5Qk+bCumvTvjebbuyzJFLsDxv1H7xNlQGq1uibh64FmE80T/7nKrMIvL8s2+pXH1P2rmU2Rh4vyE8aeeTylwfzK6bQk58P4XemBeN9cnHlqwIfnhnkF1AKdLk3zNywBXn8rk3dgbQI1tTqJ136ZlLac4Zerq7rEsxLN4PZos8GohJWOvt1DZcNQnUbazdbMCAQSboMNFz/PyF7uzoLyQSElhm3IdXkAiXlkyKYcY8nb8u70NweOBNZGYWU5mxVX+sM+RbEbzIWkCWgGIDp+lChDnWN4Tk2k2iDf8rQ2zUYn1kzztuH4tCHCbZnL88MPx/E1knxUbUESESBCPF/YzM9ZrhH08nCkh9dRn6KWtL9HqEbD+fffE52C55WUaR56JsIp59ijx4BywMBOgML5usnp1XDTXu9VF29aNY/A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR10MB1407.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(52116002)(6666004)(86362001)(186003)(508600001)(316002)(2906002)(107886003)(1076003)(6486002)(6916009)(26005)(103116003)(6512007)(38350700002)(6506007)(83380400001)(5660300002)(8676002)(36756003)(4326008)(30864003)(66946007)(2616005)(8936002)(66556008)(66476007)(38100700002)(142923001)(2004002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xXPIePFops71Rmh7T0si45aK5UFG3i8xXq/TtrxPaIvef0o1MCmPo0l94X4unBr2RQ9YAPrWGRD85ERPgxUgBSyBjcRYZVaplhIPAwYT9lXMdIwZtyLs1sylFA1DHna3aE5mus3rNrE0J+vDT/2RjtV0tAJFpPyQTZW2KiZVcUavzyFhoRO/VqfiSeMCHX0w68xCVfNaw51vvNUvBuE43xP6yiC6Z0yfG0u+ru+tP2m4kfMp8C8zi14AEYFHhJvPpz+PvFuIZ0ZLUkfXw5Whwwt00bBTORUpqW2A+y1OJx/gbWoZ1NyItWMwkE34jrt03Kz89531RH2wMi1BPzNPwz3yNOlvG/xgO+pVBFCQvIFCO7kTv7UFSCunWnbmQIHZqGN5xw3zDCakSZX0pGsjMnMv67T1C2Zd52z+PPnM3ILekIaw2F12tWMNQAbqx3wl8O5z4sHVMaT5Bts/6FvJrHxadUIMe8ySZ7mNe8Zg95Paqt6gkQ2xZXAP9kHijgf5FeWhLJXTNOhxQcIrSBS4OYhZCQiTHrRkar1+V76RDgRqHUSoi319AmI3EeMB3WzIc0co3fx6x4VFPmPyh7aESITJ6bIREpjuNGz/stC08CgAh+vMKiHU7rE4NVdDy0i/8hssJC3TfFlAboky+611S75agnDJPjJmMe1yU6+6ffF4VHZ79iAB9BpWLjEqvM3XKPj/9n2xMehC2C9BgTu8Z780v4BbcGrDKzJBz10W9i1dDqdewIfvb3Hy5r8DVDe/h0DyZjNyI+rnhtCK9kDfOHGW2YWkpdjUMB1OAJg1tfHwQavLr6rm57V62V4X53PV15muhuKO55e4W5x9ELlmc1S5OZAdkkC/eFVJ8QzS11UVPBLB8pq5IwgKGn5nyK/FSPPa7bmeT3n1l07xCSf1tFZVtCDhrUbEMnGvbKWbi7tuqEIsVVCdD1hNtWIOh/uia/4uTTsZxQjgChxhya+OeYkEmNjl22f6Y0GsmYe2Pmouzn79EP2b6h+08W05Wt51TgQuHjF4c2wf6dVD1iyVeyI+RYDPRzRbg1nK2U0SBuVgheEkjxbba28/ZzPURuVr6kVJ4K2WPUCceJhdp+KpNgKc2/E50OYD+QtKyAT0mXO75YXhMj+EY5n7dR8y66GJs0sIKlvGZin0PWVhr/R7pwazLNihFwJn9FWlNwvghnY9nFCoZvJXd8I0qI82dWNAAtYkjNB+nYUEf+MOAwazh/7PU4lNhXaO0X8hdd21l4VqWwmL8KlVlMNEqxtBFxWKR+uovqUeSyAeyhAyg7CC6T2qKlE73sVw+JZXsE9UtJ9qzZUir3Ihbo4wfvrRoYqieOqsg4NqCqBf8mj4Pjro1inxq06wXI8222HA5AVI3S0DnnYo5MZJlb4tWKYddFtvsj+8FcItnuQYeDxtQ05ts8ynRUFOZA25FN6hEXwySgGMOD8Gx9g6Tag3tuCJez2jdYrItuPfw1/jMrirUo/MwMYrWVBFkWs6FI92HAVhuPLe9cQcpyI553bivdqLYDaBh/bP/J2/RsUzC4IO4cOdVrDydOsGmubGQKtlvflVcJpsCkhrLIBZXZp+r/QmtHRAMirq01oQHty1fO/oIeUzKSjrb5SEzoaZ+AbKUvBg8ejJrHXD3QsxqFc5lfmb9i4U+/tz8ygSAXrpQJGTA/a6sOfI9xiV23OD9f7lpnkm6hwFJ1K6aJ0dDIPLUXhFcP3cjf44o0M3USVt+4UACmCEupGTIq8YorO9esqO1HF947292c5tJu7R7jLaMC1omSzz X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: beb19d3e-6a30-4a59-8c4f-08da42acfa4d X-MS-Exchange-CrossTenant-AuthSource: MWHPR10MB1407.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2022 02:26:33.0821 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: je7JAC4laifLV46pq/NMc4Q+mNQxk6l3Rk+Xd7g3vQXV4yjvgcFIfDzOONC443XaF3rOQNGrFCaMWAFM4DIPQd5AXYzJhu2IVRxJMwCTSjs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR10MB2802 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517, 18.0.874 definitions=2022-05-30_10:2022-05-30, 2022-05-30 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 suspectscore=0 spamscore=0 phishscore=0 malwarescore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2204290000 definitions=main-2205310010 X-Proofpoint-ORIG-GUID: qcx3QZwUYNzvQBDD9rs_-IrsYLk3feUE X-Proofpoint-GUID: qcx3QZwUYNzvQBDD9rs_-IrsYLk3feUE X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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-Patchwork-Original-From: "Guillermo E. Martinez via Elfutils-devel" From: "Guillermo E. Martinez" Reply-To: "Guillermo E. Martinez" Cc: "Guillermo E. Martinez" Errors-To: elfutils-devel-bounces+patchwork=sourceware.org@sourceware.org Sender: "Elfutils-devel" Hello elfutils team, This patch is meant to avoid remove the CTF section in stripped files. Please let me know your thoughts. Kind regard, Guillermo CTF debug format was designed to be present in stripped files, so this section should not be removed, so a new --remove-ctf option is added to indicate explicitly that .ctf section will be stripped out from binary file. Signed-off-by: Guillermo E. Martinez --- ChangeLog | 23 ++++ libebl/eblsectionstripp.c | 4 +- libebl/libebl.h | 2 +- libelf/elf-knowledge.h | 7 +- libelf/elf32_checksum.c | 2 +- src/elfcmp.c | 4 +- src/strip.c | 71 ++++++++-- tests/Makefile.am | 6 +- tests/run-strip-remove-keep-ctf.sh | 207 +++++++++++++++++++++++++++++ tests/testfile-ctf.bz2 | Bin 0 -> 3317 bytes 10 files changed, 304 insertions(+), 22 deletions(-) create mode 100755 tests/run-strip-remove-keep-ctf.sh create mode 100755 tests/testfile-ctf.bz2 GIT binary patch literal 3317 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 + + * libebl/eblsectionstripp.c (ebl_section_strip_p): Use + remove_ctf argument. + (SECTION_STRIP_P): Likewise. + * libebl/libebl.h (ebl_section_strip_p): Likewise. + * libelf/elf-knowledge.h (SECTION_STRIP_P): Update macro + definition to use remove_ctf to determine whether .ctf + section is stripped out. + * libelf/elf32_checksum.c (elfw2): Use false value for + remove_ctf parameter. + * src/elfcmp.c (main): Likewise. + * src/strip.c (options): Add --remove-ctf option set by + remove_ctf variable. + (set_remove_special_section_opt): Add new function. + (erratic_special_section_opt): Likewise. + (parse_opt): Parse new --remove-ctf option. + (handle_elf): Adjust .comment and use remove_ctf argument. + * tests/Makefile.am (TEST): Add run-strip-remove-keep-ctf.sh + and testfile-ctf.bz2. + * tests/run-strip-remove-keep-ctf.sh: Add new testcase. + * tests/testfile-ctf.bz2: Add new test harness. + 2022-05-02 Mark Wielaard * Makefile.am (AM_DISTCHECK_CONFIGURE_FLAGS): Remove diff --git a/libebl/eblsectionstripp.c b/libebl/eblsectionstripp.c index a5624ffe..f26cc170 100644 --- a/libebl/eblsectionstripp.c +++ b/libebl/eblsectionstripp.c @@ -37,7 +37,7 @@ bool ebl_section_strip_p (Ebl *ebl, const GElf_Shdr *shdr, const char *name, bool remove_comment, - bool only_remove_debug) + bool only_remove_debug, bool remove_ctf) { /* If only debug information should be removed check the name. There is unfortunately no other way. */ @@ -66,5 +66,5 @@ ebl_section_strip_p (Ebl *ebl, const GElf_Shdr *shdr, return false; } - return SECTION_STRIP_P (shdr, name, remove_comment); + return SECTION_STRIP_P (shdr, name, remove_comment, remove_ctf); } diff --git a/libebl/libebl.h b/libebl/libebl.h index 731001d3..067b769e 100644 --- a/libebl/libebl.h +++ b/libebl/libebl.h @@ -205,7 +205,7 @@ extern bool ebl_relative_reloc_p (Ebl *ebl, int reloc); /* Check whether section should be stripped. */ extern bool ebl_section_strip_p (Ebl *ebl, const GElf_Shdr *shdr, const char *name, - bool remove_comment, bool only_remove_debug); + bool remove_comment, bool only_remove_debug, bool remove_ctf); /* Check if backend uses a bss PLT in this file. */ extern bool ebl_bss_plt_p (Ebl *ebl); diff --git a/libelf/elf-knowledge.h b/libelf/elf-knowledge.h index 6e005fa5..903a0f4f 100644 --- a/libelf/elf-knowledge.h +++ b/libelf/elf-knowledge.h @@ -34,7 +34,7 @@ /* Test whether a section can be stripped or not. */ -#define SECTION_STRIP_P(shdr, name, remove_comment) \ +#define SECTION_STRIP_P(shdr, name, remove_comment, remove_ctf) \ /* Sections which are allocated are not removed. */ \ (((shdr)->sh_flags & SHF_ALLOC) == 0 \ /* We never remove .note sections. */ \ @@ -45,7 +45,10 @@ && strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) != 0\ /* We remove .comment sections only if explicitly told to do so. */\ && (remove_comment \ - || strcmp (name, ".comment") != 0)))) + || strcmp (name, ".comment") != 0) \ + /* We remove .ctf sections only if explicitly told to do so. */\ + && (remove_ctf \ + || strcmp (name, ".ctf") != 0)))) /* Test whether `sh_info' field in section header contains a section diff --git a/libelf/elf32_checksum.c b/libelf/elf32_checksum.c index c5f27bbe..190bad7d 100644 --- a/libelf/elf32_checksum.c +++ b/libelf/elf32_checksum.c @@ -105,7 +105,7 @@ elfw2(LIBELFBITS,checksum) (Elf *elf) if (SECTION_STRIP_P (shdr, INTUSE(elf_strptr) (elf, shstrndx, shdr->sh_name), - true)) + true, false)) /* The section can be stripped. Don't use it. */ continue; diff --git a/src/elfcmp.c b/src/elfcmp.c index 21d8d9dc..76f15735 100644 --- a/src/elfcmp.c +++ b/src/elfcmp.c @@ -270,7 +270,7 @@ main (int argc, char *argv[]) sname1 = elf_strptr (elf1, shstrndx1, shdr1->sh_name); } while (scn1 != NULL && shdr1 != NULL - && ebl_section_strip_p (ebl1, shdr1, sname1, true, false)); + && ebl_section_strip_p (ebl1, shdr1, sname1, true, false, false)); GElf_Shdr shdr2_mem; GElf_Shdr *shdr2; @@ -283,7 +283,7 @@ main (int argc, char *argv[]) sname2 = elf_strptr (elf2, shstrndx2, shdr2->sh_name); } while (scn2 != NULL && shdr2 != NULL - && ebl_section_strip_p (ebl2, shdr2, sname2, true, false)); + && ebl_section_strip_p (ebl2, shdr2, sname2, true, false, false)); if (scn1 == NULL || scn2 == NULL || shdr1 == NULL || shdr2 == NULL) break; diff --git a/src/strip.c b/src/strip.c index 452b1279..6f79a1d0 100644 --- a/src/strip.c +++ b/src/strip.c @@ -62,6 +62,7 @@ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; #define OPT_RELOC_DEBUG 0x103 #define OPT_KEEP_SECTION 0x104 #define OPT_RELOC_DEBUG_ONLY 0x105 +#define OPT_REMOVE_CTF 0x106 /* Definitions of arguments for argp functions. */ @@ -87,6 +88,8 @@ static const struct argp_option options[] = N_("Similar to --reloc-debug-sections, but resolve all trivial relocations between debug sections in place. No other stripping is performed (operation is not reversible, incompatible with -f, -g, --remove-comment and --remove-section)"), 0 }, { "remove-comment", OPT_REMOVE_COMMENT, NULL, 0, N_("Remove .comment section"), 0 }, + { "remove-ctf", OPT_REMOVE_CTF, NULL, 0, + N_("Remove .ctf section"), 0 }, { "remove-section", 'R', "SECTION", 0, N_("Remove the named section. SECTION is an extended wildcard pattern. May be given more than once. Only non-allocated sections can be removed."), 0 }, { "keep-section", OPT_KEEP_SECTION, "SECTION", 0, N_("Keep the named section. SECTION is an extended wildcard pattern. May be given more than once."), 0 }, { "permissive", OPT_PERMISSIVE, NULL, 0, @@ -150,6 +153,9 @@ static bool preserve_dates; /* If true .comment sections will be removed. */ static bool remove_comment; +/* If true .ctf sections will be removed. */ +static bool remove_ctf; + /* If true remove all debug sections. */ static bool remove_debug; @@ -217,6 +223,48 @@ section_name_matches (struct section_pattern *patterns, const char *name) return false; } +static void +set_remove_special_section_opt (const char *arg) +{ + if (fnmatch (arg, ".comment", FNM_EXTMATCH) == 0) + remove_comment = true; + else if (fnmatch (arg, ".ctf", FNM_EXTMATCH) == 0) + remove_ctf = true; +} + +static error_t +erratic_special_section_opt (struct argp_state *state) +{ + int s; + struct { + const char *name; + bool remove; + } special_secs[] = { + { + .name = ".comment", + .remove = remove_comment + }, + { + .name = ".ctf", + .remove = remove_ctf + }, + { + .name = NULL, + } + }; + + for (s = 0; special_secs[s].name; ++s) + if (special_secs[s].remove == true + && section_name_matches (keep_secs, special_secs[s].name)) + { + argp_error (state, + _("cannot both keep and remove %s section"), + special_secs[s].name); + return EINVAL; + } + + return 0; +} int main (int argc, char *argv[]) @@ -325,9 +373,12 @@ parse_opt (int key, char *arg, struct argp_state *state) remove_comment = true; break; + case OPT_REMOVE_CTF: + remove_ctf = true; + break; + case 'R': - if (fnmatch (arg, ".comment", FNM_EXTMATCH) == 0) - remove_comment = true; + set_remove_special_section_opt (arg); add_pattern (&remove_secs, arg); break; @@ -353,13 +404,8 @@ parse_opt (int key, char *arg, struct argp_state *state) break; case ARGP_KEY_SUCCESS: - if (remove_comment == true - && section_name_matches (keep_secs, ".comment")) - { - argp_error (state, - _("cannot both keep and remove .comment section")); - return EINVAL; - } + if (erratic_special_section_opt (state)) + return EINVAL; break; default: @@ -1358,7 +1404,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, all sections which are not used at runtime are stripped out. But there are a few exceptions: - - special sections named ".comment" and ".note" are kept + - special sections named ".comment", ".note" and ".ctf" are kept - OS or architecture specific sections are kept since we might not know how to handle them - if a section is referred to from a section which is not removed @@ -1371,7 +1417,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (remove_shdrs ? !(shdr_info[cnt].shdr.sh_flags & SHF_ALLOC) : (ebl_section_strip_p (ebl, &shdr_info[cnt].shdr, shdr_info[cnt].name, remove_comment, - remove_debug) + remove_debug, remove_ctf) || cnt == shstrndx || section_name_matches (remove_secs, shdr_info[cnt].name))) { @@ -1534,7 +1580,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, &shdr_info[scnidx].shdr, shdr_info[scnidx].name, remove_comment, - remove_debug) + remove_debug, + remove_ctf) && ebl_data_marker_symbol (ebl, sym, elf_strptr (elf, shdr_info[cnt].shdr.sh_link, diff --git a/tests/Makefile.am b/tests/Makefile.am index 84c3950a..f30d958e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -197,7 +197,8 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ msg_tst system-elf-libelf-test \ $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \ run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ - run-readelf-dw-form-indirect.sh run-strip-largealign.sh + run-readelf-dw-form-indirect.sh run-strip-largealign.sh \ + run-strip-remove-keep-ctf.sh if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 @@ -580,7 +581,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \ run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ testfile_nvidia_linemap.bz2 \ - testfile-largealign.o.bz2 run-strip-largealign.sh + testfile-largealign.o.bz2 run-strip-largealign.sh \ + testfile-ctf.bz2 run-strip-remove-keep-ctf.sh if USE_VALGRIND diff --git a/tests/run-strip-remove-keep-ctf.sh b/tests/run-strip-remove-keep-ctf.sh new file mode 100755 index 00000000..1a9bd93b --- /dev/null +++ b/tests/run-strip-remove-keep-ctf.sh @@ -0,0 +1,207 @@ +#! /bin/sh +# Copyright (C) 2022 Oracle, 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 + +# strip -o output and -f debug files +tempfiles testfile.elf testfile.debug + +# A random 32bit testfile +testfiles testfile-ctf + +# strip should keep .ctf section +echo strip testfile-ctf +testrun ${abs_top_builddir}/src/strip -o testfile.elf -f testfile.debug testfile-ctf +echo elflint testfile.elf +testrun ${abs_top_builddir}/src/elflint --gnu testfile.elf +echo elflint testfile.debug +testrun ${abs_top_builddir}/src/elflint --gnu -d testfile.debug +echo readelf testfile.elf +testrun_compare ${abs_top_builddir}/src/readelf -S testfile.elf <<\EOF +There are 30 section headers, starting at offset 0x3330: + +Section Headers: +[Nr] Name Type Addr Off Size ES Flags Lk Inf Al +[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0 +[ 1] .interp PROGBITS 0000000000400318 00000318 0000001c 0 A 0 0 1 +[ 2] .note.gnu.property NOTE 0000000000400338 00000338 00000020 0 A 0 0 8 +[ 3] .note.ABI-tag NOTE 0000000000400358 00000358 00000020 0 A 0 0 4 +[ 4] .hash HASH 0000000000400378 00000378 00000028 4 A 6 0 8 +[ 5] .gnu.hash GNU_HASH 00000000004003a0 000003a0 0000001c 0 A 6 0 8 +[ 6] .dynsym DYNSYM 00000000004003c0 000003c0 00000078 24 A 7 1 8 +[ 7] .dynstr STRTAB 0000000000400438 00000438 00000057 0 A 0 0 1 +[ 8] .gnu.version GNU_versym 0000000000400490 00000490 0000000a 2 A 6 0 2 +[ 9] .gnu.version_r GNU_verneed 00000000004004a0 000004a0 00000030 0 A 7 1 8 +[10] .rela.dyn RELA 00000000004004d0 000004d0 00000030 24 A 6 0 8 +[11] .rela.plt RELA 0000000000400500 00000500 00000030 24 AI 6 23 8 +[12] .init PROGBITS 0000000000401000 00001000 00000017 0 AX 0 0 4 +[13] .plt PROGBITS 0000000000401020 00001020 00000030 16 AX 0 0 16 +[14] .text PROGBITS 0000000000401050 00001050 000001d1 0 AX 0 0 16 +[15] .fini PROGBITS 0000000000401224 00001224 00000009 0 AX 0 0 4 +[16] .rodata PROGBITS 0000000000402000 00002000 00000010 0 A 0 0 4 +[17] .eh_frame_hdr PROGBITS 0000000000402010 00002010 0000003c 0 A 0 0 4 +[18] .eh_frame PROGBITS 0000000000402050 00002050 00000100 0 A 0 0 8 +[19] .init_array INIT_ARRAY 0000000000403e00 00002e00 00000008 8 WA 0 0 8 +[20] .fini_array FINI_ARRAY 0000000000403e08 00002e08 00000008 8 WA 0 0 8 +[21] .dynamic DYNAMIC 0000000000403e10 00002e10 000001e0 16 WA 7 0 8 +[22] .got PROGBITS 0000000000403ff0 00002ff0 00000010 8 WA 0 0 8 +[23] .got.plt PROGBITS 0000000000404000 00003000 00000028 8 WA 0 0 8 +[24] .data PROGBITS 0000000000404028 00003028 00000010 0 WA 0 0 8 +[25] .bss NOBITS 0000000000404038 00003038 00000008 0 WA 0 0 4 +[26] .comment PROGBITS 0000000000000000 00003038 0000002a 1 MS 0 0 1 +[27] .ctf PROGBITS 0000000000000000 00003062 000001af 0 0 0 1 +[28] .gnu_debuglink PROGBITS 0000000000000000 00003214 00000014 0 0 0 4 +[29] .shstrtab STRTAB 0000000000000000 00003228 00000107 0 0 0 1 + +EOF +echo readelf testfile.debug +testrun_compare ${abs_top_builddir}/src/readelf -S testfile.debug <<\EOF +There are 37 section headers, starting at offset 0xdf0: + +Section Headers: +[Nr] Name Type Addr Off Size ES Flags Lk Inf Al +[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0 +[ 1] .interp NOBITS 0000000000400318 00000318 0000001c 0 A 0 0 1 +[ 2] .note.gnu.property NOTE 0000000000400338 00000318 00000020 0 A 0 0 8 +[ 3] .note.ABI-tag NOTE 0000000000400358 00000338 00000020 0 A 0 0 4 +[ 4] .hash NOBITS 0000000000400378 00000358 00000028 4 A 6 0 8 +[ 5] .gnu.hash NOBITS 00000000004003a0 00000358 0000001c 0 A 6 0 8 +[ 6] .dynsym NOBITS 00000000004003c0 00000358 00000078 24 A 7 1 8 +[ 7] .dynstr NOBITS 0000000000400438 00000358 00000057 0 A 0 0 1 +[ 8] .gnu.version NOBITS 0000000000400490 00000358 0000000a 2 A 6 0 2 +[ 9] .gnu.version_r NOBITS 00000000004004a0 00000358 00000030 0 A 7 1 8 +[10] .rela.dyn NOBITS 00000000004004d0 00000358 00000030 24 A 6 0 8 +[11] .rela.plt NOBITS 0000000000400500 00000358 00000030 24 AI 6 23 8 +[12] .init NOBITS 0000000000401000 00000358 00000017 0 AX 0 0 4 +[13] .plt NOBITS 0000000000401020 00000360 00000030 16 AX 0 0 16 +[14] .text NOBITS 0000000000401050 00000360 000001d1 0 AX 0 0 16 +[15] .fini NOBITS 0000000000401224 00000360 00000009 0 AX 0 0 4 +[16] .rodata NOBITS 0000000000402000 00000360 00000010 0 A 0 0 4 +[17] .eh_frame_hdr NOBITS 0000000000402010 00000360 0000003c 0 A 0 0 4 +[18] .eh_frame NOBITS 0000000000402050 00000360 00000100 0 A 0 0 8 +[19] .init_array NOBITS 0000000000403e00 00000360 00000008 8 WA 0 0 8 +[20] .fini_array NOBITS 0000000000403e08 00000360 00000008 8 WA 0 0 8 +[21] .dynamic NOBITS 0000000000403e10 00000360 000001e0 16 WA 7 0 8 +[22] .got NOBITS 0000000000403ff0 00000360 00000010 8 WA 0 0 8 +[23] .got.plt NOBITS 0000000000404000 00000360 00000028 8 WA 0 0 8 +[24] .data NOBITS 0000000000404028 00000360 00000010 0 WA 0 0 8 +[25] .bss NOBITS 0000000000404038 00000360 00000008 0 WA 0 0 4 +[26] .comment NOBITS 0000000000000000 00000360 0000002a 1 MS 0 0 1 +[27] .ctf NOBITS 0000000000000000 00000360 000001af 0 0 0 1 +[28] .debug_aranges PROGBITS 0000000000000000 00000360 00000030 0 0 0 1 +[29] .debug_info PROGBITS 0000000000000000 00000390 00000121 0 0 0 1 +[30] .debug_abbrev PROGBITS 0000000000000000 000004b1 000000b6 0 0 0 1 +[31] .debug_line PROGBITS 0000000000000000 00000567 00000063 0 0 0 1 +[32] .debug_str PROGBITS 0000000000000000 000005ca 000000ba 1 MS 0 0 1 +[33] .debug_line_str PROGBITS 0000000000000000 00000684 0000005c 1 MS 0 0 1 +[34] .symtab SYMTAB 0000000000000000 000006e0 000003c0 24 35 21 8 +[35] .strtab STRTAB 0000000000000000 00000aa0 000001f1 0 0 0 1 +[36] .shstrtab STRTAB 0000000000000000 00000c91 00000158 0 0 0 1 + +EOF + +# Explicitly removes .ctf section +echo strip --remove-ctf testfile +testrun ${abs_top_builddir}/src/strip --remove-ctf -o testfile.elf -f testfile.debug testfile-ctf +echo elflint testfile.elf +testrun ${abs_top_builddir}/src/elflint --gnu testfile.elf +echo elflint testfile.debug +testrun ${abs_top_builddir}/src/elflint --gnu -d testfile.debug +echo readelf testfile.elf +testrun_compare ${abs_top_builddir}/src/readelf -S testfile.elf <<\EOF +There are 29 section headers, starting at offset 0x3180: + +Section Headers: +[Nr] Name Type Addr Off Size ES Flags Lk Inf Al +[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0 +[ 1] .interp PROGBITS 0000000000400318 00000318 0000001c 0 A 0 0 1 +[ 2] .note.gnu.property NOTE 0000000000400338 00000338 00000020 0 A 0 0 8 +[ 3] .note.ABI-tag NOTE 0000000000400358 00000358 00000020 0 A 0 0 4 +[ 4] .hash HASH 0000000000400378 00000378 00000028 4 A 6 0 8 +[ 5] .gnu.hash GNU_HASH 00000000004003a0 000003a0 0000001c 0 A 6 0 8 +[ 6] .dynsym DYNSYM 00000000004003c0 000003c0 00000078 24 A 7 1 8 +[ 7] .dynstr STRTAB 0000000000400438 00000438 00000057 0 A 0 0 1 +[ 8] .gnu.version GNU_versym 0000000000400490 00000490 0000000a 2 A 6 0 2 +[ 9] .gnu.version_r GNU_verneed 00000000004004a0 000004a0 00000030 0 A 7 1 8 +[10] .rela.dyn RELA 00000000004004d0 000004d0 00000030 24 A 6 0 8 +[11] .rela.plt RELA 0000000000400500 00000500 00000030 24 AI 6 23 8 +[12] .init PROGBITS 0000000000401000 00001000 00000017 0 AX 0 0 4 +[13] .plt PROGBITS 0000000000401020 00001020 00000030 16 AX 0 0 16 +[14] .text PROGBITS 0000000000401050 00001050 000001d1 0 AX 0 0 16 +[15] .fini PROGBITS 0000000000401224 00001224 00000009 0 AX 0 0 4 +[16] .rodata PROGBITS 0000000000402000 00002000 00000010 0 A 0 0 4 +[17] .eh_frame_hdr PROGBITS 0000000000402010 00002010 0000003c 0 A 0 0 4 +[18] .eh_frame PROGBITS 0000000000402050 00002050 00000100 0 A 0 0 8 +[19] .init_array INIT_ARRAY 0000000000403e00 00002e00 00000008 8 WA 0 0 8 +[20] .fini_array FINI_ARRAY 0000000000403e08 00002e08 00000008 8 WA 0 0 8 +[21] .dynamic DYNAMIC 0000000000403e10 00002e10 000001e0 16 WA 7 0 8 +[22] .got PROGBITS 0000000000403ff0 00002ff0 00000010 8 WA 0 0 8 +[23] .got.plt PROGBITS 0000000000404000 00003000 00000028 8 WA 0 0 8 +[24] .data PROGBITS 0000000000404028 00003028 00000010 0 WA 0 0 8 +[25] .bss NOBITS 0000000000404038 00003038 00000008 0 WA 0 0 4 +[26] .comment PROGBITS 0000000000000000 00003038 0000002a 1 MS 0 0 1 +[27] .gnu_debuglink PROGBITS 0000000000000000 00003064 00000014 0 0 0 4 +[28] .shstrtab STRTAB 0000000000000000 00003078 00000102 0 0 0 1 + +EOF +echo readelf testfile.debug +testrun_compare ${abs_top_builddir}/src/readelf -S testfile.debug <<\EOF +There are 37 section headers, starting at offset 0xfa0: + +Section Headers: +[Nr] Name Type Addr Off Size ES Flags Lk Inf Al +[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0 +[ 1] .interp NOBITS 0000000000400318 00000318 0000001c 0 A 0 0 1 +[ 2] .note.gnu.property NOTE 0000000000400338 00000318 00000020 0 A 0 0 8 +[ 3] .note.ABI-tag NOTE 0000000000400358 00000338 00000020 0 A 0 0 4 +[ 4] .hash NOBITS 0000000000400378 00000358 00000028 4 A 6 0 8 +[ 5] .gnu.hash NOBITS 00000000004003a0 00000358 0000001c 0 A 6 0 8 +[ 6] .dynsym NOBITS 00000000004003c0 00000358 00000078 24 A 7 1 8 +[ 7] .dynstr NOBITS 0000000000400438 00000358 00000057 0 A 0 0 1 +[ 8] .gnu.version NOBITS 0000000000400490 00000358 0000000a 2 A 6 0 2 +[ 9] .gnu.version_r NOBITS 00000000004004a0 00000358 00000030 0 A 7 1 8 +[10] .rela.dyn NOBITS 00000000004004d0 00000358 00000030 24 A 6 0 8 +[11] .rela.plt NOBITS 0000000000400500 00000358 00000030 24 AI 6 23 8 +[12] .init NOBITS 0000000000401000 00000358 00000017 0 AX 0 0 4 +[13] .plt NOBITS 0000000000401020 00000360 00000030 16 AX 0 0 16 +[14] .text NOBITS 0000000000401050 00000360 000001d1 0 AX 0 0 16 +[15] .fini NOBITS 0000000000401224 00000360 00000009 0 AX 0 0 4 +[16] .rodata NOBITS 0000000000402000 00000360 00000010 0 A 0 0 4 +[17] .eh_frame_hdr NOBITS 0000000000402010 00000360 0000003c 0 A 0 0 4 +[18] .eh_frame NOBITS 0000000000402050 00000360 00000100 0 A 0 0 8 +[19] .init_array NOBITS 0000000000403e00 00000360 00000008 8 WA 0 0 8 +[20] .fini_array NOBITS 0000000000403e08 00000360 00000008 8 WA 0 0 8 +[21] .dynamic NOBITS 0000000000403e10 00000360 000001e0 16 WA 7 0 8 +[22] .got NOBITS 0000000000403ff0 00000360 00000010 8 WA 0 0 8 +[23] .got.plt NOBITS 0000000000404000 00000360 00000028 8 WA 0 0 8 +[24] .data NOBITS 0000000000404028 00000360 00000010 0 WA 0 0 8 +[25] .bss NOBITS 0000000000404038 00000360 00000008 0 WA 0 0 4 +[26] .comment NOBITS 0000000000000000 00000360 0000002a 1 MS 0 0 1 +[27] .ctf PROGBITS 0000000000000000 00000360 000001af 0 0 0 1 +[28] .debug_aranges PROGBITS 0000000000000000 0000050f 00000030 0 0 0 1 +[29] .debug_info PROGBITS 0000000000000000 0000053f 00000121 0 0 0 1 +[30] .debug_abbrev PROGBITS 0000000000000000 00000660 000000b6 0 0 0 1 +[31] .debug_line PROGBITS 0000000000000000 00000716 00000063 0 0 0 1 +[32] .debug_str PROGBITS 0000000000000000 00000779 000000ba 1 MS 0 0 1 +[33] .debug_line_str PROGBITS 0000000000000000 00000833 0000005c 1 MS 0 0 1 +[34] .symtab SYMTAB 0000000000000000 00000890 000003c0 24 35 21 8 +[35] .strtab STRTAB 0000000000000000 00000c50 000001f1 0 0 0 1 +[36] .shstrtab STRTAB 0000000000000000 00000e41 00000158 0 0 0 1 + +EOF + +exit 0 diff --git a/tests/testfile-ctf.bz2 b/tests/testfile-ctf.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..af909af0fe7b7d88f11426e349e867e39fddfafd