diff --git a/kernel/Makefile b/kernel/Makefile index 2fc2b330..5b4ef70a 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -40,7 +40,6 @@ kernel/Input.o \ kernel/InterruptController.o \ kernel/kernel.o \ kernel/kmalloc.o \ -kernel/Panic.o \ kernel/PIC.o \ kernel/PIT.o \ kernel/RTC.o \ diff --git a/kernel/include/kernel/Debug.h b/kernel/include/kernel/Debug.h index c85386f4..c1a7caeb 100644 --- a/kernel/include/kernel/Debug.h +++ b/kernel/include/kernel/Debug.h @@ -28,5 +28,6 @@ namespace Debug { + void DumpStackTrace(); void putchar(char); } \ No newline at end of file diff --git a/kernel/include/kernel/Panic.h b/kernel/include/kernel/Panic.h index 61bc2608..e2dbe1ab 100644 --- a/kernel/include/kernel/Panic.h +++ b/kernel/include/kernel/Panic.h @@ -8,15 +8,13 @@ namespace Kernel { - void dump_stacktrace(); - template __attribute__((__noreturn__)) static void PanicImpl(const char* file, int line, const char* message, Args... args) { - kprintln("\e[31mKernel panic at {}:{}\e[m", file, line); + derrorln("Kernel panic at {}:{}", file, line); derrorln(message, args...); - dump_stacktrace(); + Debug::DumpStackTrace(); asm volatile("cli"); for (;;) asm volatile("hlt"); diff --git a/kernel/kernel/Debug.cpp b/kernel/kernel/Debug.cpp index 11b01fcf..394ad847 100644 --- a/kernel/kernel/Debug.cpp +++ b/kernel/kernel/Debug.cpp @@ -5,6 +5,23 @@ namespace Debug { + void DumpStackTrace() + { + struct stackframe + { + stackframe* ebp; + uintptr_t eip; + }; + + stackframe* frame = (stackframe*)__builtin_frame_address(0); + BAN::Formatter::print(Debug::putchar, "\e[36mStack trace:\r\n"); + while (frame) + { + BAN::Formatter::print(Debug::putchar, " {}\r\n", (void*)frame->eip); + frame = frame->ebp; + } + } + void putchar(char ch) { if (Serial::IsInitialized()) diff --git a/kernel/kernel/Panic.cpp b/kernel/kernel/Panic.cpp deleted file mode 100644 index cc95b4a0..00000000 --- a/kernel/kernel/Panic.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include - -namespace Kernel -{ - - void dump_stacktrace() - { - struct stackframe - { - stackframe* ebp; - uintptr_t eip; - }; - - stackframe* frame = (stackframe*)__builtin_frame_address(0); - BAN::Formatter::print(Debug::putchar, "\e[36mStack trace:\r\n"); - while (frame) - { - BAN::Formatter::print(Debug::putchar, " {}\r\n", (void*)frame->eip); - frame = frame->ebp; - } - } - -} \ No newline at end of file