X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/474a5dd282586c31abfefc7953f148acdc226731..de334342a8a134a7c5b15e175d1c2ff87e6dbb2a:/lunaix-os/kernel/asm/x86/interrupt.S?ds=inline diff --git a/lunaix-os/kernel/asm/x86/interrupt.S b/lunaix-os/kernel/asm/x86/interrupt.S index 48dff2f..17236f8 100644 --- a/lunaix-os/kernel/asm/x86/interrupt.S +++ b/lunaix-os/kernel/asm/x86/interrupt.S @@ -4,17 +4,6 @@ #include #define __ASM_INTR_DIAGNOSIS -.macro isr_template vector, no_error_code=1 - .global _asm_isr\vector - .type _asm_isr\vector, @function - _asm_isr\vector: - .if \no_error_code - pushl $0x0 - .endif - pushl $\vector - jmp interrupt_wrapper -.endm - #ifdef __ASM_INTR_DIAGNOSIS .section .bss .global debug_resv @@ -29,21 +18,7 @@ tmp_stack: .section .text - isr_template FAULT_DIVISION_ERROR - isr_template FAULT_GENERAL_PROTECTION, no_error_code=0 - isr_template FAULT_PAGE_FAULT, no_error_code=0 - isr_template FAULT_STACK_SEG_FAULT, no_error_code=0 - - isr_template LUNAIX_SYS_PANIC - isr_template LUNAIX_SYS_CALL - - isr_template APIC_ERROR_IV - isr_template APIC_LINT0_IV - isr_template APIC_TIMER_IV - isr_template APIC_SPIV_IV - isr_template RTC_TIMER_IV - isr_template PC_KBD_IV - + .global interrupt_wrapper interrupt_wrapper: /* Stack layout (layout of struct isr_param) @@ -117,6 +92,12 @@ soft_iret: movl %eax, %esp +#ifdef __ASM_INTR_DIAGNOSIS + movl %eax, (debug_resv + 8) + movl 56(%esp), %eax + movl %eax, (debug_resv + 4) +#endif + popl %eax popl %ebx popl %ecx @@ -157,17 +138,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 +159,7 @@ jz 1f jmp handle_signal 1: - leal 8(%ecx), %eax + leal 8(%ebx), %eax jmp soft_iret .global handle_signal