[Lldb-commits] [lldb] r181482 - Adding code to set thread state to stopped when the process stops.
Andrew Kaylor
andrew.kaylor at intel.com
Wed May 8 16:15:47 PDT 2013
Author: akaylor
Date: Wed May 8 18:15:46 2013
New Revision: 181482
URL: http://llvm.org/viewvc/llvm-project?rev=181482&view=rev
Log:
Adding code to set thread state to stopped when the process stops.
Modified:
lldb/trunk/include/lldb/Target/Thread.h
lldb/trunk/include/lldb/Target/ThreadList.h
lldb/trunk/source/Target/Process.cpp
lldb/trunk/source/Target/Thread.cpp
lldb/trunk/source/Target/ThreadList.cpp
lldb/trunk/test/functionalities/thread/state/TestThreadStates.py
Modified: lldb/trunk/include/lldb/Target/Thread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Thread.h?rev=181482&r1=181481&r2=181482&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Thread.h (original)
+++ lldb/trunk/include/lldb/Target/Thread.h Wed May 8 18:15:46 2013
@@ -277,6 +277,10 @@ public:
virtual void
DidResume ();
+ // This notifies the thread when a private stop occurs.
+ virtual void
+ DidStop ();
+
virtual void
RefreshStateAfterStop() = 0;
Modified: lldb/trunk/include/lldb/Target/ThreadList.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadList.h?rev=181482&r1=181481&r2=181482&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadList.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadList.h Wed May 8 18:15:46 2013
@@ -120,6 +120,9 @@ public:
DidResume ();
void
+ DidStop ();
+
+ void
DiscardThreadPlans();
uint32_t
Modified: lldb/trunk/source/Target/Process.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=181482&r1=181481&r2=181482&view=diff
==============================================================================
--- lldb/trunk/source/Target/Process.cpp (original)
+++ lldb/trunk/source/Target/Process.cpp Wed May 8 18:15:46 2013
@@ -1722,6 +1722,19 @@ Process::SetPrivateState (StateType new_
m_private_state.SetValueNoLock (new_state);
if (StateIsStoppedState(new_state, false))
{
+ // Note, this currently assumes that all threads in the list
+ // stop when the process stops. In the future we will want to
+ // support a debugging model where some threads continue to run
+ // while others are stopped. When that happens we will either need
+ // a way for the thread list to identify which threads are stopping
+ // or create a special thread list containing only threads which
+ // actually stopped.
+ //
+ // The process plugin is responsible for managing the actual
+ // behavior of the threads and should have stopped any threads
+ // that are going to stop before we get here.
+ m_thread_list.DidStop();
+
m_mod_id.BumpStopID();
m_memory_cache.Clear();
if (log)
Modified: lldb/trunk/source/Target/Thread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Thread.cpp?rev=181482&r1=181481&r2=181482&view=diff
==============================================================================
--- lldb/trunk/source/Target/Thread.cpp (original)
+++ lldb/trunk/source/Target/Thread.cpp Wed May 8 18:15:46 2013
@@ -610,6 +610,12 @@ Thread::DidResume ()
SetResumeSignal (LLDB_INVALID_SIGNAL_NUMBER);
}
+void
+Thread::DidStop ()
+{
+ SetState (eStateStopped);
+}
+
bool
Thread::ShouldStop (Event* event_ptr)
{
Modified: lldb/trunk/source/Target/ThreadList.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadList.cpp?rev=181482&r1=181481&r2=181482&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadList.cpp (original)
+++ lldb/trunk/source/Target/ThreadList.cpp Wed May 8 18:15:46 2013
@@ -11,6 +11,7 @@
#include <algorithm>
#include "lldb/Core/Log.h"
+#include "lldb/Core/State.h"
#include "lldb/Target/RegisterContext.h"
#include "lldb/Target/ThreadList.h"
#include "lldb/Target/Thread.h"
@@ -648,6 +649,27 @@ ThreadList::DidResume ()
}
}
+void
+ThreadList::DidStop ()
+{
+ Mutex::Locker locker(GetMutex());
+ collection::iterator pos, end = m_threads.end();
+ for (pos = m_threads.begin(); pos != end; ++pos)
+ {
+ // Notify threads that the process just stopped.
+ // Note, this currently assumes that all threads in the list
+ // stop when the process stops. In the future we will want to support
+ // a debugging model where some threads continue to run while others
+ // are stopped. We either need to handle that somehow here or
+ // create a special thread list containing only threads which will
+ // stop in the code that calls this method (currently
+ // Process::SetPrivateState).
+ ThreadSP thread_sp(*pos);
+ if (StateIsRunningState(thread_sp->GetState()))
+ thread_sp->DidStop ();
+ }
+}
+
ThreadSP
ThreadList::GetSelectedThread ()
{
Modified: lldb/trunk/test/functionalities/thread/state/TestThreadStates.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/thread/state/TestThreadStates.py?rev=181482&r1=181481&r2=181482&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/thread/state/TestThreadStates.py (original)
+++ lldb/trunk/test/functionalities/thread/state/TestThreadStates.py Wed May 8 18:15:46 2013
@@ -14,14 +14,12 @@ class StopThreadsTestCase(TestBase):
@unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
@dsym_test
- @unittest2.expectedFailure("PR-15824") # thread states not properly maintained
def test_state_after_breakpoint_with_dsym(self):
"""Test thread state after breakpoint."""
self.buildDsym()
self.thread_state_after_breakpoint_test()
@dwarf_test
- @unittest2.expectedFailure("PR-15824") # thread states not properly maintained
def test_state_after_breakpoint_with_dwarf(self):
"""Test thread state after breakpoint."""
self.buildDwarf()
More information about the lldb-commits
mailing list