From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Akihiko Odaki" <akihiko.odaki@daynix.com>,
"Alistair Francis" <alistair.francis@wdc.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Yanan Wang" <wangyanan55@huawei.com>
Subject: [PULL 19/25] gdbstub: Replace gdb_regs with an array
Date: Wed, 11 Oct 2023 11:33:23 +0100 [thread overview]
Message-ID: <20231011103329.670525-20-alex.bennee@linaro.org> (raw)
In-Reply-To: <20231011103329.670525-1-alex.bennee@linaro.org>
From: Akihiko Odaki <akihiko.odaki@daynix.com>
An array is a more appropriate data structure than a list for gdb_regs
since it is initialized only with append operation and read-only after
initialization.
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20230912224107.29669-13-akihiko.odaki@daynix.com>
[AJB: fixed a checkpatch violation]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20231009164104.369749-20-alex.bennee@linaro.org>
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 7b8347ed5a..3968369554 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -502,7 +502,7 @@ struct CPUState {
CPUJumpCache *tb_jmp_cache;
- struct GDBRegisterState *gdb_regs;
+ GArray *gdb_regs;
int gdb_num_regs;
int gdb_num_g_regs;
QTAILQ_ENTRY(CPUState) node;
diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 62608a5389..b1532118d1 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -51,7 +51,6 @@ typedef struct GDBRegisterState {
gdb_get_reg_cb get_reg;
gdb_set_reg_cb set_reg;
const char *xml;
- struct GDBRegisterState *next;
} GDBRegisterState;
GDBState gdbserver_state;
@@ -386,7 +385,8 @@ static const char *get_feature_xml(const char *p, const char **newp,
xml,
g_markup_printf_escaped("<xi:include href=\"%s\"/>",
cc->gdb_core_xml_file));
- for (r = cpu->gdb_regs; r; r = r->next) {
+ for (guint i = 0; i < cpu->gdb_regs->len; i++) {
+ r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
g_ptr_array_add(
xml,
g_markup_printf_escaped("<xi:include href=\"%s\"/>",
@@ -430,7 +430,8 @@ static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
return cc->gdb_read_register(cpu, buf, reg);
}
- for (r = cpu->gdb_regs; r; r = r->next) {
+ for (guint i = 0; i < cpu->gdb_regs->len; i++) {
+ r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
return r->get_reg(env, buf, reg - r->base_reg);
}
@@ -448,7 +449,8 @@ static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
return cc->gdb_write_register(cpu, mem_buf, reg);
}
- for (r = cpu->gdb_regs; r; r = r->next) {
+ for (guint i = 0; i < cpu->gdb_regs->len; i++) {
+ r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
return r->set_reg(env, mem_buf, reg - r->base_reg);
}
@@ -461,17 +463,23 @@ void gdb_register_coprocessor(CPUState *cpu,
int num_regs, const char *xml, int g_pos)
{
GDBRegisterState *s;
- GDBRegisterState **p;
-
- p = &cpu->gdb_regs;
- while (*p) {
- /* Check for duplicates. */
- if (strcmp((*p)->xml, xml) == 0)
- return;
- p = &(*p)->next;
+ guint i;
+
+ if (cpu->gdb_regs) {
+ for (i = 0; i < cpu->gdb_regs->len; i++) {
+ /* Check for duplicates. */
+ s = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
+ if (strcmp(s->xml, xml) == 0) {
+ return;
+ }
+ }
+ } else {
+ cpu->gdb_regs = g_array_new(false, false, sizeof(GDBRegisterState));
+ i = 0;
}
- s = g_new0(GDBRegisterState, 1);
+ g_array_set_size(cpu->gdb_regs, i + 1);
+ s = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
s->base_reg = cpu->gdb_num_regs;
s->num_regs = num_regs;
s->get_reg = get_reg;
@@ -480,7 +488,6 @@ void gdb_register_coprocessor(CPUState *cpu,
/* Add to end of list. */
cpu->gdb_num_regs += num_regs;
- *p = s;
if (g_pos) {
if (g_pos != s->base_reg) {
error_report("Error: Bad gdb register numbering for '%s', "
--
2.39.2
next prev parent reply other threads:[~2023-10-11 10:35 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-11 10:33 [PULL 00/25] testing, gdbstub and plugin updates Alex Bennée
2023-10-11 10:33 ` [PULL 01/25] tests/avocado: update firmware to enable OpenBSD test on sbsa-ref Alex Bennée
2023-10-11 10:33 ` [PULL 02/25] tests/avocado: remove flaky test marking for test_sbsaref_edk2_firmware Alex Bennée
2023-10-11 10:33 ` [PULL 03/25] tests/lcitool: add swtpm to the package list Alex Bennée
2023-10-11 10:33 ` [PULL 04/25] gitlab: shuffle some targets and reduce avocado noise Alex Bennée
2023-10-11 10:33 ` [PULL 05/25] tests/docker: make docker engine choice entirely configure driven Alex Bennée
2023-10-11 10:33 ` [PULL 06/25] configure: allow user to override docker engine Alex Bennée
2023-10-11 10:33 ` [PULL 07/25] configure: remove gcc version suffixes Alex Bennée
2023-10-11 10:33 ` [PULL 08/25] gdbstub: Fix target_xml initialization Alex Bennée
2023-10-11 10:33 ` [PULL 09/25] gdbstub: Fix target.xml response Alex Bennée
2023-10-11 10:33 ` [PULL 10/25] plugins: Check if vCPU is realized Alex Bennée
2023-10-11 10:33 ` [PULL 11/25] contrib/plugins: Use GRWLock in execlog Alex Bennée
2023-10-11 10:33 ` [PULL 12/25] gdbstub: Introduce GDBFeature structure Alex Bennée
2023-10-11 10:33 ` [PULL 13/25] target/arm: Move the reference to arm-core.xml Alex Bennée
2023-10-11 10:33 ` [PULL 14/25] hw/core/cpu: Return static value with gdb_arch_name() Alex Bennée
2023-10-11 10:33 ` [PULL 15/25] gdbstub: Use g_markup_printf_escaped() Alex Bennée
2023-10-11 10:33 ` [PULL 16/25] target/arm: Remove references to gdb_has_xml Alex Bennée
2023-10-11 10:33 ` [PULL 17/25] target/ppc: " Alex Bennée
2023-10-11 10:33 ` [PULL 18/25] gdbstub: Remove gdb_has_xml variable Alex Bennée
2023-10-11 10:33 ` Alex Bennée [this message]
2023-10-17 14:05 ` [PULL 19/25] gdbstub: Replace gdb_regs with an array Fabiano Rosas
2023-10-17 19:40 ` Akihiko Odaki
2023-10-11 10:33 ` [PULL 20/25] accel/tcg: Add plugin_enabled to DisasContextBase Alex Bennée
2023-10-11 10:33 ` [PULL 21/25] target/sh4: Disable decode_gusa when plugins enabled Alex Bennée
2023-10-11 10:33 ` [PULL 22/25] plugins: Set final instruction count in plugin_gen_tb_end Alex Bennée
2023-10-11 10:33 ` [PULL 23/25] contrib/plugins: fix coverity warning in cache Alex Bennée
2023-10-11 10:33 ` [PULL 24/25] contrib/plugins: fix coverity warning in lockstep Alex Bennée
2023-10-11 10:33 ` [PULL 25/25] contrib/plugins: fix coverity warning in hotblocks Alex Bennée
2023-10-11 17:04 ` [PULL 00/25] testing, gdbstub and plugin updates Stefan Hajnoczi
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=20231011103329.670525-20-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=akihiko.odaki@daynix.com \
--cc=alistair.francis@wdc.com \
--cc=eduardo@habkost.net \
--cc=marcel.apfelbaum@gmail.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=wangyanan55@huawei.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).