//===-- JITLoader.h ---------------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef liblldb_JITLoader_h_ #define liblldb_JITLoader_h_ #include #include "lldb/Core/PluginInterface.h" #include "lldb/Target/JITLoaderList.h" namespace lldb_private { //---------------------------------------------------------------------- /// @class JITLoader JITLoader.h "lldb/Target/JITLoader.h" /// @brief A plug-in interface definition class for JIT loaders. /// /// Plugins of this kind listen for code generated at runtime in the /// target. They are very similar to dynamic loader, with the difference /// that they do not have information about the target's dyld and /// that there may be multiple JITLoader plugins per process, while /// there is at most one DynamicLoader. //---------------------------------------------------------------------- class JITLoader : public PluginInterface { public: //------------------------------------------------------------------ /// Find a JIT loader plugin for a given process. /// /// Scans the installed DynamicLoader plug-ins and tries to find /// all applicable instances for the current process. /// /// @param[in] process /// The process for which to try and locate a JIT loader /// plug-in instance. /// //------------------------------------------------------------------ static void LoadPlugins (Process *process, lldb_private::JITLoaderList &list); //------------------------------------------------------------------ /// Construct with a process. //------------------------------------------------------------------ JITLoader (Process *process); virtual ~JITLoader (); //------------------------------------------------------------------ /// Called after attaching a process. /// /// Allow JITLoader plug-ins to execute some code after /// attaching to a process. //------------------------------------------------------------------ virtual void DidAttach () = 0; //------------------------------------------------------------------ /// Called after launching a process. /// /// Allow JITLoader plug-ins to execute some code after /// the process has stopped for the first time on launch. //------------------------------------------------------------------ virtual void DidLaunch () = 0; //------------------------------------------------------------------ /// Called after a new shared object has been loaded so that it can /// be probed for JIT entry point hooks. //------------------------------------------------------------------ virtual void ModulesDidLoad (lldb_private::ModuleList &module_list) = 0; protected: //------------------------------------------------------------------ // Member variables. //------------------------------------------------------------------ Process* m_process; }; } // namespace lldb_private #endif // liblldb_JITLoader_h_