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)