[Lldb-commits] [lldb] r142026 - in /lldb/trunk: include/lldb/Target/ThreadPlanStepInRange.h include/lldb/Target/ThreadPlanStepOverRange.h include/lldb/Target/ThreadPlanStepRange.h source/Target/ThreadPlanStepInRange.cpp source/Target/ThreadPlanStepOverRange.cpp source/Target/ThreadPlanStepRange.cpp

Jim Ingham jingham at apple.com
Fri Oct 14 17:24:48 PDT 2011


Author: jingham
Date: Fri Oct 14 19:24:48 2011
New Revision: 142026

URL: http://llvm.org/viewvc/llvm-project?rev=142026&view=rev
Log:
Make the step range plans capable of supporting multiple ranges.  Also make their constructors public, there isn't any good reason why you shouldn't be able to make these plans.

Modified:
    lldb/trunk/include/lldb/Target/ThreadPlanStepInRange.h
    lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h
    lldb/trunk/include/lldb/Target/ThreadPlanStepRange.h
    lldb/trunk/source/Target/ThreadPlanStepInRange.cpp
    lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp
    lldb/trunk/source/Target/ThreadPlanStepRange.cpp

Modified: lldb/trunk/include/lldb/Target/ThreadPlanStepInRange.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanStepInRange.h?rev=142026&r1=142025&r2=142026&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanStepInRange.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanStepInRange.h Fri Oct 14 19:24:48 2011
@@ -27,6 +27,11 @@
     public ThreadPlanShouldStopHere
 {
 public:
+    ThreadPlanStepInRange (Thread &thread,
+                           const AddressRange &range,
+                           const SymbolContext &addr_context,
+                           lldb::RunMode stop_others);
+
     virtual
     ~ThreadPlanStepInRange ();
 
@@ -46,11 +51,6 @@
 
 protected:
 
-    ThreadPlanStepInRange (Thread &thread,
-                           const AddressRange &range,
-                           const SymbolContext &addr_context,
-                           lldb::RunMode stop_others);
-
     virtual void
     SetFlagsToDefault ();
     

Modified: lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h?rev=142026&r1=142025&r2=142026&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanStepOverRange.h Fri Oct 14 19:24:48 2011
@@ -24,6 +24,13 @@
 class ThreadPlanStepOverRange : public ThreadPlanStepRange
 {
 public:
+
+    ThreadPlanStepOverRange (Thread &thread, 
+                             const AddressRange &range, 
+                             const SymbolContext &addr_context, 
+                             lldb::RunMode stop_others, 
+                             bool okay_to_discard = false);
+                             
     virtual ~ThreadPlanStepOverRange ();
 
     virtual void GetDescription (Stream *s, lldb::DescriptionLevel level);
@@ -36,8 +43,6 @@
 
 protected:
 
-    ThreadPlanStepOverRange (Thread &thread, const AddressRange &range, const SymbolContext &addr_context, lldb::RunMode stop_others, bool okay_to_discard = false);
-
 private:
 
     friend ThreadPlan *

Modified: lldb/trunk/include/lldb/Target/ThreadPlanStepRange.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadPlanStepRange.h?rev=142026&r1=142025&r2=142026&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadPlanStepRange.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadPlanStepRange.h Fri Oct 14 19:24:48 2011
@@ -25,6 +25,13 @@
 class ThreadPlanStepRange : public ThreadPlan
 {
 public:
+    ThreadPlanStepRange (ThreadPlanKind kind,
+                         const char *name,
+                         Thread &thread,
+                         const AddressRange &range,
+                         const SymbolContext &addr_context,
+                         lldb::RunMode stop_others);
+
     virtual ~ThreadPlanStepRange ();
 
     virtual void GetDescription (Stream *s, lldb::DescriptionLevel level) = 0;
@@ -37,22 +44,18 @@
     virtual bool WillStop ();
     virtual bool MischiefManaged ();
 
-protected:
+    void AddRange(const AddressRange &new_range);
 
-    ThreadPlanStepRange (ThreadPlanKind kind,
-                         const char *name,
-                         Thread &thread,
-                         const AddressRange &range,
-                         const SymbolContext &addr_context,
-                         lldb::RunMode stop_others);
+protected:
 
     bool InRange();
     bool FrameIsYounger();
     bool FrameIsOlder();
     bool InSymbol();
+    void DumpRanges (Stream *s);
     
     SymbolContext m_addr_context;
-    AddressRange m_address_range;
+    std::vector<AddressRange> m_address_ranges;
     lldb::RunMode m_stop_others;
     uint32_t m_stack_depth;
     StackID m_stack_id;    // Use the stack ID so we can tell step out from step in.

Modified: lldb/trunk/source/Target/ThreadPlanStepInRange.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanStepInRange.cpp?rev=142026&r1=142025&r2=142026&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanStepInRange.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanStepInRange.cpp Fri Oct 14 19:24:48 2011
@@ -63,7 +63,7 @@
     else
     {
         s->Printf ("Stepping through range (stepping into functions): ");
-        m_address_range.Dump (s, &m_thread.GetProcess().GetTarget(), Address::DumpStyleLoadAddress);
+        DumpRanges(s);
     }
 }
 

Modified: lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp?rev=142026&r1=142025&r2=142026&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp Fri Oct 14 19:24:48 2011
@@ -58,7 +58,7 @@
     else
     {
         s->Printf ("stepping through range (stepping over functions): ");
-        m_address_range.Dump (s, &m_thread.GetProcess().GetTarget(), Address::DumpStyleLoadAddress);
+        DumpRanges(s);    
     }
 }
 

Modified: lldb/trunk/source/Target/ThreadPlanStepRange.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanStepRange.cpp?rev=142026&r1=142025&r2=142026&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanStepRange.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanStepRange.cpp Fri Oct 14 19:24:48 2011
@@ -41,13 +41,14 @@
                                           lldb::RunMode stop_others) :
     ThreadPlan (kind, name, thread, eVoteNoOpinion, eVoteNoOpinion),
     m_addr_context (addr_context),
