diff --git a/Kernel/Arch/aarch64/init.cpp b/Kernel/Arch/aarch64/init.cpp index 63dc655416..f7baa67e66 100644 --- a/Kernel/Arch/aarch64/init.cpp +++ b/Kernel/Arch/aarch64/init.cpp @@ -49,6 +49,8 @@ extern "C" void exception_common(Kernel::TrapFrame const* const trap_frame) auto esr_el1 = Kernel::Aarch64::ESR_EL1::read(); dbgln("esr_el1: EC({:#b}) IL({:#b}) ISS({:#b}) ISS2({:#b})", esr_el1.EC, esr_el1.IL, esr_el1.ISS, esr_el1.ISS2); + + dump_backtrace_from_base_pointer(trap_frame->x[29]); } Kernel::Processor::halt(); diff --git a/Kernel/KSyms.cpp b/Kernel/KSyms.cpp index e33cb220c5..4e66a6781b 100644 --- a/Kernel/KSyms.cpp +++ b/Kernel/KSyms.cpp @@ -161,6 +161,11 @@ NEVER_INLINE static void dump_backtrace_impl(FlatPtr base_pointer, bool use_ksym } } +void dump_backtrace_from_base_pointer(FlatPtr base_pointer) +{ + dump_backtrace_impl(base_pointer, g_kernel_symbols_available, PrintToScreen::Yes); +} + void dump_backtrace(PrintToScreen print_to_screen) { static bool in_dump_backtrace = false; diff --git a/Kernel/KSyms.h b/Kernel/KSyms.h index ff01f38edf..518a9f2984 100644 --- a/Kernel/KSyms.h +++ b/Kernel/KSyms.h @@ -29,5 +29,6 @@ extern FlatPtr g_lowest_kernel_symbol_address; extern FlatPtr g_highest_kernel_symbol_address; void dump_backtrace(PrintToScreen print_to_screen = PrintToScreen::No); +void dump_backtrace_from_base_pointer(FlatPtr base_pointer); }