Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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
  • Loading branch information
pm215 committed May 2, 2023
1 parent 3d0370b commit bab1611
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 6 deletions.
9 changes: 9 additions & 0 deletions docs/about/deprecated.rst
Expand Up @@ -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
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
------------------

Expand Down
25 changes: 21 additions & 4 deletions hmp-commands.hx
Expand Up @@ -378,18 +378,35 @@ SRST
only *tag* as parameter.
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",
.args_type = "option:s?",
.params = "[on|off]",
.help = "run emulation in singlestep mode or switch to normal mode",
.cmd = hmp_singlestep,
.help = "deprecated synonym for one-insn-per-tb",
.cmd = hmp_one_insn_per_tb,
},

SRST
``singlestep [off]``
Run the emulation in single step mode.
If called with option off, the emulation returns to normal mode.
This is a deprecated synonym for the one-insn-per-tb command.
ERST

{
Expand Down
2 changes: 1 addition & 1 deletion include/monitor/hmp.h
Expand Up @@ -158,7 +158,7 @@ void hmp_info_vcpu_dirty_limit(Monitor *mon, const QDict *qdict);
void hmp_human_readable_text_helper(Monitor *mon,
HumanReadableText *(*qmp_handler)(Error **));
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_pcie_aer_inject_error(Monitor *mon, const QDict *qdict);
void hmp_info_capture(Monitor *mon, const QDict *qdict);
Expand Down
2 changes: 1 addition & 1 deletion softmmu/runstate-hmp-cmds.c
Expand Up @@ -40,7 +40,7 @@ void hmp_info_status(Monitor *mon, const QDict *qdict)
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");
AccelState *accel = current_accel();
Expand Down
1 change: 1 addition & 0 deletions tests/qtest/test-hmp.c
Expand Up @@ -56,6 +56,7 @@ static const char *hmp_cmds[] = {
"o /w 0 0x1234",
"object_add memory-backend-ram,id=mem1,size=256M",
"object_del mem1",
"one-insn-per-tb on",
"pmemsave 0 4096 \"/dev/null\"",
"p $pc + 8",
"qom-list /",
Expand Down

0 comments on commit bab1611

Please sign in to comment.