Module os::trap

source · []
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

timer interrupt enabled

initialize CSR stvec as the entry of __alltraps

handle an interrupt, exception, or system call from user space