Kernel: Move dump_stacktrace from panic -> debug
This commit is contained in:
parent
e87026f01d
commit
aa0757e135
|
@ -40,7 +40,6 @@ kernel/Input.o \
|
||||||
kernel/InterruptController.o \
|
kernel/InterruptController.o \
|
||||||
kernel/kernel.o \
|
kernel/kernel.o \
|
||||||
kernel/kmalloc.o \
|
kernel/kmalloc.o \
|
||||||
kernel/Panic.o \
|
|
||||||
kernel/PIC.o \
|
kernel/PIC.o \
|
||||||
kernel/PIT.o \
|
kernel/PIT.o \
|
||||||
kernel/RTC.o \
|
kernel/RTC.o \
|
||||||
|
|
|
@ -28,5 +28,6 @@
|
||||||
|
|
||||||
namespace Debug
|
namespace Debug
|
||||||
{
|
{
|
||||||
|
void DumpStackTrace();
|
||||||
void putchar(char);
|
void putchar(char);
|
||||||
}
|
}
|
|
@ -8,15 +8,13 @@
|
||||||
namespace Kernel
|
namespace Kernel
|
||||||
{
|
{
|
||||||
|
|
||||||
void dump_stacktrace();
|
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
__attribute__((__noreturn__))
|
__attribute__((__noreturn__))
|
||||||
static void PanicImpl(const char* file, int line, const char* message, Args... args)
|
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...);
|
derrorln(message, args...);
|
||||||
dump_stacktrace();
|
Debug::DumpStackTrace();
|
||||||
asm volatile("cli");
|
asm volatile("cli");
|
||||||
for (;;)
|
for (;;)
|
||||||
asm volatile("hlt");
|
asm volatile("hlt");
|
||||||
|
|
|
@ -5,6 +5,23 @@
|
||||||
namespace Debug
|
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)
|
void putchar(char ch)
|
||||||
{
|
{
|
||||||
if (Serial::IsInitialized())
|
if (Serial::IsInitialized())
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
#include <kernel/Panic.h>
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue