From e4019ba9dc6e17852b719be4c2887b229b3e8114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Holz?= Date: Fri, 8 Dec 2023 00:03:31 +0100 Subject: [PATCH] Kernel: Make `CrashHandler` more useful before `init_stage2` Display some helpful information about crashes even before the first process is started. --- Kernel/Tasks/CrashHandler.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Kernel/Tasks/CrashHandler.cpp b/Kernel/Tasks/CrashHandler.cpp index 1e00864b70..c4ad36f953 100644 --- a/Kernel/Tasks/CrashHandler.cpp +++ b/Kernel/Tasks/CrashHandler.cpp @@ -16,8 +16,17 @@ namespace Kernel { void handle_crash(Kernel::RegisterState const& regs, char const* description, int signal, bool out_of_memory) { auto* current_thread = Thread::current(); - if (!current_thread) - PANIC("{} with !Thread::current()", description); + if (!current_thread) { + VERIFY(regs.previous_mode() == ExecutionMode::Kernel); + + dbgln("CRASH: CPU #{} {} in kernel", Processor::current_id(), description); + + dump_registers(regs); + if (Memory::MemoryManager::is_initialized()) + MM.dump_kernel_regions(); + + PANIC("Crash in kernel with !Thread::current()"); + } auto crashed_in_kernel = regs.previous_mode() == ExecutionMode::Kernel; if (!crashed_in_kernel && current_thread->has_signal_handler(signal) && !current_thread->should_ignore_signal(signal) && !current_thread->is_signal_masked(signal)) {