diff options
author | Jason Molenda <jmolenda@apple.com> | 2015-12-15 00:40:30 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2015-12-15 00:40:30 +0000 |
commit | 25d5b10b229d807b56c47f63809137d737d8c52f (patch) | |
tree | f55aace3963d966dd231128dbff8a950f9fd82ba /lldb/source/Target | |
parent | ef0ef2860df2bdc8de10aa4f485a6541ef5cf87f (diff) | |
download | bcm5719-llvm-25d5b10b229d807b56c47f63809137d737d8c52f.tar.gz bcm5719-llvm-25d5b10b229d807b56c47f63809137d737d8c52f.zip |
When constructing an address range to "step" or "next" through,
find the largest address range (possibly combining multiple
LineEntry's for this line number) that is contiguous.
This allows lldb's fast-step stepping algorithm to potentially
run for a longer address range than if we have to stop at every
LineEntry indicating a subexpression in the source line.
http://reviews.llvm.org/D15407
<rdar://problem/23270882>
llvm-svn: 255590
Diffstat (limited to 'lldb/source/Target')
-rw-r--r-- | lldb/source/Target/Thread.cpp | 39 | ||||
-rw-r--r-- | lldb/source/Target/ThreadPlanStepRange.cpp | 4 |
2 files changed, 39 insertions, 4 deletions
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp index 629943644db..fab5afcf4cc 100644 --- a/lldb/source/Target/Thread.cpp +++ b/lldb/source/Target/Thread.cpp @@ -1535,6 +1535,21 @@ Thread::QueueThreadPlanForStepOverRange(bool abort_other_plans, return thread_plan_sp; } +// Call the QueueThreadPlanForStepOverRange method which takes an address range. +ThreadPlanSP +Thread::QueueThreadPlanForStepOverRange(bool abort_other_plans, + const LineEntry &line_entry, + const SymbolContext &addr_context, + lldb::RunMode stop_other_threads, + LazyBool step_out_avoids_code_withoug_debug_info) +{ + return QueueThreadPlanForStepOverRange (abort_other_plans, + line_entry.GetSameLineContiguousAddressRange(), + addr_context, + stop_other_threads, + step_out_avoids_code_withoug_debug_info); +} + ThreadPlanSP Thread::QueueThreadPlanForStepInRange(bool abort_other_plans, const AddressRange &range, @@ -1559,6 +1574,26 @@ Thread::QueueThreadPlanForStepInRange(bool abort_other_plans, return thread_plan_sp; } +// Call the QueueThreadPlanForStepInRange method which takes an address range. +ThreadPlanSP +Thread::QueueThreadPlanForStepInRange(bool abort_other_plans, + const LineEntry &line_entry, + const SymbolContext &addr_context, + const char *step_in_target, + lldb::RunMode stop_other_threads, + LazyBool step_in_avoids_code_without_debug_info, + LazyBool step_out_avoids_code_without_debug_info) +{ + return QueueThreadPlanForStepInRange (abort_other_plans, + line_entry.GetSameLineContiguousAddressRange(), + addr_context, + step_in_target, + stop_other_threads, + step_in_avoids_code_without_debug_info, + step_out_avoids_code_without_debug_info); +} + + ThreadPlanSP Thread::QueueThreadPlanForStepOut(bool abort_other_plans, SymbolContext *addr_context, @@ -2374,7 +2409,7 @@ Thread::StepIn (bool source_step, { SymbolContext sc(frame_sp->GetSymbolContext(eSymbolContextEverything)); new_plan_sp = QueueThreadPlanForStepInRange (abort_other_plans, - sc.line_entry.range, + sc.line_entry, sc, NULL, run_mode, @@ -2420,7 +2455,7 @@ Thread::StepOver (bool source_step, { SymbolContext sc(frame_sp->GetSymbolContext(eSymbolContextEverything)); new_plan_sp = QueueThreadPlanForStepOverRange (abort_other_plans, - sc.line_entry.range, + sc.line_entry, sc, run_mode, step_out_avoids_code_without_debug_info); diff --git a/lldb/source/Target/ThreadPlanStepRange.cpp b/lldb/source/Target/ThreadPlanStepRange.cpp index 44c990a6130..9bddef3c65a 100644 --- a/lldb/source/Target/ThreadPlanStepRange.cpp +++ b/lldb/source/Target/ThreadPlanStepRange.cpp @@ -162,7 +162,7 @@ ThreadPlanStepRange::InRange () if (m_addr_context.line_entry.line == new_context.line_entry.line) { m_addr_context = new_context; - AddRange(m_addr_context.line_entry.range); + AddRange(m_addr_context.line_entry.GetSameLineContiguousAddressRange()); ret_value = true; if (log) { @@ -181,7 +181,7 @@ ThreadPlanStepRange::InRange () { new_context.line_entry.line = m_addr_context.line_entry.line; m_addr_context = new_context; - AddRange(m_addr_context.line_entry.range); + AddRange(m_addr_context.line_entry.GetSameLineContiguousAddressRange()); ret_value = true; if (log) { |