https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/203525
>From ea720471e242838d0c8150596eaab3bf45a6c07b Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Fri, 12 Jun 2026 14:06:40 +0100 Subject: [PATCH 1/2] [lldb][Windows] Honor server's primary stop thread on gdb-remote stops --- .../Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | 8 ++++++++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index 2fc6dbb546f79..754666665ae07 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -2621,6 +2621,8 @@ StateType ProcessGDBRemote::SetThreadStopInfo(StringExtractor &stop_packet) { SetAddressableBitMasks(addressable_bits); + m_last_stop_primary_tid = tid; + ThreadSP thread_sp = SetThreadStopInfo( tid, expedited_register_map, signo, thread_name, reason, description, exc_type, exc_data, thread_dispatch_qaddr, queue_vars_valid, @@ -2669,7 +2671,13 @@ void ProcessGDBRemote::RefreshStateAfterStop() { if (m_initial_tid != LLDB_INVALID_THREAD_ID) { m_thread_list.SetSelectedThreadByID(m_initial_tid); m_initial_tid = LLDB_INVALID_THREAD_ID; + } else if (m_last_stop_primary_tid != LLDB_INVALID_THREAD_ID) { + if (ThreadSP primary_thread_sp = + m_thread_list.FindThreadByProtocolID(m_last_stop_primary_tid, + /*can_update=*/false)) + m_thread_list.SetSelectedThreadByID(primary_thread_sp->GetID()); } + m_last_stop_primary_tid = LLDB_INVALID_THREAD_ID; // Let all threads recover from stopping and do any clean up based on the // previous thread state (if any). diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h index 0a3386082c388..7a030cd966a18 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h @@ -322,6 +322,9 @@ class ProcessGDBRemote : public Process, lldb::CommandObjectSP m_command_sp; int64_t m_breakpoint_pc_offset; lldb::tid_t m_initial_tid; // The initial thread ID, given by stub on attach + lldb::tid_t m_last_stop_primary_tid = + LLDB_INVALID_THREAD_ID; // Thread ID extracted from the most recent + // T-packet's "thread:<tid>" key. bool m_use_g_packet_for_reading; bool m_allow_flash_writes; >From 2f8dc3bbffce163caa0682a5236ac4e4e9a86eeb Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Fri, 12 Jun 2026 15:35:31 +0100 Subject: [PATCH 2/2] fixup! [lldb][Windows] Honor server's primary stop thread on gdb-remote stops --- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index 754666665ae07..d73f52b492e4d 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -2671,7 +2671,8 @@ void ProcessGDBRemote::RefreshStateAfterStop() { if (m_initial_tid != LLDB_INVALID_THREAD_ID) { m_thread_list.SetSelectedThreadByID(m_initial_tid); m_initial_tid = LLDB_INVALID_THREAD_ID; - } else if (m_last_stop_primary_tid != LLDB_INVALID_THREAD_ID) { + } else if (m_last_stop_primary_tid != LLDB_INVALID_THREAD_ID && + StateIsRunningState(m_last_broadcast_state)) { if (ThreadSP primary_thread_sp = m_thread_list.FindThreadByProtocolID(m_last_stop_primary_tid, /*can_update=*/false)) _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
