From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by sourceware.org (Postfix) with ESMTPS id 5BD7B3857836 for ; Wed, 13 Jul 2022 11:59:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5BD7B3857836 X-IronPort-AV: E=McAfee;i="6400,9594,10406"; a="268226042" X-IronPort-AV: E=Sophos;i="5.92,267,1650956400"; d="scan'208";a="268226042" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jul 2022 04:59:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,267,1650956400"; d="scan'208";a="685133033" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by FMSMGA003.fm.intel.com with ESMTP; 13 Jul 2022 04:59:20 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 13 Jul 2022 04:59:20 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 13 Jul 2022 04:59:19 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Wed, 13 Jul 2022 04:59:19 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.170) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Wed, 13 Jul 2022 04:59:19 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QgvFa9Q4GuvGZEgQKWwhdK7/xhLC7XzRptJVoMIfJRDQhwVuAvC+2GQwBwxx935XdVnYkD+2jNqzHrvT5QOy9TUlv+UVyDt8ZADOf/kDaRdKqy+FuYPalNlfeCPtYgSVpOivrJas3E2nQGL8h99idKtkMTS2sA569j+HCW6eIsrXOKj+CGVsFPAeQ55W3SB0+RXY2X14igGcKYtRJXcWilMw4YKzScHpflSONbU7whsTR/Io6+eRXag9bPc48EtDBNexzVRdqOIyhJWR7VJrLr6a7cYR0qQOsIU4awuybTz3ySvG+oVNUFU4Sb1JlrAmcFz0GzRUhViWg4OJguw25Q== 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=PXjfg82MBDOaySie9CujbfIQeDmqoIhT+irfPwtVQps=; b=Y+ctcOtvUyPM/uFYUqc3vkM0oOQIaU39BftlHZMzwTNqHzRWt8OQYYFswXNnJQbGskxKPub/tUZYX5VtOvqJ6jugLpf5ne+jnQM8T4uK/iPzgmLlzf49tggLgRqTfDhWupvhIraAMcidda9mBTQ5foQlEaK19Wo0XQJL8/oVvT0dj0AcyFnOsXAssbbxi6WYWgPEKytZ91H27eLR6rcjNBJ0TFMNHGN6Py9Oq0+YMWrCGlCkuFUGvCZ8Quw62TA3fskjNrdqA2BXJxbvC4mGt+69jWVwM81HOIj6GW55XMFr3z+mVzwqa41//HgqCUxMoV2KAcF+2MAz6+EuzPU6AA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CY4PR1101MB2071.namprd11.prod.outlook.com (2603:10b6:910:1a::10) by DM5PR11MB1930.namprd11.prod.outlook.com (2603:10b6:3:106::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.20; Wed, 13 Jul 2022 11:59:17 +0000 Received: from CY4PR1101MB2071.namprd11.prod.outlook.com ([fe80::b5b1:e930:177e:adc4]) by CY4PR1101MB2071.namprd11.prod.outlook.com ([fe80::b5b1:e930:177e:adc4%5]) with mapi id 15.20.5417.021; Wed, 13 Jul 2022 11:59:17 +0000 From: "Kempke, Nils-Christian" To: "George, Jini Susan" , "gdb-patches@sourceware.org" Subject: RE: [PATCH 1/3] gdb: add support for DW_AT_trampoline in DWARF reader Thread-Topic: [PATCH 1/3] gdb: add support for DW_AT_trampoline in DWARF reader Thread-Index: AQHYkftKQs2tGo9CY0uurB5EBMBYIK1784mAgAAhG3A= Date: Wed, 13 Jul 2022 11:59:17 +0000 Message-ID: References: <20220707121538.1317473-2-nils-christian.kempke@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=abb83dda-69d1-4673-96af-8660439988c6; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Privileged; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2022-07-13T07:30:18Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2a7f0aa2-4c96-4892-a1bc-08da64c71d1c x-ms-traffictypediagnostic: DM5PR11MB1930:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ScDN2L59tyruAAOPR5k5KBl0mXq0I6caUUS7h7+5z7YaRcjW9FvfwIJD69tZGE55XQ2gRhXOlMaHmGDtkOPmB9LgpaBepNPk1LdEQT9TLWqiibpXixshn10ANYm0MsCf0ck5aVAQ/8qHwtPNY+rtrEJC9IxaXdnYUyQSA45XSunYYo+4NvqO18Lam2Bs/CfYNN8oFYBkaEZTu0Y3fxL639x9OJ8WZm08dVuGHqcXKRphUGQVG0uIHjt06urQrcWDU72n6V6aPJmYtcdjlElOm/0exVtFdnX+RPCQ6RGXin6s9hX3rfpOykEJyIKEimTJxVOrkmtJR/pCoBGr8U2oL7bwRoSFaRj3VY1cWew/V7W5G5/HL7GlcaKQn8LAb3grTsjU0KE23gqIqshhxbF2Z2ne8pDfAmaTDbb2vddLWWbSP/gAl7XWUfrqa4atkR0bXmIexKfnchPF6lpL2w/ZRn87J4viE7qBZKixdrqgOuz8zJI5VD5yITmuqHD4VgsFpZQyxh3hARaqUWIhhnQRCSUZUQmIwF1kCrTvAiuZfXyvLkQE5zV3qJGh2pqHlauGKfRn1zupeVGVfnvP2Ww+6mAvEQqAWJh+/H/TWkCYWq8udqDJk8hrWwQ48VugEq0lebTXIadYYQ0Fnsb+tobbac5Px2WIdy79eReEpGX0XMbYtz+bDC8245CYS1R1dKmIL8np6o8g4hEeL1wO18AupxUz64k/Mi+zAHuSuyCN5pZtQWh8Jr1kCTXaL2iTHFsKYYvHO37tDD5wkXGMXxB+sIybsGgPsxFo5CUrNWQdU1IOSdNgbCk2PrYI0vQVpMX4LQs6nyXxZpLMTHWHypVlvORabyzSDRSI7gRQGivQeEg= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR1101MB2071.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(346002)(39860400002)(396003)(376002)(136003)(366004)(64756008)(316002)(7696005)(66946007)(76116006)(5660300002)(66446008)(83380400001)(66556008)(66476007)(26005)(6506007)(53546011)(86362001)(9686003)(71200400001)(110136005)(186003)(38070700005)(8676002)(45080400002)(30864003)(41300700001)(55016003)(38100700002)(478600001)(33656002)(82960400001)(52536014)(122000001)(8936002)(2906002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?sl8oZBVHVmOM1thEbjuibgKnltg8KFnoQWRy8s3xGCYJaCgRhTn8k3UPdqSQ?= =?us-ascii?Q?ION7OGiLQmimfumaFYHuxwPD77N2poQRP/zKiai5lalGni9afFAxjTtNNkI9?= =?us-ascii?Q?ESwYe4uAcA166xVn9PopUxe8HQZ4Eb9nrXYpQ12lAV/DI/dxi7may5Tcs9vn?= =?us-ascii?Q?E4fVL1whA0S50P9OXr+zfg1Q9k9o72TQcfkDJLpS8v0ckC3FRtbcLOOGbxUa?= =?us-ascii?Q?74EU8BoPCkgY2BovOs7Ci9Q5FCa1xSH/heFhH0PrHWZXIOGblA3+EZH/36Fy?= =?us-ascii?Q?9cKtUqj7tDmil0+ovLsRn7zjI30myvnXcPt1+SAeKi70zanM2c+D085QM8hN?= =?us-ascii?Q?IAvXFNfcUQ2cQLdHnic68V31W6YdMyszn9/g2mKEsnQwqgU7K0gedS8kCXbs?= =?us-ascii?Q?o8Q5CXdZZbrIePLyp7DpJskhPQTkyrDCohzQPO9xqIp/ngP/2BO66n6LmdsU?= =?us-ascii?Q?IAoSCBuAwCplQkAiATcSjS5WLYlCH+UFMd9XthloJK5+nIICOx6eC1WcKFO6?= =?us-ascii?Q?piSFPyIj8a0p0Ew0Qqxm1e/DGAKTi4yaPPwK58NAutMMHzO8N75ESUBiXJoe?= =?us-ascii?Q?x8LO62Yb9IFXaXRwe57BvZ1D5/o6FuGh8z6gHY0oghcg0/Bm/zthzZYxLvr4?= =?us-ascii?Q?oxE5G1BEIeoB3WrENXZhGK0Q5Pw0/pdMKvSz+llOhwBsLcdTriGX4Bc3U3SK?= =?us-ascii?Q?K3er66sF2vfiXt/U7yRUo45pcsBBRn8r4X5Mf3sKD1EW40hWtjbFIfhgQYae?= =?us-ascii?Q?eWB4YU695+YzZd1YE9gL7jrJl5PyCGKYhHmyHw5XoMT7oWX4Hht1DNjfVxfY?= =?us-ascii?Q?CsK+3fdZB94u+4a3F8o2z3ezCURLYqqiDpz7X7fITxFLKy1EbzThs3mEVPQh?= =?us-ascii?Q?cLDmL1H0nPFc0LGuOARZ3P0xG6ooR72zH2INVkZpGsz8TRrPDqkAf3z/oF05?= =?us-ascii?Q?H81gElabG5nRN4g7fEogdcQ1GlzjMdeGi2M2vkweoceoM9fAjp4Yaxusqw6s?= =?us-ascii?Q?FJbrEOPzPwBMhjULDZz0VVo4fzELpji0yiQxJfiV9D+LzFqwvxEtadcSjRLs?= =?us-ascii?Q?dow4n4IXCvunhjczetTtWeXIZlTK3jXGCHoK9oNjtY5yrzoJMaKtxZH7+zQM?= =?us-ascii?Q?oDDUvPljVwetbfvNR5YO/fS0mRqM9KVXGiZ371H0IGXGBYXIPhRVqnGj/3jA?= =?us-ascii?Q?jMn8KVCXq4qMJd5J9ZxZQXfZ0zUQIz3AXvzCx0TvepBU71wHrfh81K6qCsvD?= =?us-ascii?Q?YhRQK6CTALWX/1HZo6UklBogO7T05+vJs5dF0TGk61WZ7UK+NlmRtyeG5b1t?= =?us-ascii?Q?WPHVRq6oPD4vFcSZ0PATByRmilHAvWjzqYRzmlDcczmp3sAphlf6Oy64dCN6?= =?us-ascii?Q?mZOpM2DVhS0zGQhd49lFKs3hPaCJzmfsRSIPwZcQFEUnCizpNwBG9fKyTC4F?= =?us-ascii?Q?K/D08/jJz1jalQLhIqwhdQhU2OAKYLkfxHUZv/n+sRxWj0EGVkVR7OmSaPDN?= =?us-ascii?Q?3eoUib7E4c7pnIEZ1OPga9SgKy71azBIQoFfip7bJ6QJc/dzoxymFHw3gF0F?= =?us-ascii?Q?gXVE3uXzdhPi8yAvkXJnV+Hv20eLziTiJ/xSyGPAKHipOwLk8QK96EOKvzjp?= =?us-ascii?Q?xQ=3D=3D?= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR1101MB2071.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a7f0aa2-4c96-4892-a1bc-08da64c71d1c X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jul 2022 11:59:17.5875 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bbqie0gZGHlxyKmEqi46OuKw6zZoTdbmPsFw+ZWVSoYiFHxrUWqaZUS0FYouCaRqbrSz0oxHvNmXJMpEj9e7MvLCwlSS6uIkC3pRtgwjE9s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1930 X-OriginatorOrg: intel.com Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Jul 2022 11:59:34 -0000 Hi Jini, Thanks for the feedback! I have a few questions regarding your comments as I inlined below. Cheers, Nils > -----Original Message----- > From: George, Jini Susan > Sent: Wednesday, July 13, 2022 9:40 AM > To: Kempke, Nils-Christian ; gdb- > patches@sourceware.org > Subject: RE: [PATCH 1/3] gdb: add support for DW_AT_trampoline in DWARF > reader > = > [Public] > = > Hi Nils, > = > Thanks for this. A few questions/ comments. > = > * Is there any common ground we can find with the way solib (linker PLT) > trampolines are handled ? I am OK if we can't, but I think it might be be= tter to > check and rule it out. I don't quite understand what you mean here but am also not super familiar with the solib handling part of GDB. The attached patches treat any functi= on that was marked as DW_AT_Trampoline in DWARF by the compiler. As far as I know not a single compiler (except ifx) emits this attribute up until now. = If a compiler were to generate DWARF for the solib trampolines and if it were to add the attribute, we could also treat solib trampolines with this approach. But generally, the DW_AT_trampoline is independent of any other GDB trampoline handling. Not sure whether this answers your question. Maybe you can elaborate a bit more? > = > * Also, do we want to resolve and display the target of the trampoline co= de > (if possible) in the disassembled code also ? > = So you mean, when I am about to step into a wrapper/step through a wrapper I would display the target at the respective call statement with some note = like (gdb) disassemble ... 0x080483fa <+0>: push %ebp 0x080483fb <+1>: mov %esp,%ebp 0x080483fd <+3>: sub $0x8,%esp =3D> 0x08048400 <+6>: movl $0x2,0x4(%esp) 0x08048408 <+14>: movl $0x1,(%esp) 0x0804840f <+21>: call 0x80483ed (trampoline to: 0x12345 ) ? So a change in the pretty_printer for assembly I assume (or somewhere deepe= r). This would mean, GDB would have to check every time a call appears somewhere in the disassembly whether or not the target is a trampoline, and, if so, GDB would need to resolve this. Generally, I think this might be a nice feature. I'll have a look whether = it can be done without too much effort, but if it turns out to be considerably diffic= ult I'd rather like to leave this for a different patch. If this is already done in the other trampoline cases (solibs and signals) = it might be needed for the completion of this patch though. > * Also, do we want to refer to these trampolines differently so that these > can be distinguished from the linker PLT trampolines and the signal > trampolines ? > = I hoped that the patches made the difference clear enough. Or can you pinpoint something that seems unclear? How would you instead refer to them, I am a bit lost here, to be honest. They are, after all, according to their DWARF/debug info trampolines. Referring to them differently would in my opinion maybe obscure things? But maybe you had something in mind. > * In read.c, in read_subroutine_type(), where the DW_AT_trampoline > attribute is of form reference, we seem to be storing the value > corresponding to the DW_AT_name attribute, whereas in many cases (C++ > and other languages), it might make sense to store the mangled name > typically obtained from the DW_AT_linkage_name attribute. Given this it > might be good to have a C++ test case for this with trampoline target > functions inside namespaces also. Maybe with the same target function > name under multiple namespaces. Also, the comment in gdbtypes.h (Line > 1883) mentions mangled name, which does not seem to match ? Yes, I think initially the comment was intended to only describe the DW_AT_trampoline when its FORM is string. That string could have been both, mangled and demangled. But I get your point. I am not sure whether storing the linkage name or the 'normal' name is correct here. I think the= se are two different issues: which name should be stored and should it be demangled or not. But I'll check this again. I guess I'll have to check s= ymbol lookup again for this and see what makes most sense. > = > * In gdbtypes.h: > = > 1817 > 1818 unsigned int is_trampoline : 1; > = > Might be better to position this field as the 3rd field for better struct= ure > packing ? The structure was poorly packed in the first place I think. We have the ENUM_BITFIELD in the beginning which can be either an enum or an unsigned int. I am not sure whether the size of an enum is defined somewhere but I'd assume it is compiler dependent and usually the size of an int? This is followed by another unsigned int and then by two pointers. If we aimed at proper structure packing I'd assume the pointers (which would usually be 8 bytes to all come first, then the (unsigned) int's with their = (usually) 4 bytes, followed finally by the enum? I considered this when implementing it but it seemed like an unrelated chan= ge to me. Assuming int is 4 bytes and we align to 8 bytes moving is_trampolin= e to the 3rd position would also not do anything, would it? We'd be at 4 byte 4 byte 4 byte 8 byte 8 byte 8 byte Instead of = 4 byte 4 byte 8 byte 8 byte 4 byte 8 byte I think switching is_trampoline and self_trampoline_target would make the most sense here? (without touching the other members). > * infrun.c: Line 7156: It might be better to have the '10' representing t= he > number of chained trampoline traversals allowed as a macro. > = I also thought about this when implementing it. I back then decided agains= t it but sure, I'll add that. > A few nits below: > * infrun.c : Nits: > Line 7154: spelling: certian > Line 9941: spelling : fucntion > = > *symtab.h: Nit: line 2247: spelling: wether Thanks! I'll change this in v2! > = > Thanks, > Jini. > = > >>-----Original Message----- > >>From: Gdb-patches >>bounces+jigeorge=3Damd.com@sourceware.org> On Behalf Of Nils- > Christian > >>Kempke via Gdb-patches > >>Sent: Thursday, July 7, 2022 5:46 PM > >>To: gdb-patches@sourceware.org > >>Subject: [PATCH 1/3] gdb: add support for DW_AT_trampoline in DWARF > reader > >> > >>[CAUTION: External Email] > >> > >>DW_AT_trampoline can be used to describe compiler generated functions > that > >>serve some intermediary purpose on making a call to another function. A > >>compiler can emit this tag in order to help a debugger hide the trampol= ines > from > >>a user. > >> > >>The attribute is only applicable to DW_TAG_subroutine and > >>DW_TAG_inlined_subroutines tags. It contains information about the > >>trampoline target either as a reference to its DIE, as its address or i= ts > name. > >>DW_AT_trampoline can also be a flag indicating that the DIE is a trampo= line > or > >>not but not specifying the target if it is unknown. > >> > >>This patch adds support to GDB for reading the DW_AT_trampoline > attribute. It > >>stores the attribute and its value in the type_specific part of a GDB t= ype. > This > >>patch is done in preparation of the following patches which will add a > >>mechanism to hide DW_AT_trampoline subroutines from the user. > >> > >>gdb/ChangeLog: > >>2022-05-22 Nils-Christian Kempke > >> > >> * dwarf2/read.c (read_subroutine_type): Read in DW_AT_trampolin= e. > >> * gdbtypes.c (print_trampoline_target_info): New helper method. > >> (recursive_dump_type): Add trampoline info. > >> (copy_type_recursive): Copy trampoline info. > >> * gdbtypes.h (func_type): Add trampoline specific fields. > >> (trampoline_target_kind): New enum. > >> (trampoline_target): New struct for storing DW_AT_trampoline's > >> value. > >> (TYPE_IS_TRAMPOLINE): New define. > >> (TYPE_TRAMPOLINE_TARGET): New define. > >> > >>Signed-off-by: Nils-Christian Kempke > >>--- > >> gdb/dwarf2/read.c | 43 ++++++++++++++++++++++++++ > >> gdb/gdbtypes.c | 31 +++++++++++++++++++ > >> gdb/gdbtypes.h | 79 > >>+++++++++++++++++++++++++++++++++++++++++++++++ > >> 3 files changed, 153 insertions(+) > >> > >>diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index > >>23fe5679cbd..7f80c31d051 100644 > >>--- a/gdb/dwarf2/read.c > >>+++ b/gdb/dwarf2/read.c > >>@@ -16491,6 +16491,49 @@ read_subroutine_type (struct die_info *die, > struct > >>dwarf2_cu *cu) > >> if (prototyped_function_p (die, cu)) > >> ftype->set_is_prototyped (true); > >> > >>+ /* If this is a trampoline function store it and its target here. */ > >>+ attr =3D dwarf2_attr (die, DW_AT_trampoline, cu); if (attr !=3D null= ptr) > >>+ { > >>+ CORE_ADDR baseaddr =3D objfile->text_section_offset (); > >>+ > >>+ TYPE_IS_TRAMPOLINE (ftype) =3D true; > >>+ TYPE_TRAMPOLINE_TARGET (ftype) > >>+ =3D (trampoline_target *) TYPE_ZALLOC (ftype, > >>+ sizeof > >>+ (trampoline_target)); > >>+ > >>+ /* A DW_AT_trampoline can be either an address, a flag, a refere= nce > or a > >>+ string. */ > >>+ if (attr->form_is_string ()) > >>+ TYPE_TRAMPOLINE_TARGET (ftype)->set_target_physname > >>+ (attr->as_string ()); > >>+ else if (attr->form_is_ref ()) > >>+ { > >>+ die_info *target_die; > >>+ dwarf2_cu *target_cu =3D cu; > >>+ > >>+ target_die =3D follow_die_ref (die, attr, &target_cu); > >>+ const char* target_name =3D dwarf2_name (target_die, target_c= u); > >>+ if (target_name =3D=3D nullptr) > >>+ { > >>+ complaint (_("DW_AT_trampoline target DIE has no name for" > >>+ "referencing DIE %s [in module %s]"), > >>+ sect_offset_str (die->sect_off), > >>+ objfile_name (objfile)); > >>+ } > >>+ TYPE_TRAMPOLINE_TARGET (ftype)->set_target_physname > >>(target_name); > >>+ } > >>+ else if (attr->form_is_unsigned ()) > >>+ TYPE_TRAMPOLINE_TARGET (ftype)->set_target_flag (attr- > >as_boolean ()); > >>+ else > >>+ { > >>+ CORE_ADDR target_addr =3D attr->as_address (); > >>+ target_addr =3D gdbarch_adjust_dwarf2_addr (objfile->arch (), > >>+ target_addr + basea= ddr); > >>+ TYPE_TRAMPOLINE_TARGET (ftype)->set_target_physaddr > (target_addr); > >>+ } > >>+ } > >>+ > >> /* Store the calling convention in the type if it's available in > >> the subroutine die. Otherwise set the calling convention to > >> the default value DW_CC_normal. */ diff --git a/gdb/gdbtypes.c > >>b/gdb/gdbtypes.c index c8f98554859..66e04882d48 100644 > >>--- a/gdb/gdbtypes.c > >>+++ b/gdb/gdbtypes.c > >>@@ -5205,6 +5205,31 @@ print_fixed_point_type_info (struct type > *type, int > >>spaces) > >> type->fixed_point_scaling_factor ().str ().c_str ()); } > >> > >>+/* Print the contents of the TYPE's self_trampoline_target, assuming t= hat > its > >>+ type-specific kind is TYPE_SPECIFIC_FUNC and is_trampoline is not 0. > >>+*/ static void print_trampoline_target_info (struct type *type, int > >>+spaces) { > >>+ switch (TYPE_TRAMPOLINE_TARGET (type)->target_kind ()) > >>+ { > >>+ case TRAMPOLINE_TARGET_PHYSADDR: > >>+ gdb_printf ("%*starget physaddr: 0x%lx\n", spaces + 2, "", > >>+ TYPE_TRAMPOLINE_TARGET (type)->target_physaddr ()); > >>+ break; > >>+ case TRAMPOLINE_TARGET_PHYSNAME: > >>+ gdb_printf ("%*starget physname: %s\n", spaces + 2, "", > >>+ TYPE_TRAMPOLINE_TARGET (type)->target_physname ()); > >>+ break; > >>+ case TRAMPOLINE_TARGET_FLAG: > >>+ gdb_printf ("%*starget flag: %d\n", spaces + 2, "", > >>+ TYPE_TRAMPOLINE_TARGET (type)->target_flag ()); > >>+ break; > >>+ default: > >>+ gdb_assert_not_reached ("unhandled trampoline target kind"); > >>+ break; > >>+ } > >>+} > >>+ > >> static struct obstack dont_print_type_obstack; > >> > >> /* Print the dynamic_prop PROP. */ > >>@@ -5531,6 +5556,10 @@ recursive_dump_type (struct type *type, int > spaces) > >> gdb_printf ("%*scalling_convention %d\n", spaces, "", > >> TYPE_CALLING_CONVENTION (type)); > >> /* tail_call_list is not printed. */ > >>+ gdb_printf ("%*sis_trampoline %d\n", spaces, "", > >>+ TYPE_IS_TRAMPOLINE (type)); > >>+ if (TYPE_IS_TRAMPOLINE (type)) > >>+ print_trampoline_target_info (type, spaces); > >> break; > >> > >> case TYPE_SPECIFIC_SELF_TYPE: > >>@@ -5762,6 +5791,8 @@ copy_type_recursive (struct objfile *objfile, > >> TYPE_CALLING_CONVENTION (new_type) =3D > TYPE_CALLING_CONVENTION > >>(type); > >> TYPE_NO_RETURN (new_type) =3D TYPE_NO_RETURN (type); > >> TYPE_TAIL_CALL_LIST (new_type) =3D NULL; > >>+ TYPE_IS_TRAMPOLINE (new_type) =3D TYPE_IS_TRAMPOLINE (type); > >>+ TYPE_TRAMPOLINE_TARGET (new_type) =3D > TYPE_TRAMPOLINE_TARGET > >>+ (type); > >> break; > >> case TYPE_SPECIFIC_FLOATFORMAT: > >> TYPE_FLOATFORMAT (new_type) =3D TYPE_FLOATFORMAT (type); diff -- > git > >>a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 7437e1db8ab..846de1289ad > 100644 > >>--- a/gdb/gdbtypes.h > >>+++ b/gdb/gdbtypes.h > >>@@ -1811,6 +1811,83 @@ struct func_type > >> contains the method. */ > >> > >> struct type *self_type; > >>+ > >>+ /* * For functions marked with the DW_AT_trampoline. These are > >>+ compiler generated wrappers that should be hidden from the user. > >>+ */ > >>+ > >>+ unsigned int is_trampoline : 1; > >>+ > >>+ struct trampoline_target *self_trampoline_target; }; > >>+ > >>+/* The kind of location held by this call site target. */ enum > >>+trampoline_target_kind > >>+ { > >>+ /* An address. */ > >>+ TRAMPOLINE_TARGET_PHYSADDR, > >>+ /* A (mangled) name. */ > >>+ TRAMPOLINE_TARGET_PHYSNAME, > >>+ /* An flag (target is unknown). */ > >>+ TRAMPOLINE_TARGET_FLAG, > >>+ }; > >>+ > >>+struct trampoline_target > >>+ { > >>+ trampoline_target_kind target_kind () const > >>+ { > >>+ return m_target_kind; > >>+ } > >>+ > >>+ void set_target_physaddr (CORE_ADDR physaddr) > >>+ { > >>+ m_target_kind =3D TRAMPOLINE_TARGET_PHYSADDR; > >>+ m_trampoline_target.physaddr =3D physaddr; > >>+ } > >>+ > >>+ CORE_ADDR target_physaddr () const > >>+ { > >>+ gdb_assert (m_target_kind =3D=3D TRAMPOLINE_TARGET_PHYSADDR); > >>+ return m_trampoline_target.physaddr; > >>+ } > >>+ > >>+ void set_target_physname (const char *physname) > >>+ { > >>+ m_target_kind =3D TRAMPOLINE_TARGET_PHYSNAME; > >>+ m_trampoline_target.physname =3D physname; > >>+ } > >>+ > >>+ const char *target_physname () const > >>+ { > >>+ gdb_assert (m_target_kind =3D=3D TRAMPOLINE_TARGET_PHYSNAME); > >>+ return m_trampoline_target.physname; > >>+ } > >>+ > >>+ void set_target_flag (bool flag) > >>+ { > >>+ m_target_kind =3D TRAMPOLINE_TARGET_FLAG; > >>+ m_trampoline_target.flag =3D flag; > >>+ } > >>+ > >>+ bool target_flag () const > >>+ { > >>+ gdb_assert (m_target_kind =3D=3D TRAMPOLINE_TARGET_FLAG); > >>+ return m_trampoline_target.flag; > >>+ } > >>+ > >>+ private: > >>+ > >>+ union > >>+ { > >>+ /* Address. */ > >>+ CORE_ADDR physaddr; > >>+ /* Mangled name. */ > >>+ const char *physname; > >>+ /* Flag. */ > >>+ bool flag; > >>+ } m_trampoline_target; > >>+ > >>+ /* * Discriminant for union m_trampoline_target. */ > >>+ ENUM_BITFIELD (trampoline_target_kind) m_target_kind : 2; > >> }; > >> > >> /* struct call_site_parameter can be referenced in callees by several > ways. */ > >>@@ -2172,6 +2249,8 @@ extern void set_type_vptr_basetype (struct > type *, > >>struct type *); #define TYPE_CALLING_CONVENTION(thistype) > >>TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff- > >calling_convention > >> #define TYPE_NO_RETURN(thistype) TYPE_MAIN_TYPE(thistype)- > >>>type_specific.func_stuff->is_noreturn > >> #define TYPE_TAIL_CALL_LIST(thistype) TYPE_MAIN_TYPE(thistype)- > >>>type_specific.func_stuff->tail_call_list > >>+#define TYPE_IS_TRAMPOLINE(thistype) > >>+TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->is_trampoline > >>+#define TYPE_TRAMPOLINE_TARGET(thistype) > >>+TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff- > >self_trampoline_tar > >>+get > >> #define TYPE_BASECLASS(thistype,index) ((thistype)->field (index).type > ()) > >>#define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)- > >>>n_baseclasses > >> #define TYPE_BASECLASS_NAME(thistype,index) (thistype->field > (index).name ()) > >>-- > >>2.25.1 > >> > >>Intel Deutschland GmbH > >>Registered Address: Am Campeon 10, 85579 Neubiberg, Germany > >>Tel: +49 89 99 8853-0, > >>https://nam11.safelinks.protection.outlook.com/?url=3Dhttp%3A%2F%2Fw > ww.int > >>el.de%2F&data=3D05%7C01%7CJiniSusan.George%40amd.com%7C9c3f > 28b5 > >>98cf49f888f908da601272a0%7C3dd8961fe4884e608e11a82d994e183d%7C0 > %7 > >>C0%7C637927929632561872%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC > 4wLj > >>AwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C > %7C > >>%7C&sdata=3DMBaQ7XpSZ4XFO963dnxF%2Fy1PD0gcx6k%2FjdaifxoSUa > Y%3D > >>&reserved=3D0 > >> ww.in > >>tel.de%2F&data=3D05%7C01%7CJiniSusan.George%40amd.com%7C9c3 > f28b5 > >>98cf49f888f908da601272a0%7C3dd8961fe4884e608e11a82d994e183d%7C0 > %7 > >>C0%7C637927929632561872%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC > 4wLj > >>AwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C > %7C > >>%7C&sdata=3DMBaQ7XpSZ4XFO963dnxF%2Fy1PD0gcx6k%2FjdaifxoSUa > Y%3D > >>&reserved=3D0> > >>Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Sil= va > >>Chairperson of the Supervisory Board: Nicole Lau Registered Office: > Munich > >>Commercial Register: Amtsgericht Muenchen HRB 186928 Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva = Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928