diff options
author | Jim Ingham <jingham@apple.com> | 2012-03-01 00:50:50 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2012-03-01 00:50:50 +0000 |
commit | b5c0d1ccbd7e42ea6f26767436d1dc33bee1989f (patch) | |
tree | 023318a13237bc54ad058d61cad776e34ea39a66 /lldb/source/Target/ThreadPlanStepRange.cpp | |
parent | 76e66c31a0481e72d1ff86c56028d850b6c33cff (diff) | |
download | bcm5719-llvm-b5c0d1ccbd7e42ea6f26767436d1dc33bee1989f.tar.gz bcm5719-llvm-b5c0d1ccbd7e42ea6f26767436d1dc33bee1989f.zip |
Convert the thread plans over from using the stack count to do their logic to using StackID's. This
should be more efficient.
llvm-svn: 151780
Diffstat (limited to 'lldb/source/Target/ThreadPlanStepRange.cpp')
-rw-r--r-- | lldb/source/Target/ThreadPlanStepRange.cpp | 70 |
1 files changed, 20 insertions, 50 deletions
diff --git a/lldb/source/Target/ThreadPlanStepRange.cpp b/lldb/source/Target/ThreadPlanStepRange.cpp index 01803a169c1..e67cf28d17a 100644 --- a/lldb/source/Target/ThreadPlanStepRange.cpp +++ b/lldb/source/Target/ThreadPlanStepRange.cpp @@ -43,13 +43,11 @@ ThreadPlanStepRange::ThreadPlanStepRange (ThreadPlanKind kind, m_addr_context (addr_context), 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(); } @@ -199,58 +197,26 @@ ThreadPlanStepRange::InSymbol() // Ideally we should remember the whole stack frame list, and then compare that // to the current list. -bool -ThreadPlanStepRange::FrameIsYounger () +lldb::FrameComparison +ThreadPlanStepRange::CompareCurrentFrameToStartFrame() { - LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); + FrameComparison frame_order; - // FIXME: Might be better to do this by storing the FrameID we started in and seeing if that is still above - // us on the stack. Counting the whole stack could be expensive. + StackID cur_frame_id = m_thread.GetStackFrameAtIndex(0)->GetStackID(); - uint32_t current_depth = m_thread.GetStackFrameCount(); - if (current_depth == m_stack_depth) - { - if (log) - log->Printf ("Step range FrameIsYounger still in start function."); - return false; - } - else if (current_depth < m_stack_depth) - { - if (log) - log->Printf ("Step range FrameIsYounger stepped out: start depth: %d current depth %d.", m_stack_depth, current_depth); - return false; - } - else - { - if (log) - log->Printf ("Step range FrameIsYounger stepped in: start depth: %d current depth %d.", m_stack_depth, current_depth); - return true; - } -} - -bool -ThreadPlanStepRange::FrameIsOlder () -{ - LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); - uint32_t current_depth = m_thread.GetStackFrameCount(); - if (current_depth == m_stack_depth) + if (cur_frame_id == m_stack_id) { - if (log) - log->Printf ("Step range FrameIsOlder still in start function."); - return false; + frame_order = eFrameCompareEqual; } - else if (current_depth < m_stack_depth) + else if (cur_frame_id < m_stack_id) { - if (log) - log->Printf ("Step range FrameIsOlder stepped out: start depth: %d current depth %d.", m_stack_depth, current_depth); - return true; + frame_order = eFrameCompareYounger; } else { - if (log) - log->Printf ("Step range FrameIsOlder stepped in: start depth: %d current depth %d.", m_stack_depth, current_depth); - return false; + frame_order = eFrameCompareOlder; } + return frame_order; } bool @@ -285,15 +251,19 @@ ThreadPlanStepRange::MischiefManaged () { done = false; } - else if (!FrameIsOlder()) + else { - if (m_no_more_plans) - done = true; + FrameComparison frame_order = CompareCurrentFrameToStartFrame(); + if (frame_order != eFrameCompareOlder) + { + if (m_no_more_plans) + done = true; + else + done = false; + } else - done = false; + done = true; } - else - done = true; } if (done) |