X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/aa8afd3a17a7433230b76a1910ab3ddb83bcd227..874b3b5a74d815aa91f325e5573052a3c8ce1d39:/lunaix-os/kernel/asm/x86/interrupt.S?ds=sidebyside diff --git a/lunaix-os/kernel/asm/x86/interrupt.S b/lunaix-os/kernel/asm/x86/interrupt.S index 48dff2f..8a43aa7 100644 --- a/lunaix-os/kernel/asm/x86/interrupt.S +++ b/lunaix-os/kernel/asm/x86/interrupt.S @@ -117,6 +117,11 @@ soft_iret: movl %eax, %esp +#ifdef __ASM_INTR_DIAGNOSIS + movl 56(%esp), %eax + movl %eax, (debug_resv + 4) +#endif + popl %eax popl %ebx popl %ecx @@ -157,17 +162,17 @@ # 约定 # arg1: 目标进程PCB地址 (next - popl %ecx # next + popl %ebx # next movl __current, %eax - movl 88(%eax), %ebx # __current->pagetable - movl 88(%ecx), %eax # next->pagetable + movl 88(%eax), %ecx # __current->pagetable + movl 88(%ebx), %eax # next->pagetable - cmpl %ebx, %eax # if(next->pagtable != __current->pagetable) { + cmpl %ecx, %eax # if(next->pagtable != __current->pagetable) { jz 1f movl %eax, %cr3 # cpu_lcr3(next->pagetable) # } 1: - movl %ecx, __current # __current = next + movl %ebx, __current # __current = next # 我们已经处在了新的地址空间,为了避免影响其先前的栈布局 # 需要使用一个临时的栈空间 @@ -178,7 +183,7 @@ jz 1f jmp handle_signal 1: - leal 8(%ecx), %eax + leal 8(%ebx), %eax jmp soft_iret .global handle_signal