From patchwork Thu May 2 17:11:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Faust X-Patchwork-Id: 1930752 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=liIzX9Ed; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=sgmPUAAB; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VVgV06rQTz1ydX for ; Fri, 3 May 2024 03:12:24 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6F0B63849ACE for ; Thu, 2 May 2024 17:12:22 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 76B7C384AB51 for ; Thu, 2 May 2024 17:09:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 76B7C384AB51 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 76B7C384AB51 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714669767; cv=pass; b=ev2XV8J5Exjgr7rf838m4sS6CaqMbIEb4WIuUpqyT/kALT4XyzhyYLtrdzGYqrhSkGm+YFcfv/pgTC2Lt7ExlpxVFEb17t1cDYHu+3auiVKx0Us6ly2FkI7UMU0GBW2IVvPNKqXVcBsNyBy2YlQf4o/kPODNygBeqtz8aPcUSJc= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714669767; c=relaxed/simple; bh=TtfGbOiE3TCduGCYAUhXCMccD15qqaB3pxxPpfZuRP8=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=dmbTJxrjs6riPHeNrlFHrto1A/TAL6Tdkxi9VhgxrlK7WRPlYrQOafPNiQ0oFbyCN5GmwbschEhIJnljj/zTwuNHr96lE4CKaENUU0lATysPeablbDz28KmXuIgxH0/2JsbWWh2U1MlbwOF8aq+uZOw3xKzvi/P909Pz7MwW62U= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 442Fi216002192 for ; Thu, 2 May 2024 17:09:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=C6dGsch+lESHDqD/iJ1YsosziiSMnx01dM2nwYqMwsE=; b=liIzX9Ed5nkGlJcBE5ZQ91Hy1H/1o+Wz1NMKWhFCDWgqKNbZd65ovVdsuS7kFbbX8+XJ 8e0Qgoaa7JVsz6Oh1/G4SKhzhBJ6L7b+9dPVw5H5b3OevHdrc7eg4G1UGd/HbVchPnDE ReJwKtYCn6M2Wc0zXKYEsHlQnLaC1a7R8WMQzUOB3rOi37RDUMlbrItgAVKQd3FkXwQ2 OIFo9wVBLBfKwY1YnmBQHywwZ/Mhz74r06rj/rwK+v9oBx2kMWpu92B2e//q1gp8aqb9 ghHaIhGRrARVyyK2XKsxAT7d+fRHOOztAko6ndQOlzJ6TNK1y+PTfZ1yHf4RoMkAwR4h tQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xrqsf656d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 02 May 2024 17:09:15 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 442Fdsd3034702 for ; Thu, 2 May 2024 17:09:15 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2100.outbound.protection.outlook.com [104.47.55.100]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3xrqtb0gyn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 02 May 2024 17:09:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ggTNeVgF2ri0SClSvoA8fBnXXClVNhoThpQj/TTVABV+9EYhvagyzEqmCvtneRbHNOFLzD0XYeuPEa2SM2qhcyftv329Orz+x/iimzuytmMKO36IC+LA1xA8rN8BRKu5k3GzkL9dArzQWJapC5Q3eqS37rsh6gkzF4ot38oaLqt2f56D0EHlzRCNGJOIum5HcTAkyCoUis8Q4u9EmBYyVpG7dWHXfXYHnR+OSgeFT19F9UvzWOYIz+tgjiuOQnwtgafYYDdMQzsy18JfcAw5jqPD4u7WB2fsGFHUrlGwBriudHt26TXYoxMDj6txlTRZ/prJLudXBGw/zQ3R3VQAoA== 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=C6dGsch+lESHDqD/iJ1YsosziiSMnx01dM2nwYqMwsE=; b=bd0gqOAB45NkEQJ5Be1rIKkRcacC/mz/JrgxEEjPvmkI7dJgaxPu+1QiAtSvXAMOZsJj796HQ2ELjclK+4hBLlWeHIXwZrINvQ0Wcaq23uqnls623c2NaR3AlyYuXWwsQKj+nw5s+QFRzBLZbg357Ioa/ZLofBVN4z2vAQPuVg+2yZkMp33qXJnhHpX/az3S/yRRyDbJAVKr4SZnlOCW8h0AziKlB2y7yLgHeZcU/y/hbC1znIkyBMvzEu/QTSx6FT98ivBljCnJ4OdPnBntQygL7wlLzPwIvTRtGQmCuXqzc1q/PZxOJRTZmAmjRsvUALfseO1QP3yFzMLYOjm15w== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C6dGsch+lESHDqD/iJ1YsosziiSMnx01dM2nwYqMwsE=; b=sgmPUAABTDmqZ8aFabDrBqZ/UzRJ+vB2oTURB4ZjcbAsc2O9sI8Gqwy+b3bk7/z2gnVvi3g+r015NIJ9GGrsK9uHPpB6fX/dXXnSMjNYldG/AgwcV7qhzS2xDRwwJWGV1PBAryHzMexIoFEWiZRfrx/xx3Tslzn0seZI79Qjc+4= Received: from DS0PR10MB7953.namprd10.prod.outlook.com (2603:10b6:8:1a1::22) by IA1PR10MB6147.namprd10.prod.outlook.com (2603:10b6:208:3a9::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.29; Thu, 2 May 2024 17:09:12 +0000 Received: from DS0PR10MB7953.namprd10.prod.outlook.com ([fe80::ddec:934d:1117:499d]) by DS0PR10MB7953.namprd10.prod.outlook.com ([fe80::ddec:934d:1117:499d%3]) with mapi id 15.20.7544.029; Thu, 2 May 2024 17:09:12 +0000 From: David Faust To: gcc-patches@gcc.gnu.org Cc: indu.bhagat@oracle.com, jose.marchesi@oracle.com, cupertino.miranda@oracle.com Subject: [PATCH v2 6/6] bpf,btf: enable BTF pruning by default for BPF Date: Thu, 2 May 2024 10:11:31 -0700 Message-ID: <20240502171132.95601-7-david.faust@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240502171132.95601-1-david.faust@oracle.com> References: <20240502171132.95601-1-david.faust@oracle.com> X-ClientProxiedBy: MW4PR03CA0237.namprd03.prod.outlook.com (2603:10b6:303:b9::32) To DS0PR10MB7953.namprd10.prod.outlook.com (2603:10b6:8:1a1::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR10MB7953:EE_|IA1PR10MB6147:EE_ X-MS-Office365-Filtering-Correlation-Id: b5759396-573d-459e-e98b-08dc6aca9686 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|1800799015|376005; X-Microsoft-Antispam-Message-Info: c6VcOA/yu8E4h3jtw5uQFOI5GC6vha0VhWkImk7VYJD8OTfxFbeZ5PwbPi/kEKkKJpsHXQzH9pR8hq+WiXoXY8RStFnbTt6oZfBMaXbV5cvXms4GI0YWNuKSKXeMuMujnKrGSSsrteUjcITdXN6MiXLr7eLcBL6HKoy4C+/nFKn7nmLibsSYrqVdxvgaM3rz5UbKBaV+lT7tXueQI9Dx3EGEe1uVqKqC4Bwsp8TdchLENdnKmFvU1fQxw2z6jY3N0Qj+VgyKeq2vIwNXakwbRIlNLUrrYMUxxqlsPHzowxTkgmlUOC7ZVvlZ1w8dMfS6lfU8nB22CErAe5a7FJNeYs4ZCzIO9xog5Lh94fDFdK9O00i8qh8bjhdOuUkmJdAYQu2U0HzTR7dHDpeEl26/AdzK8qOZtnscF8k4xUGe9OE4gKJwzRgrbAhpOZxpRITIgSYqldkJZ4XrTldbf1AcETpOVu9v5+VKLev0tN5/wOYjzfOuXuHUShZ6uHhih4d4iSO4Yzx/0YA9ppo20prU2URmteO10kEwcfWUOqHTRzwCzfZWtGtUFOydCpDC6ZocGNEj8j3A3oRDfYL0NPkDj3MD/ks8a718prSqOta+Jt/r2vOZoMK1jTLVXBcnXsch3JZGxB3BNB/bcoeX6SyQMyClfzjsEU0WRcBbCHto+jMnkZ/rsic2qPx+xC7VHX8A0NXrE6Eu1dPZbQ+z/8QHJa3kfa+RletwSzec/uJ4ZAO6tZRGyeb/JCGFs4XxWMoyC/uGbZx9zs9fqX9hEDRhrU/BbTn8buT2b8kOdcVweUs2icKdt8/t7rsY3/ev+83HlWHPsatmBHm26ENYSR2Q7xjLvHdafyEPijmNrPwM9cubUtLQFsBIYZTFJISxnEekfDVFO2t3dRx8bWGs+UZiKg1gt+lSp2MrChLHHYeDS2tCnfDTlUj6SUYaJvhSecWkOHBX4Q25Pfck023ti251GRejxh8Cc98sU99kjoSf8mN89TnS8fjFWiXh3Lj/uajftOFHYuNxNeWRpKP0OSz5DM+UfkVdcBxRC7O9Cfv8tOrDnHkBwvkR89ZzVGb8Sea1GS8K19t0atvXiqb5w9hEQMRWvvAFeV/uf1RbwKHu6PhlVLBKV9XCdTaQ7Rw4VHe1KnYhFQkOYMvzTEk42Axwbr0WbsoGEWK0uSTR7IV9jxRdSPYZqk5boQXsFKZ8IHzt7ogzH+3No6oJv9Wk7uv+JGfWl9VoEvojxqTIq8derSA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DS0PR10MB7953.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(1800799015)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KsE4SCD5Phxd8mifed+NLQtiQsDVh2KEQTh05snXcu/AI8R8ncB1lKn8Lo20I/NOWmXkKeN86xBoJRx+c58w+cX2etYkxMN4Z+oCqxNF7Pwyj18lbirdBNLR/hcGnfYcK4VsLSL3lnoABmXx64/LQl1T7rkpFTqNUWNPk3SgbUAkA0gYKqZ1FpJSsd0UlToaigZyqJvcYdIpD23XHGc4XuPVsA+u4In/4YMnfRN2skw3ZyhEXRLrUn3HXNFX06p4+eNHPGo7bYoUneHwi7VEjmO3HWtIPECNlU/UAuDb/gZoN7KamNlmn3rX4RY5816tT4++dubzz/kwJFbi1IzPXE9PvsYp6RCWYhMWg6Uo/uLlRlo4UglpngK1K9w2rbc6QBZhGsFSZDVykWJYTu86hglqhoxeXvaiTAQg0HwFQJd+yhTCN4XiaL8HgEUsAkGuM2GJmsodSDl+7Ygqgbo6VYQwiSWqD836lhqkLtkTtLEbQbInqMfEVlOA9qzd14GUfENvodah7MJYtWP4EoTKO8Z/T/bGYxMw81hvFrCZYIcSFesFXjqaTtii4e0ZQ2wdH8CAsEBG3+LIU90IzMfoRO0nZelvfuYjJsaKIplgbagERww0ddSJBrKBMJQeKPyaigH0l5NPUaOH6BpMT3cecsPrZMm/3x9OBgQXMS7hKux58nfTSXHgK9XaVMhfoh2ql3fOgupGCOdvefWYmW/p9GhuqHVNgg4oeDcjPcYUdhjuqIyP5kznunLVa/kG2PcjC8SaqR2qGapHtMnT/klWtGGsSSO+Sn2P9pNNpvqFz50Ewm/TSyvJicWYcQxap50SFJ/gpoZuMXstZbB0qa2ldsRcaVbDc/cbbBYYDHepC3ga1rpPLyuQtgu6U9RvsJhX7JPUTcTyAaoCvRS8zocMqnldVmoYEtAB8Umm+bB5L4qL6ULKz2E1ClqSKYrU4JUoC97yYZrA2uOPphqBnaCQpzfEGnsHuvDdEQxiGQO7UIHOAxeWg4XZoyTBUwFNmQhM6yupeKNGaCvSfLWwEUPXVtOh8MvDh8CJgJ5uIIg9izhtHf+cGJ6n9GZePH9zWmxnzVkp44J0aqVJkbAlUWTq4R7Q8txo0Rvleu4mIa1/7bExv8eNdLdsq9sVFBQ8vRMFy3ioF7/7jOjkM/XFYYVH5PPQ6f+MyvkNZC4C8r+g9Az54zicBV8kQ3O3cy/2xL4F/uKIPT1waI7rwqvNxKh2oWMwKiPuW6vXw0ennTorqXGHRZCBABJJaOAuL0IdiPPlZqBhEeDArukIzSlVOLPFKGUYJ00YxxVHcaDkZoWfMUCMBGildKEXVDAKLd1l68Euxcsluu5L60oOgFz81yMFO+JhwzmH5rQNPvRqmeJOgsCy3SYPg4toskfqwLvsBXHV1rLpJb2IZPooQMBXGfQpWCu0lzEpD4+ciwLbGXRZkbrEWUg5G+YpXf+yWgAs5VIv63fwerRkRexlmgCYm7UwRUoaKnXvRkJupA9yZ63fyuT/zcoMfrqZMPt8cSDp+S29UPR4mvCFlB5XMMxPqLnfAbQ///M57psJeiUTxOm/P5aX3IsEpDz8otkAy1ltPEDQICiMA+KAEHV0jUKfXFgJEA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: rqUZnFmXIk4by0Gf0j53R31Wm7bnEHCuLwDtNpcsMjKX9ExTCjkY4tg5hZiBxlznYVQnJSYlp4g/ME9YmKWqm95WOBEu4qiewwnqxxL8zQACRrJqYJl9UEDBAJwJDGcgIirCm3eWvVlI0F3zBRjNAsUs4GCTGE1A7AQTas1PYK1aKAgy52XUMy74QKCzlaLnAf3UyiYxmy3ssVoJfHVrAPpeAFW7U6SdFc9gfCMIIbbUe6fyS/uguN+b7bvH9/HMpE94dDRYROJN7dx0ZmK07O/kNrNJn2r2/FiFmWDxlDDdaGYmHm2xzdyXVcXQxW9KKcdx/yz2XbDB+FGLUaSzFfx6D0x2MaFp/efxh17QhG4Cp6kI/R/BZ7hrIuaOk5rh3Z+KLw1vmmHVPiP7l6RiWXCWY0/6DWLqufiASkmQB1rmKO9N3+4dieF7D55P0fIghZAe7243VcG9ZQGG2QK+35ME/k2NFsKc6bPw/hw49qZ8CSQ6p6p65zAGWLJQFcogNNKr9fwI4LouBrW5gl78t9MNQ5udoj15WECopQ0dJxj4IptFxMO8ERLJq9LnJDvVX6ARMxPWjlQTS1G3Pa4c8IoWGvHuSHTz1wck8zHedd4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5759396-573d-459e-e98b-08dc6aca9686 X-MS-Exchange-CrossTenant-AuthSource: DS0PR10MB7953.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 May 2024 17:09:12.2042 (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: oCxhBxhpWDjxEmlNd63uNnG9F58wfpGASreC2z0fptVvFzH0hX6lorxueuuyYXuagImzBTwslwn2IrJrIVZgrQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR10MB6147 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.650,FMLib:17.11.176.26 definitions=2024-05-02_08,2024-05-02_03,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 bulkscore=0 suspectscore=0 malwarescore=0 spamscore=0 adultscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2405020112 X-Proofpoint-ORIG-GUID: IZcmL00DLI5gMkTlBdHnbLktY9w2Jopw X-Proofpoint-GUID: IZcmL00DLI5gMkTlBdHnbLktY9w2Jopw X-Spam-Status: No, score=-13.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org This patch enables -fprune-btf by default in the BPF backend when generating BTF information, and fixes BPF CO-RE generation when using -fprune-btf. When generating BPF CO-RE information, we must ensure that types used in CO-RE relocations always have sufficient BTF information emited so that the CO-RE relocations can be processed by a BPF loader. The BTF pruning algorithm on its own does not have sufficient information to determine which types are used in a BPF CO-RE relocation, so this information must be supplied by the BPF backend, using a new btf_mark_type_used function. Co-authored-by: Cupertino Miranda gcc/ * btfout.cc (btf_mark_type_used): New. * ctfc.h (btf_mark_type_used): Declare it here. * config/bpf/bpf.cc (bpf_option_override): Enable -fprune-btf by default if -gbtf is enabled. * config/bpf/bcore-builtins.cc (extra_fn): New typedef. (compute_field_expr): Add callback parameter, and call it if supplied. Fix computation for MEM_REF. (mark_component_type_as_used): New. (bpf_mark_types_as_used): Likewise. (bpf_expand_core_builtin): Call here. * doc/invoke.texi (Debugging Options): Note that -fprune-btf is enabled by default for BPF target when generating BTF. gcc/testsuite/ * gcc.dg/debug/btf/btf-variables-5.c: Add -fno-prune-btf to dg-options. --- gcc/btfout.cc | 22 ++++++ gcc/config/bpf/bpf.cc | 5 ++ gcc/config/bpf/core-builtins.cc | 70 +++++++++++++++++-- gcc/ctfc.h | 1 + gcc/doc/invoke.texi | 3 + .../gcc.dg/debug/btf/btf-variables-5.c | 2 +- 6 files changed, 96 insertions(+), 7 deletions(-) diff --git a/gcc/btfout.cc b/gcc/btfout.cc index 93d56492bbe..da2c9d35be9 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -1539,6 +1539,28 @@ btf_late_assign_datasec_ids (ctf_container_ref ctfc) } } + +/* Manually mark that type T is used to ensure it will not be pruned. + Used by the BPF backend when generating BPF CO-RE to mark types used + in CO-RE relocations. */ + +void +btf_mark_type_used (tree t) +{ + /* If we are not going to prune anyway, this is a no-op. */ + if (!flag_prune_btf) + return; + + gcc_assert (TYPE_P (t)); + ctf_container_ref ctfc = ctf_get_tu_ctfc (); + ctf_dtdef_ref dtd = ctf_lookup_tree_type (ctfc, t); + + if (!dtd) + return; + + btf_minimal_add_type (ctfc, dtd, false, false); +} + /* Callback used for assembling the only-used-types list. Note that this is the same as btf_type_list_cb above, but the hash_set traverse requires a different function signature. */ diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc index e6ea211a2c6..75303ce8f46 100644 --- a/gcc/config/bpf/bpf.cc +++ b/gcc/config/bpf/bpf.cc @@ -221,6 +221,11 @@ bpf_option_override (void) && !(target_flags_explicit & MASK_BPF_CORE)) target_flags |= MASK_BPF_CORE; + /* -gbtf implies -fprune-btf for BPF target. */ + if (btf_debuginfo_p ()) + SET_OPTION_IF_UNSET (&global_options, &global_options_set, + flag_prune_btf, true); + /* Determine available features from ISA setting (-mcpu=). */ if (bpf_has_jmpext == -1) bpf_has_jmpext = (bpf_isa >= ISA_V2); diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc index d5a7de825ad..1b91b1c0d25 100644 --- a/gcc/config/bpf/core-builtins.cc +++ b/gcc/config/bpf/core-builtins.cc @@ -624,13 +624,20 @@ bpf_core_get_index (const tree node, bool *valid) ALLOW_ENTRY_CAST is an input arguments and specifies if the function should consider as valid expressions in which NODE entry is a cast expression (or - tree code nop_expr). */ + tree code nop_expr). + + EXTRA_FN is a callback function to allow extra functionality with this + function traversal. Currently used for marking used type during expand + pass. */ + +typedef void (*extra_fn) (tree); static unsigned char compute_field_expr (tree node, unsigned int *accessors, bool *valid, tree *access_node, - bool allow_entry_cast = true) + bool allow_entry_cast = true, + extra_fn callback = NULL) { unsigned char n = 0; unsigned int fake_accessors[MAX_NR_ACCESSORS]; @@ -647,6 +654,9 @@ compute_field_expr (tree node, unsigned int *accessors, *access_node = node; + if (callback != NULL) + callback (node); + switch (TREE_CODE (node)) { case INDIRECT_REF: @@ -664,17 +674,19 @@ compute_field_expr (tree node, unsigned int *accessors, case COMPONENT_REF: n = compute_field_expr (TREE_OPERAND (node, 0), accessors, valid, - access_node, false); + access_node, false, callback); accessors[n] = bpf_core_get_index (TREE_OPERAND (node, 1), valid); return n + 1; case ARRAY_REF: case ARRAY_RANGE_REF: - case MEM_REF: n = compute_field_expr (TREE_OPERAND (node, 0), accessors, valid, - access_node, false); + access_node, false, callback); accessors[n++] = bpf_core_get_index (node, valid); return n; + case MEM_REF: + accessors[0] = bpf_core_get_index (node, valid); + return 1; case NOP_EXPR: if (allow_entry_cast == true) { @@ -683,7 +695,7 @@ compute_field_expr (tree node, unsigned int *accessors, } n = compute_field_expr (TREE_OPERAND (node, 0), accessors, valid, - access_node, false); + access_node, false, callback); return n; case ADDR_EXPR: @@ -1549,6 +1561,50 @@ bpf_resolve_overloaded_core_builtin (location_t loc, tree fndecl, return construct_builtin_core_reloc (loc, fndecl, args, argsvec->length ()); } +/* Callback function for bpf_mark_field_expr_types_as_used. */ + +static void +mark_component_type_as_used (tree node) +{ + if (TREE_CODE (node) == COMPONENT_REF) + btf_mark_type_used (TREE_TYPE (TREE_OPERAND (node, 0))); +} + +/* Find and mark used struct/union types for BTF pruning. */ + +static void +bpf_mark_types_as_used (struct cr_builtins *data) +{ + tree expr = data->expr; + switch (data->kind) + { + case BPF_RELO_FIELD_BYTE_OFFSET: + case BPF_RELO_FIELD_BYTE_SIZE: + case BPF_RELO_FIELD_EXISTS: + case BPF_RELO_FIELD_SIGNED: + case BPF_RELO_FIELD_LSHIFT_U64: + case BPF_RELO_FIELD_RSHIFT_U64: + if (TREE_CODE (expr) == ADDR_EXPR) + expr = TREE_OPERAND (expr, 0); + + expr = root_for_core_field_info (expr); + compute_field_expr (data->expr, NULL, NULL, NULL, false, + mark_component_type_as_used); + break; + case BPF_RELO_TYPE_ID_LOCAL: + case BPF_RELO_TYPE_ID_TARGET: + case BPF_RELO_TYPE_EXISTS: + case BPF_RELO_TYPE_SIZE: + case BPF_RELO_ENUMVAL_EXISTS: + case BPF_RELO_ENUMVAL_VALUE: + case BPF_RELO_TYPE_MATCHES: + btf_mark_type_used (data->type); + break; + default: + gcc_unreachable (); + } +} + /* Used in bpf_expand_builtin. This function is called in RTL expand stage to convert the internal __builtin_core_reloc in unspec:UNSPEC_CORE_RELOC RTL, which will contain a third argument that is the index in the vec collected @@ -1567,6 +1623,8 @@ bpf_expand_core_builtin (tree exp, enum bpf_builtins code) tree index = CALL_EXPR_ARG (exp, 0); struct cr_builtins *data = get_builtin_data (TREE_INT_CST_LOW (index)); + bpf_mark_types_as_used (data); + rtx v = expand_normal (data->default_value); rtx i = expand_normal (index); return gen_rtx_UNSPEC (DImode, diff --git a/gcc/ctfc.h b/gcc/ctfc.h index bd3d98ffed9..99873a0b15c 100644 --- a/gcc/ctfc.h +++ b/gcc/ctfc.h @@ -458,6 +458,7 @@ extern ctf_dtdef_ref ctf_lookup_tree_type (ctf_container_ref, const tree); typedef bool (*funcs_traverse_callback) (ctf_dtdef_ref, void *); bool traverse_btf_func_types (funcs_traverse_callback, void *); +extern void btf_mark_type_used (tree); /* CTF section does not emit location information; at this time, location information is needed for BTF CO-RE use-cases. */ diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 2908afff7c6..f8778cdf7cc 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -12254,6 +12254,9 @@ It is primarily useful when compiling for the BPF target, to minimize the size of the resulting object, and to eliminate BTF information which is not immediately relevant to the BPF program loading process. +This option is enabled by default for the BPF target when generating +BTF information. + @opindex femit-struct-debug-baseonly @item -femit-struct-debug-baseonly Emit debug information for struct-like types diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-5.c b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-5.c index 8aae76cacab..c146b90abf9 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-5.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-5.c @@ -5,7 +5,7 @@ with 'global' linkage. However two array types will be generated. */ /* { dg-do compile } */ -/* { dg-options "-O0 -gbtf -dA" } */ +/* { dg-options "-O0 -gbtf -dA -fno-prune-btf" } */ /* Expect 1 variable with global (1) linkage. */ /* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 1 } } */