From 8ef6c49d30804b572f99473d952053aff2fbb228 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Tue, 22 Mar 2022 14:11:35 -0700 Subject: [PATCH] kern: print kernel backtrace on panic --- libraries/libmesosphere/source/kern_panic.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/libraries/libmesosphere/source/kern_panic.cpp b/libraries/libmesosphere/source/kern_panic.cpp index a42f6f961..be6d24b70 100644 --- a/libraries/libmesosphere/source/kern_panic.cpp +++ b/libraries/libmesosphere/source/kern_panic.cpp @@ -94,13 +94,16 @@ namespace ams::kern { /* Print the state. */ MESOSPHERE_RELEASE_LOG("Core[%d] Current State:\n", core_id); - /* Print registers and user backtrace. */ - KDebug::PrintRegister(); - KDebug::PrintBacktrace(); - + /* Print kernel state. */ #ifdef ATMOSPHERE_ARCH_ARM64 + MESOSPHERE_RELEASE_LOG("Kernel Registers:\n"); + for (size_t i = 0; i < 31; i++) { + MESOSPHERE_RELEASE_LOG(" X[%02zu] = %016lx\n", i, core_ctx->x[i]); + } + MESOSPHERE_RELEASE_LOG(" SP = %016lx\n", core_ctx->sp); + /* Print kernel backtrace. */ - MESOSPHERE_RELEASE_LOG("Backtrace:\n"); + MESOSPHERE_RELEASE_LOG("Kernel Backtrace:\n"); uintptr_t fp = core_ctx != nullptr ? core_ctx->x[29] : reinterpret_cast(__builtin_frame_address(0)); for (size_t i = 0; i < 32 && fp && util::IsAligned(fp, 0x10) && cpu::GetPhysicalAddressWritable(nullptr, fp, true); i++) { struct { @@ -112,6 +115,10 @@ namespace ams::kern { } #endif + /* Print registers and user backtrace. */ + KDebug::PrintRegister(); + KDebug::PrintBacktrace(); + MESOSPHERE_RELEASE_LOG("\n"); /* Allow the next core to print. */