使中断支持重入

This commit is contained in:
pointer-to-bios 2024-04-27 19:03:02 +08:00
parent 8352069285
commit 2d6b898c49
2 changed files with 31 additions and 0 deletions

View File

@ -51,7 +51,10 @@
add rsp, 4 add rsp, 4
%endmacro %endmacro
; 此处的cli在进入rust的中断处理函数后才会对应sti
; 因为在保存栈帧前中断不可以被打断
%macro interrupt_entry_enter 0 %macro interrupt_entry_enter 0
cli
push rbp push rbp
lea rbp, [rsp] lea rbp, [rsp]
store_regs store_regs
@ -62,6 +65,7 @@
retrieve_section retrieve_section
retrieve_regs retrieve_regs
leave leave
sti
%endmacro %endmacro
; 用于带有错误码的中断,创建一个没有错误码的上下文拷贝 ; 用于带有错误码的中断,创建一个没有错误码的上下文拷贝

View File

@ -9,3 +9,30 @@ interrupt_open:
interrupt_close: interrupt_close:
cli cli
ret ret
global interrupt_rust_enter
extern TSS
; usize interrupt_rust_enter()
; 返回值用于为寄存器rax占位
interrupt_rust_enter:
; *(rsp - 8) = *(TSS + 36)
mov rax, [TSS + 36]
mov qword [rsp - 8], rax
; *(TSS + 36) = rsp - 8
mov rax, TSS
lea rax, [rax + 36]
mov [rax], rsp
sub qword [rax], 8
sti
ret
global interrupt_rust_leave
extern TSS
; usize interrupt_rust_leave()
; 返回值用于为寄存器rax占位
interrupt_rust_leave:
cli
; *(TSS + 36) = *(rsp - 8)
mov rax, [rsp - 8]
mov [TSS + 36], rax
ret