switcher: symbolic names of switcher mcause values
Co-authored-by: Robert Norton <robert.norton@microsoft.com>
diff --git a/sdk/core/switcher/entry.S b/sdk/core/switcher/entry.S
index eb85ef7..bace58f 100644
--- a/sdk/core/switcher/entry.S
+++ b/sdk/core/switcher/entry.S
@@ -490,7 +490,7 @@
// If we hit one of the exception conditions that we should let
// compartments handle then deliver it to the compartment.
// CHERI exception code.
- li a0, 0x1c
+ li a0, MCAUSE_CHERI
beq a0, t1, .Lhandle_error
// Misaligned instruction, instruction access, illegal instruction,
// breakpoint, misaligned load, load fault, misaligned store, and store
@@ -549,11 +549,11 @@
// mret, so reentrancy is no longer a concern.
cspecialw mtdc, csp
- // If mcause is 25, then we will jump into the error handler: another
- // thread has signalled that this thread should be interrupted. 25 is a
- // reserved exception number that we repurpose to indicate explicit
- // interruption.
- li t1, 25
+ // If mcause is MCAUSE_THREAD_INTERRUPT, then we will jump into the error
+ // handler: another thread has signalled that this thread should be
+ // interrupted. MCAUSE_THREAD_INTERRUPT is a reserved exception number that
+ // we repurpose to indicate explicit interruption.
+ li t1, MCAUSE_THREAD_INTERRUPT
beq t0, t1, .Lhandle_injected_error
// Environment call from M-mode is exception code 11.
@@ -859,7 +859,7 @@
// Value 24 is reserved for custom use.
.Lset_mcause_and_exit_thread:
- csrw mcause, 24
+ csrw mcause, MCAUSE_THREAD_EXIT
// The thread exit code expects the trusted stack pointer to be in csp and
// the stack pointer to be in mtdc. After thread exit, we don't need the
// stack pointer so just put zero there.
@@ -1011,7 +1011,7 @@
// Mark the thread as interrupted.
// Store a magic value in mcause
- li a2, 25
+ li a2, MCAUSE_THREAD_INTERRUPT
csw a2, TrustedStack_offset_mcause(ca1)
// Return success
li a0, 1
diff --git a/sdk/core/switcher/misc-assembly.h b/sdk/core/switcher/misc-assembly.h
index f48e59f..24ddbcc 100644
--- a/sdk/core/switcher/misc-assembly.h
+++ b/sdk/core/switcher/misc-assembly.h
@@ -26,3 +26,11 @@
* This *must* be a multiple of 16, which is the stack alignment.
*/
#define STACK_ENTRY_RESERVED_SPACE 16
+
+#ifdef __cplusplus
+using namespace priv;
+#endif
+
+EXPORT_ASSEMBLY_NAME(MCAUSE_THREAD_EXIT, 24)
+EXPORT_ASSEMBLY_NAME(MCAUSE_THREAD_INTERRUPT, 25)
+EXPORT_ASSEMBLY_NAME(MCAUSE_CHERI, 28)
diff --git a/sdk/include/priv/riscv.h b/sdk/include/priv/riscv.h
index d5c616e..d8cc51c 100644
--- a/sdk/include/priv/riscv.h
+++ b/sdk/include/priv/riscv.h
@@ -75,6 +75,7 @@
constexpr size_t MCAUSE_LOAD_PAGE_FAULT = 13;
constexpr size_t MCAUSE_STORE_PAGE_FAULT = 15;
constexpr size_t MCAUSE_THREAD_EXIT = 24;
+ constexpr size_t MCAUSE_THREAD_INTERRUPT = 25;
constexpr size_t MCAUSE_CHERI = 28;
constexpr size_t MSTATUS_UIE = (1 << 0);