-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[lldb][nfc] Remove unused parameters in ThreadPlanStepOut ctor #136161
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
A future patch will need to create a new constructor for this class, and extracting code out of its sole existing constructor will make this easier. This commit creates a helper function for the code computing the target frame to step out to.
A subsequent commit will create a new constructor for ThreadPlanStepOut, which needs to reuse much of the same logic of the existing constructor. This commit places all of that reusable logic into a separate function.
These have been unused for at least a decade.
@llvm/pr-subscribers-lldb Author: Felipe de Azevedo Piovezan (felipepiovezan) ChangesThese have been unused for at least a decade. Full diff: https://github.com/llvm/llvm-project/pull/136161.diff 13 Files Affected:
diff --git a/lldb/include/lldb/API/SBThreadPlan.h b/lldb/include/lldb/API/SBThreadPlan.h
index d02ab80f76a76..9b7ac03d8265c 100644
--- a/lldb/include/lldb/API/SBThreadPlan.h
+++ b/lldb/include/lldb/API/SBThreadPlan.h
@@ -100,6 +100,7 @@ class LLDB_API SBThreadPlan {
lldb::addr_t range_size,
SBError &error);
+ // Note: first_insn is not used.
SBThreadPlan QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,
bool first_insn = false);
SBThreadPlan QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,
diff --git a/lldb/include/lldb/Target/Thread.h b/lldb/include/lldb/Target/Thread.h
index 6ede7fa301a82..1454f2ff4d18a 100644
--- a/lldb/include/lldb/Target/Thread.h
+++ b/lldb/include/lldb/Target/Thread.h
@@ -843,18 +843,6 @@ class Thread : public std::enable_shared_from_this<Thread>,
/// this one.
/// Otherwise this plan will go on the end of the plan stack.
///
- /// \param[in] addr_context
- /// When dealing with stepping through inlined functions the current PC is
- /// not enough information to know
- /// what "step" means. For instance a series of nested inline functions
- /// might start at the same address.
- // The \a addr_context provides the current symbol context the step
- /// is supposed to be out of.
- // FIXME: Currently unused.
- ///
- /// \param[in] first_insn
- /// \b true if this is the first instruction of a function.
- ///
/// \param[in] stop_other_threads
/// \b true if we will stop other threads while we single step this one.
///
@@ -876,9 +864,8 @@ class Thread : public std::enable_shared_from_this<Thread>,
/// A shared pointer to the newly queued thread plan, or nullptr if the
/// plan could not be queued.
virtual lldb::ThreadPlanSP QueueThreadPlanForStepOut(
- bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
- bool stop_other_threads, Vote report_stop_vote, Vote report_run_vote,
- uint32_t frame_idx, Status &status,
+ bool abort_other_plans, bool stop_other_threads, Vote report_stop_vote,
+ Vote report_run_vote, uint32_t frame_idx, Status &status,
LazyBool step_out_avoids_code_without_debug_info = eLazyBoolCalculate);
/// Queue the plan used to step out of the function at the current PC of
@@ -892,18 +879,6 @@ class Thread : public std::enable_shared_from_this<Thread>,
/// this one.
/// Otherwise this plan will go on the end of the plan stack.
///
- /// \param[in] addr_context
- /// When dealing with stepping through inlined functions the current PC is
- /// not enough information to know
- /// what "step" means. For instance a series of nested inline functions
- /// might start at the same address.
- // The \a addr_context provides the current symbol context the step
- /// is supposed to be out of.
- // FIXME: Currently unused.
- ///
- /// \param[in] first_insn
- /// \b true if this is the first instruction of a function.
- ///
/// \param[in] stop_other_threads
/// \b true if we will stop other threads while we single step this one.
///
@@ -940,9 +915,9 @@ class Thread : public std::enable_shared_from_this<Thread>,
/// A shared pointer to the newly queued thread plan, or nullptr if the
/// plan could not be queued.
virtual lldb::ThreadPlanSP QueueThreadPlanForStepOutNoShouldStop(
- bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
- bool stop_other_threads, Vote report_stop_vote, Vote report_run_vote,
- uint32_t frame_idx, Status &status, bool continue_to_next_branch = false);
+ bool abort_other_plans, bool stop_other_threads, Vote report_stop_vote,
+ Vote report_run_vote, uint32_t frame_idx, Status &status,
+ bool continue_to_next_branch = false);
/// Gets the plan used to step through the code that steps from a function
/// call site at the current PC into the actual function call.
diff --git a/lldb/include/lldb/Target/ThreadPlanStepOut.h b/lldb/include/lldb/Target/ThreadPlanStepOut.h
index e414a6e0a2d49..f37d09467dda3 100644
--- a/lldb/include/lldb/Target/ThreadPlanStepOut.h
+++ b/lldb/include/lldb/Target/ThreadPlanStepOut.h
@@ -17,8 +17,7 @@ namespace lldb_private {
class ThreadPlanStepOut : public ThreadPlan, public ThreadPlanShouldStopHere {
public:
- ThreadPlanStepOut(Thread &thread, SymbolContext *addr_context,
- bool first_insn, bool stop_others, Vote report_stop_vote,
+ 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,
@@ -76,9 +75,8 @@ class ThreadPlanStepOut : public ThreadPlan, public ThreadPlanShouldStopHere {
StreamString m_constructor_errors;
friend lldb::ThreadPlanSP Thread::QueueThreadPlanForStepOut(
- bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
- bool stop_others, Vote report_stop_vote, Vote report_run_vote,
- uint32_t frame_idx, Status &status,
+ bool abort_other_plans, bool stop_others, Vote report_stop_vote,
+ Vote report_run_vote, uint32_t frame_idx, Status &status,
LazyBool step_out_avoids_code_without_debug_info);
void SetupAvoidNoDebug(LazyBool step_out_avoids_code_without_debug_info);
diff --git a/lldb/source/API/SBThread.cpp b/lldb/source/API/SBThread.cpp
index d9469fc1390d6..315ca201830a9 100644
--- a/lldb/source/API/SBThread.cpp
+++ b/lldb/source/API/SBThread.cpp
@@ -659,8 +659,8 @@ void SBThread::StepOut(SBError &error) {
const LazyBool avoid_no_debug = eLazyBoolCalculate;
Status new_plan_status;
ThreadPlanSP new_plan_sp(thread->QueueThreadPlanForStepOut(
- abort_other_plans, nullptr, false, stop_other_threads, eVoteYes,
- eVoteNoOpinion, 0, new_plan_status, avoid_no_debug));
+ abort_other_plans, stop_other_threads, eVoteYes, eVoteNoOpinion, 0,
+ new_plan_status, avoid_no_debug));
if (new_plan_status.Success())
error = ResumeNewPlan(exe_ctx, new_plan_sp.get());
@@ -703,8 +703,8 @@ void SBThread::StepOutOfFrame(SBFrame &sb_frame, SBError &error) {
Status new_plan_status;
ThreadPlanSP new_plan_sp(thread->QueueThreadPlanForStepOut(
- abort_other_plans, nullptr, false, stop_other_threads, eVoteYes,
- eVoteNoOpinion, frame_sp->GetFrameIndex(), new_plan_status));
+ abort_other_plans, stop_other_threads, eVoteYes, eVoteNoOpinion,
+ frame_sp->GetFrameIndex(), new_plan_status));
if (new_plan_status.Success())
error = ResumeNewPlan(exe_ctx, new_plan_sp.get());
diff --git a/lldb/source/API/SBThreadPlan.cpp b/lldb/source/API/SBThreadPlan.cpp
index 083a050de8a38..135ba77a38ace 100644
--- a/lldb/source/API/SBThreadPlan.cpp
+++ b/lldb/source/API/SBThreadPlan.cpp
@@ -312,8 +312,8 @@ SBThreadPlan::QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,
Status plan_status;
SBThreadPlan plan =
SBThreadPlan(thread_plan_sp->GetThread().QueueThreadPlanForStepOut(
- false, &sc, first_insn, false, eVoteYes, eVoteNoOpinion,
- frame_idx_to_step_to, plan_status));
+ false, false, eVoteYes, eVoteNoOpinion, frame_idx_to_step_to,
+ plan_status));
if (plan_status.Fail())
error.SetErrorString(plan_status.AsCString());
diff --git a/lldb/source/Commands/CommandObjectThread.cpp b/lldb/source/Commands/CommandObjectThread.cpp
index 224c523e69c5c..e8224b8fe0f1e 100644
--- a/lldb/source/Commands/CommandObjectThread.cpp
+++ b/lldb/source/Commands/CommandObjectThread.cpp
@@ -558,8 +558,7 @@ class CommandObjectThreadStepWithTypeAndScope : public CommandObjectParsed {
true, abort_other_plans, bool_stop_other_threads, new_plan_status);
} else if (m_step_type == eStepTypeOut) {
new_plan_sp = thread->QueueThreadPlanForStepOut(
- abort_other_plans, nullptr, false, bool_stop_other_threads, eVoteYes,
- eVoteNoOpinion,
+ abort_other_plans, bool_stop_other_threads, eVoteYes, eVoteNoOpinion,
thread->GetSelectedFrameIndex(DoNoSelectMostRelevantFrame),
new_plan_status, m_options.m_step_out_avoid_no_debug);
} else if (m_step_type == eStepTypeScripted) {
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
index 4093cbdd955f7..a24240fc7cf31 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
@@ -161,11 +161,10 @@ bool AppleThreadPlanStepThroughObjCTrampoline::ShouldStop(Event *event_ptr) {
eSymbolContextEverything);
Status status;
const bool abort_other_plans = false;
- const bool first_insn = true;
const uint32_t frame_idx = 0;
m_run_to_sp = GetThread().QueueThreadPlanForStepOutNoShouldStop(
- abort_other_plans, &sc, first_insn, false, eVoteNoOpinion,
- eVoteNoOpinion, frame_idx, status);
+ abort_other_plans, false, eVoteNoOpinion, eVoteNoOpinion, frame_idx,
+ status);
if (m_run_to_sp && status.Success())
m_run_to_sp->SetPrivate(true);
return false;
@@ -242,8 +241,7 @@ AppleThreadPlanStepThroughDirectDispatch ::
AppleThreadPlanStepThroughDirectDispatch(
Thread &thread, AppleObjCTrampolineHandler &handler,
llvm::StringRef dispatch_func_name)
- : ThreadPlanStepOut(thread, nullptr, true /* first instruction */, false,
- eVoteNoOpinion, eVoteNoOpinion,
+ : ThreadPlanStepOut(thread, false, eVoteNoOpinion, eVoteNoOpinion,
0 /* Step out of zeroth frame */,
eLazyBoolNo /* Our parent plan will decide this
when we are done */
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index accc4708c24e1..ddd4315b6cc9e 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -1341,28 +1341,26 @@ ThreadPlanSP Thread::QueueThreadPlanForStepInRange(
}
ThreadPlanSP Thread::QueueThreadPlanForStepOut(
- bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
- bool stop_other_threads, Vote report_stop_vote, Vote report_run_vote,
- uint32_t frame_idx, Status &status,
+ bool abort_other_plans, bool stop_other_threads, Vote report_stop_vote,
+ Vote report_run_vote, uint32_t frame_idx, Status &status,
LazyBool step_out_avoids_code_without_debug_info) {
ThreadPlanSP thread_plan_sp(new ThreadPlanStepOut(
- *this, addr_context, first_insn, stop_other_threads, report_stop_vote,
- report_run_vote, frame_idx, step_out_avoids_code_without_debug_info));
+ *this, stop_other_threads, report_stop_vote, report_run_vote, frame_idx,
+ step_out_avoids_code_without_debug_info));
status = QueueThreadPlan(thread_plan_sp, abort_other_plans);
return thread_plan_sp;
}
ThreadPlanSP Thread::QueueThreadPlanForStepOutNoShouldStop(
- bool abort_other_plans, SymbolContext *addr_context, bool first_insn,
- bool stop_other_threads, Vote report_stop_vote, Vote report_run_vote,
- uint32_t frame_idx, Status &status, bool continue_to_next_branch) {
+ bool abort_other_plans, bool stop_other_threads, Vote report_stop_vote,
+ Vote report_run_vote, uint32_t frame_idx, Status &status,
+ bool continue_to_next_branch) {
const bool calculate_return_value =
false; // No need to calculate the return value here.
ThreadPlanSP thread_plan_sp(new ThreadPlanStepOut(
- *this, addr_context, first_insn, stop_other_threads, report_stop_vote,
- report_run_vote, frame_idx, eLazyBoolNo, continue_to_next_branch,
- calculate_return_value));
+ *this, stop_other_threads, report_stop_vote, report_run_vote, frame_idx,
+ eLazyBoolNo, continue_to_next_branch, calculate_return_value));
ThreadPlanStepOut *new_plan =
static_cast<ThreadPlanStepOut *>(thread_plan_sp.get());
@@ -2035,13 +2033,12 @@ Status Thread::StepOut(uint32_t frame_idx) {
Status error;
Process *process = GetProcess().get();
if (StateIsStoppedState(process->GetState(), true)) {
- const bool first_instruction = false;
const bool stop_other_threads = false;
const bool abort_other_plans = false;
- ThreadPlanSP new_plan_sp(QueueThreadPlanForStepOut(
- abort_other_plans, nullptr, first_instruction, stop_other_threads,
- eVoteYes, eVoteNoOpinion, frame_idx, error));
+ ThreadPlanSP new_plan_sp =
+ QueueThreadPlanForStepOut(abort_other_plans, stop_other_threads,
+ eVoteYes, eVoteNoOpinion, frame_idx, error);
new_plan_sp->SetIsControllingPlan(true);
new_plan_sp->SetOkayToDiscard(false);
diff --git a/lldb/source/Target/ThreadPlanCallOnFunctionExit.cpp b/lldb/source/Target/ThreadPlanCallOnFunctionExit.cpp
index 4bccf96d721b8..c8783b59fd12f 100644
--- a/lldb/source/Target/ThreadPlanCallOnFunctionExit.cpp
+++ b/lldb/source/Target/ThreadPlanCallOnFunctionExit.cpp
@@ -29,8 +29,6 @@ void ThreadPlanCallOnFunctionExit::DidPush() {
Status status;
m_step_out_threadplan_sp = GetThread().QueueThreadPlanForStepOut(
false, // abort other plans
- nullptr, // addr_context
- true, // first instruction
true, // stop other threads
eVoteNo, // do not say "we're stopping"
eVoteNoOpinion, // don't care about run state broadcasting
diff --git a/lldb/source/Target/ThreadPlanShouldStopHere.cpp b/lldb/source/Target/ThreadPlanShouldStopHere.cpp
index d2cca49987f0f..153de77ebf596 100644
--- a/lldb/source/Target/ThreadPlanShouldStopHere.cpp
+++ b/lldb/source/Target/ThreadPlanShouldStopHere.cpp
@@ -176,8 +176,8 @@ ThreadPlanSP ThreadPlanShouldStopHere::DefaultStepFromHereCallback(
if (!return_plan_sp)
return_plan_sp =
current_plan->GetThread().QueueThreadPlanForStepOutNoShouldStop(
- false, nullptr, true, stop_others, eVoteNo, eVoteNoOpinion,
- frame_index, status, true);
+ false, stop_others, eVoteNo, eVoteNoOpinion, frame_index, status,
+ true);
return return_plan_sp;
}
diff --git a/lldb/source/Target/ThreadPlanStepInstruction.cpp b/lldb/source/Target/ThreadPlanStepInstruction.cpp
index 42bee79c42bbd..ff6a11703570c 100644
--- a/lldb/source/Target/ThreadPlanStepInstruction.cpp
+++ b/lldb/source/Target/ThreadPlanStepInstruction.cpp
@@ -198,8 +198,7 @@ bool ThreadPlanStepInstruction::ShouldStop(Event *event_ptr) {
// for now it is safer to run others.
const bool stop_others = false;
thread.QueueThreadPlanForStepOutNoShouldStop(
- false, nullptr, true, stop_others, eVoteNo, eVoteNoOpinion, 0,
- m_status);
+ false, stop_others, eVoteNo, eVoteNoOpinion, 0, m_status);
return false;
} else {
if (log) {
diff --git a/lldb/source/Target/ThreadPlanStepOut.cpp b/lldb/source/Target/ThreadPlanStepOut.cpp
index b3c9a790487d4..546405c267601 100644
--- a/lldb/source/Target/ThreadPlanStepOut.cpp
+++ b/lldb/source/Target/ThreadPlanStepOut.cpp
@@ -59,8 +59,8 @@ ComputeTargetFrame(Thread &thread, uint32_t start_frame_idx,
// ThreadPlanStepOut: Step out of the current frame
ThreadPlanStepOut::ThreadPlanStepOut(
- Thread &thread, SymbolContext *context, bool first_insn, bool stop_others,
- Vote report_stop_vote, Vote report_run_vote, uint32_t frame_idx,
+ 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, bool gather_return_value)
: ThreadPlan(ThreadPlan::eKindStepOut, "Step out", thread, report_stop_vote,
@@ -101,7 +101,7 @@ void ThreadPlanStepOut::SetupReturnAddress(
// First queue a plan that gets us to this inlined frame, and when we get
// there we'll queue a second plan that walks us out of this frame.
m_step_out_to_inline_plan_sp = std::make_shared<ThreadPlanStepOut>(
- GetThread(), nullptr, false, m_stop_others, eVoteNoOpinion, eVoteNoOpinion,
+ GetThread(), m_stop_others, eVoteNoOpinion, eVoteNoOpinion,
frame_idx - 1, eLazyBoolNo, continue_to_next_branch);
static_cast<ThreadPlanStepOut *>(m_step_out_to_inline_plan_sp.get())
->SetShouldStopHereCallbacks(nullptr, nullptr);
@@ -113,7 +113,6 @@ void ThreadPlanStepOut::SetupReturnAddress(
}
} else {
// Find the return address and set a breakpoint there:
- // FIXME - can we do this more securely if we know first_insn?
Address return_address(return_frame_sp->GetFrameCodeAddress());
if (continue_to_next_branch) {
diff --git a/lldb/source/Target/ThreadPlanStepOverRange.cpp b/lldb/source/Target/ThreadPlanStepOverRange.cpp
index 643ee827c865c..60a623e603e76 100644
--- a/lldb/source/Target/ThreadPlanStepOverRange.cpp
+++ b/lldb/source/Target/ThreadPlanStepOverRange.cpp
@@ -192,8 +192,7 @@ bool ThreadPlanStepOverRange::ShouldStop(Event *event_ptr) {
if (m_next_branch_bp_sp)
return false;
new_plan_sp = thread.QueueThreadPlanForStepOutNoShouldStop(
- false, nullptr, true, stop_others, eVoteNo, eVoteNoOpinion, 0,
- m_status, true);
+ false, stop_others, eVoteNo, eVoteNoOpinion, 0, m_status, true);
break;
} else {
new_plan_sp = thread.QueueThreadPlanForStepThrough(
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removing the symbol context is fine. I'm not even sure it's necessary - the code that queues up the plan should really be the on to calculate where this should go to, and the plan can then just trust the frame_index it got passed.
The first_insn was there to help the unwinder in the case where you stepped into code with no debug information and the code you stepped to was stripped so we didn't have function bounds. The "step-in" plan could know that it just stepped through an instruction that pushes a frame, so even without function bounds it's a pretty good guess this is the first instruction of a function. That still seems like a useful piece of information.
These have been unused for at least a decade.