fix: kpanic print address of the fault only when page fault occured

This commit is contained in:
Starnakin 2025-02-04 11:57:43 +01:00
parent 7b7cc86999
commit db4ed04dd6

View File

@ -4,9 +4,11 @@
#include "kprintf.h" #include "kprintf.h"
#include "memory.h" #include "memory.h"
#include "power.h" #include "power.h"
#include "string.h"
#include "terminal.h" #include "terminal.h"
extern u32 page_table1[1024]; extern u32 page_table1[1024];
extern const char *faults[];
__attribute__((noreturn)) void kpanic(const char *format, ...) __attribute__((noreturn)) void kpanic(const char *format, ...)
{ {
@ -17,9 +19,12 @@ __attribute__((noreturn)) void kpanic(const char *format, ...)
va_start(va, format); va_start(va, format);
kvprintf(format, &va); kvprintf(format, &va);
va_end(va); va_end(va);
u32 faulting_address;
__asm__ __volatile__("mov %%cr2, %0" : "=r"(faulting_address)); if (strcmp(format, faults[14]) == 0) {
kprintf("fault at address: %p\n", faulting_address); 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++) */ /* for (int i = 16; i < 32; i++) */
/* kprintf("%p\n", page_table1[i]); */ /* kprintf("%p\n", page_table1[i]); */
/* show_valloc_mem(); */ /* show_valloc_mem(); */