X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/f1036cb8c8899f38e97e45d345a0c28585d9a000..48b4a227035048fdebcd32532deb7a857c6199ac:/lunaix-os/kernel/asm/x86/interrupt.S diff --git a/lunaix-os/kernel/asm/x86/interrupt.S b/lunaix-os/kernel/asm/x86/interrupt.S index 10fa393..471a8e6 100644 --- a/lunaix-os/kernel/asm/x86/interrupt.S +++ b/lunaix-os/kernel/asm/x86/interrupt.S @@ -1,3 +1,7 @@ +#define __ASM__ +#include +// #define __ASM_INTR_DIAGNOSIS + .macro isr_template vector, no_error_code=1 .global _asm_isr\vector .type _asm_isr\vector, @function @@ -9,21 +13,70 @@ jmp interrupt_wrapper .endm +#ifdef __ASM_INTR_DIAGNOSIS +.section .bss + .global debug_resv + debug_resv: + .skip 16 +#endif + .section .text - isr_template 0 - isr_template 13, no_error_code=0 - isr_template 14, no_error_code=0 + 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 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 interrupt_wrapper: + pushl %esp + + pushl %esi + pushl %ebp + pushl %edi + pushl %edx + pushl %ecx + pushl %ebx + pushl %eax movl %esp, %eax andl $0xfffffff0, %esp subl $16, %esp movl %eax, (%esp) - call interrupt_handler - pop %eax - movl %eax, %esp + call intr_handler + + .global soft_iret + soft_iret: + popl %esp + + popl %eax + popl %ebx + popl %ecx + popl %edx + popl %edi + popl %ebp + popl %esi + popl %esp + addl $8, %esp - iret \ No newline at end of file +#ifdef __ASM_INTR_DIAGNOSIS + cmpl $0, (%esp) + jz 1f + iret +1: + movl $__current, %eax + movl (%esp), %ebx + movl $debug_resv, %ecx + ud2 +#else + iret +#endif