]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Core/PluginManager.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Core / PluginManager.h
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 #ifndef liblldb_PluginManager_h_
11 #define liblldb_PluginManager_h_
12
13 #include "lldb/Core/Architecture.h"
14 #include "lldb/Utility/FileSpec.h"
15 #include "lldb/Utility/Status.h"
16 #include "lldb/lldb-enumerations.h"
17 #include "lldb/lldb-forward.h"
18 #include "lldb/lldb-private-interfaces.h"
19 #include "llvm/ADT/StringRef.h"
20
21 #include <stddef.h>
22 #include <stdint.h>
23
24 namespace lldb_private {
25 class CommandInterpreter;
26 }
27 namespace lldb_private {
28 class ConstString;
29 }
30 namespace lldb_private {
31 class Debugger;
32 }
33 namespace lldb_private {
34 class StringList;
35 }
36 namespace lldb_private {
37
38 class PluginManager {
39 public:
40   static void Initialize();
41
42   static void Terminate();
43
44   //------------------------------------------------------------------
45   // ABI
46   //------------------------------------------------------------------
47   static bool RegisterPlugin(const ConstString &name, const char *description,
48                              ABICreateInstance create_callback);
49
50   static bool UnregisterPlugin(ABICreateInstance create_callback);
51
52   static ABICreateInstance GetABICreateCallbackAtIndex(uint32_t idx);
53
54   static ABICreateInstance
55   GetABICreateCallbackForPluginName(const ConstString &name);
56
57   //------------------------------------------------------------------
58   // Architecture
59   //------------------------------------------------------------------
60   using ArchitectureCreateInstance =
61       std::unique_ptr<Architecture> (*)(const ArchSpec &);
62
63   static void RegisterPlugin(const ConstString &name,
64                              llvm::StringRef description,
65                              ArchitectureCreateInstance create_callback);
66
67   static void UnregisterPlugin(ArchitectureCreateInstance create_callback);
68
69   static std::unique_ptr<Architecture>
70   CreateArchitectureInstance(const ArchSpec &arch);
71
72   //------------------------------------------------------------------
73   // Disassembler
74   //------------------------------------------------------------------
75   static bool RegisterPlugin(const ConstString &name, const char *description,
76                              DisassemblerCreateInstance create_callback);
77
78   static bool UnregisterPlugin(DisassemblerCreateInstance create_callback);
79
80   static DisassemblerCreateInstance
81   GetDisassemblerCreateCallbackAtIndex(uint32_t idx);
82
83   static DisassemblerCreateInstance
84   GetDisassemblerCreateCallbackForPluginName(const ConstString &name);
85
86   //------------------------------------------------------------------
87   // DynamicLoader
88   //------------------------------------------------------------------
89   static bool
90   RegisterPlugin(const ConstString &name, const char *description,
91                  DynamicLoaderCreateInstance create_callback,
92                  DebuggerInitializeCallback debugger_init_callback = nullptr);
93
94   static bool UnregisterPlugin(DynamicLoaderCreateInstance create_callback);
95
96   static DynamicLoaderCreateInstance
97   GetDynamicLoaderCreateCallbackAtIndex(uint32_t idx);
98
99   static DynamicLoaderCreateInstance
100   GetDynamicLoaderCreateCallbackForPluginName(const ConstString &name);
101
102   //------------------------------------------------------------------
103   // JITLoader
104   //------------------------------------------------------------------
105   static bool
106   RegisterPlugin(const ConstString &name, const char *description,
107                  JITLoaderCreateInstance create_callback,
108                  DebuggerInitializeCallback debugger_init_callback = nullptr);
109
110   static bool UnregisterPlugin(JITLoaderCreateInstance create_callback);
111
112   static JITLoaderCreateInstance
113   GetJITLoaderCreateCallbackAtIndex(uint32_t idx);
114
115   static JITLoaderCreateInstance
116   GetJITLoaderCreateCallbackForPluginName(const ConstString &name);
117
118   //------------------------------------------------------------------
119   // EmulateInstruction
120   //------------------------------------------------------------------
121   static bool RegisterPlugin(const ConstString &name, const char *description,
122                              EmulateInstructionCreateInstance create_callback);
123
124   static bool
125   UnregisterPlugin(EmulateInstructionCreateInstance create_callback);
126
127   static EmulateInstructionCreateInstance
128   GetEmulateInstructionCreateCallbackAtIndex(uint32_t idx);
129
130   static EmulateInstructionCreateInstance
131   GetEmulateInstructionCreateCallbackForPluginName(const ConstString &name);
132
133   //------------------------------------------------------------------
134   // OperatingSystem
135   //------------------------------------------------------------------
136   static bool RegisterPlugin(const ConstString &name, const char *description,
137                              OperatingSystemCreateInstance create_callback,
138                              DebuggerInitializeCallback debugger_init_callback);
139
140   static bool UnregisterPlugin(OperatingSystemCreateInstance create_callback);
141
142   static OperatingSystemCreateInstance
143   GetOperatingSystemCreateCallbackAtIndex(uint32_t idx);
144
145   static OperatingSystemCreateInstance
146   GetOperatingSystemCreateCallbackForPluginName(const ConstString &name);
147
148   //------------------------------------------------------------------
149   // Language
150   //------------------------------------------------------------------
151   static bool RegisterPlugin(const ConstString &name, const char *description,
152                              LanguageCreateInstance create_callback);
153
154   static bool UnregisterPlugin(LanguageCreateInstance create_callback);
155
156   static LanguageCreateInstance GetLanguageCreateCallbackAtIndex(uint32_t idx);
157
158   static LanguageCreateInstance
159   GetLanguageCreateCallbackForPluginName(const ConstString &name);
160
161   //------------------------------------------------------------------
162   // LanguageRuntime
163   //------------------------------------------------------------------
164   static bool
165   RegisterPlugin(const ConstString &name, const char *description,
166                  LanguageRuntimeCreateInstance create_callback,
167                  LanguageRuntimeGetCommandObject command_callback = nullptr);
168
169   static bool UnregisterPlugin(LanguageRuntimeCreateInstance create_callback);
170
171   static LanguageRuntimeCreateInstance
172   GetLanguageRuntimeCreateCallbackAtIndex(uint32_t idx);
173
174   static LanguageRuntimeGetCommandObject
175   GetLanguageRuntimeGetCommandObjectAtIndex(uint32_t idx);
176
177   static LanguageRuntimeCreateInstance
178   GetLanguageRuntimeCreateCallbackForPluginName(const ConstString &name);
179
180   //------------------------------------------------------------------
181   // SystemRuntime
182   //------------------------------------------------------------------
183   static bool RegisterPlugin(const ConstString &name, const char *description,
184                              SystemRuntimeCreateInstance create_callback);
185
186   static bool UnregisterPlugin(SystemRuntimeCreateInstance create_callback);
187
188   static SystemRuntimeCreateInstance
189   GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx);
190
191   static SystemRuntimeCreateInstance
192   GetSystemRuntimeCreateCallbackForPluginName(const ConstString &name);
193
194   //------------------------------------------------------------------
195   // ObjectFile
196   //------------------------------------------------------------------
197   static bool
198   RegisterPlugin(const ConstString &name, const char *description,
199                  ObjectFileCreateInstance create_callback,
200                  ObjectFileCreateMemoryInstance create_memory_callback,
201                  ObjectFileGetModuleSpecifications get_module_specifications,
202                  ObjectFileSaveCore save_core = nullptr);
203
204   static bool UnregisterPlugin(ObjectFileCreateInstance create_callback);
205
206   static ObjectFileCreateInstance
207   GetObjectFileCreateCallbackAtIndex(uint32_t idx);
208
209   static ObjectFileCreateMemoryInstance
210   GetObjectFileCreateMemoryCallbackAtIndex(uint32_t idx);
211
212   static ObjectFileGetModuleSpecifications
213   GetObjectFileGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
214
215   static ObjectFileCreateInstance
216   GetObjectFileCreateCallbackForPluginName(const ConstString &name);
217
218   static ObjectFileCreateMemoryInstance
219   GetObjectFileCreateMemoryCallbackForPluginName(const ConstString &name);
220
221   static Status SaveCore(const lldb::ProcessSP &process_sp,
222                          const FileSpec &outfile);
223
224   //------------------------------------------------------------------
225   // ObjectContainer
226   //------------------------------------------------------------------
227   static bool
228   RegisterPlugin(const ConstString &name, const char *description,
229                  ObjectContainerCreateInstance create_callback,
230                  ObjectFileGetModuleSpecifications get_module_specifications);
231
232   static bool UnregisterPlugin(ObjectContainerCreateInstance create_callback);
233
234   static ObjectContainerCreateInstance
235   GetObjectContainerCreateCallbackAtIndex(uint32_t idx);
236
237   static ObjectContainerCreateInstance
238   GetObjectContainerCreateCallbackForPluginName(const ConstString &name);
239
240   static ObjectFileGetModuleSpecifications
241   GetObjectContainerGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
242
243   //------------------------------------------------------------------
244   // Platform
245   //------------------------------------------------------------------
246   static bool
247   RegisterPlugin(const ConstString &name, const char *description,
248                  PlatformCreateInstance create_callback,
249                  DebuggerInitializeCallback debugger_init_callback = nullptr);
250
251   static bool UnregisterPlugin(PlatformCreateInstance create_callback);
252
253   static PlatformCreateInstance GetPlatformCreateCallbackAtIndex(uint32_t idx);
254
255   static PlatformCreateInstance
256   GetPlatformCreateCallbackForPluginName(const ConstString &name);
257
258   static const char *GetPlatformPluginNameAtIndex(uint32_t idx);
259
260   static const char *GetPlatformPluginDescriptionAtIndex(uint32_t idx);
261
262   static size_t AutoCompletePlatformName(llvm::StringRef partial_name,
263                                          StringList &matches);
264   //------------------------------------------------------------------
265   // Process
266   //------------------------------------------------------------------
267   static bool
268   RegisterPlugin(const ConstString &name, const char *description,
269                  ProcessCreateInstance create_callback,
270                  DebuggerInitializeCallback debugger_init_callback = nullptr);
271
272   static bool UnregisterPlugin(ProcessCreateInstance create_callback);
273
274   static ProcessCreateInstance GetProcessCreateCallbackAtIndex(uint32_t idx);
275
276   static ProcessCreateInstance
277   GetProcessCreateCallbackForPluginName(const ConstString &name);
278
279   static const char *GetProcessPluginNameAtIndex(uint32_t idx);
280
281   static const char *GetProcessPluginDescriptionAtIndex(uint32_t idx);
282
283   //------------------------------------------------------------------
284   // ScriptInterpreter
285   //------------------------------------------------------------------
286   static bool RegisterPlugin(const ConstString &name, const char *description,
287                              lldb::ScriptLanguage script_lang,
288                              ScriptInterpreterCreateInstance create_callback);
289
290   static bool UnregisterPlugin(ScriptInterpreterCreateInstance create_callback);
291
292   static ScriptInterpreterCreateInstance
293   GetScriptInterpreterCreateCallbackAtIndex(uint32_t idx);
294
295   static lldb::ScriptInterpreterSP
296   GetScriptInterpreterForLanguage(lldb::ScriptLanguage script_lang,
297                                   CommandInterpreter &interpreter);
298
299   //------------------------------------------------------------------
300   // StructuredDataPlugin
301   //------------------------------------------------------------------
302
303   //------------------------------------------------------------------
304   /// Register a StructuredDataPlugin class along with optional
305   /// callbacks for debugger initialization and Process launch info
306   /// filtering and manipulation.
307   ///
308   /// @param[in] name
309   ///    The name of the plugin.
310   ///
311   /// @param[in] description
312   ///    A description string for the plugin.
313   ///
314   /// @param[in] create_callback
315   ///    The callback that will be invoked to create an instance of
316   ///    the callback.  This may not be nullptr.
317   ///
318   /// @param[in] debugger_init_callback
319   ///    An optional callback that will be made when a Debugger
320   ///    instance is initialized.
321   ///
322   /// @param[in] filter_callback
323   ///    An optional callback that will be invoked before LLDB
324   ///    launches a process for debugging.  The callback must
325   ///    do the following:
326   ///    1. Only do something if the plugin's behavior is enabled.
327   ///    2. Only make changes for processes that are relevant to the
328   ///       plugin.  The callback gets a pointer to the Target, which
329   ///       can be inspected as needed.  The ProcessLaunchInfo is
330   ///       provided in read-write mode, and may be modified by the
331   ///       plugin if, for instance, additional environment variables
332   ///       are needed to support the feature when enabled.
333   ///
334   /// @return
335   ///    Returns true upon success; otherwise, false.
336   //------------------------------------------------------------------
337   static bool
338   RegisterPlugin(const ConstString &name, const char *description,
339                  StructuredDataPluginCreateInstance create_callback,
340                  DebuggerInitializeCallback debugger_init_callback = nullptr,
341                  StructuredDataFilterLaunchInfo filter_callback = nullptr);
342
343   static bool
344   UnregisterPlugin(StructuredDataPluginCreateInstance create_callback);
345
346   static StructuredDataPluginCreateInstance
347   GetStructuredDataPluginCreateCallbackAtIndex(uint32_t idx);
348
349   static StructuredDataPluginCreateInstance
350   GetStructuredDataPluginCreateCallbackForPluginName(const ConstString &name);
351
352   static StructuredDataFilterLaunchInfo
353   GetStructuredDataFilterCallbackAtIndex(uint32_t idx,
354                                          bool &iteration_complete);
355
356   //------------------------------------------------------------------
357   // SymbolFile
358   //------------------------------------------------------------------
359   static bool
360   RegisterPlugin(const ConstString &name, const char *description,
361                  SymbolFileCreateInstance create_callback,
362                  DebuggerInitializeCallback debugger_init_callback = nullptr);
363
364   static bool UnregisterPlugin(SymbolFileCreateInstance create_callback);
365
366   static SymbolFileCreateInstance
367   GetSymbolFileCreateCallbackAtIndex(uint32_t idx);
368
369   static SymbolFileCreateInstance
370   GetSymbolFileCreateCallbackForPluginName(const ConstString &name);
371
372   //------------------------------------------------------------------
373   // SymbolVendor
374   //------------------------------------------------------------------
375   static bool RegisterPlugin(const ConstString &name, const char *description,
376                              SymbolVendorCreateInstance create_callback);
377
378   static bool UnregisterPlugin(SymbolVendorCreateInstance create_callback);
379
380   static SymbolVendorCreateInstance
381   GetSymbolVendorCreateCallbackAtIndex(uint32_t idx);
382
383   static SymbolVendorCreateInstance
384   GetSymbolVendorCreateCallbackForPluginName(const ConstString &name);
385
386   //------------------------------------------------------------------
387   // UnwindAssembly
388   //------------------------------------------------------------------
389   static bool RegisterPlugin(const ConstString &name, const char *description,
390                              UnwindAssemblyCreateInstance create_callback);
391
392   static bool UnregisterPlugin(UnwindAssemblyCreateInstance create_callback);
393
394   static UnwindAssemblyCreateInstance
395   GetUnwindAssemblyCreateCallbackAtIndex(uint32_t idx);
396
397   static UnwindAssemblyCreateInstance
398   GetUnwindAssemblyCreateCallbackForPluginName(const ConstString &name);
399
400   //------------------------------------------------------------------
401   // MemoryHistory
402   //------------------------------------------------------------------
403   static bool RegisterPlugin(const ConstString &name, const char *description,
404                              MemoryHistoryCreateInstance create_callback);
405
406   static bool UnregisterPlugin(MemoryHistoryCreateInstance create_callback);
407
408   static MemoryHistoryCreateInstance
409   GetMemoryHistoryCreateCallbackAtIndex(uint32_t idx);
410
411   static MemoryHistoryCreateInstance
412   GetMemoryHistoryCreateCallbackForPluginName(const ConstString &name);
413
414   //------------------------------------------------------------------
415   // InstrumentationRuntime
416   //------------------------------------------------------------------
417   static bool
418   RegisterPlugin(const ConstString &name, const char *description,
419                  InstrumentationRuntimeCreateInstance create_callback,
420                  InstrumentationRuntimeGetType get_type_callback);
421
422   static bool
423   UnregisterPlugin(InstrumentationRuntimeCreateInstance create_callback);
424
425   static InstrumentationRuntimeGetType
426   GetInstrumentationRuntimeGetTypeCallbackAtIndex(uint32_t idx);
427
428   static InstrumentationRuntimeCreateInstance
429   GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx);
430
431   static InstrumentationRuntimeCreateInstance
432   GetInstrumentationRuntimeCreateCallbackForPluginName(const ConstString &name);
433
434   //------------------------------------------------------------------
435   // TypeSystem
436   //------------------------------------------------------------------
437   static bool RegisterPlugin(
438       const ConstString &name, const char *description,
439       TypeSystemCreateInstance create_callback,
440       TypeSystemEnumerateSupportedLanguages enumerate_languages_callback);
441
442   static bool UnregisterPlugin(TypeSystemCreateInstance create_callback);
443
444   static TypeSystemCreateInstance
445   GetTypeSystemCreateCallbackAtIndex(uint32_t idx);
446
447   static TypeSystemCreateInstance
448   GetTypeSystemCreateCallbackForPluginName(const ConstString &name);
449
450   static TypeSystemEnumerateSupportedLanguages
451   GetTypeSystemEnumerateSupportedLanguagesCallbackAtIndex(uint32_t idx);
452
453   static TypeSystemEnumerateSupportedLanguages
454   GetTypeSystemEnumerateSupportedLanguagesCallbackForPluginName(
455       const ConstString &name);
456
457   //------------------------------------------------------------------
458   // REPL
459   //------------------------------------------------------------------
460   static bool
461   RegisterPlugin(const ConstString &name, const char *description,
462                  REPLCreateInstance create_callback,
463                  REPLEnumerateSupportedLanguages enumerate_languages_callback);
464
465   static bool UnregisterPlugin(REPLCreateInstance create_callback);
466
467   static REPLCreateInstance GetREPLCreateCallbackAtIndex(uint32_t idx);
468
469   static REPLCreateInstance
470   GetREPLCreateCallbackForPluginName(const ConstString &name);
471
472   static REPLEnumerateSupportedLanguages
473   GetREPLEnumerateSupportedLanguagesCallbackAtIndex(uint32_t idx);
474
475   static REPLEnumerateSupportedLanguages
476   GetREPLSystemEnumerateSupportedLanguagesCallbackForPluginName(
477       const ConstString &name);
478
479   //------------------------------------------------------------------
480   // Some plug-ins might register a DebuggerInitializeCallback callback when
481   // registering the plug-in. After a new Debugger instance is created, this
482   // DebuggerInitialize function will get called. This allows plug-ins to
483   // install Properties and do any other initialization that requires a
484   // debugger instance.
485   //------------------------------------------------------------------
486   static void DebuggerInitialize(Debugger &debugger);
487
488   static lldb::OptionValuePropertiesSP
489   GetSettingForDynamicLoaderPlugin(Debugger &debugger,
490                                    const ConstString &setting_name);
491
492   static bool CreateSettingForDynamicLoaderPlugin(
493       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
494       const ConstString &description, bool is_global_property);
495
496   static lldb::OptionValuePropertiesSP
497   GetSettingForPlatformPlugin(Debugger &debugger,
498                               const ConstString &setting_name);
499
500   static bool CreateSettingForPlatformPlugin(
501       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
502       const ConstString &description, bool is_global_property);
503
504   static lldb::OptionValuePropertiesSP
505   GetSettingForProcessPlugin(Debugger &debugger,
506                              const ConstString &setting_name);
507
508   static bool CreateSettingForProcessPlugin(
509       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
510       const ConstString &description, bool is_global_property);
511
512   static lldb::OptionValuePropertiesSP
513   GetSettingForSymbolFilePlugin(Debugger &debugger,
514                                 const ConstString &setting_name);
515
516   static bool CreateSettingForSymbolFilePlugin(
517       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
518       const ConstString &description, bool is_global_property);
519
520   static lldb::OptionValuePropertiesSP
521   GetSettingForJITLoaderPlugin(Debugger &debugger,
522                                const ConstString &setting_name);
523
524   static bool CreateSettingForJITLoaderPlugin(
525       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
526       const ConstString &description, bool is_global_property);
527
528   static lldb::OptionValuePropertiesSP
529   GetSettingForOperatingSystemPlugin(Debugger &debugger,
530                                      const ConstString &setting_name);
531
532   static bool CreateSettingForOperatingSystemPlugin(
533       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
534       const ConstString &description, bool is_global_property);
535
536   static lldb::OptionValuePropertiesSP
537   GetSettingForStructuredDataPlugin(Debugger &debugger,
538                                     const ConstString &setting_name);
539
540   static bool CreateSettingForStructuredDataPlugin(
541       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
542       const ConstString &description, bool is_global_property);
543 };
544
545 } // namespace lldb_private
546
547 #endif // liblldb_PluginManager_h_