* [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions
@ 2026-01-19 11:03 Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 1/8] target/i386: Include missing 'svm.h' header in 'sev.h' Philippe Mathieu-Daudé
` (7 more replies)
0 siblings, 8 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
Missing review: #6
v3: Rename MD_I32 -> MD_U32 (Dave)
v2: Change get_value() prototype signature, use ldn_he_p()
Move most of target-agnostic definitions from
"monitor/hmp-target.h" to "monitor/hmp.h" to
reduce files target-poisoning.
Philippe Mathieu-Daudé (8):
target/i386: Include missing 'svm.h' header in 'sev.h'
monitor: Add hmp_cmds_for_target() helper
monitor: Reduce target-specific methods
monitor: Have MonitorDef::get_value() return an unsigned type
monitor: Have *get_monitor_def() fill an unsigned value
monitor: Truncate target register using ldn_he_p() API
monitor: Reduce target-specific methods further
monitor: Remove 'monitor/hmp-target.h' header
MAINTAINERS | 2 +-
include/monitor/hmp-target.h | 64 -------------------
include/monitor/hmp.h | 31 +++++++++
monitor/monitor-internal.h | 10 ++-
target/i386/sev.h | 2 +
hw/i386/sgx-stub.c | 2 +-
hw/i386/sgx.c | 1 -
monitor/hmp-cmds.c | 1 -
monitor/hmp-target.c | 108 +------------------------------
monitor/hmp.c | 116 ++++++++++++++++++++++++++++++++--
stubs/target-monitor-defs.c | 2 +-
target/i386/cpu-apic.c | 2 +-
target/i386/monitor.c | 9 ++-
target/i386/sev-system-stub.c | 2 +-
target/i386/sev.c | 1 -
target/m68k/monitor.c | 62 +++++++++---------
target/ppc/ppc-qmp-cmds.c | 26 ++++----
target/riscv/monitor.c | 2 +-
target/riscv/riscv-qmp-cmds.c | 1 -
target/sh4/monitor.c | 1 -
target/sparc/monitor.c | 11 ++--
target/xtensa/monitor.c | 1 -
22 files changed, 212 insertions(+), 245 deletions(-)
delete mode 100644 include/monitor/hmp-target.h
--
2.52.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 1/8] target/i386: Include missing 'svm.h' header in 'sev.h'
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 2/8] monitor: Add hmp_cmds_for_target() helper Philippe Mathieu-Daudé
` (6 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
"target/i386/sev.h" uses the vmcb_seg structure type, which
is defined in "target/i386/svm.h". Current builds succeed
because the files including "target/i386/sev.h" also include
"monitor/hmp-target.h", itself including "cpu.h" and finally
"target/i386/svm.h".
Include the latter, otherwise removing "cpu.h" from
"monitor/hmp-target.h" triggers:
../target/i386/sev.h:62:21: error: field has incomplete type 'struct vmcb_seg'
62 | struct vmcb_seg es;
| ^
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
target/i386/sev.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/target/i386/sev.h b/target/i386/sev.h
index 9db1a802f6b..4358df40e48 100644
--- a/target/i386/sev.h
+++ b/target/i386/sev.h
@@ -14,6 +14,8 @@
#ifndef I386_SEV_H
#define I386_SEV_H
+#include "target/i386/svm.h"
+
#ifndef CONFIG_USER_ONLY
#include CONFIG_DEVICES /* CONFIG_SEV */
#endif
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 2/8] monitor: Add hmp_cmds_for_target() helper
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 1/8] target/i386: Include missing 'svm.h' header in 'sev.h' Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 3/8] monitor: Reduce target-specific methods Philippe Mathieu-Daudé
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
HMPCommand arrays are filled with target-specific
commands, so defined in a target-specific unit.
Introduce the hmp_cmds_for_target() to allow
target-agnostic code to access the arrays.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
---
monitor/monitor-internal.h | 9 +++++++--
monitor/hmp-target.c | 13 ++++++++-----
monitor/hmp.c | 8 +++++---
3 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/monitor/monitor-internal.h b/monitor/monitor-internal.h
index 7735c731083..feca111ae31 100644
--- a/monitor/monitor-internal.h
+++ b/monitor/monitor-internal.h
@@ -169,8 +169,6 @@ extern QmpCommandList qmp_commands, qmp_cap_negotiation_commands;
extern QemuMutex monitor_lock;
extern MonitorList mon_list;
-extern HMPCommand hmp_cmds[];
-
void monitor_data_init(Monitor *mon, bool is_qmp, bool skip_flush,
bool use_io_thread);
void monitor_data_destroy(Monitor *mon);
@@ -187,4 +185,11 @@ int get_monitor_def(Monitor *mon, int64_t *pval, const char *name);
void handle_hmp_command(MonitorHMP *mon, const char *cmdline);
int hmp_compare_cmd(const char *name, const char *list);
+/*
+ * hmp_cmds_for_target: Return array of HMPCommand entries
+ *
+ * If @info_command is true, return the particular 'info foo' commands array.
+ */
+HMPCommand *hmp_cmds_for_target(bool info_command);
+
#endif
diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
index 37dfd7fd4c6..59c60d13b52 100644
--- a/monitor/hmp-target.c
+++ b/monitor/hmp-target.c
@@ -44,8 +44,6 @@
/* Make devices configuration available for use in hmp-commands*.hx templates */
#include CONFIG_DEVICES
-static HMPCommand hmp_info_cmds[];
-
/**
* Is @name in the '|' separated list of names @list?
*/
@@ -76,11 +74,16 @@ static HMPCommand hmp_info_cmds[] = {
};
/* hmp_cmds and hmp_info_cmds would be sorted at runtime */
-HMPCommand hmp_cmds[] = {
+static HMPCommand hmp_cmds[] = {
#include "hmp-commands.h"
{ NULL, NULL, },
};
+HMPCommand *hmp_cmds_for_target(bool info_command)
+{
+ return info_command ? hmp_info_cmds : hmp_cmds;
+}
+
/*
* Set @pval to the value in the register identified by @name.
* return 0 if OK, -1 if not found
@@ -148,7 +151,7 @@ static void __attribute__((__constructor__)) sortcmdlist(void)
void monitor_register_hmp(const char *name, bool info,
void (*cmd)(Monitor *mon, const QDict *qdict))
{
- HMPCommand *table = info ? hmp_info_cmds : hmp_cmds;
+ HMPCommand *table = hmp_cmds_for_target(info);
while (table->name != NULL) {
if (strcmp(table->name, name) == 0) {
@@ -164,7 +167,7 @@ void monitor_register_hmp(const char *name, bool info,
void monitor_register_hmp_info_hrt(const char *name,
HumanReadableText *(*handler)(Error **errp))
{
- HMPCommand *table = hmp_info_cmds;
+ HMPCommand *table = hmp_cmds_for_target(true);
while (table->name != NULL) {
if (strcmp(table->name, name) == 0) {
diff --git a/monitor/hmp.c b/monitor/hmp.c
index 4caafbc7146..17e5756986f 100644
--- a/monitor/hmp.c
+++ b/monitor/hmp.c
@@ -301,7 +301,7 @@ void hmp_help_cmd(Monitor *mon, const char *name)
}
/* 2. dump the contents according to parsed args */
- help_cmd_dump(mon, hmp_cmds, args, nb_args, 0);
+ help_cmd_dump(mon, hmp_cmds_for_target(false), args, nb_args, 0);
free_cmdline_args(args, nb_args);
}
@@ -1131,7 +1131,8 @@ void handle_hmp_command(MonitorHMP *mon, const char *cmdline)
trace_handle_hmp_command(mon, cmdline);
- cmd = monitor_parse_command(mon, cmdline, &cmdline, hmp_cmds);
+ cmd = monitor_parse_command(mon, cmdline, &cmdline,
+ hmp_cmds_for_target(false));
if (!cmd) {
return;
}
@@ -1375,7 +1376,8 @@ static void monitor_find_completion(void *opaque,
}
/* 2. auto complete according to args */
- monitor_find_completion_by_table(mon, hmp_cmds, args, nb_args);
+ monitor_find_completion_by_table(mon, hmp_cmds_for_target(false),
+ args, nb_args);
cleanup:
free_cmdline_args(args, nb_args);
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 3/8] monitor: Reduce target-specific methods
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 1/8] target/i386: Include missing 'svm.h' header in 'sev.h' Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 2/8] monitor: Add hmp_cmds_for_target() helper Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 4/8] monitor: Have MonitorDef::get_value() return an unsigned type Philippe Mathieu-Daudé
` (4 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
The following methods don't use target-specific code anymore:
- hmp_compare_cmd()
- monitor_register_hmp()
- monitor_register_hmp_info_hrt()
Move them to hmp.c which is target-agnostic, being built once.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
---
monitor/hmp-target.c | 57 --------------------------------------------
monitor/hmp.c | 55 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 57 deletions(-)
diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
index 59c60d13b52..420969bd6eb 100644
--- a/monitor/hmp-target.c
+++ b/monitor/hmp-target.c
@@ -33,8 +33,6 @@
#include "qapi/qapi-commands-control.h"
#include "qapi/qapi-commands-misc.h"
#include "qapi/qapi-commands-machine.h"
-#include "qapi/error.h"
-#include "qemu/cutils.h"
#if defined(TARGET_S390X)
#include "hw/s390x/storage-keys.h"
@@ -44,29 +42,6 @@
/* Make devices configuration available for use in hmp-commands*.hx templates */
#include CONFIG_DEVICES
-/**
- * Is @name in the '|' separated list of names @list?
- */
-int hmp_compare_cmd(const char *name, const char *list)
-{
- const char *p, *pstart;
- int len;
- len = strlen(name);
- p = list;
- for (;;) {
- pstart = p;
- p = qemu_strchrnul(p, '|');
- if ((p - pstart) == len && !memcmp(pstart, name, len)) {
- return 1;
- }
- if (*p == '\0') {
- break;
- }
- p++;
- }
- return 0;
-}
-
/* Please update hmp-commands.hx when adding or changing commands */
static HMPCommand hmp_info_cmds[] = {
#include "hmp-commands-info.h"
@@ -147,35 +122,3 @@ static void __attribute__((__constructor__)) sortcmdlist(void)
sizeof(*hmp_info_cmds),
compare_mon_cmd);
}
-
-void monitor_register_hmp(const char *name, bool info,
- void (*cmd)(Monitor *mon, const QDict *qdict))
-{
- HMPCommand *table = hmp_cmds_for_target(info);
-
- while (table->name != NULL) {
- if (strcmp(table->name, name) == 0) {
- g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
- table->cmd = cmd;
- return;
- }
- table++;
- }
- g_assert_not_reached();
-}
-
-void monitor_register_hmp_info_hrt(const char *name,
- HumanReadableText *(*handler)(Error **errp))
-{
- HMPCommand *table = hmp_cmds_for_target(true);
-
- while (table->name != NULL) {
- if (strcmp(table->name, name) == 0) {
- g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
- table->cmd_info_hrt = handler;
- return;
- }
- table++;
- }
- g_assert_not_reached();
-}
diff --git a/monitor/hmp.c b/monitor/hmp.c
index 17e5756986f..0a5bbf82197 100644
--- a/monitor/hmp.c
+++ b/monitor/hmp.c
@@ -1497,3 +1497,58 @@ void monitor_init_hmp(Chardev *chr, bool use_readline, Error **errp)
monitor_event, NULL, &mon->common, NULL, true);
monitor_list_append(&mon->common);
}
+
+/**
+ * Is @name in the '|' separated list of names @list?
+ */
+int hmp_compare_cmd(const char *name, const char *list)
+{
+ const char *p, *pstart;
+ int len;
+ len = strlen(name);
+ p = list;
+ for (;;) {
+ pstart = p;
+ p = qemu_strchrnul(p, '|');
+ if ((p - pstart) == len && !memcmp(pstart, name, len)) {
+ return 1;
+ }
+ if (*p == '\0') {
+ break;
+ }
+ p++;
+ }
+ return 0;
+}
+
+void monitor_register_hmp(const char *name, bool info,
+ void (*cmd)(Monitor *mon, const QDict *qdict))
+{
+ HMPCommand *table = hmp_cmds_for_target(info);
+
+ while (table->name != NULL) {
+ if (strcmp(table->name, name) == 0) {
+ g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
+ table->cmd = cmd;
+ return;
+ }
+ table++;
+ }
+ g_assert_not_reached();
+}
+
+void monitor_register_hmp_info_hrt(const char *name,
+ HumanReadableText *(*handler)(Error **errp))
+{
+ HMPCommand *table = hmp_cmds_for_target(true);
+
+ while (table->name != NULL) {
+ if (strcmp(table->name, name) == 0) {
+ g_assert(table->cmd == NULL && table->cmd_info_hrt == NULL);
+ table->cmd_info_hrt = handler;
+ return;
+ }
+ table++;
+ }
+ g_assert_not_reached();
+}
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 4/8] monitor: Have MonitorDef::get_value() return an unsigned type
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2026-01-19 11:03 ` [PATCH v3 3/8] monitor: Reduce target-specific methods Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 5/8] monitor: Have *get_monitor_def() fill an unsigned value Philippe Mathieu-Daudé
` (3 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
All implementations of the get_value() handler return an
unsigned type:
- target/i386/monitor.c
monitor_get_pc() -> target_ulong eip;
- target/ppc/ppc-qmp-cmds.c
monitor_get_ccr() -> uint64_t ppc_get_cr(const CPUPPCState *env);
monitor_get_xer() -> target_ulong cpu_read_xer(const CPUPPCState *env);
monitor_get_decr() -> target_ulong cpu_ppc_load_decr(CPUPPCState *env);
monitor_get_tbu() -> uint32_t cpu_ppc_load_tbu(CPUPPCState *env);
monitor_get_tbl() -> uint64_t cpu_ppc_load_tbl(CPUPPCState *env);
- target/sparc/monitor.c
monitor_get_psr() -> target_ulong cpu_get_psr(CPUSPARCState *env1);
monitor_get_reg() -> target_ulong *regwptr;
Convert the MonitorDef::get_value() handler to return unsigned.
Rename the MD_I32/MD_TLONG definitions mechanically doing:
$ sed -i -e s/MD_I32/MD_U32/g $(git grep -lw MD_I32)
$ sed -i -e s/MD_TLONG/MD_TULONG/g $(git grep -lw MD_TLONG)
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
---
include/monitor/hmp-target.h | 7 ++---
monitor/hmp-target.c | 12 ++++----
target/i386/monitor.c | 8 ++---
target/m68k/monitor.c | 60 ++++++++++++++++++------------------
target/ppc/ppc-qmp-cmds.c | 25 +++++++--------
target/sparc/monitor.c | 10 +++---
6 files changed, 59 insertions(+), 63 deletions(-)
diff --git a/include/monitor/hmp-target.h b/include/monitor/hmp-target.h
index b679aaebbff..97d99f1c747 100644
--- a/include/monitor/hmp-target.h
+++ b/include/monitor/hmp-target.h
@@ -32,14 +32,13 @@ typedef struct MonitorDef MonitorDef;
struct MonitorDef {
const char *name;
int offset;
- target_long (*get_value)(Monitor *mon, const struct MonitorDef *md,
- int val);
+ uint64_t (*get_value)(Monitor *mon, const struct MonitorDef *md, int val);
int type;
};
#endif
-#define MD_TLONG 0
-#define MD_I32 1
+#define MD_TULONG 0
+#define MD_U32 1
const MonitorDef *target_monitor_defs(void);
int target_get_monitor_def(CPUState *cs, const char *name, uint64_t *pval);
diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
index 420969bd6eb..1600666ee92 100644
--- a/monitor/hmp-target.c
+++ b/monitor/hmp-target.c
@@ -67,7 +67,6 @@ int get_monitor_def(Monitor *mon, int64_t *pval, const char *name)
{
const MonitorDef *md = target_monitor_defs();
CPUState *cs = mon_get_cpu(mon);
- void *ptr;
uint64_t tmp = 0;
int ret;
@@ -81,13 +80,14 @@ int get_monitor_def(Monitor *mon, int64_t *pval, const char *name)
*pval = md->get_value(mon, md, md->offset);
} else {
CPUArchState *env = mon_get_cpu_env(mon);
- ptr = (uint8_t *)env + md->offset;
+ void *ptr = (uint8_t *)env + md->offset;
+
switch(md->type) {
- case MD_I32:
- *pval = *(int32_t *)ptr;
+ case MD_U32:
+ *pval = *(uint32_t *)ptr;
break;
- case MD_TLONG:
- *pval = *(target_long *)ptr;
+ case MD_TULONG:
+ *pval = *(target_ulong *)ptr;
break;
default:
*pval = 0;
diff --git a/target/i386/monitor.c b/target/i386/monitor.c
index 99b32cb7b0f..427f1990399 100644
--- a/target/i386/monitor.c
+++ b/target/i386/monitor.c
@@ -593,8 +593,8 @@ void hmp_mce(Monitor *mon, const QDict *qdict)
}
}
-static target_long monitor_get_pc(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_pc(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
return env->eip + env->segs[R_CS].base;
@@ -602,9 +602,9 @@ static target_long monitor_get_pc(Monitor *mon, const struct MonitorDef *md,
const MonitorDef monitor_defs[] = {
#define SEG(name, seg) \
- { name, offsetof(CPUX86State, segs[seg].selector), NULL, MD_I32 },\
+ { name, offsetof(CPUX86State, segs[seg].selector), NULL, MD_U32 },\
{ name ".base", offsetof(CPUX86State, segs[seg].base) },\
- { name ".limit", offsetof(CPUX86State, segs[seg].limit), NULL, MD_I32 },
+ { name ".limit", offsetof(CPUX86State, segs[seg].limit), NULL, MD_U32 },
{ "eax", offsetof(CPUX86State, regs[0]) },
{ "ecx", offsetof(CPUX86State, regs[1]) },
diff --git a/target/m68k/monitor.c b/target/m68k/monitor.c
index 161f41853ec..fe289f6d5de 100644
--- a/target/m68k/monitor.c
+++ b/target/m68k/monitor.c
@@ -23,36 +23,36 @@ void hmp_info_tlb(Monitor *mon, const QDict *qdict)
}
static const MonitorDef monitor_defs[] = {
- { "d0", offsetof(CPUM68KState, dregs[0]), NULL, MD_I32 },
- { "d1", offsetof(CPUM68KState, dregs[1]), NULL, MD_I32 },
- { "d2", offsetof(CPUM68KState, dregs[2]), NULL, MD_I32 },
- { "d3", offsetof(CPUM68KState, dregs[3]), NULL, MD_I32 },
- { "d4", offsetof(CPUM68KState, dregs[4]), NULL, MD_I32 },
- { "d5", offsetof(CPUM68KState, dregs[5]), NULL, MD_I32 },
- { "d6", offsetof(CPUM68KState, dregs[6]), NULL, MD_I32 },
- { "d7", offsetof(CPUM68KState, dregs[7]), NULL, MD_I32 },
- { "a0", offsetof(CPUM68KState, aregs[0]), NULL, MD_I32 },
- { "a1", offsetof(CPUM68KState, aregs[1]), NULL, MD_I32 },
- { "a2", offsetof(CPUM68KState, aregs[2]), NULL, MD_I32 },
- { "a3", offsetof(CPUM68KState, aregs[3]), NULL, MD_I32 },
- { "a4", offsetof(CPUM68KState, aregs[4]), NULL, MD_I32 },
- { "a5", offsetof(CPUM68KState, aregs[5]), NULL, MD_I32 },
- { "a6", offsetof(CPUM68KState, aregs[6]), NULL, MD_I32 },
- { "a7", offsetof(CPUM68KState, aregs[7]), NULL, MD_I32 },
- { "pc", offsetof(CPUM68KState, pc), NULL, MD_I32 },
- { "sr", offsetof(CPUM68KState, sr), NULL, MD_I32 },
- { "ssp", offsetof(CPUM68KState, sp[0]), NULL, MD_I32 },
- { "usp", offsetof(CPUM68KState, sp[1]), NULL, MD_I32 },
- { "isp", offsetof(CPUM68KState, sp[2]), NULL, MD_I32 },
- { "sfc", offsetof(CPUM68KState, sfc), NULL, MD_I32 },
- { "dfc", offsetof(CPUM68KState, dfc), NULL, MD_I32 },
- { "urp", offsetof(CPUM68KState, mmu.urp), NULL, MD_I32 },
- { "srp", offsetof(CPUM68KState, mmu.srp), NULL, MD_I32 },
- { "dttr0", offsetof(CPUM68KState, mmu.ttr[M68K_DTTR0]), NULL, MD_I32 },
- { "dttr1", offsetof(CPUM68KState, mmu.ttr[M68K_DTTR1]), NULL, MD_I32 },
- { "ittr0", offsetof(CPUM68KState, mmu.ttr[M68K_ITTR0]), NULL, MD_I32 },
- { "ittr1", offsetof(CPUM68KState, mmu.ttr[M68K_ITTR1]), NULL, MD_I32 },
- { "mmusr", offsetof(CPUM68KState, mmu.mmusr), NULL, MD_I32 },
+ { "d0", offsetof(CPUM68KState, dregs[0]), NULL, MD_U32 },
+ { "d1", offsetof(CPUM68KState, dregs[1]), NULL, MD_U32 },
+ { "d2", offsetof(CPUM68KState, dregs[2]), NULL, MD_U32 },
+ { "d3", offsetof(CPUM68KState, dregs[3]), NULL, MD_U32 },
+ { "d4", offsetof(CPUM68KState, dregs[4]), NULL, MD_U32 },
+ { "d5", offsetof(CPUM68KState, dregs[5]), NULL, MD_U32 },
+ { "d6", offsetof(CPUM68KState, dregs[6]), NULL, MD_U32 },
+ { "d7", offsetof(CPUM68KState, dregs[7]), NULL, MD_U32 },
+ { "a0", offsetof(CPUM68KState, aregs[0]), NULL, MD_U32 },
+ { "a1", offsetof(CPUM68KState, aregs[1]), NULL, MD_U32 },
+ { "a2", offsetof(CPUM68KState, aregs[2]), NULL, MD_U32 },
+ { "a3", offsetof(CPUM68KState, aregs[3]), NULL, MD_U32 },
+ { "a4", offsetof(CPUM68KState, aregs[4]), NULL, MD_U32 },
+ { "a5", offsetof(CPUM68KState, aregs[5]), NULL, MD_U32 },
+ { "a6", offsetof(CPUM68KState, aregs[6]), NULL, MD_U32 },
+ { "a7", offsetof(CPUM68KState, aregs[7]), NULL, MD_U32 },
+ { "pc", offsetof(CPUM68KState, pc), NULL, MD_U32 },
+ { "sr", offsetof(CPUM68KState, sr), NULL, MD_U32 },
+ { "ssp", offsetof(CPUM68KState, sp[0]), NULL, MD_U32 },
+ { "usp", offsetof(CPUM68KState, sp[1]), NULL, MD_U32 },
+ { "isp", offsetof(CPUM68KState, sp[2]), NULL, MD_U32 },
+ { "sfc", offsetof(CPUM68KState, sfc), NULL, MD_U32 },
+ { "dfc", offsetof(CPUM68KState, dfc), NULL, MD_U32 },
+ { "urp", offsetof(CPUM68KState, mmu.urp), NULL, MD_U32 },
+ { "srp", offsetof(CPUM68KState, mmu.srp), NULL, MD_U32 },
+ { "dttr0", offsetof(CPUM68KState, mmu.ttr[M68K_DTTR0]), NULL, MD_U32 },
+ { "dttr1", offsetof(CPUM68KState, mmu.ttr[M68K_DTTR1]), NULL, MD_U32 },
+ { "ittr0", offsetof(CPUM68KState, mmu.ttr[M68K_ITTR0]), NULL, MD_U32 },
+ { "ittr1", offsetof(CPUM68KState, mmu.ttr[M68K_ITTR1]), NULL, MD_U32 },
+ { "mmusr", offsetof(CPUM68KState, mmu.mmusr), NULL, MD_U32 },
{ NULL },
};
diff --git a/target/ppc/ppc-qmp-cmds.c b/target/ppc/ppc-qmp-cmds.c
index 7022564604f..07938abb15f 100644
--- a/target/ppc/ppc-qmp-cmds.c
+++ b/target/ppc/ppc-qmp-cmds.c
@@ -33,26 +33,23 @@
#include "cpu-models.h"
#include "cpu-qom.h"
-static target_long monitor_get_ccr(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_ccr(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
- unsigned int u;
- u = ppc_get_cr(env);
-
- return u;
+ return ppc_get_cr(env);
}
-static target_long monitor_get_xer(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_xer(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
return cpu_read_xer(env);
}
-static target_long monitor_get_decr(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_decr(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
if (!env->tb_env) {
@@ -61,8 +58,8 @@ static target_long monitor_get_decr(Monitor *mon, const struct MonitorDef *md,
return cpu_ppc_load_decr(env);
}
-static target_long monitor_get_tbu(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_tbu(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
if (!env->tb_env) {
@@ -71,8 +68,8 @@ static target_long monitor_get_tbu(Monitor *mon, const struct MonitorDef *md,
return cpu_ppc_load_tbu(env);
}
-static target_long monitor_get_tbl(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_tbl(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
if (!env->tb_env) {
diff --git a/target/sparc/monitor.c b/target/sparc/monitor.c
index 73f15aa272d..378967f8164 100644
--- a/target/sparc/monitor.c
+++ b/target/sparc/monitor.c
@@ -40,8 +40,8 @@ void hmp_info_tlb(Monitor *mon, const QDict *qdict)
}
#ifndef TARGET_SPARC64
-static target_long monitor_get_psr(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_psr(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
@@ -49,8 +49,8 @@ static target_long monitor_get_psr(Monitor *mon, const struct MonitorDef *md,
}
#endif
-static target_long monitor_get_reg(Monitor *mon, const struct MonitorDef *md,
- int val)
+static uint64_t monitor_get_reg(Monitor *mon, const struct MonitorDef *md,
+ int val)
{
CPUArchState *env = mon_get_cpu_env(mon);
return env->regwptr[val];
@@ -154,7 +154,7 @@ const MonitorDef monitor_defs[] = {
{ "otherwin", offsetof(CPUSPARCState, otherwin) },
{ "wstate", offsetof(CPUSPARCState, wstate) },
{ "cleanwin", offsetof(CPUSPARCState, cleanwin) },
- { "fprs", offsetof(CPUSPARCState, fprs), NULL, MD_I32 },
+ { "fprs", offsetof(CPUSPARCState, fprs), NULL, MD_U32 },
#endif
{ NULL },
};
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 5/8] monitor: Have *get_monitor_def() fill an unsigned value
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2026-01-19 11:03 ` [PATCH v3 4/8] monitor: Have MonitorDef::get_value() return an unsigned type Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 6/8] monitor: Truncate target register using ldn_he_p() API Philippe Mathieu-Daudé
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
target_get_monitor_def() fills an unsigned value.
Have get_monitor_def() fill an unsigned value too.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
---
monitor/monitor-internal.h | 2 +-
monitor/hmp-target.c | 4 ++--
monitor/hmp.c | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/monitor/monitor-internal.h b/monitor/monitor-internal.h
index feca111ae31..8dc88963630 100644
--- a/monitor/monitor-internal.h
+++ b/monitor/monitor-internal.h
@@ -181,7 +181,7 @@ void monitor_data_destroy_qmp(MonitorQMP *mon);
void coroutine_fn monitor_qmp_dispatcher_co(void *data);
void qmp_dispatcher_co_wake(void);
-int get_monitor_def(Monitor *mon, int64_t *pval, const char *name);
+int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name);
void handle_hmp_command(MonitorHMP *mon, const char *cmdline);
int hmp_compare_cmd(const char *name, const char *list);
diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
index 1600666ee92..5738b47bb03 100644
--- a/monitor/hmp-target.c
+++ b/monitor/hmp-target.c
@@ -63,7 +63,7 @@ HMPCommand *hmp_cmds_for_target(bool info_command)
* Set @pval to the value in the register identified by @name.
* return 0 if OK, -1 if not found
*/
-int get_monitor_def(Monitor *mon, int64_t *pval, const char *name)
+int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name)
{
const MonitorDef *md = target_monitor_defs();
CPUState *cs = mon_get_cpu(mon);
@@ -100,7 +100,7 @@ int get_monitor_def(Monitor *mon, int64_t *pval, const char *name)
ret = target_get_monitor_def(cs, name, &tmp);
if (!ret) {
- *pval = (target_long) tmp;
+ *pval = (target_ulong)tmp;
}
return ret;
diff --git a/monitor/hmp.c b/monitor/hmp.c
index 0a5bbf82197..eee8b7e964e 100644
--- a/monitor/hmp.c
+++ b/monitor/hmp.c
@@ -376,7 +376,7 @@ static int64_t expr_unary(Monitor *mon)
case '$':
{
char buf[128], *q;
- int64_t reg = 0;
+ uint64_t reg = 0;
pch++;
q = buf;
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 6/8] monitor: Truncate target register using ldn_he_p() API
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2026-01-19 11:03 ` [PATCH v3 5/8] monitor: Have *get_monitor_def() fill an unsigned value Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 7/8] monitor: Reduce target-specific methods further Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 8/8] monitor: Remove 'monitor/hmp-target.h' header Philippe Mathieu-Daudé
7 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
Rather than truncating with a target_long cast, use the
unaligned load/store API.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/monitor/hmp-target.h | 3 ---
monitor/hmp-target.c | 8 +++++---
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/include/monitor/hmp-target.h b/include/monitor/hmp-target.h
index 97d99f1c747..c56f8df505c 100644
--- a/include/monitor/hmp-target.h
+++ b/include/monitor/hmp-target.h
@@ -27,15 +27,12 @@
typedef struct MonitorDef MonitorDef;
-#ifdef COMPILING_PER_TARGET
-#include "cpu.h"
struct MonitorDef {
const char *name;
int offset;
uint64_t (*get_value)(Monitor *mon, const struct MonitorDef *md, int val);
int type;
};
-#endif
#define MD_TULONG 0
#define MD_U32 1
diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
index 5738b47bb03..257605a1c96 100644
--- a/monitor/hmp-target.c
+++ b/monitor/hmp-target.c
@@ -23,6 +23,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/bswap.h"
#include "monitor-internal.h"
#include "monitor/qdev.h"
#include "net/slirp.h"
@@ -65,6 +66,7 @@ HMPCommand *hmp_cmds_for_target(bool info_command)
*/
int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name)
{
+ const unsigned length = target_long_bits() / 8;
const MonitorDef *md = target_monitor_defs();
CPUState *cs = mon_get_cpu(mon);
uint64_t tmp = 0;
@@ -83,11 +85,11 @@ int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name)
void *ptr = (uint8_t *)env + md->offset;
switch(md->type) {
- case MD_U32:
+ case MD_I32:
*pval = *(uint32_t *)ptr;
break;
case MD_TULONG:
- *pval = *(target_ulong *)ptr;
+ *pval = ldn_he_p(ptr, length);
break;
default:
*pval = 0;
@@ -100,7 +102,7 @@ int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name)
ret = target_get_monitor_def(cs, name, &tmp);
if (!ret) {
- *pval = (target_ulong)tmp;
+ *pval = ldn_he_p(&tmp, length);
}
return ret;
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 7/8] monitor: Reduce target-specific methods further
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2026-01-19 11:03 ` [PATCH v3 6/8] monitor: Truncate target register using ldn_he_p() API Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 8/8] monitor: Remove 'monitor/hmp-target.h' header Philippe Mathieu-Daudé
7 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
get_monitor_def() doesn't use any target-specific declaration
anymore, move it to hmp.c to compile it once.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
---
monitor/monitor-internal.h | 1 -
monitor/hmp-target.c | 49 -----------------------------------
monitor/hmp.c | 52 ++++++++++++++++++++++++++++++++++++++
3 files changed, 52 insertions(+), 50 deletions(-)
diff --git a/monitor/monitor-internal.h b/monitor/monitor-internal.h
index 8dc88963630..3ecd394ecf6 100644
--- a/monitor/monitor-internal.h
+++ b/monitor/monitor-internal.h
@@ -181,7 +181,6 @@ void monitor_data_destroy_qmp(MonitorQMP *mon);
void coroutine_fn monitor_qmp_dispatcher_co(void *data);
void qmp_dispatcher_co_wake(void);
-int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name);
void handle_hmp_command(MonitorHMP *mon, const char *cmdline);
int hmp_compare_cmd(const char *name, const char *list);
diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
index 257605a1c96..a3306b69c93 100644
--- a/monitor/hmp-target.c
+++ b/monitor/hmp-target.c
@@ -23,7 +23,6 @@
*/
#include "qemu/osdep.h"
-#include "qemu/bswap.h"
#include "monitor-internal.h"
#include "monitor/qdev.h"
#include "net/slirp.h"
@@ -60,54 +59,6 @@ HMPCommand *hmp_cmds_for_target(bool info_command)
return info_command ? hmp_info_cmds : hmp_cmds;
}
-/*
- * Set @pval to the value in the register identified by @name.
- * return 0 if OK, -1 if not found
- */
-int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name)
-{
- const unsigned length = target_long_bits() / 8;
- const MonitorDef *md = target_monitor_defs();
- CPUState *cs = mon_get_cpu(mon);
- uint64_t tmp = 0;
- int ret;
-
- if (cs == NULL || md == NULL) {
- return -1;
- }
-
- for(; md->name != NULL; md++) {
- if (hmp_compare_cmd(name, md->name)) {
- if (md->get_value) {
- *pval = md->get_value(mon, md, md->offset);
- } else {
- CPUArchState *env = mon_get_cpu_env(mon);
- void *ptr = (uint8_t *)env + md->offset;
-
- switch(md->type) {
- case MD_I32:
- *pval = *(uint32_t *)ptr;
- break;
- case MD_TULONG:
- *pval = ldn_he_p(ptr, length);
- break;
- default:
- *pval = 0;
- break;
- }
- }
- return 0;
- }
- }
-
- ret = target_get_monitor_def(cs, name, &tmp);
- if (!ret) {
- *pval = ldn_he_p(&tmp, length);
- }
-
- return ret;
-}
-
static int
compare_mon_cmd(const void *a, const void *b)
{
diff --git a/monitor/hmp.c b/monitor/hmp.c
index eee8b7e964e..36e58c54670 100644
--- a/monitor/hmp.c
+++ b/monitor/hmp.c
@@ -27,8 +27,10 @@
#include "hw/core/qdev.h"
#include "monitor-internal.h"
#include "monitor/hmp.h"
+#include "monitor/hmp-target.h"
#include "qobject/qdict.h"
#include "qobject/qnum.h"
+#include "qemu/bswap.h"
#include "qemu/config-file.h"
#include "qemu/ctype.h"
#include "qemu/cutils.h"
@@ -311,6 +313,8 @@ void hmp_help_cmd(Monitor *mon, const char *name)
static const char *pch;
static sigjmp_buf expr_env;
+static int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name);
+
static G_NORETURN G_GNUC_PRINTF(2, 3)
void expr_error(Monitor *mon, const char *fmt, ...)
{
@@ -1552,3 +1556,51 @@ void monitor_register_hmp_info_hrt(const char *name,
}
g_assert_not_reached();
}
+
+/*
+ * Set @pval to the value in the register identified by @name.
+ * return 0 if OK, -1 if not found
+ */
+static int get_monitor_def(Monitor *mon, uint64_t *pval, const char *name)
+{
+ const unsigned length = target_long_bits() / 8;
+ const MonitorDef *md = target_monitor_defs();
+ CPUState *cs = mon_get_cpu(mon);
+ uint64_t tmp = 0;
+ int ret;
+
+ if (cs == NULL || md == NULL) {
+ return -1;
+ }
+
+ for(; md->name != NULL; md++) {
+ if (hmp_compare_cmd(name, md->name)) {
+ if (md->get_value) {
+ *pval = md->get_value(mon, md, md->offset);
+ } else {
+ CPUArchState *env = mon_get_cpu_env(mon);
+ void *ptr = (uint8_t *)env + md->offset;
+
+ switch(md->type) {
+ case MD_U32:
+ *pval = *(uint32_t *)ptr;
+ break;
+ case MD_TULONG:
+ *pval = ldn_he_p(ptr, length);
+ break;
+ default:
+ *pval = 0;
+ break;
+ }
+ }
+ return 0;
+ }
+ }
+
+ ret = target_get_monitor_def(cs, name, &tmp);
+ if (!ret) {
+ *pval = ldn_he_p(&tmp, length);
+ }
+
+ return ret;
+}
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 8/8] monitor: Remove 'monitor/hmp-target.h' header
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2026-01-19 11:03 ` [PATCH v3 7/8] monitor: Reduce target-specific methods further Philippe Mathieu-Daudé
@ 2026-01-19 11:03 ` Philippe Mathieu-Daudé
2026-01-19 14:46 ` Philippe Mathieu-Daudé
7 siblings, 1 reply; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 11:03 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
The "monitor/hmp-target.h" header doesn't contain any
target-specific declarations anymore. Merge it with
"monitor/hmp.h", its target-agnostic counterpart.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
---
MAINTAINERS | 2 +-
include/monitor/hmp-target.h | 60 -----------------------------------
include/monitor/hmp.h | 31 ++++++++++++++++++
hw/i386/sgx-stub.c | 2 +-
hw/i386/sgx.c | 1 -
monitor/hmp-cmds.c | 1 -
monitor/hmp-target.c | 1 -
monitor/hmp.c | 1 -
stubs/target-monitor-defs.c | 2 +-
target/i386/cpu-apic.c | 2 +-
target/i386/monitor.c | 1 -
target/i386/sev-system-stub.c | 2 +-
target/i386/sev.c | 1 -
target/m68k/monitor.c | 2 +-
target/ppc/ppc-qmp-cmds.c | 1 -
target/riscv/monitor.c | 2 +-
target/riscv/riscv-qmp-cmds.c | 1 -
target/sh4/monitor.c | 1 -
target/sparc/monitor.c | 1 -
target/xtensa/monitor.c | 1 -
20 files changed, 38 insertions(+), 78 deletions(-)
delete mode 100644 include/monitor/hmp-target.h
diff --git a/MAINTAINERS b/MAINTAINERS
index de8246c3ffd..1e0d71c7bb8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3377,7 +3377,7 @@ F: monitor/monitor.c
F: monitor/hmp*
F: hmp.h
F: hmp-commands*.hx
-F: include/monitor/hmp-target.h
+F: include/monitor/hmp.h
F: tests/qtest/test-hmp.c
F: include/qemu/qemu-print.h
F: util/qemu-print.c
diff --git a/include/monitor/hmp-target.h b/include/monitor/hmp-target.h
deleted file mode 100644
index c56f8df505c..00000000000
--- a/include/monitor/hmp-target.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * QEMU monitor
- *
- * Copyright (c) 2003-2004 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MONITOR_HMP_TARGET_H
-#define MONITOR_HMP_TARGET_H
-
-typedef struct MonitorDef MonitorDef;
-
-struct MonitorDef {
- const char *name;
- int offset;
- uint64_t (*get_value)(Monitor *mon, const struct MonitorDef *md, int val);
- int type;
-};
-
-#define MD_TULONG 0
-#define MD_U32 1
-
-const MonitorDef *target_monitor_defs(void);
-int target_get_monitor_def(CPUState *cs, const char *name, uint64_t *pval);
-
-CPUArchState *mon_get_cpu_env(Monitor *mon);
-CPUState *mon_get_cpu(Monitor *mon);
-
-void hmp_info_mem(Monitor *mon, const QDict *qdict);
-void hmp_info_tlb(Monitor *mon, const QDict *qdict);
-void hmp_mce(Monitor *mon, const QDict *qdict);
-void hmp_info_local_apic(Monitor *mon, const QDict *qdict);
-void hmp_info_sev(Monitor *mon, const QDict *qdict);
-void hmp_info_sgx(Monitor *mon, const QDict *qdict);
-void hmp_info_via(Monitor *mon, const QDict *qdict);
-void hmp_memory_dump(Monitor *mon, const QDict *qdict);
-void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict);
-void hmp_info_registers(Monitor *mon, const QDict *qdict);
-void hmp_gva2gpa(Monitor *mon, const QDict *qdict);
-void hmp_gpa2hva(Monitor *mon, const QDict *qdict);
-void hmp_gpa2hpa(Monitor *mon, const QDict *qdict);
-
-#endif /* MONITOR_HMP_TARGET_H */
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
index 83721b5ffc6..9d70a7b78ad 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -17,6 +17,37 @@
#include "qemu/readline.h"
#include "qapi/qapi-types-common.h"
+typedef struct MonitorDef {
+ const char *name;
+ int offset;
+ uint64_t (*get_value)(Monitor *mon, const struct MonitorDef *md, int val);
+ int type;
+} MonitorDef;
+
+#define MD_TULONG 0
+#define MD_U32 1
+
+const MonitorDef *target_monitor_defs(void);
+
+int target_get_monitor_def(CPUState *cs, const char *name, uint64_t *pval);
+
+CPUArchState *mon_get_cpu_env(Monitor *mon);
+CPUState *mon_get_cpu(Monitor *mon);
+
+void hmp_info_mem(Monitor *mon, const QDict *qdict);
+void hmp_info_tlb(Monitor *mon, const QDict *qdict);
+void hmp_mce(Monitor *mon, const QDict *qdict);
+void hmp_info_local_apic(Monitor *mon, const QDict *qdict);
+void hmp_info_sev(Monitor *mon, const QDict *qdict);
+void hmp_info_sgx(Monitor *mon, const QDict *qdict);
+void hmp_info_via(Monitor *mon, const QDict *qdict);
+void hmp_memory_dump(Monitor *mon, const QDict *qdict);
+void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict);
+void hmp_info_registers(Monitor *mon, const QDict *qdict);
+void hmp_gva2gpa(Monitor *mon, const QDict *qdict);
+void hmp_gpa2hva(Monitor *mon, const QDict *qdict);
+void hmp_gpa2hpa(Monitor *mon, const QDict *qdict);
+
bool hmp_handle_error(Monitor *mon, Error *err);
void hmp_help_cmd(Monitor *mon, const char *name);
strList *hmp_split_at_comma(const char *str);
diff --git a/hw/i386/sgx-stub.c b/hw/i386/sgx-stub.c
index d295e54d239..6e82773a86d 100644
--- a/hw/i386/sgx-stub.c
+++ b/hw/i386/sgx-stub.c
@@ -1,6 +1,6 @@
#include "qemu/osdep.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
+#include "monitor/hmp.h"
#include "hw/i386/pc.h"
#include "hw/i386/sgx-epc.h"
#include "qapi/qapi-commands-misc-i386.h"
diff --git a/hw/i386/sgx.c b/hw/i386/sgx.c
index e2801546ad6..54d2cae36d8 100644
--- a/hw/i386/sgx.c
+++ b/hw/i386/sgx.c
@@ -16,7 +16,6 @@
#include "hw/mem/memory-device.h"
#include "monitor/qdev.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
#include "qapi/error.h"
#include "qemu/error-report.h"
#include "qapi/qapi-commands-misc-i386.h"
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 5a673cddb2a..7c2b69dfa5b 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -21,7 +21,6 @@
#include "gdbstub/enums.h"
#include "monitor/hmp.h"
#include "qemu/help_option.h"
-#include "monitor/hmp-target.h"
#include "monitor/monitor-internal.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-control.h"
diff --git a/monitor/hmp-target.c b/monitor/hmp-target.c
index a3306b69c93..2574c5d8b4b 100644
--- a/monitor/hmp-target.c
+++ b/monitor/hmp-target.c
@@ -27,7 +27,6 @@
#include "monitor/qdev.h"
#include "net/slirp.h"
#include "system/device_tree.h"
-#include "monitor/hmp-target.h"
#include "monitor/hmp.h"
#include "block/block-hmp-cmds.h"
#include "qapi/qapi-commands-control.h"
diff --git a/monitor/hmp.c b/monitor/hmp.c
index 36e58c54670..2d9f870df26 100644
--- a/monitor/hmp.c
+++ b/monitor/hmp.c
@@ -27,7 +27,6 @@
#include "hw/core/qdev.h"
#include "monitor-internal.h"
#include "monitor/hmp.h"
-#include "monitor/hmp-target.h"
#include "qobject/qdict.h"
#include "qobject/qnum.h"
#include "qemu/bswap.h"
diff --git a/stubs/target-monitor-defs.c b/stubs/target-monitor-defs.c
index 35a0a342772..0dd4cdb34f6 100644
--- a/stubs/target-monitor-defs.c
+++ b/stubs/target-monitor-defs.c
@@ -1,5 +1,5 @@
#include "qemu/osdep.h"
-#include "monitor/hmp-target.h"
+#include "monitor/hmp.h"
const MonitorDef *target_monitor_defs(void)
{
diff --git a/target/i386/cpu-apic.c b/target/i386/cpu-apic.c
index eeee62b52a2..3b73a04597f 100644
--- a/target/i386/cpu-apic.c
+++ b/target/i386/cpu-apic.c
@@ -10,7 +10,7 @@
#include "qobject/qdict.h"
#include "qapi/error.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
+#include "monitor/hmp.h"
#include "system/hw_accel.h"
#include "system/kvm.h"
#include "system/xen.h"
diff --git a/target/i386/monitor.c b/target/i386/monitor.c
index 427f1990399..1d04978c43b 100644
--- a/target/i386/monitor.c
+++ b/target/i386/monitor.c
@@ -25,7 +25,6 @@
#include "qemu/osdep.h"
#include "cpu.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
#include "monitor/hmp.h"
#include "qobject/qdict.h"
#include "qapi/error.h"
diff --git a/target/i386/sev-system-stub.c b/target/i386/sev-system-stub.c
index 7c5c02a5657..f799a338d60 100644
--- a/target/i386/sev-system-stub.c
+++ b/target/i386/sev-system-stub.c
@@ -13,7 +13,7 @@
#include "qemu/osdep.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
+#include "monitor/hmp.h"
#include "qapi/error.h"
#include "sev.h"
diff --git a/target/i386/sev.c b/target/i386/sev.c
index 1d70f96ec1f..31dbabe4b51 100644
--- a/target/i386/sev.c
+++ b/target/i386/sev.c
@@ -36,7 +36,6 @@
#include "migration/blocker.h"
#include "qom/object.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
#include "qapi/qapi-commands-misc-i386.h"
#include "confidential-guest.h"
#include "hw/i386/pc.h"
diff --git a/target/m68k/monitor.c b/target/m68k/monitor.c
index fe289f6d5de..c148926d827 100644
--- a/target/m68k/monitor.c
+++ b/target/m68k/monitor.c
@@ -7,7 +7,7 @@
#include "qemu/osdep.h"
#include "cpu.h"
-#include "monitor/hmp-target.h"
+#include "monitor/hmp.h"
#include "monitor/monitor.h"
void hmp_info_tlb(Monitor *mon, const QDict *qdict)
diff --git a/target/ppc/ppc-qmp-cmds.c b/target/ppc/ppc-qmp-cmds.c
index 07938abb15f..08314e3c1cd 100644
--- a/target/ppc/ppc-qmp-cmds.c
+++ b/target/ppc/ppc-qmp-cmds.c
@@ -26,7 +26,6 @@
#include "cpu.h"
#include "monitor/monitor.h"
#include "qemu/ctype.h"
-#include "monitor/hmp-target.h"
#include "monitor/hmp.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-machine.h"
diff --git a/target/riscv/monitor.c b/target/riscv/monitor.c
index 8a77476db93..bc176dd8771 100644
--- a/target/riscv/monitor.c
+++ b/target/riscv/monitor.c
@@ -22,7 +22,7 @@
#include "cpu.h"
#include "cpu_bits.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
+#include "monitor/hmp.h"
#include "system/memory.h"
#ifdef TARGET_RISCV64
diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c
index d5e9bec0f86..79232d34005 100644
--- a/target/riscv/riscv-qmp-cmds.c
+++ b/target/riscv/riscv-qmp-cmds.c
@@ -34,7 +34,6 @@
#include "qemu/ctype.h"
#include "qemu/qemu-print.h"
#include "monitor/hmp.h"
-#include "monitor/hmp-target.h"
#include "system/kvm.h"
#include "system/tcg.h"
#include "cpu-qom.h"
diff --git a/target/sh4/monitor.c b/target/sh4/monitor.c
index 2da6a5426eb..50324d3600c 100644
--- a/target/sh4/monitor.c
+++ b/target/sh4/monitor.c
@@ -24,7 +24,6 @@
#include "qemu/osdep.h"
#include "cpu.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
#include "monitor/hmp.h"
static void print_tlb(Monitor *mon, int idx, tlb_t *tlb)
diff --git a/target/sparc/monitor.c b/target/sparc/monitor.c
index 378967f8164..83257a18717 100644
--- a/target/sparc/monitor.c
+++ b/target/sparc/monitor.c
@@ -24,7 +24,6 @@
#include "qemu/osdep.h"
#include "cpu.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
#include "monitor/hmp.h"
diff --git a/target/xtensa/monitor.c b/target/xtensa/monitor.c
index fbf60d55530..2af84934f83 100644
--- a/target/xtensa/monitor.c
+++ b/target/xtensa/monitor.c
@@ -24,7 +24,6 @@
#include "qemu/osdep.h"
#include "cpu.h"
#include "monitor/monitor.h"
-#include "monitor/hmp-target.h"
#include "monitor/hmp.h"
void hmp_info_tlb(Monitor *mon, const QDict *qdict)
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 8/8] monitor: Remove 'monitor/hmp-target.h' header
2026-01-19 11:03 ` [PATCH v3 8/8] monitor: Remove 'monitor/hmp-target.h' header Philippe Mathieu-Daudé
@ 2026-01-19 14:46 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-19 14:46 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Pierrick Bouvier, Dr. David Alan Gilbert,
Paolo Bonzini, Richard Henderson
On 19/1/26 12:03, Philippe Mathieu-Daudé wrote:
> The "monitor/hmp-target.h" header doesn't contain any
> target-specific declarations anymore. Merge it with
> "monitor/hmp.h", its target-agnostic counterpart.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org>
> ---
> MAINTAINERS | 2 +-
> include/monitor/hmp-target.h | 60 -----------------------------------
> include/monitor/hmp.h | 31 ++++++++++++++++++
> hw/i386/sgx-stub.c | 2 +-
> hw/i386/sgx.c | 1 -
> monitor/hmp-cmds.c | 1 -
> monitor/hmp-target.c | 1 -
> monitor/hmp.c | 1 -
> stubs/target-monitor-defs.c | 2 +-
> target/i386/cpu-apic.c | 2 +-
> target/i386/monitor.c | 1 -
> target/i386/sev-system-stub.c | 2 +-
> target/i386/sev.c | 1 -
> target/m68k/monitor.c | 2 +-
> target/ppc/ppc-qmp-cmds.c | 1 -
> target/riscv/monitor.c | 2 +-
> target/riscv/riscv-qmp-cmds.c | 1 -
> target/sh4/monitor.c | 1 -
> target/sparc/monitor.c | 1 -
> target/xtensa/monitor.c | 1 -
> 20 files changed, 38 insertions(+), 78 deletions(-)
> delete mode 100644 include/monitor/hmp-target.h
> diff --git a/include/monitor/hmp-target.h b/include/monitor/hmp-target.h
> deleted file mode 100644
> index c56f8df505c..00000000000
> --- a/include/monitor/hmp-target.h
> +++ /dev/null
> @@ -1,60 +0,0 @@
> -/*
> - * QEMU monitor
> - *
> - * Copyright (c) 2003-2004 Fabrice Bellard
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a copy
> - * of this software and associated documentation files (the "Software"), to deal
> - * in the Software without restriction, including without limitation the rights
> - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> - * copies of the Software, and to permit persons to whom the Software is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be included in
> - * all copies or substantial portions of the Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> - * THE SOFTWARE.
> - */
> -
> -#ifndef MONITOR_HMP_TARGET_H
> -#define MONITOR_HMP_TARGET_H
> -
> -typedef struct MonitorDef MonitorDef;
> -
> -struct MonitorDef {
> - const char *name;
> - int offset;
> - uint64_t (*get_value)(Monitor *mon, const struct MonitorDef *md, int val);
> - int type;
> -};
> -
> -#define MD_TULONG 0
> -#define MD_U32 1
> -
> -const MonitorDef *target_monitor_defs(void);
> -int target_get_monitor_def(CPUState *cs, const char *name, uint64_t *pval);
> -
> -CPUArchState *mon_get_cpu_env(Monitor *mon);
> -CPUState *mon_get_cpu(Monitor *mon);
> -
> -void hmp_info_mem(Monitor *mon, const QDict *qdict);
> -void hmp_info_tlb(Monitor *mon, const QDict *qdict);
> -void hmp_mce(Monitor *mon, const QDict *qdict);
> -void hmp_info_local_apic(Monitor *mon, const QDict *qdict);
> -void hmp_info_sev(Monitor *mon, const QDict *qdict);
> -void hmp_info_sgx(Monitor *mon, const QDict *qdict);
> -void hmp_info_via(Monitor *mon, const QDict *qdict);
> -void hmp_memory_dump(Monitor *mon, const QDict *qdict);
> -void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict);
> -void hmp_info_registers(Monitor *mon, const QDict *qdict);
> -void hmp_gva2gpa(Monitor *mon, const QDict *qdict);
> -void hmp_gpa2hva(Monitor *mon, const QDict *qdict);
> -void hmp_gpa2hpa(Monitor *mon, const QDict *qdict);
> -
> -#endif /* MONITOR_HMP_TARGET_H */
> diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
> index 83721b5ffc6..9d70a7b78ad 100644
> --- a/include/monitor/hmp.h
> +++ b/include/monitor/hmp.h
> @@ -17,6 +17,37 @@
> #include "qemu/readline.h"
> #include "qapi/qapi-types-common.h"
>
> +typedef struct MonitorDef {
> + const char *name;
> + int offset;
> + uint64_t (*get_value)(Monitor *mon, const struct MonitorDef *md, int val);
> + int type;
> +} MonitorDef;
> +
> +#define MD_TULONG 0
> +#define MD_U32 1
> +
> +const MonitorDef *target_monitor_defs(void);
> +
> +int target_get_monitor_def(CPUState *cs, const char *name, uint64_t *pval);
> +
> +CPUArchState *mon_get_cpu_env(Monitor *mon);
> +CPUState *mon_get_cpu(Monitor *mon);
> +
> +void hmp_info_mem(Monitor *mon, const QDict *qdict);
> +void hmp_info_tlb(Monitor *mon, const QDict *qdict);
> +void hmp_mce(Monitor *mon, const QDict *qdict);
> +void hmp_info_local_apic(Monitor *mon, const QDict *qdict);
> +void hmp_info_sev(Monitor *mon, const QDict *qdict);
> +void hmp_info_sgx(Monitor *mon, const QDict *qdict);
> +void hmp_info_via(Monitor *mon, const QDict *qdict);
> +void hmp_memory_dump(Monitor *mon, const QDict *qdict);
> +void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict);
> +void hmp_info_registers(Monitor *mon, const QDict *qdict);
> +void hmp_gva2gpa(Monitor *mon, const QDict *qdict);
> +void hmp_gpa2hva(Monitor *mon, const QDict *qdict);
> +void hmp_gpa2hpa(Monitor *mon, const QDict *qdict);
Eh build failure on MinGW, I suppose yet another preliminary
header cleanup is required:
In file included from ../hw/misc/mos6522.c:33:
include/monitor/hmp.h:43:6: error: redundant redeclaration of
'hmp_info_via' [-Werror=redundant-decls]
43 | void hmp_info_via(Monitor *mon, const QDict *qdict);
| ^~~~~~~~~~~~
In file included from ../hw/misc/mos6522.c:29:
include/hw/misc/mos6522.h:175:6: note: previous declaration of
'hmp_info_via' with type 'void(Monitor *, const QDict *)'
175 | void hmp_info_via(Monitor *mon, const QDict *qdict);
| ^~~~~~~~~~~~
cc1: note: unrecognized command-line option '-Wno-pragma-pack' may have
been intended to silence earlier diagnostics
cc1: all warnings being treated as errors
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-01-19 14:46 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-19 11:03 [PATCH v3 0/8] monitor/hmp: Reduce target-specific definitions Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 1/8] target/i386: Include missing 'svm.h' header in 'sev.h' Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 2/8] monitor: Add hmp_cmds_for_target() helper Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 3/8] monitor: Reduce target-specific methods Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 4/8] monitor: Have MonitorDef::get_value() return an unsigned type Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 5/8] monitor: Have *get_monitor_def() fill an unsigned value Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 6/8] monitor: Truncate target register using ldn_he_p() API Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 7/8] monitor: Reduce target-specific methods further Philippe Mathieu-Daudé
2026-01-19 11:03 ` [PATCH v3 8/8] monitor: Remove 'monitor/hmp-target.h' header Philippe Mathieu-Daudé
2026-01-19 14:46 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox