[Lldb-commits] [lldb] r154351 - in /lldb/trunk: include/lldb/Target/Thread.h include/lldb/Target/ThreadPlan.h include/lldb/Target/ThreadPlanBase.h include/lldb/Target/ThreadPlanCallFunction.h include/lldb/Target/ThreadPlanStepOverRange.h include/lldb/Target/ThreadPlanStepUntil.h source/Target/Thread.cpp source/Target/ThreadPlan.cpp source/Target/ThreadPlanBase.cpp source/Target/ThreadPlanCallFunction.cpp source/Target/ThreadPlanStepOverRange.cpp source/Target/ThreadPlanStepUntil.cpp

Jim Ingham jingham at apple.com
Mon Apr 9 15:37:39 PDT 2012


Author: jingham
Date: Mon Apr  9 17:37:39 2012
New Revision: 154351

URL: http://llvm.org/viewvc/llvm-project?rev=154351&view=rev
Log:
Rework how master plans declare themselves.  Also make "PlanIsBasePlan" not rely only on this being the bottom plan in the stack, but allow the plan to declare itself as such.

Modified:
    lldb/trunk/include/lldb/Target/Thread.h
    lldb/trunk/include/lldb/Target/ThreadPlan.h
    lldb/trunk/include/lldb/Target/ThreadPlanBase.h
    lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h
    lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h
    lldb/trunk/include/lldb/Target/ThreadPlanStepUntil.h
    lldb/trunk/source/Target/Thread.cpp
    lldb/trunk/source/Target/ThreadPlan.cpp
    lldb/trunk/source/Target/ThreadPlanBase.cpp
    lldb/trunk/source/Target/ThreadPlanCallFunction.cpp
    lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp
    lldb/trunk/source/Target/ThreadPlanStepUntil.cpp

Modified: lldb/trunk/include/lldb/Target/Thread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Thread.h?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Thread.h (original)
+++ lldb/trunk/include/lldb/Target/Thread.h Mon Apr  9 17:37:39 2012
@@ -587,12 +587,8 @@
 
 private:
     bool
-    PlanIsBasePlan (ThreadPlan *plan_ptr)
-    {
-        if (m_plan_stack.size() == 0)
-            return false;
-        return m_plan_stack[0].get() == plan_ptr;
-    }
+    PlanIsBasePlan (ThreadPlan *plan_ptr);
+    
 public:
 
     //------------------------------------------------------------------

Modified: lldb/trunk/include/lldb/Target/ThreadPlan.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlan.h?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlan.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlan.h Mon Apr  9 17:37:39 2012
@@ -334,10 +334,18 @@
     virtual bool
     WillStop () = 0;
 
-    virtual bool
+    bool
     IsMasterPlan()
     {
-        return false;
+        return m_is_master_plan;
+    }
+    
+    bool
+    SetIsMasterPlan (bool value)
+    {
+        bool old_value = m_is_master_plan;
+        m_is_master_plan = value;
+        return old_value;
     }
 
     virtual bool
@@ -390,6 +398,12 @@
     void
     SetPlanComplete ();
     
