• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- PluginManager.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 
11 #ifndef liblldb_PluginManager_h_
12 #define liblldb_PluginManager_h_
13 
14 #include "lldb/lldb-private.h"
15 #include "lldb/Host/FileSpec.h"
16 
17 namespace lldb_private {
18 
19 class PluginManager
20 {
21 public:
22     static void
23     Initialize ();
24 
25     static void
26     Terminate ();
27 
28     //------------------------------------------------------------------
29     // ABI
30     //------------------------------------------------------------------
31     static bool
32     RegisterPlugin (const ConstString &name,
33                     const char *description,
34                     ABICreateInstance create_callback);
35 
36     static bool
37     UnregisterPlugin (ABICreateInstance create_callback);
38 
39     static ABICreateInstance
40     GetABICreateCallbackAtIndex (uint32_t idx);
41 
42     static ABICreateInstance
43     GetABICreateCallbackForPluginName (const ConstString &name);
44 
45 
46     //------------------------------------------------------------------
47     // Disassembler
48     //------------------------------------------------------------------
49     static bool
50     RegisterPlugin (const ConstString &name,
51                     const char *description,
52                     DisassemblerCreateInstance create_callback);
53 
54     static bool
55     UnregisterPlugin (DisassemblerCreateInstance create_callback);
56 
57     static DisassemblerCreateInstance
58     GetDisassemblerCreateCallbackAtIndex (uint32_t idx);
59 
60     static DisassemblerCreateInstance
61     GetDisassemblerCreateCallbackForPluginName (const ConstString &name);
62 
63 
64     //------------------------------------------------------------------
65     // DynamicLoader
66     //------------------------------------------------------------------
67     static bool
68     RegisterPlugin (const ConstString &name,
69                     const char *description,
70                     DynamicLoaderCreateInstance create_callback,
71                     DebuggerInitializeCallback debugger_init_callback = NULL);
72 
73     static bool
74     UnregisterPlugin (DynamicLoaderCreateInstance create_callback);
75 
76     static DynamicLoaderCreateInstance
77     GetDynamicLoaderCreateCallbackAtIndex (uint32_t idx);
78 
79     static DynamicLoaderCreateInstance
80     GetDynamicLoaderCreateCallbackForPluginName (const ConstString &name);
81 
82     //------------------------------------------------------------------
83     // EmulateInstruction
84     //------------------------------------------------------------------
85     static bool
86     RegisterPlugin (const ConstString &name,
87                     const char *description,
88                     EmulateInstructionCreateInstance create_callback);
89 
90     static bool
91     UnregisterPlugin (EmulateInstructionCreateInstance create_callback);
92 
93     static EmulateInstructionCreateInstance
94     GetEmulateInstructionCreateCallbackAtIndex (uint32_t idx);
95 
96     static EmulateInstructionCreateInstance
97     GetEmulateInstructionCreateCallbackForPluginName (const ConstString &name);
98 
99     //------------------------------------------------------------------
100     // OperatingSystem
101     //------------------------------------------------------------------
102     static bool
103     RegisterPlugin (const ConstString &name,
104                     const char *description,
105                     OperatingSystemCreateInstance create_callback);
106 
107     static bool
108     UnregisterPlugin (OperatingSystemCreateInstance create_callback);
109 
110     static OperatingSystemCreateInstance
111     GetOperatingSystemCreateCallbackAtIndex (uint32_t idx);
112 
113     static OperatingSystemCreateInstance
114     GetOperatingSystemCreateCallbackForPluginName (const ConstString &name);
115 
116     //------------------------------------------------------------------
117     // LanguageRuntime
118     //------------------------------------------------------------------
119     static bool
120     RegisterPlugin (const ConstString &name,
121                     const char *description,
122                     LanguageRuntimeCreateInstance create_callback);
123 
124     static bool
125     UnregisterPlugin (LanguageRuntimeCreateInstance create_callback);
126 
127     static LanguageRuntimeCreateInstance
128     GetLanguageRuntimeCreateCallbackAtIndex (uint32_t idx);
129 
130     static LanguageRuntimeCreateInstance
131     GetLanguageRuntimeCreateCallbackForPluginName (const ConstString &name);
132 
133 
134     //------------------------------------------------------------------
135     // ObjectFile
136     //------------------------------------------------------------------
137     static bool
138     RegisterPlugin (const ConstString &name,
139                     const char *description,
140                     ObjectFileCreateInstance create_callback,
141                     ObjectFileCreateMemoryInstance create_memory_callback,
142                     ObjectFileGetModuleSpecifications get_module_specifications);
143 
144     static bool
145     UnregisterPlugin (ObjectFileCreateInstance create_callback);
146 
147     static ObjectFileCreateInstance
148     GetObjectFileCreateCallbackAtIndex (uint32_t idx);
149 
150     static ObjectFileCreateMemoryInstance
151     GetObjectFileCreateMemoryCallbackAtIndex (uint32_t idx);
152 
153     static ObjectFileGetModuleSpecifications
154     GetObjectFileGetModuleSpecificationsCallbackAtIndex (uint32_t idx);
155 
156     static ObjectFileCreateInstance
157     GetObjectFileCreateCallbackForPluginName (const ConstString &name);
158 
159     static ObjectFileCreateMemoryInstance
160     GetObjectFileCreateMemoryCallbackForPluginName (const ConstString &name);
161 
162 
163     //------------------------------------------------------------------
164     // ObjectContainer
165     //------------------------------------------------------------------
166     static bool
167     RegisterPlugin (const ConstString &name,
168                     const char *description,
169                     ObjectContainerCreateInstance create_callback,
170                     ObjectFileGetModuleSpecifications get_module_specifications);
171 
172     static bool
173     UnregisterPlugin (ObjectContainerCreateInstance create_callback);
174 
175     static ObjectContainerCreateInstance
176     GetObjectContainerCreateCallbackAtIndex (uint32_t idx);
177 
178     static ObjectContainerCreateInstance
179     GetObjectContainerCreateCallbackForPluginName (const ConstString &name);
180 
181     static ObjectFileGetModuleSpecifications
182     GetObjectContainerGetModuleSpecificationsCallbackAtIndex (uint32_t idx);
183 
184     //------------------------------------------------------------------
185     // LogChannel
186     //------------------------------------------------------------------
187     static bool
188     RegisterPlugin (const ConstString &name,
189                     const char *description,
190                     LogChannelCreateInstance create_callback);
191 
192     static bool
193     UnregisterPlugin (LogChannelCreateInstance create_callback);
194 
195     static LogChannelCreateInstance
196     GetLogChannelCreateCallbackAtIndex (uint32_t idx);
197 
198     static LogChannelCreateInstance
199     GetLogChannelCreateCallbackForPluginName (const ConstString &name);
200 
201     static const char *
202     GetLogChannelCreateNameAtIndex (uint32_t idx);
203 
204     //------------------------------------------------------------------
205     // Platform
206     //------------------------------------------------------------------
207     static bool
208     RegisterPlugin (const ConstString &name,
209                     const char *description,
210                     PlatformCreateInstance create_callback,
211                     DebuggerInitializeCallback debugger_init_callback = NULL);
212 
213     static bool
214     UnregisterPlugin (PlatformCreateInstance create_callback);
215 
216     static PlatformCreateInstance
217     GetPlatformCreateCallbackAtIndex (uint32_t idx);
218 
219     static PlatformCreateInstance
220     GetPlatformCreateCallbackForPluginName (const ConstString &name);
221 
222     static const char *
223     GetPlatformPluginNameAtIndex (uint32_t idx);
224 
225     static const char *
226     GetPlatformPluginDescriptionAtIndex (uint32_t idx);
227 
228     static size_t
229     AutoCompletePlatformName (const char *partial_name,
230                               StringList &matches);
231     //------------------------------------------------------------------
232     // Process
233     //------------------------------------------------------------------
234     static bool
235     RegisterPlugin (const ConstString &name,
236                     const char *description,
237                     ProcessCreateInstance create_callback,
238                     DebuggerInitializeCallback debugger_init_callback = NULL);
239 
240     static bool
241     UnregisterPlugin (ProcessCreateInstance create_callback);
242 
243     static ProcessCreateInstance
244     GetProcessCreateCallbackAtIndex (uint32_t idx);
245 
246     static ProcessCreateInstance
247     GetProcessCreateCallbackForPluginName (const ConstString &name);
248 
249     static const char *
250     GetProcessPluginNameAtIndex (uint32_t idx);
251 
252     static const char *
253     GetProcessPluginDescriptionAtIndex (uint32_t idx);
254 
255     //------------------------------------------------------------------
256     // SymbolFile
257     //------------------------------------------------------------------
258     static bool
259     RegisterPlugin (const ConstString &name,
260                     const char *description,
261                     SymbolFileCreateInstance create_callback);
262 
263     static bool
264     UnregisterPlugin (SymbolFileCreateInstance create_callback);
265 
266     static SymbolFileCreateInstance
267     GetSymbolFileCreateCallbackAtIndex (uint32_t idx);
268 
269     static SymbolFileCreateInstance
270     GetSymbolFileCreateCallbackForPluginName (const ConstString &name);
271 
272 
273     //------------------------------------------------------------------
274     // SymbolVendor
275     //------------------------------------------------------------------
276     static bool
277     RegisterPlugin (const ConstString &name,
278                     const char *description,
279                     SymbolVendorCreateInstance create_callback);
280 
281     static bool
282     UnregisterPlugin (SymbolVendorCreateInstance create_callback);
283 
284     static SymbolVendorCreateInstance
285     GetSymbolVendorCreateCallbackAtIndex (uint32_t idx);
286 
287     static SymbolVendorCreateInstance
288     GetSymbolVendorCreateCallbackForPluginName (const ConstString &name);
289 
290     //------------------------------------------------------------------
291     // UnwindAssembly
292     //------------------------------------------------------------------
293     static bool
294     RegisterPlugin (const ConstString &name,
295                     const char *description,
296                     UnwindAssemblyCreateInstance create_callback);
297 
298     static bool
299     UnregisterPlugin (UnwindAssemblyCreateInstance create_callback);
300 
301     static UnwindAssemblyCreateInstance
302     GetUnwindAssemblyCreateCallbackAtIndex (uint32_t idx);
303 
304     static UnwindAssemblyCreateInstance
305     GetUnwindAssemblyCreateCallbackForPluginName (const ConstString &name);
306 
307     //------------------------------------------------------------------
308     // Some plug-ins might register a DebuggerInitializeCallback
309     // callback when registering the plug-in. After a new Debugger
310     // instance is created, this DebuggerInitialize function will get
311     // called. This allows plug-ins to install Properties and do any
312     // other initialization that requires a debugger instance.
313     //------------------------------------------------------------------
314     static void
315     DebuggerInitialize (Debugger &debugger);
316 
317     static lldb::OptionValuePropertiesSP
318     GetSettingForDynamicLoaderPlugin (Debugger &debugger,
319                                       const ConstString &setting_name);
320 
321     static bool
322     CreateSettingForDynamicLoaderPlugin (Debugger &debugger,
323                                          const lldb::OptionValuePropertiesSP &properties_sp,
324                                          const ConstString &description,
325                                          bool is_global_property);
326 
327     static lldb::OptionValuePropertiesSP
328     GetSettingForPlatformPlugin (Debugger &debugger,
329                                        const ConstString &setting_name);
330 
331     static bool
332     CreateSettingForPlatformPlugin (Debugger &debugger,
333                                          const lldb::OptionValuePropertiesSP &properties_sp,
334                                          const ConstString &description,
335                                          bool is_global_property);
336 
337     static lldb::OptionValuePropertiesSP
338     GetSettingForProcessPlugin (Debugger &debugger,
339                                 const ConstString &setting_name);
340 
341     static bool
342     CreateSettingForProcessPlugin (Debugger &debugger,
343                                    const lldb::OptionValuePropertiesSP &properties_sp,
344                                    const ConstString &description,
345                                    bool is_global_property);
346 
347 };
348 
349 
350 } // namespace lldb_private
351 
352 #endif  // liblldb_PluginManager_h_
353