From c8c8d009f6a32e0f6856ab0f8167563021204de9 Mon Sep 17 00:00:00 2001 From: trimill Date: Thu, 1 Feb 2024 16:53:07 -0500 Subject: debugger --- src/arch/amd64/idt.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/arch/amd64/idt.c') diff --git a/src/arch/amd64/idt.c b/src/arch/amd64/idt.c index 583b8a9..c0ea5a8 100644 --- a/src/arch/amd64/idt.c +++ b/src/arch/amd64/idt.c @@ -1,10 +1,10 @@ #include #include -#include #include #include +#include -#include "backtrace.h" +#include "debugger.h" #include "idt.h" #include "pic.h" @@ -108,7 +108,16 @@ char *EXCEPTIONS[] = { "0x1F Reserved", }; -void idt_exception_handler(uint64_t exception, uint64_t code, void *rip, void *rbp) { +void idt_exception_handler(uint64_t exception, uint64_t code, struct isr_regs *state) { + // breakpoint interrupt + if (exception == 0x03) { + debugger(state, DEBUG_INT3); + return; + } else if (exception == 0x01) { + debugger(state, DEBUG_DBG); + return; + } + // TODO don't just panic char buf[24]; char msg[256] = "Exception "; @@ -128,7 +137,7 @@ void idt_exception_handler(uint64_t exception, uint64_t code, void *rip, void *r strcat(msg, buf); } - panic_interrupt(rip, rbp, msg); + panic_interrupt((void *)state->rip, (void *)state->rbp, msg); } void idt_pic_eoi(uint8_t exception) { -- cgit v1.2.3-freya