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