31 "Step through trampolines and prologues", thread,
35 m_stop_others(stop_others) {
49 if (return_frame_sp) {
50 m_backstop_addr = return_frame_sp->GetFrameCodeAddress().GetLoadAddress(
57 if (return_bp !=
nullptr) {
66 LLDB_LOGF(log,
"Setting backstop breakpoint %d at address: 0x%" PRIx64,
104 LLDB_LOGF(log,
"Found step through plan from 0x%" PRIx64
": %s",
108 "Couldn't find step through plan from address 0x%" PRIx64
".",
117 s->
Printf(
"Step through");
119 s->
PutCString(
"Stepping through trampoline code from: ");
122 s->
Printf(
" with backstop breakpoint ID: %d at address: ",
126 s->
PutCString(
" unable to set a backstop breakpoint.");
134 "Could not create hardware breakpoint for thread plan.");
140 error->PutCString(
"Could not create backstop breakpoint.");
146 error->PutCString(
"Does not have a subplan.");
236 LLDB_LOGF(log,
"Completed step through step plan.");
258 log->
PutCString(
"ThreadPlanStepThrough hit backstop breakpoint.");
static llvm::raw_ostream & error(Stream &strm)
#define LLDB_LOGF(log,...)
General Outline: A breakpoint has four main parts, a filter, a resolver, the list of breakpoint locat...
void SetBreakpointKind(const char *kind)
Set the "kind" description for a breakpoint.
bool HasResolvedLocations() const
Return whether this breakpoint has any resolved locations.
void SetThreadID(lldb::tid_t thread_id)
Set the valid thread to be checked when the breakpoint is hit.
A plug-in interface definition class for dynamic loaders.
virtual lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread, bool stop_others)=0
Provides a plan to step through the dynamic loader trampoline for the current state of thread.
void PutCString(const char *cstr)
StopPointSiteList< lldb_private::BreakpointSite > & GetBreakpointSiteList()
std::vector< LanguageRuntime * > GetLanguageRuntimes()
Target & GetTarget()
Get the target object pointer for this module.
StopPointSiteSP FindByID(typename StopPointSite::SiteID site_id)
Returns a shared pointer to the site with id site_id.
lldb::break_id_t GetID() const
const char * GetData() const
A stream class that can stream formatted output to a file.
llvm::raw_ostream & AsRawOstream()
Returns a raw_ostream that forwards the data to this Stream object.
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
size_t PutCString(llvm::StringRef cstr)
Output a C string to the stream.
bool RemoveBreakpointByID(lldb::break_id_t break_id)
lldb::BreakpointSP CreateBreakpoint(const FileSpecList *containingModules, const FileSpec &file, uint32_t line_no, uint32_t column, lldb::addr_t offset, LazyBool check_inlines, LazyBool skip_prologue, bool internal, bool request_hardware, LazyBool move_to_nearest_code)
lldb::ThreadPlanSP m_sub_plan_sp
bool MischiefManaged() override
lldb::StateType GetPlanRunState() override
bool DoWillResume(lldb::StateType resume_state, bool current_plan) override
lldb::addr_t m_backstop_addr
bool DoPlanExplainsStop(Event *event_ptr) override
StackID m_return_stack_id
void GetDescription(Stream *s, lldb::DescriptionLevel level) override
Print a description of this thread to the stream s.
void ClearBackstopBreakpoint()
ThreadPlanStepThrough(Thread &thread, StackID &return_stack_id, bool stop_others)
bool StopOthers() override
lldb::addr_t m_start_address
bool HitOurBackstopBreakpoint()
bool ValidatePlan(Stream *error) override
Returns whether this plan could be successfully created.
lldb::break_id_t m_backstop_bkpt_id
bool ShouldStop(Event *event_ptr) override
void LookForPlanToStepThroughFromCurrentPC()
~ThreadPlanStepThrough() override
void PushPlan(lldb::ThreadPlanSP &thread_plan_sp)
void SetPlanComplete(bool success=true)
Thread & GetThread()
Returns the Thread that is using this thread plan.
virtual bool MischiefManaged()
bool m_could_not_resolve_hw_bp
virtual lldb::StackFrameSP GetStackFrameAtIndex(uint32_t idx)
virtual lldb::RegisterContextSP GetRegisterContext()=0
lldb::TargetSP CalculateTarget() override
lldb::ProcessSP GetProcess() const
virtual lldb::StackFrameSP GetFrameWithStackID(const StackID &stack_id)
lldb::StopInfoSP GetStopInfo()
#define LLDB_INVALID_BREAK_ID
#define LLDB_INVALID_ADDRESS
A class that represents a running process on the host machine.
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
void DumpAddress(llvm::raw_ostream &s, uint64_t addr, uint32_t addr_size, const char *prefix=nullptr, const char *suffix=nullptr)
Output an address value to this stream.
std::shared_ptr< lldb_private::StackFrame > StackFrameSP
std::shared_ptr< lldb_private::BreakpointSite > BreakpointSiteSP
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
StateType
Process and Thread States.
@ eStateRunning
Process or thread is running and can't be examined.
std::shared_ptr< lldb_private::StopInfo > StopInfoSP