From nobody Tue Feb 10 10:19:44 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1692197799; cv=none; d=zohomail.com; s=zohoarc; b=QRbFfUVUefwrGnjAVyvNTZJQUpnVfbKscr/lWuoE1L8JM1Kzn586YbziCnLvJdo7gn81i7p7jKJaADqNlEhR4xju8zKBdNe1hoIgRQnNZWOx/H8I7obJ/Tv3LVM5G/XSOWvVhpiOKg9/nNOsfGE1dTy6B/ANixe+ugmVy3N2oTI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1692197799; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject; bh=FeKiYP9xrSKexWAO9b8A0nNhOs6FhnCu3ht5OqePfRY=; b=A6pWij+gExz9DbdZHba3w2TfOQxA2hWwR+hBZBEg40d+5KHCkE667L1WNtoGFyOhCW6u/mcUzvyJO5R2MX0CoaMbb4Vtxcur5AyVYBMsKypG2B22zxFxa4Ux0P6o9KNPj34otpHbMTPcryO5VW29BES1hhIbUUhxpbV8v8PWLlk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1692197799467161.0998404266237; Wed, 16 Aug 2023 07:56:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qWHvq-0004Mm-Fl; Wed, 16 Aug 2023 10:55:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qWHvo-00041E-7L for qemu-devel@nongnu.org; Wed, 16 Aug 2023 10:55:32 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qWHvk-0002Hv-Rj for qemu-devel@nongnu.org; Wed, 16 Aug 2023 10:55:31 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-6887ccba675so603024b3a.3 for ; Wed, 16 Aug 2023 07:55:28 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id fk26-20020a056a003a9a00b0068892c40253sm1156568pfb.216.2023.08.16.07.55.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 07:55:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20221208.gappssmtp.com; s=20221208; t=1692197727; x=1692802527; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FeKiYP9xrSKexWAO9b8A0nNhOs6FhnCu3ht5OqePfRY=; b=QOSq8rSMJwCw4yT4RfS9VQKbsGnKKehRFFaAay8FJlNj+QmUEgOYx51+RRipyd2e+e QhrJ1+xX1tm7EFsLJ2GT/iY48GrfpaRQqt1cieHhxtHUut497ZSmhmoRw605pv+Mlx6W /Y7w6CSKdWxoRwhRiO9E5EyX5jxFhRgqRDsJmlbbRPz9+KNv1JHQN+YBcMN20yemn348 sbkgLmE5nQuaDC/TEmywgnUJbaIsGTUoUlQAIXw5x81t0RAJUu6tA1Q1404pu8chbMZP if1Vrfb0majla/SBGZFm782mFxEUJANdiXfnSpbG9kpo1/idiPdscn4D1lDi7NeeZbTN Lgxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692197727; x=1692802527; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FeKiYP9xrSKexWAO9b8A0nNhOs6FhnCu3ht5OqePfRY=; b=gPs3/etxeRqARyKJQkKjXRIbrti9o1aJ4sS9Ye2SqvLHnHtNRAxWrKUX9o00Yq+alH TfBOKVcLMts8thAfEL0cVccBbq1JI4TECdDuBmbtimVGsLipPH3OD7yUvHQjIu5oiM7l DFOXMneTIbwvr0QmKIk/+q3/TZ5qv2b9xLcp/qHToPeBGHy5fr8yBstvRdoFDNrQw0w4 sC+4Y3S2qWnT+jbypGCEjaRO48SaqIMbOpyZz3AktZs5dzMNksDUFvHbkDo47C9rKyTV Vvtfmb96/Iv2JkoHwOmrg6ozxIBU2A9wBOj9OGc+9hmqNtEHh8p9lp1nZTQULGgN0yIC HhKw== X-Gm-Message-State: AOJu0YyvVIx2svItqXPqPAQNESCDs9mINjt2dT6pcN0DyunxF8g9mcK6 JwZ6ehvzTUfLqWBF75ylgQgMzg== X-Google-Smtp-Source: AGHT+IFJPQo0CowNAlPgDFOH/Tnco/aRBZ747oI79WYdwq3oVrGEE5tawYIyCoDbuI9xrw7iAk4seA== X-Received: by 2002:a05:6300:8082:b0:12f:1f1f:b506 with SMTP id ap2-20020a056300808200b0012f1f1fb506mr1843860pzc.21.1692197727672; Wed, 16 Aug 2023 07:55:27 -0700 (PDT) From: Akihiko Odaki To: Cc: Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Thomas Huth , Alexandre Iooss , Mahmoud Mandour , Eduardo Habkost , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Richard Henderson , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , John Snow , Cleber Rosa , Peter Maydell , Michael Rolnik , "Edgar E . Iglesias" , Brian Cain , Song Gao , Xiaojuan Yang , Laurent Vivier , Aurelien Jarno , Jiaxun Yang , Aleksandar Rikalo , Chris Wulff , Marek Vasut , Stafford Horne , Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Nicholas Piggin , Palmer Dabbelt , Alistair Francis , Bin Meng , Weiwei Li , Liu Zhiwei , Yoshinori Sato , David Hildenbrand , Ilya Leoshkevich , Mark Cave-Ayland , Artyom Tarasenko , Bastian Koppelmann , Max Filippov , qemu-devel@nongnu.org, qemu-arm@nongnu.org, qemu-ppc@nongnu.org, qemu-riscv@nongnu.org, qemu-s390x@nongnu.org, Anton Kochkov , Akihiko Odaki Subject: [PATCH v4 20/25] gdbstub: Expose functions to read registers Date: Wed, 16 Aug 2023 23:51:41 +0900 Message-ID: <20230816145155.21049-21-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230816145155.21049-1-akihiko.odaki@daynix.com> References: <20230816145155.21049-1-akihiko.odaki@daynix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=2607:f8b0:4864:20::431; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x431.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @daynix-com.20221208.gappssmtp.com) X-ZM-MESSAGEID: 1692197800086100001 Content-Type: text/plain; charset="utf-8" gdb_foreach_feature() enumerates features that are useful to identify registers. gdb_read_register() actually reads registers. Signed-off-by: Akihiko Odaki --- include/exec/gdbstub.h | 6 ++++++ gdbstub/gdbstub.c | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 5cba2933d2..151e9e81c6 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -59,6 +59,12 @@ void gdb_feature_builder_end(const GDBFeatureBuilder *bu= ilder); =20 const GDBFeature *gdb_find_static_feature(const char *xmlname); =20 +void gdb_foreach_feature(CPUState *cpu, + void (* callback)(void *, const GDBFeature *, int= ), + void *opaque); + +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg, bool has_xm= l); + void gdb_set_stop_cpu(CPUState *cpu); =20 /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */ diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 5974af7c8f..e395a58db4 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -483,14 +483,32 @@ const GDBFeature *gdb_find_static_feature(const char = *xmlname) abort(); } =20 -static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg) +void gdb_foreach_feature(CPUState *cpu, + void (* callback)(void *, const GDBFeature *, int= ), + void *opaque) +{ + CPUClass *cc =3D CPU_GET_CLASS(cpu); + GDBRegisterState *r; + + if (!cc->gdb_core_feature) { + return; + } + + callback(opaque, cc->gdb_core_feature, 0); + + for (r =3D cpu->gdb_regs; r; r =3D r->next) { + callback(opaque, r->feature, r->base_reg); + } +} + +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg, bool has_xm= l) { CPUClass *cc =3D CPU_GET_CLASS(cpu); CPUArchState *env =3D cpu->env_ptr; GDBRegisterState *r; =20 if (reg < cc->gdb_num_core_regs) { - return cc->gdb_read_register(cpu, buf, reg, gdb_has_xml); + return cc->gdb_read_register(cpu, buf, reg, has_xml); } =20 for (r =3D cpu->gdb_regs; r; r =3D r->next) { @@ -501,14 +519,15 @@ static int gdb_read_register(CPUState *cpu, GByteArra= y *buf, int reg) return 0; } =20 -static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg) +static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg, + bool has_xml) { CPUClass *cc =3D CPU_GET_CLASS(cpu); CPUArchState *env =3D cpu->env_ptr; GDBRegisterState *r; =20 if (reg < cc->gdb_num_core_regs) { - return cc->gdb_write_register(cpu, mem_buf, reg, gdb_has_xml); + return cc->gdb_write_register(cpu, mem_buf, reg, has_xml); } =20 for (r =3D cpu->gdb_regs; r; r =3D r->next) { @@ -1134,7 +1153,7 @@ static void handle_set_reg(GArray *params, void *user= _ctx) reg_size =3D strlen(get_param(params, 1)->data) / 2; gdb_hextomem(gdbserver_state.mem_buf, get_param(params, 1)->data, reg_= size); gdb_write_register(gdbserver_state.g_cpu, gdbserver_state.mem_buf->dat= a, - get_param(params, 0)->val_ull); + get_param(params, 0)->val_ull, gdb_has_xml); gdb_put_packet("OK"); } =20 @@ -1154,7 +1173,8 @@ static void handle_get_reg(GArray *params, void *user= _ctx) =20 reg_size =3D gdb_read_register(gdbserver_state.g_cpu, gdbserver_state.mem_buf, - get_param(params, 0)->val_ull); + get_param(params, 0)->val_ull, + gdb_has_xml); if (!reg_size) { gdb_put_packet("E14"); return; @@ -1241,7 +1261,8 @@ static void handle_write_all_regs(GArray *params, voi= d *user_ctx) for (reg_id =3D 0; reg_id < gdbserver_state.g_cpu->gdb_num_g_regs && len > 0; reg_id++) { - reg_size =3D gdb_write_register(gdbserver_state.g_cpu, registers, = reg_id); + reg_size =3D gdb_write_register(gdbserver_state.g_cpu, registers, = reg_id, + gdb_has_xml); len -=3D reg_size; registers +=3D reg_size; } @@ -1259,7 +1280,8 @@ static void handle_read_all_regs(GArray *params, void= *user_ctx) for (reg_id =3D 0; reg_id < gdbserver_state.g_cpu->gdb_num_g_regs; reg= _id++) { len +=3D gdb_read_register(gdbserver_state.g_cpu, gdbserver_state.mem_buf, - reg_id); + reg_id, + gdb_has_xml); } g_assert(len =3D=3D gdbserver_state.mem_buf->len); =20 --=20 2.41.0