diff --git a/kernel/arch/i386/Panic.cpp b/kernel/arch/i386/Panic.cpp new file mode 100644 index 00000000..569f7056 --- /dev/null +++ b/kernel/arch/i386/Panic.cpp @@ -0,0 +1,24 @@ +#include + +namespace Kernel +{ + + void dump_stacktrace() + { + struct stackframe + { + stackframe* ebp; + uint32_t eip; + }; + + stackframe* frame; + asm volatile("movl %%ebp, %0" : "=r"(frame)); + BAN::Formatter::println(Serial::serial_putc, "\e[36mStack trace:"); + while (frame) + { + BAN::Formatter::println(Serial::serial_putc, " {}", (void*)frame->eip); + frame = frame->ebp; + } + } + +} \ No newline at end of file diff --git a/kernel/arch/i386/make.config b/kernel/arch/i386/make.config index 01eea5c0..5f59e678 100644 --- a/kernel/arch/i386/make.config +++ b/kernel/arch/i386/make.config @@ -10,4 +10,6 @@ $(ARCHDIR)/CPUID.o \ $(ARCHDIR)/GDT.o \ $(ARCHDIR)/IDT.o \ $(ARCHDIR)/MMU.o \ +$(ARCHDIR)/Panic.o \ $(ARCHDIR)/VESA.o \ + \ No newline at end of file diff --git a/kernel/include/kernel/Panic.h b/kernel/include/kernel/Panic.h index 402b07db..2e5e148e 100644 --- a/kernel/include/kernel/Panic.h +++ b/kernel/include/kernel/Panic.h @@ -9,23 +9,7 @@ namespace Kernel { - static void dump_stacktrace() - { - struct stackframe - { - stackframe* ebp; - uint32_t eip; - }; - - stackframe* frame; - asm volatile("movl %%ebp, %0" : "=r"(frame)); - BAN::Formatter::println(Serial::serial_putc, "\e[36mStack trace:"); - while (frame) - { - BAN::Formatter::println(Serial::serial_putc, " 0x{8H}", frame->eip); - frame = frame->ebp; - } - } + void dump_stacktrace(); template __attribute__((__noreturn__))