[Lldb-commits] [lldb] r244999 - 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.

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 13 18:38:21 PDT 2015


Author: jingham
Date: Thu Aug 13 20:38:21 2015
New Revision: 244999

URL: http://llvm.org/viewvc/llvm-project?rev=244999&view=rev
Log:
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>

Modified:
    lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp

Modified: lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp?rev=244999&r1=244998&r2=244999&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp (original)
+++ lldb/trunk/source/Target/ThreadPlanStepOverRange.cpp Thu Aug 13 20:38:21 2015
@@ -303,10 +303,14 @@ ThreadPlanStepOverRange::ShouldStop (Eve
                                         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++;




More information about the lldb-commits mailing list