qemu/target/arm
Peter Maydell 5202861b20 semihosting: Allow optional use of semihosting from userspace
Currently our semihosting implementations generally prohibit use of
semihosting calls in system emulation from the guest userspace.  This
is a very long standing behaviour justified originally "to provide
some semblance of security" (since code with access to the
semihosting ABI can do things like read and write arbitrary files on
the host system).  However, it is sometimes useful to be able to run
trusted guest code which performs semihosting calls from guest
userspace, notably for test code.  Add a command line suboption to
the existing semihosting-config option group so that you can
explicitly opt in to semihosting from guest userspace with
 -semihosting-config userspace=on

(There is no equivalent option for the user-mode emulator, because
there by definition all code runs in userspace and has access to
semihosting already.)

This commit adds the infrastructure for the command line option and
adds a bool 'is_user' parameter to the function
semihosting_userspace_enabled() that target code can use to check
whether it should be permitting the semihosting call for userspace.
It mechanically makes all the callsites pass 'false', so they
continue checking "is semihosting enabled in general".  Subsequent
commits will make each target that implements semihosting honour the
userspace=on option by passing the correct value and removing
whatever "don't do this for userspace" checking they were doing by
hand.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Acked-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220822141230.3658237-2-peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2022-09-13 17:18:21 +01:00
..
hvf Fix 'writeable' typos 2022-06-08 19:38:47 +01:00
a32-uncond.decode
a32.decode target/arm: Implement ESB instruction 2022-05-09 11:47:54 +01:00
arch_dump.c target/arm: Rename sve_zcr_len_for_el to sve_vqm1_for_el 2022-06-08 19:38:57 +01:00
arm_ldst.h
arm-powerctl.c
arm-powerctl.h
common-semi-target.h semihosting: Split out common-semi-target.h 2022-06-28 04:35:07 +05:30
cpregs.h target/arm: Move define_debug_regs() to debug_helper.c 2022-07-07 11:37:33 +01:00
cpu64.c target/arm: Enable SME for -cpu max 2022-07-11 13:43:51 +01:00
cpu_tcg.c target/arm: Implement AArch32 DBGDEVID, DBGDEVID1, DBGDEVID2 2022-07-07 11:37:33 +01:00
cpu-param.h Normalize header guard symbol definition 2022-05-11 16:50:26 +02:00
cpu-qom.h
cpu.c target/arm: Don't report Statistical Profiling Extension in ID registers 2022-08-12 11:17:35 +01:00
cpu.h target/arm: Add MO_128 entry to pred_esz_masks[] 2022-07-26 13:38:23 +01:00
crypto_helper.c crypto: move sm4_sbox from target/arm 2022-04-29 10:47:45 +10:00
debug_helper.c target/arm: Store TCR_EL* registers as uint64_t 2022-07-18 13:20:13 +01:00
gdbstub64.c target/arm: Rename sve_zcr_len_for_el to sve_vqm1_for_el 2022-06-08 19:38:57 +01:00
gdbstub.c Fix 'writeable' typos 2022-06-08 19:38:47 +01:00
helper-a64.c target/arm: Change CPUArchState.aarch64 to bool 2022-04-22 14:44:54 +01:00
helper-a64.h
helper-mve.h
helper-sme.h target/arm: Implement SME integer outer product 2022-07-11 13:43:51 +01:00
helper-sve.h target/arm: Implement REVD 2022-07-11 13:43:51 +01:00
helper.c target/arm: display deprecation status in '-cpu help' 2022-08-05 16:18:15 +01:00
helper.h target/arm: Implement SCLAMP, UCLAMP 2022-07-11 13:43:51 +01:00
hvf_arm.h
idau.h
internals.h target/arm: Honour VTCR_EL2 bits in Secure EL2 2022-07-18 13:20:14 +01:00
iwmmxt_helper.c
Kconfig
kvm64.c target/arm: Move sve probe inside kvm >= 4.15 branch 2022-08-01 16:21:18 +01:00
kvm_arm.h target/arm: Use uint32_t instead of bitmap for sve vq's 2022-06-08 19:38:57 +01:00
kvm-consts.h
kvm-stub.c target/arm: Avoid bare abort() or assert(0) 2022-05-05 09:35:51 +01:00
kvm.c kvm: don't use perror() without useful errno 2022-07-29 00:15:02 +02:00
m_helper.c semihosting: Return void from do_common_semihosting 2022-06-28 04:35:07 +05:30
m-nocp.decode
machine.c target/arm: Add the SME ZA storage to CPUARMState 2022-06-27 11:18:17 +01:00
meson.build target/arm: Trap non-streaming usage when Streaming SVE is active 2022-07-11 13:19:35 +01:00
monitor.c
mte_helper.c
mve_helper.c target/arm: Use expand_pred_b in mve_helper.c 2022-06-08 19:38:58 +01:00
mve.decode
neon_helper.c
neon-dp.decode
neon-ls.decode
neon-shared.decode
op_addsub.h
op_helper.c target/arm: Introduce helper_exception_with_syndrome 2022-06-10 14:32:34 +01:00
pauth_helper.c compiler.h: replace QEMU_NORETURN with G_NORETURN 2022-04-21 17:03:51 +04:00
psci.c
ptw.c target/arm: Store TCR_EL* registers as uint64_t 2022-07-18 13:20:13 +01:00
sme_helper.c target/arm: Implement SME integer outer product 2022-07-11 13:43:51 +01:00
sme-fa64.decode target/arm: Mark LD1RO as non-streaming 2022-07-11 13:19:35 +01:00
sme.decode target/arm: Implement SME integer outer product 2022-07-11 13:43:51 +01:00
sve_helper.c target/arm: Implement REVD 2022-07-11 13:43:51 +01:00
sve_ldst_internal.h target/arm: Export sve contiguous ldst support functions 2022-06-08 19:38:58 +01:00
sve.decode target/arm: Implement SCLAMP, UCLAMP 2022-07-11 13:43:51 +01:00
syndrome.h target/arm: Add syn_smetrap 2022-06-27 11:18:17 +01:00
t16.decode
t32.decode target/arm: Implement ESB instruction 2022-05-09 11:47:54 +01:00
tlb_helper.c target/arm: Fold regime_tcr() and regime_tcr_value() together 2022-07-18 13:20:13 +01:00
trace-events
trace.h
translate-a32.h Clean up header guards that don't match their file name 2022-05-11 16:49:06 +02:00
translate-a64.c semihosting: Allow optional use of semihosting from userspace 2022-09-13 17:18:21 +01:00
translate-a64.h target/arm: Export unpredicated ld/st from translate-sve.c 2022-07-11 13:19:35 +01:00
translate-m-nocp.c target/arm: Introduce gen_exception_insn 2022-06-10 14:32:32 +01:00
translate-mve.c target/arm: Introduce gen_exception_insn 2022-06-10 14:32:32 +01:00
translate-neon.c target/arm: Avoid bare abort() or assert(0) 2022-05-05 09:35:51 +01:00
translate-sme.c target/arm: Implement SME integer outer product 2022-07-11 13:43:51 +01:00
translate-sve.c target/arm: Add MO_128 entry to pred_esz_masks[] 2022-07-26 13:38:23 +01:00
translate-vfp.c target/arm: Trap non-streaming usage when Streaming SVE is active 2022-07-11 13:19:35 +01:00
translate.c semihosting: Allow optional use of semihosting from userspace 2022-09-13 17:18:21 +01:00
translate.h target/arm: Implement SME MOVA 2022-07-11 13:19:35 +01:00
vec_helper.c target/arm: Implement SCLAMP, UCLAMP 2022-07-11 13:43:51 +01:00
vec_internal.h target/arm: Export bfdotadd from vec_helper.c 2022-06-08 19:38:58 +01:00
vfp_helper.c
vfp-uncond.decode
vfp.decode