hmp: Add 'one-insn-per-tb' command equivalent to 'singlestep'
The 'singlestep' HMP command is confusing, because it doesn't actually have anything to do with single-stepping the CPU. What it does do is force TCG emulation to put one guest instruction in each TB, which can be useful in some situations. Create a new HMP command 'one-insn-per-tb', so we can document that 'singlestep' is just a deprecated synonym for it, and eventually perhaps drop it. We aren't obliged to do deprecate-and-drop for HMP commands, but it's easy enough to do so, so we do. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-id: 20230417164041.684562-9-peter.maydell@linaro.org
This commit is contained in:
parent
e726acd5b8
commit
e9ccfdd91d
@ -199,6 +199,15 @@ accepted incorrect commands will return an error. Users should make sure that
|
|||||||
all arguments passed to ``device_add`` are consistent with the documented
|
all arguments passed to ``device_add`` are consistent with the documented
|
||||||
property types.
|
property types.
|
||||||
|
|
||||||
|
Human Monitor Protocol (HMP) commands
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
``singlestep`` (since 8.1)
|
||||||
|
''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
The ``singlestep`` command has been replaced by the ``one-insn-per-tb``
|
||||||
|
command, which has the same behaviour but a less misleading name.
|
||||||
|
|
||||||
Host Architectures
|
Host Architectures
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@ -378,18 +378,35 @@ SRST
|
|||||||
only *tag* as parameter.
|
only *tag* as parameter.
|
||||||
ERST
|
ERST
|
||||||
|
|
||||||
|
{
|
||||||
|
.name = "one-insn-per-tb",
|
||||||
|
.args_type = "option:s?",
|
||||||
|
.params = "[on|off]",
|
||||||
|
.help = "run emulation with one guest instruction per translation block",
|
||||||
|
.cmd = hmp_one_insn_per_tb,
|
||||||
|
},
|
||||||
|
|
||||||
|
SRST
|
||||||
|
``one-insn-per-tb [off]``
|
||||||
|
Run the emulation with one guest instruction per translation block.
|
||||||
|
This slows down emulation a lot, but can be useful in some situations,
|
||||||
|
such as when trying to analyse the logs produced by the ``-d`` option.
|
||||||
|
This only has an effect when using TCG, not with KVM or other accelerators.
|
||||||
|
|
||||||
|
If called with option off, the emulation returns to normal mode.
|
||||||
|
ERST
|
||||||
|
|
||||||
{
|
{
|
||||||
.name = "singlestep",
|
.name = "singlestep",
|
||||||
.args_type = "option:s?",
|
.args_type = "option:s?",
|
||||||
.params = "[on|off]",
|
.params = "[on|off]",
|
||||||
.help = "run emulation in singlestep mode or switch to normal mode",
|
.help = "deprecated synonym for one-insn-per-tb",
|
||||||
.cmd = hmp_singlestep,
|
.cmd = hmp_one_insn_per_tb,
|
||||||
},
|
},
|
||||||
|
|
||||||
SRST
|
SRST
|
||||||
``singlestep [off]``
|
``singlestep [off]``
|
||||||
Run the emulation in single step mode.
|
This is a deprecated synonym for the one-insn-per-tb command.
|
||||||
If called with option off, the emulation returns to normal mode.
|
|
||||||
ERST
|
ERST
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -158,7 +158,7 @@ void hmp_info_vcpu_dirty_limit(Monitor *mon, const QDict *qdict);
|
|||||||
void hmp_human_readable_text_helper(Monitor *mon,
|
void hmp_human_readable_text_helper(Monitor *mon,
|
||||||
HumanReadableText *(*qmp_handler)(Error **));
|
HumanReadableText *(*qmp_handler)(Error **));
|
||||||
void hmp_info_stats(Monitor *mon, const QDict *qdict);
|
void hmp_info_stats(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_singlestep(Monitor *mon, const QDict *qdict);
|
void hmp_one_insn_per_tb(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_watchdog_action(Monitor *mon, const QDict *qdict);
|
void hmp_watchdog_action(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_pcie_aer_inject_error(Monitor *mon, const QDict *qdict);
|
void hmp_pcie_aer_inject_error(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_capture(Monitor *mon, const QDict *qdict);
|
void hmp_info_capture(Monitor *mon, const QDict *qdict);
|
||||||
|
@ -40,7 +40,7 @@ void hmp_info_status(Monitor *mon, const QDict *qdict)
|
|||||||
qapi_free_StatusInfo(info);
|
qapi_free_StatusInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_singlestep(Monitor *mon, const QDict *qdict)
|
void hmp_one_insn_per_tb(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
const char *option = qdict_get_try_str(qdict, "option");
|
const char *option = qdict_get_try_str(qdict, "option");
|
||||||
AccelState *accel = current_accel();
|
AccelState *accel = current_accel();
|
||||||
|
@ -56,6 +56,7 @@ static const char *hmp_cmds[] = {
|
|||||||
"o /w 0 0x1234",
|
"o /w 0 0x1234",
|
||||||
"object_add memory-backend-ram,id=mem1,size=256M",
|
"object_add memory-backend-ram,id=mem1,size=256M",
|
||||||
"object_del mem1",
|
"object_del mem1",
|
||||||
|
"one-insn-per-tb on",
|
||||||
"pmemsave 0 4096 \"/dev/null\"",
|
"pmemsave 0 4096 \"/dev/null\"",
|
||||||
"p $pc + 8",
|
"p $pc + 8",
|
||||||
"qom-list /",
|
"qom-list /",
|
||||||
|
Loading…
Reference in New Issue
Block a user