From patchwork Tue Nov 6 11:05:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670109 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 243FE15A6 for ; Tue, 6 Nov 2018 11:11:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 130EE2A2A4 for ; Tue, 6 Nov 2018 11:11:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 072902A2B2; Tue, 6 Nov 2018 11:11:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DFA872A2A4 for ; Tue, 6 Nov 2018 11:11:17 +0000 (UTC) Received: from localhost ([::1]:40325 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzGP-0003xN-5t for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:11:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48952) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBk-0006QP-Vm for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBf-0000vi-0X for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:28 -0500 Received: from greensocs.com ([193.104.36.180]:46660) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBT-0000nN-HV; Tue, 06 Nov 2018 06:06:11 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 3097D5C0278; Tue, 6 Nov 2018 12:06:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502369; bh=MxbKaNPQK1NN8a+G9jf/26t1f3PDDIZbSdujeWwAJmE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=KqX/g044FhMkvigUvT+SkJoSnE/pb9nv7wfDi++en6uFTg0XRZOMHZ/wsbz5+YZVQ OJ1BTA/G5P6zMZQrSmxa9cSBuG0YW1AsbxZvAWs9SVdWIDgY+S5Th9fK1mYRG9rytD lHoldbQm0SNR48bbpdwLMwD/zSp4cRli3Nxd8oYc= 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=K5lY2yjT; dkim=pass (1024-bit key) header.d=greensocs.com header.b=ixawxQ5p 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 xr6Ah43N669x; Tue, 6 Nov 2018 12:06:05 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 0F50C441B53; Tue, 6 Nov 2018 12:06:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502365; bh=MxbKaNPQK1NN8a+G9jf/26t1f3PDDIZbSdujeWwAJmE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=K5lY2yjTE/ChuweE12Uz7RvYZsWFYKR/aOX3LIVyNiRzDZzQqa94Q8MHzbjZuYUJ1 vy9OH/XDrHwGin53Mdtz8uVlxMnro+xa9WpUUa6XIaYKnhlTN6czlkASeHOlky9L1J 9NUCDOu1WwodqzCzZ7jeGei73VdKeUKvJwjH0cXY= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 9AA464F7670; Tue, 6 Nov 2018 12:06:04 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502364; bh=MxbKaNPQK1NN8a+G9jf/26t1f3PDDIZbSdujeWwAJmE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ixawxQ5peUoPSxYlqDrGuzm464/A3PyybQfK1EgKPtFQ4H8PmnTa03e9qO/1IFmsz l8aFkWqoWOC2NZBprd+A27hnUJJaPbOSHKmYqKSB4+19t4quMtqehI77sBTaufbAcx eJvJOMkz+V20spvtRlej0lzq4sp0aNmcBZGNl6eQ= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:33 +0100 Message-Id: <20181106110548.4209-2-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 01/16] hw/cpu: introduce CPU clusters 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP This commit adds the cpu-cluster type. It aims at gathering CPUs from the same cluster in a machine. For now it only has a `cluster-id` property. Signed-off-by: Luc Michel Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé --- include/hw/cpu/cluster.h | 38 ++++++++++++++++++++++++++ hw/cpu/cluster.c | 59 ++++++++++++++++++++++++++++++++++++++++ hw/cpu/Makefile.objs | 2 +- 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 include/hw/cpu/cluster.h create mode 100644 hw/cpu/cluster.c diff --git a/include/hw/cpu/cluster.h b/include/hw/cpu/cluster.h new file mode 100644 index 0000000000..0e5f121ec2 --- /dev/null +++ b/include/hw/cpu/cluster.h @@ -0,0 +1,38 @@ +/* + * QEMU CPU cluster + * + * Copyright (c) 2018 GreenSocs SAS + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see + * + */ +#ifndef HW_CPU_CLUSTER_H +#define HW_CPU_CLUSTER_H + +#include "qemu/osdep.h" +#include "hw/qdev.h" + +#define TYPE_CPU_CLUSTER "cpu-cluster" +#define CPU_CLUSTER(obj) \ + OBJECT_CHECK(CPUClusterState, (obj), TYPE_CPU_CLUSTER) + +typedef struct CPUClusterState { + /*< private >*/ + DeviceState parent_obj; + + /*< public >*/ + uint64_t cluster_id; +} CPUClusterState; + +#endif diff --git a/hw/cpu/cluster.c b/hw/cpu/cluster.c new file mode 100644 index 0000000000..a23d55054a --- /dev/null +++ b/hw/cpu/cluster.c @@ -0,0 +1,59 @@ +/* + * QEMU CPU cluster + * + * Copyright (c) 2018 GreenSocs SAS + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see + * + */ + +#include "qemu/osdep.h" +#include "hw/cpu/cluster.h" +#include "qapi/error.h" +#include "qemu/module.h" + +static void cpu_cluster_init(Object *obj) +{ + static uint64_t cluster_id_auto_increment = 0; + CPUClusterState *cluster = CPU_CLUSTER(obj); + + cluster->cluster_id = cluster_id_auto_increment++; +} + +static Property cpu_cluster_properties[] = { + DEFINE_PROP_UINT64("cluster-id", CPUClusterState, cluster_id, 0), + DEFINE_PROP_END_OF_LIST() +}; + +static void cpu_cluster_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + + dc->props = cpu_cluster_properties; +} + +static const TypeInfo cpu_cluster_type_info = { + .name = TYPE_CPU_CLUSTER, + .parent = TYPE_DEVICE, + .instance_size = sizeof(CPUClusterState), + .instance_init = cpu_cluster_init, + .class_init = cpu_cluster_class_init, +}; + +static void cpu_cluster_register_types(void) +{ + type_register_static(&cpu_cluster_type_info); +} + +type_init(cpu_cluster_register_types) diff --git a/hw/cpu/Makefile.objs b/hw/cpu/Makefile.objs index cd52d20b65..8db9e8a7b3 100644 --- a/hw/cpu/Makefile.objs +++ b/hw/cpu/Makefile.objs @@ -1,5 +1,5 @@ obj-$(CONFIG_ARM11MPCORE) += arm11mpcore.o obj-$(CONFIG_REALVIEW) += realview_mpcore.o obj-$(CONFIG_A9MPCORE) += a9mpcore.o obj-$(CONFIG_A15MPCORE) += a15mpcore.o -common-obj-y += core.o +common-obj-y += core.o cluster.o From patchwork Tue Nov 6 11:05:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670101 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1C55E1751 for ; Tue, 6 Nov 2018 11:08:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0B3882A333 for ; Tue, 6 Nov 2018 11:08:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F18F92A345; Tue, 6 Nov 2018 11:08:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5E9B42A333 for ; Tue, 6 Nov 2018 11:08:20 +0000 (UTC) Received: from localhost ([::1]:40307 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzDX-0000Zo-H1 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:08:19 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48955) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBk-0006QR-W5 for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBf-0000vo-0k for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:28 -0500 Received: from greensocs.com ([193.104.36.180]:46661) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBT-0000nO-HR; Tue, 06 Nov 2018 06:06:11 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 9951E5C026C; Tue, 6 Nov 2018 12:06:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502366; bh=r3G67lVVAUL9k1D9HU6njTCRV6L0gyLUDtK2xzj7t6M=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=qSj146B+P44Yd5S3TuRPE/fgOUmUs/q4rjE3yBWlYVf1NHdFS0D1zEfjnmTZfu6cx DboWyHB1vwhlQ6Vg+4WuJzBUckOH2ZdErzmu8hjmHGZarawfeM9HGxmGZj0D/UOG1c e0rrCEoqHWo9P1dGO3DT81iaiHJr2ChMcNnrP2dI= 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=adklGltB; dkim=pass (1024-bit key) header.d=greensocs.com header.b=adklGltB 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 UKDzH7RUsh-k; Tue, 6 Nov 2018 12:06:05 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 732A65C024F; Tue, 6 Nov 2018 12:06:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502365; bh=r3G67lVVAUL9k1D9HU6njTCRV6L0gyLUDtK2xzj7t6M=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=adklGltBUSKkjLalOKKqHyaeAhRLFAGKJu7wLWfjRpobaTS2OKyIkvI600f7DrjHu oNPVS28mQXbxlHYqwXfCOghR5i57xnHs0Sc2OYH64L13SW1eVnztrOYFnstMSDF1zU Ur3hsiNJSN3nHq4wVnMau9C0LnX35TAoKhSLcMF8= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 114B64F7670; Tue, 6 Nov 2018 12:06:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502365; bh=r3G67lVVAUL9k1D9HU6njTCRV6L0gyLUDtK2xzj7t6M=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=adklGltBUSKkjLalOKKqHyaeAhRLFAGKJu7wLWfjRpobaTS2OKyIkvI600f7DrjHu oNPVS28mQXbxlHYqwXfCOghR5i57xnHs0Sc2OYH64L13SW1eVnztrOYFnstMSDF1zU Ur3hsiNJSN3nHq4wVnMau9C0LnX35TAoKhSLcMF8= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:34 +0100 Message-Id: <20181106110548.4209-3-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 02/16] gdbstub: introduce GDB processes 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add a structure GDBProcess that represent processes from the GDB semantic point of view. CPUs can be split into different processes, by grouping them under different cpu-cluster objects. Each occurrence of a cpu-cluster object implies the existence of the corresponding process in the GDB stub. The GDB process ID is derived from the corresponding cluster ID as follows: GDB PID = cluster ID + 1 This is because PIDs -1 and 0 are reserved in GDB and cannot be used by processes. When no such container are found, all the CPUs are put in a unique GDB process (create_unique_process()). This is also the case when compiled in user mode, where multi-processes do not make much sense for now. Signed-off-by: Luc Michel Acked-by: Alistair Francis --- gdbstub.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index c4e4f9f082..0d70b89598 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -27,10 +27,11 @@ #include "monitor/monitor.h" #include "chardev/char.h" #include "chardev/char-fe.h" #include "sysemu/sysemu.h" #include "exec/gdbstub.h" +#include "hw/cpu/cluster.h" #endif #define MAX_PACKET_LENGTH 4096 #include "qemu/sockets.h" @@ -294,10 +295,15 @@ typedef struct GDBRegisterState { gdb_reg_cb set_reg; const char *xml; struct GDBRegisterState *next; } GDBRegisterState; +typedef struct GDBProcess { + uint32_t pid; + bool attached; +} GDBProcess; + enum RSState { RS_INACTIVE, RS_IDLE, RS_GETLINE, RS_GETLINE_ESC, @@ -322,10 +328,13 @@ typedef struct GDBState { int running_state; #else CharBackend chr; Chardev *mon_chr; #endif + bool multiprocess; + GDBProcess *processes; + int process_num; char syscall_buf[256]; gdb_syscall_complete_cb current_syscall_cb; } GDBState; /* By default use no IRQs and no timers while single stepping so as to @@ -1749,10 +1758,24 @@ void gdb_exit(CPUArchState *env, int code) #ifndef CONFIG_USER_ONLY qemu_chr_fe_deinit(&s->chr, true); #endif } +/* + * Create a unique process containing all the CPUs. + */ +static void create_unique_process(GDBState *s) +{ + GDBProcess *process; + + s->processes = g_malloc0(sizeof(GDBProcess)); + s->process_num = 1; + process = &s->processes[0]; + + process->pid = 1; +} + #ifdef CONFIG_USER_ONLY int gdb_handlesig(CPUState *cpu, int sig) { GDBState *s; @@ -1846,10 +1869,11 @@ static bool gdb_accept(void) } s = g_malloc0(sizeof(GDBState)); s->c_cpu = first_cpu; s->g_cpu = first_cpu; + create_unique_process(s); s->fd = fd; gdb_has_xml = false; gdbserver_state = s; return true; @@ -2002,10 +2026,58 @@ static const TypeInfo char_gdb_type_info = { .name = TYPE_CHARDEV_GDB, .parent = TYPE_CHARDEV, .class_init = char_gdb_class_init, }; +static int find_cpu_clusters(Object *child, void *opaque) +{ + if (object_dynamic_cast(child, TYPE_CPU_CLUSTER)) { + GDBState *s = (GDBState *) opaque; + CPUClusterState *cluster = CPU_CLUSTER(child); + GDBProcess *process; + + s->processes = g_renew(GDBProcess, s->processes, ++s->process_num); + + process = &s->processes[s->process_num - 1]; + + /* GDB process IDs -1 and 0 are reserved */ + process->pid = cluster->cluster_id + 1; + process->attached = false; + return 0; + } + + return object_child_foreach(child, find_cpu_clusters, opaque); +} + +static int pid_order(const void *a, const void *b) +{ + GDBProcess *pa = (GDBProcess *) a; + GDBProcess *pb = (GDBProcess *) b; + + return pa->pid - pb->pid; +} + +static void create_processes(GDBState *s) +{ + object_child_foreach(object_get_root(), find_cpu_clusters, s); + + if (!s->processes) { + /* No CPU cluster specified by the machine */ + create_unique_process(s); + } else { + /* Sort by PID */ + qsort(s->processes, s->process_num, sizeof(s->processes[0]), pid_order); + } +} + +static void cleanup_processes(GDBState *s) +{ + g_free(s->processes); + s->process_num = 0; + s->processes = NULL; +} + int gdbserver_start(const char *device) { trace_gdbstub_op_start(device); GDBState *s; @@ -2058,15 +2130,19 @@ int gdbserver_start(const char *device) NULL, &error_abort); monitor_init(mon_chr, 0); } else { qemu_chr_fe_deinit(&s->chr, true); mon_chr = s->mon_chr; + cleanup_processes(s); memset(s, 0, sizeof(GDBState)); s->mon_chr = mon_chr; } s->c_cpu = first_cpu; s->g_cpu = first_cpu; + + create_processes(s); + if (chr) { qemu_chr_fe_init(&s->chr, chr, &error_abort); qemu_chr_fe_set_handlers(&s->chr, gdb_chr_can_receive, gdb_chr_receive, gdb_chr_event, NULL, NULL, NULL, true); } From patchwork Tue Nov 6 11:05:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670115 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C57F51803 for ; Tue, 6 Nov 2018 11:14:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B3F112A29B for ; Tue, 6 Nov 2018 11:14:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A81872A2B0; Tue, 6 Nov 2018 11:14:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 02F862A29B for ; Tue, 6 Nov 2018 11:14:06 +0000 (UTC) Received: from localhost ([::1]:40337 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzJ7-0008Pk-HX for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:14:05 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48954) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBk-0006QQ-Vv for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBf-0000w3-6r for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:28 -0500 Received: from greensocs.com ([193.104.36.180]:46658) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBT-0000nL-HW; Tue, 06 Nov 2018 06:06:11 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 7BD615C026F; Tue, 6 Nov 2018 12:06:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502367; bh=fPhNMVOgnILrdu8vEVGAW8FkOUJiKmx8HxmopOK4UcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Xc+g5M3C7P/BztBVLy43aWCs9d7ADonE9UidVq5frKlOlGsRliz+uQOAX3OcFOnKx eDbC2ElSeWYOfD5HfsDK8uQGheD1VLAjA/FEi2u0PrSwfjszLLEy1y5nwDJRpG5vPZ l88TGRIxoSw/m8i9tO6vVQnEqGr6s9XHoX6LG53Q= 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=x8cBPrJ7; dkim=pass (1024-bit key) header.d=greensocs.com header.b=Ny2x58aS 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 S4XD4UlDYq4L; Tue, 6 Nov 2018 12:06:06 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 0696D5C0265; Tue, 6 Nov 2018 12:06:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502366; bh=fPhNMVOgnILrdu8vEVGAW8FkOUJiKmx8HxmopOK4UcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=x8cBPrJ7bqrLBfdO1Eu8yw08s8iS311rFd1Q0dygNMVwVdhY8IQZ1kxInjp2ugEYZ zA/iSXIeZ5pt7f+9PYl2LkKvEXW2v7716UDnItLcz884vI23PPMgRNZQYzXHEwPvKu 0jBNcKG+KhoS5ScExWOpY/Xb/uFeCTQVRq8kLgFE= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 798B64F7670; Tue, 6 Nov 2018 12:06:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502365; bh=fPhNMVOgnILrdu8vEVGAW8FkOUJiKmx8HxmopOK4UcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Ny2x58aSgF6vEg1GLF04m+K22H4WgRwJk4Rp4hQtk214vfTywtUZQNXYMgj3JMyhG 237fYsYLb90I2P3EKAp35g4icSccV09/geZEf1567z+YyGN4rt0dEn5g1WWMcHN2mx JoZLvA8ft078fKdeERJQ7ym7iM9WsuF0YAtKNW3A= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:35 +0100 Message-Id: <20181106110548.4209-4-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 03/16] gdbstub: add multiprocess support to '?' packets 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP The gdb_get_cpu_pid() function does the PID lookup for the given CPU. It checks if the CPU is a direct child of a CPU cluster. If it is, the returned PID is the cluster ID plus one (cluster IDs start at 0, GDB PIDs at 1). When the CPU is not a child of such a container, the PID of the first process is returned. The gdb_fmt_thread_id() function generates the string to be used to identify a given thread, in a response packet for the peer. This function supports generating thread IDs when multiprocess mode is enabled (in the form `p.'). Use them in the reply to a '?' request. Signed-off-by: Luc Michel Acked-by: Alistair Francis --- gdbstub.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 0d70b89598..d26bad4b67 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -638,10 +638,52 @@ static int memtox(char *buf, const char *mem, int len) } } return p - buf; } +static uint32_t gdb_get_cpu_pid(const GDBState *s, CPUState *cpu) +{ +#ifndef CONFIG_USER_ONLY + gchar *path, *name; + Object *obj; + CPUClusterState *cluster; + uint32_t ret; + + path = object_get_canonical_path(OBJECT(cpu)); + name = object_get_canonical_path_component(OBJECT(cpu)); + + if (path == NULL) { + ret = s->processes[0].pid; + goto out; + } + + /* + * Retrieve the CPU parent path by removing the last '/' and the CPU name + * from the CPU canonical path. */ + path[strlen(path) - strlen(name) - 1] = '\0'; + + obj = object_resolve_path_type(path, TYPE_CPU_CLUSTER, NULL); + + if (obj == NULL) { + ret = s->processes[0].pid; + goto out; + } + + cluster = CPU_CLUSTER(obj); + ret = cluster->cluster_id + 1; + +out: + g_free(name); + g_free(path); + + return ret; + +#else + return s->processes[0].pid; +#endif +} + static const char *get_feature_xml(const char *p, const char **newp, CPUClass *cc) { size_t len; int i; @@ -907,10 +949,23 @@ static CPUState *find_cpu(uint32_t thread_id) } return NULL; } +static char *gdb_fmt_thread_id(const GDBState *s, CPUState *cpu, + char *buf, size_t buf_size) +{ + if (s->multiprocess) { + snprintf(buf, buf_size, "p%02x.%02x", + gdb_get_cpu_pid(s, cpu), cpu_gdb_index(cpu)); + } else { + snprintf(buf, buf_size, "%02x", cpu_gdb_index(cpu)); + } + + return buf; +} + static int is_query_packet(const char *p, const char *query, char separator) { unsigned int query_len = strlen(query); return strncmp(p, query, query_len) == 0 && @@ -1018,22 +1073,23 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) const char *p; uint32_t thread; int ch, reg_size, type, res; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; + char thread_id[16]; uint8_t *registers; target_ulong addr, len; trace_gdbstub_io_command(line_buf); p = line_buf; ch = *p++; switch(ch) { case '?': /* TODO: Make this return the correct value for user-mode. */ - snprintf(buf, sizeof(buf), "T%02xthread:%02x;", GDB_SIGNAL_TRAP, - cpu_gdb_index(s->c_cpu)); + snprintf(buf, sizeof(buf), "T%02xthread:%s;", GDB_SIGNAL_TRAP, + gdb_fmt_thread_id(s, s->c_cpu, thread_id, sizeof(thread_id))); put_packet(s, buf); /* Remove all the breakpoints when this query is issued, * because gdb is doing and initial connect and the state * should be cleaned up. */ From patchwork Tue Nov 6 11:05:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670111 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C448B15A6 for ; Tue, 6 Nov 2018 11:11:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B230D2A2A4 for ; Tue, 6 Nov 2018 11:11:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A2A2E2A2B2; Tue, 6 Nov 2018 11:11:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 159B22A2A4 for ; Tue, 6 Nov 2018 11:11:24 +0000 (UTC) Received: from localhost ([::1]:40327 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzGV-00044g-8N for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:11:23 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48957) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBl-0006QT-08 for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBf-0000w1-7L for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:28 -0500 Received: from greensocs.com ([193.104.36.180]:46712) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBV-0000os-HL; Tue, 06 Nov 2018 06:06:13 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 3B4A85C026C; Tue, 6 Nov 2018 12:06:13 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502373; bh=oEhtZP/9SjD4dnBg12InDEYfGFug7U6sbGl0KVHhliU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=P+jEEtme3BeKKujxPAK6lMMqVG5MpfA5hrVlFRA/44diMrll2cNnNHpk3ozw5ZDSh rcUPHqUmkOQkZnTnn0BAyxOMOmXbEbMXemYLTSzjkBrPeQHRFmF4viYFpWLYqN14LJ V1JCEc2dZ4S0/5PBQexEEqpw+x/VS9sGgdlyC/44= 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=LCf0CiTz; dkim=pass (1024-bit key) header.d=greensocs.com header.b=LCf0CiTz 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 l8MY5U-dQHWM; Tue, 6 Nov 2018 12:06:07 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 7A8364F7670; Tue, 6 Nov 2018 12:06:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502366; bh=oEhtZP/9SjD4dnBg12InDEYfGFug7U6sbGl0KVHhliU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=LCf0CiTz6LbhAS+diVeL99YiXnVAc9zIHKwZ/WXr3xsd2MyxcygthsBriJE30Y9Ew aHYC1p8lRs1s8GLX1akSwKOD7xJ36z9WxIBlPZelRvQLt6Y/hbHLwhlPekBjGTF3XS IY3Ya3u1yChwbhrJs4M63YGQwbnq6dmKcyxB+sy0= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 0692E5C024B; Tue, 6 Nov 2018 12:06:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502366; bh=oEhtZP/9SjD4dnBg12InDEYfGFug7U6sbGl0KVHhliU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=LCf0CiTz6LbhAS+diVeL99YiXnVAc9zIHKwZ/WXr3xsd2MyxcygthsBriJE30Y9Ew aHYC1p8lRs1s8GLX1akSwKOD7xJ36z9WxIBlPZelRvQLt6Y/hbHLwhlPekBjGTF3XS IY3Ya3u1yChwbhrJs4M63YGQwbnq6dmKcyxB+sy0= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:36 +0100 Message-Id: <20181106110548.4209-5-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 04/16] gdbstub: add multiprocess support to 'H' and 'T' packets 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add a couple of helper functions to cope with GDB threads and processes. The gdb_get_process() function looks for a process given a pid. The gdb_get_cpu() function returns the CPU corresponding to the (pid, tid) pair given as parameters. The read_thread_id() function parses the thread-id sent by the peer. This function supports the multiprocess extension thread-id syntax. The return value specifies if the parsing failed, or if a special case was encountered (all processes or all threads). Use them in 'H' and 'T' packets handling to support the multiprocess extension. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 134 insertions(+), 18 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index d26bad4b67..598a89b3ba 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -680,10 +680,73 @@ out: #else return s->processes[0].pid; #endif } +static GDBProcess *gdb_get_process(const GDBState *s, uint32_t pid) +{ + int i; + + if (!pid) { + /* 0 means any process, we take the first one */ + return &s->processes[0]; + } + + for (i = 0; i < s->process_num; i++) { + if (s->processes[i].pid == pid) { + return &s->processes[i]; + } + } + + return NULL; +} + +static GDBProcess *gdb_get_cpu_process(const GDBState *s, CPUState *cpu) +{ + return gdb_get_process(s, gdb_get_cpu_pid(s, cpu)); +} + +static CPUState *find_cpu(uint32_t thread_id) +{ + CPUState *cpu; + + CPU_FOREACH(cpu) { + if (cpu_gdb_index(cpu) == thread_id) { + return cpu; + } + } + + return NULL; +} + +static CPUState *gdb_get_cpu(const GDBState *s, uint32_t pid, uint32_t tid) +{ + GDBProcess *process; + CPUState *cpu = find_cpu(tid); + + if (!tid) { + /* 0 means any thread, we take the first one */ + tid = 1; + } + + if (cpu == NULL) { + return NULL; + } + + process = gdb_get_cpu_process(s, cpu); + + if (process->pid != pid) { + return NULL; + } + + if (!process->attached) { + return NULL; + } + + return cpu; +} + static const char *get_feature_xml(const char *p, const char **newp, CPUClass *cc) { size_t len; int i; @@ -936,23 +999,10 @@ static void gdb_set_cpu_pc(GDBState *s, target_ulong pc) cpu_synchronize_state(cpu); cpu_set_pc(cpu, pc); } -static CPUState *find_cpu(uint32_t thread_id) -{ - CPUState *cpu; - - CPU_FOREACH(cpu) { - if (cpu_gdb_index(cpu) == thread_id) { - return cpu; - } - } - - return NULL; -} - static char *gdb_fmt_thread_id(const GDBState *s, CPUState *cpu, char *buf, size_t buf_size) { if (s->multiprocess) { snprintf(buf, buf_size, "p%02x.%02x", @@ -962,10 +1012,64 @@ static char *gdb_fmt_thread_id(const GDBState *s, CPUState *cpu, } return buf; } +typedef enum GDBThreadIdKind { + GDB_ONE_THREAD = 0, + GDB_ALL_THREADS, /* One process, all threads */ + GDB_ALL_PROCESSES, + GDB_READ_THREAD_ERR +} GDBThreadIdKind; + +static GDBThreadIdKind read_thread_id(const char *buf, const char **end_buf, + uint32_t *pid, uint32_t *tid) +{ + unsigned long p, t; + int ret; + + if (*buf == 'p') { + buf++; + ret = qemu_strtoul(buf, &buf, 16, &p); + + if (ret) { + return GDB_READ_THREAD_ERR; + } + + /* Skip '.' */ + buf++; + } else { + p = 1; + } + + ret = qemu_strtoul(buf, &buf, 16, &t); + + if (ret) { + return GDB_READ_THREAD_ERR; + } + + *end_buf = buf; + + if (p == -1) { + return GDB_ALL_PROCESSES; + } + + if (pid) { + *pid = p; + } + + if (t == -1) { + return GDB_ALL_THREADS; + } + + if (tid) { + *tid = t; + } + + return GDB_ONE_THREAD; +} + static int is_query_packet(const char *p, const char *query, char separator) { unsigned int query_len = strlen(query); return strncmp(p, query, query_len) == 0 && @@ -1070,16 +1174,18 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; CPUClass *cc; const char *p; uint32_t thread; + uint32_t pid, tid; int ch, reg_size, type, res; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; uint8_t *registers; target_ulong addr, len; + GDBThreadIdKind thread_kind; trace_gdbstub_io_command(line_buf); p = line_buf; ch = *p++; @@ -1283,16 +1389,22 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) else put_packet(s, "E22"); break; case 'H': type = *p++; - thread = strtoull(p, (char **)&p, 16); - if (thread == -1 || thread == 0) { + + thread_kind = read_thread_id(p, &p, &pid, &tid); + if (thread_kind == GDB_READ_THREAD_ERR) { + put_packet(s, "E22"); + break; + } + + if (thread_kind != GDB_ONE_THREAD) { put_packet(s, "OK"); break; } - cpu = find_cpu(thread); + cpu = gdb_get_cpu(s, pid, tid); if (cpu == NULL) { put_packet(s, "E22"); break; } switch (type) { @@ -1308,12 +1420,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) put_packet(s, "E22"); break; } break; case 'T': - thread = strtoull(p, (char **)&p, 16); - cpu = find_cpu(thread); + thread_kind = read_thread_id(p, &p, &pid, &tid); + if (thread_kind == GDB_READ_THREAD_ERR) { + put_packet(s, "E22"); + break; + } + cpu = gdb_get_cpu(s, pid, tid); if (cpu != NULL) { put_packet(s, "OK"); } else { put_packet(s, "E22"); From patchwork Tue Nov 6 11:05:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670113 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5DEDF15E9 for ; Tue, 6 Nov 2018 11:12:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 462892A29B for ; Tue, 6 Nov 2018 11:12:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 373D12A2B0; Tue, 6 Nov 2018 11:12:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A78AA2A29B for ; Tue, 6 Nov 2018 11:12:43 +0000 (UTC) Received: from localhost ([::1]:40331 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzHm-0005RJ-Us for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:12:43 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48880) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBf-0006KP-8t for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBb-0000ty-3E for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:22 -0500 Received: from greensocs.com ([193.104.36.180]:46669) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBT-0000nc-HU; Tue, 06 Nov 2018 06:06:11 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 211285C9D97; Tue, 6 Nov 2018 12:06:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502370; bh=oIF9dYQDZUKcoiOrfIYnR2/JYabFthPUu6QvgXLquD8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=4Xs8AEmDU36rnytlEQksBVVV8PnxuSdNciNZipjhYTGTJw9FEmpyQiO6MDgeEO+/2 fA34fSpc091XEGLaqnnN70py01lTB/v5GaWRtWfa9wANmolJ7qFcyPwFQyfS/PZBXy HVGVZJl6SYjfRFZQC0LzL9PMXwto2Sm+iWLsTK34= 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=wHQVAkf6; dkim=pass (1024-bit key) header.d=greensocs.com header.b=Z/fDiGzW 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 uepO-CrC8a7W; Tue, 6 Nov 2018 12:06:09 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 0E14B5C026D; Tue, 6 Nov 2018 12:06:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502367; bh=oIF9dYQDZUKcoiOrfIYnR2/JYabFthPUu6QvgXLquD8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=wHQVAkf6wlDJR7xP8nhf8/QaLrSQXLZGgDB9SH1s8gMTGODc1wm42Hydel5svp3fR FYU8RmNTe7w9oqsarQsdzUqq2U7Hjsk+qgAXYbyvVm4VBuKeaWVJa9Tw6X1fURV2No 5eb7bFP4JjJdZ9gGft16SS/pNb8mPBYSOsFKYku8= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 7F5865C024B; Tue, 6 Nov 2018 12:06:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502366; bh=oIF9dYQDZUKcoiOrfIYnR2/JYabFthPUu6QvgXLquD8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Z/fDiGzWwilnyLG4tgpCtjtP/uex46stNbZmldyjjb5JgOLYOQUnb4rr7tyGfeJ5I il1kzpirlShPqyfpsRLRRQ4/2n9cpor2i1b2M/hIcZgdrzGxtsIlWdFvoN3OtyIj1J wFffDifXNrg+6iBC3546/GvLTWV5cDhZo5YTOGp4= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:37 +0100 Message-Id: <20181106110548.4209-6-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 05/16] gdbstub: add multiprocess support to vCont packets 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add the gdb_first_cpu() and gdb_next_cpu() to iterate over all the CPUs in currently attached processes. Add the gdb_first_cpu_in_process() and gdb_next_cpu_in_process() to iterate over CPUs of a given process. Use them to add multiprocess extension support to vCont packets. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 117 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 102 insertions(+), 15 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 598a89b3ba..ba8b1a3413 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -716,10 +716,40 @@ static CPUState *find_cpu(uint32_t thread_id) } return NULL; } +static CPUState *get_first_cpu_in_process(const GDBState *s, + GDBProcess *process) +{ + CPUState *cpu; + + CPU_FOREACH(cpu) { + if (gdb_get_cpu_pid(s, cpu) == process->pid) { + return cpu; + } + } + + return NULL; +} + +static CPUState *gdb_next_cpu_in_process(const GDBState *s, CPUState *cpu) +{ + uint32_t pid = gdb_get_cpu_pid(s, cpu); + cpu = CPU_NEXT(cpu); + + while (cpu) { + if (gdb_get_cpu_pid(s, cpu) == pid) { + break; + } + + cpu = CPU_NEXT(cpu); + } + + return cpu; +} + static CPUState *gdb_get_cpu(const GDBState *s, uint32_t pid, uint32_t tid) { GDBProcess *process; CPUState *cpu = find_cpu(tid); @@ -743,10 +773,41 @@ static CPUState *gdb_get_cpu(const GDBState *s, uint32_t pid, uint32_t tid) } return cpu; } +/* Return the cpu following @cpu, while ignoring + * unattached processes. + */ +static CPUState *gdb_next_cpu(const GDBState *s, CPUState *cpu) +{ + cpu = CPU_NEXT(cpu); + + while (cpu) { + if (gdb_get_cpu_process(s, cpu)->attached) { + break; + } + + cpu = CPU_NEXT(cpu); + } + + return cpu; +} + +/* Return the first attached cpu */ +static CPUState *gdb_first_cpu(const GDBState *s) +{ + CPUState *cpu = first_cpu; + GDBProcess *process = gdb_get_cpu_process(s, cpu); + + if (!process->attached) { + return gdb_next_cpu(s, cpu); + } + + return cpu; +} + static const char *get_feature_xml(const char *p, const char **newp, CPUClass *cc) { size_t len; int i; @@ -1081,14 +1142,16 @@ static int is_query_packet(const char *p, const char *query, char separator) * returns -ENOTSUP if a command is unsupported, -EINVAL or -ERANGE if there is * a format error, 0 on success. */ static int gdb_handle_vcont(GDBState *s, const char *p) { - int res, idx, signal = 0; + int res, signal = 0; char cur_action; char *newstates; unsigned long tmp; + uint32_t pid, tid; + GDBProcess *process; CPUState *cpu; #ifdef CONFIG_USER_ONLY int max_cpus = 1; /* global variable max_cpus exists only in system mode */ CPU_FOREACH(cpu) { @@ -1127,29 +1190,52 @@ static int gdb_handle_vcont(GDBState *s, const char *p) } else if (cur_action != 'c' && cur_action != 's') { /* unknown/invalid/unsupported command */ res = -ENOTSUP; goto out; } - /* thread specification. special values: (none), -1 = all; 0 = any */ - if ((p[0] == ':' && p[1] == '-' && p[2] == '1') || (p[0] != ':')) { - if (*p == ':') { - p += 3; - } - for (idx = 0; idx < max_cpus; idx++) { - if (newstates[idx] == 1) { - newstates[idx] = cur_action; + + if (*p++ != ':') { + res = -ENOTSUP; + goto out; + } + + switch (read_thread_id(p, &p, &pid, &tid)) { + case GDB_READ_THREAD_ERR: + res = -EINVAL; + goto out; + + case GDB_ALL_PROCESSES: + cpu = gdb_first_cpu(s); + while (cpu) { + if (newstates[cpu->cpu_index] == 1) { + newstates[cpu->cpu_index] = cur_action; } + + cpu = gdb_next_cpu(s, cpu); } - } else if (*p == ':') { - p++; - res = qemu_strtoul(p, &p, 16, &tmp); - if (res) { + break; + + case GDB_ALL_THREADS: + process = gdb_get_process(s, pid); + + if (!process->attached) { + res = -EINVAL; goto out; } - /* 0 means any thread, so we pick the first valid CPU */ - cpu = tmp ? find_cpu(tmp) : first_cpu; + cpu = get_first_cpu_in_process(s, process); + while (cpu) { + if (newstates[cpu->cpu_index] == 1) { + newstates[cpu->cpu_index] = cur_action; + } + + cpu = gdb_next_cpu_in_process(s, cpu); + } + break; + + case GDB_ONE_THREAD: + cpu = gdb_get_cpu(s, pid, tid); /* invalid CPU/thread specified */ if (!cpu) { res = -EINVAL; goto out; @@ -1157,10 +1243,11 @@ static int gdb_handle_vcont(GDBState *s, const char *p) /* only use if no previous match occourred */ if (newstates[cpu->cpu_index] == 1) { newstates[cpu->cpu_index] = cur_action; } + break; } } s->signal = signal; gdb_continue_partial(s, newstates); From patchwork Tue Nov 6 11:05:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670107 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A3BEE15A6 for ; Tue, 6 Nov 2018 11:11:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9245A2A2A4 for ; Tue, 6 Nov 2018 11:11:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 868C12A2B2; Tue, 6 Nov 2018 11:11:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2D86C2A2A4 for ; Tue, 6 Nov 2018 11:11:10 +0000 (UTC) Received: from localhost ([::1]:40323 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzGH-0003sp-CY for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:11:09 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48997) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBp-0006Ur-0x for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBj-00010z-0A for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:32 -0500 Received: from greensocs.com ([193.104.36.180]:46712) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBU-0000os-I7; Tue, 06 Nov 2018 06:06:12 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 04EDA5C0279; Tue, 6 Nov 2018 12:06:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502371; bh=p2Mv8ssQ4PExXJBSLWQS/O2C8dspM4cwOB9TCaV84ag=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=oLrQYy3tiWCMHdur2XD4HRwzMJR+eT30qlYEo/n0AKRtS4+Z5mXd0vsrT3gpcTa8H XQYixx8iNMj2xwf+eY62OLoIGi0746zr127d1dsqYR3lj4R3R9yZcVj9OwKH463fpl az+MBM6QIZruRpFNGhSWgUrjHHrYFVW0zVWTUcEg= 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=FhW5l/C3; dkim=pass (1024-bit key) header.d=greensocs.com header.b=FhW5l/C3 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 mw99C17Zk_l4; Tue, 6 Nov 2018 12:06:10 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 6FF8C5C024B; Tue, 6 Nov 2018 12:06:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502367; bh=p2Mv8ssQ4PExXJBSLWQS/O2C8dspM4cwOB9TCaV84ag=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=FhW5l/C3RuIoonhmYMWiCjkXzI5H2SDJ0HdrbxBPWgZm76E2rkt8/HUC12t7wUxJa 7/qtgDxBuv4U30u1eLqq4bRILCgPzwaLNUR/NM+pwQy6VRg2Mu5rBWNBEwY88/gQdu XjTKG1CSvw7g1x0AeLyy4+FjE+9Mp6CDipjECH+E= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 0CC805C024F; Tue, 6 Nov 2018 12:06:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502367; bh=p2Mv8ssQ4PExXJBSLWQS/O2C8dspM4cwOB9TCaV84ag=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=FhW5l/C3RuIoonhmYMWiCjkXzI5H2SDJ0HdrbxBPWgZm76E2rkt8/HUC12t7wUxJa 7/qtgDxBuv4U30u1eLqq4bRILCgPzwaLNUR/NM+pwQy6VRg2Mu5rBWNBEwY88/gQdu XjTKG1CSvw7g1x0AeLyy4+FjE+9Mp6CDipjECH+E= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:38 +0100 Message-Id: <20181106110548.4209-7-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 06/16] gdbstub: add multiprocess support to 'sC' packets 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Change the sC packet handling to support the multiprocess extension. Instead of returning the first thread, we return the first thread of the current process. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Alistair Francis --- gdbstub.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index ba8b1a3413..9be83486f5 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1546,13 +1546,18 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) type = strtoul(p, (char **)&p, 16); sstep_flags = type; put_packet(s, "OK"); break; } else if (strcmp(p,"C") == 0) { - /* "Current thread" remains vague in the spec, so always return - * the first CPU (gdb returns the first thread). */ - put_packet(s, "QC1"); + /* "Current thread" remains vague in the spec, so always return the + * first thread of the current process (gdb returns the first + * thread). + */ + cpu = get_first_cpu_in_process(s, gdb_get_cpu_process(s, s->g_cpu)); + snprintf(buf, sizeof(buf), "QC%s", + gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id))); + put_packet(s, buf); break; } else if (strcmp(p,"fThreadInfo") == 0) { s->query_cpu = first_cpu; goto report_cpuinfo; } else if (strcmp(p,"sThreadInfo") == 0) { From patchwork Tue Nov 6 11:05:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670099 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E221A1751 for ; Tue, 6 Nov 2018 11:08:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D1FA12A333 for ; Tue, 6 Nov 2018 11:08:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C5E2F2A345; Tue, 6 Nov 2018 11:08:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 703912A333 for ; Tue, 6 Nov 2018 11:08:15 +0000 (UTC) Received: from localhost ([::1]:40306 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzDS-000057-19 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:08:14 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48879) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBf-0006KO-7y for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBa-0000tY-KM for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:22 -0500 Received: from greensocs.com ([193.104.36.180]:46713) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBU-0000or-IZ; Tue, 06 Nov 2018 06:06:12 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id DEBF75C9D9C; Tue, 6 Nov 2018 12:06:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502371; bh=8S5wpPVVq90/1QKwmLRWhYH1Jn4czok6NwCnRlvPVDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=zx1abv78+b4zrtIGWEBNaAkCgCFpRg4zAh0LIcXXQi/0lwtGvObXGzM5KG92VR8Lt VFjOUjmU6/SttIVow23OyX2pwurrx2gm6wpZ0eS4sVH5H5Y0oK1u0plhYVHnyJpJ8x vISVBfy+UThfo+c/DGyZpCGVDAP52sPYHvIpAyas= 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=y83m76xy; dkim=pass (1024-bit key) header.d=greensocs.com header.b=y83m76xy 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 czowl89wQmz9; Tue, 6 Nov 2018 12:06:11 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id E10995C0265; Tue, 6 Nov 2018 12:06:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502367; bh=8S5wpPVVq90/1QKwmLRWhYH1Jn4czok6NwCnRlvPVDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=y83m76xyHnyJF/abMtvfRPGmadfyfdcgWX2O7WUABArAl+PRdYn9cWpfxMXxH8RAS DftDH4YnEZOH5+n5Kapf+QJKDBAqVZF53fgyBJEtvO4v45RojuT0c+xdp21hodVnLh 8gQ9e7wqiyRY13cAoMEU8Kphw/EHDPEXVWyY9mds= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 73FEA5C024F; Tue, 6 Nov 2018 12:06:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502367; bh=8S5wpPVVq90/1QKwmLRWhYH1Jn4czok6NwCnRlvPVDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=y83m76xyHnyJF/abMtvfRPGmadfyfdcgWX2O7WUABArAl+PRdYn9cWpfxMXxH8RAS DftDH4YnEZOH5+n5Kapf+QJKDBAqVZF53fgyBJEtvO4v45RojuT0c+xdp21hodVnLh 8gQ9e7wqiyRY13cAoMEU8Kphw/EHDPEXVWyY9mds= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:39 +0100 Message-Id: <20181106110548.4209-8-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 07/16] gdbstub: add multiprocess support to (f|s)ThreadInfo and ThreadExtraInfo 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Change the thread info related packets handling to support multiprocess extension. Add the CPUs class name in the extra info to help differentiate them in multiprocess mode. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 9be83486f5..43c9211bfa 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1260,11 +1260,10 @@ out: static int gdb_handle_packet(GDBState *s, const char *line_buf) { CPUState *cpu; CPUClass *cc; const char *p; - uint32_t thread; uint32_t pid, tid; int ch, reg_size, type, res; uint8_t mem_buf[MAX_PACKET_LENGTH]; char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; char thread_id[16]; @@ -1556,30 +1555,46 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) snprintf(buf, sizeof(buf), "QC%s", gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id))); put_packet(s, buf); break; } else if (strcmp(p,"fThreadInfo") == 0) { - s->query_cpu = first_cpu; + s->query_cpu = gdb_first_cpu(s); goto report_cpuinfo; } else if (strcmp(p,"sThreadInfo") == 0) { report_cpuinfo: if (s->query_cpu) { - snprintf(buf, sizeof(buf), "m%x", cpu_gdb_index(s->query_cpu)); + snprintf(buf, sizeof(buf), "m%s", + gdb_fmt_thread_id(s, s->query_cpu, + thread_id, sizeof(thread_id))); put_packet(s, buf); - s->query_cpu = CPU_NEXT(s->query_cpu); + s->query_cpu = gdb_next_cpu(s, s->query_cpu); } else put_packet(s, "l"); break; } else if (strncmp(p,"ThreadExtraInfo,", 16) == 0) { - thread = strtoull(p+16, (char **)&p, 16); - cpu = find_cpu(thread); + if (read_thread_id(p + 16, &p, &pid, &tid) == GDB_READ_THREAD_ERR) { + put_packet(s, "E22"); + break; + } + cpu = gdb_get_cpu(s, pid, tid); if (cpu != NULL) { cpu_synchronize_state(cpu); - /* memtohex() doubles the required space */ - len = snprintf((char *)mem_buf, sizeof(buf) / 2, - "CPU#%d [%s]", cpu->cpu_index, - cpu->halted ? "halted " : "running"); + + if (s->multiprocess && (s->process_num > 1)) { + /* Print the CPU model in multiprocess mode */ + ObjectClass *oc = object_get_class(OBJECT(cpu)); + const char *cpu_model = object_class_get_name(oc); + len = snprintf((char *)mem_buf, sizeof(buf) / 2, + "CPU#%d %s [%s]", cpu->cpu_index, + cpu_model, + cpu->halted ? "halted " : "running"); + } else { + /* memtohex() doubles the required space */ + len = snprintf((char *)mem_buf, sizeof(buf) / 2, + "CPU#%d [%s]", cpu->cpu_index, + cpu->halted ? "halted " : "running"); + } trace_gdbstub_op_extra_info((char *)mem_buf); memtohex(buf, mem_buf, len); put_packet(s, buf); } break; From patchwork Tue Nov 6 11:05:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670123 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8793515E9 for ; Tue, 6 Nov 2018 11:17:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 74EEF2A29B for ; Tue, 6 Nov 2018 11:17:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 679EF2A2B0; Tue, 6 Nov 2018 11:17:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D3A0F2A29B for ; Tue, 6 Nov 2018 11:17:12 +0000 (UTC) Received: from localhost ([::1]:40358 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzM8-0002M5-2w for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:17:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48994) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBo-0006Ud-Pv for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBk-00011s-PR for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:32 -0500 Received: from greensocs.com ([193.104.36.180]:46713) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBV-0000or-4U; Tue, 06 Nov 2018 06:06:13 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id CD4945C024B; Tue, 6 Nov 2018 12:06:12 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502372; bh=cS+N1h1HgsnfQx9Toc/vlaz3Ue7kByeXlQSkWFD48/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Eoo3yatLh0d6SbZ911xKq0Olvm7mjO6K8toIKQuwZXR7aRt33h0Rhvex26hFgKvfA ogB0Tyk+tc9mqIHeT9Glv9I1O+HWUtNWrMcFIv3nuaJa3CesydcKTBsowwu3bw8S50 S5m1clUhkRbuLggqZzqNIukoOVg6T/qw+mtHtVzo= 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=eyOg3aU1; dkim=pass (1024-bit key) header.d=greensocs.com header.b=eyOg3aU1 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 nFAGpCYg7eYr; Tue, 6 Nov 2018 12:06:12 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 548005C0271; Tue, 6 Nov 2018 12:06:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502368; bh=cS+N1h1HgsnfQx9Toc/vlaz3Ue7kByeXlQSkWFD48/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=eyOg3aU14iokApeBXv2zt8CqqDgdLK8hZthTl4ua/nmIpOEXZ7tloquD/jIINDVc2 iyV05XNSs4bD8Wg2aUSvoYYT9EzCDX3dBYO7qG+m3gYrH2FhOQsQiHWZaxwV4HmY9U JaIVBEBkgRH3op8XNJ7hwRIOR+k28hNmELjVBKCY= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 E1F2A5C024F; Tue, 6 Nov 2018 12:06:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502368; bh=cS+N1h1HgsnfQx9Toc/vlaz3Ue7kByeXlQSkWFD48/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=eyOg3aU14iokApeBXv2zt8CqqDgdLK8hZthTl4ua/nmIpOEXZ7tloquD/jIINDVc2 iyV05XNSs4bD8Wg2aUSvoYYT9EzCDX3dBYO7qG+m3gYrH2FhOQsQiHWZaxwV4HmY9U JaIVBEBkgRH3op8XNJ7hwRIOR+k28hNmELjVBKCY= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:40 +0100 Message-Id: <20181106110548.4209-9-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 08/16] 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP 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 Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 43c9211bfa..aae3cce01a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -298,10 +298,12 @@ typedef struct GDBRegisterState { } GDBRegisterState; typedef struct GDBProcess { uint32_t pid; bool attached; + + char target_xml[1024]; } GDBProcess; enum RSState { RS_INACTIVE, RS_IDLE, @@ -804,55 +806,57 @@ static CPUState *gdb_first_cpu(const GDBState *s) } return cpu; } -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 = get_first_cpu_in_process(s, process); + CPUClass *cc = CPU_GET_CLASS(cpu); len = 0; while (p[len] && p[len] != ':') len++; *newp = p + len; name = NULL; if (strncmp(p, "target.xml", len) == 0) { + char *buf = process->target_xml; + const size_t buf_sz = sizeof(process->target_xml); + /* Generate the XML description for this CPU. */ - if (!target_xml[0]) { + if (!buf[0]) { GDBRegisterState *r; - CPUState *cpu = first_cpu; - pstrcat(target_xml, sizeof(target_xml), + pstrcat(buf, buf_sz, "" "" ""); if (cc->gdb_arch_name) { gchar *arch = 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 = cpu->gdb_regs; r; r = 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 = first_cpu; char *xmlname = g_strndup(p, len); const char *xml = cc->gdb_get_dynamic_xml(cpu, xmlname); g_free(xmlname); if (xml) { @@ -1258,10 +1262,11 @@ out: } 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]; @@ -1639,18 +1644,19 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) } if (strncmp(p, "Xfer:features:read:", 19) == 0) { const char *xml; target_ulong total_len; - cc = CPU_GET_CLASS(first_cpu); + process = gdb_get_cpu_process(s, s->g_cpu); + cc = CPU_GET_CLASS(s->g_cpu); if (cc->gdb_core_xml_file == NULL) { goto unknown_command; } gdb_has_xml = true; p += 19; - xml = get_feature_xml(p, &p, cc); + xml = get_feature_xml(s, p, &p, process); if (!xml) { snprintf(buf, sizeof(buf), "E00"); put_packet(s, buf); break; } @@ -2319,10 +2325,11 @@ static int find_cpu_clusters(Object *child, void *opaque) process = &s->processes[s->process_num - 1]; /* GDB process IDs -1 and 0 are reserved */ process->pid = cluster->cluster_id + 1; process->attached = false; + process->target_xml[0] = '\0'; return 0; } return object_child_foreach(child, find_cpu_clusters, opaque); } From patchwork Tue Nov 6 11:05:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670105 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1E63B14E2 for ; Tue, 6 Nov 2018 11:09:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0FF122A2B8 for ; Tue, 6 Nov 2018 11:09:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0479F2A2C4; Tue, 6 Nov 2018 11:09:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CFE7F2A2B8 for ; Tue, 6 Nov 2018 11:09:47 +0000 (UTC) Received: from localhost ([::1]:40314 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzEx-0002kn-52 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:09:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48883) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBf-0006KT-9u for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBe-0000vR-9D for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:23 -0500 Received: from greensocs.com ([193.104.36.180]:46713) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBV-0000or-VO; Tue, 06 Nov 2018 06:06:14 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id A69024F7670; Tue, 6 Nov 2018 12:06:13 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502373; bh=fC05Ss4NtDnlUcYu1G7ZDk22A00EuZP6bFkSpzrSNxc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=sS/oFJhhSgpqNsSokL790zBPD50ntRa78lvFuQcalr2r8OpmslcIsIJ7MBKsz1sDs ucTJtMRg8EI0086yUjsYZ+HuKmYM7rNz62u/yDaZf4qXNFI4OZ8sLa9mJsDQf6waPW VpOK3bYyFazllwr6jm3MWOskK1px8QY4X6SVoT7o= 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=iDzyXRJU; dkim=pass (1024-bit key) header.d=greensocs.com header.b=iDzyXRJU 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 7Pi-k8flFZ3F; Tue, 6 Nov 2018 12:06:12 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id C1AC45C024F; Tue, 6 Nov 2018 12:06:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502368; bh=fC05Ss4NtDnlUcYu1G7ZDk22A00EuZP6bFkSpzrSNxc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=iDzyXRJU7XjuU/doTqw9KOhLggJBeq51zK3YBxDxXl5CK8oJK0OcEn3T7kmAsCHsF yR4cvTf+pFRE5YxksJsWh4qgRBkYf8sxMN1WyRKKuGBOSYNC1EI8whqyNE5KouEjJS 5FRzK6f92xclJw5eMHf1nXe/t4dOxK1+d2Jyk39k= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 585825C024F; Tue, 6 Nov 2018 12:06:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502368; bh=fC05Ss4NtDnlUcYu1G7ZDk22A00EuZP6bFkSpzrSNxc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=iDzyXRJU7XjuU/doTqw9KOhLggJBeq51zK3YBxDxXl5CK8oJK0OcEn3T7kmAsCHsF yR4cvTf+pFRE5YxksJsWh4qgRBkYf8sxMN1WyRKKuGBOSYNC1EI8whqyNE5KouEjJS 5FRzK6f92xclJw5eMHf1nXe/t4dOxK1+d2Jyk39k= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:41 +0100 Message-Id: <20181106110548.4209-10-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 09/16] gdbstub: add multiprocess support to gdb_vm_state_change() 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add support for multiprocess extension in gdb_vm_state_change() function. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index aae3cce01a..decf56c610 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1713,10 +1713,11 @@ void gdb_set_stop_cpu(CPUState *cpu) static void gdb_vm_state_change(void *opaque, int running, RunState state) { GDBState *s = gdbserver_state; CPUState *cpu = s->c_cpu; char buf[256]; + char thread_id[16]; const char *type; int ret; if (running || s->state == RS_INACTIVE) { return; @@ -1724,10 +1725,18 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state) /* Is there a GDB syscall waiting to be sent? */ if (s->current_syscall_cb) { put_packet(s, s->syscall_buf); return; } + + if (cpu == NULL) { + /* No process attached */ + return; + } + + gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id)); + switch (state) { case RUN_STATE_DEBUG: if (cpu->watchpoint_hit) { switch (cpu->watchpoint_hit->flags & BP_MEM_ACCESS) { case BP_MEM_READ: @@ -1741,12 +1750,12 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state) break; } trace_gdbstub_hit_watchpoint(type, cpu_gdb_index(cpu), (target_ulong)cpu->watchpoint_hit->vaddr); snprintf(buf, sizeof(buf), - "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";", - GDB_SIGNAL_TRAP, cpu_gdb_index(cpu), type, + "T%02xthread:%s;%swatch:" TARGET_FMT_lx ";", + GDB_SIGNAL_TRAP, thread_id, type, (target_ulong)cpu->watchpoint_hit->vaddr); cpu->watchpoint_hit = NULL; goto send_packet; } else { trace_gdbstub_hit_break(); @@ -1784,11 +1793,11 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state) trace_gdbstub_hit_unknown(state); ret = GDB_SIGNAL_UNKNOWN; break; } gdb_set_stop_cpu(cpu); - snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_gdb_index(cpu)); + snprintf(buf, sizeof(buf), "T%02xthread:%s;", ret, thread_id); send_packet: put_packet(s, buf); /* disable single step if it was enabled */ From patchwork Tue Nov 6 11:05:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670103 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 426B814E2 for ; Tue, 6 Nov 2018 11:08:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 31667295E4 for ; Tue, 6 Nov 2018 11:08:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 238462969E; Tue, 6 Nov 2018 11:08:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B86DB295E4 for ; Tue, 6 Nov 2018 11:08:28 +0000 (UTC) Received: from localhost ([::1]:40309 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzDf-0001Dc-S4 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:08:27 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48951) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBk-0006QO-Vo for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBf-0000w2-6Q for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:28 -0500 Received: from greensocs.com ([193.104.36.180]:46712) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBW-0000os-E2; Tue, 06 Nov 2018 06:06:14 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 205235C024F; Tue, 6 Nov 2018 12:06:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502374; bh=cYsacuZtqAvOWvrLvVMrJK7AgZ/b9/60aGrfdT4mrnA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=5uvu83pNvwqwXLqFYuEuz4ZRm1FMtekwLX0P8c38TxXXg/mapDaydRmGMx2Qui1kX yDf6+ZFWgkxODSj7Al9RCo9YRC7/B/Cp+lUaWcN1SZL8UwnMpRTzqX0TWJMOjqJzjc YLrFXYxUW8oQsbLQhLtg4WkLgagANBzrWhTp/UuA= 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=RkYW08bu; dkim=pass (1024-bit key) header.d=greensocs.com header.b=RkYW08bu 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 7a56G-qZrFSW; Tue, 6 Nov 2018 12:06:13 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 3C9F95C027D; Tue, 6 Nov 2018 12:06:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502369; bh=cYsacuZtqAvOWvrLvVMrJK7AgZ/b9/60aGrfdT4mrnA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RkYW08buA5LqMJXtU447Ey6RafdaomH+arLEZIAZDP5wyykpp4jFjT2FfVusarawC 0QgzMYNIKiDi8xU+ZVBHDc+/VYI0htegvArnkBKINE3XN2zpAOQmIG3U5jMuJen/WQ 8pe8fEzGRvbxHK5mHNBE8eyQnUFX+Lk2Uxy8lMhc= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 C55CB5C0276; Tue, 6 Nov 2018 12:06:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502369; bh=cYsacuZtqAvOWvrLvVMrJK7AgZ/b9/60aGrfdT4mrnA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RkYW08buA5LqMJXtU447Ey6RafdaomH+arLEZIAZDP5wyykpp4jFjT2FfVusarawC 0QgzMYNIKiDi8xU+ZVBHDc+/VYI0htegvArnkBKINE3XN2zpAOQmIG3U5jMuJen/WQ 8pe8fEzGRvbxHK5mHNBE8eyQnUFX+Lk2Uxy8lMhc= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:42 +0100 Message-Id: <20181106110548.4209-11-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 10/16] gdbstub: add multiprocess support to 'D' packets 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP 'D' packets are used by GDB to detach from a process. In multiprocess mode, the PID to detach from is sent in the request. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index decf56c610..bd4895ac0a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1039,24 +1039,39 @@ static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type) default: return -ENOSYS; } } +static inline void gdb_cpu_breakpoint_remove_all(CPUState *cpu) +{ + cpu_breakpoint_remove_all(cpu, BP_GDB); +#ifndef CONFIG_USER_ONLY + cpu_watchpoint_remove_all(cpu, BP_GDB); +#endif +} + +static void gdb_process_breakpoint_remove_all(const GDBState *s, GDBProcess *p) +{ + CPUState *cpu = get_first_cpu_in_process(s, p); + + while (cpu) { + gdb_cpu_breakpoint_remove_all(cpu); + cpu = gdb_next_cpu_in_process(s, cpu); + } +} + static void gdb_breakpoint_remove_all(void) { CPUState *cpu; if (kvm_enabled()) { kvm_remove_all_breakpoints(gdbserver_state->c_cpu); return; } CPU_FOREACH(cpu) { - cpu_breakpoint_remove_all(cpu, BP_GDB); -#ifndef CONFIG_USER_ONLY - cpu_watchpoint_remove_all(cpu, BP_GDB); -#endif + gdb_cpu_breakpoint_remove_all(cpu); } } static void gdb_set_cpu_pc(GDBState *s, target_ulong pc) { @@ -1331,13 +1346,44 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) /* Kill the target */ error_report("QEMU: Terminated via GDBstub"); exit(0); case 'D': /* Detach packet */ - gdb_breakpoint_remove_all(); - gdb_syscall_mode = GDB_SYS_DISABLED; - gdb_continue(s); + pid = 1; + + if (s->multiprocess) { + unsigned long lpid; + if (*p != ';') { + put_packet(s, "E22"); + break; + } + + if (qemu_strtoul(p + 1, &p, 16, &lpid)) { + put_packet(s, "E22"); + break; + } + + pid = lpid; + } + + process = gdb_get_process(s, pid); + gdb_process_breakpoint_remove_all(s, process); + process->attached = false; + + if (pid == gdb_get_cpu_pid(s, s->c_cpu)) { + s->c_cpu = gdb_first_cpu(s); + } + + if (pid == gdb_get_cpu_pid(s, s->g_cpu)) { + s->g_cpu = gdb_first_cpu(s); + } + + if (s->c_cpu == NULL) { + /* No more process attached */ + gdb_syscall_mode = GDB_SYS_DISABLED; + gdb_continue(s); + } put_packet(s, "OK"); break; case 's': if (*p != '\0') { addr = strtoull(p, (char **)&p, 16); From patchwork Tue Nov 6 11:05:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670131 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 61F2D15E9 for ; Tue, 6 Nov 2018 11:20:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4F5F129DB5 for ; Tue, 6 Nov 2018 11:20:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 43AE029EAC; Tue, 6 Nov 2018 11:20:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id F19E729DB5 for ; Tue, 6 Nov 2018 11:20:41 +0000 (UTC) Received: from localhost ([::1]:40379 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzPV-00077J-4p for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:20:41 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49185) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzC9-0006mk-KM for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzC4-0001uK-Jr for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:53 -0500 Received: from greensocs.com ([193.104.36.180]:46713) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBq-0000or-SR; Tue, 06 Nov 2018 06:06:35 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 76CB65C024B; Tue, 6 Nov 2018 12:06:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502374; bh=rBCCagqSrFOEU0nfuOIRvEJu5ZG6NSRyLpjqwKGgpUo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=z83pVBvbA3gXyc1YMfUGwAsh3F5VgMH3CuG4a4J/9u1qi7RQoDMn5xgIGVR451Fta 3iooGDVmEjGRAmSjwkrHb3tmBJsDCV19SN3gCcDk3x0+hFbNABfJ6c6yFAx9mVPn5t UnLZhFJKxWN+SJIxLbt3IDEfBvl8lJOGbdpWq8TE= 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=YZ9lqt4A; dkim=pass (1024-bit key) header.d=greensocs.com header.b=YZ9lqt4A 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 bvTfVx2rzk9E; Tue, 6 Nov 2018 12:06:13 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id A2931441B53; Tue, 6 Nov 2018 12:06:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502369; bh=rBCCagqSrFOEU0nfuOIRvEJu5ZG6NSRyLpjqwKGgpUo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=YZ9lqt4ADQZdYIidB74hABQTsDBsVefcqAKWfBbK6DQnNyvS3wyh62vVlny1VHiQ+ a7h/z6AN2i5+asv7J4IncIhR/iBB1ctpT0n0oXPaKDH+JMVdl8/LhENvcC7ooydZAd GChHXBQRzIePmYKVJKJMn0fUhz3We/Es5Rl4+Fuk= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 3C4175C0279; Tue, 6 Nov 2018 12:06:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502369; bh=rBCCagqSrFOEU0nfuOIRvEJu5ZG6NSRyLpjqwKGgpUo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=YZ9lqt4ADQZdYIidB74hABQTsDBsVefcqAKWfBbK6DQnNyvS3wyh62vVlny1VHiQ+ a7h/z6AN2i5+asv7J4IncIhR/iBB1ctpT0n0oXPaKDH+JMVdl8/LhENvcC7ooydZAd GChHXBQRzIePmYKVJKJMn0fUhz3We/Es5Rl4+Fuk= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:43 +0100 Message-Id: <20181106110548.4209-12-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 11/16] gdbstub: add support for extended mode packet 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add support for the '!' extended mode packet. This is required for the multiprocess extension. Signed-off-by: Luc Michel --- gdbstub.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index bd4895ac0a..4132227092 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1294,10 +1294,13 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) trace_gdbstub_io_command(line_buf); p = line_buf; ch = *p++; switch(ch) { + case '!': + put_packet(s, "OK"); + break; case '?': /* TODO: Make this return the correct value for user-mode. */ snprintf(buf, sizeof(buf), "T%02xthread:%s;", GDB_SIGNAL_TRAP, gdb_fmt_thread_id(s, s->c_cpu, thread_id, sizeof(thread_id))); put_packet(s, buf); From patchwork Tue Nov 6 11:05:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670125 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4132314BD for ; Tue, 6 Nov 2018 11:17:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 31C0F2A2B0 for ; Tue, 6 Nov 2018 11:17:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 242592A2B8; Tue, 6 Nov 2018 11:17:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id BCC2E2A2B0 for ; Tue, 6 Nov 2018 11:17:22 +0000 (UTC) Received: from localhost ([::1]:40359 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzMI-0002SA-2e for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:17:22 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49182) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzC9-0006mi-Jr for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzC4-0001tz-Im for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:53 -0500 Received: from greensocs.com ([193.104.36.180]:46712) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBs-0000os-IH; Tue, 06 Nov 2018 06:06:37 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id EA729441B53; Tue, 6 Nov 2018 12:06:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502374; bh=o3KJuqJsYNukd/ec4ozLQhf6Dd7aHydQxO2sBiH7PrY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cn+2VUa9fyPkfidaxNGwOe8e5O+PdNc0Cvm1UXFeiDOTN2rvMFrLJvJ5ZO50frgtd XaWO9gnEkVYVmmCyODRAc3tGWooF37Xfvz54AKbxZ1Jn73e7V7MVYaoVY2Vy6zBYXO KvTFWiryX0zA1cQZxEyn/r9C2RZiGpYn66bRnTMM= 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=7WIts+2M; dkim=pass (1024-bit key) header.d=greensocs.com header.b=7WIts+2M 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 aV-oaka--RQA; Tue, 6 Nov 2018 12:06:14 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 21F165C9D98; Tue, 6 Nov 2018 12:06:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502370; bh=o3KJuqJsYNukd/ec4ozLQhf6Dd7aHydQxO2sBiH7PrY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=7WIts+2MS0Lfqpez9opuO08aybUrWkBoObTXe+keTARL8M/FUbf3Hr3K4yxQeXMjK DAQWm2NJpzfBDugezcWsFv7VrAk5r33/8LMwZUAmF5ls+EaNwOuPPPoIGh4qkGqlH0 jkFVNPPG2kkqsMHyhoy6ISa4BKvBpgzGmTNu6jT0= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 A7CDB5C0276; Tue, 6 Nov 2018 12:06:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502370; bh=o3KJuqJsYNukd/ec4ozLQhf6Dd7aHydQxO2sBiH7PrY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=7WIts+2MS0Lfqpez9opuO08aybUrWkBoObTXe+keTARL8M/FUbf3Hr3K4yxQeXMjK DAQWm2NJpzfBDugezcWsFv7VrAk5r33/8LMwZUAmF5ls+EaNwOuPPPoIGh4qkGqlH0 jkFVNPPG2kkqsMHyhoy6ISa4BKvBpgzGmTNu6jT0= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:44 +0100 Message-Id: <20181106110548.4209-13-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 12/16] gdbstub: add support for vAttach packets 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add support for the vAttach packets. In multiprocess mode, GDB sends them to attach to additional processes. Signed-off-by: Luc Michel --- gdbstub.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 4132227092..ba365808db 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1340,10 +1340,45 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) break; } goto unknown_command; } break; + } else if (strncmp(p, "Attach;", 7) == 0) { + unsigned long pid; + + p += 7; + + if (qemu_strtoul(p, &p, 16, &pid)) { + put_packet(s, "E22"); + break; + } + + process = gdb_get_process(s, pid); + + if (process == NULL) { + put_packet(s, "E22"); + break; + } + + cpu = get_first_cpu_in_process(s, process); + + if (cpu == NULL) { + /* Refuse to attach an empty process */ + put_packet(s, "E22"); + break; + } + + process->attached = true; + + s->g_cpu = cpu; + s->c_cpu = cpu; + + snprintf(buf, sizeof(buf), "T%02xthread:%s;", GDB_SIGNAL_TRAP, + gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id))); + + put_packet(s, buf); + break; } else { goto unknown_command; } case 'k': /* Kill the target */ From patchwork Tue Nov 6 11:05:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670127 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0932814BD for ; Tue, 6 Nov 2018 11:19:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E38CA29AFC for ; Tue, 6 Nov 2018 11:19:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D75EF29B05; Tue, 6 Nov 2018 11:19:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 54BD529AFC for ; Tue, 6 Nov 2018 11:19:26 +0000 (UTC) Received: from localhost ([::1]:40370 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzOF-00066P-5T for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:19:23 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49171) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzC5-0006jn-U5 for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzC0-0001cM-59 for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:49 -0500 Received: from greensocs.com ([193.104.36.180]:46751) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBs-0000rC-PF; Tue, 06 Nov 2018 06:06:37 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 5235F5C025F; Tue, 6 Nov 2018 12:06:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502375; bh=gqBhDPpxGlbslzJ48Mohw6BqhBqD+2sU66wHvcW48ag=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=o+JG0tIKnp+9O4yIfD9IQl81k6mQba/WPItPEPiNEF69w8TUps/l+NSd0+oPl99D2 vUFqANGc3VPzHBPLeSB8WcdxGYTdxe0JXCnz7HrZmQQoCtFq8ji4+QdiFnvTpKAJDX wkFzZcmt80FArHUGPXmvUp4Q/mnvSRTzz7nf812E= 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=VcvKCiMB; dkim=pass (1024-bit key) header.d=greensocs.com header.b=VcvKCiMB 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 JkPd5eGj574G; Tue, 6 Nov 2018 12:06:14 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 962215C026D; Tue, 6 Nov 2018 12:06:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502370; bh=gqBhDPpxGlbslzJ48Mohw6BqhBqD+2sU66wHvcW48ag=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=VcvKCiMBw9oI7xXa2XZomltzMrJZI21jZJT8COJ8O7F3zJodzgwvT6Q8PoyJhp1Pf 50bD3AGen89Gmzgr0UG4SvcKoWJuQh8gmfPLYOUzvfE8gkEXk8/mjKlSwdaQcq88m0 r2YOeMpZOAo6Iawr/6aZJxfm6Y3XyXv22RIh/0CU= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 209665C0279; Tue, 6 Nov 2018 12:06:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502370; bh=gqBhDPpxGlbslzJ48Mohw6BqhBqD+2sU66wHvcW48ag=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=VcvKCiMBw9oI7xXa2XZomltzMrJZI21jZJT8COJ8O7F3zJodzgwvT6Q8PoyJhp1Pf 50bD3AGen89Gmzgr0UG4SvcKoWJuQh8gmfPLYOUzvfE8gkEXk8/mjKlSwdaQcq88m0 r2YOeMpZOAo6Iawr/6aZJxfm6Y3XyXv22RIh/0CU= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:45 +0100 Message-Id: <20181106110548.4209-14-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 13/16] gdbstub: processes initialization on new peer connection 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP When a new connection is established, we set the first process to be attached, and the others detached. The first CPU of the first process is selected as the current CPU. Signed-off-by: Luc Michel Reviewed-by: Alistair Francis --- gdbstub.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index ba365808db..1a3353ff3c 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2245,13 +2245,14 @@ static bool gdb_accept(void) close(fd); return false; } s = g_malloc0(sizeof(GDBState)); - s->c_cpu = first_cpu; - s->g_cpu = first_cpu; create_unique_process(s); + s->processes[0].attached = true; + s->c_cpu = gdb_first_cpu(s); + s->g_cpu = s->c_cpu; s->fd = fd; gdb_has_xml = false; gdbserver_state = s; return true; @@ -2333,12 +2334,23 @@ static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size) } } static void gdb_chr_event(void *opaque, int event) { + int i; + GDBState *s = (GDBState *) opaque; + switch (event) { case CHR_EVENT_OPENED: + /* Start with first process attached, others detached */ + for (i = 0; i < s->process_num; i++) { + s->processes[i].attached = !i; + } + + s->c_cpu = gdb_first_cpu(s); + s->g_cpu = s->c_cpu; + vm_stop(RUN_STATE_PAUSED); gdb_has_xml = false; break; default: break; @@ -2513,19 +2525,17 @@ int gdbserver_start(const char *device) mon_chr = s->mon_chr; cleanup_processes(s); memset(s, 0, sizeof(GDBState)); s->mon_chr = mon_chr; } - s->c_cpu = first_cpu; - s->g_cpu = first_cpu; create_processes(s); if (chr) { qemu_chr_fe_init(&s->chr, chr, &error_abort); qemu_chr_fe_set_handlers(&s->chr, gdb_chr_can_receive, gdb_chr_receive, - gdb_chr_event, NULL, NULL, NULL, true); + gdb_chr_event, NULL, s, NULL, true); } s->state = chr ? RS_IDLE : RS_INACTIVE; s->mon_chr = mon_chr; s->current_syscall_cb = NULL; From patchwork Tue Nov 6 11:05:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670137 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 62A4314BD for ; Tue, 6 Nov 2018 11:22:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 505A42A013 for ; Tue, 6 Nov 2018 11:22:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 442632A0C8; Tue, 6 Nov 2018 11:22:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DA0292A013 for ; Tue, 6 Nov 2018 11:22:36 +0000 (UTC) Received: from localhost ([::1]:40394 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzRM-0008UD-4A for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:22:36 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49184) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzC9-0006mj-KK for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzC4-0001u0-Is for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:53 -0500 Received: from greensocs.com ([193.104.36.180]:46757) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBt-0000rN-0B; Tue, 06 Nov 2018 06:06:37 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id BEE325C024F; Tue, 6 Nov 2018 12:06:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502375; bh=WgnMQ5pr+n/ESL8puF7jtpCC/FdzwfDNBDnQ0ACltqA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HeVVH0heJOMDA+QGO9c54JgekKX6dhBEfx2lf244IXICmBfEA+lQwpW2/StL9Wkvn d9D1Aex0QeOwSK2odlPuaZlyM8kiXAgVRh+BI3/2Rqu4x6W2mFFdJ7nxttuV9gwzFQ FOvFlciOAmuAG0c7/h37yu9lDLQh1oCVd94Wm+Fc= 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=R4N11l2t; dkim=pass (1024-bit key) header.d=greensocs.com header.b=R4N11l2t 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 ak2o_1jwB_cM; Tue, 6 Nov 2018 12:06:15 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 619705C9D9A; Tue, 6 Nov 2018 12:06:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502371; bh=WgnMQ5pr+n/ESL8puF7jtpCC/FdzwfDNBDnQ0ACltqA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=R4N11l2tv026tICF5QcMKE9GdctVx+m843XPTPvZ0tvJOnAU0b6RQ2bm3pKeyoZjZ 8Wr21x0Uco3kFN7UDS+sUW2m63ZdFEDwZSL1JoZeF788Q3odXQjGSmVhOj9dlB226H JAvxuiLe7Lyvfa4iwtMSDyGxHZHgOAAzSzNs/Ubs= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 CE81A5C0276; Tue, 6 Nov 2018 12:06:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502371; bh=WgnMQ5pr+n/ESL8puF7jtpCC/FdzwfDNBDnQ0ACltqA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=R4N11l2tv026tICF5QcMKE9GdctVx+m843XPTPvZ0tvJOnAU0b6RQ2bm3pKeyoZjZ 8Wr21x0Uco3kFN7UDS+sUW2m63ZdFEDwZSL1JoZeF788Q3odXQjGSmVhOj9dlB226H JAvxuiLe7Lyvfa4iwtMSDyGxHZHgOAAzSzNs/Ubs= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:46 +0100 Message-Id: <20181106110548.4209-15-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 14/16] gdbstub: gdb_set_stop_cpu: ignore request when process is not attached 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP When gdb_set_stop_cpu() is called with a CPU associated to a process currently not attached by the GDB client, return without modifying the stop CPU. Otherwise, GDB gets confused if it receives packets with a thread-id it does not know about. Signed-off-by: Luc Michel Acked-by: Alistair Francis --- gdbstub.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 1a3353ff3c..c662ada6ff 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1787,10 +1787,19 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) return RS_IDLE; } void gdb_set_stop_cpu(CPUState *cpu) { + GDBProcess *p = gdb_get_cpu_process(gdbserver_state, cpu); + + if (!p->attached) { + /* Having a stop CPU corresponding to a process that is not attached + * confuses GDB. So we ignore the request. + */ + return; + } + gdbserver_state->c_cpu = cpu; gdbserver_state->g_cpu = cpu; } #ifndef CONFIG_USER_ONLY From patchwork Tue Nov 6 11:05:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670119 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1E34B15A6 for ; Tue, 6 Nov 2018 11:14:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E2F82A29B for ; Tue, 6 Nov 2018 11:14:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0279B2A2B0; Tue, 6 Nov 2018 11:14:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B3C332A29B for ; Tue, 6 Nov 2018 11:14:14 +0000 (UTC) Received: from localhost ([::1]:40341 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzJF-00005c-P9 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:14:13 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49118) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzC0-0006fp-GV for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzBz-0001a4-MX for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:44 -0500 Received: from greensocs.com ([193.104.36.180]:46762) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBs-0000ra-Q1; Tue, 06 Nov 2018 06:06:37 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 29E0F5C026C; Tue, 6 Nov 2018 12:06:16 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502376; bh=Th2MJHUdNYEyzy14m2vDNx88f11TUXsyKWgcqpJpXlo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=2xclOS3qyEmApezL77MjwVe1yh+hx9Gtt1nWqCBO6vPd7nFLnjjKkRhzJUA2sknbd i+Ix+i56IAiGXiMMPcE4nBN51rNGTAUE0Njbk/GvPSyrQxlU9goiPfDLoBMAiibHSj cnMB0TjeWBYrv70vPIhw7FVZY4dluPeT10cux7zI= 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=7fLbtjKN; dkim=pass (1024-bit key) header.d=greensocs.com header.b=7fLbtjKN 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 ejPYYCtokP3r; Tue, 6 Nov 2018 12:06:15 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id C168C5C0276; Tue, 6 Nov 2018 12:06:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502371; bh=Th2MJHUdNYEyzy14m2vDNx88f11TUXsyKWgcqpJpXlo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=7fLbtjKNRjzI4BaglFHoezCUqwSK4xfeKuADv+I0dBhmdTW58UIXPzYDux06U+WS3 +WZEqD4lVzvMmgMZ+Sraa31053XAVxv7bjbuMLyfVyqx/eWM+O2ab8p6vXotW7XP7X UwVqogk2prIjjBt7v2UgdOMBBt64kYJbtf2ZnEmc= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 558CA5C024B; Tue, 6 Nov 2018 12:06:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502371; bh=Th2MJHUdNYEyzy14m2vDNx88f11TUXsyKWgcqpJpXlo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=7fLbtjKNRjzI4BaglFHoezCUqwSK4xfeKuADv+I0dBhmdTW58UIXPzYDux06U+WS3 +WZEqD4lVzvMmgMZ+Sraa31053XAVxv7bjbuMLyfVyqx/eWM+O2ab8p6vXotW7XP7X UwVqogk2prIjjBt7v2UgdOMBBt64kYJbtf2ZnEmc= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:47 +0100 Message-Id: <20181106110548.4209-16-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 15/16] gdbstub: add multiprocess extension support 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add multiprocess extension support by enabling multiprocess mode when the peer requests it, and by replying that we actually support it in the qSupported reply packet. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé Acked-by: Alistair Francis --- gdbstub.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index c662ada6ff..93a7c956c2 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1721,10 +1721,16 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf) snprintf(buf, sizeof(buf), "PacketSize=%x", MAX_PACKET_LENGTH); cc = CPU_GET_CLASS(first_cpu); if (cc->gdb_core_xml_file != NULL) { pstrcat(buf, sizeof(buf), ";qXfer:features:read+"); } + + if (strstr(p, "multiprocess+")) { + s->multiprocess = true; + } + pstrcat(buf, sizeof(buf), ";multiprocess+"); + put_packet(s, buf); break; } if (strncmp(p, "Xfer:features:read:", 19) == 0) { const char *xml; From patchwork Tue Nov 6 11:05:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 10670121 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D570314BD for ; Tue, 6 Nov 2018 11:15:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C4CD12A29B for ; Tue, 6 Nov 2018 11:15:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B8ADC2A2B0; Tue, 6 Nov 2018 11:15:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 27F1B2A29B for ; Tue, 6 Nov 2018 11:15:58 +0000 (UTC) Received: from localhost ([::1]:40356 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzKv-0001X0-Ax for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Nov 2018 06:15:57 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49139) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzC1-0006gR-SC for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJzC0-0001f7-UX for qemu-devel@nongnu.org; Tue, 06 Nov 2018 06:06:45 -0500 Received: from greensocs.com ([193.104.36.180]:46770) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJzBt-0000ro-PP; Tue, 06 Nov 2018 06:06:39 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id A664E5C026D; Tue, 6 Nov 2018 12:06:16 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502376; bh=LMxXTTNAWH8AGdUZMYt2021rnq5Xws6PAKfpWkpVZSY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=FoQbE3IxRJjudo1Ja32o9Z3Tp04upFcv0sMakdmtSymh/v3wc9VTEKEmkyxpovaO+ eq0F05QPF6mqdZtj6IpfoiAiu8yj8yjgkojG3f9+0BvCooycWdd2JE8xKu7NAu+f9u kQehL4rkpFtUdOvZzvrorVqAswxdqnllycj5be34= 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=2ZMjqoDQ; dkim=pass (1024-bit key) header.d=greensocs.com header.b=2ZMjqoDQ 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 ZsSAne-TCseE; Tue, 6 Nov 2018 12:06:15 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 4C7825C0265; Tue, 6 Nov 2018 12:06:12 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502372; bh=LMxXTTNAWH8AGdUZMYt2021rnq5Xws6PAKfpWkpVZSY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=2ZMjqoDQ8NzJ25TgSEm2vys+x974TPTWqB0oFPma0rkRRPFSEpYhN5rZgqJPOZ90c iCE2Yh8xHZewPAFXpUdO+0l48OwAY4w5T2KVCfNrJDnc87ehE9qpCCBUT3RzlM003N g2zeIPFhyM4Zko50t2qzEwN5VDBAwICDojVoI65Y= Received: from michell-laptop.home.lmichel.fr (lfbn-1-8165-82.w90-112.abo.wanadoo.fr [90.112.74.82]) (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 CA4085C024B; Tue, 6 Nov 2018 12:06:11 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1541502372; bh=LMxXTTNAWH8AGdUZMYt2021rnq5Xws6PAKfpWkpVZSY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=2ZMjqoDQ8NzJ25TgSEm2vys+x974TPTWqB0oFPma0rkRRPFSEpYhN5rZgqJPOZ90c iCE2Yh8xHZewPAFXpUdO+0l48OwAY4w5T2KVCfNrJDnc87ehE9qpCCBUT3RzlM003N g2zeIPFhyM4Zko50t2qzEwN5VDBAwICDojVoI65Y= From: Luc Michel To: qemu-devel@nongnu.org Date: Tue, 6 Nov 2018 12:05:48 +0100 Message-Id: <20181106110548.4209-17-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181106110548.4209-1-luc.michel@greensocs.com> References: <20181106110548.4209-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v4 16/16] arm/xlnx-zynqmp: put APUs and RPUs in separate CPU clusters 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 , Eduardo Habkost , alistair@alistair23.me, mark.burton@greensocs.com, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , saipava@xilinx.com, edgari@xilinx.com, qemu-arm@nongnu.org, Luc Michel Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Create two separate CPU clusters for APUs and RPUs. Signed-off-by: Luc Michel --- include/hw/arm/xlnx-zynqmp.h | 3 +++ hw/arm/xlnx-zynqmp.c | 21 +++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h index 98f925ab84..591515c760 100644 --- a/include/hw/arm/xlnx-zynqmp.h +++ b/include/hw/arm/xlnx-zynqmp.h @@ -29,10 +29,11 @@ #include "hw/dma/xlnx_dpdma.h" #include "hw/dma/xlnx-zdma.h" #include "hw/display/xlnx_dp.h" #include "hw/intc/xlnx-zynqmp-ipi.h" #include "hw/timer/xlnx-zynqmp-rtc.h" +#include "hw/cpu/cluster.h" #define TYPE_XLNX_ZYNQMP "xlnx,zynqmp" #define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \ TYPE_XLNX_ZYNQMP) @@ -75,10 +76,12 @@ typedef struct XlnxZynqMPState { /*< private >*/ DeviceState parent_obj; /*< public >*/ + CPUClusterState apu_cluster; + CPUClusterState rpu_cluster; ARMCPU apu_cpu[XLNX_ZYNQMP_NUM_APU_CPUS]; ARMCPU rpu_cpu[XLNX_ZYNQMP_NUM_RPU_CPUS]; GICState gic; MemoryRegion gic_mr[XLNX_ZYNQMP_GIC_REGIONS][XLNX_ZYNQMP_GIC_ALIASES]; diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c index c195040350..42a138074c 100644 --- a/hw/arm/xlnx-zynqmp.c +++ b/hw/arm/xlnx-zynqmp.c @@ -176,16 +176,22 @@ static void xlnx_zynqmp_create_rpu(XlnxZynqMPState *s, const char *boot_cpu, { Error *err = NULL; int i; int num_rpus = MIN(smp_cpus - XLNX_ZYNQMP_NUM_APU_CPUS, XLNX_ZYNQMP_NUM_RPU_CPUS); + object_initialize_child(OBJECT(s), "rpu-cluster", &s->rpu_cluster, + sizeof(s->rpu_cluster), TYPE_CPU_CLUSTER, + &error_abort, NULL); + + qdev_init_nofail(DEVICE(&s->rpu_cluster)); + for (i = 0; i < num_rpus; i++) { char *name; object_initialize(&s->rpu_cpu[i], sizeof(s->rpu_cpu[i]), "cortex-r5f-" TYPE_ARM_CPU); - object_property_add_child(OBJECT(s), "rpu-cpu[*]", + object_property_add_child(OBJECT(&s->rpu_cluster), "rpu-cpu[*]", OBJECT(&s->rpu_cpu[i]), &error_abort); name = object_get_canonical_path_component(OBJECT(&s->rpu_cpu[i])); if (strcmp(name, boot_cpu)) { /* Secondary CPUs start in PSCI powered-down state */ @@ -211,14 +217,19 @@ static void xlnx_zynqmp_init(Object *obj) { XlnxZynqMPState *s = XLNX_ZYNQMP(obj); int i; int num_apus = MIN(smp_cpus, XLNX_ZYNQMP_NUM_APU_CPUS); + object_initialize_child(obj, "apu-cluster", &s->apu_cluster, + sizeof(s->apu_cluster), TYPE_CPU_CLUSTER, + &error_abort, NULL); + for (i = 0; i < num_apus; i++) { - object_initialize_child(obj, "apu-cpu[*]", &s->apu_cpu[i], - sizeof(s->apu_cpu[i]), - "cortex-a53-" TYPE_ARM_CPU, &error_abort, NULL); + object_initialize_child(OBJECT(&s->apu_cluster), "apu-cpu[*]", + &s->apu_cpu[i], sizeof(s->apu_cpu[i]), + "cortex-a53-" TYPE_ARM_CPU, &error_abort, + NULL); } sysbus_init_child_obj(obj, "gic", &s->gic, sizeof(s->gic), gic_class_name()); @@ -331,10 +342,12 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp) qdev_prop_set_uint32(DEVICE(&s->gic), "num-cpu", num_apus); qdev_prop_set_bit(DEVICE(&s->gic), "has-security-extensions", s->secure); qdev_prop_set_bit(DEVICE(&s->gic), "has-virtualization-extensions", s->virt); + qdev_init_nofail(DEVICE(&s->apu_cluster)); + /* Realize APUs before realizing the GIC. KVM requires this. */ for (i = 0; i < num_apus; i++) { char *name; object_property_set_int(OBJECT(&s->apu_cpu[i]), QEMU_PSCI_CONDUIT_SMC,