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 28F793858C78 for ; Tue, 12 Dec 2023 22:35:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 28F793858C78 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 28F793858C78 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=1702420530; cv=pass; b=oAs9eb5ICj2FIoLX8DoS3OUjVx0LcHu52WtZnYiHOL4RzadzNXO4n+YwAGwNKkZTDonn0TjEhiaifbM4C+w42jaRUvSYZQPyyYl8I1jEnqdDRRZqCkRJsg395NEa470clNRbJJ6ssHlfkBQs4pD745Nb1cYNzo1EHQX/HbCS1ZE= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1702420530; c=relaxed/simple; bh=VHGbDpMBqT762LYApaNCklnzmZ2l/SkvauHGhL8JIAI=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=lLe1VlebdS/GBsHvmQrITe0HaSavR0BNNbhsFSkokzEWrcu2rX3a8Dl+sp16TZKDiAXmavLMvPqu9CYP5GOVdDBakKVx4c1rmiGPDE8tFNNqYSalKwMSTV9gaTjl/1Thj1g2ZFWhr6jDFuTOFBN6uBKM/37qiAAV8ko5+5UEoi8= 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 3BCJeItN009987 for ; Tue, 12 Dec 2023 22:35:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=uMZ6/WNF0lJWk6i2wq0ijdvRnucC6k6cyNnnUrfie4E=; b=fjAWqHu60QB1NVDtG4Zpr8uWdugd5oN9AX/8ycnfTeQEJzpj4r9Fil/y92L465R1x3bL Zd/Qi+L8O5KYtdM2TAgV01zRO0ZC3UT4iz/T4OCJbZLN36u7K/b1UbDwckjBREXZ26G3 XmedftWGT99bDvuihVOOTTEEBVf5Ub1G74QARZUqXn8IIR2AYeFUnGg9XrbifqTJk7b3 U4mI3K0LrLVWyZ0bfDZtGsR+RTMWMoDRo/eijpSOkTkfCxrO4vCG9270r67/1MkR4vMC Qdi6GM9mfnSANDrSV+j2AMV3CNm4Jn9Woqwmw6vuolVWlRugVQX8s5QcI4SE9CgMZ7sY kw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3uvgsuewaa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 12 Dec 2023 22:35:26 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 3BCLaYDF013005 for ; Tue, 12 Dec 2023 22:35:25 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2168.outbound.protection.outlook.com [104.47.57.168]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3uvepdjaa3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 12 Dec 2023 22:35:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T7qm0S1nzZGmrJmgL48GB7tyG5YNgPI4GB47nBTFpWvsdwj3CkOFBKvOHK1Bo4qCmaPly5UhRpfjYWYEbU5F2IAqYphzcemCtY7BYlFOO3VEa/bAU5I65F0FZuKiQ3zI5Riyycg6vjgcLKQeITW9mp9wAyRKLe5t5VE5YSzR9Jr0XhRec7k8ytlzGlHZ/zFGtfoGbrQQen+RjX25Z8dyjzS+qg2JUGlEDlZj7XDbbf8R3FS01ayr8Ft0+0Dm95yqPG46jnHPkA0GqBQoPnDF6Lbd3GhcRfmxe+s+OSM1yJGh+K4+pD1sDdwt5hPLKIVMwedO9CdqLOEZcL/SuHHz9A== 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=uMZ6/WNF0lJWk6i2wq0ijdvRnucC6k6cyNnnUrfie4E=; b=aft+OHKTLVVOGgf+//cBFhQBxlfUxCCZx/V+8EiQ8Sih94Yg0TIrjGVbztdMlMYWab5/5hb7hppLgvrNxJscfPT2Mse4qeJafhClKozn3ZFponozvwJJXvlSJjEzrdGpRubNOB/qAqKzrG0/QT/0IVMzuTh9pBfsPCzDvTTx082wSgn2glpUiNTJD+FhG548LFawzGMBBcYJvek/uBOKKBXR2unwfcWTonDiuGN0lETHzBk1oUEJs6fCRP4xFQQbOHNjlfvHV4G3yM1n9RrYHaSUa1qA8MBX2/AYel5vNOt4LYoKIfSE3NXH7LEFp4E0cf4EsF/d1caFbsjO8IoxwA== 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=uMZ6/WNF0lJWk6i2wq0ijdvRnucC6k6cyNnnUrfie4E=; b=LZPBWbdD4XJO564kPkKn9UamizUVxYVkutOap7dNz10PBiO7zcZO55OdHNIMkcjUaBCbB6EJBcqsnTAK9zta4DtJUi+dpx/y90gT3ZZ4yz+CVby2elvrIOEZXSeNunqmWK9lEBBHxWLtvXnxQAT6fmrpdHy8hG+K+wk8XWHcw/E= Received: from BYAPR10MB3206.namprd10.prod.outlook.com (2603:10b6:a03:155::20) by DS0PR10MB6174.namprd10.prod.outlook.com (2603:10b6:8:c2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.33; Tue, 12 Dec 2023 22:35:23 +0000 Received: from BYAPR10MB3206.namprd10.prod.outlook.com ([fe80::9405:9b28:132f:117e]) by BYAPR10MB3206.namprd10.prod.outlook.com ([fe80::9405:9b28:132f:117e%2]) with mapi id 15.20.7068.033; Tue, 12 Dec 2023 22:35:23 +0000 From: David Faust To: gcc-patches@gcc.gnu.org Cc: indu.bhagat@oracle.com Subject: [PATCH] btf: change encoding of forward-declared enums [PR111735] Date: Tue, 12 Dec 2023 14:35:11 -0800 Message-ID: <20231212223511.15390-1-david.faust@oracle.com> X-Mailer: git-send-email 2.41.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SJ0PR13CA0022.namprd13.prod.outlook.com (2603:10b6:a03:2c0::27) To BYAPR10MB3206.namprd10.prod.outlook.com (2603:10b6:a03:155::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB3206:EE_|DS0PR10MB6174:EE_ X-MS-Office365-Filtering-Correlation-Id: bb2d0a1b-b7a5-4e87-df49-08dbfb62a0e2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: E5P45LnXw/yzbW/S2z4udeqbxrfzAoM8IU6GyBqIvreWN3BTBm2YL48EXH0CloVKz4sC8M7D222WVPyxcGX+12sps8sfKcheUdsFpUXiuowlXuKSIkcfe0iOE35jCroZXSqTNfU46vgKsQ85XSqzNfI8FKAPWny7RJyFbYgswU2/+ahQvG8XXeEGbqY9N0GXwpgpK415e4L2VpFdefXl520Hv9at1y8eLeRZPjEZJrgqDay3LRYBAXOAA0NVgK3fcZd21VImJIOUmZg1iB7ENkW7RWPZlFNe6Y2nhTPM+LebcvoeC3WqvnBQ1mNvL+sYPL2NkT1E3m2Jsk3eIy7s2LXjPlFIO7gWJn2J+6jUdJ+iayWs6Yq5wjzIEJ6lJI1tgwkHX/5CpDimRLqYhGnksGTsG9j2qUNszNH3ZByyYTlVvSqqiahd7WD3rvQZK9Abk4fakJ79nQ1u2LhKaYSxGEHUsjctQNtCymV1tQxkdLKaJ/bq0JRKbZPUbZW37mpwRZsW2W+0TA628WPGXoDTTWSgszZGs2R2w9su/lRRsAM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB3206.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(136003)(346002)(376002)(366004)(396003)(230922051799003)(451199024)(1800799012)(64100799003)(186009)(6512007)(6506007)(5660300002)(26005)(2616005)(107886003)(44832011)(1076003)(36756003)(6916009)(66946007)(66476007)(66556008)(6486002)(84970400001)(2906002)(83380400001)(86362001)(478600001)(41300700001)(8936002)(8676002)(4326008)(316002)(38100700002)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?LhN7ZAIZQMtmZCXpxKGtenPZZk3opyTEFq08IR4PrfzaEh5XmtzsJfWtMCNj?= =?us-ascii?Q?Q5qsTQ4IcVjLySBmdvfswIz1FpLfYvGTimjI5dvroo4JIP8k0DeEYzh4Lc0p?= =?us-ascii?Q?WKqr7jg8Zf/9WJAf1ZUAM9sWiQRAVVxZpjmAp46VFzZ+rkFP6FbcCqFoFO4v?= =?us-ascii?Q?icyadfLa92LUrw2gFdJWo3avgWv5vxiDS1eO866xHDSVWsVshaTc4Bzd3K3I?= =?us-ascii?Q?2Ef3NVi4oRSiN7U53n+wWOvWoxADPlPOxz93pFKE0J6GvG7ZLKqvL1lOMRX8?= =?us-ascii?Q?Mc0agCbwF0TxQYFC9aC0gIFItugTQBOwsHTekUR9DgR1k/J2RwtAxJJUbl+H?= =?us-ascii?Q?TeISkLOASnVknmf/1Ye0LPXuMHRuuH73wRTFF7p64iWb5siJsLUs0PGADXyL?= =?us-ascii?Q?4VFROuYcW1k/mHEVV6ZhZhCHfDaO7W4k44Z+/kOmEPyxV2oHKZyqq6/1YLW/?= =?us-ascii?Q?ozuONalDx1N5NA7w8mQk/MQcPxHc0Xe4BXyNlsi2STwKNTl+W8usDJxwMXOW?= =?us-ascii?Q?Pr0bmB14EiMTzAe7L0viqmdMaQmuH3FZJJN25OCOCshni1ffYYN1h2m8z0pA?= =?us-ascii?Q?u4yG4fKPA+FedLk5MZx95tHHcvNYFKynPafqlyvmK7i3JWfbOCXVBjsrtYxb?= =?us-ascii?Q?wldd2vwVGXeR3ACkhGXjFsrNg71AjIluCaWezaleOj60fSBvzxObb9UuYCnP?= =?us-ascii?Q?1+MoXo3pc29nFyK+qeNXvtyAitgRoyRCVXgmDoVHBzhtAhbBRzLCL0gLg1YC?= =?us-ascii?Q?k2K/NI2lSfpqrvStoJdoCIaWn6fVucZJ2A4/WKWpgMiiK1N/JC1YxawrPZ4F?= =?us-ascii?Q?mlG1d5p/hR7a0tJcKYowJCVeQqhTFU24kCpLJ9sRP4Rq9g3tsb7NzRtysHOC?= =?us-ascii?Q?0wArAmYsl2A5xzuDuwLz2BaHoWIVKeLTrY27uzJJdCZXLieitPsmdOVY8JGT?= =?us-ascii?Q?bp6nBKwWHMx8GxsRFJAO3PCMAB8aNlsolSKetjIx4wcESGbAQHMb2zJa80Pq?= =?us-ascii?Q?MEIJ9cElCzpPrN6mXUj/WIFSLvLYwGAiDLpwtj3WtQvp9W117MdBeDUd4kkl?= =?us-ascii?Q?TCGB5ClQc6/5HD7HHrPKzUQNRc88yHeMKzy08Hx3yOCKzxHtRW0A8UJxw61L?= =?us-ascii?Q?UtYYFNFFpbf39eKCFf6iNBlDZoP2iCOuu+j4qXXHp3XRBhn6aN85nfeyAobi?= =?us-ascii?Q?VWilt5dpfp+ZuB5OCLRqXCdzsrfF+NJqkNZZdxqQwx8TbyW0u7zeFjuHjBUa?= =?us-ascii?Q?r6w1oB93ZgU6WiQyo6RkF2xVhOkLlLWulBFjTc1zDKmFYLbAbGpvXUUYwWP+?= =?us-ascii?Q?UPg8jm+IAwtDgfu8+ddFv69wlxkAbx/fM9q+rdH/pbTvmsTpfXpoWCxmUdwU?= =?us-ascii?Q?1ug49a2mzxTPS5R3iaDC/CcSZJoZ4HaiDl8IXLVygUujSdMhy2dJ14Vhkunq?= =?us-ascii?Q?NDQKd0SbZ6i/Mvw7WHJURu9cCu2xAc8hf7WFGdZJdBr/7BfD+m4UH12frHtS?= =?us-ascii?Q?NEl6L98/3Y2GP6yu4+2ehLIqZyvZ9hqn7zgte0AWjuoZiHQNIYkHFirBK1e/?= =?us-ascii?Q?/j5oni7MAckeFHQ1l4MMFOyenxUPNeMmMbtV3r9x?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: AcWnkMZU7I7CwFLjPrOht4g7fXaXmkSVJsPvIHQZnXNUPXaOdWosTD6I5gsgdPQCu1RZ0r6l39opjFhIjWQCal7AOmv85UH4HPkJMsujD+L913eswtxBAiGmrcLQInEOKATPUpoK79RuA4MX4OI1l+dXVQfJBltkYop60qUnRkm9flHCC8LQycFmHX0dnG6W1S8EVVffjSYZI8oXojdTVna75FM225voHL4m2OgFZKUxkcdVzvUdCI4WgxIulQXmdVmCN21PfA/Z5MIjTNWGIDo6VQY3XQkDuPsn2twMoeNuhFiIhPv2JpwVMiPPUiLpR+ZvMXJ8W5PFtx+KKv/TYK+gKXJ5B0lHD3obPEBQErfkDdUNTfmeLqyerYIxoYVx+av4l0GrAL2LVRvi/UkRBYXEq5vyCl5ZdhU+fsv/s/MpMm9z1o/Bv0lkQT0HMNdWPebyrAL0XhQUd85s3dPnLScPY7Ar3ejr+XhhdV7Ibo32ugNygjxJnnehREtdTW6SqsP5D02ZPxiRiBHC9pVfblpA/JownZzrjrVffCDBWVHjhFGWPTU/lYIRM1BMDPvB4cvIBS7VhJQcukFqxza1HZbJK7P4m9/+oR6OIL8MtKg5bwbCLA5Ed4ihIpxOQn5runmFzH1cv15YU63BPzy5EKxVA6Bsq21Vgw8cGRwtjnAkcyqireknr2VfzsGvwDFcBvpLaeZGZMqw2xHbFuAzMF1v4d2y/ruQTbAnlXillhqmjR+jkU6XuiRHOBHmEIFG X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: bb2d0a1b-b7a5-4e87-df49-08dbfb62a0e2 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3206.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2023 22:35:23.0809 (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: eaSau8JjU/SZ2m975d/FTTKfR+hgJhyYtgygA+R+ztND06yMdTX0+4bETjjKJyr++QZVeXyFSfoSONHGY2/jXw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB6174 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-12_12,2023-12-12_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxscore=0 suspectscore=0 phishscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2312120176 X-Proofpoint-ORIG-GUID: nopg2rkz679Egxh-O0jaoVdnDZgKUH2I X-Proofpoint-GUID: nopg2rkz679Egxh-O0jaoVdnDZgKUH2I 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_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: 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. 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 } } */ -- 2.43.0