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 A0F71385C648 for ; Mon, 12 Dec 2022 20:47:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A0F71385C648 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 (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2BCGwrUX002656 for ; Mon, 12 Dec 2022 20:47:46 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=vgu/uSE3vJIoDvHhYPVuqLNUV1vYty+IVrzwKmEaN60=; b=Oc2dl52FaHQziKNl1PHo29EUVjIj9tJC+gZhl9LFSg2Jlt6rm7yLnH3Ze1qSoFUFyliH MR2IXJfKCiq87a3UZ5LCLpYzU07dWtwGjn3/6A0kRu5F00tR+htMp2B8PGtxTcMtOVIy fYN6x8/Uar+y000ZCaE3xrnPYsm0xV9Gh6DjQ6MkAfHcVtLnKRFenZ/yv6qfk+PgBfVh kJLAdFqas4Tmwdzyx9tTk/l0Q05sktqm8V+EhDZBlEG386yTC5A8Zb85qlcgRcIxUuWK i4en44BN8p5mngHeyI7YbVD4nCB5G5oPIGMr3LyWTT/cSe5NiFmRXpjhFptkCRoErIRz BQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3mcjnsut9n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 12 Dec 2022 20:47:46 +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 2BCKeqpk018606 for ; Mon, 12 Dec 2022 20:47:44 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2101.outbound.protection.outlook.com [104.47.58.101]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3mcgjb4gcq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 12 Dec 2022 20:47:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cJxAUpjDeKej7v+sa2TcBNs342ig5iOO+FtyN/mebBy60R2WaFcs82DZan++LW0lxTf8G8tYZvKXtK+l8nBI7/eefw3MCJ8S1uLjMeNPS7pdBEFSvBZG7KzfQj0rq8LnZExUiUFWIs/otbSieUanlG/BjSkTCKmNT49450QZztdAbd4RznlQlhVyl3Q1ZK5D2svl1SKJmojeOyLkwSwVnvkNEPH4TVL3BH5wzpcuDn1p70cryj43rzlHNfbVRhbHg5BO2KOcscvXPozbaVh3HgJqOxowH+owj+pNa6K7B+Qa9xDuvCz+RBFx9PfWT+0Zxsh5wGuLqHwvmENzDR7CDw== 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=vgu/uSE3vJIoDvHhYPVuqLNUV1vYty+IVrzwKmEaN60=; b=e6ixiicJKvLQsQdhOyINhJOKi2KHFvDu3BREpPD9ak2lEOxuaLZ3MaF3Re4YESHGCc/SSu+hbGLjNhCV++NgK4JZWUqotiCCnp11o2Gl/y3if9XYA7vccEpsxXAoe9CIm7UpR7JO0Q+nvnCNiBodIENPQOKuYN8FFl6h/AF16JQr6/igeuFezozwaj4IywgbbilRKyS41O92fzTKdGQeaIB8EaUhdv8M6oJ4wge8vB5R+yACH8jCgJxAWbdhnhY0C26zY+JJapKfXTjs8zVms88wEHmGqX9kG+a/00UugtiO2L8jbTVCObFIbqeo3cg5u9qYnBtipp7StbX/5d+qhg== 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=vgu/uSE3vJIoDvHhYPVuqLNUV1vYty+IVrzwKmEaN60=; b=n8mNMucSPQX4F5Sgk5mtgqDTJL1r3wSJy10dx/Z6MKzqaE7WGcZdvk0YWda2jlHPv7EXsDZjUlwpdtxgqkstV3hxpJjml0SV+QN5gcvj8SlnKrGiLUre2FqSaZa2vcPEBYW5jwWRfN2O16aP7IRNXWBJegy5XxDHdlhs2FUhSWk= Received: from MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) by CH3PR10MB7396.namprd10.prod.outlook.com (2603:10b6:610:144::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.19; Mon, 12 Dec 2022 20:47:42 +0000 Received: from MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::dd41:a422:5763:8848]) by MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::dd41:a422:5763:8848%7]) with mapi id 15.20.5880.019; Mon, 12 Dec 2022 20:47:42 +0000 Message-ID: <261c7cf6-0d5f-bc3b-5d5a-ae5d6c944c0b@oracle.com> Date: Mon, 12 Dec 2022 12:47:39 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: [PATCH 1/3] btf: add 'extern' linkage for variables [PR106773] Content-Language: en-US To: Indu Bhagat 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> From: David Faust In-Reply-To: <3c332b0b-5193-48e7-7790-1b02d87f33a1@oracle.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: BYAPR05CA0030.namprd05.prod.outlook.com (2603:10b6:a03:c0::43) To MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB3213:EE_|CH3PR10MB7396:EE_ X-MS-Office365-Filtering-Correlation-Id: 50fe5a31-f3a4-41b7-1574-08dadc821d79 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Hdxjk4n25Bf3Meqrdez5WvN3AXJ6u02zutFKkGTchSDwVHvJM3fS4ZQ9d7jWKZuxlkWiuEXXfrycbeCm12Ua2YrCxM9Gotj+sY46uMaz2Ibl8HShoRwh8VBaF8TWwBfIvO4ELN8IQpcTtOkct80ekh14tE+fFL8WziJ3EfyCBuQjBp/KpAnVY7xBwyxpkxRzduHtWuiW8Z0cIac3z9NhcHGQOpIRMZSzOh3EhUQrbQIAZdhLC5M7JatDABLwbG+n6LG6JLSYPVuRcs3hyvDhqWQ6buFiTyUK47e4xsNabzpl3ZWkcJVFoRx02lu446jlPyZ9bM63kwG4MHLxQI6uTwl2vOCDbmacOb/K0k3QnpMusgd6trqohqOk4AAsqnSxrq25mSCHZX566br4ErZKszvJpixVXO8MB/6e2HMTAZU77lmFFbTlaq2nbq+v6ehiBa0m9l/etkrvinJd1dD5RIkwJTSOxYTm9eQH4sLbT5RK3whL4PhphKUfK4Z5NpPXIlIkffQpgpkY9HO8Ox6V7oPnvMvnht9E25KeXOscIhtfLqhuRNcdpy3xWvyyBEvASRkvq83gbaIGCK/KXDHKjFloVmShx7lN5HFnakSlsFLhPIBAO1obFjfevDUi/ZEDit/tZNLpkOmJDxCDrBQsXS1qap1cZ+ydRZ5SmXLJtLlKxJEwLr8//60+zI3B5UQY4aLq4pqk+sHf8wIoXtd6O1KsfI0wVSwvoy7wH3eukDJ9JfC7t3mge7O8JfdZnG7J X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR10MB3213.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(396003)(39860400002)(346002)(366004)(376002)(451199015)(31686004)(2906002)(38100700002)(44832011)(84970400001)(31696002)(26005)(8676002)(41300700001)(53546011)(4326008)(6512007)(6506007)(6666004)(86362001)(66946007)(8936002)(316002)(5660300002)(6636002)(66556008)(6862004)(37006003)(66476007)(478600001)(6486002)(186003)(36756003)(83380400001)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZEVFOHljY21aYkYvRmhMUk53SkxNQTBRRHAvWklsRkdieWt1YWpoYlRFNTJT?= =?utf-8?B?M0FVMGpRSm83MXVBcnhKQ1lyZkZRYWdZYlhwczdvT3BIQWpJcGM5aHloTTJ6?= =?utf-8?B?amNtVkdsQ2Jkc3MrWHEyT3FBUmhYVDFQS05uaE1TYUFpVFh4R0RHay96Nmh3?= =?utf-8?B?dS9nSStYSUpuN0Y3MnFSQXB5Z0NsclYzdTlTb21XZFU1Qng4QWFhZTlVVEdn?= =?utf-8?B?WFRZdDRwVDluSkNPRENYQXRqSjVadWZOcEJYWmNqKyt1SFp1MFJ1TnJyMHFB?= =?utf-8?B?Ny9BYnN2eVREU2R2ZTd2dWo0MVJzOGdPWmd2V0V2Zml3UWtOdEc5QlI5S1Nk?= =?utf-8?B?Q21WNnRvUnRScHBJZ3ZrRkJiOGJrTnErSm5nTTJvRU91aWFRQ2NrVkZxRFo5?= =?utf-8?B?dUF3bjJ1d2w3TUU3RkNZL0RuaVhkeWV4NUZ6czVkc0E4VFBZTnBqUS9CTDlZ?= =?utf-8?B?UEkwSExhU3dCZDN5aHdPa2l3THdZc1Qyb094M0s0dUxDQ0drTU1LUy8zbnhK?= =?utf-8?B?K0NzQTJ2SSt6Yi9XZnllTnN5NkxYSnl0NFNzdEoyTlZLOXB2MTluMUdQVEtQ?= =?utf-8?B?dm1YSVJxUUNDRjZ4ZmYzakMrRVhnSE9kWXhKTTJqUXdTeW03YTdQaFNYVjlO?= =?utf-8?B?d3Fnam1NNE9GQXN1UWh3RXVKSXJDYURSNk9CdytMa1VuOStwYzVtZ04xZW0y?= =?utf-8?B?M2pGSmVHcTJpZ0Y3YnZXNEg3RTNXZnk3MWlneUpTT2FJd21Sa3NXdG9nMFB5?= =?utf-8?B?TFZWQUQ1c2lDaG15K1JMa1FzaERQeU5iMVAxcVdZUC9ONVgyWkxWRXUwQXV1?= =?utf-8?B?Um9Ua0U1akVQZnI4MTh1TU5ET3IvUldFZEplREVTUHdOdUdlS2FNUkhYQTZk?= =?utf-8?B?dFl1alZZd0l2YWJSZHFxdERMUVFYN0tUZWIycllBald2Z3ZTUlpTN3c1c1Fw?= =?utf-8?B?RkhmbmdhZkRpa0N5dUQyNmRXRGEwMTJRNzR0NXlkYXhReFhYU3p3Y040NFBW?= =?utf-8?B?RklNdHg1ekNyWVdjVXY0TmduNlZnN0doNEV3bjJtVFZ5dzN5akExZmhEWk5D?= =?utf-8?B?VVBBYjZHQmJkOGVZUUV6UkQwSUYwNk1zazJrZVhxWVd1bStvOHY2eDJJdTBE?= =?utf-8?B?N2hHbGo3dnhjTXRRaXZlTDl1RStDWWYvNGM1cGxCRjZtK0pIbDcyQWlsZm8y?= =?utf-8?B?U0hUcFA5dDlreDkvWEFGYTc5OU1DV3BBSzUxS0ZkbDhieDBYTGsvbXpRNEtx?= =?utf-8?B?UlFiWXlyM3N2emx1T3hwd2Z3Rm96V094NUMxTjBnVkNIaXJnNnpNOVN6OURK?= =?utf-8?B?ZW80RFhMaS9uQ0lnK1VkYUt0RTlKS2xZN2l5N2UxZW02bVF4c3FpUnN6Wm15?= =?utf-8?B?VncvWk5TNmN0T3ZlNmkxYktyZFlzMk5HNjhPajRoVUI0M2gxSjc0UzBTVFBw?= =?utf-8?B?MHNyMENUbXFSOFFvQlJZSmRidjhHM0VpVWNTT3l6TzJlZzltME0ra1NDQ3Qz?= =?utf-8?B?TFRPaXBzZ0xKUDlTTUJIZDlua3hNQWNTVVNtd3p6TmU3MndmRWxTNFg2RDRh?= =?utf-8?B?ZUoyeE1xWncxZ1I5Tzd3SW1iajRsMU5TVzNzOGZ5cjFORmdRbjBpbHF5RXJF?= =?utf-8?B?VFJacnI5MjNQa2c5NFo3dytER0Z4dUtLU1BmbzhjRFV0NzE3Q2ZZNHlacGFX?= =?utf-8?B?RHhvMENTUFNPdWtNM01IRFNGUGpFMFNEZTB3RmdVYlBrUzIxbWZ0SGlBUlZh?= =?utf-8?B?M1lpc2lUUnRwTTV1Y2EwckM5WDJRSWJQRGpzaFJXMTh3V0UzZGo1clBGeFl3?= =?utf-8?B?WDNvNjlDRzl2RjVKK1RtbXd0SEFTaStqdkg2QWl6ZDQyQy9HOTB3UVFKaHRi?= =?utf-8?B?ZVhQcUNSMUxkdHVTREtxZlF6bDczV01SNnpYLzJ3ejhTYVN3Rm44emFjaG42?= =?utf-8?B?bWtuTnJFUHVXZ2RDKzhJbmwvdnRGcmdYeFV3dlRQVkVFMDA3S3pKdFFRN3dN?= =?utf-8?B?TXZuZDJnTFp2TExMbHB1aWkrcFd1RjNNTERMRTNNNi8wOXVTVTJqQXBwbjN0?= =?utf-8?B?QWJWa3BwVWxwYy9LSXgraklVSnRkZE96Wm5LdnVFMVhJRmdSNzhxZWJlRHQ3?= =?utf-8?Q?U6xBcj3eB2AfXzcVvWwgyjbJM?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50fe5a31-f3a4-41b7-1574-08dadc821d79 X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB3213.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2022 20:47:42.6242 (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: zAo6uFVcj2fJcicYEgkuT/FXRVHgFLm38MfbuzQ9+tMlrhxZqLzpFiAcKbXyPYXwPOmWrUleV6RROmt7KptJaw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7396 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-12_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-2212120182 X-Proofpoint-GUID: jaZtWeMnPvwpPZmFhgSFAj4BjXY458JR X-Proofpoint-ORIG-GUID: jaZtWeMnPvwpPZmFhgSFAj4BjXY458JR 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,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/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? > >> /* 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. >> 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, >