Skip to content

Commit ea73942

Browse files
committed
Merge ch6 to ch7: Merge ch4 to ch5: fix: set 4 bytes align for kernel trap entry
2 parents d52b13e + e48f9d3 commit ea73942

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

os/src/trap/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,11 @@ pub fn init() {
3636
}
3737

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

os/src/trap/trap.S

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)