aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--machine/minit.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/machine/minit.c b/machine/minit.c
index 55f50cb..cee11da 100644
--- a/machine/minit.c
+++ b/machine/minit.c
@@ -73,19 +73,21 @@ static void delegate_traps()
return;
uintptr_t interrupts = MIP_SSIP | MIP_STIP | MIP_SEIP;
- uintptr_t exceptions =
+ uintptr_t mandatorily_delegable_exceptions =
(1U << CAUSE_MISALIGNED_FETCH) |
(1U << CAUSE_FETCH_PAGE_FAULT) |
(1U << CAUSE_BREAKPOINT) |
(1U << CAUSE_LOAD_PAGE_FAULT) |
(1U << CAUSE_STORE_PAGE_FAULT) |
- (1U << CAUSE_USER_ECALL) |
+ (1U << CAUSE_USER_ECALL);
+ uintptr_t exceptions =
+ mandatorily_delegable_exceptions |
(1U << CAUSE_SOFTWARE_CHECK_FAULT);
write_csr(mideleg, interrupts);
write_csr(medeleg, exceptions);
assert((read_csr(mideleg) & interrupts) == interrupts);
- assert(read_csr(medeleg) == exceptions);
+ assert((~read_csr(medeleg) & mandatorily_delegable_exceptions) == 0);
}
static void fp_init()