From patchwork Fri Nov 23 09:17:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002207 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="OETuszPu"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="Mg9HSvVp"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="Mg9HSvVp"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431W7975lTz9s7T for ; Fri, 23 Nov 2018 20:22:45 +1100 (AEDT) Received: from localhost ([::1]:51171 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7fe-0003Ch-Va for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:22:43 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57979) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b3-0007xJ-3O for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b1-0000kp-Af for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:57 -0500 Received: from greensocs.com ([193.104.36.180]:47021) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7ar-0000Lk-2d; Fri, 23 Nov 2018 04:17:45 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 537395C0266; Fri, 23 Nov 2018 10:17:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964655; bh=ju1WYvA2EUmZY7kpvwLEudOdGl4YYRBkHtotf0cphzs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=OETuszPuWSpcpKvIR9ExtNDNSolDhtwyqqpawQm8woDhYoW1SE9YStV+09LlwLtD7 vU4AlsOY3dOiGQzC8V4AtN6FGJLsKIwZCCo1OehVKnhBmLLKpuw9lJJm8sdjR+TyEj 5omMbqM6bzChnomg5MWiHUE6E7Wrw0xc0nf3TuTA= 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=Mg9HSvVp; dkim=pass (1024-bit key) header.d=greensocs.com header.b=Mg9HSvVp 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 u0lu6FIHAYnR; Fri, 23 Nov 2018 10:17:32 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 2114D5BD1B4; Fri, 23 Nov 2018 10:17:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964652; bh=ju1WYvA2EUmZY7kpvwLEudOdGl4YYRBkHtotf0cphzs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Mg9HSvVp+ZN2qclMleC8+PqwMr8Z3oho1bh7oUvZxs138GKzLBpq6QVZwY9Ye72JG qVCsl/HLOik6kqELjhylWEyJIKPcx/7Oy6YyxHkFliRnG1OyV8WuABw/VNBjLYllTM Nx9YeBDIIGummdQj4gziMDkn4xLDWktLi02GWIQ4= 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 B659944688F; Fri, 23 Nov 2018 10:17:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964652; bh=ju1WYvA2EUmZY7kpvwLEudOdGl4YYRBkHtotf0cphzs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Mg9HSvVp+ZN2qclMleC8+PqwMr8Z3oho1bh7oUvZxs138GKzLBpq6QVZwY9Ye72JG qVCsl/HLOik6kqELjhylWEyJIKPcx/7Oy6YyxHkFliRnG1OyV8WuABw/VNBjLYllTM Nx9YeBDIIGummdQj4gziMDkn4xLDWktLi02GWIQ4= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:14 +0100 Message-Id: <20181123091729.29921-2-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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é Reviewed-by: Edgar E. Iglesias --- include/hw/cpu/cluster.h | 38 ++++++++++++++++++++++++++ hw/cpu/cluster.c | 59 ++++++++++++++++++++++++++++++++++++++++ MAINTAINERS | 2 ++ hw/cpu/Makefile.objs | 2 +- 4 files changed, 100 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..11f50d5f6b --- /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 >*/ + uint32_t cluster_id; +} CPUClusterState; + +#endif diff --git a/hw/cpu/cluster.c b/hw/cpu/cluster.c new file mode 100644 index 0000000000..e0ffd76152 --- /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 uint32_t cluster_id_auto_increment; + CPUClusterState *cluster = CPU_CLUSTER(obj); + + cluster->cluster_id = cluster_id_auto_increment++; +} + +static Property cpu_cluster_properties[] = { + DEFINE_PROP_UINT32("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/MAINTAINERS b/MAINTAINERS index 1032406c56..f7d47d2b1d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1120,11 +1120,13 @@ Machine core M: Eduardo Habkost M: Marcel Apfelbaum S: Supported F: hw/core/machine.c F: hw/core/null-machine.c +F: hw/cpu/cluster.c F: include/hw/boards.h +F: include/hw/cpu/cluster.h T: git https://github.com/ehabkost/qemu.git machine-next Xtensa Machines --------------- sim 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 Fri Nov 23 09:17:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002206 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="ssHEWozy"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="4f9bo3Js"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="4f9bo3Js"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431W6q5z7Kz9s7T for ; Fri, 23 Nov 2018 20:22:27 +1100 (AEDT) Received: from localhost ([::1]:51168 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7fN-0002yb-5z for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:22:25 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57965) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b2-0007vm-OA for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b1-0000ju-1G for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:56 -0500 Received: from greensocs.com ([193.104.36.180]:47024) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7ar-0000Ll-2k; Fri, 23 Nov 2018 04:17:45 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 83F8D5C024E; Fri, 23 Nov 2018 10:17:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964653; bh=M0CprRAj6jUlUEKlFc5dMkzT5RJPghUHMDARv5+btVc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ssHEWozywZIxDuiYJVNG4acxmpt/s2b9LyqJiPVf6SFgId+S5UdmJ4rOodmLEIL5X nyeDqMeBrDXDY+C9nroBaO/W7aEjz6rdYMkupWrKOCOR948/5XqVP0w/lpD5xb9BYX nIENqRq+5C5jINv1N9aS8yhk2VArvy2Ptn2hOZF0= 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=4f9bo3Js; dkim=pass (1024-bit key) header.d=greensocs.com header.b=4f9bo3Js 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 lPNzAxaOEqYM; Fri, 23 Nov 2018 10:17:32 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 8B9F05BD1BB; Fri, 23 Nov 2018 10:17:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964652; bh=M0CprRAj6jUlUEKlFc5dMkzT5RJPghUHMDARv5+btVc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=4f9bo3JsYMN5k0BN7ssSpk0aCSNtkoMM2NvigFxAwAKGYnLW+TEWLQ2NMjeGklhf8 OaSxCac3ZluZtOye2pHkgB6JlkhxdVXLlJUPqUl2/ibYiRW9efW8TVrPZ6hXIR7nLh nYGAAt7FF/6+CWCnXfTEnZk6hdFsOkwdugyyjjK8= 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 269C644688F; Fri, 23 Nov 2018 10:17:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964652; bh=M0CprRAj6jUlUEKlFc5dMkzT5RJPghUHMDARv5+btVc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=4f9bo3JsYMN5k0BN7ssSpk0aCSNtkoMM2NvigFxAwAKGYnLW+TEWLQ2NMjeGklhf8 OaSxCac3ZluZtOye2pHkgB6JlkhxdVXLlJUPqUl2/ibYiRW9efW8TVrPZ6hXIR7nLh nYGAAt7FF/6+CWCnXfTEnZk6hdFsOkwdugyyjjK8= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:15 +0100 Message-Id: <20181123091729.29921-3-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 Reviewed-by: Edgar E. Iglesias Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index c4e4f9f082..26f5a7449a 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,69 @@ 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. To avoid subtle errors at + * runtime, we enforce here that the machine does not use a cluster ID + * that would lead to PID 0. */ + assert(process->pid != UINT32_MAX); + 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; + + if (pa->pid < pb->pid) { + return -1; + } else if (pa->pid > pb->pid) { + return 1; + } else { + return 0; + } +} + +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 +2141,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 Fri Nov 23 09:17:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002203 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="3JdHeqUy"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="Hdx5UaMP"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="OWWHhx9U"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431W3S0yYhz9s7T for ; Fri, 23 Nov 2018 20:19:32 +1100 (AEDT) Received: from localhost ([::1]:51152 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7cX-0000gd-DZ for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:19:29 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57989) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b3-0007yS-Ey for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b1-0000m7-UM for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:57 -0500 Received: from greensocs.com ([193.104.36.180]:47023) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7ar-0000Lj-2e; Fri, 23 Nov 2018 04:17:45 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 61A055C025C; Fri, 23 Nov 2018 10:17:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964654; bh=KrQImGji4CDiFKtwmdt0cnVuILaxfZ+qg7f4LV2oAA0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=3JdHeqUybAsL0UWJ6XA/3g1BzzIym7R2cVbDABXh3ccIB2wPDRzd6flSr0FXsSrj9 YETIDAdZghEG3A1CJzd2CfcrDTMcluYz7U4p8u4ibq/OMXQRvHComOiCjMg/usOPYm O7egYQPO+f9tOfEkYZjVRI7rHtULI5BBIcrOdSOc= 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=Hdx5UaMP; dkim=pass (1024-bit key) header.d=greensocs.com header.b=OWWHhx9U 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 QDMe3M1pUPpD; Fri, 23 Nov 2018 10:17:33 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 0B13E5BD1A0; Fri, 23 Nov 2018 10:17:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964653; bh=KrQImGji4CDiFKtwmdt0cnVuILaxfZ+qg7f4LV2oAA0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Hdx5UaMPBtPYC342v2voJNW82zeU5xEakY63fT7+eX1AYX4K3G0254MCDZKi7AFTk KW0E1uaLSpdqGEC8kMKJvCKUCSB2CDGRSvfx74eD3G8djfovodUor6OLckU2ft/oD+ 22VJRvEy6qA6YIVpfcuIxJvjNUs26m64lOTjO+zY= 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 8E8105C0259; Fri, 23 Nov 2018 10:17:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964652; bh=KrQImGji4CDiFKtwmdt0cnVuILaxfZ+qg7f4LV2oAA0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=OWWHhx9URe7We9BVC5xSR8gIKxWdWqKymgQ7zlz16HVNfedJOaSuR2YIA7TU4t7b0 6X/L3AoNc51SFRcHao5eX8oLG0L9gVejoDvLyufV8xAb3s1LIGmi9cvrVncUJEF9Yo XUo07hTLNmIMBp+Ltjgk1qTECWDPBx5jdt2D9GC0= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:16 +0100 Message-Id: <20181123091729.29921-4-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 Reviewed-by: Edgar E. Iglesias --- gdbstub.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 26f5a7449a..4fbc05dfe3 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 Fri Nov 23 09:17:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002219 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="fmY2jqYw"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="i5ZI9EV+"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="i5ZI9EV+"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WLy633Bz9s7T for ; Fri, 23 Nov 2018 20:32:58 +1100 (AEDT) Received: from localhost ([::1]:51233 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7pY-0004XQ-I5 for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:32:56 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58050) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bA-0008BO-LZ for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b5-0000t9-IC for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:04 -0500 Received: from greensocs.com ([193.104.36.180]:47022) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7ar-0000Lh-2g; Fri, 23 Nov 2018 04:17:45 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 5C2A95C0269; Fri, 23 Nov 2018 10:17:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964655; bh=ldSn2FV2r8RMD86lKEPCfAC/mylO38/xsILt3UOkORk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fmY2jqYwZyBy2RPsYVzfXYFe4gfm4wI7d+dTNw/ZsBD+vvjrrxLQw494kErwN7Vc7 n6G7Ww9AvB9U37L16W1pZqkGv2bxDk3xowDLAA4E6cHdi7A9Gb8NGJsruK6jbbaYO0 ydW42dSJi7N1Ihhy0nB17Y8oMtiF6fNhPzlsWFYw= 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=i5ZI9EV+; dkim=pass (1024-bit key) header.d=greensocs.com header.b=i5ZI9EV+ 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 g0LfWF7hETgM; Fri, 23 Nov 2018 10:17:34 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 821035C0259; Fri, 23 Nov 2018 10:17:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964653; bh=ldSn2FV2r8RMD86lKEPCfAC/mylO38/xsILt3UOkORk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=i5ZI9EV+1QGXq9gYwXY1oB53Fo2rPUD26RvrDtsR9pGYhdsvgnFHOx8KJ6qeNAEEf JCA+ZX810ei4pFmphlI6WjR5Nt8/wsiMfKkLcZe5xkbkg3URf0AJ1weOHSNw17vPFU uNodd1ymmkGgw4H3R3qMWvxQ1KuWFpyLIWvRM4IM= 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 0C3895C024E; Fri, 23 Nov 2018 10:17:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964653; bh=ldSn2FV2r8RMD86lKEPCfAC/mylO38/xsILt3UOkORk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=i5ZI9EV+1QGXq9gYwXY1oB53Fo2rPUD26RvrDtsR9pGYhdsvgnFHOx8KJ6qeNAEEf JCA+ZX810ei4pFmphlI6WjR5Nt8/wsiMfKkLcZe5xkbkg3URf0AJ1weOHSNw17vPFU uNodd1ymmkGgw4H3R3qMWvxQ1KuWFpyLIWvRM4IM= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:17 +0100 Message-Id: <20181123091729.29921-5-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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é Reviewed-by: Edgar E. Iglesias --- gdbstub.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 136 insertions(+), 18 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 4fbc05dfe3..64a1db21b5 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -680,10 +680,75 @@ 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; + + if (!tid) { + /* 0 means any thread, we take the first one */ + tid = 1; + } + + cpu = find_cpu(tid); + + 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 +1001,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 +1014,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 +1176,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 +1391,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 +1422,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 Fri Nov 23 09:17:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002215 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="GSLU2dKn"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="lJ4R/AiT"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="dbWChZ+6"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WFr3rCqz9sCV for ; Fri, 23 Nov 2018 20:28:32 +1100 (AEDT) Received: from localhost ([::1]:51209 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7lF-0000p3-O1 for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:28:29 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57967) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b2-0007vo-OR for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b1-0000k7-2P for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:56 -0500 Received: from greensocs.com ([193.104.36.180]:47081) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7au-0000Xy-58; Fri, 23 Nov 2018 04:17:48 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 39D405C0259; Fri, 23 Nov 2018 10:17:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964656; bh=WGwApLbecnlIWPCTr31Qe7wkqbNbnQf6q5Yo5WQ1aIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GSLU2dKncUyVP2JsnCEsMJaUPFyCXuqaAvxrppJA3ye1j0IS0CnI3ReNKNgKSknIe r4wT547JDOqYPCrFMdVi8OSoqM2tV0aNSDj1yO6WbqiHX1JGZ5ML7SIWIq31LJi3Ky +GmykpA5YNwA26kISSCGX9Jy9cb6+KfdHSti/iHE= 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=lJ4R/AiT; dkim=pass (1024-bit key) header.d=greensocs.com header.b=dbWChZ+6 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 DFMFmygzAPcl; Fri, 23 Nov 2018 10:17:35 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 19A2B5C025D; Fri, 23 Nov 2018 10:17:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964654; bh=WGwApLbecnlIWPCTr31Qe7wkqbNbnQf6q5Yo5WQ1aIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lJ4R/AiTSbiFy84gjHamHNTFbJw/7oVpwIjy6lXpBwO3t/oFLWJ9N3Jg1prcvJIpR wgDoL+/odwtkZE3duxpisZ1T03+gk/6TBPX9zyW5eTN4tgJICS8Bf3xoUxnPDIP9yA LWfGIAxWYjL2I0eIiV4hbjkGc4StAPcrOQVLk/YU= 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 84F2B5C025C; Fri, 23 Nov 2018 10:17:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964653; bh=WGwApLbecnlIWPCTr31Qe7wkqbNbnQf6q5Yo5WQ1aIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=dbWChZ+6HxGil4m3JVdvmZumwXXhz13bnKxWGN5uiIyeTK/Fu6InkyCPv3IznfoI2 MQiY02HWNydUU0EGDVQv3yQrsoOzGZgjjjqbOm5osWr631R600vLlzVUv77WqA7v2X fLatAU3TbNtMDScUNK+zrgGH+2nmDiMlS81eYREk= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:18 +0100 Message-Id: <20181123091729.29921-6-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add the gdb_first_attached_cpu() and gdb_next_attached_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é Reviewed-by: Edgar E. Iglesias Acked-by: Alistair Francis --- gdbstub.c | 117 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 102 insertions(+), 15 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 64a1db21b5..691b877aa8 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; @@ -745,10 +775,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_attached_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_attached_cpu(const GDBState *s) +{ + CPUState *cpu = first_cpu; + GDBProcess *process = gdb_get_cpu_process(s, cpu); + + if (!process->attached) { + return gdb_next_attached_cpu(s, cpu); + } + + return cpu; +} + static const char *get_feature_xml(const char *p, const char **newp, CPUClass *cc) { size_t len; int i; @@ -1083,14 +1144,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) { @@ -1129,29 +1192,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_attached_cpu(s); + while (cpu) { + if (newstates[cpu->cpu_index] == 1) { + newstates[cpu->cpu_index] = cur_action; } + + cpu = gdb_next_attached_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; @@ -1159,10 +1245,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 Fri Nov 23 09:17:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002202 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="g1HdVsQc"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="Hr6w+mXm"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="Hr6w+mXm"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431W373qJmz9s7T for ; Fri, 23 Nov 2018 20:19:15 +1100 (AEDT) Received: from localhost ([::1]:51147 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7cG-0008Tt-7f for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:19:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57952) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b2-0007uv-Fp for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b1-0000kX-7r for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:56 -0500 Received: from greensocs.com ([193.104.36.180]:47080) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7au-0000Xv-2K; Fri, 23 Nov 2018 04:17:48 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 78D8C5C025D; Fri, 23 Nov 2018 10:17:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964656; bh=gsmupulPFuLGf4QxZLVuHGjqeD90Ae9T8kYxMHWyEG8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=g1HdVsQcoI92S8s+PpsY5co7NrEPU51ZsTfHwXcQleSni4aMma2nD5qBnuaKKUAcz PhAxWeirtKrFfl0QJ8IqnVxofQCWeWDoTnFbKOFirUIO3xO9bcwywo1z863AAGh7mw e5mYKFWzP4PJHnTWHe/2A/w1S5SGTXqIOxq9Fri4= 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=Hr6w+mXm; dkim=pass (1024-bit key) header.d=greensocs.com header.b=Hr6w+mXm 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 2JYoTxgd91_6; Fri, 23 Nov 2018 10:17:35 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 7178B5C025E; Fri, 23 Nov 2018 10:17:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964654; bh=gsmupulPFuLGf4QxZLVuHGjqeD90Ae9T8kYxMHWyEG8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Hr6w+mXmYivP92SNi3IcG1rr5qWpF3vi+o8Cc2n52upweOEERHIK7uOo72/g6FDdT aQ95ecxR+pkRerckl60D1RO2MhzG9n4ZG+qY3cz8ERlFmcC20JS4SYql8SRxOZYxVf bNaMz7Fm8E6uwPfEgd4P+jD4L0ZqIP1i3WkxgeMM= 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 141E25BD1BB; Fri, 23 Nov 2018 10:17:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964654; bh=gsmupulPFuLGf4QxZLVuHGjqeD90Ae9T8kYxMHWyEG8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Hr6w+mXmYivP92SNi3IcG1rr5qWpF3vi+o8Cc2n52upweOEERHIK7uOo72/g6FDdT aQ95ecxR+pkRerckl60D1RO2MhzG9n4ZG+qY3cz8ERlFmcC20JS4SYql8SRxOZYxVf bNaMz7Fm8E6uwPfEgd4P+jD4L0ZqIP1i3WkxgeMM= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:19 +0100 Message-Id: <20181123091729.29921-7-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 Reviewed-by: Edgar E. Iglesias --- gdbstub.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 691b877aa8..728efdabee 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1548,13 +1548,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 Fri Nov 23 09:17:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002218 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="v+gTaO4X"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="tyjvSgsc"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="tyjvSgsc"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WJt24Zrz9s8J for ; Fri, 23 Nov 2018 20:31:10 +1100 (AEDT) Received: from localhost ([::1]:51225 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7nn-0003Ng-Nm for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:31:07 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58048) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bA-0008BN-LB for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b5-0000tE-Nf for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:04 -0500 Received: from greensocs.com ([193.104.36.180]:47082) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7au-0000Xw-4C; Fri, 23 Nov 2018 04:17:48 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 15DFE5BD1BB; Fri, 23 Nov 2018 10:17:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=N3SgyWObF08UCOAHR0WsOdofElUyflERkmzj4Rs5gYk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=v+gTaO4XNYb+WvpOAJ3epK67yEKyHu5oe5Kfy3NNipt1FbM0mA0z3PeoloeDivh6E VjvraiwCqk96ChyLxTkw8JVYbf8QG8bzh15wrrBGI5kxhuOUyM5rw+2wGwfjkx92G5 F5I4g/kxrnBG0eHxiSGnXQyjh5ZQUnoZEw98qjno= 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=tyjvSgsc; dkim=pass (1024-bit key) header.d=greensocs.com header.b=tyjvSgsc 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 z7vvdE3Gzq6Y; Fri, 23 Nov 2018 10:17:36 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id D96D25BD1A0; Fri, 23 Nov 2018 10:17:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964654; bh=N3SgyWObF08UCOAHR0WsOdofElUyflERkmzj4Rs5gYk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=tyjvSgscMLb7qhEKU8oWeIII3GkcZec4TR78IKFZfcd5sW0RPEl2e/DS8WcGZ/Juw UGcuu6P2KqPvvPvL6mJ0QE0BmDxkbwcAa9lijHkQgRHpLxWGWhd4zr1IFStYSHg01k D/5FHUEmUS3R1udApWMPMD3xdnpnbmgN8YjtNLDk= 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 778785BD1BB; Fri, 23 Nov 2018 10:17:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964654; bh=N3SgyWObF08UCOAHR0WsOdofElUyflERkmzj4Rs5gYk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=tyjvSgscMLb7qhEKU8oWeIII3GkcZec4TR78IKFZfcd5sW0RPEl2e/DS8WcGZ/Juw UGcuu6P2KqPvvPvL6mJ0QE0BmDxkbwcAa9lijHkQgRHpLxWGWhd4zr1IFStYSHg01k D/5FHUEmUS3R1udApWMPMD3xdnpnbmgN8YjtNLDk= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:20 +0100 Message-Id: <20181123091729.29921-8-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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é Reviewed-by: Edgar E. Iglesias --- gdbstub.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 728efdabee..12d4e33c40 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1262,11 +1262,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]; @@ -1558,30 +1557,48 @@ 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_attached_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_attached_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 and name in multiprocess mode */ + ObjectClass *oc = object_get_class(OBJECT(cpu)); + const char *cpu_model = object_class_get_name(oc); + char *cpu_name = + object_get_canonical_path_component(OBJECT(cpu)); + len = snprintf((char *)mem_buf, sizeof(buf) / 2, + "%s %s [%s]", cpu_model, cpu_name, + cpu->halted ? "halted " : "running"); + g_free(cpu_name); + } 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 Fri Nov 23 09:17:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002205 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="dXK+jRQW"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="uoevaf3p"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="uoevaf3p"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431W4L0S3nz9s7T for ; Fri, 23 Nov 2018 20:20:16 +1100 (AEDT) Received: from localhost ([::1]:51156 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7dF-0001KS-3P for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:20:13 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57984) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b3-0007yM-Aa for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b1-0000kx-CK for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:57 -0500 Received: from greensocs.com ([193.104.36.180]:47083) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7au-0000Y0-69; Fri, 23 Nov 2018 04:17:48 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 6F8C45E7082; Fri, 23 Nov 2018 10:17:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=Mny1rR1h2i788cnp1HVll+7xT6ZFRKzOPMBjlq+RxN0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=dXK+jRQWmFnnXKdPlAVBNkI5hd/pAhhZ0y8oVQLzUKaA2gHOhvkor146UCu6/dsmQ 0F4xtz005OufAVQVfNpiUZ7/7NCcPvy0F4CUOFeXqmGCEykriRDwrtKdGkqUOV70iN w13uwuwM0abBRMTO3uHVka+rfXDVoDSMyM8eDq4U= 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=uoevaf3p; dkim=pass (1024-bit key) header.d=greensocs.com header.b=uoevaf3p 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 BlaAP7zIEGqf; Fri, 23 Nov 2018 10:17:36 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 4D2A15C0264; Fri, 23 Nov 2018 10:17:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964655; bh=Mny1rR1h2i788cnp1HVll+7xT6ZFRKzOPMBjlq+RxN0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=uoevaf3pV+f1YF12yls1rMfV0nnVsOpWIA+p8t5Lt6oSA7hgFFmiEeQU9XEa/3G7D +MRb0q5IgAUsX8RSRSVBvmKAvGvsi0rUZ9x/FRsEMhJNlc4UFyLs/ED7vnj2/8aaZ5 sk8QueCTGZajPa/uxLYL3xYCkyHDUUmAkO9Am4bU= 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 DEB165BD1BB; Fri, 23 Nov 2018 10:17:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964655; bh=Mny1rR1h2i788cnp1HVll+7xT6ZFRKzOPMBjlq+RxN0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=uoevaf3pV+f1YF12yls1rMfV0nnVsOpWIA+p8t5Lt6oSA7hgFFmiEeQU9XEa/3G7D +MRb0q5IgAUsX8RSRSVBvmKAvGvsi0rUZ9x/FRsEMhJNlc4UFyLs/ED7vnj2/8aaZ5 sk8QueCTGZajPa/uxLYL3xYCkyHDUUmAkO9Am4bU= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:21 +0100 Message-Id: <20181123091729.29921-9-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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é Reviewed-by: Edgar E. Iglesias Reviewed-by: Alistair Francis --- gdbstub.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 12d4e33c40..2be333bbd1 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, @@ -806,55 +808,57 @@ static CPUState *gdb_first_attached_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) { @@ -1260,10 +1264,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]; @@ -1643,18 +1648,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; } @@ -2327,10 +2333,11 @@ static int find_cpu_clusters(Object *child, void *opaque) * runtime, we enforce here that the machine does not use a cluster ID * that would lead to PID 0. */ assert(process->pid != UINT32_MAX); 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 Fri Nov 23 09:17:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002204 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="Ry5ycpug"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="1cxBHMf/"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="1cxBHMf/"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431W3T0bK6z9s8J for ; Fri, 23 Nov 2018 20:19:33 +1100 (AEDT) Received: from localhost ([::1]:51153 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7cY-0000jf-DY for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:19:30 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57930) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b1-0007tJ-Uu for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b0-0000jA-PR for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:55 -0500 Received: from greensocs.com ([193.104.36.180]:47085) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7au-0000Y5-6G; Fri, 23 Nov 2018 04:17:48 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id DEDBC5E7081; Fri, 23 Nov 2018 10:17:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=re3gB/1E0+SoOuecR3sYWQp0WTraPxbjQZHZwSWxwKc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Ry5ycpug84qk+Q+QEs5YRAv9/mEeZ9I1/esX0JbAttb0RNGgMvt8ZLa4tjE8aUBfb iQMamhdY8pNne4OPRk73sf5pkJnze0Yt30EY6qvoMZBA6o2KVItu7TF+ugY4pHbwyV 4V+xUQ8diJwe4FgR4TLYrQCxZDWtgnZA4EoE/mDQ= 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=1cxBHMf/; dkim=pass (1024-bit key) header.d=greensocs.com header.b=1cxBHMf/ 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 0agJa5V0Ji29; Fri, 23 Nov 2018 10:17:37 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id D2CBF5BD1B4; Fri, 23 Nov 2018 10:17:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964655; bh=re3gB/1E0+SoOuecR3sYWQp0WTraPxbjQZHZwSWxwKc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=1cxBHMf/GMby47/7yWO7/0j2zIGHeHoWFjR5GCe+slE9nsuw1TWGtT0qx/GQpdl0A SXDjpUVYtb5uEsC4MdHXwdpn/4Xk9dDO56lfaG1ipTrMRIcFuF3fZ3vMyOJ7x5IOCJ cncoIukw9vdtRummNq5cnm1ILmpaP0AqptjhSbLE= 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 4EE2B5BD1BB; Fri, 23 Nov 2018 10:17:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964655; bh=re3gB/1E0+SoOuecR3sYWQp0WTraPxbjQZHZwSWxwKc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=1cxBHMf/GMby47/7yWO7/0j2zIGHeHoWFjR5GCe+slE9nsuw1TWGtT0qx/GQpdl0A SXDjpUVYtb5uEsC4MdHXwdpn/4Xk9dDO56lfaG1ipTrMRIcFuF3fZ3vMyOJ7x5IOCJ cncoIukw9vdtRummNq5cnm1ILmpaP0AqptjhSbLE= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:22 +0100 Message-Id: <20181123091729.29921-10-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add support for multiprocess extension in gdb_vm_state_change() function. Signed-off-by: Luc Michel Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Edgar E. Iglesias Acked-by: Alistair Francis --- gdbstub.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 2be333bbd1..4c4f519dd9 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1717,10 +1717,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; @@ -1728,10 +1729,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: @@ -1745,12 +1754,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(); @@ -1788,11 +1797,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 Fri Nov 23 09:17:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002212 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="e7DaYj1W"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="kTT4IyNW"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="kTT4IyNW"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WDR4bchz9sCh for ; Fri, 23 Nov 2018 20:27:19 +1100 (AEDT) Received: from localhost ([::1]:51203 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7k5-0007vB-6p for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:27:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58224) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bQ-0008MB-4G for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7bP-0001rJ-6s for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:20 -0500 Received: from greensocs.com ([193.104.36.180]:47084) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bE-0000Y7-Av; Fri, 23 Nov 2018 04:18:08 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 4CA875E7083; Fri, 23 Nov 2018 10:17:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964658; bh=Z00BqOOzxwxQiFvqeJqBI3QzAKx10rAgWiZpdnSVwVs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=e7DaYj1WrjjQbPcr5c25MhjcKG7EP7lGKR4prndD91mW1KOIAGbAq3vPjnEU1JQQJ KqICnLA9/V21FixDFyPTUG4ZpiUkq8Or+7a7y1CXYW31hMCPUzMPorBHwyEI6WxgWJ feYCZ0MuEHezllBPOKbX1rTylUMGjBaRAKvE2N/E= 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=kTT4IyNW; dkim=pass (1024-bit key) header.d=greensocs.com header.b=kTT4IyNW 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 7Pu_KYu25Axg; Fri, 23 Nov 2018 10:17:37 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 4D9B15C026E; Fri, 23 Nov 2018 10:17:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964656; bh=Z00BqOOzxwxQiFvqeJqBI3QzAKx10rAgWiZpdnSVwVs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=kTT4IyNWHQH5ZawXbni4GnvBEcpHW5KqFT3/kulj2ugtQ2m9EGQUm6FqZp52yOrv7 OP81OEWwS4NG3fHzotXoLCoC5ubacGZvXqvU7jTdfz9qhAoancLFpPI9RWFPAPiejS kqS59mW3ImfZQK1Tjvy+Nm0I0cWA61rZmXGjYbv0= 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 E2D285BD1BB; Fri, 23 Nov 2018 10:17:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964656; bh=Z00BqOOzxwxQiFvqeJqBI3QzAKx10rAgWiZpdnSVwVs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=kTT4IyNWHQH5ZawXbni4GnvBEcpHW5KqFT3/kulj2ugtQ2m9EGQUm6FqZp52yOrv7 OP81OEWwS4NG3fHzotXoLCoC5ubacGZvXqvU7jTdfz9qhAoancLFpPI9RWFPAPiejS kqS59mW3ImfZQK1Tjvy+Nm0I0cWA61rZmXGjYbv0= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:23 +0100 Message-Id: <20181123091729.29921-11-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" '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é Reviewed-by: Edgar E. Iglesias Acked-by: Alistair Francis --- gdbstub.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 4c4f519dd9..0cccce1f38 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1041,24 +1041,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) { @@ -1333,13 +1348,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_attached_cpu(s); + } + + if (pid == gdb_get_cpu_pid(s, s->g_cpu)) { + s->g_cpu = gdb_first_attached_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 Fri Nov 23 09:17:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002214 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="1XagfGTW"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="sP2HEv8W"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="sP2HEv8W"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WFB5mS5z9sCw for ; Fri, 23 Nov 2018 20:27:58 +1100 (AEDT) Received: from localhost ([::1]:51206 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7ki-0008Q5-BO for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:27:56 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58165) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bL-0008KY-TP for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7bH-0001S2-7f for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:15 -0500 Received: from greensocs.com ([193.104.36.180]:47087) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bE-0000Y8-BP; Fri, 23 Nov 2018 04:18:08 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id BE04C5E7085; Fri, 23 Nov 2018 10:17:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964658; bh=E4uuTgcGUqGNTMOd03OtfX4La20pAFXFtyf8Zbn5sAc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=1XagfGTWq49UqKnfoKysJGF20HX/i/+we8fNezvebsx3qSOO247einOjIdd2K9aCp 0hwdqe/tHa3AEOqEP7w4X1sJGcqHPiJsxJzCloyj7e+aCmCvpu1hhWwC7CdU/PQTPQ 2GDTVmGzjibbSaNWCIX0LhnPpWl4JTWRs8bv/+AY= 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=sP2HEv8W; dkim=pass (1024-bit key) header.d=greensocs.com header.b=sP2HEv8W 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 JVKZyILpyXjc; Fri, 23 Nov 2018 10:17:38 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id DB1565C0270; Fri, 23 Nov 2018 10:17:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964656; bh=E4uuTgcGUqGNTMOd03OtfX4La20pAFXFtyf8Zbn5sAc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=sP2HEv8W722Li+qwu+69t81cbF7qsN58HCOgC73I7jqPqnDf+RnjqaL/BSwLC1WCF twpma+9Co6A3kriRCGx4n2F+LiLbCCkR+0FIfQFUFrMG/Bwtt8MpO0HWaljeeErl/Z qmznUC6X/uKdsKi3+ILDpUQqR1H2rWGJ6BHWEJZ0= 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 5655F5BD1BB; Fri, 23 Nov 2018 10:17:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964656; bh=E4uuTgcGUqGNTMOd03OtfX4La20pAFXFtyf8Zbn5sAc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=sP2HEv8W722Li+qwu+69t81cbF7qsN58HCOgC73I7jqPqnDf+RnjqaL/BSwLC1WCF twpma+9Co6A3kriRCGx4n2F+LiLbCCkR+0FIfQFUFrMG/Bwtt8MpO0HWaljeeErl/Z qmznUC6X/uKdsKi3+ILDpUQqR1H2rWGJ6BHWEJZ0= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:24 +0100 Message-Id: <20181123091729.29921-12-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add support for the '!' extended mode packet. This is required for the multiprocess extension. Signed-off-by: Luc Michel Reviewed-by: Edgar E. Iglesias Acked-by: Alistair Francis --- gdbstub.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 0cccce1f38..5cc643b9e0 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1296,10 +1296,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 Fri Nov 23 09:17:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002211 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="a77zgQOV"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="RjSG8tT3"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="RjSG8tT3"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WCC0cLkz9s8J for ; Fri, 23 Nov 2018 20:26:14 +1100 (AEDT) Received: from localhost ([::1]:51199 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7j2-00076Q-5e for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:26:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57946) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7b2-0007u5-An for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7b1-0000kG-4t for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:17:56 -0500 Received: from greensocs.com ([193.104.36.180]:47086) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7au-0000Y4-8D; Fri, 23 Nov 2018 04:17:48 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 1D2985E7087; Fri, 23 Nov 2018 10:17:39 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964659; bh=KWnv+BCREvO88TR1E8yg4ZwgSZXxBwfZvq3AB6fsnN4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=a77zgQOVvuSMTXz29wRETKvr0bUbYiSb6TX4UEuq+2XGtjl9s+bC8xMCFpNv8iomG xJRgniIzvnWfMC4+qiZglAqyWxT2P146RVUU4k9qBRAZ8eHEoK1ljDDa2pM7HOH+TA Acw3B6w6wDU7+o/tgxgYyxIOlLUsAyKb1ns0Oq8M= 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=RjSG8tT3; dkim=pass (1024-bit key) header.d=greensocs.com header.b=RjSG8tT3 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 9hH-vmpONDoa; Fri, 23 Nov 2018 10:17:38 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 320EF5E7080; Fri, 23 Nov 2018 10:17:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=KWnv+BCREvO88TR1E8yg4ZwgSZXxBwfZvq3AB6fsnN4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RjSG8tT3QXf102vF8Xkt7kuxKOYYb4ctTVNwSx3frfyruRch8pjlxBvnFG7DqVl5s SMlwUOD0f8LyzC7wufHAAWNscG2yMgmM5KxiebSl6ZfdFt3drlv0Yxv9Yr+nnJf6tX yDSzANs6cew8FqjZo6Ujqxyza0U6FvHJqBR/qY9o= 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 C6B025C025E; Fri, 23 Nov 2018 10:17:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=KWnv+BCREvO88TR1E8yg4ZwgSZXxBwfZvq3AB6fsnN4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RjSG8tT3QXf102vF8Xkt7kuxKOYYb4ctTVNwSx3frfyruRch8pjlxBvnFG7DqVl5s SMlwUOD0f8LyzC7wufHAAWNscG2yMgmM5KxiebSl6ZfdFt3drlv0Yxv9Yr+nnJf6tX yDSzANs6cew8FqjZo6Ujqxyza0U6FvHJqBR/qY9o= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:25 +0100 Message-Id: <20181123091729.29921-13-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add support for the vAttach packets. In multiprocess mode, GDB sends them to attach to additional processes. Signed-off-by: Luc Michel Reviewed-by: Edgar E. Iglesias Acked-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 5cc643b9e0..69471ea914 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1342,10 +1342,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 Fri Nov 23 09:17:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002210 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="rpoIhR53"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="quFOltk6"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="quFOltk6"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WBY584Pz9s7T for ; Fri, 23 Nov 2018 20:25:40 +1100 (AEDT) Received: from localhost ([::1]:51185 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7iS-0006Ri-QI for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:25:36 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58168) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bL-0008KZ-UM for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7bH-0001SQ-8p for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:15 -0500 Received: from greensocs.com ([193.104.36.180]:47088) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bE-0000Y9-6G; Fri, 23 Nov 2018 04:18:08 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 9710E5E7080; Fri, 23 Nov 2018 10:17:39 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964659; bh=zvSA/pYF9VdRa4k4e5/xFPygX7Qqx9RJXIi1EwcpXIQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=rpoIhR538dyxsOE2cCt3b61KWnjQ1zb0CTNf9ghNpB9aA47m1yPC8E0MfAIJryRhp 3rQErRY21gONqGp6PIXs2BTkqZC30n9jw0slfe6lA70czLThN7tDfUmT+st8BFpXI4 zEhLCSyzCp9eCGEua5WRWx8aR/HmnijC4zSElVHw= 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=quFOltk6; dkim=pass (1024-bit key) header.d=greensocs.com header.b=quFOltk6 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 KJNL-SvQAmIX; Fri, 23 Nov 2018 10:17:38 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 9FDF95E7084; Fri, 23 Nov 2018 10:17:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=zvSA/pYF9VdRa4k4e5/xFPygX7Qqx9RJXIi1EwcpXIQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=quFOltk6ySUanjfgOVYeE8pdXSlxDlj7RV0VNZiEJgaL1fAwwb6AwKQJV8GwU1yis ZC6hM/49uCYswbqGii/MTSU3e+o8HOIqUmvx+25Sy75gfjWvnozBGk3Im6KJHRxkUm kVNO/XEs1MF7R4wGlp72JanuPkDsUDRWg1a5P41I= 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 369B45E7081; Fri, 23 Nov 2018 10:17:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=zvSA/pYF9VdRa4k4e5/xFPygX7Qqx9RJXIi1EwcpXIQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=quFOltk6ySUanjfgOVYeE8pdXSlxDlj7RV0VNZiEJgaL1fAwwb6AwKQJV8GwU1yis ZC6hM/49uCYswbqGii/MTSU3e+o8HOIqUmvx+25Sy75gfjWvnozBGk3Im6KJHRxkUm kVNO/XEs1MF7R4wGlp72JanuPkDsUDRWg1a5P41I= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:26 +0100 Message-Id: <20181123091729.29921-14-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 Reviewed-by: Edgar E. Iglesias Reviewed-by: Philippe Mathieu-Daudé --- gdbstub.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/gdbstub.c b/gdbstub.c index 69471ea914..6518324d46 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2249,13 +2249,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_attached_cpu(s); + s->g_cpu = s->c_cpu; s->fd = fd; gdb_has_xml = false; gdbserver_state = s; return true; @@ -2337,12 +2338,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_attached_cpu(s); + s->g_cpu = s->c_cpu; + vm_stop(RUN_STATE_PAUSED); gdb_has_xml = false; break; default: break; @@ -2528,19 +2540,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 Fri Nov 23 09:17:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002208 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="bqJ5X+yb"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="jS1M5Ym3"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="ob85STlQ"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431W7Y23SBz9s7T for ; Fri, 23 Nov 2018 20:23:05 +1100 (AEDT) Received: from localhost ([::1]:51174 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7fy-0003SQ-Fi for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:23:02 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58240) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bQ-0008Ng-T4 for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7bP-0001rQ-7P for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:20 -0500 Received: from greensocs.com ([193.104.36.180]:47080) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bE-0000Xv-RM; Fri, 23 Nov 2018 04:18:09 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 0C4C25E7088; Fri, 23 Nov 2018 10:17:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964661; bh=ZLuPgX6ec2FObaTIqeyzjk4B3ZvcrU3B9tfb5cjhetg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=bqJ5X+ybZB2Kq2oLvBW4v5X7utOc+YlA+IZdbpj6LCTMLixGX6oAjy9SIhKlv19k5 CZbMIjnkkzY+88vewec03IrGh1l1onr2FcgXXoK4S4GV4c0OxLEacqb2GSf5kHAmqA PG7d8gRlCnWSM/WAWoe1hlAcCpT9P1wMco7yTgOY= 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=jS1M5Ym3; dkim=pass (1024-bit key) header.d=greensocs.com header.b=ob85STlQ 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 3hk5S3Q6FsPI; Fri, 23 Nov 2018 10:17:39 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 0F3EF5E7086; Fri, 23 Nov 2018 10:17:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964658; bh=ZLuPgX6ec2FObaTIqeyzjk4B3ZvcrU3B9tfb5cjhetg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=jS1M5Ym3Phu13bvNX7xJvaeh9vANJdMxcJzR70s5Jju3GMbHZbtoPXfZHN9aDC+IG ic4RzdxDi4L6W2AY0Oy4a88olQqtwwuidH8B1JgbmKAraJkeqE7AOwMgPZ6Yw5SM4k qyGLevDD7iEGRAUTX1wefhtbV5eDN/h7bsC/0kFE= 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 9CBCD5E7083; Fri, 23 Nov 2018 10:17:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964657; bh=ZLuPgX6ec2FObaTIqeyzjk4B3ZvcrU3B9tfb5cjhetg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ob85STlQL5AgV8p7RG3b4sVaUoQReC2MvvvTUUaLmjLYPAvlZB/mNUEerr94pFMtM sx2mUfgkBxFEykuXxwBH2A4qUxpwM9AzRtOsHS12wK7RzX62W170YCdGuZ7v5Rlx3c tVlzKwHzLt1m0fsawClwjeJeweYY/n+6OzjPfp3E= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:27 +0100 Message-Id: <20181123091729.29921-15-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 Reviewed-by: Edgar E. Iglesias --- gdbstub.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 6518324d46..6fc1630643 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1791,10 +1791,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 Fri Nov 23 09:17:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002217 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="pP5gM435"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="fzEsQaHJ"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="fzEsQaHJ"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WHq23bDz9s7T for ; Fri, 23 Nov 2018 20:30:15 +1100 (AEDT) Received: from localhost ([::1]:51215 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7mu-0002gS-PY for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:30:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58221) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bP-0008Lp-UK for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7bP-0001r9-5e for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:19 -0500 Received: from greensocs.com ([193.104.36.180]:47089) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bE-0000YG-9Z; Fri, 23 Nov 2018 04:18:08 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 75DF05E7084; Fri, 23 Nov 2018 10:17:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964660; bh=IgQb7uPwBqaw+sefZDHkTRXz9UaRsDHBj9LQQwwKdBg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=pP5gM435JyUddCcSH6VS0VAPkFVCgg6gf600XTmbxU4Y1dqOJFt7IxAO8bXWypzHc dipIVAOHryMI/JWVfzcisBf7HFKuOwOPudALdaYIB9wp34KZJdjnWpmBzJW/TtOI6w Br1tsRwQkjo4ILL7vyUTxCqLERoLS2G2nXtQlIRQ= 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=fzEsQaHJ; dkim=pass (1024-bit key) header.d=greensocs.com header.b=fzEsQaHJ 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 mrYXoYJeHcTA; Fri, 23 Nov 2018 10:17:39 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 7B4945E7088; Fri, 23 Nov 2018 10:17:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964658; bh=IgQb7uPwBqaw+sefZDHkTRXz9UaRsDHBj9LQQwwKdBg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fzEsQaHJxrpaUV3fc8SOWcpzPiOVA/Na1bFXh26ufroEzgrUeTyTuD6zAUEm/J3IS xH04Ln+nhhxEMyxr8ihDnNixchJr0DrAEijPFd5EQMqm8yQ64VhZz+D/dxInjaaI2I +BqSisOPvCCX74t14wT4JG7nsme3rfCUaxXAvauI= 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 0E6E55E7085; Fri, 23 Nov 2018 10:17:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964658; bh=IgQb7uPwBqaw+sefZDHkTRXz9UaRsDHBj9LQQwwKdBg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fzEsQaHJxrpaUV3fc8SOWcpzPiOVA/Na1bFXh26ufroEzgrUeTyTuD6zAUEm/J3IS xH04Ln+nhhxEMyxr8ihDnNixchJr0DrAEijPFd5EQMqm8yQ64VhZz+D/dxInjaaI2I +BqSisOPvCCX74t14wT4JG7nsme3rfCUaxXAvauI= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:28 +0100 Message-Id: <20181123091729.29921-16-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 Reviewed-by: Edgar E. Iglesias --- gdbstub.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gdbstub.c b/gdbstub.c index 6fc1630643..dc71e3f732 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1725,10 +1725,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 Fri Nov 23 09:17:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luc Michel X-Patchwork-Id: 1002216 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=greensocs.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=greensocs.com header.i=@greensocs.com header.b="12cZahuh"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="S4PlApb2"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=greensocs.com header.i=@greensocs.com header.b="S4PlApb2"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 431WH34Xd3z9s8J for ; Fri, 23 Nov 2018 20:29:35 +1100 (AEDT) Received: from localhost ([::1]:51212 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7mH-00022o-41 for incoming@patchwork.ozlabs.org; Fri, 23 Nov 2018 04:29:33 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58223) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bQ-0008M5-3x for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQ7bP-0001r4-5K for qemu-devel@nongnu.org; Fri, 23 Nov 2018 04:18:20 -0500 Received: from greensocs.com ([193.104.36.180]:47091) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQ7bF-0000aL-6G; Fri, 23 Nov 2018 04:18:09 -0500 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 59AB45E7086; Fri, 23 Nov 2018 10:17:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964661; bh=Dkji4JTfOdePjfk92E+wL5e2vsn+se5ApMpIQQk9dpg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=12cZahuhzUCR1TBHwI8zJmsWVbX1SEChOQn4lyMju8Rby+w6AVkn95abXMBQzQlz9 TntnG/SXhOc8fAGBrQKhdh/XmalX4GzXz7LNu3hqNIe42P1nNvhvmzM3ZLK9PyhaeL Soz21RQTS24Oc2WxOlCT7yn89b5CUh46h22RfDCU= 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=S4PlApb2; dkim=pass (1024-bit key) header.d=greensocs.com header.b=S4PlApb2 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 qLPA92evr3RZ; Fri, 23 Nov 2018 10:17:40 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id E67195E7089; Fri, 23 Nov 2018 10:17:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964658; bh=Dkji4JTfOdePjfk92E+wL5e2vsn+se5ApMpIQQk9dpg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=S4PlApb21u6ZttyzaxgiiRR5mVrhUPWcNWSdTRxOoyWpWLGogPPJRUBJahFztgh+O KPxIrXlPemRxqpVuibS+qeiToLJQXJWkhxJBL6yslxiQTBSOUGQ+RasSiILRA6BQUa QS4S1mYahaDEHzfkMa3X94e9k6Ncgyatea/TUzok= 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 76EAE5E7087; Fri, 23 Nov 2018 10:17:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1542964658; bh=Dkji4JTfOdePjfk92E+wL5e2vsn+se5ApMpIQQk9dpg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=S4PlApb21u6ZttyzaxgiiRR5mVrhUPWcNWSdTRxOoyWpWLGogPPJRUBJahFztgh+O KPxIrXlPemRxqpVuibS+qeiToLJQXJWkhxJBL6yslxiQTBSOUGQ+RasSiILRA6BQUa QS4S1mYahaDEHzfkMa3X94e9k6Ncgyatea/TUzok= From: Luc Michel To: qemu-devel@nongnu.org Date: Fri, 23 Nov 2018 10:17:29 +0100 Message-Id: <20181123091729.29921-17-luc.michel@greensocs.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181123091729.29921-1-luc.michel@greensocs.com> References: <20181123091729.29921-1-luc.michel@greensocs.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [PATCH v7 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Create two separate CPU clusters for APUs and RPUs. Signed-off-by: Luc Michel Reviewed-by: Edgar E. Iglesias Reviewed-by: Philippe Mathieu-Daudé --- 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,