aboutsummaryrefslogtreecommitdiff
path: root/pk/handlers.c
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2024-05-20 18:38:12 -0700
committerAndrew Waterman <andrew@sifive.com>2024-05-20 18:38:12 -0700
commit54e2005dc8658bf7bbec52ac54fe4712f7b4362a (patch)
tree94d5acaf1b339f46e93386a40424307034450edf /pk/handlers.c
parentda80ada596eae650761bf9da9a0283b8b8058584 (diff)
parent5ae7523adc17d6014d6bd7db02ee26607c00470d (diff)
downloadriscv-pk-54e2005dc8658bf7bbec52ac54fe4712f7b4362a.zip
riscv-pk-54e2005dc8658bf7bbec52ac54fe4712f7b4362a.tar.gz
riscv-pk-54e2005dc8658bf7bbec52ac54fe4712f7b4362a.tar.bz2
Merge branch 'mylai-mtk-zicfilp-upstream'
Diffstat (limited to 'pk/handlers.c')
-rw-r--r--pk/handlers.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/pk/handlers.c b/pk/handlers.c
index 4b4abaf..2932d94 100644
--- a/pk/handlers.c
+++ b/pk/handlers.c
@@ -90,6 +90,21 @@ static void handle_interrupt(trapframe_t* tf)
clear_csr(sip, SIP_SSIP);
}
+static void handle_software_check_fault(trapframe_t* tf)
+{
+ dump_tf(tf);
+
+ const uint64_t stval = read_csr(stval);
+ switch (stval) {
+ case LANDING_PAD_FAULT:
+ panic("Invalid landing pad!");
+ break;
+ default:
+ panic("Software check fault: unhandled stval: %d", stval);
+ break;
+ }
+}
+
void handle_trap(trapframe_t* tf)
{
if ((intptr_t)tf->cause < 0)
@@ -110,6 +125,7 @@ void handle_trap(trapframe_t* tf)
[CAUSE_MISALIGNED_STORE] = handle_misaligned_store,
[CAUSE_LOAD_PAGE_FAULT] = handle_fault_load,
[CAUSE_STORE_PAGE_FAULT] = handle_fault_store,
+ [CAUSE_SOFTWARE_CHECK_FAULT] = handle_software_check_fault,
};
kassert(tf->cause < ARRAY_SIZE(trap_handlers) && trap_handlers[tf->cause]);