From e59104ffb55abe522c82d658f1f285149cca2cb1 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Sun, 2 May 2021 14:46:18 +0200 Subject: Debug GDT enable multitasking --- src/core/int.S | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 9 deletions(-) (limited to 'src/core/int.S') diff --git a/src/core/int.S b/src/core/int.S index 9505191..2897698 100644 --- a/src/core/int.S +++ b/src/core/int.S @@ -1,50 +1,112 @@ .code64 .extern printk -.extern ack +.extern apic_ack -.macro call_printk msg +.macro CALL_PRINTK msg mov \msg, %rdi mov $0, %eax # Required for variadic functions mov $printk,%rcx call *(%rcx) .endm +.macro SAVE_REGS + push %r8 + push %r9 + push %r10 + push %r11 + push %r12 + push %r13 + push %r14 + push %r15 + push %rax + push %rbx + push %rcx + push %rdx + push %rbp + push %rsi + push %rdi + push %rax + mov $0x10, %ax + mov %ax, %ds + pop %rax +.endm + +.macro RESTORE_REGS + pop %rdi + pop %rsi + pop %rbp + pop %rdx + pop %rcx + pop %rbx + pop %rax + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %r11 + pop %r10 + pop %r9 + pop %r8 +.endm + .globl INT_DEFAULT INT_DEFAULT: + SAVE_REGS + RESTORE_REGS iretq .globl INT_0 INT_0: - call_printk $MSG_INT_0 + CALL_PRINTK $MSG_INT_0 INT_0_INFINITE: jmp INT_0_INFINITE iretq +.globl INT_10 +INT_10: + CALL_PRINTK $MSG_INT_10 + INT_10_INFINITE: + jmp INT_10_INFINITE + iretq + .globl INT_14 INT_14: - call_printk $MSG_INT_14 - mov $0, %eax - call printk + CALL_PRINTK $MSG_INT_14 INT_14_INFINITE: jmp INT_14_INFINITE iretq .globl INT_KBD INT_KBD: - #call_printk $MSG_INT_KBD - call ack + SAVE_REGS + CALL_PRINTK $MSG_INT_KBD + call apic_ack + RESTORE_REGS iretq .globl INT_CLK .extern clock INT_CLK: + SAVE_REGS call clock - call ack + call apic_ack + RESTORE_REGS + iretq + +.globl INT_SYSCALL +.extern syscall +INT_SYSCALL: + SAVE_REGS + call syscall + RESTORE_REGS iretq + MSG_INT_0: .asciz "Zero Division error!" +MSG_INT_10: +.asciz "Invalid TSS!" MSG_INT_14: .asciz "Page fault!" MSG_INT_KBD: -- cgit v1.2.3