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 417B13853D73 for ; Tue, 13 Dec 2022 06:16:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 417B13853D73 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 (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2BD1ov9R020849 for ; Tue, 13 Dec 2022 06:16:04 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=FddGNOA10aYETqRld9b/7NUdAaJZtuDCJnvqOasKvvM=; b=AnVJobYhqOLKNuMhGGZTpR2Ask34rlNDXx8Wr/l7ueSdQxdIMVrpGc75+OdZyIvvdp1s F+W/sPAz42oNFkiNrvd6F77BdlXkAAXr++vV2bLE/RgtiG8aGeiYCaHkHQMlnPbyJwgX Zld021jJ0OTBPsS8HiEagUyDRP6C53RiGJawm1FuQVrHUyOvqoF8GpFFax1623oA32Va VBwoXkk80+4TIHOdGsiNh40+xl1aCL0EjUbV/PSKnfbuuEm+W861w/P5UIDoj8SAHf7t lLM8Oyd98zjYFWihHjZP4fTMXLsqOX/wkQZD5XZa6yKEoAODeQf5gEDFVZIXdlEjCIJn 6Q== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3mchqsvk91-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 13 Dec 2022 06:16:04 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 2BD40GSI018625 for ; Tue, 13 Dec 2022 06:16:04 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2176.outbound.protection.outlook.com [104.47.56.176]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3mcgjbqpfe-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 13 Dec 2022 06:16:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TGfQzeSmD5PkW3/Fs+MAIXwJArsXCzuUqBkc9dyxb3D30HhNKjBve14g5xCwDdOk8J7cjo0shRBBAkq8KcNCycJoKZztbGjuE3HDdqD44iPJ9DdVEmlcGYFSZvIyQaRnh0kxwBigeta4ErvZNri2qAj4TAHg9UFyOIWoJWgUQPFy6BkrxwN3BAI5KyBu4CJ2L7A6th1GjVtLfkH+7b6ecNm5BPwNcjVykeUmmaYxuSlj60Zt6aAaZjj85fHEoPtNS2lhxwjOP1mBL8L+w+yac0+lQh0jzgTKaWFR1N3bvcU2eFNwGC/bebLbHII/KWd/HazAakihMQBPSGQZ/CPXFg== 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=FddGNOA10aYETqRld9b/7NUdAaJZtuDCJnvqOasKvvM=; b=mImohVklrbet9okcVEx6U9CC2jFxBPiX/ghBpW11Qd+kUpw4fhsuLuAjlWu+VerqAOYlAnttPiNu22U6hB+c6rUVyt3qntkqyLzv7tS1lfT9LNkRXrLCp2gNWe2tx2jjvm5BCzqdiHA2PrkSwR+R4UDGoqjVrMqUurU/h86kJwd9HAawhy3oYDUc//dC0n1clnj9DYbrlIKVJ2rTgDHxAmg1J4Ayc4BgYKd2jjvXA3VoUVcTCZ1keCedTrN9tem/AX+iyBZCYcVcBtubgMpRQxy31/Uwd+/wwtCU6lcD8S4m/vQk90bY4zUoRtaHdo36ePO0q6zduMdjNYpnPfJTHw== 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=FddGNOA10aYETqRld9b/7NUdAaJZtuDCJnvqOasKvvM=; b=rpV6GilGgIXQzKEIw0OVT7y+xUtNwmlCg0xKkLGZm+2M0ctOrMxG0N+p8McOAxmY+ef1BuKX7Dx9id3qrL2Wo3fczVZ0AjukAyYNCltaipN8fzdZPg0ScryXUOmh4SwlkI+gu4jXbKwdnhhFJ511zfuyJYXkG7CxrHJGS+GsdWs= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by SJ1PR10MB5953.namprd10.prod.outlook.com (2603:10b6:a03:48c::8) 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:16:01 +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:16:01 +0000 Message-ID: <9247889f-66a9-3bf2-6d3a-41e475efa268@oracle.com> Date: Mon, 12 Dec 2022 22:15:57 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 Subject: Re: [PATCH 1/3] btf: add 'extern' linkage for 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-2-david.faust@oracle.com> <3c332b0b-5193-48e7-7790-1b02d87f33a1@oracle.com> <261c7cf6-0d5f-bc3b-5d5a-ae5d6c944c0b@oracle.com> From: Indu Bhagat In-Reply-To: <261c7cf6-0d5f-bc3b-5d5a-ae5d6c944c0b@oracle.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: MWH0EPF00056D0E.namprd21.prod.outlook.com (2603:10b6:30f:fff2:0:1:0: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_|SJ1PR10MB5953:EE_ X-MS-Office365-Filtering-Correlation-Id: bcbe7e6a-4573-411c-5ad8-08dadcd181a7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iktx551qpDJ1QMg1GSzqJIlKLd6P6Ah1KkZzmWA++Kf/VsArH/L0HjwZf2q6IbexRAfWzsDg4+NLNz9dQfUn3vEUiXfImV8V4laLmoni0xitz6v5z5BsSofbQWahEl9P0m6Kabi4JmwodWss95VElPdy0DvHdN0BG/fYrh0SPXXWjJJve8pJe81SjMqleUS3bBSV/mBGpEp9oCNMb9PqRx50LEE3zr76l2pJ++zu0SE7NRaFldFk2SZFLnr9tJFhlMoaQ4r6pPu1eneKCwCaQOKFXTVHMFHQVN1W6bEwYk8VaTxZKVGl0FzWcarRnkepVsudvgY4uHm/DHntK6tySxTXQmI+N2knMQyZNeiGHA+jfkOqp3ZelDgqLvAqXUjvJD8Zgjl5Tb5qsf0debR7W9PZ8L6HN1ybLFHPXOHw1bOFO/hjdzUcF3R7Nl+oR/rreFNT6dErN1g07IBFR87Lm2hpU2JmbCcInYqCKDO/+pNqkqlnvjQ0sBWfNJySQhgQHnof3RJWyvFylvsbZy083LdEcAz0TWPwV+9ETDUkdnWDTU5Oz6MCTd9/HQDMLvhAtq+TUxfots+pUB2l5JTpeJR1yZ1HEHUUM4y+nI2IYcDnahi+tB9udev1w4if4Rlwz4vunKOFZ1DEyxXol31i7baJCqXIpeDV2rrEpVG01kDbAOKzaATgNiNTQLIyG8DNYkxFe3EJPO/oQEeyfOejUgar250iF89ufNaFPr4iNjjRBx8UDk4Afupfz4OeIF2pt3dbHGGOIPd/2U05diA/BGjeVYkvqWO62m3G1QnSTV08zMbBz8mfXVB3CIIQaLpN 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)(136003)(396003)(346002)(39860400002)(376002)(366004)(451199015)(31686004)(84970400001)(36756003)(86362001)(38100700002)(966005)(31696002)(37006003)(6636002)(316002)(478600001)(6486002)(6512007)(186003)(6506007)(6666004)(53546011)(2616005)(66476007)(41300700001)(66556008)(5660300002)(44832011)(66946007)(8936002)(6862004)(2906002)(8676002)(4326008)(83380400001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aERBZXZ0c1ZNK3M4TjMrYXBjcnZWMWl5VzVTaG5EOFIzdHEvUzlyTnovOWdr?= =?utf-8?B?UzNxYUpOOEVNcDVmQ0MyY0RpaThudjdJc1FCSlR1YzVuQWFSdHptVU1ESFMw?= =?utf-8?B?eWFhc1U5MDVOdDcwUHNYSWExRjJvdUZuTnpDNExTWjQ4ZEI4TjRjUEtPdVZC?= =?utf-8?B?d1hqOWZwdm5uWXhyMlV1R0VmM2JQdjRuUDI4eXdDcVlKZ3V5aDkwcXI1TVIv?= =?utf-8?B?MDY5Wk4rQWZESTdnRm11NVpkNE5RQW9BMWNrTEM4K2JMQjRZZCtqcUdZWlZF?= =?utf-8?B?cms4eWxycmxLeElwZEw1UWE2QkkzU0hZQ2lOQWpxSVJRY3NmaXdDdkVMNmVm?= =?utf-8?B?ZHNzSVdoenlLZXdmd2Zvdk1USncwYkN1ZXRMRjlHTStoYUtWM0hYMFVOTkM0?= =?utf-8?B?ZnhZdXhuS3lyR2NVRjd2NjVVWkJrdG14R1pEWWhHU05qS3lMVHpKSmdGbGsx?= =?utf-8?B?YUJ4bWhGdDNCRWRKdzFZbnBrbERhMnBmVVZ5RDc3M3RSL1JpcVR2Nmt4bTVZ?= =?utf-8?B?R3ZGQ3NnQjdTa09iRkdDRFhIYkV1NDFXNkthVTAzZGlVMWIzZlpPcFMwWUpQ?= =?utf-8?B?ZHA4YStydmVsa1hPcElkS2FCRmxPblQwcndHWkVtejRzWjl3TVlWZ0pWUGtS?= =?utf-8?B?eEpOZWtPNHdMeWRhdnd4Q21ickVNemRDNjBIUS9tK0c2em9FY3VDcXpqdUdF?= =?utf-8?B?S3YwNC9NZU84VUhlUThmUmJ6cmFYYnRsVVl4YTV3dVVqZDU0eEMzMjM2empN?= =?utf-8?B?ZTFTZWZYNkFtM2E0cHd3N2I4WWlpZ3I5elpzbUtEalgrYnE1eGNEeGhzK3or?= =?utf-8?B?dGZrZXZuQjBTQXNOamUxOHZNQ08vRlF6SUptcndMV3VON3M2OFFLbTBvMnhJ?= =?utf-8?B?dDRyWVAwOEFzcUdUS3JLdmgrbVBmMEtyeUJyS3lVekVFL3BDMjVNL1FIMC9Q?= =?utf-8?B?ZXNOQk1uV0pMSWthNjNlM2hSNHA3L0JXMEVwYU03Y3dnSlYydExxSTdpOHh6?= =?utf-8?B?c2RLaEkzcW1uSDhqRU1iZy9MbVVPTi9kN0hpclBhd1JDbytCTTRyL0tOYkds?= =?utf-8?B?Z0l2dVFxNDZwSDFFRWR6NkpKRzZLeUErM2JaaDVYMmRKRGhZcjhWMzlsT0JD?= =?utf-8?B?MmlEZGptMjM3anBwVHMwbWVGSHpDZWRWNmdtdjV1YnRDR0NaTTdWRFFNd2Mr?= =?utf-8?B?cVNNTDF1cks3WG40V1k4REFMRW91em41aXB6MlI5cEZPUHUwaVlmbkUycHZv?= =?utf-8?B?QkVuNHhTdDVad0dUSHRMTVVBM1RyNzlON1ZwK2JCUHVWeTZSUkNKT3h4VE1n?= =?utf-8?B?TGlhSzg2NmF5YW0yeWhVQ3FFMU1sTU1BWXMwcENKTTFidG80ZnhTNVZBcE9U?= =?utf-8?B?ZFhsVzFKUGZrV0x3ejNISUFuT1RKaG8wKzVwR2NCc2MvdCt2c3BxM3lMVVpw?= =?utf-8?B?M2l4clZyQ1FWZDhnTXBtM0FrQW9JRmw4SHdlZFlvWFFhRUVkTGttYTNjREdF?= =?utf-8?B?anNHckh0cE1CYUxsTXF6ZEdEWFpEQTUvakdCZUhoTEYvMlgydkJINy83ZVhB?= =?utf-8?B?bmtRVlNENnlHRnU4L0xKTXFRSmxaZ3V3SE01cFBod2M0UjhUTlJJNmhMVElx?= =?utf-8?B?NGNTUlBhM1BqVVdGN3VlVFNjcU9jYkViQzQ1cGpUOGVjc2hIWEtWSXNZV0pi?= =?utf-8?B?RlUrLzF3Q3NvMmliZTZiYUI5SE5uUmZ0UVI1YkhQR3dRcTR3QnFUTUNsUjFi?= =?utf-8?B?aXJQRkRFL2xUSVQ3R2g2N2ptRUxySXVQNCtYS1lZNHpRZi95S0JsVGtSdlNE?= =?utf-8?B?N25uWVlsMHNyMFN1Y1QzMUM0dTM0S1NlTjVUQmRFWjd5dy8zL3FYSGh3NGRC?= =?utf-8?B?aDFVdStjQWRFaGx0MVExTWxmdEQ0SG1xdlZsU1FPMGVmSnFTcjhoVTNMcnVo?= =?utf-8?B?aFkvNnMrYzN0RHVBZXE3WjR6K21zWGhOWFRXdkdTR1QrYi9nWGRmdFBDY1FK?= =?utf-8?B?QStJL3h5bXpOMnppb3d0TmVieVZDdnl6Z1JuaWMxeXhiRE9PNXN4Sld0aUFJ?= =?utf-8?B?c2dHUXZHbGx3aTlQNWpoWnAvd3h2bG5LaG0xaHdNY3hZM21waDBSczk1UUJU?= =?utf-8?B?bkpYaldPaDlLMXgyQmZGLzI5YVZoU2IyUTRVV2J4a1pNYjc4aksxTDVwSERY?= =?utf-8?Q?Q0DZhKoCBF2faJoRQkYgOaI=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: bcbe7e6a-4573-411c-5ad8-08dadcd181a7 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:16:01.7068 (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: 8RzrP0VnXw6Vl1Kynn77l3ijam76ogwCEmGq/7Pw0ManrkA3cYmR57+pQ9G96fsbBMJ1ds03rZOEoQix9yiDEw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR10MB5953 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 adultscore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2212130056 X-Proofpoint-ORIG-GUID: Cw0AaEnn-frhEmerS5esQHhMned1rdd2 X-Proofpoint-GUID: Cw0AaEnn-frhEmerS5esQHhMned1rdd2 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,KAM_SHORT,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:47, David Faust wrote: > > > On 12/8/22 22:55, Indu Bhagat wrote: >> Hi David, >> >> On 12/7/22 12:57, David Faust wrote: >>> Add support for the 'extern' linkage value for BTF_KIND_VAR records, >>> which is used for variables declared as extern in the source file. >>> >>> PR target/106773 >>> >>> gcc/ >>> >>> * btfout.cc (BTF_LINKAGE_STATIC): New define. >>> (BTF_LINKAGE_GLOBAL): Likewise. >>> (BTF_LINKAGE_EXTERN): Likewise. >>> (btf_collect_datasec): Mark extern variables as such. >>> (btf_asm_varent): Accomodate 'extern' linkage. >>> >>> gcc/testsuite/ >>> >>> * gcc.dg/debug/btf/btf-variables-4.c: New test. >>> >>> include/ >>> >>> * btf.h (struct btf_var): Update comment to note 'extern' linkage. >>> --- >>> gcc/btfout.cc | 9 ++++++- >>> .../gcc.dg/debug/btf/btf-variables-4.c | 24 +++++++++++++++++++ >>> include/btf.h | 2 +- >>> 3 files changed, 33 insertions(+), 2 deletions(-) >>> create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-variables-4.c >>> >>> diff --git a/gcc/btfout.cc b/gcc/btfout.cc >>> index aef9fd70a28..a1c6266a7db 100644 >>> --- a/gcc/btfout.cc >>> +++ b/gcc/btfout.cc >>> @@ -66,6 +66,10 @@ static char btf_info_section_label[MAX_BTF_LABEL_BYTES]; >>> >>> #define BTF_INVALID_TYPEID 0xFFFFFFFF >>> >>> +#define BTF_LINKAGE_STATIC 0 >>> +#define BTF_LINKAGE_GLOBAL 1 >>> +#define BTF_LINKAGE_EXTERN 2 >>> + >> >> I was about to suggest to rename these to use the same name as used in >> the kernel btf.h. What is used there is: >> BTF_VAR_STATIC = 0, >> BTF_VAR_GLOBAL_ALLOCATED = 1, >> BTF_VAR_GLOBAL_EXTERN = 2, >> >> But after looking at the Patch 3/3, I see you reuse these definitions >> for functions as well. I just find the names confusing on the first look >> - "BTF_LINKAGE_STATIC". >> >> Naming aside, what do you think about adding the defines to >> include/btf.h instead ? > > Actually, I forgot these are defined (separately for both VARs and FUNCs) > in the kernel uapi/linux/btf.h. It would probably be best to mirror that > approach and use a separate enum for each, in include/btf.h. WDYT? > Yes, mirroring in include/btf.h sounds good. >> >>> /* Mapping of CTF variables to the IDs they will be assigned when they are >>> converted to BTF_KIND_VAR type records. Strictly accounts for the index >>> from the start of the variable type entries, does not include the number >>> @@ -314,6 +318,9 @@ btf_collect_datasec (ctf_container_ref ctfc) >>> continue; >>> >>> const char *section_name = node->get_section (); >>> + /* Mark extern variables. */ >>> + if (DECL_EXTERNAL (node->decl)) >>> + dvd->dvd_visibility = BTF_LINKAGE_EXTERN; >>> >> >> This made me think about the following case. >> >> extern const char a[]; >> const char a[] = "foo"; >> >> What is the expected BTF for this? Since BTF can differentiate between >> the non-defining extern variable declaration, I expected to see two >> variables with different "linkage". At this time I see, two variables >> with global linkage but different types: >> >> .long 0xe000000 # btv_info >> .long 0x4 # btv_type >> .long 0x1 # btv_linkage >> .long 0x1f # btv_name >> .long 0xe000000 # btv_info >> .long 0x7 # btv_type >> .long 0x1 # btv_linkage >> .long 0x60 # btt_name >> > > The BTF documentation in the kernel does not clarify this case. > Going off the implementation in clang as a reference, it looks like > only one VAR record is expected, with 'global' linkage: > > $ cat extdef.c > extern const char a[]; > const char a[] = "foo"; > > $ clang -target bpf -c -g extdef.c -o extdef.o > > $ /usr/sbin/bpftool btf dump file extdef.o > [1] CONST '(anon)' type_id=2 > [2] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED > [3] ARRAY '(anon)' type_id=1 index_type_id=4 nr_elems=4 > [4] INT '__ARRAY_SIZE_TYPE__' size=4 bits_offset=0 nr_bits=32 encoding=(none) > [5] VAR 'a' type_id=3, linkage=global > [6] DATASEC '.rodata' size=0 vlen=1 > type_id=5 offset=0 size=4 (VAR 'a') > > In GCC we have two records since we have two DIEs for "a" in the > DWARF. One has type "const char[4]" and the other has type > "const char[]", so the BTF records point to two different types > as well. > > I guess we should find a way in BTF to identify this and > emit only the defining definition as clang does. > > CTF had a similar issue earlier. See PR105089. https://gcc.gnu.org/PR105089 >>> if (section_name == NULL) >>> { >>> @@ -676,7 +683,7 @@ btf_asm_varent (ctf_dvdef_ref var) >>> dw2_asm_output_data (4, var->dvd_name_offset, "btv_name"); >>> dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_VAR, 0, 0), "btv_info"); >>> dw2_asm_output_data (4, get_btf_id (var->dvd_type), "btv_type"); >>> - dw2_asm_output_data (4, (var->dvd_visibility ? 1 : 0), "btv_linkage"); >>> + dw2_asm_output_data (4, var->dvd_visibility, "btv_linkage"); >>> } >>> >>> /* Asm'out a member description following a BTF_KIND_STRUCT or >>> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-variables-4.c b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-4.c >>> new file mode 100644 >>> index 00000000000..d77600bae1c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-variables-4.c >>> @@ -0,0 +1,24 @@ >>> +/* Test BTF generation for extern variables. */ >>> + >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O0 -gbtf -dA" } */ >>> + >>> +/* Expect 4 variables. */ >>> +/* { dg-final { scan-assembler-times "\[\t \]0xe000000\[\t \]+\[^\n\]*btv_info" 4 } } */ >>> + >>> +/* 2 extern, 1 global, 1 static. */ >>> +/* { dg-final { scan-assembler-times "\[\t \]0\[\t \]+\[^\n\]*btv_linkage" 1 } } */ >>> +/* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*btv_linkage" 1 } } */ >>> +/* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*btv_linkage" 2 } } */ >>> + >>> +extern int a; >>> +extern const int b; >>> +int c; >>> +static const int d = 5; >>> + >>> +int foo (int x) >>> +{ >>> + c = a + b + x; >>> + >>> + return c + d; >>> +} >>> diff --git a/include/btf.h b/include/btf.h >>> index eba67f9d599..9a757ce5bc9 100644 >>> --- a/include/btf.h >>> +++ b/include/btf.h >>> @@ -182,7 +182,7 @@ struct btf_param >>> information about the variable. */ >>> struct btf_var >>> { >>> - uint32_t linkage; /* Currently only 0=static or 1=global. */ >>> + uint32_t linkage; /* 0=static, 1=global, 2=extern. */ >>> }; >>> >>> /* BTF_KIND_DATASEC is followed by VLEN struct btf_var_secinfo entries, >>