id = 2155 title = "LoadVM assert on ARM_FEATURE_M for Cortex M3" state = "closed" created_at = "2024-02-07T18:22:10.940Z" closed_at = "2024-02-16T10:58:42.355Z" labels = ["kind::Bug", "target: arm", "workflow::Patch available"] url = "https://gitlab.com/qemu-project/qemu/-/issues/2155" host-os = "Ubuntu 20.04" host-arch = "x86_64" qemu-version = "v8.0.0 through v8.2.0" guest-os = "-" guest-arch = "ARM Cortex M3" description = """This appears to be a similar issue to https://gitlab.com/qemu-project/qemu/-/issues/1775 and https://gitlab.com/qemu-project/qemu/-/issues/1658 When running `loadvm` qemu aborts with this error: "qemu/target/arm/helper.c:12383: arm_security_space_below_el3: Assertion `!arm_feature(env, ARM_FEATURE_M)' failed." I've traced the error to `pmu_counter_enabled` in `qemu\\target\\arm\\helper.c:1172` [uint64_t mdcr_el2 = arm_mdcr_el2_eff(env)](https://gitlab.com/qemu-project/qemu/-/blob/v8.2.0/target/arm/helper.c?ref_type=tags#L1172) (link is to 8.2.0 release tag) The issue is caused by attempting to get the MDCR_EL2 register prior to checking if the CPU has ARM_FEATURE_PMU support. A simple fix seems to be to check for `ARM_PMU_ENABLED` and returning early if it is not enabled.""" reproduce = """1. Start emulation and connect monitor 2. savevm 3. Loadvm """ additional = """See screenshot for stack trace ![armCortexM3LoadVMStackTrace](/uploads/fcfd927f4d373922715c8787dbb9cc26/armCortexM3LoadVMStackTrace.png)"""