From a0752cba62469e396c2ace4682a44b2356373100 Mon Sep 17 00:00:00 2001 From: shockrah Date: Thu, 24 Oct 2019 03:03:08 -0700 Subject: [PATCH] Moved load_idt to .s file --- interrupt_entry.s | 14 ++++++++++---- interrupts.c | 9 ++++----- interrupts.h | 1 - 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/interrupt_entry.s b/interrupt_entry.s index 2b5e280..5753e98 100644 --- a/interrupt_entry.s +++ b/interrupt_entry.s @@ -12,10 +12,16 @@ extern interrupt_handler extern cpu_reg_state extern stack_state +extern idt_ptr + +global load_idt +load_idt: + lidt [idt_ptr] + ret %macro no_err_handler 1 -global interrupt_handler_%1 ; defined in interrupts.h -interrupt_handler_%1: +global no_err_handler_%1 ; defined in interrupts.h +no_err_handler_%1: push dword 0 push dword %1 jmp common_int_handler @@ -23,8 +29,8 @@ interrupt_handler_%1: ; deals with the intterrupts that do give us an error code %macro err_code_handler 1 -global interrupt_handler_%1 -interrupt_handler_%1: +global err_code_handler_%1 +err_code_handler_%1: push dword %1 jmp common_int_handler %endmacro diff --git a/interrupts.c b/interrupts.c index 5c7e593..7ad32ed 100644 --- a/interrupts.c +++ b/interrupts.c @@ -2,6 +2,7 @@ #include "mem.h" #include "types.h" +extern void load_idt(); extern void no_err_handler_1(); extern void no_err_handler_2(); extern void no_err_handler_3(); @@ -51,14 +52,12 @@ void setup_idt_entry(u32 t_idx, u32 base, u16 sel, u8 type_attrs) { IDT[t_idx].selector = sel; } -void load_idt() { - asm("lidt [idt_ptr]"); - return; -} - // Generic interrupt handler to be used later on void interrupt_handler(struct cpu_reg_state cpu, struct stack_state stack, u32 interrupt_code) { // treating things on the stack like it were a cpu_reg_state + // NOTE: dummy stuff to stop gcc from complaining atm + cpu.eax += 1; + stack.error_code += interrupt_code; } void init_idt() { diff --git a/interrupts.h b/interrupts.h index 62f700f..fad543e 100644 --- a/interrupts.h +++ b/interrupts.h @@ -51,7 +51,6 @@ struct IDT_PTR { struct IDT_Entry IDT[IDT_SIZE]; struct IDT_PTR idt_ptr; -void load_idt(); void init_idt(); void setup_idt_entry(u32 t_idx, u32 base, u16 sel, u8 type_attrs); //void interrupt_handler(struct cpu_reg_state, struct stack_state, u32);