]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/JITLoader.h
Update Makefiles and other build glue for llvm/clang 3.7.0, as of trunk
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Target / JITLoader.h
1 //===-- JITLoader.h ---------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_JITLoader_h_
11 #define liblldb_JITLoader_h_
12
13 #include <vector>
14
15 #include "lldb/Core/PluginInterface.h"
16 #include "lldb/Target/JITLoaderList.h"
17
18 namespace lldb_private {
19
20 //----------------------------------------------------------------------
21 /// @class JITLoader JITLoader.h "lldb/Target/JITLoader.h"
22 /// @brief A plug-in interface definition class for JIT loaders.
23 ///
24 /// Plugins of this kind listen for code generated at runtime in the 
25 /// target. They are very similar to dynamic loader, with the difference
26 /// that they do not have information about the target's dyld and
27 /// that there may be multiple JITLoader plugins per process, while 
28 /// there is at most one DynamicLoader. 
29 //----------------------------------------------------------------------
30 class JITLoader :
31     public PluginInterface
32 {
33 public:
34     //------------------------------------------------------------------
35     /// Find a JIT loader plugin for a given process.
36     ///
37     /// Scans the installed DynamicLoader plug-ins and tries to find
38     /// all applicable instances for the current process.
39     ///
40     /// @param[in] process
41     ///     The process for which to try and locate a JIT loader
42     ///     plug-in instance.
43     ///
44     //------------------------------------------------------------------
45     static void 
46     LoadPlugins (Process *process, lldb_private::JITLoaderList &list);
47
48     //------------------------------------------------------------------
49     /// Construct with a process.
50     //------------------------------------------------------------------
51     JITLoader (Process *process);
52
53     virtual 
54     ~JITLoader ();
55
56     //------------------------------------------------------------------
57     /// Called after attaching a process.
58     ///
59     /// Allow JITLoader plug-ins to execute some code after
60     /// attaching to a process.
61     //------------------------------------------------------------------
62     virtual void
63     DidAttach () = 0;
64
65     //------------------------------------------------------------------
66     /// Called after launching a process.
67     ///
68     /// Allow JITLoader plug-ins to execute some code after
69     /// the process has stopped for the first time on launch.
70     //------------------------------------------------------------------
71     virtual void
72     DidLaunch () = 0;
73
74     //------------------------------------------------------------------
75     /// Called after a new shared object has been loaded so that it can
76     /// be probed for JIT entry point hooks.
77     //------------------------------------------------------------------
78     virtual void
79     ModulesDidLoad (lldb_private::ModuleList &module_list) = 0;
80
81 protected:
82     //------------------------------------------------------------------
83     // Member variables.
84     //------------------------------------------------------------------
85     Process* m_process;
86 };
87
88 } // namespace lldb_private
89
90 #endif // liblldb_JITLoader_h_