From: Akihiko Odaki <akihiko.odaki@daynix.com>
To: "Alex Bennée" <alex.bennee@linaro.org>, qemu-devel@nongnu.org
Cc: qemu-ppc@nongnu.org,
"Yoshinori Sato" <ysato@users.sourceforge.jp>,
qemu-arm@nongnu.org, "Liu Zhiwei" <zhiwei_liu@linux.alibaba.com>,
"Michael Rolnik" <mrolnik@gmail.com>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Beraldo Leal" <bleal@redhat.com>,
"Cleber Rosa" <crosa@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Song Gao" <gaosong@loongson.cn>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"Laurent Vivier" <laurent@vivier.eu>,
"Warner Losh" <imp@bsdimp.com>,
"Alexandre Iooss" <erdnaxe@crans.org>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"Cédric Le Goater" <clg@kaod.org>,
qemu-s390x@nongnu.org, "Kyle Evans" <kevans@freebsd.org>,
"Brad Smith" <brad@comstyle.com>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
"John Snow" <jsnow@redhat.com>,
"Alistair Francis" <alistair.francis@wdc.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Brian Cain" <bcain@quicinc.com>,
"Thomas Huth" <thuth@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
qemu-riscv@nongnu.org, "Bin Meng" <bin.meng@windriver.com>,
"Daniel Henrique Barboza" <dbarboza@ventanamicro.com>,
"Weiwei Li" <liwei1518@gmail.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Mahmoud Mandour" <ma.mandourr@gmail.com>
Subject: Re: [PATCH v4 21/29] gdbstub: expose api to find registers
Date: Wed, 28 Feb 2024 14:08:54 +0900 [thread overview]
Message-ID: <ec233087-c919-47d9-b48f-044495d0a74a@daynix.com> (raw)
In-Reply-To: <20240227144335.1196131-22-alex.bennee@linaro.org>
On 2024/02/27 23:43, Alex Bennée wrote:
> Expose an internal API to QEMU to return all the registers for a vCPU.
> The list containing the details required to called gdb_read_register().
>
> Based-on: <20231025093128.33116-15-akihiko.odaki@daynix.com>
> Cc: Akihiko Odaki <akihiko.odaki@daynix.com>
> Message-Id: <20240103173349.398526-38-alex.bennee@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
>
> ---
> v3
> - rm unused api functions left over
> ---
> include/exec/gdbstub.h | 28 ++++++++++++++++++++++++++++
> gdbstub/gdbstub.c | 27 ++++++++++++++++++++++++++-
> 2 files changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h
> index da9ddfe54c5..eb14b91139b 100644
> --- a/include/exec/gdbstub.h
> +++ b/include/exec/gdbstub.h
> @@ -111,6 +111,34 @@ void gdb_feature_builder_end(const GDBFeatureBuilder *builder);
> */
> const GDBFeature *gdb_find_static_feature(const char *xmlname);
>
> +/**
> + * gdb_read_register() - Read a register associated with a CPU.
> + * @cpu: The CPU associated with the register.
> + * @buf: The buffer that the read register will be appended to.
> + * @reg: The register's number returned by gdb_find_feature_register().
> + *
> + * Return: The number of read bytes.
> + */
> +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
> +
> +/**
> + * typedef GDBRegDesc - a register description from gdbstub
> + */
> +typedef struct {
> + int gdb_reg;
> + const char *name;
> + const char *feature_name;
> +} GDBRegDesc;
> +
> +/**
> + * gdb_get_register_list() - Return list of all registers for CPU
> + * @cpu: The CPU being searched
> + *
> + * Returns a GArray of GDBRegDesc, caller frees array but not the
> + * const strings.
> + */
> +GArray *gdb_get_register_list(CPUState *cpu);
> +
> void gdb_set_stop_cpu(CPUState *cpu);
>
> /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */
> diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
> index a55b5e6581a..2909bc8c69f 100644
> --- a/gdbstub/gdbstub.c
> +++ b/gdbstub/gdbstub.c
> @@ -490,7 +490,32 @@ const GDBFeature *gdb_find_static_feature(const char *xmlname)
> g_assert_not_reached();
> }
>
> -static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
> +GArray *gdb_get_register_list(CPUState *cpu)
> +{
> + GArray *results = g_array_new(true, true, sizeof(GDBRegDesc));
> +
> + /* registers are only available once the CPU is initialised */
> + if (!cpu->gdb_regs) {
> + return results;
> + }
> +
> + for (int f = 0; f < cpu->gdb_regs->len; f++) {
> + GDBRegisterState *r = &g_array_index(cpu->gdb_regs, GDBRegisterState, f);
> + for (int i = 0; i < r->feature->num_regs; i++) {
> + const char *name = r->feature->regs[i];
> + GDBRegDesc desc = {
> + r->base_reg + i,
> + name,
> + r->feature->name
> + };
> + g_array_append_val(results, desc);
> + }
> + }
> +
> + return results;
> +}
> +
> +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
> {
> CPUClass *cc = CPU_GET_CLASS(cpu);
> GDBRegisterState *r;
next prev parent reply other threads:[~2024-02-28 5:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-27 14:43 [PATCH v4 00/29] maintainer updates for 9.0 pre-PR (tests, plugin register support) Alex Bennée
2024-02-27 14:43 ` [PATCH v4 01/29] tests/tcg: update licenses to GPLv2 as intended Alex Bennée
2024-02-27 14:43 ` [PATCH v4 02/29] tests/tcg: bump TCG test timeout to 120s Alex Bennée
2024-02-27 14:43 ` [PATCH v4 03/29] tests/vm: avoid re-building the VM images all the time Alex Bennée
2024-02-27 17:14 ` Thomas Huth
2024-02-27 14:43 ` [PATCH v4 04/29] tests/vm: update openbsd image to 7.4 Alex Bennée
2024-02-27 17:35 ` Thomas Huth
2024-02-27 14:43 ` [PATCH v4 05/29] target/arm: Use GDBFeature for dynamic XML Alex Bennée
2024-02-27 14:43 ` [PATCH v4 06/29] target/ppc: " Alex Bennée
2024-02-27 14:43 ` [PATCH v4 07/29] target/riscv: " Alex Bennée
2024-02-27 14:43 ` [PATCH v4 08/29] gdbstub: Use GDBFeature for gdb_register_coprocessor Alex Bennée
2024-02-27 14:43 ` [PATCH v4 09/29] gdbstub: Use GDBFeature for GDBRegisterState Alex Bennée
2024-02-27 14:43 ` [PATCH v4 10/29] gdbstub: Change gdb_get_reg_cb and gdb_set_reg_cb Alex Bennée
2024-02-27 14:43 ` [PATCH v4 11/29] gdbstub: Simplify XML lookup Alex Bennée
2024-02-27 14:43 ` [PATCH v4 12/29] gdbstub: Infer number of core registers from XML Alex Bennée
2024-02-27 14:43 ` [PATCH v4 13/29] hw/core/cpu: Remove gdb_get_dynamic_xml member Alex Bennée
2024-02-27 14:43 ` [PATCH v4 14/29] gdbstub: Add members to identify registers to GDBFeature Alex Bennée
2024-02-27 14:43 ` [PATCH v4 15/29] plugins: remove previous n_vcpus functions from API Alex Bennée
2024-02-27 14:43 ` [PATCH v4 16/29] plugins: add qemu_plugin_num_vcpus function Alex Bennée
2024-02-27 14:43 ` [PATCH v4 17/29] plugins: fix order of init/idle/resume callback Alex Bennée
2024-02-27 14:43 ` [PATCH v4 18/29] linux-user: ensure nios2 processes queued work Alex Bennée
2024-02-27 14:43 ` [PATCH v4 19/29] cpu: call plugin init hook asynchronously Alex Bennée
2024-02-27 14:43 ` [PATCH v4 20/29] plugins: Use different helpers when reading registers Alex Bennée
2024-02-27 14:43 ` [PATCH v4 21/29] gdbstub: expose api to find registers Alex Bennée
2024-02-28 5:08 ` Akihiko Odaki [this message]
2024-02-27 14:43 ` [PATCH v4 22/29] plugins: create CPUPluginState and migrate plugin_mask Alex Bennée
2024-02-27 14:43 ` [PATCH v4 23/29] plugins: add an API to read registers Alex Bennée
2024-02-28 5:08 ` Akihiko Odaki
2024-02-27 14:43 ` [PATCH v4 24/29] tests/tcg: expand insn test case to exercise register API Alex Bennée
2024-02-27 14:43 ` [PATCH v4 25/29] contrib/plugins: fix imatch Alex Bennée
2024-02-27 14:43 ` [PATCH v4 26/29] contrib/plugins: extend execlog to track register changes Alex Bennée
2024-02-27 14:43 ` [PATCH v4 27/29] docs/devel: lift example and plugin API sections up Alex Bennée
2024-02-27 14:43 ` [PATCH v4 28/29] docs/devel: document some plugin assumptions Alex Bennée
2024-02-27 14:43 ` [PATCH v4 29/29] docs/devel: plugins can trigger a tb flush Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ec233087-c919-47d9-b48f-044495d0a74a@daynix.com \
--to=akihiko.odaki@daynix.com \
--cc=alex.bennee@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=bcain@quicinc.com \
--cc=bin.meng@windriver.com \
--cc=bleal@redhat.com \
--cc=brad@comstyle.com \
--cc=clg@kaod.org \
--cc=crosa@redhat.com \
--cc=danielhb413@gmail.com \
--cc=david@redhat.com \
--cc=dbarboza@ventanamicro.com \
--cc=edgar.iglesias@gmail.com \
--cc=eduardo@habkost.net \
--cc=erdnaxe@crans.org \
--cc=gaosong@loongson.cn \
--cc=iii@linux.ibm.com \
--cc=imp@bsdimp.com \
--cc=jsnow@redhat.com \
--cc=kevans@freebsd.org \
--cc=laurent@vivier.eu \
--cc=liwei1518@gmail.com \
--cc=ma.mandourr@gmail.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mrolnik@gmail.com \
--cc=npiggin@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
--cc=wangyanan55@huawei.com \
--cc=ysato@users.sourceforge.jp \
--cc=zhiwei_liu@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).