1 //===-- JITLoader.h ---------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_TARGET_JITLOADER_H 10 #define LLDB_TARGET_JITLOADER_H 11 12 #include <vector> 13 14 #include "lldb/Core/PluginInterface.h" 15 #include "lldb/Target/JITLoaderList.h" 16 17 namespace lldb_private { 18 19 /// \class JITLoader JITLoader.h "lldb/Target/JITLoader.h" 20 /// A plug-in interface definition class for JIT loaders. 21 /// 22 /// Plugins of this kind listen for code generated at runtime in the target. 23 /// They are very similar to dynamic loader, with the difference that they do 24 /// not have information about the target's dyld and that there may be 25 /// multiple JITLoader plugins per process, while there is at most one 26 /// DynamicLoader. 27 class JITLoader : public PluginInterface { 28 public: 29 /// Find a JIT loader plugin for a given process. 30 /// 31 /// Scans the installed DynamicLoader plug-ins and tries to find all 32 /// applicable instances for the current process. 33 /// 34 /// \param[in] process 35 /// The process for which to try and locate a JIT loader 36 /// plug-in instance. 37 /// 38 static void LoadPlugins(Process *process, lldb_private::JITLoaderList &list); 39 40 /// Construct with a process. 41 JITLoader(Process *process); 42 43 ~JITLoader() override; 44 45 /// Called after attaching a process. 46 /// 47 /// Allow JITLoader plug-ins to execute some code after attaching to a 48 /// process. 49 virtual void DidAttach() = 0; 50 51 /// Called after launching a process. 52 /// 53 /// Allow JITLoader plug-ins to execute some code after the process has 54 /// stopped for the first time on launch. 55 virtual void DidLaunch() = 0; 56 57 /// Called after a new shared object has been loaded so that it can be 58 /// probed for JIT entry point hooks. 59 virtual void ModulesDidLoad(lldb_private::ModuleList &module_list) = 0; 60 61 protected: 62 // Member variables. 63 Process *m_process; 64 }; 65 66 } // namespace lldb_private 67 68 #endif // LLDB_TARGET_JITLOADER_H 69