ExecutionContextScope.h revision a830adbcd63d1995a01e6e18da79893c1426ca43
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===-- ExecutionContextScope.h ---------------------------------*- C++ -*-===//
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//                     The LLVM Compiler Infrastructure
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// License. See LICENSE.TXT for details.
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===//
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef liblldb_ExecutionContextScope_h_
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define liblldb_ExecutionContextScope_h_
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// C Includes
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// C++ Includes
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Other libraries and framework includes
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Project includes
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "lldb/lldb-private.h"
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace lldb_private {
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)//----------------------------------------------------------------------
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// @class ExecutionContextScope ExecutionContextScope.h "lldb/Symbol/ExecutionContextScope.h"
23a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)/// @brief Inherit from this if your object can reconstruct its
24a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)///        execution context.
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)///
26c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/// Many objects that have pointers back to parent execution context
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// objects can inherit from this pure virtual class can reconstruct
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// their execution context without having to keep a complete
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// ExecutionContext object in the object state. Examples of these
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// objects include: Process, Thread, RegisterContext and StackFrame.
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)///
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// Bbjects can contain a valid pointer to an instance of this so they
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// can reconstruct the execution context.
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)///
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// Objects that adhere to this protocol can reconstruct enough of a
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// execution context to allow functions that take a execution contexts
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// to be called.
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//----------------------------------------------------------------------
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ExecutionContextScope
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Target *
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CalculateTarget () = 0;
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Process *
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CalculateProcess () = 0;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Thread *
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CalculateThread () = 0;
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual StackFrame *
527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    CalculateStackFrame () = 0;
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //------------------------------------------------------------------
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /// Reconstruct the object's execution context into \a sc.
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ///
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /// The object should fill in as much of the ExecutionContextScope as it
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /// can so function calls that require a execution context can be made
597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /// for the given object.
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ///
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /// @param[out] exe_ctx
627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ///     A reference to an execution context object that gets filled
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ///     in.
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //------------------------------------------------------------------
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CalculateExecutionContext (ExecutionContext &exe_ctx) = 0;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace lldb_private
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif  // liblldb_ExecutionContextScope_h_
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)