From 1faac72e2514c335e2d5721dce8c9fd1da722062 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sat, 10 Jul 2021 16:17:43 +0200 Subject: add a basic #GP handler --- kernel/idt.c | 1 + kernel/isr.c | 6 ++++++ kernel/isr.h | 3 +++ 3 files changed, 10 insertions(+) (limited to 'kernel') diff --git a/kernel/idt.c b/kernel/idt.c index 96d6d15..65f511f 100644 --- a/kernel/idt.c +++ b/kernel/idt.c @@ -53,6 +53,7 @@ static void idt_prepare() { IDT[i].present = 0; idt_add(0x08, false, isr_double_fault); + idt_add(0x0d, false, isr_general_protection_fault); idt_add(0x34, false, isr_test_interrupt); } diff --git a/kernel/isr.c b/kernel/isr.c index e6a9871..b715de0 100644 --- a/kernel/isr.c +++ b/kernel/isr.c @@ -12,6 +12,12 @@ void isr_double_fault(struct interrupt_frame *frame) { panic(); } +__attribute__((interrupt)) +void isr_general_protection_fault(struct interrupt_frame *frame) { + tty_const("#GP"); + panic(); +} + __attribute__((interrupt)) void isr_test_interrupt(struct interrupt_frame *frame) { isr_test_interrupt_called = true; diff --git a/kernel/isr.h b/kernel/isr.h index 624e9ad..150fc46 100644 --- a/kernel/isr.h +++ b/kernel/isr.h @@ -8,5 +8,8 @@ extern bool isr_test_interrupt_called; // used in the self-test in idt.c __attribute__((interrupt)) void isr_double_fault(struct interrupt_frame *frame); +__attribute__((interrupt)) +void isr_general_protection_fault(struct interrupt_frame *frame); + __attribute__((interrupt)) void isr_test_interrupt(struct interrupt_frame *frame); -- cgit v1.2.3