summaryrefslogtreecommitdiff
path: root/src/arch/amd64/cpu/idt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/amd64/cpu/idt.c')
-rw-r--r--src/arch/amd64/cpu/idt.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/arch/amd64/cpu/idt.c b/src/arch/amd64/cpu/idt.c
index 053f614..c286199 100644
--- a/src/arch/amd64/cpu/idt.c
+++ b/src/arch/amd64/cpu/idt.c
@@ -1,10 +1,11 @@
#include <stdint.h>
#include <stddef.h>
#include <lib.h>
-#include <panic.h>
+
#include "idt.h"
+#include "backtrace.h"
#include "debugger.h"
-#include "../paging.h"
+#include "../bindings.h"
#include "../drivers/pic.h"
#define IDT_SIZE 256
@@ -117,25 +118,25 @@ void idt_exception_handler(uint64_t exception, uint64_t code, struct isr_regs *s
return;
}
- char custom[64];
- *custom = '\0';
+ kputs("\n\n!!! EXCEPTION !!!\n");
+ kprintf("0x%02lX %s\n", exception, EXCEPTIONS[exception]);
+ kprintf("Error code 0x%lX\n", code);
+
// page faults store the offending address in cr2
if (exception == 0x0E) {
- strcat(custom, "\nPage fault address: 0x");
uint64_t cr2;
__asm__ volatile ("mov %%cr2, %0" : "=r"(cr2));
- ultoa((size_t)cr2, custom + 23, 16);
+ kprintf("Page fault address: 0x%lX\n", cr2);
}
+
+ kputs("\n");
- panic_interrupt(
- (void *)state->rip,
- (void *)state->rbp,
- "Exception %s\nError code 0x%lu%s",
- EXCEPTIONS[exception],
- code,
- custom
- );
+ log_backtrace_ex((void *)state->rip, (void *)state->rbp);
+
+ while (1) {
+ halt();
+ }
}
void idt_pic_eoi(uint8_t exception) {