xemu/target
Peter Maydell 26ba00cf58 target/arm: Don't do two-stage lookup if stage 2 is disabled
In get_phys_addr_with_struct(), we call get_phys_addr_twostage() if
the CPU supports EL2.  However, we don't check here that stage 2 is
actually enabled.  Instead we only check that inside
get_phys_addr_twostage() to skip stage 2 translation.  This means
that even if stage 2 is disabled we still tell the stage 1 lookup to
do its page table walks via stage 2.

This works by luck for normal CPU accesses, but it breaks for debug
accesses, which are used by the disassembler and also by semihosting
file reads and writes, because the debug case takes a different code
path inside S1_ptw_translate().

This means that setups that use semihosting for file loads are broken
(a regression since 7.1, introduced in recent ptw refactoring), and
that sometimes disassembly in debug logs reports "unable to read
memory" rather than showing the guest insns.

Fix the bug by hoisting the "is stage 2 enabled?" check up to
get_phys_addr_with_struct(), so that we handle S2 disabled the same
way we do the "no EL2" case, with a simple single stage lookup.

Reported-by: Jens Wiklander <jens.wiklander@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20221121212404.1450382-1-peter.maydell@linaro.org
2022-11-22 13:18:22 +00:00
..
alpha accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
arm target/arm: Don't do two-stage lookup if stage 2 is disabled 2022-11-22 13:18:22 +00:00
avr target/avr: Convert to tcg_ops restore_state_to_opc 2022-10-26 11:11:28 +10:00
cris accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
hexagon target/hexagon: Convert to tcg_ops restore_state_to_opc 2022-10-26 11:11:28 +10:00
hppa target/hppa: Convert to tcg_ops restore_state_to_opc 2022-10-26 11:11:28 +10:00
i386 target/i386: hardcode R_EAX as destination register for LAHF/SAHF 2022-11-15 09:34:42 +10:00
loongarch target/loongarch: Fix return value of CHECK_FPE 2022-11-07 10:54:11 +08:00
m68k target/m68k: Rename qregs.def -> qregs.h.inc 2022-11-05 20:35:45 +01:00
microblaze accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
mips target/mips: Don't check COP1X for 64 bit FP mode 2022-11-08 01:04:25 +01:00
nios2 accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
openrisc accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
ppc target/ppc: Fix build warnings when building with 'disable-tcg' 2022-11-17 11:28:04 -03:00
riscv Revert incorrect cflags initialization. 2022-10-26 10:53:41 -04:00
rx Revert incorrect cflags initialization. 2022-10-26 10:53:41 -04:00
s390x s390x: Fix spelling errors 2022-11-16 10:15:26 +01:00
sh4 target/sh4: Convert to tcg_ops restore_state_to_opc 2022-10-26 11:11:28 +10:00
sparc target/sparc: Convert to tcg_ops restore_state_to_opc 2022-10-26 11:11:28 +10:00
tricore target/tricore: Rename csfr.def -> csfr.h.inc 2022-11-05 20:35:45 +01:00
xtensa accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
Kconfig hw/loongarch: Add support loongson3 virt machine type. 2022-06-06 18:09:03 +00:00
meson.build target/loongarch: Add target build suport 2022-06-06 18:09:03 +00:00