llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Felipe de Azevedo Piovezan (felipepiovezan) <details> <summary>Changes</summary> The function QueueThreadPlanForStepOutNoShouldStop has the semantics of "go this parent frame"; ThreadPlanStepOut needs to respect that, not skipping over any frames it finds uninteresting. This commit creates a constructor that respects such instruction. --- Full diff: https://github.com/llvm/llvm-project/pull/136163.diff 3 Files Affected: - (modified) lldb/include/lldb/Target/ThreadPlanStepOut.h (+9) - (modified) lldb/source/Target/Thread.cpp (+1-1) - (modified) lldb/source/Target/ThreadPlanStepOut.cpp (+22) ``````````diff diff --git a/lldb/include/lldb/Target/ThreadPlanStepOut.h b/lldb/include/lldb/Target/ThreadPlanStepOut.h index f37d09467dda3..bc106380bca5c 100644 --- a/lldb/include/lldb/Target/ThreadPlanStepOut.h +++ b/lldb/include/lldb/Target/ThreadPlanStepOut.h @@ -17,12 +17,21 @@ namespace lldb_private { class ThreadPlanStepOut : public ThreadPlan, public ThreadPlanShouldStopHere { public: + /// Creates a thread plan to step out from frame_idx, skipping parent frames + /// that artificial and hidden frames. Also skips frames without debug info + /// based on step_out_avoids_code_without_debug_info. ThreadPlanStepOut(Thread &thread, bool stop_others, Vote report_stop_vote, Vote report_run_vote, uint32_t frame_idx, LazyBool step_out_avoids_code_without_debug_info, bool continue_to_next_branch = false, bool gather_return_value = true); + /// Creates a thread plan to step out from frame_idx to frame_idx + 1. + ThreadPlanStepOut(Thread &thread, bool stop_others, Vote report_stop_vote, + Vote report_run_vote, uint32_t frame_idx, + bool continue_to_next_branch = false, + bool gather_return_value = true); + ~ThreadPlanStepOut() override; void GetDescription(Stream *s, lldb::DescriptionLevel level) override; diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp index ddd4315b6cc9e..1d941a3614275 100644 --- a/lldb/source/Target/Thread.cpp +++ b/lldb/source/Target/Thread.cpp @@ -1360,7 +1360,7 @@ ThreadPlanSP Thread::QueueThreadPlanForStepOutNoShouldStop( false; // No need to calculate the return value here. ThreadPlanSP thread_plan_sp(new ThreadPlanStepOut( *this, stop_other_threads, report_stop_vote, report_run_vote, frame_idx, - eLazyBoolNo, continue_to_next_branch, calculate_return_value)); + continue_to_next_branch, calculate_return_value)); ThreadPlanStepOut *new_plan = static_cast<ThreadPlanStepOut *>(thread_plan_sp.get()); diff --git a/lldb/source/Target/ThreadPlanStepOut.cpp b/lldb/source/Target/ThreadPlanStepOut.cpp index 546405c267601..c7da0e2be89b4 100644 --- a/lldb/source/Target/ThreadPlanStepOut.cpp +++ b/lldb/source/Target/ThreadPlanStepOut.cpp @@ -83,6 +83,28 @@ ThreadPlanStepOut::ThreadPlanStepOut( frame_idx, continue_to_next_branch); } +ThreadPlanStepOut::ThreadPlanStepOut(Thread &thread, bool stop_others, + Vote report_stop_vote, + Vote report_run_vote, uint32_t frame_idx, + bool continue_to_next_branch, + bool gather_return_value) + : ThreadPlan(ThreadPlan::eKindStepOut, "Step out", thread, report_stop_vote, + report_run_vote), + ThreadPlanShouldStopHere(this), m_return_bp_id(LLDB_INVALID_BREAK_ID), + m_return_addr(LLDB_INVALID_ADDRESS), m_stop_others(stop_others), + m_immediate_step_from_function(nullptr), + m_calculate_return_value(gather_return_value) { + SetFlagsToDefault(); + m_step_from_insn = thread.GetRegisterContext()->GetPC(0); + + StackFrameSP return_frame_sp = thread.GetStackFrameAtIndex(frame_idx + 1); + StackFrameSP immediate_return_from_sp = + thread.GetStackFrameAtIndex(frame_idx); + + SetupReturnAddress(return_frame_sp, immediate_return_from_sp, frame_idx, + continue_to_next_branch); +} + void ThreadPlanStepOut::SetupReturnAddress( StackFrameSP return_frame_sp, StackFrameSP immediate_return_from_sp, uint32_t frame_idx, bool continue_to_next_branch) { `````````` </details> https://github.com/llvm/llvm-project/pull/136163 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits