124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ThreadPlanStepOut.h -------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ThreadPlanStepOut_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ThreadPlanStepOut_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Thread.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlan.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ThreadPlanStepOut : public ThreadPlan 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2543d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham ThreadPlanStepOut (Thread &thread, 2643d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham SymbolContext *addr_context, 2743d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham bool first_insn, 2843d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham bool stop_others, 2943d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham Vote stop_vote, 3043d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham Vote run_vote, 3143d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham uint32_t frame_idx); 3243d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~ThreadPlanStepOut (); 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void GetDescription (Stream *s, lldb::DescriptionLevel level); 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool ValidatePlan (Stream *error); 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool ShouldStop (Event *event_ptr); 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool StopOthers (); 39745ac7a5826fe7c392007941a4046bfb1a8dff81Jim Ingham virtual lldb::StateType GetPlanRunState (); 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool WillStop (); 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool MischiefManaged (); 4243d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham virtual void DidPush(); 4388e3de205708f14431559072ca258899b5ac31ccJim Ingham virtual bool IsPlanStale(); 441586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham 451586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham virtual lldb::ValueObjectSP GetReturnValueObject() 461586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham { 471586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham return m_return_valobj_sp; 481586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham } 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 506507dd90b5d27662537caee49a3a3cc236f85a53Jim Inghamprotected: 517c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham virtual bool DoPlanExplainsStop (Event *event_ptr); 527c79a27b955432dfd3ad9439640f0af2eccf37b8Jim Ingham virtual bool DoWillResume (lldb::StateType resume_state, bool current_plan); 5343d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham bool QueueInlinedStepPlan (bool queue_now); 54441e3b9e8bed8c67afd5e520966d7ca16579eac4Jim Ingham 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContext *m_step_from_context; 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t m_step_from_insn; 58441e3b9e8bed8c67afd5e520966d7ca16579eac4Jim Ingham StackID m_step_out_to_id; 59441e3b9e8bed8c67afd5e520966d7ca16579eac4Jim Ingham StackID m_immediate_step_from_id; 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::break_id_t m_return_bp_id; 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t m_return_addr; 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_first_insn; 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool m_stop_others; 6443d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham lldb::ThreadPlanSP m_step_through_inline_plan_sp; 6543d390617a5a03ff42894fa0ad121b9335fa4dbcJim Ingham lldb::ThreadPlanSP m_step_out_plan_sp; 6652f792329be5db8e38961350589e97e8f2823acdGreg Clayton Function *m_immediate_step_from_function; 671586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham lldb::ValueObjectSP m_return_valobj_sp; 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 69008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham friend lldb::ThreadPlanSP 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Thread::QueueThreadPlanForStepOut (bool abort_other_plans, 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContext *addr_context, 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool first_insn, 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool stop_others, 74b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton Vote stop_vote, 75b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton Vote run_vote, 761ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton uint32_t frame_idx); 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Need an appropriate marker for the current stack so we can tell step out 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // from step in. 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 811586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham void 821586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham CalculateReturnValue(); 831586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepOut); 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ThreadPlanStepOut_h_ 91