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 689BC3851AB9 for ; Mon, 31 Oct 2022 18:26:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 689BC3851AB9 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.5/8.17.1.5) with ESMTP id 29VGxHc5001187 for ; Mon, 31 Oct 2022 18:26:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : references : cc : from : message-id : date : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2022-7-12; bh=InytOptswRmbTylejN0PdStpwn0JqCQjpEYKt9ZWoao=; b=XyhpZvQmXKxVmbG8O/kBVCTHoTvaymoL6bh2F012Nicobkt0KDTddTjuwRII4poTU0kv 1cc7+uqPOGufZG+/GrVHhbSXaEVEWC4hdZ+AvAKnwVzuOiUFvcCz7BIBlVzB0SxMzzdv XbDkGaQuYmw1ctqEQsEpzZZ3LOdDXnyJyp7sxZmZBqmERwL0FckzA2l/6SzJLccxcMt4 nJ/tEKcGTyrEclTo2sGbv6RVWB38d4Coarx4OXvP3SbnS+2qYk3DkMy2t8RhIthHHiSg 9xBgEsdFZgR+INvxJMHjMMLV5D+pvaxYOOo9B5TKbvDXggBE6XV5qPA9ZbLBeU8hoHVb zA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3kgvqtchb5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 31 Oct 2022 18:26:42 +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 29VHTiAQ032882 for ; Mon, 31 Oct 2022 18:26:41 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2105.outbound.protection.outlook.com [104.47.58.105]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3kgtm3jtwq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 31 Oct 2022 18:26:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z11DzCyBTNfKpOYrDHGdFk/Rf3MsLUVMzzSRWOou1oV1FXp3LUCNeY5XAVRh84M0ovrreH6a4Vnp4HR4ZdSikVJ8ETlWhYm4biBrbkRJc7uamtxkvrsGZEq+J5Y3Gwb+Qns7s5kt3XIFOz4JvT9EYInOhkuyh2X9vjTYbKOVwFmL3XJ85GLloN8wP7JV/A2Vk+DARIgIYNc02LThs7WWhcP6Ix+Ha/bxzY1aEDmxoi0y3m9pQPWRS92+SaWxwteQ+9fm1C5dtvKohik2gHWLIanrbKZYNdUmwwdQT8c40W59P8fPZifNZaw1JHiWIovj8Zv7HwnzLzY8zD04rG7Yxw== 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=InytOptswRmbTylejN0PdStpwn0JqCQjpEYKt9ZWoao=; b=iuvso5Z/2NlJQOL7eqzXDvSLeJofCAcwGO14OU/MKY6xf+7zRe70SjvG4lvg+nOEJ5ZgoeyEbn0e81V+VCXvteqAms4ezIkbUY8WySjJ8PniOIFTew7ZZUn2UciuxWs+/jsPXNLPNn+q6i/c4Zbj9feciXST71jvpvprvuBfse5MMT1jjwf3G33fsqmw3Wss3WSPPDKNyChI/N9wLSf8tkxbShHh0GJovEHDyPbAa+WKbU15qp70W9mxD6r5LSfRhUSjsCDBXiT4iFC107lk6i5ygyiTSYoxBszUl4WODY05LAVYbYiBiBGFwx3EEMUNCTvuH19/BjqB2ZJHmAG5wQ== 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=InytOptswRmbTylejN0PdStpwn0JqCQjpEYKt9ZWoao=; b=wtsX/FtcKA+wNuaodFvMkX5oZ5U0/GpfigqXvl0prTJoimiK0fmPjQJavyLH+G7tKIYm2xWsRzCwt0VTa2sh0Any2HLzMlrvjxOz3gWHKHBs14RwhdFayp8IgjEKGw3/oFJgG9Z/xkHUKMp/E+Xr7TAvkKCefRDfvZOuKYcVups= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by PH7PR10MB5698.namprd10.prod.outlook.com (2603:10b6:510:126::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.16; Mon, 31 Oct 2022 18:26:39 +0000 Received: from MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::a505:15c2:a248:efa2]) by MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::a505:15c2:a248:efa2%7]) with mapi id 15.20.5723.033; Mon, 31 Oct 2022 18:26:38 +0000 Subject: Re: [PATCH v4] btf: Add support to BTF_KIND_ENUM64 type To: Indu Bhagat , "Guillermo E. Martinez" , gcc-patches@gcc.gnu.org References: <20221015035548.274704-1-guillermo.e.martinez@oracle.com> <20221020020507.616781-1-guillermo.e.martinez@oracle.com> <9a5675fa-64c3-2abb-5125-2db20f60a7fd@oracle.com> Cc: "Jose E. Marchesi" From: Indu Bhagat Message-ID: <353fbe61-168e-bcb9-621c-bda6ed4e3ca7@oracle.com> Date: Mon, 31 Oct 2022 11:26:36 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 In-Reply-To: <9a5675fa-64c3-2abb-5125-2db20f60a7fd@oracle.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-ClientProxiedBy: MW3PR05CA0025.namprd05.prod.outlook.com (2603:10b6:303:2b::30) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|PH7PR10MB5698:EE_ X-MS-Office365-Filtering-Correlation-Id: 3d9d6992-226a-4301-b30b-08dabb6d732c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nFC2mHFVfufzVruymYBiBn8phl5qm+J5lJ+OCwfKbIF4cwteNRIFMf9Np5lFNL9e6AzWWJdRFlGJyj9Sfqfb/8bzFXVakeBTeMwGRcx/1AlmW9EmrcUwxI64QE0Q2usUXlvTNik7//csIu4fdrXtAfqxInXo8LbdY5iGkz1wgIQNBek1UyySqR6jltfGSEg8G/VgYvWfo9+PIP/Eml0JaRVY9UL+1Z4XoUW47AuhiXQmcOaDuIxP618Ah8AcTFcixnRZjgN7hHMkJShqOEgh7YWXRQtsVyWMdzyDnyyTZ+Jbhyo5mZWFLRhpgX1butqXhAFhCcwP4RsJ6gY2yFQO6rTNGGuuEC2wN8I2i5qzDQyUYvoqaYITWPFXib7OQIbVRvdYHH0VhX+NHncpK7BA7+IBU87XQq9MY4MAsCoUatB/r35pDz6yzhcUGcmdusl1sA0CY8U+6MrjgpuDCoo/XmKsGvjmMBcO2DVcwCEPDLmw4/0FyxaUahuwkmHat4TonWM12ktNesrbO5bNV6yV9S4txwr/MEDeHSeUQwLi1NBqsIOyvG8gYNy0kZ2qXhsOt1Crt5Q8gHSvSUvhq3ojqYkeb9uaqgRPZDfgESQTzRqA+8DnNU9sBqiAI1jG7vstN7xES83dRs79h9s25eW+gvmljdr4WJGxtBs5P4qeSvHxu9kFyJ8gvHBHaSMuUCHRuum+I8/RkI1xwpOxgdWeHFFzPS4/AdtPm0JkCuP/ueeW7o5g0kRtq6SaigodWOB4lPiFo8xpPLI1dmbsO/M53JQP5CZ4js/b/T5Aq81br2pscKEm7nWAxwd4AhjcA8c5hcSDkO9Ity4SSZc3oIzwz4quhQVrKyj3aSuNLYGYNFA= 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)(396003)(39860400002)(136003)(366004)(346002)(376002)(451199015)(6486002)(5660300002)(41300700001)(30864003)(38100700002)(110136005)(316002)(4326008)(53546011)(2906002)(8936002)(2616005)(186003)(83380400001)(8676002)(66556008)(66946007)(66476007)(86362001)(31696002)(6506007)(31686004)(478600001)(107886003)(6512007)(44832011)(66899015)(36756003)(84970400001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZGRYcmxPa0lmVm9sQUVsd3B0S0lDejFLaGh5WDlPam16Y3NDNzYzUS9pMnh4?= =?utf-8?B?ODVxNi9pTnlVNDBGOWt3OXZ5L21XUHdXb2N3RHZwaWNUaUJtYWoxbUVSTkVW?= =?utf-8?B?aGpsMTJSUnJjMEZLcVVIZ0c1OGdtSXpBNDB3YXdjM011NUFhK1A4N2N2M2xh?= =?utf-8?B?MHJpWkJqUnlKOFpQM1p2blV0WHZBa05yOTZrTnBrenBIN245YjNUMHllNlNs?= =?utf-8?B?VnNJenkxVDVLNXFRcVVMVG5hWVcvRFNVcmo2NHdWQnVTMVhNMGk3eW41V215?= =?utf-8?B?Znl4V0p6Q2JiMzRnR1V4ZlQ3a1g3VHBDZ3k0ZUVhL01RS1ZJSmZKVWtNUmFv?= =?utf-8?B?TktvSU1ZdjJVc2RsdDNYRG1tR1FOMzlWa2FFUUVIbjBubmN3d2h1K29rSHlL?= =?utf-8?B?SDZRRzJ1VHhZZnlXNVpqL21oUTF0UG5ZUFRBOURZZCtIc1dXbVE0NEtRT1E3?= =?utf-8?B?ZkZTcXNITU42RE1EUjhYbXdjZ1g1QUhzazNPdDA5dndETElkSTcvVjQ2ZE9o?= =?utf-8?B?eWpTM1cwNk9mSmVTc0RXc29Jd1FEdHZSaGtjNFEwY0g3Vks2ZjhGYVZIcEJl?= =?utf-8?B?end5K1o3UVRFQldwOEY0SFZDb3ZNUmNtakgzaUp2REhWRGg3RUM4b2VyOGhp?= =?utf-8?B?OFhQSDR6cVF3NUxDUXpJZjJtL0dxWndqQWpNUmRKK2cwMm1OdDBzOGdjK0VX?= =?utf-8?B?VzZ5ZEROT1h2bFh4eVdsb3JJazQvazhmWWQxSkt1Sy9TZ0tlLzhxVU1Ec2sy?= =?utf-8?B?ZHBiQzh1bzlSRC9wQzAzR1FIdUZXU3NSK1dMQnl3SjRJamVleHBHd1BxSXlZ?= =?utf-8?B?R2JEZGFScUwxdlNqSFB3UXhXU1YxOFh6K2dMSURhdTYzYmM4TUVkRSsveUox?= =?utf-8?B?elJGMUE2MTRoS0FtaDZYMllaSjRwUVZvUXhXbWxlT0pEMFZjV3dlMDRRNkZt?= =?utf-8?B?VzdYU2tzcE5vUWdVUWFFNlU0OUlGaXZoREllRW5QaXhVcmFNMGwwdHUwaFZj?= =?utf-8?B?OXJvQ0pqKythQktDajdJYnhQMEZraVlGSitub1NaYXlhM2VuRWVNL0NieHpX?= =?utf-8?B?dnJTOWVjTnMySEtwK2JKZVJBelFEcEUxNFdvcjhudDlkWjlNRVFCeUwzV0JQ?= =?utf-8?B?S1pBSzJTQXlIOGdRQkxtS0lERGFWdkIycmE0c1A1U2VGNkpQeXB4VWFDVHZD?= =?utf-8?B?dUVsOVVlSTBaQWQ4dnRxSWJQU2hieFhUNDVocUc0R3JFMERaVE91bW1uRDhq?= =?utf-8?B?ZENjTWVOVmZBak9XSll5Q0EyMWxiZVRJa2UwcFZRaC8vNzdmTkRWRHJUN0Yy?= =?utf-8?B?RnZTam1ranlKVlpiTnMyU0RWUmFHdDdWVkRCTjdONWpOUDd5R3IvUlc5QS9z?= =?utf-8?B?bDdPZGZuNWFmNnF4WE5mRlNwZUVtbm1QNWVPVFY2SWZRR0FmSUNEeDgwdlhu?= =?utf-8?B?VnFMWkdKRDB5NjhJdTNibVZwVEIyTXNmQ3ljMmZ5aWNqUjFqSEp3elVjczVs?= =?utf-8?B?WGl5Unh2TDFwOG5qRC9FUk5MYk1LT0dLa3p4a2ZYazFuUGVoUVlRMmF2VjFT?= =?utf-8?B?WXVQV0NyNGFNc1p6dkEybHNUOTYwZ0E3bFBGWS9nODBRU3NFenRZL0VGSDVy?= =?utf-8?B?QncvYmtMRVZ5Z2JjMGxYY09nY3hVWEp2VUxBbUxPais2M0tjZUM5WHRmbjRE?= =?utf-8?B?R0w2NTFGSXBUSUdLQm5FQUswK3pWTFJOaG9wZUVYZGRadklab2lQdTZBMDI5?= =?utf-8?B?aFJzMGR5K212aVVyT09ZTktUM1NkZk1mS1dmYjdmRk5uOHNkQWxHY0M2eWtM?= =?utf-8?B?UFFYaWlRZ2lad3dXVGtSdk5NMmRQazNmY3BkZkltbHY5eU5FWVpJVUgxRXBy?= =?utf-8?B?bmp3VDhuL1BTNHBzWHhSS0VLOFdmdUxpd2NZQlNMS3JLM3dpQlNXU3JGc0pJ?= =?utf-8?B?UzZmckhmZVhRUzZ0TDc5bm10eENIZkoxcHNrTERNRE9GekQ1Q3RpY2kzVHFG?= =?utf-8?B?Ni96M2p2TFE3OWttSHpyQ2UvWDZJSlJzSG00eXZ5TWQzbnJrRUsvZXBONGQw?= =?utf-8?B?dnRIMkZrNnBSMFpCcnJRdE83YklscnZPelVvVUo3bDhtTGNxdFdZbjN5b001?= =?utf-8?B?ai9jRHI1T1lsYWhDWDcxQVcwNE5OUkx1R1ZxMWpGK2tiTlM2QnNoemJHOTJP?= =?utf-8?Q?Vr15i4a6UgZtuzyIh1zu2gk=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d9d6992-226a-4301-b30b-08dabb6d732c X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2022 18:26:38.7609 (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: YFqd7E2LfoAIv1Q1htuPPesfBGErR3saLYzTEpaJvUwYyL3UADTNOc4T2hv6BzpmkB14j0fn3hMhmwvGKHS+Lg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5698 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-10-31_19,2022-10-31_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 spamscore=0 bulkscore=0 suspectscore=0 phishscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2210310114 X-Proofpoint-GUID: uuFwChNnOn5m2SbXcZwl1CSPl3VNnCWY X-Proofpoint-ORIG-GUID: uuFwChNnOn5m2SbXcZwl1CSPl3VNnCWY X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,BODY_8BITS,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 10/21/22 2:28 AM, Indu Bhagat via Gcc-patches wrote: > On 10/19/22 19:05, Guillermo E. Martinez wrote: >> Hello, >> >> The following is patch v4 to update BTF/CTF backend supporting >> BTF_KIND_ENUM64 type. Changes from v3: >> >>    + Remove `ctf_enum_binfo' structure. >>    + Remove -m{little,big}-endian from dg-options in testcase. >> >> Comments will be welcomed and appreciated!, >> >> Kind regards, >> guillermo >> -- >> > > Thanks Guillermo. > > LGTM. > Pushed on behalf of Guillermo. Thanks >> BTF supports 64-bits enumerators with following encoding: >> >>    struct btf_type: >>      name_off: 0 or offset to a valid C identifier >>      info.kind_flag: 0 for unsigned, 1 for signed >>      info.kind: BTF_KIND_ENUM64 >>      info.vlen: number of enum values >>      size: 1/2/4/8 >> >> The btf_type is followed by info.vlen number of: >> >>      struct btf_enum64 >>      { >>        uint32_t name_off;   /* Offset in string section of enumerator >> name.  */ >>        uint32_t val_lo32;   /* lower 32-bit value for a 64-bit value >> Enumerator */ >>        uint32_t val_hi32;   /* high 32-bit value for a 64-bit value >> Enumerator */ >>      }; >> >> So, a new btf_enum64 structure was added to represent BTF_KIND_ENUM64 >> and a new field dtd_enum_unsigned in ctf_dtdef structure to distinguish >> when CTF enum is a signed or unsigned type, later that information is >> used to encode the BTF enum type. >> >> gcc/ChangeLog: >> >>     * btfout.cc (btf_calc_num_vbytes): Compute enumeration size >> depending of >>     enumerator type btf_enum{,64}. >>     (btf_asm_type): Update btf_kflag according to enumeration type sign >>     using dtd_enum_unsigned field for both:  BTF_KIND_ENUM{,64}. >>     (btf_asm_enum_const): New argument to represent the size of >>     the BTF enum type, writing the enumerator constant value for >>     32 bits, if it's 64 bits then explicitly writes lower 32-bits >>     value and higher 32-bits value. >>     (output_asm_btf_enum_list): Add enumeration size argument. >>     * ctfc.cc (ctf_add_enum): New argument to represent CTF enum >>     basic information. >>     (ctf_add_generic): Use of ei_{name. size, unsigned} to build the >>     dtd structure containing enumeration information. >>     (ctf_add_enumerator): Update comment mention support for BTF >>     enumeration in 64-bits. >>     * dwarf2ctf.cc (gen_ctf_enumeration_type): Extract signedness >>     for enumeration type and use it in ctf_add_enum. >>     * ctfc.h (ctf_dmdef): Update dmd_value to HOST_WIDE_INT to allow >>     use 32/64 bits enumerators. >>     information. >>     (ctf_dtdef): New field to describe enum signedness. >> >> include/ >>     * btf.h (btf_enum64): Add new definition and new symbolic >>     constant to BTF_KIND_ENUM64 and BTF_KF_ENUM_{UN,}SIGNED. >> >> gcc/testsuite/ChangeLog: >> >>     * gcc.dg/debug/btf/btf-enum-1.c: Update testcase, with correct >>     info.kflags encoding. >>     * gcc.dg/debug/btf/btf-enum64-1.c: New testcase. >> --- >>   gcc/btfout.cc                                 | 30 ++++++++++--- >>   gcc/ctfc.cc                                   | 13 +++--- >>   gcc/ctfc.h                                    |  5 ++- >>   gcc/dwarf2ctf.cc                              |  5 ++- >>   gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c   |  2 +- >>   gcc/testsuite/gcc.dg/debug/btf/btf-enum64-1.c | 44 +++++++++++++++++++ >>   include/btf.h                                 | 19 ++++++-- >>   7 files changed, 100 insertions(+), 18 deletions(-) >>   create mode 100644 gcc/testsuite/gcc.dg/debug/btf/btf-enum64-1.c >> >> diff --git a/gcc/btfout.cc b/gcc/btfout.cc >> index 997a33fa089..aef9fd70a28 100644 >> --- a/gcc/btfout.cc >> +++ b/gcc/btfout.cc >> @@ -223,7 +223,9 @@ btf_calc_num_vbytes (ctf_dtdef_ref dtd) >>         break; >>       case BTF_KIND_ENUM: >> -      vlen_bytes += vlen * sizeof (struct btf_enum); >> +      vlen_bytes += (dtd->dtd_data.ctti_size == 0x8) >> +            ? vlen * sizeof (struct btf_enum64) >> +            : vlen * sizeof (struct btf_enum); >>         break; >>       case BTF_KIND_FUNC_PROTO: >> @@ -622,6 +624,15 @@ btf_asm_type (ctf_container_ref ctfc, >> ctf_dtdef_ref dtd) >>         btf_size_type = 0; >>       } >> +  if (btf_kind == BTF_KIND_ENUM) >> +    { >> +      btf_kflag = dtd->dtd_enum_unsigned >> +            ? BTF_KF_ENUM_UNSIGNED >> +            : BTF_KF_ENUM_SIGNED; >> +      if (dtd->dtd_data.ctti_size == 0x8) >> +    btf_kind = BTF_KIND_ENUM64; >> +   } >> + >>     dw2_asm_output_data (4, dtd->dtd_data.ctti_name, "btt_name"); >>     dw2_asm_output_data (4, BTF_TYPE_INFO (btf_kind, btf_kflag, >> btf_vlen), >>                  "btt_info: kind=%u, kflag=%u, vlen=%u", >> @@ -634,6 +645,7 @@ btf_asm_type (ctf_container_ref ctfc, >> ctf_dtdef_ref dtd) >>       case BTF_KIND_UNION: >>       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); >>         return; >> @@ -707,13 +719,19 @@ btf_asm_sou_member (ctf_container_ref ctfc, >> ctf_dmdef_t * dmd) >>       } >>   } >> -/* Asm'out an enum constant following a BTF_KIND_ENUM.  */ >> +/* Asm'out an enum constant following a BTF_KIND_ENUM{,64}.  */ >>   static void >> -btf_asm_enum_const (ctf_dmdef_t * dmd) >> +btf_asm_enum_const (unsigned int size, ctf_dmdef_t * dmd) >>   { >>     dw2_asm_output_data (4, dmd->dmd_name_offset, "bte_name"); >> -  dw2_asm_output_data (4, dmd->dmd_value, "bte_value"); >> +  if (size == 4) >> +    dw2_asm_output_data (size, dmd->dmd_value, "bte_value"); >> +  else >> +    { >> +      dw2_asm_output_data (4, dmd->dmd_value & 0xffffffff, >> "bte_value_lo32"); >> +      dw2_asm_output_data (4, (dmd->dmd_value >> 32) & 0xffffffff, >> "bte_value_hi32"); >> +    } >>   } >>   /* Asm'out a function parameter description following a >> BTF_KIND_FUNC_PROTO.  */ >> @@ -871,7 +889,7 @@ output_asm_btf_sou_fields (ctf_container_ref ctfc, >> ctf_dtdef_ref dtd) >>         btf_asm_sou_member (ctfc, dmd); >>   } >> -/* Output all enumerator constants following a BTF_KIND_ENUM.  */ >> +/* Output all enumerator constants following a BTF_KIND_ENUM{,64}.  */ >>   static void >>   output_asm_btf_enum_list (ctf_container_ref ARG_UNUSED (ctfc), >> @@ -881,7 +899,7 @@ output_asm_btf_enum_list (ctf_container_ref >> ARG_UNUSED (ctfc), >>     for (dmd = dtd->dtd_u.dtu_members; >>          dmd != NULL; dmd = (ctf_dmdef_t *) ctf_dmd_list_next (dmd)) >> -    btf_asm_enum_const (dmd); >> +    btf_asm_enum_const (dtd->dtd_data.ctti_size, dmd); >>   } >>   /* Output all function arguments following a BTF_KIND_FUNC_PROTO.  */ >> diff --git a/gcc/ctfc.cc b/gcc/ctfc.cc >> index 9773358a475..34030cbaa49 100644 >> --- a/gcc/ctfc.cc >> +++ b/gcc/ctfc.cc >> @@ -577,7 +577,7 @@ ctf_add_array (ctf_container_ref ctfc, uint32_t >> flag, const ctf_arinfo_t * arp, >>   ctf_id_t >>   ctf_add_enum (ctf_container_ref ctfc, uint32_t flag, const char * name, >> -          HOST_WIDE_INT size, dw_die_ref die) >> +          HOST_WIDE_INT size, bool eunsigned, dw_die_ref die) >>   { >>     ctf_dtdef_ref dtd; >>     ctf_id_t type; >> @@ -604,6 +604,7 @@ ctf_add_enum (ctf_container_ref ctfc, uint32_t >> flag, const char * name, >>     gcc_assert (size <= CTF_MAX_SIZE); >>     dtd->dtd_data.ctti_size = size; >> +  dtd->dtd_enum_unsigned = eunsigned; >>     ctfc->ctfc_num_stypes++; >> @@ -630,10 +631,12 @@ ctf_add_enumerator (ctf_container_ref ctfc, >> ctf_id_t enid, const char * name, >>     gcc_assert (kind == CTF_K_ENUM && vlen < CTF_MAX_VLEN); >> -  /* Enum value is of type HOST_WIDE_INT in the compiler, dmd_value >> is int32_t >> -     on the other hand.  Check bounds and skip adding this enum value >> if out of >> -     bounds.  */ >> -  if ((value > INT_MAX) || (value < INT_MIN)) >> +  /* Enum value is of type HOST_WIDE_INT in the compiler, CTF >> enumerators >> +     values in ctf_enum_t is limited to int32_t, BTF supports signed and >> +     unsigned enumerators values of 32 and 64 bits, for both debug >> formats >> +     we use ctf_dmdef_t.dmd_value entry of HOST_WIDE_INT type. So check >> +     CTF bounds and skip adding this enum value if out of bounds.  */ >> +  if (!btf_debuginfo_p() && ((value > INT_MAX) || (value < INT_MIN))) >>       { >>         /* FIXME - Note this TBD_CTF_REPRESENTATION_LIMIT.  */ >>         return (1); >> diff --git a/gcc/ctfc.h b/gcc/ctfc.h >> index bcf3a43ae1b..48c381a008d 100644 >> --- a/gcc/ctfc.h >> +++ b/gcc/ctfc.h >> @@ -133,7 +133,7 @@ typedef struct GTY ((chain_next ("%h.dmd_next"))) >> ctf_dmdef >>     ctf_id_t dmd_type;        /* Type of this member (for sou).  */ >>     uint32_t dmd_name_offset;    /* Offset of the name in str table.  */ >>     uint64_t dmd_offset;        /* Offset of this member in bits (for >> sou).  */ >> -  int dmd_value;        /* Value of this member (for enum).  */ >> +  HOST_WIDE_INT dmd_value;    /* Value of this member (for enum).  */ >>     struct ctf_dmdef * dmd_next;    /* A list node.  */ >>   } ctf_dmdef_t; >> @@ -162,6 +162,7 @@ struct GTY ((for_user)) ctf_dtdef >>     bool from_global_func; /* Whether this type was added from a global >>                   function.  */ >>     uint32_t linkage;           /* Used in function types.  0=local, >> 1=global.  */ >> +  bool dtd_enum_unsigned;     /* Enum signedness.  */ >>     union GTY ((desc ("ctf_dtu_d_union_selector (&%1)"))) >>     { >>       /* struct, union, or enum.  */ >> @@ -406,7 +407,7 @@ extern const char * ctf_add_string >> (ctf_container_ref, const char *, >>   extern ctf_id_t ctf_add_reftype (ctf_container_ref, uint32_t, ctf_id_t, >>                    uint32_t, dw_die_ref); >>   extern ctf_id_t ctf_add_enum (ctf_container_ref, uint32_t, const >> char *, >> -                  HOST_WIDE_INT, dw_die_ref); >> +                  HOST_WIDE_INT, bool, dw_die_ref); >>   extern ctf_id_t ctf_add_slice (ctf_container_ref, uint32_t, ctf_id_t, >>                      uint32_t, uint32_t, dw_die_ref); >>   extern ctf_id_t ctf_add_float (ctf_container_ref, uint32_t, const >> char *, >> diff --git a/gcc/dwarf2ctf.cc b/gcc/dwarf2ctf.cc >> index 397100004c2..748dd0cd8af 100644 >> --- a/gcc/dwarf2ctf.cc >> +++ b/gcc/dwarf2ctf.cc >> @@ -736,6 +736,7 @@ gen_ctf_enumeration_type (ctf_container_ref ctfc, >> dw_die_ref enumeration) >>   { >>     const char *enum_name = get_AT_string (enumeration, DW_AT_name); >>     unsigned int bit_size = ctf_die_bitsize (enumeration); >> +  unsigned int signedness = get_AT_unsigned (enumeration, >> DW_AT_encoding); >>     int declaration_p = get_AT_flag (enumeration, DW_AT_declaration); >>     ctf_id_t enumeration_type_id; >> @@ -759,7 +760,9 @@ gen_ctf_enumeration_type (ctf_container_ref ctfc, >> dw_die_ref enumeration) >>     /* Generate a CTF type for the enumeration.  */ >>     enumeration_type_id = ctf_add_enum (ctfc, CTF_ADD_ROOT, >> -                      enum_name, bit_size / 8, enumeration); >> +                      enum_name, bit_size / 8, >> +                      (signedness == DW_ATE_unsigned), >> +                      enumeration); >>     /* Process the enumerators.  */ >>     { >> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c >> b/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c >> index 728493b0804..7e940529f1b 100644 >> --- a/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c >> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c >> @@ -4,7 +4,7 @@ >>   /* { dg-options "-O0 -gbtf -dA" } */ >>   /* { dg-final { scan-assembler-times "\[\t \]0x6000004\[\t >> \]+\[^\n\]*btt_info" 1 } } */ >> -/* { dg-final { scan-assembler-times "\[\t \]0x6000003\[\t >> \]+\[^\n\]*btt_info" 1 } } */ >> +/* { dg-final { scan-assembler-times "\[\t \]0x86000003\[\t >> \]+\[^\n\]*btt_info" 1 } } */ >>   /* { dg-final { scan-assembler-times "ascii \"QAD.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >>   /* { dg-final { scan-assembler-times "ascii \"QED.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >>   /* { dg-final { scan-assembler-times "ascii \"QOD.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-enum64-1.c >> b/gcc/testsuite/gcc.dg/debug/btf/btf-enum64-1.c >> new file mode 100644 >> index 00000000000..e443d4c8c00 >> --- /dev/null >> +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-enum64-1.c >> @@ -0,0 +1,44 @@ >> +/* Test BTF generation for 64 bits enums.  */ >> + >> +/* { dg-do compile } */ >> +/* { dg-options "-O0 -gbtf -dA" } */ >> + >> +/* { dg-final { scan-assembler-times "\[\t \].size\[\t \]myenum1,\[\t >> \]8" 1 } } */ >> +/* { dg-final { scan-assembler-times "\[\t \].size\[\t \]myenum2,\[\t >> \]8" 1 } } */ >> +/* { dg-final { scan-assembler-times "\[\t \].size\[\t \]myenum3,\[\t >> \]8" 1 } } */ >> +/* { dg-final { scan-assembler-times "\[\t \]0x13000003\[\t >> \]+\[^\n\]*btt_info" 2 } } */ >> +/* { dg-final { scan-assembler-times "\[\t \]0x93000003\[\t >> \]+\[^\n\]*btt_info" 1 } } */ >> +/* { dg-final { scan-assembler-times "\[\t \]0xffffffaa\[\t >> \]+\[^\n\]*bte_value_lo32" 2 } } */ >> +/* { dg-final { scan-assembler-times "\[\t \]0xff\[\t >> \]+\[^\n\]*bte_value_hi32" 3 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"B1.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"B2.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"B3.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"C1.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"C2.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"C3.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"D1.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"D2.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "ascii \"D3.0\"\[\t >> \]+\[^\n\]*btf_string" 1 } } */ >> +/* { dg-final { scan-assembler-times "bte_value_lo32" 9 } } */ >> +/* { dg-final { scan-assembler-times "bte_value_hi32" 9 } } */ >> + >> +enum default_enum >> +{ >> +  B1 = 0xffffffffaa, >> +  B2 = 0xbbbbbbbb, >> +  B3 = 0xaabbccdd, >> +} myenum1 = B1; >> + >> +enum explicit_unsigned >> +{ >> +  C1 = 0xffffffffbbUL, >> +  C2 = 0xbbbbbbbb, >> +  C3 = 0xaabbccdd, >> +} myenum2 = C1; >> + >> +enum signed64 >> +{ >> +  D1 = 0xffffffffaa, >> +  D2 = 0xbbbbbbbb, >> +  D3 = -0x1, >> +} myenum3 = D1; >> diff --git a/include/btf.h b/include/btf.h >> index 78b551ced23..eba67f9d599 100644 >> --- a/include/btf.h >> +++ b/include/btf.h >> @@ -109,7 +109,8 @@ struct btf_type >>   #define BTF_KIND_VAR        14    /* Variable.  */ >>   #define BTF_KIND_DATASEC    15    /* Section such as .bss or .data.  */ >>   #define BTF_KIND_FLOAT        16    /* Floating point.  */ >> -#define BTF_KIND_MAX        BTF_KIND_FLOAT >> +#define BTF_KIND_ENUM64     19    /* Enumeration up to 64 bits.  */ >> +#define BTF_KIND_MAX        BTF_KIND_ENUM64 >>   #define NR_BTF_KINDS        (BTF_KIND_MAX + 1) >>   /* For some BTF_KINDs, struct btf_type is immediately followed by >> @@ -130,14 +131,17 @@ struct btf_type >>   #define BTF_INT_BOOL    (1 << 2) >>   /* BTF_KIND_ENUM is followed by VLEN struct btf_enum entries, >> -   which describe the enumerators. Note that BTF currently only >> -   supports signed 32-bit enumerator values.  */ >> +   which describe the enumerators. */ >>   struct btf_enum >>   { >>     uint32_t name_off;    /* Offset in string section of enumerator >> name.  */ >>     int32_t  val;        /* Enumerator value.  */ >>   }; >> +/* BTF_KF_ENUM_ holds the flags for kflags in BTF_KIND_ENUM{,64}.  */ >> +#define BTF_KF_ENUM_UNSIGNED    (0) >> +#define BTF_KF_ENUM_SIGNED     (1 << 0) >> + >>   /* BTF_KIND_ARRAY is followed by a single struct btf_array.  */ >>   struct btf_array >>   { >> @@ -190,6 +194,15 @@ struct btf_var_secinfo >>     uint32_t size;    /* Size (in bytes) of variable.  */ >>   }; >> +/* BTF_KIND_ENUM64 is followed by VLEN struct btf_enum64 entries, >> +   which describe the 64 bits enumerators.  */ >> +struct btf_enum64 >> +{ >> +  uint32_t name_off;    /* Offset in string section of enumerator >> name.  */ >> +  uint32_t val_lo32;    /* lower 32-bit value for a 64-bit value >> Enumerator */ >> +  uint32_t val_hi32;    /* high 32-bit value for a 64-bit value >> Enumerator */ >> +}; >> + >>   #ifdef    __cplusplus >>   } >>   #endif >