-    m_address_range (range),
+    m_address_ranges (),
     m_stop_others (stop_others),
     m_stack_depth (0),
     m_stack_id (),
     m_no_more_plans (false),
     m_first_run_event (true)
 {
+    AddRange(range);
     m_stack_depth = m_thread.GetStackFrameCount();
     m_stack_id = m_thread.GetStackFrameAtIndex(0)->GetStackID();
 }
@@ -97,6 +98,33 @@
     return vote;
 }
 
+void
+ThreadPlanStepRange::AddRange(const AddressRange &new_range)
+{
+    // For now I'm just adding the ranges.  At some point we may want to 
+    // condense the ranges if they overlap, though I don't think it is likely
+    // to be very important.
+    m_address_ranges.push_back (new_range);
+}
+
+void
+ThreadPlanStepRange::DumpRanges(Stream *s)
+{
+    size_t num_ranges = m_address_ranges.size();
+    if (num_ranges == 1)
+    {
+        m_address_ranges[0].Dump (s, &m_thread.GetProcess().GetTarget(), Address::DumpStyleLoadAddress);
+    }
+    else
+    {
+        for (size_t i = 0; i < num_ranges; i++)
+        {
+            s->PutCString("%d: ");
+            m_address_ranges[i].Dump (s, &m_thread.GetProcess().GetTarget(), Address::DumpStyleLoadAddress);
+        }
+    }
+}
+
 bool
 ThreadPlanStepRange::InRange ()
 {
@@ -105,7 +133,13 @@
 
     lldb::addr_t pc_load_addr = m_thread.GetRegisterContext()->GetPC();
 
-    ret_value = m_address_range.ContainsLoadAddress(pc_load_addr, &m_thread.GetProcess().GetTarget());
+    size_t num_ranges = m_address_ranges.size();
+    for (size_t i = 0; i < num_ranges; i++)
+    {
+        ret_value = m_address_ranges[i].ContainsLoadAddress(pc_load_addr, &m_thread.GetProcess().GetTarget());
+        if (ret_value)
+            break;
+    }
     
     if (!ret_value)
     {
@@ -120,12 +154,14 @@
                 if (m_addr_context.line_entry.line == new_context.line_entry.line)
                 {
                     m_addr_context = new_context;
-                    m_address_range = m_addr_context.line_entry.range;
+                    AddRange(m_addr_context.line_entry.range);
                     ret_value = true;
                     if (log)
                     {
                         StreamString s;
-                        m_address_range.Dump (&s, &m_thread.GetProcess().GetTarget(), Address::DumpStyleLoadAddress);
+                        m_addr_context.line_entry.range.Dump (&s, 
+                                                              &m_thread.GetProcess().GetTarget(), 
+                                                              Address::DumpStyleLoadAddress);
 
                         log->Printf ("Step range plan stepped to another range of same line: %s", s.GetData());
                     }
@@ -138,12 +174,15 @@
                     // But we probably don't want to be in the middle of a line range, so in that case reset the stepping
                     // range to the line we've stepped into the middle of and continue.
                     m_addr_context = new_context;
-                    m_address_range = m_addr_context.line_entry.range;
+                    m_address_ranges.clear();
+                    AddRange(m_addr_context.line_entry.range);
                     ret_value = true;
                     if (log)
                     {
                         StreamString s;
-                        m_address_range.Dump (&s, &m_thread.GetProcess().GetTarget(), Address::DumpStyleLoadAddress);
+                        m_addr_context.line_entry.range.Dump (&s, 
+                                                              &m_thread.GetProcess().GetTarget(), 
+                                                              Address::DumpStyleLoadAddress);
 
                         log->Printf ("Step range plan stepped to the middle of new line(%d): %s, continuing to clear this line.", 
                                      new_context.line_entry.line, 





More information about the lldb-commits mailing list