+    virtual bool
+    IsBasePlan()
+    {
+        return false;
+    }
+    
     lldb::ThreadPlanTracerSP &
     GetThreadPlanTracer()
     {
@@ -474,6 +488,7 @@
     bool m_plan_complete;
     bool m_plan_private;
     bool m_okay_to_discard;
+    bool m_is_master_plan;
     
     lldb::ThreadPlanTracerSP m_tracer_sp;
 

Modified: lldb/trunk/include/lldb/Target/ThreadPlanBase.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanBase.h?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanBase.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanBase.h Mon Apr  9 17:37:39 2012
@@ -14,6 +14,7 @@
 // C++ Includes
 // Other libraries and framework includes
 // Project includes
+#include "lldb/Target/Process.h"
 #include "lldb/Target/Thread.h"
 #include "lldb/Target/ThreadPlan.h"
 
@@ -28,6 +29,7 @@
 
 class ThreadPlanBase : public ThreadPlan
 {
+friend class Process;  // RunThreadPlan manages "stopper" base plans.
 public:
     virtual ~ThreadPlanBase ();
 
@@ -41,16 +43,17 @@
     virtual bool MischiefManaged ();
     virtual bool WillResume (lldb::StateType resume_state, bool current_plan);
 
-    virtual bool IsMasterPlan()
-    {
-        return true;
-    }
-
     virtual bool OkayToDiscard()
     {
         return false;
     }
 
+    virtual bool
+    IsBasePlan()
+    {
+        return true;
+    }
+    
 protected:
     ThreadPlanBase (Thread &thread);
 

Modified: lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanCallFunction.h Mon Apr  9 17:37:39 2012
@@ -80,12 +80,6 @@
     virtual bool
     MischiefManaged ();
 
-    virtual bool
-    IsMasterPlan()
-    {
-        return true;
-    }
-
     // To get the return value from a function call you must create a 
     // lldb::ValueSP that contains a valid clang type in its context and call
     // RequestReturnValue. The ValueSP will be stored and when the function is

Modified: lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h Mon Apr  9 17:37:39 2012
@@ -35,11 +35,6 @@
 
     virtual void GetDescription (Stream *s, lldb::DescriptionLevel level);
     virtual bool ShouldStop (Event *event_ptr);
-    virtual bool
-    IsMasterPlan()
-    {
-        return true;
-    }
 
 protected:
 

Modified: lldb/trunk/include/lldb/Target/ThreadPlanStepUntil.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanStepUntil.h?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanStepUntil.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanStepUntil.h Mon Apr  9 17:37:39 2012
@@ -35,12 +35,6 @@
     virtual bool WillStop ();
     virtual bool MischiefManaged ();
 
-    virtual bool
-    IsMasterPlan()
-    {
-        return true;
-    }
-
 protected:
     ThreadPlanStepUntil (Thread &thread,
                          lldb::addr_t *address_list,

Modified: lldb/trunk/source/Target/Thread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Thread.cpp?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/source/Target/Thread.cpp (original)
+++ lldb/trunk/source/Target/Thread.cpp Mon Apr  9 17:37:39 2012
@@ -349,7 +349,7 @@
         }
         else
         {
-            // If the current plan doesn't explain the stop, then, find one that
+            // If the current plan doesn't explain the stop, then find one that
             // does and let it handle the situation.
             ThreadPlan *plan_ptr = current_plan;
             while ((plan_ptr = GetPreviousPlan(plan_ptr)) != NULL)
@@ -839,6 +839,17 @@
     }
 }
 
+bool
+Thread::PlanIsBasePlan (ThreadPlan *plan_ptr)
+{
+    if (plan_ptr->IsBasePlan())
+        return true;
+    else if (m_plan_stack.size() == 0)
+        return false;
+    else
+       return m_plan_stack[0].get() == plan_ptr;
+}
+
 ThreadPlan *
 Thread::QueueFundamentalPlan (bool abort_other_plans)
 {

Modified: lldb/trunk/source/Target/ThreadPlan.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlan.cpp?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlan.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlan.cpp Mon Apr  9 17:37:39 2012
@@ -36,7 +36,8 @@
     m_plan_complete_mutex (Mutex::eMutexTypeRecursive),
     m_plan_complete (false),
     m_plan_private (false),
-    m_okay_to_discard (false)
+    m_okay_to_discard (false),
+    m_is_master_plan (false)
 {
     SetID (GetNextID());
 }

Modified: lldb/trunk/source/Target/ThreadPlanBase.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanBase.cpp?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanBase.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanBase.cpp Mon Apr  9 17:37:39 2012
@@ -47,6 +47,7 @@
 #endif
     new_tracer_sp->EnableTracing (m_thread.GetTraceEnabledState());
     SetThreadPlanTracer(new_tracer_sp);
+    SetIsMasterPlan (true);
 }
 
 ThreadPlanBase::~ThreadPlanBase ()

Modified: lldb/trunk/source/Target/ThreadPlanCallFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanCallFunction.cpp?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanCallFunction.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanCallFunction.cpp Mon Apr  9 17:37:39 2012
@@ -52,6 +52,9 @@
     m_takedown_done (false),
     m_stop_address (LLDB_INVALID_ADDRESS)
 {
+    // Call function thread plans need to be master plans so that they can potentially stay on the stack when
+    // a breakpoint is hit during the function call.
+    SetIsMasterPlan (true);
     SetOkayToDiscard (discard_on_error);
 
     ProcessSP process_sp (thread.GetProcess());
@@ -172,6 +175,9 @@
     m_return_type (return_type),
     m_takedown_done (false)
 {
+    // Call function thread plans need to be master plans so that they can potentially stay on the stack when
+    // a breakpoint is hit during the function call.
+    SetIsMasterPlan (true);
     SetOkayToDiscard (discard_on_error);
     
     ProcessSP process_sp (thread.GetProcess());

Modified: lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp Mon Apr  9 17:37:39 2012
@@ -43,6 +43,9 @@
 ) :
     ThreadPlanStepRange (ThreadPlan::eKindStepOverRange, "Step range stepping over", thread, range, addr_context, stop_others)
 {
+    // Step over range plans can be master plans, since you could hit a breakpoint while stepping over, step around
+    // a bit, then continue to finish up the step over.
+    SetIsMasterPlan (true);
     SetOkayToDiscard (okay_to_discard);
 }
 

Modified: lldb/trunk/source/Target/ThreadPlanStepUntil.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanStepUntil.cpp?rev=154351&r1=154350&r2=154351&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanStepUntil.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanStepUntil.cpp Mon Apr  9 17:37:39 2012
@@ -52,7 +52,11 @@
     m_stop_others (stop_others)
 {
 
+    // Step until plans can be master plans, since you could hit a breakpoint while stepping to the stop point, step around
+    // a bit, then continue to finish up the step until.
+    SetIsMasterPlan (true);
     SetOkayToDiscard(true);
+    
     // Stash away our "until" addresses:
     TargetSP target_sp (m_thread.CalculateTarget());
 





More information about the lldb-commits mailing list