From nobody Wed Nov 5 18:32:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1535806396284637.0537348882668; Sat, 1 Sep 2018 05:53:16 -0700 (PDT) Received: from localhost ([::1]:37064 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fw5Ot-0002px-6Y for importer@patchew.org; Sat, 01 Sep 2018 08:53:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35490) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fw5JE-0004tP-Ab for qemu-devel@nongnu.org; Sat, 01 Sep 2018 08:47:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fw5JC-0007oo-VW for qemu-devel@nongnu.org; Sat, 01 Sep 2018 08:47:24 -0400 Received: from greensocs.com ([193.104.36.180]:40637) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fw5J6-0007kF-L0; Sat, 01 Sep 2018 08:47:16 -0400 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id EAD14DFFE0; Sat, 1 Sep 2018 14:47:08 +0200 (CEST) Received: from greensocs.com ([127.0.0.1]) by localhost (gs-01.greensocs.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Iq_ycgfIiixv; Sat, 1 Sep 2018 14:47:08 +0200 (CEST) Received: by greensocs.com (Postfix, from userid 998) id 028EC521AAF; Sat, 1 Sep 2018 14:47:07 +0200 (CEST) Received: from michell-laptop.home.lmichel.fr (LFbn-LYO-1-488-36.w2-7.abo.wanadoo.fr [2.7.77.36]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: luc.michel@greensocs.com) by greensocs.com (Postfix) with ESMTPSA id 43F3D521A9F; Sat, 1 Sep 2018 14:47:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1535806029; bh=NjQ3rZmHdKpW6ybJVivC+BqNnipQ91j4rFLMZTWMRpE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=A4MAELlUi82zMmuRpmk9TI8YY/i9lM3BCLb2dOY4wPG8ndFUzz8l7cjy9p8dhsOiF L0sHqcCx/43h4GX0yzR+7xR5+w4R1O3LbRbJ5UCEfytPmSvs/+3gJxnaBM54R07Zn9 Xwut7Rea5bpnxDxl67HJk8WlAx1KDfwIU9hCPza4= X-Virus-Scanned: amavisd-new at greensocs.com Authentication-Results: gs-01.greensocs.com (amavisd-new); dkim=pass (1024-bit key) header.d=greensocs.com header.b=R/I/GS9n; dkim=pass (1024-bit key) header.d=greensocs.com header.b=GTF9pr7M DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1535806028; bh=NjQ3rZmHdKpW6ybJVivC+BqNnipQ91j4rFLMZTWMRpE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=R/I/GS9n2qz/NhMwvMb8k55TZCoNDq7IwtMnezCZrahzQgC4vEMFwy8kuGDJg92WI iOF6FRjgfTn2q8N2pMXCix83p/vB6OuPGV1VsVGyHV9X7rJHgJ7nIkaeGtKWxPdb0S sFFEt9U42bTC+orhQvQDcslWQ01kTWgQesvw03h4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1535806027; bh=NjQ3rZmHdKpW6ybJVivC+BqNnipQ91j4rFLMZTWMRpE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GTF9pr7Mcnj7WUoRE2pZ26keWA/xzMN1Fm5Pc96X6iAaHAti7ekJqLH4DZZLmKH5O I2X4yiqX18J4MGE0JgW9Gyr4pmT5dwdyCEjSp1PrfBS0BL6oyyzd9Z0+Z4a0ecY58p ywdADreSauykDdPFhJ6fDKf34QphgiyVk82NwdyA= From: Luc Michel To: qemu-devel@nongnu.org Date: Sat, 1 Sep 2018 14:46:31 +0200 Message-Id: <20180901124639.19735-8-luc.michel@greensocs.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180901124639.19735-1-luc.michel@greensocs.com> References: <20180901124639.19735-1-luc.michel@greensocs.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH 07/15] gdbstub: add multiprocess support to Xfer:features:read: X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , alistair@alistair23.me, mark.burton@greensocs.com, saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (found 3 invalid signatures) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Change the Xfer:features:read: packet handling to support the multiprocess extension. This packet is used to request the XML description of the CPU. In multiprocess mode, different descriptions can be sent for different processes. This function now takes the process to send the description for as a parameter, and use a buffer in the process structure to store the generated description. It takes the first CPU of the process to generate the description. Signed-off-by: Luc Michel --- gdbstub.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 43015f7792..761cb051c8 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -792,55 +792,57 @@ static CPUState *gdb_first_cpu(const GDBState *s) } =20 return cpu; } =20 -static const char *get_feature_xml(const char *p, const char **newp, - CPUClass *cc) +static const char *get_feature_xml(const GDBState *s, const char *p, + const char **newp, GDBProcess *process) { size_t len; int i; const char *name; - static char target_xml[1024]; + CPUState *cpu =3D get_first_cpu_in_process(s, process); + CPUClass *cc =3D CPU_GET_CLASS(cpu); =20 len =3D 0; while (p[len] && p[len] !=3D ':') len++; *newp =3D p + len; =20 name =3D NULL; if (strncmp(p, "target.xml", len) =3D=3D 0) { + char *buf =3D process->target_xml; + const size_t buf_sz =3D sizeof(process->target_xml); + /* Generate the XML description for this CPU. */ - if (!target_xml[0]) { + if (!buf[0]) { GDBRegisterState *r; - CPUState *cpu =3D first_cpu; =20 - pstrcat(target_xml, sizeof(target_xml), + pstrcat(buf, buf_sz, "" "" ""); if (cc->gdb_arch_name) { gchar *arch =3D cc->gdb_arch_name(cpu); - pstrcat(target_xml, sizeof(target_xml), ""); - pstrcat(target_xml, sizeof(target_xml), arch); - pstrcat(target_xml, sizeof(target_xml), ""); + pstrcat(buf, buf_sz, ""); + pstrcat(buf, buf_sz, arch); + pstrcat(buf, buf_sz, ""); g_free(arch); } - pstrcat(target_xml, sizeof(target_xml), "gdb_core_xml_file); - pstrcat(target_xml, sizeof(target_xml), "\"/>"); + pstrcat(buf, buf_sz, "gdb_core_xml_file); + pstrcat(buf, buf_sz, "\"/>"); for (r =3D cpu->gdb_regs; r; r =3D r->next) { - pstrcat(target_xml, sizeof(target_xml), "xml); - pstrcat(target_xml, sizeof(target_xml), "\"/>"); + pstrcat(buf, buf_sz, "xml); + pstrcat(buf, buf_sz, "\"/>"); } - pstrcat(target_xml, sizeof(target_xml), ""); + pstrcat(buf, buf_sz, ""); } - return target_xml; + return buf; } if (cc->gdb_get_dynamic_xml) { - CPUState *cpu =3D first_cpu; char *xmlname =3D g_strndup(p, len); const char *xml =3D cc->gdb_get_dynamic_xml(cpu, xmlname); =20 g_free(xmlname); if (xml) { @@ -1247,10 +1249,11 @@ out: } =20 static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; + GDBProcess *process; CPUClass *cc; const char *p; uint32_t pid, tid; int ch, reg_size, type, res; uint8_t mem_buf[MAX_PACKET_LENGTH]; @@ -1621,18 +1624,19 @@ static int gdb_handle_packet(GDBState *s, const cha= r *line_buf) } if (strncmp(p, "Xfer:features:read:", 19) =3D=3D 0) { const char *xml; target_ulong total_len; =20 - cc =3D CPU_GET_CLASS(first_cpu); + process =3D gdb_get_cpu_process(s, s->g_cpu); + cc =3D CPU_GET_CLASS(s->g_cpu); if (cc->gdb_core_xml_file =3D=3D NULL) { goto unknown_command; } =20 gdb_has_xml =3D true; p +=3D 19; - xml =3D get_feature_xml(p, &p, cc); + xml =3D get_feature_xml(s, p, &p, process); if (!xml) { snprintf(buf, sizeof(buf), "E00"); put_packet(s, buf); break; } --=20 2.18.0