Message ID | 20220815190303.2061559-7-peter.maydell@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Allow semihosting from user mode | expand |
On Mon, Aug 15, 2022 at 12:03 PM Peter Maydell <peter.maydell@linaro.org> wrote: > > Honour the commandline -semihosting-config userspace=on option, > instead of always permitting userspace semihosting calls in system > emulation mode, by passing the correct value to the is_userspace > argument of semihosting_enabled(). > > Note that this is a behaviour change: if the user wants to > do semihosting calls from userspace they must now specifically > enable them on the command line. > > xtensa semihosting is not implemented for linux-user builds. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > target/xtensa/translate.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) Acked-by: Max Filippov <jcmvbkbc@gmail.com>
On 15/8/22 21:03, Peter Maydell wrote: > Honour the commandline -semihosting-config userspace=on option, > instead of always permitting userspace semihosting calls in system > emulation mode, by passing the correct value to the is_userspace > argument of semihosting_enabled(). > > Note that this is a behaviour change: if the user wants to > do semihosting calls from userspace they must now specifically > enable them on the command line. > > xtensa semihosting is not implemented for linux-user builds. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > target/xtensa/translate.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index dc475a4274b..43d55989349 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -2360,13 +2360,14 @@ static uint32_t test_exceptions_simcall(DisasContext *dc, const OpcodeArg arg[], const uint32_t par[]) { + bool is_semi = semihosting_enabled(dc->cring != 0); #ifdef CONFIG_USER_ONLY bool ill = true; #else /* Between RE.2 and RE.3 simcall opcode's become nop for the hardware. */ - bool ill = dc->config->hw_version <= 250002 && !semihosting_enabled(false); + bool ill = dc->config->hw_version <= 250002 && !is_semi; #endif - if (ill || !semihosting_enabled(false)) { + if (ill || !is_semi) { qemu_log_mask(LOG_GUEST_ERROR, "SIMCALL but semihosting is disabled\n"); } return ill ? XTENSA_OP_ILL : 0; @@ -2376,7 +2377,7 @@ static void translate_simcall(DisasContext *dc, const OpcodeArg arg[], const uint32_t par[]) { #ifndef CONFIG_USER_ONLY - if (semihosting_enabled(false)) { + if (semihosting_enabled(dc->cring != 0)) { gen_helper_simcall(cpu_env); } #endif
Honour the commandline -semihosting-config userspace=on option, instead of always permitting userspace semihosting calls in system emulation mode, by passing the correct value to the is_userspace argument of semihosting_enabled(). Note that this is a behaviour change: if the user wants to do semihosting calls from userspace they must now specifically enable them on the command line. xtensa semihosting is not implemented for linux-user builds. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- target/xtensa/translate.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)