File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -36,8 +36,11 @@ pub fn init() {
3636}
3737
3838fn set_kernel_trap_entry ( ) {
39+ extern "C" {
40+ fn __trap_from_kernel ( ) ;
41+ }
3942 unsafe {
40- stvec:: write ( trap_from_kernel as usize , TrapMode :: Direct ) ;
43+ stvec:: write ( __trap_from_kernel as usize , TrapMode :: Direct ) ;
4144 }
4245}
4346
Original file line number Diff line number Diff line change @@ -67,3 +67,20 @@ __restore:
6767 # back to user stack
6868 ld sp, 2*8 (sp)
6969 sret
70+
71+ .section .data
72+ # emergency stack for kernel trap
73+ # in order to print trap info even if the kernel stack is corrupted.
74+ __emergency:
75+ .align 4
76+ .space 1024 * 4
77+ __emergency_end:
78+
79+
80+ .section .text
81+ .globl __trap_from_kernel
82+ # 2^2=4 bytes aligned for stvec
83+ .align 2
84+ __trap_from_kernel:
85+ la sp, __emergency_end
86+ j trap_from_kernel
You can’t perform that action at this time.
0 commit comments