https://github.com/mchoo7 updated https://github.com/llvm/llvm-project/pull/178069
>From 6702d081ded537e12c115dfd30e79241341b9501 Mon Sep 17 00:00:00 2001 From: Minsoo Choo <[email protected]> Date: Mon, 26 Jan 2026 14:58:11 -0500 Subject: [PATCH] [lldb] [Process/FreeBSDKernel] Select paniced thread automatically Signed-off-by: Minsoo Choo <[email protected]> --- .../Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp | 11 ++++++++--- .../Process/FreeBSDKernel/ThreadFreeBSDKernel.cpp | 11 ++++++++++- .../Process/FreeBSDKernel/ThreadFreeBSDKernel.h | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp b/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp index d209e5b5384f3..f211fdfa434b8 100644 --- a/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp +++ b/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp @@ -242,9 +242,14 @@ bool ProcessFreeBSDKernel::DoUpdateThreadList(ThreadList &old_thread_list, thread_desc += llvm::formatv(" (on CPU {0})", oncpu); } - ThreadSP thread_sp{ - new ThreadFreeBSDKernel(*this, tid, pcb_addr, thread_desc)}; - new_thread_list.AddThread(thread_sp); + auto thread = + new ThreadFreeBSDKernel(*this, tid, pcb_addr, thread_desc); + + if (tid == dumptid) { + thread->SetIsCrashedThread(true); + } + + new_thread_list.AddThread(static_cast<ThreadSP>(thread)); } } } else { diff --git a/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.cpp b/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.cpp index 24e7943cba0e2..dd1ed52719749 100644 --- a/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.cpp +++ b/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.cpp @@ -8,6 +8,7 @@ #include "ThreadFreeBSDKernel.h" +#include "lldb/Target/StopInfo.h" #include "lldb/Target/Unwind.h" #include "lldb/Utility/Log.h" @@ -82,4 +83,12 @@ ThreadFreeBSDKernel::CreateRegisterContextForFrame(StackFrame *frame) { return reg_ctx_sp; } -bool ThreadFreeBSDKernel::CalculateStopInfo() { return false; } +bool ThreadFreeBSDKernel::CalculateStopInfo() { + if (m_is_crashed) { + // Set a stop reason for crashing threads only so that they get selected + // preferentially. + SetStopInfo(StopInfo::CreateStopReasonWithException(*this, "kernel panic")); + return true; + } + return false; +} diff --git a/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.h b/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.h index 3bc019b63e680..6a8d44eaf5699 100644 --- a/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.h +++ b/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.h @@ -38,6 +38,8 @@ class ThreadFreeBSDKernel : public lldb_private::Thread { m_thread_name.clear(); } + void SetIsCrashedThread(bool is_crashed) { m_is_crashed = is_crashed; } + protected: bool CalculateStopInfo() override; @@ -45,6 +47,7 @@ class ThreadFreeBSDKernel : public lldb_private::Thread { std::string m_thread_name; lldb::RegisterContextSP m_thread_reg_ctx_sp; lldb::addr_t m_pcb_addr; + bool m_is_crashed = false; }; #endif // LLDB_SOURCE_PLUGINS_PROCESS_FREEBSDKERNEL_THREADFREEBSDKERNEL_H _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
