From 205afe679855a4ce8149cdaa94d3f0868ce796dc Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Fri, 6 Feb 2015 21:38:51 +0000 Subject: Import LLDB as of upstream SVN r225923 (git 2b588ecd) This corresponds with the branchpoint for the 3.6 release. A number of files not required for the FreeBSD build have been removed. Sponsored by: DARPA, AFRL --- source/Target/ThreadPlanStepInstruction.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'source/Target/ThreadPlanStepInstruction.cpp') diff --git a/source/Target/ThreadPlanStepInstruction.cpp b/source/Target/ThreadPlanStepInstruction.cpp index fabf63b1e9d6..0f6d7b78a9ce 100644 --- a/source/Target/ThreadPlanStepInstruction.cpp +++ b/source/Target/ThreadPlanStepInstruction.cpp @@ -150,7 +150,16 @@ ThreadPlanStepInstruction::ShouldStop (Event *event_ptr) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); - StackID cur_frame_zero_id = m_thread.GetStackFrameAtIndex(0)->GetStackID(); + StackFrameSP cur_frame_sp = m_thread.GetStackFrameAtIndex(0); + if (!cur_frame_sp) + { + if (log) + log->Printf ("ThreadPlanStepInstruction couldn't get the 0th frame, stopping."); + SetPlanComplete(); + return true; + } + + StackID cur_frame_zero_id = cur_frame_sp->GetStackID(); if (cur_frame_zero_id == m_stack_id || m_stack_id < cur_frame_zero_id) { @@ -180,6 +189,24 @@ ThreadPlanStepInstruction::ShouldStop (Event *event_ptr) { if (return_frame->GetStackID() != m_parent_frame_id || m_start_has_symbol) { + // next-instruction shouldn't step out of inlined functions. But we may have stepped into a + // real function that starts with an inlined function, and we do want to step out of that... + + if (cur_frame_sp->IsInlined()) + { + StackFrameSP parent_frame_sp = m_thread.GetFrameWithStackID(m_stack_id); + + if(parent_frame_sp && parent_frame_sp->GetConcreteFrameIndex() == cur_frame_sp->GetConcreteFrameIndex()) + { + SetPlanComplete(); + if (log) + { + log->Printf("Frame we stepped into is inlined into the frame we were stepping from, stopping."); + } + return true; + } + } + if (log) { StreamString s; -- cgit v1.2.3