summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2015-08-14 01:38:21 +0000
committerJim Ingham <jingham@apple.com>2015-08-14 01:38:21 +0000
commit55828080a0f1c3a74bcdca4b5bd7e007a16293a2 (patch)
treeb87dcefffb13a20fecabc6f4a99cf6fa36918612
parent86d8cf3502e8f95fc0bee2d461b688f286298763 (diff)
downloadbcm5719-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.cpp12
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++;
OpenPOWER on IntegriCloud