The '-singlestep' option 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 command line argument -one-insn-per-tb, so we can
document that -singlestep is just a deprecated synonym for it,
and eventually perhaps drop it.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Warner Losh <imp@bsdimp.com>
---
docs/user/main.rst | 7 ++++++-
linux-user/main.c | 9 ++++++---
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/docs/user/main.rst b/docs/user/main.rst
index 6f2ffa080f7..f9ac701f4b1 100644
--- a/docs/user/main.rst
+++ b/docs/user/main.rst
@@ -93,8 +93,13 @@ Debug options:
``-g port``
Wait gdb connection to port
+``-one-insn-per-tb``
+ 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.
+
``-singlestep``
- Run the emulation in single step mode.
+ This is a deprecated synonym for the ``-one-insn-per-tb`` option.
Environment variables:
diff --git a/linux-user/main.c b/linux-user/main.c
index c7020b413bc..5defe5a6db8 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -409,7 +409,7 @@ static void handle_arg_reserved_va(const char *arg)
reserved_va = val ? val - 1 : 0;
}
-static void handle_arg_singlestep(const char *arg)
+static void handle_arg_one_insn_per_tb(const char *arg)
{
opt_one_insn_per_tb = true;
}
@@ -500,8 +500,11 @@ static const struct qemu_argument arg_table[] = {
"logfile", "write logs to 'logfile' (default stderr)"},
{"p", "QEMU_PAGESIZE", true, handle_arg_pagesize,
"pagesize", "set the host page size to 'pagesize'"},
- {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_singlestep,
- "", "run in singlestep mode"},
+ {"one-insn-per-tb",
+ "QEMU_ONE_INSN_PER_TB", false, handle_arg_one_insn_per_tb,
+ "", "run with one guest instruction per emulated TB"},
+ {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_one_insn_per_tb,
+ "", "deprecated synonym for -one-insn-per-tb"},
{"strace", "QEMU_STRACE", false, handle_arg_strace,
"", "log system calls"},
{"seed", "QEMU_RAND_SEED", true, handle_arg_seed,
--
2.34.1
On 17/4/23 18:40, Peter Maydell wrote:
> The '-singlestep' option 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 command line argument -one-insn-per-tb, so we can
> document that -singlestep is just a deprecated synonym for it,
> and eventually perhaps drop it.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Reviewed-by: Warner Losh <imp@bsdimp.com>
> ---
> docs/user/main.rst | 7 ++++++-
> linux-user/main.c | 9 ++++++---
> 2 files changed, 12 insertions(+), 4 deletions(-)
> @@ -500,8 +500,11 @@ static const struct qemu_argument arg_table[] = {
> "logfile", "write logs to 'logfile' (default stderr)"},
> {"p", "QEMU_PAGESIZE", true, handle_arg_pagesize,
> "pagesize", "set the host page size to 'pagesize'"},
> - {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_singlestep,
> - "", "run in singlestep mode"},
> + {"one-insn-per-tb",
> + "QEMU_ONE_INSN_PER_TB", false, handle_arg_one_insn_per_tb,
> + "", "run with one guest instruction per emulated TB"},
> + {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_one_insn_per_tb,
> + "", "deprecated synonym for -one-insn-per-tb"},
Maybe worth mentioning QEMU_ONE_INSN_PER_TB too here:
"deprecated synonyms for -one-insn-per-tb and QEMU_ONE_INSN_PER_TB"
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> {"strace", "QEMU_STRACE", false, handle_arg_strace,
> "", "log system calls"},
> {"seed", "QEMU_RAND_SEED", true, handle_arg_seed,
On Thu, 20 Apr 2023 at 10:13, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> On 17/4/23 18:40, Peter Maydell wrote:
> > The '-singlestep' option 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 command line argument -one-insn-per-tb, so we can
> > document that -singlestep is just a deprecated synonym for it,
> > and eventually perhaps drop it.
> >
> > Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> > Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> > Reviewed-by: Warner Losh <imp@bsdimp.com>
> > ---
> > docs/user/main.rst | 7 ++++++-
> > linux-user/main.c | 9 ++++++---
> > 2 files changed, 12 insertions(+), 4 deletions(-)
>
>
> > @@ -500,8 +500,11 @@ static const struct qemu_argument arg_table[] = {
> > "logfile", "write logs to 'logfile' (default stderr)"},
> > {"p", "QEMU_PAGESIZE", true, handle_arg_pagesize,
> > "pagesize", "set the host page size to 'pagesize'"},
> > - {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_singlestep,
> > - "", "run in singlestep mode"},
> > + {"one-insn-per-tb",
> > + "QEMU_ONE_INSN_PER_TB", false, handle_arg_one_insn_per_tb,
> > + "", "run with one guest instruction per emulated TB"},
> > + {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_one_insn_per_tb,
> > + "", "deprecated synonym for -one-insn-per-tb"},
>
> Maybe worth mentioning QEMU_ONE_INSN_PER_TB too here:
>
> "deprecated synonyms for -one-insn-per-tb and QEMU_ONE_INSN_PER_TB"
There's not a lot of space in the -help output, and I think in
context it's clear enough without.
thanks
-- PMM
On 20/4/23 11:19, Peter Maydell wrote:
> On Thu, 20 Apr 2023 at 10:13, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>>
>> On 17/4/23 18:40, Peter Maydell wrote:
>>> The '-singlestep' option 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 command line argument -one-insn-per-tb, so we can
>>> document that -singlestep is just a deprecated synonym for it,
>>> and eventually perhaps drop it.
>>>
>>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>>> Reviewed-by: Warner Losh <imp@bsdimp.com>
>>> ---
>>> docs/user/main.rst | 7 ++++++-
>>> linux-user/main.c | 9 ++++++---
>>> 2 files changed, 12 insertions(+), 4 deletions(-)
>>
>>
>>> @@ -500,8 +500,11 @@ static const struct qemu_argument arg_table[] = {
>>> "logfile", "write logs to 'logfile' (default stderr)"},
>>> {"p", "QEMU_PAGESIZE", true, handle_arg_pagesize,
>>> "pagesize", "set the host page size to 'pagesize'"},
>>> - {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_singlestep,
>>> - "", "run in singlestep mode"},
>>> + {"one-insn-per-tb",
>>> + "QEMU_ONE_INSN_PER_TB", false, handle_arg_one_insn_per_tb,
>>> + "", "run with one guest instruction per emulated TB"},
>>> + {"singlestep", "QEMU_SINGLESTEP", false, handle_arg_one_insn_per_tb,
>>> + "", "deprecated synonym for -one-insn-per-tb"},
>>
>> Maybe worth mentioning QEMU_ONE_INSN_PER_TB too here:
>>
>> "deprecated synonyms for -one-insn-per-tb and QEMU_ONE_INSN_PER_TB"
>
> There's not a lot of space in the -help output, and I think in
> context it's clear enough without.
Fine.
© 2016 - 2025 Red Hat, Inc.