From a40cda2b5084a654d853f5a9268a7ab455c46db0 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 27 Aug 2022 21:05:03 -0300 Subject: [PATCH] idt: have interrupts be disabled before swapgs --- src/arch/x86_64/idt.c | 12 ++++++------ src/arch/x86_64/isr.asm | 4 +++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/arch/x86_64/idt.c b/src/arch/x86_64/idt.c index 8f74c518..724afb35 100644 --- a/src/arch/x86_64/idt.c +++ b/src/arch/x86_64/idt.c @@ -42,13 +42,13 @@ void idt_bspinit(){ // set error code pushers as exceptions - idt_setentry(&idt[VECTOR_DOUBLEFAULT], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_TRAP, 0); - idt_setentry(&idt[VECTOR_GPF], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_TRAP, 0); - idt_setentry(&idt[VECTOR_INVALIDTSS], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_TRAP, 0); - idt_setentry(&idt[VECTOR_SEGMENTNOTPRESENT], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_TRAP, 0); - idt_setentry(&idt[VECTOR_STACK], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_TRAP, 0); + idt_setentry(&idt[VECTOR_DOUBLEFAULT], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_INTERRUPT, 0); + idt_setentry(&idt[VECTOR_GPF], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_INTERRUPT, 0); + idt_setentry(&idt[VECTOR_INVALIDTSS], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_INTERRUPT, 0); + idt_setentry(&idt[VECTOR_SEGMENTNOTPRESENT], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_INTERRUPT, 0); + idt_setentry(&idt[VECTOR_STACK], asmisr_except, 0x28, FLAGS_PRESENT | FLAGS_TYPE_INTERRUPT, 0); - idt_setentry(&idt[VECTOR_PF], asmisr_pagefault, 0x28, FLAGS_PRESENT | FLAGS_TYPE_TRAP, 0); + idt_setentry(&idt[VECTOR_PF], asmisr_pagefault, 0x28, FLAGS_PRESENT | FLAGS_TYPE_INTERRUPT, 0); idt_setentry(&idt[VECTOR_PANIC], asmisr_panic, 0x28, FLAGS_PRESENT | FLAGS_TYPE_INTERRUPT, 0); diff --git a/src/arch/x86_64/isr.asm b/src/arch/x86_64/isr.asm index 7aed7597..39b282bb 100644 --- a/src/arch/x86_64/isr.asm +++ b/src/arch/x86_64/isr.asm @@ -122,9 +122,11 @@ section .text mov rdi,rsp cld + sti extern %2 call %2 - + cli + popregs iretq