AppleThreadPlanStepThroughObjCTrampoline.h revision 745ac7a5826fe7c392007941a4046bfb1a8dff81
1b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham//===-- AppleThreadPlanStepThroughObjCTrampoline.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
10b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#ifndef lldb_AppleThreadPlanStepThroughObjCTrampoline_h_
11b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#define lldb_AppleThreadPlanStepThroughObjCTrampoline_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1754e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton#include "lldb/lldb-types.h"
1854e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton#include "lldb/lldb-enumerations.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlan.h"
20b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#include "AppleObjCTrampolineHandler.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Inghamclass AppleThreadPlanStepThroughObjCTrampoline : public ThreadPlan
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner	//------------------------------------------------------------------
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner	// Constructors and Destructors
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner	//------------------------------------------------------------------
31b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham	AppleThreadPlanStepThroughObjCTrampoline(Thread &thread,
32b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham                                        AppleObjCTrampolineHandler *trampoline_handler,
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        lldb::addr_t args_addr,
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        lldb::addr_t object_ptr,
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        lldb::addr_t class_ptr,
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        lldb::addr_t sel_ptr,
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                        bool stop_others);
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
39b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham	virtual ~AppleThreadPlanStepThroughObjCTrampoline();
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetDescription (Stream *s,
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    lldb::DescriptionLevel level);
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ValidatePlan (Stream *error);
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PlanExplainsStop ();
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual lldb::StateType
53745ac7a5826fe7c392007941a4046bfb1a8dff81Jim Ingham    GetPlanRunState ();
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ShouldStop (Event *event_ptr);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // The base class MischiefManaged does some cleanup - so you have to call it
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // in your MischiefManaged derived class.
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    MischiefManaged ();
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DidPush();
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WillStop();
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner	//------------------------------------------------------------------
73b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham	// Classes that inherit from AppleThreadPlanStepThroughObjCTrampoline can see and modify these
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner	//------------------------------------------------------------------
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner	//------------------------------------------------------------------
78b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham	// For AppleThreadPlanStepThroughObjCTrampoline only
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner	//------------------------------------------------------------------
80b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham    bool m_stop_others;
81b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham    lldb::addr_t m_object_ptr;
82b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham    lldb::addr_t m_class_ptr;
83b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham    lldb::addr_t m_sel_ptr;
84b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadPlanSP m_func_sp;       // This is the function call plan.  We fill it at start, then set it
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                  // to NULL when this plan is done.  That way we know to go to:
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t m_args_addr;     // Stores the address for our step through function result structure.
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadPlanSP m_run_to_sp;     // The plan that runs to the target.
89b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham    AppleObjCTrampolineHandler *m_objc_trampoline_handler;
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ClangFunction *m_impl_function;  // This is a pointer to a impl function that
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                     // is owned by the client that pushes this plan.
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9454e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton} // namespace lldb_private
9554e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton
96b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#endif	// lldb_AppleThreadPlanStepThroughObjCTrampoline_h_
97