From 705b414de8ed71278a50088ac0b2027bff58bdef Mon Sep 17 00:00:00 2001 From: "demin.han" Date: Tue, 21 Apr 2026 17:41:30 +0800 Subject: [PATCH] Fix condition for setting critical_error --- riscv/processor.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv/processor.cc b/riscv/processor.cc index 80a47d93..7e50594e 100644 --- a/riscv/processor.cc +++ b/riscv/processor.cc @@ -497,8 +497,8 @@ void processor_t::take_trap(trap_t& t, reg_t epc) reg_t s = state.mstatus->read(); if ( extension_enabled(EXT_SMDBLTRP)) { - if (get_field(s, MSTATUS_MDT) || !nmie) { - // Critical error - Double trap in M-mode or trap when nmie is 0 + if (get_field(s, MSTATUS_MDT) && (!state.mnstatus || !nmie)) { + // Critical error - Double trap in M-mode when Smrnmi not implemented or nmie is 0 // RNMI is not modeled else double trap in M-mode would trap to // RNMI handler instead of leading to a critical error state.critical_error = 1;