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

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