qemu/target/arm
Peter Maydell e4e79c8e00 target/arm: Define and use new load_cpu_field_low32()
In several places in the 32-bit Arm translate.c, we try to use
load_cpu_field() to load from a CPUARMState field into a TCGv_i32
where the field is actually 64-bit. This works on little-endian
hosts, but gives the wrong half of the register on big-endian.

Add a new load_cpu_field_low32() which loads the low 32 bits
of a 64-bit field into a TCGv_i32. The new macro includes a
compile-time check against accidentally using it on a field
of the wrong size. Use it to fix the two places in the code
where we were using load_cpu_field() on a 64-bit field.

This fixes a bug where on big-endian hosts the guest would
crash after executing an ERET instruction, and a more corner
case one where some UNDEFs for attempted accesses to MSR
banked registers from Secure EL1 might go to the wrong EL.

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20230424153909.1419369-2-peter.maydell@linaro.org
(cherry picked from commit 7f3a3d3dc4)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
2023-05-18 21:09:59 +03:00
..
hvf Fix 'writeable' typos 2022-06-08 19:38:47 +01:00
a32-uncond.decode
a32.decode
arch_dump.c dump: Replace opaque DumpState pointer with a typed one 2022-10-06 19:30:43 +04: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: Implement FEAT_HAFDBS, dirty bit portion 2022-10-27 11:34:31 +01:00
cpu_tcg.c target/arm: Set TCGCPUOps.restore_state_to_opc for v7m 2022-11-29 18:15:26 -05:00
cpu-param.h target/arm: Enable TARGET_TB_PCREL 2022-10-20 11:28:29 +01:00
cpu-qom.h
cpu.c target/arm: Set TCGCPUOps.restore_state_to_opc for v7m 2022-11-29 18:15:26 -05:00
cpu.h target/arm: Handle m-profile in arm_is_secure 2023-04-12 16:57:32 +03:00
crypto_helper.c
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
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: allow writes to SCR_EL3.HXEn bit when FEAT_HCX is enabled 2023-03-29 10:20:04 +03: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: Set TCGCPUOps.restore_state_to_opc for v7m 2022-11-29 18:15:26 -05:00
iwmmxt_helper.c
Kconfig
kvm64.c target/arm: Initialize debug capabilities only once 2023-05-18 21:09:59 +03:00
kvm_arm.h target/arm: Initialize debug capabilities only once 2023-05-18 21:09:59 +03:00
kvm-consts.h
kvm-stub.c
kvm.c target/arm: Initialize debug capabilities only once 2023-05-18 21:09:59 +03:00
m_helper.c target/arm: Use tlb_set_page_full 2022-10-10 14:52:25 +01:00
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 accel/tcg: Simplify page_get/alloc_target_data 2022-10-26 11:11:28 +10:00
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 accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
pauth_helper.c
psci.c
ptw.c target/arm: Fix physical address resolution for Stage2 2023-03-29 10:20:04 +03: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: Fix sve_probe_page 2023-03-29 10:20:04 +03:00
sve_ldst_internal.h target/arm: Use probe_access_full for MTE 2022-10-20 11:27:49 +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
tlb_helper.c accel/tcg: Remove will_exit argument from cpu_restore_state 2022-11-01 08:31:41 +11:00
trace-events
trace.h
translate-a32.h target/arm: Define and use new load_cpu_field_low32() 2023-05-18 21:09:59 +03:00
translate-a64.c target/arm: Enable TARGET_TB_PCREL 2022-10-20 11:28:29 +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: Enable TARGET_TB_PCREL 2022-10-20 11:28:29 +01:00
translate-mve.c target/arm: Change gen_exception_insn* to work on displacements 2022-10-20 11:27:52 +01:00
translate-neon.c target/arm: Fix alignment for VLD4.32 2022-09-22 16:38:27 +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: Change gen_exception_insn* to work on displacements 2022-10-20 11:27:52 +01:00
translate.c target/arm: Define and use new load_cpu_field_low32() 2023-05-18 21:09:59 +03:00
translate.h target/arm: Enable TARGET_TB_PCREL 2022-10-20 11:28:29 +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