mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:17 +00:00
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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user