diff options
| author | Jim Ingham <jingham@apple.com> | 2015-08-14 01:38:21 +0000 |
|---|---|---|
| committer | Jim Ingham <jingham@apple.com> | 2015-08-14 01:38:21 +0000 |
| commit | 55828080a0f1c3a74bcdca4b5bd7e007a16293a2 (patch) | |
| tree | b87dcefffb13a20fecabc6f4a99cf6fa36918612 | |
| parent | 86d8cf3502e8f95fc0bee2d461b688f286298763 (diff) | |
| download | bcm5719-llvm-55828080a0f1c3a74bcdca4b5bd7e007a16293a2.tar.gz bcm5719-llvm-55828080a0f1c3a74bcdca4b5bd7e007a16293a2.zip | |
I was assuming that when a bit of inlined code was followed by code from the inlining site, it was going to execute to the inlining site code, but apparently that's not always true. So we need to be a bit more careful getting past the inlining, and use a StepOverRange plan not a RunToAddress plan.
<rdar://problem/22191804>
llvm-svn: 244999
| -rw-r--r-- | lldb/source/Target/ThreadPlanStepOverRange.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lldb/source/Target/ThreadPlanStepOverRange.cpp b/lldb/source/Target/ThreadPlanStepOverRange.cpp index 955b32fcbbc..6e7ee57fc82 100644 --- a/lldb/source/Target/ThreadPlanStepOverRange.cpp +++ b/lldb/source/Target/ThreadPlanStepOverRange.cpp @@ -303,10 +303,14 @@ ThreadPlanStepOverRange::ShouldStop (Event *event_ptr) if (next_line_entry.file == m_addr_context.line_entry.file) { const bool abort_other_plans = false; - const bool stop_other_threads = false; - new_plan_sp = m_thread.QueueThreadPlanForRunToAddress(abort_other_plans, - next_line_address, - stop_other_threads); + const RunMode stop_other_threads = RunMode::eAllThreads; + lldb::addr_t cur_pc = m_thread.GetStackFrameAtIndex(0)->GetRegisterContext()->GetPC(); + AddressRange step_range(cur_pc, next_line_address.GetLoadAddress(&GetTarget()) - cur_pc); + + new_plan_sp = m_thread.QueueThreadPlanForStepOverRange (abort_other_plans, + step_range, + sc, + stop_other_threads); break; } look_ahead_step++; |

