From 149e86f56704294adad3cbce43afddb442b1f12a Mon Sep 17 00:00:00 2001 From: Tim Newsome Date: Fri, 16 Aug 2024 11:14:18 -0700 Subject: [PATCH] Check tcontrol.mte in trigger_t::allow_action() Otherwise native triggers in M-Mode would not be taken, even if tcontrol.mte is set. --- riscv/triggers.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/riscv/triggers.cc b/riscv/triggers.cc index de3da403d..bb86064f7 100644 --- a/riscv/triggers.cc +++ b/riscv/triggers.cc @@ -118,7 +118,8 @@ bool trigger_t::allow_action(const state_t * const state) const const bool vsstatus_sie = state->vsstatus->read() & MSTATUS_SIE; const bool medeleg_breakpoint = (state->medeleg->read() >> CAUSE_BREAKPOINT) & 1; const bool hedeleg_breakpoint = (state->hedeleg->read() >> CAUSE_BREAKPOINT) & 1; - return (state->prv != PRV_M || mstatus_mie) && + const bool mte = state->tcontrol->read() & CSR_TCONTROL_MTE; + return (state->prv != PRV_M || mstatus_mie || mte) && (state->prv != PRV_S || state->v || !medeleg_breakpoint || sstatus_sie) && (state->prv != PRV_S || !state->v || !medeleg_breakpoint || !hedeleg_breakpoint || vsstatus_sie); }