From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org, Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
"Song Gao" <gaosong@loongson.cn>,
qemu-arm@nongnu.org,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Weiwei Li" <liweiwei@iscas.ac.cn>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Cédric Le Goater" <clg@kaod.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Brian Cain" <bcain@quicinc.com>,
qemu-ppc@nongnu.org, "Palmer Dabbelt" <palmer@dabbelt.com>,
qemu-riscv@nongnu.org, "Eduardo Habkost" <eduardo@habkost.net>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Alistair Francis" <alistair.francis@wdc.com>,
"Liu Zhiwei" <zhiwei_liu@linux.alibaba.com>,
"Cleber Rosa" <crosa@redhat.com>,
qemu-s390x@nongnu.org, "Laurent Vivier" <laurent@vivier.eu>,
"Yoshinori Sato" <ysato@users.sourceforge.jp>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Thomas Huth" <thuth@redhat.com>, "John Snow" <jsnow@redhat.com>,
"Alexandre Iooss" <erdnaxe@crans.org>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Mahmoud Mandour" <ma.mandourr@gmail.com>,
"Daniel Henrique Barboza" <dbarboza@ventanamicro.com>,
"Bin Meng" <bin.meng@windriver.com>,
"Beraldo Leal" <bleal@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Michael Rolnik" <mrolnik@gmail.com>,
"Akihiko Odaki" <akihiko.odaki@daynix.com>
Subject: Re: [PATCH 13/29] target/riscv: Use GDBFeature for dynamic XML
Date: Mon, 06 Nov 2023 09:32:42 +0000 [thread overview]
Message-ID: <87a5rrdy6d.fsf@draig.linaro.org> (raw)
In-Reply-To: <20231103195956.1998255-14-alex.bennee@linaro.org> ("Alex Bennée"'s message of "Fri, 3 Nov 2023 19:59:40 +0000 (2 days, 13 hours, 31 minutes ago)")
Alex Bennée <alex.bennee@linaro.org> writes:
> From: Akihiko Odaki <akihiko.odaki@daynix.com>
>
> In preparation for a change to use GDBFeature as a parameter of
> gdb_register_coprocessor(), convert the internal representation of
> dynamic feature from plain XML to GDBFeature.
>
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
> Message-Id: <20231025093128.33116-7-akihiko.odaki@daynix.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
I bisected the following failure:
./qemu-riscv64 -g 1234 ./tests/tcg/riscv64-linux-user/sha512
and:
gdb-multiarch ./tests/tcg/riscv64-linux-user/sha512 -ex "target remote localhost:1234" -x ../../tests/tcg/multiarch/gdbstub/registers.py
gives:
warning: Architecture rejected target-supplied description
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
> ---
> target/riscv/cpu.h | 5 +--
> target/riscv/cpu.c | 4 +--
> target/riscv/gdbstub.c | 79 +++++++++++++++++++-----------------------
> 3 files changed, 40 insertions(+), 48 deletions(-)
>
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index f8ffa5ee38..73ec1d3b79 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -24,6 +24,7 @@
> #include "hw/registerfields.h"
> #include "hw/qdev-properties.h"
> #include "exec/cpu-defs.h"
> +#include "exec/gdbstub.h"
> #include "qemu/cpu-float.h"
> #include "qom/object.h"
> #include "qemu/int128.h"
> @@ -395,8 +396,8 @@ struct ArchCPU {
>
> CPURISCVState env;
>
> - char *dyn_csr_xml;
> - char *dyn_vreg_xml;
> + GDBFeature dyn_csr_feature;
> + GDBFeature dyn_vreg_feature;
>
> /* Configuration Settings */
> RISCVCPUConfig cfg;
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index ac4a6c7eec..5200fba9b9 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -1421,9 +1421,9 @@ static const char *riscv_gdb_get_dynamic_xml(CPUState *cs, const char *xmlname)
> RISCVCPU *cpu = RISCV_CPU(cs);
>
> if (strcmp(xmlname, "riscv-csr.xml") == 0) {
> - return cpu->dyn_csr_xml;
> + return cpu->dyn_csr_feature.xml;
> } else if (strcmp(xmlname, "riscv-vector.xml") == 0) {
> - return cpu->dyn_vreg_xml;
> + return cpu->dyn_vreg_feature.xml;
> }
>
> return NULL;
> diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c
> index 524bede865..a3ac0212d1 100644
> --- a/target/riscv/gdbstub.c
> +++ b/target/riscv/gdbstub.c
> @@ -212,12 +212,13 @@ static int riscv_gdb_set_virtual(CPURISCVState *cs, uint8_t *mem_buf, int n)
> return 0;
> }
>
> -static int riscv_gen_dynamic_csr_xml(CPUState *cs, int base_reg)
> +static GDBFeature *riscv_gen_dynamic_csr_feature(CPUState *cs, int base_reg)
> {
> RISCVCPU *cpu = RISCV_CPU(cs);
> CPURISCVState *env = &cpu->env;
> - GString *s = g_string_new(NULL);
> + GDBFeatureBuilder builder;
> riscv_csr_predicate_fn predicate;
> + const char *name;
> int bitsize = 16 << env->misa_mxl_max;
> int i;
>
> @@ -230,9 +231,9 @@ static int riscv_gen_dynamic_csr_xml(CPUState *cs, int base_reg)
> bitsize = 64;
> }
>
> - g_string_printf(s, "<?xml version=\"1.0\"?>");
> - g_string_append_printf(s, "<!DOCTYPE feature SYSTEM \"gdb-target.dtd\">");
> - g_string_append_printf(s, "<feature name=\"org.gnu.gdb.riscv.csr\">");
> + gdb_feature_builder_init(&builder, &cpu->dyn_csr_feature,
> + "org.gnu.gdb.riscv.csr", "riscv-csr.xml",
> + base_reg);
>
> for (i = 0; i < CSR_TABLE_SIZE; i++) {
> if (env->priv_ver < csr_ops[i].min_priv_ver) {
> @@ -240,72 +241,64 @@ static int riscv_gen_dynamic_csr_xml(CPUState *cs, int base_reg)
> }
> predicate = csr_ops[i].predicate;
> if (predicate && (predicate(env, i) == RISCV_EXCP_NONE)) {
> - if (csr_ops[i].name) {
> - g_string_append_printf(s, "<reg name=\"%s\"", csr_ops[i].name);
> - } else {
> - g_string_append_printf(s, "<reg name=\"csr%03x\"", i);
> + g_autofree char *dynamic_name = NULL;
> + name = csr_ops[i].name;
> + if (!name) {
> + dynamic_name = g_strdup_printf("csr%03x", i);
> + name = dynamic_name;
> }
> - g_string_append_printf(s, " bitsize=\"%d\"", bitsize);
> - g_string_append_printf(s, " regnum=\"%d\"/>", base_reg + i);
> +
> + gdb_feature_builder_append_reg(&builder, name, bitsize, i,
> + "int", NULL);
> }
> }
>
> - g_string_append_printf(s, "</feature>");
> -
> - cpu->dyn_csr_xml = g_string_free(s, false);
> + gdb_feature_builder_end(&builder);
>
> #if !defined(CONFIG_USER_ONLY)
> env->debugger = false;
> #endif
>
> - return CSR_TABLE_SIZE;
> + return &cpu->dyn_csr_feature;
> }
>
> -static int ricsv_gen_dynamic_vector_xml(CPUState *cs, int base_reg)
> +static GDBFeature *ricsv_gen_dynamic_vector_feature(CPUState *cs, int base_reg)
> {
> RISCVCPU *cpu = RISCV_CPU(cs);
> - GString *s = g_string_new(NULL);
> - g_autoptr(GString) ts = g_string_new("");
> + GDBFeatureBuilder builder;
> int reg_width = cpu->cfg.vlen;
> - int num_regs = 0;
> int i;
>
> - g_string_printf(s, "<?xml version=\"1.0\"?>");
> - g_string_append_printf(s, "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">");
> - g_string_append_printf(s, "<feature name=\"org.gnu.gdb.riscv.vector\">");
> + gdb_feature_builder_init(&builder, &cpu->dyn_vreg_feature,
> + "org.gnu.gdb.riscv.vector", "riscv-vector.xml",
> + base_reg);
>
> /* First define types and totals in a whole VL */
> for (i = 0; i < ARRAY_SIZE(vec_lanes); i++) {
> int count = reg_width / vec_lanes[i].size;
> - g_string_printf(ts, "%s", vec_lanes[i].id);
> - g_string_append_printf(s,
> - "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>",
> - ts->str, vec_lanes[i].gdb_type, count);
> + gdb_feature_builder_append_tag(
> + &builder, "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>",
> + vec_lanes[i].id, vec_lanes[i].gdb_type, count);
> }
>
> /* Define unions */
> - g_string_append_printf(s, "<union id=\"riscv_vector\">");
> + gdb_feature_builder_append_tag(&builder, "<union id=\"riscv_vector\">");
> for (i = 0; i < ARRAY_SIZE(vec_lanes); i++) {
> - g_string_append_printf(s, "<field name=\"%c\" type=\"%s\"/>",
> - vec_lanes[i].suffix,
> - vec_lanes[i].id);
> + gdb_feature_builder_append_tag(&builder,
> + "<field name=\"%c\" type=\"%s\"/>",
> + vec_lanes[i].suffix, vec_lanes[i].id);
> }
> - g_string_append(s, "</union>");
> + gdb_feature_builder_append_tag(&builder, "</union>");
>
> /* Define vector registers */
> for (i = 0; i < 32; i++) {
> - g_string_append_printf(s,
> - "<reg name=\"v%d\" bitsize=\"%d\""
> - " regnum=\"%d\" group=\"vector\""
> - " type=\"riscv_vector\"/>",
> - i, reg_width, base_reg++);
> - num_regs++;
> + gdb_feature_builder_append_reg(&builder, g_strdup_printf("v%d", i),
> + reg_width, i, "riscv_vector", "vector");
> }
>
> - g_string_append_printf(s, "</feature>");
> + gdb_feature_builder_end(&builder);
>
> - cpu->dyn_vreg_xml = g_string_free(s, false);
> - return num_regs;
> + return &cpu->dyn_vreg_feature;
> }
>
> void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
> @@ -320,10 +313,9 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
> 32, "riscv-32bit-fpu.xml", 0);
> }
> if (env->misa_ext & RVV) {
> - int base_reg = cs->gdb_num_regs;
> gdb_register_coprocessor(cs, riscv_gdb_get_vector,
> riscv_gdb_set_vector,
> - ricsv_gen_dynamic_vector_xml(cs, base_reg),
> + ricsv_gen_dynamic_vector_feature(cs, cs->gdb_num_regs)->num_regs,
> "riscv-vector.xml", 0);
> }
> switch (env->misa_mxl_max) {
> @@ -343,9 +335,8 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
> }
>
> if (cpu->cfg.ext_icsr) {
> - int base_reg = cs->gdb_num_regs;
> gdb_register_coprocessor(cs, riscv_gdb_get_csr, riscv_gdb_set_csr,
> - riscv_gen_dynamic_csr_xml(cs, base_reg),
> + riscv_gen_dynamic_csr_feature(cs, cs->gdb_num_regs)->num_regs,
> "riscv-csr.xml", 0);
> }
> }
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2023-11-06 9:33 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-03 19:59 [PATCH 00/29] gdbstub and plugin read register and windows support Alex Bennée
2023-11-03 19:59 ` [PATCH 01/29] default-configs: Add TARGET_XML_FILES definition Alex Bennée
2023-11-05 20:55 ` Richard Henderson
2023-11-06 15:44 ` Alex Bennée
2023-11-06 23:22 ` Richard Henderson
2023-11-03 19:59 ` [PATCH 02/29] gdb-xml: fix duplicate register in arm-neon.xml Alex Bennée
2023-11-05 20:45 ` Richard Henderson
2023-11-03 19:59 ` [PATCH 03/29] target/arm: hide the 32bit version of PAR from gdbstub Alex Bennée
2023-11-03 19:59 ` [PATCH 04/29] target/arm: hide all versions of DBGD[RS]AR " Alex Bennée
2023-11-03 19:59 ` [PATCH 05/29] target/arm: hide aliased MIDR " Alex Bennée
2023-11-03 19:59 ` [PATCH 06/29] tests/tcg: add an explicit gdbstub register tester Alex Bennée
2023-11-05 12:17 ` Akihiko Odaki
2023-11-03 19:59 ` [PATCH 07/29] tests/avocado: update the tcg_plugins test Alex Bennée
2023-11-03 19:59 ` [PATCH 08/29] gdbstub: Add num_regs member to GDBFeature Alex Bennée
2023-11-03 19:59 ` [PATCH 09/29] gdbstub: Introduce gdb_find_static_feature() Alex Bennée
2023-11-03 19:59 ` [PATCH 10/29] gdbstub: Introduce GDBFeatureBuilder Alex Bennée
2023-11-03 19:59 ` [PATCH 11/29] target/arm: Use GDBFeature for dynamic XML Alex Bennée
2023-11-03 19:59 ` [PATCH 12/29] target/ppc: " Alex Bennée
2023-11-03 19:59 ` [PATCH 13/29] target/riscv: " Alex Bennée
2023-11-06 9:32 ` Alex Bennée [this message]
2023-11-06 15:35 ` Alex Bennée
2023-11-03 19:59 ` [PATCH 14/29] gdbstub: Use GDBFeature for gdb_register_coprocessor Alex Bennée
2023-11-03 19:59 ` [PATCH 15/29] gdbstub: Use GDBFeature for GDBRegisterState Alex Bennée
2023-11-03 19:59 ` [PATCH 16/29] gdbstub: Change gdb_get_reg_cb and gdb_set_reg_cb Alex Bennée
2023-11-03 19:59 ` [PATCH 17/29] gdbstub: Simplify XML lookup Alex Bennée
2023-11-07 8:46 ` Frédéric Pétrot
2023-11-07 10:31 ` Alex Bennée
2023-11-07 11:46 ` Frédéric Pétrot
2023-11-03 19:59 ` [PATCH 18/29] gdbstub: Infer number of core registers from XML Alex Bennée
2023-11-03 19:59 ` [PATCH 19/29] hw/core/cpu: Remove gdb_get_dynamic_xml member Alex Bennée
2023-11-03 19:59 ` [PATCH 20/29] gdbstub: Add members to identify registers to GDBFeature Alex Bennée
2023-11-03 19:59 ` [PATCH 21/29] gdbstub: expose api to find registers Alex Bennée
2023-11-03 19:59 ` [PATCH 22/29] cpu: Call plugin hooks only when ready Alex Bennée
2023-11-03 19:59 ` [PATCH 23/29] plugins: Use different helpers when reading registers Alex Bennée
2023-11-07 3:13 ` Richard Henderson
2023-11-03 19:59 ` [PATCH 24/29] plugins: add an API to read registers Alex Bennée
2023-11-05 12:40 ` Akihiko Odaki
[not found] ` <87il6fdyaq.fsf@draig.linaro.org>
[not found] ` <94da2184-2586-458e-9362-fa913ca68fb5@daynix.com>
[not found] ` <874jhzdur3.fsf@draig.linaro.org>
[not found] ` <333fbdf6-9f5b-41c3-99ce-8808c542d485@daynix.com>
2023-11-06 11:40 ` Alex Bennée
2023-11-07 6:56 ` Akihiko Odaki
2023-11-03 19:59 ` [PATCH 25/29] contrib/plugins: extend execlog to track register changes Alex Bennée
2023-11-06 15:30 ` Alex Bennée
2023-11-03 19:59 ` [PATCH 26/29] plugins: add dllexport and dllimport to api funcs Alex Bennée
2023-11-03 19:59 ` [PATCH 27/29] plugins: make test/example plugins work on windows Alex Bennée
2023-11-04 9:14 ` Alex Bennée
2023-11-03 19:59 ` [PATCH 28/29] plugins: disable lockstep plugin " Alex Bennée
2023-11-03 19:59 ` [PATCH 29/29] plugins: allow plugins to be enabled " 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=87a5rrdy6d.fsf@draig.linaro.org \
--to=alex.bennee@linaro.org \
--cc=akihiko.odaki@daynix.com \
--cc=alistair.francis@wdc.com \
--cc=bcain@quicinc.com \
--cc=berrange@redhat.com \
--cc=bin.meng@windriver.com \
--cc=bleal@redhat.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=jsnow@redhat.com \
--cc=laurent@vivier.eu \
--cc=liweiwei@iscas.ac.cn \
--cc=ma.mandourr@gmail.com \
--cc=marcandre.lureau@redhat.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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.