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 65DD6385C648 for ; Tue, 13 Dec 2022 06:11:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 65DD6385C648 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2BD0sCgR002199 for ; Tue, 13 Dec 2022 06:11:26 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=message-id : date : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2022-7-12; bh=ZW/QKrbGTNWmbRl/phRniJi0/pgj2ENZex3U3Zi0Lo8=; b=lzgod/20xylFewqwsRHmw4x2J3McGnHsb1Cuom956GZIY9PVHMOOwH01m7Xfc/bRbuJL a4UKvYZRi7iAS7KRWqMd4rlPuUVJap/AjsaFNU94q81N8+RiPhwv0tCdlNDoOUX5vLn3 UC7lPCG3/nu7DDYlmZKFMmHeWjzA0DkARvxbDQaD2anJv90B5KUO5Xf06ner+zFQIqG0 N2wpVkbV9WAaVQ1N+sAwBMjPQu6V/f2HJiCqcfmNDxhyGi6j2GxPxggTeoYVzq5v0RLU pHnmB1JdYbyeqwtxbPfwFH7in5OwQSB2OV/4w6cpU6u21eNSV8N4PqJAtc8/O0geNiwi yg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3mcj5bvkwn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 13 Dec 2022 06:11:26 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 2BD5Q3hP034820 for ; Tue, 13 Dec 2022 06:11:25 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2100.outbound.protection.outlook.com [104.47.55.100]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3mcgj54vrr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 13 Dec 2022 06:11:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=azGOuTZ/frPGt4Mj2ICAgnnGdTB0ratAltqRpPvBQt8WuvakNKANwceCQpSCYYaYtIIDBe7Xi+cGUmisPQ3iPWLZIVMlm36a0XEI6MIoSQzd/m/cHcmDydPGqoUcLwxg7JV+JQEEOWdBgyIAygXsZ7a1hVA1vbf1b1MaBp/uO7kPJ0GP8xU+G2taY1RF9HWjuzK50IuOu+SCc46o99bRYx1LAAxJas5nVdOYx6dI31+baLDLgcb5C3b1HC15BiKizmi4Q14cynqSluZElHnF5mpK3LdBG8bDfqEFaP2ofcZg8kouSxr9mGQ4WmrAxu6ByI6px9unTBtRtzhQhvQv/A== 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=ZW/QKrbGTNWmbRl/phRniJi0/pgj2ENZex3U3Zi0Lo8=; b=dJC7eO3r/VTz8WwcxxB5104f/UTlQzrnn1EDfEu22ug0w1IAWs15W7v8AeVm68oZ6epLFXMDnzttGIGOxIdv9K/nO53lHNjCeJsLihbodfLcc59c5Xeh4mE/Di5XqqJ7XXvl6vc99HRJeARFc7BTFaeDoAx2iv9hRzR5iXtRviLMueJVNxJ7pnlCknfoIY3tlzTIwZGDeG9v3MP9KVc9jciqpe/Jo+vBy/xhjAYAksSa1dHlOipqNIPNBehq6EuG6hy8q5u7xPTSBmIHQMedFId/WqN6klnZzHePezkg7rfDZWvfsrFJ9PkZtRlVbe+tMmjxzw2D/Tr9jAsnuUuc1A== 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=ZW/QKrbGTNWmbRl/phRniJi0/pgj2ENZex3U3Zi0Lo8=; b=Tks41/fQ7Oib0PUYQErU7vleR4TPvXfJ0OF2pUDqoTFfX7ct3mjXT10oHAB8omTnQDa5qAasb6ZaSIwW7evQXQ/r/Z6U8K2hDm/XfzMm41n2FWxj1f6Ajyz7v6AmX4M95InYvUq+U1IBWz5DGYdQcbIpnbnxVca0cMcg5iirqFo= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by BN0PR10MB4918.namprd10.prod.outlook.com (2603:10b6:408:12e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.19; Tue, 13 Dec 2022 06:11:22 +0000 Received: from MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::ee70:1952:4416:1bdc]) by MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::ee70:1952:4416:1bdc%5]) with mapi id 15.20.5880.019; Tue, 13 Dec 2022 06:11:22 +0000 Message-ID: Date: Mon, 12 Dec 2022 22:11:18 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 Subject: Re: [PATCH 2/3] btf: fix 'extern const void' variables [PR106773] Content-Language: en-US To: David Faust Cc: jose.marchesi@oracle.com, gcc-patches@gcc.gnu.org References: <20221207205734.9287-1-david.faust@oracle.com> <20221207205734.9287-3-david.faust@oracle.com> <32ac835c-6609-03fc-4dae-9cc4d1977a86@oracle.com> <941d3084-19e3-6b98-e09f-dc9bd6e8c05e@oracle.com> From: Indu Bhagat In-Reply-To: <941d3084-19e3-6b98-e09f-dc9bd6e8c05e@oracle.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: MW4P223CA0006.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::11) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|BN0PR10MB4918:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a1e4fa2-58ec-4437-6710-08dadcd0dba1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: q/QXaPsh3yszlZAG01MbyzJEgZUjXL6agMrkhV2uPjK4XnPLFc8VxklZfgVldig5YtsPUmy/IgX/ytYz1ex2jxARNELPjSN0/2L2wfmEiVrtPIfv+k9ntZ1pmuteLV5Fxm6MwhPvW/Z2ngjm8TUChX2w9Kp7oJuXB8wMgjW/v2ouPiS4BRF0/KbYAkZGPIatOXoXiMnbLSWz5sTuxIfcZ+zoQ9voFPcU9rOxRNW8uWHTVvxhCgvRez8fV2uV2hatkT4cDTXE4GEYZTCKlMAXzRXq97S/uAVGBTvUww6lvIxY/PzYth/CThIF9tM0GlS5uqHXM1oGvw2A55R4YMdVKm5UbVcyazi2A1CEv/Z1MdEaSo2FtoxImiprjdzwV+mpJHzcafTCFULF3fYqvD32LhDR3+oXRt+198jbBhzPMIQYA3TMbzycG7NtwZGkbIFPoNO60lJWDrphPwl2rsValfFSppc3s+mDUH2euYJsF+YuOk/dzuk9VZ4E58DEWoM0HuJgqYJcYXnSWKoxAM4eCz4JRNByGYK4MZNdWhD8p9fD640n8GfrprLvp0SRM2VYeAPwI1xGEQImxemjrdLqnVMm97LGdSq0VExm3j6Ii85TccHo+mn62hBz1uj+N9VC0+Om7sZpRwdSEEGtLNcw1DS4Mbmc8o5qKspdOeCY1Qns5mcM0SGurmj4OfhY+q4U9/HkI/Un0ABt8jTAoZfGe2pkeeWAQ8Glttq6gHfa7H/7oi5i4ulNLtQ4GOFYXViW X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR1001MB2158.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(346002)(39860400002)(136003)(366004)(396003)(376002)(451199015)(6862004)(8936002)(84970400001)(4326008)(41300700001)(5660300002)(44832011)(66556008)(8676002)(66946007)(66476007)(31686004)(478600001)(36756003)(6636002)(316002)(2906002)(37006003)(6486002)(186003)(31696002)(86362001)(6512007)(6666004)(2616005)(53546011)(6506007)(83380400001)(38100700002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bWxzL3ZjL0pMc1llZm8xczUwN2xJb01sVlVRWGxwYTJvSFdXM0xMdUUxcFVQ?= =?utf-8?B?eGxPaVlZNk41VGJDS3ZWVEVDVGZ6ZG1XV21qRWdHU0wvOUhkZVFMd3NsRUxX?= =?utf-8?B?bmNQWFBmK3hOTm81cjdKUzdWbE9CRVMzb1VHYUZTRXBublM4N211YTdrMHkr?= =?utf-8?B?bHo2V0c2VlVaelBUNlNDOXRNY0ZiYTRvU0s5R08xNUk3YnZTaG9VNnMwdnBI?= =?utf-8?B?VzB6WHpIZ1RVSFlmaER6dzNDZnJQQXNKMy8xVWd5aXhvV3QrRCswbXhiRGtx?= =?utf-8?B?T2dFU0JmbEhseE85WWFtd2RyYnlNczVzUmlTTE8wd1hBUTM4Z29YQ01kdlR2?= =?utf-8?B?OU00WTd5MFFoMkpMa2NpTVNIbEE0SndWYktvcHVHaUZWaU1zTmJ6a2QrWkVY?= =?utf-8?B?OWxMTDBrYVRFaG0xdXpxVWNFakdjOVB3MUJ5aGpoV0RHSXN6aXhYUVN1eFlR?= =?utf-8?B?QklRV2xzd0o2UTc3RnJadEp4emppc0VMc2lLL2FnUDlvNlZXWnJzL0ZvMVpR?= =?utf-8?B?VFgrU0RONWxEUzVkc2lUR0NZbE5JSlRhcEc0Q3VJRjN2S081THBSWXNwREJr?= =?utf-8?B?Wmh2RTZNeklRVWZxOHlYclhGMkhLN3ZsTmFtM0NsTTdQNlVpUytvTC96YjZ1?= =?utf-8?B?ZmwxZEdrMlNEN2NTcmJSdzBDWndHMWtOdmNmT2hyYWRBOHYxRkxQd0NIajdV?= =?utf-8?B?dHFoK3RmNjFDZEtBeFlTVFc2ZmtJOFFIeEc2M3NhRkNGd3EzcXVzcUIxOVY5?= =?utf-8?B?anhSei9oVWdIZmZlZXAzT2VtZVUxWm56RzMwV0JsN1JvdFA1M2w1b1ZQcWtV?= =?utf-8?B?cWRnd2krMzJXaDlZQVFPdmQ1WUYvQzdyN3RmcU9VQVdob0NpM200ai81eTdL?= =?utf-8?B?OFRSVklydHB4Ly9Kdy9JVnAwd0RlS0JXOWJzY1J4d1RoaUQxc2JnQis2b01t?= =?utf-8?B?Y2o0ZjhWUysvQ1hIaVhjNXN5Zm1mcnppcDlKL0pOUFpVcUdSaWV5dUpzbnBU?= =?utf-8?B?UktQUUd0VUVvSFNZMnlQUk5UU3dyYnZhMmVBYkdINEJ6dEdqYXg2TVBaY2xa?= =?utf-8?B?OXp2RHNCcVY4M2JubkZFL2Q4Qnc5dWV2dWNTOFNobVBFMWFDZzJIZGl5NVVm?= =?utf-8?B?UnVyVkJ3VVFwWkprSGI0M1VTK0dpQ1pobHdUZUdtRUFseUFPR29abHR3TVlt?= =?utf-8?B?OUlsQzRLZlBlaEtmY2szeHJWbGlLOE5oVnVBOVFweStsQk5DMkVreXZOYS9m?= =?utf-8?B?RHlSWkVhREhVYVpOZllnVW1DZ0p3bUMzbVlmbml3VmhSZ1d4dXgwcC8rK1A3?= =?utf-8?B?bVg2Y3RjdWNRS2xCd2NraGhtakVXZFhBdVBRZnp3Qm02NUt2ZXMvQis3Wm0y?= =?utf-8?B?RFhUUzJoZ0pzaWlLQjh3NUNydWpyc205bUo1SldKSVkzcGRQTGhIVU5hcTRm?= =?utf-8?B?Rnk4L3JRVTdESGp3NUJPL21TNzdnZ0t0RWt6WmQzYlZ0elhCazVVWWxEc0lU?= =?utf-8?B?anR2RzFtRk5sVkZaUDNKREZoNWFkVngzZUI1QUhjWmV1b1l3VnovNkhnN2Z1?= =?utf-8?B?Y2txaU16YTlEcENyL21WV0FmVnN5bkFla25pZm5aaDZIQ0xlNWQ4T21id2pi?= =?utf-8?B?QXZOYjJOSHJIU1c2WmZTN0lHRjBHTXZDaFRWQ3hFUDFKbWpwZy9jeUZrWGF2?= =?utf-8?B?UFkyeWl4ZGFsa1VCczV1WUFaNzBCS2dpZ0hTRzA5bnJKTE9QbnNuQnJ4Q3g0?= =?utf-8?B?eFBrTjhJK3BES2d1MVM4SFM4ZmRXRG53eXYvTHUra0RjcXBLYlY1dFM4ZEIv?= =?utf-8?B?Q0tJZUhSc3BNMldoSWMxUkJjR0p4NkRDRzRQbTNjTmV3N3VVR2dJdTVMYXRQ?= =?utf-8?B?Zko1SVhqRDRtb1BBYTk3S3pEeGhUc25jeEp4M2ttWlVNVHNEeHdVdENxUzhm?= =?utf-8?B?OTBvdC9JT0dJNUgxTUM5UXlvZTdTVjFYcFpVeHNtVDlBNXo5emQxcFIyb2h1?= =?utf-8?B?UDNiQW95ZThZaXhFbTRqcTl6R0dFTHdjcjJrZnV2M2hKT2wwOWFUNmVxUFB0?= =?utf-8?B?R2liaDdvei9mMUE5Z1dpczIzbHd3ZlZaY2Jvd1UvQkNNL2xNWXlDRy9FbFJF?= =?utf-8?B?eDFWemdhd20xYmU4RDJaMVJrTmtyeEtMc1FlSllnN0krd25wQzJMQVBLQjZJ?= =?utf-8?B?NlE9PQ==?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4a1e4fa2-58ec-4437-6710-08dadcd0dba1 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2022 06:11:22.4630 (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: 3CY8h1Q4p+GgdZHQV7ZuFaN+hTd0lbdEJqI0Cfa6aw8Co8vdNmrZlVAXbg/SXzqA/MVNomo9zStcUc+nk2+s4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN0PR10MB4918 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.923,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-12-13_02,2022-12-12_02,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2212130056 X-Proofpoint-GUID: 4GwMU-oRAR8rx967Io7i7BZhBvYSltDZ X-Proofpoint-ORIG-GUID: 4GwMU-oRAR8rx967Io7i7BZhBvYSltDZ X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,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 List-Id: On 12/12/22 12:59, David Faust wrote: > > > On 12/8/22 23:34, Indu Bhagat wrote: >> Looks OK to me overall. Minor comments below. >> >> Thanks >> >> On 12/7/22 12:57, David Faust wrote: >>> The eBPF loader expects to find BTF_KIND_VAR records for references to >>> extern const void symbols. We were mistakenly identifing these as >>> unsupported types, and as a result skipping emitting VAR records for >>> them. >>> >>> In addition, the internal DWARF representation from which BTF is >>> produced does not generate 'const' modifier DIEs for the void type, >>> which meant in BTF the 'const' qualifier was dropped for 'extern const >>> void' variables. This patch also adds support for generating a const >>> void type in BTF to correct emission for these variables. >>> >>> PR target/106773 >>> >>> gcc/ >>> >>> * btfout.cc (btf_collect_datasec): Correct size of void entries. >>> (btf_dvd_emit_preprocess_cb): Do not skip emitting variables which >>> refer to void types. >>> (btf_init_postprocess): Create 'const void' type record if needed and >>> adjust variables to refer to it as appropriate. >>> >>> gcc/testsuite/ >>> >>> * gcc.dg/debug/btf/btf-pr106773.c: New test. >>> --- >>> gcc/btfout.cc | 44 +++++++++++++++++-- >>> gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c | 25 +++++++++++ >>> 2 files changed, 65 insertions(+), 4 deletions(-) >>> create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c >>> >>> diff --git a/gcc/btfout.cc b/gcc/btfout.cc >>> index a1c6266a7db..05f3a3f9b6e 100644 >>> --- a/gcc/btfout.cc >>> +++ b/gcc/btfout.cc >>> @@ -354,6 +354,8 @@ btf_collect_datasec (ctf_container_ref ctfc) >>> tree size = DECL_SIZE_UNIT (node->decl); >>> if (tree_fits_uhwi_p (size)) >>> info.size = tree_to_uhwi (size); >>> + else if (VOID_TYPE_P (TREE_TYPE (node->decl))) >>> + info.size = 1; >>> >>> /* Offset is left as 0 at compile time, to be filled in by loaders such >>> as libbpf. */ >>> @@ -439,7 +441,7 @@ btf_dvd_emit_preprocess_cb (ctf_dvdef_ref *slot, ctf_container_ref arg_ctfc) >>> ctf_dvdef_ref var = (ctf_dvdef_ref) * slot; >>> >>> /* Do not add variables which refer to unsupported types. */ >>> - if (btf_removed_type_p (var->dvd_type)) >>> + if (!voids.contains (var->dvd_type) && btf_removed_type_p (var->dvd_type)) >>> return 1; >>> >>> arg_ctfc->ctfc_vars_list[num_vars_added] = var; >>> @@ -1073,15 +1075,49 @@ btf_init_postprocess (void) >>> { >>> ctf_container_ref tu_ctfc = ctf_get_tu_ctfc (); >>> >>> - size_t i; >>> - size_t num_ctf_types = tu_ctfc->ctfc_types->elements (); >>> - >>> holes.create (0); >>> voids.create (0); >>> >>> num_types_added = 0; >>> num_types_created = 0; >>> >>> + /* Workaround for 'const void' variables. These variables are sometimes used >>> + in eBPF programs to address kernel symbols. DWARF does not generate const >>> + qualifier on void type, so we would incorrectly emit these variables >>> + without the const qualifier. >>> + Unfortunately we need the TREE node to know it was const, and we need >>> + to create the const modifier type (if needed) now, before making the types >>> + list. So we can't avoid iterating with FOR_EACH_VARIABLE here, and then >>> + again when creating the DATASEC entries. */ >> >> "Dot, space, space, new sentence." in 3 places. >> >> >>> + ctf_id_t constvoid_id = CTF_NULL_TYPEID; >>> + varpool_node *var; >>> + FOR_EACH_VARIABLE (var) >>> + { >>> + if (!var->decl) >>> + continue; >>> + >>> + tree type = TREE_TYPE (var->decl); >>> + if (type && VOID_TYPE_P (type) && TYPE_READONLY (type)) >>> + { >>> + dw_die_ref die = lookup_decl_die (var->decl); >>> + if (die == NULL) >>> + continue; >>> + >>> + ctf_dvdef_ref dvd = ctf_dvd_lookup (tu_ctfc, die); >>> + if (dvd == NULL) >>> + continue; >>> + >>> + /* Create the 'const' modifier type for void. */ >>> + if (constvoid_id == CTF_NULL_TYPEID) >>> + constvoid_id = ctf_add_reftype (tu_ctfc, CTF_ADD_ROOT, >>> + dvd->dvd_type, CTF_K_CONST, NULL); >> >> No de-duplication of the const void type. I assume libbpf will take >> care of this eventually. > > Hm, not sure I follow. Where is the duplication? The const void type is > only created once here, for the first such variable which needs it, and > reused for subsequent variables. And it does not already exist in the > CTF which we are translating into BTF. > You're right - you are reusing the const void type once generated for a CU for each usage. My bad - I didnt follow the code properly :) > In any case, yes libbpf can handle duplicated types. Though it would > still be good to minimize that where we can to not bloat the BTF info. > >> >>> + dvd->dvd_type = constvoid_id; >>> + } >>> + } >>> + >>> + size_t i; >>> + size_t num_ctf_types = tu_ctfc->ctfc_types->elements (); >>> + >>> if (num_ctf_types) >>> { >>> init_btf_id_map (num_ctf_types + 1); >>> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c >>> new file mode 100644 >>> index 00000000000..f90fa773a4b >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c >>> @@ -0,0 +1,25 @@ >>> +/* Test BTF generation for extern const void symbols. >>> + BTF_KIND_VAR records should be emitted for such symbols if they are used, >>> + as well as a corresponding entry in the appropriate DATASEC record. */ >>> + >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O0 -gbtf -dA" } */ >>> + >>> +/* Expect 1 variable record only for foo, with 'extern' (2) linkage. */ >>> +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 1 } } */ >>> +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*btv_linkage" 1 } } */ >>> + >>> +/* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ >>> + >>> +/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 1 } } */ >>> +/* { dg-final { scan-assembler-times "1\[\t \]+\[^\n\]*bts_size" 1 } } */ >>> + >>> +extern const void foo __attribute__((weak)) __attribute__((section (".ksyms"))); >>> +extern const void bar __attribute__((weak)) __attribute__((section (".ksyms"))); >>> + >>> +unsigned long func () { >>> + unsigned long x = (unsigned long) &foo; >>> + >>> + return x; >>> +} >>> + >>