Expand description
Trap handling functionality
For rCore, we have a single trap entry point, namely __alltraps. At
initialization in init(), we set the stvec CSR to point to it.
All traps go through __alltraps, which is defined in trap.S. The
assembly language code does just enough work restore the kernel space
context, ensuring that Rust code safely runs, and transfers control to
trap_handler().
It then calls different functionality based on what exactly the exception
was. For example, timer interrupts trigger task preemption, and syscalls go
to syscall().
Modules§
- context 🔒Implementation of
TrapContext
Structs§
- trap context structure containing sstatus, sepc and registers
Functions§
- enable timer interrupt in supervisor mode
- Initialize trap handling
- set trap entry for traps happen in kernel(supervisor) mode
- set trap entry for traps happen in user mode
- handle trap from kernel
- trap handler
- return to user space