qemu-e2k/target/arm
Peter Maydell a65dabf71a target/arm: Fix Rt/Rt2 in ESR_ELx for copro traps from AArch32 to 64
When a coprocessor instruction in an  AArch32 guest traps to AArch32
Hyp mode, the syndrome register (HSR) includes Rt and Rt2 fields
which are simply copies of the Rt and Rt2 fields from the trapped
instruction.  However, if the instruction is trapped from AArch32 to
an AArch64 higher exception level, the Rt and Rt2 fields in the
syndrome register (ESR_ELx) must be the AArch64 view of the register.
This makes a difference if the AArch32 guest was in a mode other than
User or System and it was using r13 or r14, or if it was in FIQ mode
and using r8-r14.

We don't know at translate time which AArch32 CPU mode we are in, so
we leave the values we generate in our prototype syndrome register
value at translate time as the raw Rt/Rt2 from the instruction, and
instead correct them to the AArch64 view when we find we need to take
an exception from AArch32 to AArch64 with one of these syndrome
values.

Fixes: https://bugs.launchpad.net/qemu/+bug/1879587
Reported-by: Julien Freche <julien@bedrocksystems.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20200804193903.31240-1-peter.maydell@linaro.org
2020-08-05 17:31:51 +01:00
..
a32-uncond.decode
a32.decode
arch_dump.c
arm_ldst.h
arm-powerctl.c
arm-powerctl.h
arm-semi.c
cpu64.c hw/arm/virt: Enable MTE via a machine property 2020-07-20 11:35:15 +01:00
cpu_tcg.c
cpu-param.h
cpu-qom.h
cpu.c hw/arm/virt: Enable MTE via a machine property 2020-07-20 11:35:15 +01:00
cpu.h target/arm: kvm: Handle misconfigured dabt injection 2020-07-03 16:59:42 +01:00
crypto_helper.c
debug_helper.c
gdbstub64.c
gdbstub.c
helper-a64.c target/arm: Simplify DC_ZVA 2020-06-26 14:31:12 +01:00
helper-a64.h target/arm: Add helper_mte_check_zva 2020-06-26 14:31:12 +01:00
helper-sve.h target/arm: Add mte helpers for sve scatter/gather memory ops 2020-06-26 14:31:12 +01:00
helper.c target/arm: Fix Rt/Rt2 in ESR_ELx for copro traps from AArch32 to 64 2020-08-05 17:31:51 +01:00
helper.h target/arm: Implement LDG, STG, ST2G instructions 2020-06-26 14:31:12 +01:00
idau.h
internals.h target/arm: Always pass cacheattr to get_phys_addr 2020-06-26 14:31:12 +01:00
iwmmxt_helper.c
kvm32.c target/arm: kvm: Handle misconfigured dabt injection 2020-07-03 16:59:42 +01:00
kvm64.c target/arm: kvm: Handle misconfigured dabt injection 2020-07-03 16:59:42 +01:00
kvm_arm.h target/arm: kvm: Handle misconfigured dabt injection 2020-07-03 16:59:42 +01:00
kvm-consts.h
kvm-stub.c
kvm.c target/arm: kvm: Handle misconfigured dabt injection 2020-07-03 16:59:42 +01:00
m_helper.c target/arm: Always pass cacheattr to get_phys_addr 2020-06-26 14:31:12 +01:00
machine.c
Makefile.objs target/arm: Implement the IRG instruction 2020-06-26 14:31:12 +01:00
monitor.c error: Eliminate error_propagate() with Coccinelle, part 1 2020-07-10 15:18:08 +02:00
mte_helper.c target/arm: Improve IMPDEF algorithm for IRG 2020-07-27 16:12:11 +01:00
neon_helper.c
neon-dp.decode
neon-ls.decode
neon-shared.decode
op_addsub.h
op_helper.c target/arm: Implement LDG, STG, ST2G instructions 2020-06-26 14:31:12 +01:00
pauth_helper.c target/arm: Fix AddPAC error indication 2020-08-03 17:55:03 +01:00
psci.c
sve_helper.c target/arm: Complete TBI clearing for user-only for SVE 2020-06-26 14:31:12 +01:00
sve.decode
t16.decode
t32.decode
tlb_helper.c target/arm: Cache the Tagged bit for a page in MemTxAttrs 2020-06-26 14:31:12 +01:00
trace-events
translate-a64.c target/arm: Fix decode of LDRA[AB] instructions 2020-08-04 16:40:19 +01:00
translate-a64.h target/arm: Fix temp double-free in sve ldr/str 2020-07-03 16:59:43 +01:00
translate-neon.inc.c
translate-sve.c target/arm: Fix mtedesc for do_mem_zpz 2020-07-13 14:36:07 +01:00
translate-vfp.inc.c target/arm: Rename DISAS_UPDATE to DISAS_UPDATE_EXIT 2020-06-26 14:31:12 +01:00
translate.c target/arm: Add DISAS_UPDATE_NOCHAIN 2020-06-26 14:31:12 +01:00
translate.h target/arm: Implement the LDGM, STGM, STZGM instructions 2020-06-26 14:31:12 +01:00
vec_helper.c
vec_internal.h
vfp_helper.c
vfp-uncond.decode
vfp.decode