From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 48603385773F for ; Tue, 19 Dec 2023 17:30:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 48603385773F Authentication-Results: sourceware.org; dmarc=pass (p=none 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 48603385773F Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1703007008; cv=pass; b=eqCYrpnf9f5LQKb4K2TTYzDQg8BAIcwEmNarMb6R/tYK/S87LGjq3Pg+0q66Qm4RcYjt8UsPRLsbZnCTkQTq9LIujrfGn7ed3a+0fbWUAb2Ux/iMbmVHkucn0crZbznOQ8JjOaoFP6e9xsTLfILJ9KElAiKhHBNTurzarnwSRwY= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1703007008; c=relaxed/simple; bh=qBoZVJpCIfQ0hxRbvwhdTmLXkUcHgbIbUrZ9I90uJVA=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:Subject:To:From: MIME-Version; b=VPBT8rXQLHbHcG0ud6kZHq+L2c1a1p7Ju1PIMwRAaQrGrCMofzxK0QQ6lJQCxjQaxHDCNf4nizEeVHZxiVuJn6YnT89Qe9o+v6AWzrdkKQQzASYZFnWbsVTrUXpyLHjoCPnkdx0wHeIBUFAF785jvs5jSVqkodo1WDt5Id3qG1A= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3BJGuRRB019466 for ; Tue, 19 Dec 2023 17:30:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=message-id : date : subject : to : references : from : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2023-11-20; bh=IkcZYYrTZxqxiZOLVvoRLVOcBLT131hwT+IC3XMXs8o=; b=g3p9LLYAjpjQ20iYA7J3YeFFPBtfddo5/o2cC4oS1EuUtliv5yM1jcpY/al0EG9I5Yul OIDVpKdfOHjIPy0UYlQ7WEfu044lf3kXykPVgcp59JEGpaGly5O5gYOlMOvAR2oEku0E 0dS3Zw9GLmEbRYO0wp5Gt3FyqrHvuYenDi9d4e/zJo9eUXSyPpp4l16aoQa0QG4npItK bgV7uwlIGYP+RA25AlZHYp8NwjmRLANV5MI4Xkl761nXpsCnAVExVVKyi2axV9CUb3gE Vgp6VJRcfHAGJMVNTBniukH64R6XSLLl6BIiMKEZKQ+ixyhqbvxcX4mt1U5BOCqst+1w 1Q== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3v14evee8v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 19 Dec 2023 17:30:04 +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 3BJGGx53031121 for ; Tue, 19 Dec 2023 17:30:03 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2168.outbound.protection.outlook.com [104.47.56.168]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3v12bd7muv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 19 Dec 2023 17:30:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oEM7KVOIPk7gMvkPNdkW0nao/2Wa1oKne+Wv5lsQtwzZP+5pNC/0oZBEtxO25X4mObZIooL0KIHOoxbCIroGQLHbH10/TselqYcxctJW+a1WHZ1e+L/TmNC38+sbo2KeX8w0FZDiVd3uG0lo8gUSnY3IZiQKw+/hOFB+y8Z4m9p+gXbcgsLr07RVW2XUyiN+8mmx7AirzdAEoIpTxWFm+GYRyq3+iO2R1t4cn+W103QpnbmDmW1AxOjnzQs3TqeyWHJk8Q2wiJVdkL6VlZf4BER9Jpc5WR1K+jDWbYZrOAx4hA75F9PMfx7tph9Hvbsq91RHkLkw2cZbMrQWZLvJTQ== 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=IkcZYYrTZxqxiZOLVvoRLVOcBLT131hwT+IC3XMXs8o=; b=GnS97r77JBs4fyRymVMYRPdHEhXJIyR5oL9UY1zN5cHB/bd/rQnzfrGuhfVI+EjGnc8QNccQt9dws/6x9u/nI3nAFQ+PrmVjBHTPYc32yqap7NvHkQ2M7cRKrqof30MUkoFC5n635SpJ4FrFUiTmvF6EMBSH1fv6vBf9MGvv8fm0kPrzoj+fn8xhQFixEaDaC8QHCa+0LhxDfJnmMMVB4XfhjUnc+MUfFw+fdLfU/IunqWQLh76EikURnkE19eDjfbwMv/h6dhgLZJUiV/NZRYTaVh6cVvGaJs7UtZzd6Wj3xs5JPX+UyzZBmXdChLGdBCDnG+dWhwYzkhhaiYkmVw== 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=IkcZYYrTZxqxiZOLVvoRLVOcBLT131hwT+IC3XMXs8o=; b=K2z49rYV1hRrlTyN3J1hcIn3KgT+2AVGBwswt88SSU5mE1rur/O/h3aUKEIKFplqb7U9VSyH9SqATFF8iFkAQbIkV+J65u1psjj1muV6kjrj3Frhswc8hzhlhUpJ7YDweW7x8DA2KwA7CJIt1s8Ho7+mj+LAAihTtZ33eB47Mrg= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by DS7PR10MB5199.namprd10.prod.outlook.com (2603:10b6:5:3aa::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.38; Tue, 19 Dec 2023 17:30:00 +0000 Received: from MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::88e2:4a2e:3111:e04]) by MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::88e2:4a2e:3111:e04%7]) with mapi id 15.20.7091.034; Tue, 19 Dec 2023 17:29:58 +0000 Message-ID: <38ea7627-0c89-4231-9391-4c1f069da446@oracle.com> Date: Tue, 19 Dec 2023 09:29:57 -0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] btf: change encoding of forward-declared enums [PR111735] Content-Language: en-US To: David Faust , gcc-patches@gcc.gnu.org References: <20231212223511.15390-1-david.faust@oracle.com> From: Indu Bhagat In-Reply-To: <20231212223511.15390-1-david.faust@oracle.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: MW4PR04CA0247.namprd04.prod.outlook.com (2603:10b6:303:88::12) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|DS7PR10MB5199:EE_ X-MS-Office365-Filtering-Correlation-Id: 9fb7f0b1-2198-4b16-3f19-08dc00b81fc8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PASw0Xhw2e+AtKgioQWDBmhyTkrwelJ/V0SI3KmjRZv098ysqy3dS29Vee3cEyApOBng4p02NuT848MW1bzLLtOzus2Efv5b54+X6kQtMnxey2Ji6mTUP561VyGPAq9zjs57AR3x725BUQx/VfZuG3NcSWxKHL/FJv5XlYkpcRT7exBcCAm/agXofY6hHq/bi4sp32su75pQx6hNNobUFpQnWBydcVGwMkMgjxg33QvUflSOifViQD9uYPCfNUu4BGFEDy+VlECeYlbEmtrstkcA7wI+2v66J4e5rO65JxDGMz4/QispuVsvIIB2/R65vzEFVXSl7qyUdaptul/k7WvU0wO9EiuU9N3qgib+/9jgI82X6u9mVZoJ8/qcmEG4mGHhXlv27pxRt1ft+HAid4XTXK0z3rKEsziwnXZV2Ls0rmWiD8m4dg+fjW5+1iFBA1smgUrNyff6rg5yMvbQFioxBfGwy93ZGLmZ6jpGf3Sv2ItN/+biu04wk8ebmT8+VaNO/fOhB0TsktvTnp+k0eqxR1Ybv7nkTI0f2MI+JV3juzTgf1oIaJ40x60z0HpZGhq0uaFIOSIVgSMG64fMRnA8eMycRjn15bU4ok7ZioWzb6qG+CCi8GnN0BhRG35c 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:(13230031)(366004)(39860400002)(136003)(396003)(376002)(346002)(230922051799003)(451199024)(1800799012)(186009)(64100799003)(8936002)(8676002)(36756003)(38100700002)(31696002)(86362001)(41300700001)(2906002)(44832011)(5660300002)(478600001)(6486002)(6506007)(2616005)(84970400001)(31686004)(53546011)(316002)(66946007)(66556008)(66476007)(83380400001)(6512007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L1dWRGk2U211dk13OE1kVitiRWZ1ZHgwRU9oYncySnpnYkk5dm53RlZtK29Z?= =?utf-8?B?b3lueGhPUDE2TmQ5Y2Fla2FEVVMzdlo3TEpLSi8ydCtDUUc4ZnlNYWwrRXAx?= =?utf-8?B?VngxTTMxVXNBUmlnV1c3S1prWENqQUpqQ2dQT2EreTdMTTRpVGI0djJKMWNv?= =?utf-8?B?c2pRU2RnYlU2QXluNXR0Y3NFalVCbFRFK0RhdkNWcWkydjdWQlJmNkp4bUVG?= =?utf-8?B?TnJrRC8rMjI3WXRJckxBRXJhekdSeTJ2SytzODRnTUJaV3JnazZvdElWaDha?= =?utf-8?B?dUdzK24za0ViWHNQQ3BhYXhzQ0dSeEQwUXFmUDJUSlEwN0VicXR6SzBwS0tG?= =?utf-8?B?RE9WbWsycXVrNnJweG5qcmdMblMrTlhBWkRrSWxVeStvMmwvVlBGNk80YmNQ?= =?utf-8?B?RnZ4c2ZlSlVMcnlEaEhhTmE2bHh0djN6dlVXeEVIa1pnRzlDYnFJUklobjR3?= =?utf-8?B?V0VLSzg2MjRIeWJBYjZrd3NYQmZaVHplcHJIbFB6bnRPQ2E3czZiZ09iczZV?= =?utf-8?B?VFhiY1oybnVRQm41eEgxRkd2WjVCRlZhbVYvYTBqV0FaR3I3WW02NTg0eXhw?= =?utf-8?B?WDhrc1FoS0tLMEppbFZnR2ZXbk4rbHM2Qy9Vdk5wRDl2bzkzVURPamlKcjJ3?= =?utf-8?B?M3MxcUg1cUR2UDZXVldSdzZJTmVrenJlT0JiNmZFdEROaHNXU3NrVzZ1allR?= =?utf-8?B?cFlEM0ljc0V2QkxzSzdnQ1QxTUlkc3hSWFdhYUh1eVhjZ3NkbXdwOEEzTkhB?= =?utf-8?B?Ymt2TXQybnUvZVlGTi9rTjZqQzlnbU5ET3dIMHN4eGtsMms2SmpUVnhaS1cw?= =?utf-8?B?V1lUMDNVZEk2blo1d2lSMmc5MTJYMm9YM2h5d0V5Q3IvTHltM2FHc3FaRzl6?= =?utf-8?B?VUp3NHBsZDl0aW5memFncllMQUJxRGtXQ3pRSVh3dHh3bkFnTDRPd1BEMElj?= =?utf-8?B?SzJ4VG80MFdzRjNwbm1iVDhTZEh3SW1uYytHMVFpcXptNkZMNEYwcXpMblg1?= =?utf-8?B?L0FiUitPbk83dnJqalR4VXcrVlB1SkpqcEhyRlc2UTZFeDFVYTZFcy9sbitH?= =?utf-8?B?NEhQQ1g5ZjRLWFJ4eUFZTXNSQzFONjVwOXVkNERhYi9JSkhjeDMyTDNJQ01q?= =?utf-8?B?RVhaT3RHQmRUMWduOHBXT3JrODFQWE0rcUNrMjdqOFVGK290R0pKTVF1S3E4?= =?utf-8?B?MEFjOVFvbjBILzNmVEpsbXRBcU53V05QQmhVYjliaEZFR2YycENyQ3lIekRp?= =?utf-8?B?L3pkcmJDTXp3UHVrUjB5OC9wcGxSVlVhZW8wRElnSHRhNHQyQVhMT1gxNGgy?= =?utf-8?B?TTVHR2tPU1RaVy9DTmFoTVJ6QTlsc0JzbXUvVmVUT1pzdkVtbm96QmE0TlU2?= =?utf-8?B?NC9YSDRTZyt1aCtmM2NXNGxqbW0zVG1aU2NncTFsTFhMbVk0dDRKQlIwTXhY?= =?utf-8?B?Syt6Z25rTTFSbG1oUVdQbXNMSWZON0RkUXQxaEhuY1VZdmVkZjhiMkM5aVQr?= =?utf-8?B?UFJtUVp3WWxLek5DamhLTkJKNDRkdGUyM0FjY2wwa2hqbWJUOHQvckFyV2F0?= =?utf-8?B?UTBSVEpRQ2R4cHdNNGFmVjk1R1ZIRnppS2dwU2VOc1REQ2VkYUtxMGlpMldk?= =?utf-8?B?ZVNVZ0hhVGVtd29EN0RLU240bm1POHE2RUhCVGh2Y21BK0s1U0dJNFFoSTJy?= =?utf-8?B?S0xPMG5ueFRqdWRaclhjWWNVVUptUzAxejE3YW9GMXZ0aDNVaHQ4RHNuRURD?= =?utf-8?B?a3IrRWp3dVM4RG0vMnFVQ3lpa0NCYTFMSi91NjdvKzFTdHBSSVJjTk1CWG81?= =?utf-8?B?RnZwS1RZaXkvc2dKMmwvakkvQ3YrVGJjQmtqcnRuR2Y4MElZMHZSVUtFamlQ?= =?utf-8?B?WXpKMUpObmQ0eFZHV3FBRlZFRlVNQytLSGZBbVc0WmxVeTNISGcxd1VUL3ZI?= =?utf-8?B?K1NKbDZNUlBCU0ZTdHBjeitteGRBUm5KT1JTZTJ2b3ZiWXlhWVdhVjZHVkZC?= =?utf-8?B?ZDkxK0g2ZHdvSEJkNHZ1bkRGaFFseHlRellNYURBKytsd05mZU9ka3p6K3RY?= =?utf-8?B?MkFRa3cyS1d1VVRNOXFXRlB6OFpIeVdpeDlJdHY4UEE0MlozRkJpcHd1ZTFy?= =?utf-8?B?bVh4UTg2V3pqM1phd1dqaXBGTitXSU56b0lsVnVJRGUvdzluWC9zdXBYMmtY?= =?utf-8?Q?ShrDeCJiRwKFuqGaprYytMU=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 9IuXjwdbB+PsdlU5EXm9FcK/X9P+Eln62bcHXcnHzGT0sxV+xtg3ho71PUR1AO6Q29VnFME90F5V8YJFCiPtS/w2M55Cso/PKoqSqjMeFszPU5ShQjKZBdYgU1gu1wXHj4Hbcx4VeZjJPN5JYFT6ETtwSUCglzXx8bYqxstP08g+Uly7ng8UGHPA5UUozDYkAwPizi6TCVHN56p7DCVj21SK3LkIkhFqOqZs9HuBuefrFBkzonIwhNBuERtEpOp/Xan9e3+9aWtqECGFd71d2InCTwJbL/Bya8ix92htW1zGuDHpumw+lhKzfxII5BtoWresYwBvfgqeFLHGj/REm8tKYBTfAdajH9BSfePKg1P2Z9bintbRBsdtoj68kKwFHUU5l2HMmSqeltBrGVDEyilryVY8Y5oqwCEut6vr+6TVb7MgkEKTf+YdlkDj+VEc4r7JxDJUTnmmTsxiRfA0gdtRNgWOXnKMj9K6QgczzkIDsj2EyQ2DQfv6/beRvAf9KKaDDPO8N17WwungsSQWxEVl1nM0rMNXWAELsCeV+nm4BG2syL7zfBh54zlYkCPLvYj34JpMsX+KtM74dqvOlMjuxMA14uLklqr+qoLMQTw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9fb7f0b1-2198-4b16-3f19-08dc00b81fc8 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2023 17:29:58.8770 (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: xYq0yAIFjMK1mKuPtSAuQGCXy5i4AsoCshPUssXMCMHmsMq5aEpqPIqDZwBGAIZKWG6CQYA2Mip56XNRilDV0Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR10MB5199 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-12-19_10,2023-12-14_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 mlxscore=0 adultscore=0 suspectscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2312190131 X-Proofpoint-ORIG-GUID: UsfcJTA_Tf791i8rQNG6_JMfvGO-61De X-Proofpoint-GUID: UsfcJTA_Tf791i8rQNG6_JMfvGO-61De X-Spam-Status: No, score=-13.2 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_H5,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: On 12/12/23 14:35, David Faust wrote: > The BTF specification does not formally define a representation for > forward-declared enum types such as: > > enum Foo; > > Forward-declarations for struct and union types are represented by > BTF_KIND_FWD, which has a 1-bit flag distinguishing the two. > > The de-facto standard format used by other tools like clang and pahole > is to represent forward-declared enums as BTF_KIND_ENUM with vlen=0, > i.e. as a regular enum type with no enumerators. This patch changes > GCC to adopt that format, and makes a couple of minor cleanups in > btf_asm_type (). > > Bootstrapped and tested on x86_64-linux-gnu. > Also tested on x86_64-linux-gnu host for bpf-unknown-none target. > LGTM. Thanks > gcc/ > > PR debug/111735 > * btfout.cc (btf_fwd_to_enum_p): New. > (btf_asm_type_ref): Special case references to enum forwards. > (btf_asm_type): Special case enum forwards. Rename btf_size_type to > btf_size, and change chained ifs switching on btf_kind into else ifs. > > gcc/testsuite/ > > PR debug/111735 > * gcc.dg/debug/btf/btf-forward-2.c: New test. > --- > gcc/btfout.cc | 46 ++++++++++++++----- > .../gcc.dg/debug/btf/btf-forward-2.c | 18 ++++++++ > 2 files changed, 53 insertions(+), 11 deletions(-) > create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-forward-2.c > > diff --git a/gcc/btfout.cc b/gcc/btfout.cc > index db4f1084f85..3ec938874b6 100644 > --- a/gcc/btfout.cc > +++ b/gcc/btfout.cc > @@ -268,6 +268,17 @@ btf_emit_id_p (ctf_id_t id) > && (btf_id_map[id] <= BTF_MAX_TYPE)); > } > > +/* Return true if DTD is a forward-declared enum. The BTF representation > + of forward declared enums is not formally defined. */ > + > +static bool > +btf_fwd_to_enum_p (ctf_dtdef_ref dtd) > +{ > + uint32_t btf_kind = get_btf_kind (CTF_V2_INFO_KIND (dtd->dtd_data.ctti_info)); > + > + return (btf_kind == BTF_KIND_FWD && dtd->dtd_data.ctti_type == CTF_K_ENUM); > +} > + > /* Each BTF type can be followed additional, variable-length information > completing the description of the type. Calculate the number of bytes > of variable information required to encode a given type. */ > @@ -753,8 +764,12 @@ btf_asm_type_ref (const char *prefix, ctf_container_ref ctfc, ctf_id_t ref_id) > uint32_t ref_kind > = get_btf_kind (CTF_V2_INFO_KIND (ref_type->dtd_data.ctti_info)); > > + const char *kind_name = btf_fwd_to_enum_p (ref_type) > + ? btf_kind_name (BTF_KIND_ENUM) > + : btf_kind_name (ref_kind); > + > dw2_asm_output_data (4, ref_id, "%s: (BTF_KIND_%s '%s')", > - prefix, btf_kind_name (ref_kind), > + prefix, kind_name, > get_btf_type_name (ref_type)); > } > } > @@ -765,11 +780,11 @@ btf_asm_type_ref (const char *prefix, ctf_container_ref ctfc, ctf_id_t ref_id) > static void > btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) > { > - uint32_t btf_kind, btf_kflag, btf_vlen, btf_size_type; > + uint32_t btf_kind, btf_kflag, btf_vlen, btf_size; > uint32_t ctf_info = dtd->dtd_data.ctti_info; > > btf_kind = get_btf_kind (CTF_V2_INFO_KIND (ctf_info)); > - btf_size_type = dtd->dtd_data.ctti_type; > + btf_size = dtd->dtd_data.ctti_size; > btf_vlen = CTF_V2_INFO_VLEN (ctf_info); > > /* By now any unrepresentable types have been removed. */ > @@ -777,7 +792,7 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) > > /* Size 0 integers are redundant definitions of void. None should remain > in the types list by this point. */ > - gcc_assert (btf_kind != BTF_KIND_INT || btf_size_type >= 1); > + gcc_assert (btf_kind != BTF_KIND_INT || btf_size >= 1); > > /* Re-encode the ctti_info to BTF. */ > /* kflag is 1 for structs/unions with a bitfield member. > @@ -810,16 +825,26 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) > structs and forwards to unions. The dwarf2ctf conversion process stores > the kind of the forward in ctti_type, but for BTF this must be 0 for > forwards, with only the KIND_FLAG to distinguish. > - At time of writing, BTF forwards to enums are unspecified. */ > - if (btf_kind == BTF_KIND_FWD) > + Forwards to enum types are special-cased below. */ > + else if (btf_kind == BTF_KIND_FWD) > { > if (dtd->dtd_data.ctti_type == CTF_K_UNION) > btf_kflag = 1; > > - btf_size_type = 0; > + /* PR debug/111735. Encode foward-declared enums as BTF_KIND_ENUM > + with vlen=0. A representation for these is not formally defined; > + this is the de-facto standard used by other tools like clang > + and pahole. */ > + else if (dtd->dtd_data.ctti_type == CTF_K_ENUM) > + { > + btf_kind = BTF_KIND_ENUM; > + btf_vlen = 0; > + } > + > + btf_size = 0; > } > > - if (btf_kind == BTF_KIND_ENUM) > + else if (btf_kind == BTF_KIND_ENUM) > { > btf_kflag = dtd->dtd_enum_unsigned > ? BTF_KF_ENUM_UNSIGNED > @@ -829,7 +854,7 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) > } > > /* PR debug/112656. BTF_KIND_FUNC_PROTO is always anonymous. */ > - if (btf_kind == BTF_KIND_FUNC_PROTO) > + else if (btf_kind == BTF_KIND_FUNC_PROTO) > dtd->dtd_data.ctti_name = 0; > > dw2_asm_output_data (4, dtd->dtd_data.ctti_name, > @@ -848,8 +873,7 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) > case BTF_KIND_ENUM: > case BTF_KIND_DATASEC: > case BTF_KIND_ENUM64: > - dw2_asm_output_data (4, dtd->dtd_data.ctti_size, "btt_size: %uB", > - dtd->dtd_data.ctti_size); > + dw2_asm_output_data (4, btf_size, "btt_size: %uB", btf_size); > return; > case BTF_KIND_ARRAY: > case BTF_KIND_FWD: > diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-forward-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-forward-2.c > new file mode 100644 > index 00000000000..318c4220ec3 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-forward-2.c > @@ -0,0 +1,18 @@ > +/* PR111735. Test BTF generation for forward-declared enum. > + > + The BTF representation for forward-declared enums is not formally > + defined, but the de-facto representation used by various tools is > + to encode them as a BTF_KIND_ENUM type with vlen=0 and size=0. */ > + > +/* { dg-do compile } */ > +/* { dg-options "-O0 -gbtf -dA" } */ > + > +enum Foo; > +enum Foo *pfoo; > + > +/* Check that there is one BTF_KIND_ENUM with vlen=0, and no BTF_KIND_FWD. */ > +/* { dg-final { scan-assembler-times "\[\t \]0x6000000\[\t \]+\[^\n\]*btt_info" 1 } } */ > +/* { dg-final { scan-assembler-times "\[\t \]0x7000000\[\t \]+\[^\n\]*btt_info" 0 } } */ > + > +/* Verify the reference to the enum-forward. */ > +/* { dg-final { scan-assembler-times "btt_type: \\(BTF_KIND_ENUM 'Foo'\\)" 1 } } */