1254721Semaste//===-- ThreadPlanStepOut.h -------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_ThreadPlanStepOut_h_ 11254721Semaste#define liblldb_ThreadPlanStepOut_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste// Other libraries and framework includes 16254721Semaste// Project includes 17254721Semaste#include "lldb/Target/Thread.h" 18254721Semaste#include "lldb/Target/ThreadPlan.h" 19254721Semaste 20254721Semastenamespace lldb_private { 21254721Semaste 22254721Semasteclass ThreadPlanStepOut : public ThreadPlan 23254721Semaste{ 24254721Semastepublic: 25254721Semaste ThreadPlanStepOut (Thread &thread, 26254721Semaste SymbolContext *addr_context, 27254721Semaste bool first_insn, 28254721Semaste bool stop_others, 29254721Semaste Vote stop_vote, 30254721Semaste Vote run_vote, 31254721Semaste uint32_t frame_idx); 32254721Semaste 33254721Semaste virtual ~ThreadPlanStepOut (); 34254721Semaste 35254721Semaste virtual void GetDescription (Stream *s, lldb::DescriptionLevel level); 36254721Semaste virtual bool ValidatePlan (Stream *error); 37254721Semaste virtual bool ShouldStop (Event *event_ptr); 38254721Semaste virtual bool StopOthers (); 39254721Semaste virtual lldb::StateType GetPlanRunState (); 40254721Semaste virtual bool WillStop (); 41254721Semaste virtual bool MischiefManaged (); 42254721Semaste virtual void DidPush(); 43254721Semaste virtual bool IsPlanStale(); 44254721Semaste 45254721Semaste virtual lldb::ValueObjectSP GetReturnValueObject() 46254721Semaste { 47254721Semaste return m_return_valobj_sp; 48254721Semaste } 49254721Semaste 50254721Semasteprotected: 51254721Semaste virtual bool DoPlanExplainsStop (Event *event_ptr); 52254721Semaste virtual bool DoWillResume (lldb::StateType resume_state, bool current_plan); 53254721Semaste bool QueueInlinedStepPlan (bool queue_now); 54254721Semaste 55254721Semasteprivate: 56254721Semaste SymbolContext *m_step_from_context; 57254721Semaste lldb::addr_t m_step_from_insn; 58254721Semaste StackID m_step_out_to_id; 59254721Semaste StackID m_immediate_step_from_id; 60254721Semaste lldb::break_id_t m_return_bp_id; 61254721Semaste lldb::addr_t m_return_addr; 62254721Semaste bool m_first_insn; 63254721Semaste bool m_stop_others; 64254721Semaste lldb::ThreadPlanSP m_step_through_inline_plan_sp; 65254721Semaste lldb::ThreadPlanSP m_step_out_plan_sp; 66254721Semaste Function *m_immediate_step_from_function; 67254721Semaste lldb::ValueObjectSP m_return_valobj_sp; 68254721Semaste 69254721Semaste friend lldb::ThreadPlanSP 70254721Semaste Thread::QueueThreadPlanForStepOut (bool abort_other_plans, 71254721Semaste SymbolContext *addr_context, 72254721Semaste bool first_insn, 73254721Semaste bool stop_others, 74254721Semaste Vote stop_vote, 75254721Semaste Vote run_vote, 76254721Semaste uint32_t frame_idx); 77254721Semaste 78254721Semaste // Need an appropriate marker for the current stack so we can tell step out 79254721Semaste // from step in. 80254721Semaste 81254721Semaste void 82254721Semaste CalculateReturnValue(); 83254721Semaste 84254721Semaste DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepOut); 85254721Semaste 86254721Semaste}; 87254721Semaste 88254721Semaste} // namespace lldb_private 89254721Semaste 90254721Semaste#endif // liblldb_ThreadPlanStepOut_h_ 91