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
handle trap from kernel Unimplement: traps/interrupts/exceptions from kernel mode Todo: Chapter 9: I/O device
trap handler
return to user space set the new addr of __restore asm function in TRAMPOLINE page, set the reg a0 = trap_cx_ptr, reg a1 = phy addr of usr page table, finally, jump to new addr of __restore asm function