From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id AA31C3882062 for ; Wed, 12 Jun 2024 16:56:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AA31C3882062 Authentication-Results: sourceware.org; dmarc=pass (p=reject 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 AA31C3882062 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=1718211363; cv=pass; b=fUYFyHjeAVLdcMNMGYSNKMozWr34hkBFnpi78mbEiajtpQGX60DGweE9Jz6i/9ir1T0HK1YwAJ/ZAFKmmYbV/EPdleJ+mmDh/lMp5m4tZII96HUAnPGg7wDo1ImcNm/jUKT4ljKj9OKklnwcuzbj7pTdcCAuZY8PxWpDrW0hpPo= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1718211363; c=relaxed/simple; bh=9eEv2XIaIeoyKD5OHZER7GiYiE+4Bykvir+qgpLaYis=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=Z9+9GtQqkD/OAb2KUwPeijRIkMsxIenjl0y7J1Y2RnWLfJOI4bwMxVOkxzBjLZNt1pDro+/uA3OrraTsj9PFgUO5oZcFKdAs48QKbfMrW4KVnucGbABaLBTgiagtysWo9jrpBGOxa0z7I41WL78AjcFMRFwnUbOP9z5jrR/bheg= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 45CFQJHH019458 for ; Wed, 12 Jun 2024 16:56:00 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= from:to:cc:subject:in-reply-to:references:date:message-id :content-type:mime-version; s=corp-2023-11-20; bh=elT1yt2l34LxpF 1E8Dka1r4MHss3fYJ56MiDy8GNFeU=; b=CUIcO2H+fi6X98ULehep+Nhw6ufy9g EPnRie8ekEy4PMlzKR2jnYdtZ6WvFPPqxvuO3bXfScHrUNtAK3IyLmXmHtLo/h4H u5OA+O2c1vKQVkaVecW+g3X6x/e6nIXZSIDSIyQhCtq2c1dw2UfrpsvggrpGQePh jS5JC417jLpgzOYGPJy/PSS/yVO86fOM+yQXrLlExkEOblz4A8dCeXlIibR9zA8C jdctLuDVdLvfKbQR0tYZC1uvgrCxPL/tnmMf929xFsqJ39Y+jIx38T42GF7rS7/p crjC9R3O2lWdVEnBi8+2GTkbWhLS+TODtvG3xeSzS6Y5mDjLUCuDwfWA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3ymh1mfn87-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 12 Jun 2024 16:55:59 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 45CGhjgQ020035 for ; Wed, 12 Jun 2024 16:55:58 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2044.outbound.protection.outlook.com [104.47.66.44]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3ync8yyq6b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 12 Jun 2024 16:55:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C7QsMczsP8DE8tLgqmbvHm6YEwwcz64fU0npAhcr8lTejrdnrg73ZwQub00dLUypjWhmX8Ca4FeEndSsX7gTw2TF/S85dkMtggr/fDQhS/4dmaGqHOpcXglp26vDOkzK2YW2Zk5CN7F9ndKrNQwU7Q6ySJ1lRRxSMOjt+S2/uktJ1OH8Hai5OPMd/hWvZPmYQ7gqzhPrE3ScBpb0EPvGcFIRLnbSg7Zh0AS/EyReAoBdLT74Kzn3zXhlnrxhc9HnLor2+SIbNG+/+f/9VLa591tFcm9LLWeppXO0GodTzPtPKn/YIVY8UzIP3GeQ2gP3zvxkLubTx4dGQd4tplKxhQ== 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=elT1yt2l34LxpF1E8Dka1r4MHss3fYJ56MiDy8GNFeU=; b=Wy/JeP/vGFokNe++f/nvJvFFSpt9mwPMPp9fzVnebCih8zHms9GhsPEX446Xjl9lT9rOzkmNPPy5ttvjnxuIu/V1RpU3kJxQ+J4Mnewg+sNuCTAIGVE3+0TUZdSXRRejgEbDWrH10/C5t1WlFDGwhKSo1DdoWufvMY7au+EtwESf3aMFf9jTCnK9KrZbtZSJXoR1doFNaN5fEn6Q2OT84eEoHajcwmrwfi/PqBlypqo8w+UHqXOH3FaLnUmALfjYAqVQh6ydeDziR8jPKVEYRIXtGBHhQ9x6OC5VGjj2UpMmD4cup3ZCLfIX0Or9BFLMTkIAw4c/4DEfZOh4CPiGKg== 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=elT1yt2l34LxpF1E8Dka1r4MHss3fYJ56MiDy8GNFeU=; b=DFWYLo9pcsnMqmG3t91UUQOoFbgrJQSujbhESnFNJnhMtc7kZbd8vcqNot8+PPMDAz7RxH9zvB89jXD2BtVXRIlLai5hl0xrC0ZEeyjFt8BqKDrfNNGEN5UE5qXK0IAnRImWVC7UCBD8gTGjzFRMsj+QCPfljIck1ZpEuYbiHvQ= Received: from DM6PR10MB3113.namprd10.prod.outlook.com (2603:10b6:5:1a7::12) by DS7PR10MB4878.namprd10.prod.outlook.com (2603:10b6:5:3a8::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.37; Wed, 12 Jun 2024 16:55:56 +0000 Received: from DM6PR10MB3113.namprd10.prod.outlook.com ([fe80::e0b9:12d5:badd:6fe0]) by DM6PR10MB3113.namprd10.prod.outlook.com ([fe80::e0b9:12d5:badd:6fe0%7]) with mapi id 15.20.7633.037; Wed, 12 Jun 2024 16:55:56 +0000 From: "Jose E. Marchesi" To: David Faust Cc: gcc-patches@gcc.gnu.org, indu.bhagat@oracle.com, cupertino.miranda@oracle.com Subject: Re: [PATCH v4 5/6] bpf,btf: enable BTF pruning by default for BPF In-Reply-To: <20240611190145.115887-6-david.faust@oracle.com> (David Faust's message of "Tue, 11 Jun 2024 12:01:44 -0700") References: <20240611190145.115887-1-david.faust@oracle.com> <20240611190145.115887-6-david.faust@oracle.com> Date: Wed, 12 Jun 2024 18:55:52 +0200 Message-ID: <87plsm2j8n.fsf@oracle.com> User-Agent: Gnus/5.13 (Gnus v5.13) Content-Type: text/plain X-ClientProxiedBy: LO4P123CA0631.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:294::17) To DM6PR10MB3113.namprd10.prod.outlook.com (2603:10b6:5:1a7::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB3113:EE_|DS7PR10MB4878:EE_ X-MS-Office365-Filtering-Correlation-Id: 0950585d-24ba-4c7f-fb11-08dc8b0086dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230034|376008|1800799018|366010; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v4iZW/qdCTGcGaOKxFZFKUgs1GLTNAeUNt6hup9h+KOjy9TQyNmN7VkF+Upl?= =?us-ascii?Q?nJK7zbJFpVpi0vnSt2ysyVAOmYMkdjdFDuFYmakTS5Xo5VhFfXMoHASw6a71?= =?us-ascii?Q?9HIpDTr6GpQeHTK2lxUz1a174jqRoD2raixQcd5euLEyhpAc+lwZvb6cCb1M?= =?us-ascii?Q?K0jhl1OJXatukvdmKqoDJby95GVAP/hhh6ZQ5i4egORYeL8bDlSVMhArlOBz?= =?us-ascii?Q?wE8zx0/DzFPj3h+gdJtfwQQV88oqf2A+fbJ+/GQTVQmsFz2HhwT9fJC4tkGP?= =?us-ascii?Q?+LH8Qw0lgMZhESHbCeiNh+pXnXps6lbHPBYNBYVueYenBkJ0M8cH/a7yTtL/?= =?us-ascii?Q?dX9xuXal6F6W3WsLCeRCnhCMBbqaUPIC+4CRbs3lQXdHDWrbY91e4hfRzmQ1?= =?us-ascii?Q?KAZjHTJhoGUUb7WxVBax+SLR11hb7dbCzYlI+XjqzxVHlRmTh3LQToa3EKG1?= =?us-ascii?Q?qZqn+qQuxZd5TfuwRGwR7hL+ADeu7fYIdW+9XAmA4cw+Cd6T2g3QrPkm9i1M?= =?us-ascii?Q?SjikCC5C0e4E+VFcgHT5Raw3xslLSJnMpLXAgTWqDSJnNZH0m8ZnKWFUWh+j?= =?us-ascii?Q?8aX8Abat0flo3C5JozDsGIXXyQ28D3uKn1LacuQzDKlb09BtHnYa2PZK601T?= =?us-ascii?Q?chpe/97GSb15QvYyd0p6ynbn3mubRh5VNn7FfCHB904+LJ165Me/AglCHBOa?= =?us-ascii?Q?d9jMwGHYmj/uqGQVGPreG67lNo1oTRxtyMNaKd7qOAP/IoohMbX3XUq6blk0?= =?us-ascii?Q?tnVOn8g61fjL6L3+iW/kpY91BBAXgvhePK+iqHRn/3Z//0xJJZWyxw4pr7em?= =?us-ascii?Q?D1dMz9uPE6yCZiwyMl3R8ZOGzHCvnjavpqLFvkYGziZacv8p41isFOqSqCLA?= =?us-ascii?Q?mNTOxWurX2gYs35/Ut59+eBfU5wJ3PwzG8IgHzD6lAnLweXBxav1jc7gXvDb?= =?us-ascii?Q?U8Y4RQFVgSW1tTtIpdyWbTRBkJvHr8A+QnqD5dTK/VecUQFKyyMbRG0Isuco?= =?us-ascii?Q?kOxBvdwrHCSMhYlaKyo0DgpmBKtthq0oUZZyXYvy6MghTmA28nQlcm7M9731?= =?us-ascii?Q?EWJNN0i6Bmn5rm8xPmrCig63vXC5u+xG2kW5OQIx7uecO4AEQO8vOuTMQNIP?= =?us-ascii?Q?1PylO0LBHWSuxUQYVAZpsbTVNiun1H5RoVztbfvN/5q4o/VXglzVkkN+n/oz?= =?us-ascii?Q?FdOJ84Ft6V7kIPq0Qk4tFHTpg3Diln+91IVqn5o3z0xx9QmFS/8aL0qzSB7R?= =?us-ascii?Q?krL+GEpw/PPmD3Uc9QZE?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB3113.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230034)(376008)(1800799018)(366010);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pnXXseLUIg00PU1zz+A26728a8P7EH4HHOiitys5sUsi2hUt1J9vSpLPtaYp?= =?us-ascii?Q?vZB1l03i+9R7e7tgbIay0mIal6g6JDJmpkSmHJPhqPHznX8bJAjPmLOX09Fr?= =?us-ascii?Q?2ESDktzM/TnepcpN+4L4gj72lV/XeyByzrorjSzSEA5yOl+zc1epFJUYdYxG?= =?us-ascii?Q?ClH1gIqtHhigqF+vdaFqzWvizNWpCxbGdb9XTTRL7gnVYBh61eKmlRhvLF9j?= =?us-ascii?Q?EXOOq9b95Zmbst54hsLO8/F67Ft7aonZiwVbQXw6dakA5P2G0SGrSlb29IAq?= =?us-ascii?Q?vlNKmeKcMzsx6douEVx6llxJCnNEz+vHvYD/APaAzF9Tq8i5LlI072u91A0N?= =?us-ascii?Q?4KQGWCRHQ2k3rtGxutZz7kAnBaFAcYHX79Bclmbbea/rt9QDgfZm5qtXVq6I?= =?us-ascii?Q?OP+6SPUXnhfSPxnZ8xBXe+RNKD2cV64KgVgtwFB4FS+ywlWKDFug0e+4yhUf?= =?us-ascii?Q?DkTpiXnH2XOvkH05XX87o4lFoic18UsgPn92dNvncbhoiqiWrRQi6wqyIpeE?= =?us-ascii?Q?BYb362RB9t8kfH7mYkDRGVVh1XlkoXycujccLDH6Pq03WZgNT2rxrhLjt6YL?= =?us-ascii?Q?nXmjgOaKlwP6yvZ7UM0qDseKJXtvsEww7VL3U/AKKZpgmurlAoH9lf8LhdZo?= =?us-ascii?Q?+a3r1BVmCgq7w2qbhesCjYCL43jIuFufOZiJ3t4F5LH70jN0QJWDcSgDkRqz?= =?us-ascii?Q?B3WcQMdPAIvfmaIZA5GYKe6tzoYIm8Iwg2ihN7Mb2NC2yLBcQQw3chZzcvTL?= =?us-ascii?Q?YaMrwbpsUgmWPo2k7VAtNoaU+bq52fkHv9McVU7kcQNZe3VXTbNBU5u61P+V?= =?us-ascii?Q?th1KpR29IiC7Jc2UhzX/gQbZqilCSFkEDURWqiOyfGNsCrPNpANoIpE451Zf?= =?us-ascii?Q?Vewo3IOQ21mE8T8uZ2hTpx1Mt5sykaBRenJPAuDvnL7rT1Jpa7Hjx0+83sAF?= =?us-ascii?Q?WlVU8BdUPKjDn+371P6gELSTqXAlHjye0WCQAqM6yDmnFrdMSkdrGwKlPbe9?= =?us-ascii?Q?T9T7hSbdbopzk8om+cT8sYWy5ThE0tf5GNpBX8AYB7GukqkNgy6U021X1uPP?= =?us-ascii?Q?y9q2N6Ap6+CSbKWfZ8954KHZsaSfXG9IHgXjOEEEDrN2AQ0hjUnaf45axrnq?= =?us-ascii?Q?zpWiR+6b7k7vz/V88N1heVRtZnZfusbCh6GNBYt2vj7C4zR91xo0NNTIVout?= =?us-ascii?Q?PWpvbpEWLJoGcTwbdOSvmVNIPjtWg5GYtnA9mjmQAyrdICeng+g2YlpfxVEE?= =?us-ascii?Q?SJLY0+O/nILnIvenyrUXJBDgZ8ynjCFGvIjU/JqB/RWB8h+/CZRntX2IZmDS?= =?us-ascii?Q?/6E32J0hAn27L723yDI/ak+7zTa0lPniVRfLbLvCDpDFbXqPQ9gXzGqSVhyU?= =?us-ascii?Q?H4S/zjvNT0R1ZIsH2iHiaWxaoEF4tt3XOa4w0a225CUUSFE+53670LS6pawV?= =?us-ascii?Q?axesbaPrWbnNAbDXg+xRsCJvpJ/r0XtxwrdiNcr3HB08BLPr6epdNYok1EmT?= =?us-ascii?Q?TOND+s46py7WxED8m2BYpDVcudyXCNNXKu9J0KFR3VkTVc600U4pBEROBJTg?= =?us-ascii?Q?Slpik5MYNH+39RF8lzUoxgWRfYRr9V+uaYC5lS1FWpSJOHAzQyZGIwT3kHSe?= =?us-ascii?Q?gg=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 8Jga+H9IlhQDic7bhKY99vqJv8vuDjc4CkMnPDrfbOEGRec47wwKACqkPikMAtM6xdphTV6/EDigRozQVqaxAzSO+QvY8j6vzXwAdN8CHX2aRZBblPu923lXunAjG1qvWbahewAf4r0fQci6MoZ+tGAlgcXP/iZb8J54Be2KMDCu85whDE/8eOLOZkmHv6D3h34DQVcDKDNhFArKrgQowDjHT3HEFEnf2yr1gfVMj2em7jUM1BmwaGr8VXIwCVrycFz0VhkLc8SnDBij2EMLdeqvVMi6hx/f83M1IuWWzevElSkm6NKyk1NhXZ92msBwwCcmBeVnhchbQ/0t5M8QKVlVmltxJ5cTodPuyqCFN1ZEJRhXqFp8cMk7RK9stI7NH/FkKm4t90F56fRfYgM7e2b93Vj8+P3OG/ppuKXGTDVAL5fA6LlSYqQPXbt6NbI/1r6RAWd2S+WFcZQy6xPHoWKFgdtAUcmOlO/607IfDm3+dYs1zMloCkReC2mdXHvkpffKe3LRV9IwBLfE0paraB4pwJatPifBVDdEw4VHEa3dgIYsbqSbIdhV/6UBKjs9oFXyTTwXqZVsXIs4KHqyuLFs3p5dGhVWyZykPbXZBWc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0950585d-24ba-4c7f-fb11-08dc8b0086dc X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB3113.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2024 16:55:56.1257 (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: b8wiPBP+TOSBzRCJB8THibCCXqFz9hznaYZ1Rnh9bHEiQ6T1OrmsbBfqbAbYwB50RbrNnxk87Hyyc6fIAiIN3EMml0v91SOh9oXy6FiY89o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR10MB4878 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-06-12_08,2024-06-12_02,2024-05-17_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2405010000 definitions=main-2406120122 X-Proofpoint-ORIG-GUID: EyE3efFf7cDkvRLfSgFCI4vLfGvIXRd9 X-Proofpoint-GUID: EyE3efFf7cDkvRLfSgFCI4vLfGvIXRd9 X-Spam-Status: No, score=-12.9 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,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 List-Id: Hi Faust. Thanks for the patch. Please see a question below. > This patch enables -gprune-btf by default in the BPF backend when > generating BTF information, and fixes BPF CO-RE generation when using > -gprune-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 -gprune-btf > by default if -gbtf is enabled. > * config/bpf/core-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 -gprune-btf is > enabled by default for BPF target when generating BTF. > > gcc/testsuite/ > * gcc.dg/debug/btf/btf-variables-5.c: Adjust one test for bpf-*-* > target. > --- > gcc/btfout.cc | 22 ++++++ > gcc/config/bpf/bpf.cc | 5 ++ > gcc/config/bpf/core-builtins.cc | 71 +++++++++++++++++-- > gcc/ctfc.h | 1 + > gcc/doc/invoke.texi | 3 + > .../gcc.dg/debug/btf/btf-variables-5.c | 6 +- > 6 files changed, 100 insertions(+), 8 deletions(-) > > diff --git a/gcc/btfout.cc b/gcc/btfout.cc > index 34d8cec0a2e3..083ca48d6279 100644 > --- a/gcc/btfout.cc > +++ b/gcc/btfout.cc > @@ -1503,6 +1503,28 @@ btf_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 (!debug_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_add_used_type (ctfc, dtd, false, false, true); > +} > + > /* 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 dd1bfe38d29b..c62af7a6efa7 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 -gprune-btf for BPF target. */ > + if (btf_debuginfo_p ()) > + SET_OPTION_IF_UNSET (&global_options, &global_options_set, > + debug_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 232bebcadbd5..86e2e9d6e39f 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,51 @@ 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))); > +} This means that the callback is only marking as used these types reachable from the CO-RE builtin arguments that are referenced by indexation or field name or pointer? > + > +/* Mark types needed for BPF CO-RE relocations as used. Doing so ensures that > + these types do not get pruned from the BTF information. */ > + > +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 +1624,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 29267dc036d1..41e1169f271d 100644 > --- a/gcc/ctfc.h > +++ b/gcc/ctfc.h > @@ -457,6 +457,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 8479fd5cf2b8..0afd686733d0 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -12023,6 +12023,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 gctf > @item -gctf > @itemx -gctf@var{level} > 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 8aae76cacabd..a08130cfc072 100644 > --- a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-5.c > +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-5.c > @@ -11,9 +11,11 @@ > /* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 1 } } */ > /* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*btv_linkage" 1 } } */ > > -/* Expect 2 array types, one of which is unsized. */ > +/* Expect 2 array types, one of which is unsized. For BPF target, -gprune-btf > + is the default and will remove the unsized array type. */ > /* { dg-final { scan-assembler-times "\[\t \]0x4\[\t \]+\[^\n\]*bta_nelems" 1 } } */ > -/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*bta_nelems" 1 } } */ > +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*bta_nelems" 1 { target { !bpf-*-* } } } } */ > +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*bta_nelems" 0 { target { bpf-*-* } } } } */ > > extern const char FOO[]; > const char FOO[] = "foo";