From db4ed04dd6c3c04cc2b91332f6ae5f47b565d354 Mon Sep 17 00:00:00 2001 From: Starnakin Date: Tue, 4 Feb 2025 11:57:43 +0100 Subject: [PATCH] fix: kpanic print address of the fault only when page fault occured --- src/kpanic.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/kpanic.c b/src/kpanic.c index 5e8c6b5..72f11e3 100644 --- a/src/kpanic.c +++ b/src/kpanic.c @@ -4,9 +4,11 @@ #include "kprintf.h" #include "memory.h" #include "power.h" +#include "string.h" #include "terminal.h" extern u32 page_table1[1024]; +extern const char *faults[]; __attribute__((noreturn)) void kpanic(const char *format, ...) { @@ -17,9 +19,12 @@ __attribute__((noreturn)) void kpanic(const char *format, ...) va_start(va, format); kvprintf(format, &va); va_end(va); - u32 faulting_address; - __asm__ __volatile__("mov %%cr2, %0" : "=r"(faulting_address)); - kprintf("fault at address: %p\n", faulting_address); + + if (strcmp(format, faults[14]) == 0) { + u32 faulting_address; + __asm__ __volatile__("mov %%cr2, %0" : "=r"(faulting_address)); + kprintf("fault at address: %p\n", faulting_address); + } /* for (int i = 16; i < 32; i++) */ /* kprintf("%p\n", page_table1[i]); */ /* show_valloc_mem(); */