From nobody Tue Feb 10 10:57:29 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=1692193514; cv=none; d=zohomail.com; s=zohoarc; b=FD/D1+iM1/3kg3gtTp7Oz56xHdPxtsUBwzFfA/PHw9itCRSxeUVbRfu4lrA4WJBTsCBZYiQBsWvoRTEtCn0VBZYEdDrey9nbrD1QGkKm4l2dXx/lW774azRQyqS8RP0gJB9lHAipHCeTSMRrnjop3GZrEmMzHyiKMqRHEfx4yIs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1692193514; 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=h0I5464XyTB9domvTZ57iQPuB5epiif8nIOA4NFVm1Vi+WzTpPRPp7K0hnExxZz6i3M3EBByInBFF0MHa1GsuuYsb7gvtuF25Hgntx8T6lLAuMU0S2r4oAoi9UA9njBHYfxjZwqdeWT7Hnt9e/SWteYiD47n11ukWIFj9rrXGZM= 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 1692193514306448.48880470522136; Wed, 16 Aug 2023 06:45:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qWGo0-0002q5-6X; Wed, 16 Aug 2023 09:43:24 -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 1qWGny-0002a8-E8 for qemu-devel@nongnu.org; Wed, 16 Aug 2023 09:43:22 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qWGnu-00028Q-8h for qemu-devel@nongnu.org; Wed, 16 Aug 2023 09:43:22 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-6886d6895a9so1161354b3a.0 for ; Wed, 16 Aug 2023 06:43:17 -0700 (PDT) Received: from alarm.flets-east.jp ([2400:4050:a840:1e00:78d2:b862:10a7:d486]) by smtp.gmail.com with ESMTPSA id k3-20020a637b43000000b0056601f864aesm928355pgn.2.2023.08.16.06.43.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 06:43:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20221208.gappssmtp.com; s=20221208; t=1692193396; x=1692798196; 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=zG4Vpa+1bHJWs5uT7JEFhopN09hzSdvwrr51pIbR8uIWP2z+tTju1TsfSnRPUjLSGg l7SBDjihWmYWtMsT/jahQBi8dTX8SikraOjSzkx41dbNwRvbS7ma2rWOS7brJk0YEDfq WWvFXN4c6J08+uIo7cyXWo2w4A7czuzVmoqq8vtSCh7Z7EGduVavIMxrtxnGIp0mGjcz Lg0WjAIRPgaaTwrEI96mhVCKa0/12yKd7FME8gHhvmJLS92U9kqf1RRmhFb1RH9wLNoH FQvP4/AbEDTmGMAnXtjEBHoHLuDM+6IHt4DAZxi2RiNQtfHMs3v7gKCH1TTTl/5H+DT3 Zb1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692193396; x=1692798196; 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=VH/7kWnqYEH01tMs0eDmRaF28PeRkHv4u1cN5elWLGXnLi8CKJJUTfT4BH90RVdYKH W+GreXdtPSQfjlAWujx+tX/rN1KaC9y3Tq9fwoPCA/l4CMJjEkvaRrQUXkZUhLRzGw2y NV3GMIRGXse3h5De6l53u/33jV2tncA9sLPabs4dJD8MLXP8uHZIkRtMTPkTSLoXEILB IEasa0r8C+3mZLyl+J0rzQ2VHGaz52cBHEhkW4Latcouxbexn7aWaFU2mD3X1SrnkX41 FfQxK1Vpp6eaVA8Su76FFMEW0efp1V6rov89Fc3oPH+sBcfOxFZc8RDyvYGqcvHp5PUf iqLw== X-Gm-Message-State: AOJu0Yw/TW1f2Ls0qLa8KRnxqc7wn8xvDu6+Omp6iq1EGyxpWfrWkGsg 8kH1Xa1mNZ+B5ihE1JCA8iReag== X-Google-Smtp-Source: AGHT+IGtEhNmlyU4gpOyiAuSErTWEb4DF6l1/uj7/5GgR03iJXKDK9tbyR4hSxGerYyDp1LAsF5JjA== X-Received: by 2002:a05:6a20:3953:b0:140:6979:295d with SMTP id r19-20020a056a20395300b001406979295dmr2266571pzg.2.1692193396610; Wed, 16 Aug 2023 06:43:16 -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 v3 20/25] gdbstub: Expose functions to read registers Date: Wed, 16 Aug 2023 22:39:30 +0900 Message-ID: <20230816133938.18310-21-akihiko.odaki@daynix.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230816133938.18310-1-akihiko.odaki@daynix.com> References: <20230816133938.18310-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::433; envelope-from=akihiko.odaki@daynix.com; helo=mail-pf1-x433.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: 1692193515559100001 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