monitor: Reduce target-specific methods further

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>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20260427080738.77138-24-philmd@linaro.org>
This commit is contained in:
Philippe Mathieu-Daudé
2026-01-16 14:59:56 +01:00
parent fb16dc9090
commit 8758e250bf
3 changed files with 36 additions and 34 deletions

View File

@@ -57,39 +57,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, int64_t *pval, const char *name)
{
const MonitorDef *md = target_monitor_defs();
CPUState *cs = mon_get_cpu(mon);
void *ptr;
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);
ptr = (uint8_t *)env + md->offset;
*pval = *(int32_t *)ptr;
}
return 0;
}
}
if (!cs->cc->sysemu_ops->monitor_get_register) {
return -1;
}
return cs->cc->sysemu_ops->monitor_get_register(cs, name, pval);
}
static int
compare_mon_cmd(const void *a, const void *b)
{

View File

@@ -25,6 +25,7 @@
#include "qemu/osdep.h"
#include <dirent.h>
#include "hw/core/qdev.h"
#include "hw/core/sysemu-cpu-ops.h"
#include "monitor-internal.h"
#include "monitor/hmp.h"
#include "monitor/hmp-target.h"
@@ -359,6 +360,8 @@ static bool gdb_get_register(Monitor *mon, int64_t *pval, const char *name)
static const char *pch;
static sigjmp_buf expr_env;
static int get_monitor_def(Monitor *mon, int64_t *pval, const char *name);
static G_NORETURN G_GNUC_PRINTF(2, 3)
void expr_error(Monitor *mon, const char *fmt, ...)
{
@@ -1599,3 +1602,36 @@ 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, int64_t *pval, const char *name)
{
const MonitorDef *md = target_monitor_defs();
CPUState *cs = mon_get_cpu(mon);
void *ptr;
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);
ptr = (uint8_t *)env + md->offset;
*pval = *(int32_t *)ptr;
}
return 0;
}
}
if (!cs->cc->sysemu_ops->monitor_get_register) {
return -1;
}
return cs->cc->sysemu_ops->monitor_get_register(cs, name, pval);
}

View File

@@ -191,7 +191,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, 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);