Files
TheRock/compiler/amd-llvm/lldb/source/Target/ThreadPlanCallOnFunctionExit.cpp
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

98 lines
3.3 KiB
C++

//===-- ThreadPlanCallOnFunctionExit.cpp ----------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "lldb/Target/ThreadPlanCallOnFunctionExit.h"
using namespace lldb;
using namespace lldb_private;
ThreadPlanCallOnFunctionExit::ThreadPlanCallOnFunctionExit(
Thread &thread, const Callback &callback)
: ThreadPlan(ThreadPlanKind::eKindGeneric, "CallOnFunctionExit", thread,
eVoteNoOpinion, eVoteNoOpinion // TODO check with Jim on these
),
m_callback(callback) {
// We are not a user-generated plan.
SetIsControllingPlan(false);
}
void ThreadPlanCallOnFunctionExit::DidPush() {
// We now want to queue the "step out" thread plan so it executes and
// completes.
// Set stop vote to eVoteNo.
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
0, // frame_idx
status, // status
eLazyBoolCalculate // avoid code w/o debinfo
);
}
// ThreadPlan API
void ThreadPlanCallOnFunctionExit::GetDescription(
Stream *s, lldb::DescriptionLevel level) {
if (!s)
return;
s->Printf("Running until completion of current function, then making "
"callback.");
}
bool ThreadPlanCallOnFunctionExit::ValidatePlan(Stream *error) {
// We'll say we're always good since I don't know what would make this
// invalid.
return true;
}
bool ThreadPlanCallOnFunctionExit::ShouldStop(Event *event_ptr) {
// If this is where we find out that an internal stop came in, then: Check if
// the step-out plan completed. If it did, then we want to run the callback
// here (our reason for living...)
if (m_step_out_threadplan_sp && m_step_out_threadplan_sp->IsPlanComplete()) {
m_callback();
// We no longer need the pointer to the step-out thread plan.
m_step_out_threadplan_sp.reset();
// Indicate that this plan is done and can be discarded.
SetPlanComplete();
// We're done now, but we want to return false so that we don't cause the
// thread to really stop.
}
return false;
}
bool ThreadPlanCallOnFunctionExit::WillStop() {
// The code looks like the return value is ignored via ThreadList::
// ShouldStop(). This is called when we really are going to stop. We don't
// care and don't need to do anything here.
return false;
}
bool ThreadPlanCallOnFunctionExit::DoPlanExplainsStop(Event *event_ptr) {
// We don't ever explain a stop. The only stop that is relevant to us
// directly is the step_out plan we added to do the heavy lifting of getting
// us past the current method.
return false;
}
lldb::StateType ThreadPlanCallOnFunctionExit::GetPlanRunState() {
// This value doesn't matter - we'll never be the top thread plan, so nobody
// will ask us this question.
return eStateRunning;
}