From 8a6d746aef0c8a4d1514059e5b4c0e235d8e0545 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Fri, 2 Mar 2018 13:54:34 -0500 Subject: [PATCH] armv7m: Report no-coprocessor faults correctly For v7M attempts to access a nonexistent coprocessor are reported differently from plain undefined instructions (as UsageFaults of type NOCP rather than type UNDEFINSTR). Split them out into a new EXCP_NOCP so we can report the FSR value correctly. Backports commit 7517748e3f71a3099e57915fba95c4c308e6d842 from qemu --- qemu/target/arm/translate.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/qemu/target/arm/translate.c b/qemu/target/arm/translate.c index 2655bfee..26f39342 100644 --- a/qemu/target/arm/translate.c +++ b/qemu/target/arm/translate.c @@ -10473,6 +10473,14 @@ static int disas_thumb2_insn(CPUARMState *env, DisasContext *s, uint16_t insn_hw break; case 6: case 7: case 14: case 15: /* Coprocessor. */ + if (arm_dc_feature(s, ARM_FEATURE_M)) { + /* We don't currently implement M profile FP support, + * so this entire space should give a NOCP fault. + */ + gen_exception_insn(s, 4, EXCP_NOCP, syn_uncategorized(), + default_exception_el(s)); + break; + } if (((insn >> 24) & 3) == 3) { /* Translate into the equivalent ARM encoding. */ insn = (insn & 0xe2ffffff) | ((insn & (1 << 28)) >> 4) | (1 << 28);