Author: Michał Górny Date: 2020-11-03T09:45:50+01:00 New Revision: 8e6bcbb41758b3a6c23f1b448fcef6f67fd8c6d0
URL: https://github.com/llvm/llvm-project/commit/8e6bcbb41758b3a6c23f1b448fcef6f67fd8c6d0 DIFF: https://github.com/llvm/llvm-project/commit/8e6bcbb41758b3a6c23f1b448fcef6f67fd8c6d0.diff LOG: [lldb] [Process/FreeBSDRemote] Fix attaching via lldb-server Fix two bugs that caused attaching to a process in a pre-connected lldb-server to fail. These are: 1. Prematurely reporting status in NativeProcessFreeBSD::Attach(). The SetState() call defaulted to notify the process, and LLGS tried to send the stopped packet before the process instance was assigned to it. While at it, add an assert for that in LLGS. 2. Duplicate call to ReinitializeThreads() (via SetupTrace()) that overwrote the stopped status in threads. Now SetupTrace() is called directly by NativeProcessFreeBSD::Attach() (not the Factory) in place of ReinitializeThreads(). This fixes at least commands/process/attach/TestProcessAttach.py and python_api/hello_world/TestHelloWorld.py. Differential Revision: https://reviews.llvm.org/D90525 Added: Modified: lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp Removed: ################################################################################ diff --git a/lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp b/lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp index 0a4e8ed6bcbf..a59fccb5cb65 100644 --- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp +++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp @@ -698,8 +698,9 @@ Status NativeProcessFreeBSD::Attach() { 0) return Status(errno, eErrorTypePOSIX); - /* Initialize threads */ - status = ReinitializeThreads(); + // Initialize threads and tracing status + // NB: this needs to be called before we set thread state + status = SetupTrace(); if (status.Fail()) return status; @@ -707,7 +708,8 @@ Status NativeProcessFreeBSD::Attach() { static_cast<NativeThreadFreeBSD &>(*thread).SetStoppedBySignal(SIGSTOP); // Let our process instance know the thread has stopped. - SetState(StateType::eStateStopped); + SetCurrentThreadID(m_threads.front()->GetID()); + SetState(StateType::eStateStopped, false); return Status(); } diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp index d19becca823f..3b6f740a5983 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp @@ -1728,6 +1728,7 @@ GDBRemoteCommunicationServerLLGS::SendStopReasonForState( case eStateSuspended: case eStateStopped: case eStateCrashed: { + assert(m_debugged_process_up != nullptr); lldb::tid_t tid = m_debugged_process_up->GetCurrentThreadID(); // Make sure we set the current thread so g and p packets return the data // the gdb will expect. _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits