From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2040.outbound.protection.outlook.com [40.107.105.40]) by sourceware.org (Postfix) with ESMTPS id D4BFB3858D38 for ; Wed, 1 Feb 2023 09:40:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D4BFB3858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PmuE84sEXzCPTg0b84LA4gTJzYIPntjlE853udxgJaI=; b=tAGwS034ZF2i0Q6JhxSqP85KOwY1jf5Ir8JpZKrQ3UGwmgABqW+pv1kNZlVTpJwD3XPP5fp8f6woXl706Skk1dYuDaWviLcH33Yj8Tab796uyheEmJ8PpG94Ct3i14P3ojqVdYJTG8DHqsPFinHtHSm+n4PmkZeqBi4m5/RNaQE= Received: from DB8PR04CA0027.eurprd04.prod.outlook.com (2603:10a6:10:110::37) by PAXPR08MB7394.eurprd08.prod.outlook.com (2603:10a6:102:2bc::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.38; Wed, 1 Feb 2023 09:40:01 +0000 Received: from DBAEUR03FT042.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:110:cafe::e5) by DB8PR04CA0027.outlook.office365.com (2603:10a6:10:110::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.38 via Frontend Transport; Wed, 1 Feb 2023 09:40:01 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT042.mail.protection.outlook.com (100.127.142.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.36 via Frontend Transport; Wed, 1 Feb 2023 09:40:01 +0000 Received: ("Tessian outbound b1d3ffe56e73:v132"); Wed, 01 Feb 2023 09:40:00 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 7ffaaf5f515be7ed X-CR-MTA-TID: 64aa7808 Received: from 7aed261a9e1b.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 136715AE-542B-42D4-AA82-A3242CD121ED.1; Wed, 01 Feb 2023 09:39:54 +0000 Received: from EUR01-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 7aed261a9e1b.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 01 Feb 2023 09:39:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mEkI6CV/pIG8CuxMTs4Jq24om/FSB/u5B2ouAJaiscPVjYjfCdIzPk4dQ0315EdoYRgbsgEitMFVDLyuhB7BWi1uDa6M3iAfa2qVs9QIhhqsCJmM5oFzX40zhLbARBzteIL09gzrEqVPTpGvNMnE6EVjhytXPtDRg0lJ8URQ+LxzpFqdOD19g7gCrh2BGZ3mDxI18T1f5PTBiMQUbExJ4QbSYcVd9mH3pfNboq6POZUHJwNLOr4PEXvVKGXU+wcrg3akQcRdGW4rhItX6BpBto9NvEhv9ch4tny3Xkx9g1ALYs9jNFMrcVTJy8HXPpI+Uub4ZheAFYUVTXVMJvb+/A== 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=PmuE84sEXzCPTg0b84LA4gTJzYIPntjlE853udxgJaI=; b=d0eBMrUb0UL2wzD4xx8NtnXeKAPsbyoynxfOQLg9AFioJgBvjMe2UCfkIDMXmlvlFhCQ1QGBoguk2P181yH+AIhvzRvCLJtGZmkDBuwSQtM1Ku3+8wFtiLBE2z8umgj2X3fc0fX2ShH/xubLkotO1h7TNYnULGqBL2advZqV0fcbGoqItunNgzl/7poIW4wf4VzXSIQdyQp9vfhVdzYPbSspijSY3dOQs6KSYJbg4YvzcN6kKyDYWdfPPzd6qwhrbCMU4Zo2r0gnnsF2FqYMh7KLZL9Ui4y6FyG/vyghSveSSXZ62rlppmJhiRrLjFDLc+Bp2NokLOfCENxiaWbjQQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PmuE84sEXzCPTg0b84LA4gTJzYIPntjlE853udxgJaI=; b=tAGwS034ZF2i0Q6JhxSqP85KOwY1jf5Ir8JpZKrQ3UGwmgABqW+pv1kNZlVTpJwD3XPP5fp8f6woXl706Skk1dYuDaWviLcH33Yj8Tab796uyheEmJ8PpG94Ct3i14P3ojqVdYJTG8DHqsPFinHtHSm+n4PmkZeqBi4m5/RNaQE= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) by GV1PR08MB8403.eurprd08.prod.outlook.com (2603:10a6:150:8a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.24; Wed, 1 Feb 2023 09:39:45 +0000 Received: from VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::bced:32a3:b77e:90a6]) by VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::bced:32a3:b77e:90a6%3]) with mapi id 15.20.6043.036; Wed, 1 Feb 2023 09:39:44 +0000 Message-ID: <8f12f725-4d8b-ef1c-0133-314e3ede6004@arm.com> Date: Wed, 1 Feb 2023 09:39:40 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v3 5/8] gdbserver: Transmit target description ID in thread list and stop reply Content-Language: en-US To: Thiago Jung Bauermann , gdb-patches@sourceware.org Cc: Simon Marchi References: <20230130044518.3322695-1-thiago.bauermann@linaro.org> <20230130044518.3322695-6-thiago.bauermann@linaro.org> From: Luis Machado In-Reply-To: <20230130044518.3322695-6-thiago.bauermann@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO2P265CA0112.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:c::28) To VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB3919:EE_|GV1PR08MB8403:EE_|DBAEUR03FT042:EE_|PAXPR08MB7394:EE_ X-MS-Office365-Filtering-Correlation-Id: 94cf5855-2908-495e-fe31-08db04384a0f x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: zarg63rvYWRj81qpojfihc7cPWSLFEx6kFE1wxNCe/HHCkcOuz67N0RfuBeQy7j/J1NXqJIw06UwHgJqEP3MQgvAxVI+JKedMqTrRStJ/deUnGowswroytGA2tjwJj3EpsPU7KfDINOAn4n7D2HC6bXoMIhbGKzjB8ykb11Vr/jsiszP7Ws7DRdte00l43I6RGlsq3LPpUvrrh4z++DFsNGfRHlWlZzHeXzPXWljGFW1F0pzJSplsw6JQ8PTMTXp9sLJKkDKhAl2qgnykYWRWfFVeqaQXnk3F5PN52unME2Peh29X0QjjBYRV2+nC1R6VVgktJmdyubImQyRja69NLc8Cn77HcTpGUbFc3uRBkmp/vkKxHiQtdozG5GgKYQZpxtz4voKpOrdiIo5kobyO5tRtkTOTSRGPPgyJxHbHvyWt8m2oOR4ruvYnCf113tETAquzd4IlENewgTND3RTf9UcKRvSd62ddDzGj0PWzxcVnePjCx1xaTwHAadbW+wtx9cVdAzWLIgzV0TKG5lFrgjNGNeUosikTdS7Qnk3y9R4//QLqQw+vLJm5XTymn+/R4foVzWPRl5OL/nJtpzFjVptxHl10WnBs1C/iwyXJzH5n1FaM+B3NASM0omgN+LkH8MMz9zxvvalQ47ii2/PteB9GIAqmlhqAPTEeeNFR619S5a0DG10wxeoeAg6kd2h2PADkz6hBjDqe1zAehGXaCIllajL1QnmhUlLUOg4ONo= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB3919.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(376002)(136003)(39860400002)(366004)(346002)(396003)(451199018)(2906002)(6486002)(478600001)(5660300002)(8936002)(316002)(44832011)(36756003)(41300700001)(66476007)(66946007)(66556008)(8676002)(4326008)(83380400001)(86362001)(31696002)(53546011)(6506007)(38100700002)(2616005)(26005)(186003)(6512007)(31686004)(6666004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB8403 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 8e4edd3c-4c48-46b1-19c2-08db04383fb1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0izLgyJv0hzDBqVflecNqrw6W0I4WQMwBLapq37d4gHqZfLcwIVzSG4P/rmjDohUd9T/2BKn8qQc3dkSc5vtS5N5CXfKowhO7lLVsG7/lCmSZuCwHyROxCwb7irQkctQPlpOgHg6VsvYHy5gXCWNpGI59XMlgFRweaoYLU8/GAoIsuTjkEA3iwFn419QkjRhhTPIHSb2O80Z324V5BmD9fzQfvCOTpGuueVylW/2f1FK7+RYDwlhKTBoqQK0VT2f0O70e6XOZkeqoO2kTmmliqqtQ+BUtZbP1VRq35l2FRcygq//hIyNuqBqiBivoTkB/HY1dKQTw6IAZj7vqHDh1zUq7DaXDDhVKiFzU5qQjF0TNOudVXTmiyBpMlyFXtgHX34z7+jKALu7THCX6N9eM5YWvoqdQtEQhZoq211cdP0TvClmfulDiHg1UTn+BXzM7PXpj8Z2BJ59CEBlXqY97Un/nLv1EfPZlOMViQDD3YN4R9+QO/gsk1NuUyoyxyZec7CcJcSSxTAF5q8FitnqaajVazlhLcj1DaaLamyaj7KvOUw3w2JTVhTbkPggB6S37cOovoXU7E/2k/NZibqBk4ujV2k88xG3ftTmuPGa5MaapQTCq6ikWJxVQNTLcwgoiVFL+bvpqfTBwmpJ8Xthy4DQe5LVwxK4fOBTXvq98PoFB6QR5ZzpyUGxjZTLT+Ue/GH7cIx4sWtqD9iuu5cOLu4fW+zA26nkbKGhzp7oIdU4XH/v7RyfjzDoc0O52J1iZfHfAN2xkZJMAdRhrkC04XaToklPJ7SmLL2LpAwkdMw= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230025)(4636009)(396003)(376002)(346002)(136003)(39860400002)(451199018)(46966006)(36840700001)(40470700004)(6666004)(107886003)(478600001)(41300700001)(2616005)(6486002)(336012)(31686004)(186003)(26005)(6512007)(6506007)(53546011)(70586007)(316002)(70206006)(40460700003)(83380400001)(8676002)(4326008)(82740400003)(81166007)(2906002)(8936002)(36860700001)(5660300002)(36756003)(82310400005)(47076005)(356005)(31696002)(40480700001)(44832011)(86362001)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Feb 2023 09:40:01.0298 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 94cf5855-2908-495e-fe31-08db04384a0f X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB7394 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY 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: This looks good. Thanks. Just a nit below. On 1/30/23 04:45, Thiago Jung Bauermann via Gdb-patches wrote: > Now that an inferior thread can have a different target description than > its process, there needs to be a way to communicate this target > description to GDB. So add the concept of a target description ID to the > remote protocol, which is used to reference them and allows them to be > transferred only once over the wire. > > The ID is an unsigned integer, and is sent in the 'T AA n1:r1;n2:r2;...' > stop reply packet as a new 'n:r' pair, where n is "tdesc" and "r" is an > unsigned integer containing the ID. > > It is also sent in the threads list XML in the response of a > qXfer:threads:read request. The ID is sent as a new "tdesc" attribute of > the node. > > To request the target description XML of a given ID, GDB sends the > qXfer:features:read request with "target-id-%u.xml" as the annex, where %u > is the target description ID. > > Suggested-By: Simon Marchi > --- > gdb/doc/gdb.texinfo | 27 ++++++++++++++++--- > gdbserver/remote-utils.cc | 57 +++++++++++++++++++++++++++++++++++++++ > gdbserver/remote-utils.h | 9 +++++++ > gdbserver/server.cc | 17 ++++++++++-- > gdbserver/server.h | 4 +++ > 5 files changed, 109 insertions(+), 5 deletions(-) > > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo > index 9c0018ea5c14..fbf7e59853b5 100644 > --- a/gdb/doc/gdb.texinfo > +++ b/gdb/doc/gdb.texinfo > @@ -42030,6 +42030,10 @@ the stopped thread, as specified in @ref{thread-id syntax}. > If @var{n} is @samp{core}, then @var{r} is the hexadecimal number of > the core on which the stop event was detected. > > +@item > +If @var{n} is @samp{tdesc}, then @var{r} is the hexadecimal number of > +the target description ID (@pxref{Target Description ID}). > + Above we mention that it is hexadecimal, but ... > @item > If @var{n} is a recognized @dfn{stop reason}, it describes a more > specific event that stopped the target. The currently defined stop > @@ -46546,7 +46550,7 @@ the following structure: > @smallexample > > > - > + > ... description ... > > > @@ -46556,8 +46560,10 @@ Each @samp{thread} element must have the @samp{id} attribute that > identifies the thread (@pxref{thread-id syntax}). The > @samp{core} attribute, if present, specifies which processor core > the thread was last executing on. The @samp{name} attribute, if > -present, specifies the human-readable name of the thread. The content > -of the of @samp{thread} element is interpreted as human-readable > +present, specifies the human-readable name of the thread. The > +@samp{tdesc} attribute, if present, specifies the target description > +ID of the thread (@pxref{Target Description ID}). The content of > +the @samp{thread} element is interpreted as human-readable > auxiliary information. The @samp{handle} attribute, if present, > is a hex encoded representation of the thread handle. ... what about the id being passed via the qXfer:threads:read? Should it be hex or decimal? Might be nice to clarify so implementors have a clear understanding. > > @@ -46767,6 +46773,8 @@ descriptions are accurate, and that @value{GDBN} understands them. > target descriptions. @xref{Expat}. > > @menu > +* Target Description ID:: Referencing different descriptions in the > + remote protocol. > * Retrieving Descriptions:: How descriptions are fetched from a target. > * Target Description Format:: The contents of a target description. > * Predefined Target Types:: Standard types available for target > @@ -46775,6 +46783,14 @@ target descriptions. @xref{Expat}. > * Standard Target Features:: Features @value{GDBN} knows about. > @end menu > > +@node Target Description ID > +@section Target Description ID > + > +In cases where a remote target supports threads having different > +target descriptions than their parent process, the remote protocol > +assigns a non-negative integer to each target description to reference > +it in the communication between the host and the target. > + > @node Retrieving Descriptions > @section Retrieving Descriptions > > @@ -46787,6 +46803,11 @@ qXfer}). The @var{annex} in the @samp{qXfer} packet will be > XML document, of the form described in @ref{Target Description > Format}. > > +If target description IDs are being used (@pxref{Target Description ID}), > +@value{GDBN} can retrieve a target description with a given ID by using > +@samp{target-id-ID.xml} as the @var{annex}, where @var{ID} is the > +non-negative integer identifier of the desired target description. > + Same case in here. Should id be a regular integer or its hex representation? From reading the code, it seems the two cases above should really be integers, so the text is fine. But we want to make sure whoever is implementing the changes gets it right. > Alternatively, you can specify a file to read for the target description. > If a file is set, the target will not be queried. The commands to > specify a file are: > diff --git a/gdbserver/remote-utils.cc b/gdbserver/remote-utils.cc > index 80310bc2c709..baff899307cc 100644 > --- a/gdbserver/remote-utils.cc > +++ b/gdbserver/remote-utils.cc > @@ -1049,6 +1049,53 @@ outreg (struct regcache *regcache, int regno, char *buf) > return buf; > } > > +/* See remote-utils.h. */ > + > +unsigned int > +get_tdesc_rsp_id (const target_desc *tdesc) > +{ > + client_state &cs = get_client_state (); > + unsigned int i; > + > + for (i = 0; i < cs.tdescs.size (); i++) > + if (cs.tdescs[i] == tdesc) > + return i; > + > + cs.tdescs.push_back (tdesc); > + > + return i; > +} > + > +/* See remote-utils.h. */ > + > +const target_desc * > +get_tdesc_from_rsp_id (unsigned int id) > +{ > + client_state &cs = get_client_state (); > + > + if (id >= cs.tdescs.size ()) > + return nullptr; > + > + return cs.tdescs[id]; > +} > + > +/* Return the ID as used in the remote protocol for the target descriptor of the > + given PTID. */ > + > +static unsigned int > +get_tdesc_rsp_id (ptid_t ptid) > +{ > + const thread_info *thread = find_thread_ptid (ptid); > + const target_desc *tdesc; > + > + if (thread == nullptr) > + tdesc = find_process_pid (ptid.pid ())->tdesc; > + else > + tdesc = get_thread_target_desc (thread); > + > + return get_tdesc_rsp_id (tdesc); > +} > + > void > prepare_resume_reply (char *buf, ptid_t ptid, const target_waitstatus &status) > { > @@ -1241,6 +1288,16 @@ prepare_resume_reply (char *buf, ptid_t ptid, const target_waitstatus &status) > buf += strlen (buf); > current_process ()->dlls_changed = false; > } > + > + if (current_thread->tdesc != nullptr > + && current_thread->tdesc != current_process ()->tdesc) > + { > + sprintf (buf, "tdesc:"); > + buf += strlen (buf); > + sprintf (buf, "%x", get_tdesc_rsp_id (ptid)); > + strcat (buf, ";"); > + buf += strlen (buf); > + } > } > break; > case TARGET_WAITKIND_EXITED: > diff --git a/gdbserver/remote-utils.h b/gdbserver/remote-utils.h > index cb2d6c346c99..61ef80b4dad7 100644 > --- a/gdbserver/remote-utils.h > +++ b/gdbserver/remote-utils.h > @@ -75,4 +75,13 @@ int relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc); > > void monitor_output (const char *msg); > > +/* Return the ID as used in the remote protocol for the given target > + descriptor. */ > + > +unsigned int get_tdesc_rsp_id (const target_desc *tdesc); > + > +/* Return the target description corresponding to the remote protocol ID. */ > + > +const target_desc *get_tdesc_from_rsp_id (unsigned int id); > + > #endif /* GDBSERVER_REMOTE_UTILS_H */ > diff --git a/gdbserver/server.cc b/gdbserver/server.cc > index 21fb51a45d16..2d1062f98468 100644 > --- a/gdbserver/server.cc > +++ b/gdbserver/server.cc > @@ -976,7 +976,15 @@ handle_general_set (char *own_buf) > static const char * > get_features_xml (const char *annex) > { > - const struct target_desc *desc = current_target_desc (); > + const struct target_desc *desc; > + unsigned int id; > + > + if (strcmp (annex, "target.xml") == 0) > + desc = current_target_desc (); > + else if (sscanf (annex, "target-id-%u.xml", &id) == 1) > + desc = get_tdesc_from_rsp_id (id); > + else > + desc = nullptr; > > /* `desc->xmltarget' defines what to return when looking for the > "target.xml" file. Its contents can either be verbatim XML code > @@ -986,7 +994,7 @@ get_features_xml (const char *annex) > This variable is set up from the auto-generated > init_registers_... routine for the current target. */ > > - if (strcmp (annex, "target.xml") == 0) > + if (desc != nullptr) > { > const char *ret = tdesc_get_features_xml (desc); > > @@ -1664,6 +1672,11 @@ handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer) > if (name != NULL) > buffer_xml_printf (buffer, " name=\"%s\"", name); > > + if (thread->tdesc != nullptr > + && thread->tdesc != get_thread_process (thread)->tdesc) > + buffer_xml_printf (buffer, " tdesc=\"%u\"", > + get_tdesc_rsp_id (thread->tdesc)); > + > if (handle_status) > { > char *handle_s = (char *) alloca (handle_len * 2 + 1); > diff --git a/gdbserver/server.h b/gdbserver/server.h > index 7997d1a32e6e..58be5027795b 100644 > --- a/gdbserver/server.h > +++ b/gdbserver/server.h > @@ -193,6 +193,10 @@ struct client_state > /* If true, memory tagging features are supported. */ > bool memory_tagging_feature = false; > > + /* The target descriptions that have been communicated to the client. The > + index of a target description in this vector is the ID used to reference it > + in the remote protocol. */ > + std::vector tdescs; > }; > > client_state &get_client_state (); Otherwise LGTM. Reviewed-by: Luis Machado