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);