1 //===-- PluginManager.h -----------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_PluginManager_h_
11 #define liblldb_PluginManager_h_
13 #include "lldb/Utility/FileSpec.h"
14 #include "lldb/Utility/Status.h" // for Status
15 #include "lldb/lldb-enumerations.h" // for ScriptLanguage
16 #include "lldb/lldb-forward.h" // for OptionValuePropertiesSP
17 #include "lldb/lldb-private-interfaces.h" // for DebuggerInitializeCallback
18 #include "llvm/ADT/StringRef.h" // for StringRef
20 #include <stddef.h> // for size_t
21 #include <stdint.h> // for uint32_t
23 namespace lldb_private {
24 class CommandInterpreter;
26 namespace lldb_private {
29 namespace lldb_private {
32 namespace lldb_private {
35 namespace lldb_private {
39 static void Initialize();
41 static void Terminate();
43 //------------------------------------------------------------------
45 //------------------------------------------------------------------
46 static bool RegisterPlugin(const ConstString &name, const char *description,
47 ABICreateInstance create_callback);
49 static bool UnregisterPlugin(ABICreateInstance create_callback);
51 static ABICreateInstance GetABICreateCallbackAtIndex(uint32_t idx);
53 static ABICreateInstance
54 GetABICreateCallbackForPluginName(const ConstString &name);
56 //------------------------------------------------------------------
58 //------------------------------------------------------------------
59 static bool RegisterPlugin(const ConstString &name, const char *description,
60 DisassemblerCreateInstance create_callback);
62 static bool UnregisterPlugin(DisassemblerCreateInstance create_callback);
64 static DisassemblerCreateInstance
65 GetDisassemblerCreateCallbackAtIndex(uint32_t idx);
67 static DisassemblerCreateInstance
68 GetDisassemblerCreateCallbackForPluginName(const ConstString &name);
70 //------------------------------------------------------------------
72 //------------------------------------------------------------------
74 RegisterPlugin(const ConstString &name, const char *description,
75 DynamicLoaderCreateInstance create_callback,
76 DebuggerInitializeCallback debugger_init_callback = nullptr);
78 static bool UnregisterPlugin(DynamicLoaderCreateInstance create_callback);
80 static DynamicLoaderCreateInstance
81 GetDynamicLoaderCreateCallbackAtIndex(uint32_t idx);
83 static DynamicLoaderCreateInstance
84 GetDynamicLoaderCreateCallbackForPluginName(const ConstString &name);
86 //------------------------------------------------------------------
88 //------------------------------------------------------------------
90 RegisterPlugin(const ConstString &name, const char *description,
91 JITLoaderCreateInstance create_callback,
92 DebuggerInitializeCallback debugger_init_callback = nullptr);
94 static bool UnregisterPlugin(JITLoaderCreateInstance create_callback);
96 static JITLoaderCreateInstance
97 GetJITLoaderCreateCallbackAtIndex(uint32_t idx);
99 static JITLoaderCreateInstance
100 GetJITLoaderCreateCallbackForPluginName(const ConstString &name);
102 //------------------------------------------------------------------
103 // EmulateInstruction
104 //------------------------------------------------------------------
105 static bool RegisterPlugin(const ConstString &name, const char *description,
106 EmulateInstructionCreateInstance create_callback);
109 UnregisterPlugin(EmulateInstructionCreateInstance create_callback);
111 static EmulateInstructionCreateInstance
112 GetEmulateInstructionCreateCallbackAtIndex(uint32_t idx);
114 static EmulateInstructionCreateInstance
115 GetEmulateInstructionCreateCallbackForPluginName(const ConstString &name);
117 //------------------------------------------------------------------
119 //------------------------------------------------------------------
120 static bool RegisterPlugin(const ConstString &name, const char *description,
121 OperatingSystemCreateInstance create_callback,
122 DebuggerInitializeCallback debugger_init_callback);
124 static bool UnregisterPlugin(OperatingSystemCreateInstance create_callback);
126 static OperatingSystemCreateInstance
127 GetOperatingSystemCreateCallbackAtIndex(uint32_t idx);
129 static OperatingSystemCreateInstance
130 GetOperatingSystemCreateCallbackForPluginName(const ConstString &name);
132 //------------------------------------------------------------------
134 //------------------------------------------------------------------
135 static bool RegisterPlugin(const ConstString &name, const char *description,
136 LanguageCreateInstance create_callback);
138 static bool UnregisterPlugin(LanguageCreateInstance create_callback);
140 static LanguageCreateInstance GetLanguageCreateCallbackAtIndex(uint32_t idx);
142 static LanguageCreateInstance
143 GetLanguageCreateCallbackForPluginName(const ConstString &name);
145 //------------------------------------------------------------------
147 //------------------------------------------------------------------
149 RegisterPlugin(const ConstString &name, const char *description,
150 LanguageRuntimeCreateInstance create_callback,
151 LanguageRuntimeGetCommandObject command_callback = nullptr);
153 static bool UnregisterPlugin(LanguageRuntimeCreateInstance create_callback);
155 static LanguageRuntimeCreateInstance
156 GetLanguageRuntimeCreateCallbackAtIndex(uint32_t idx);
158 static LanguageRuntimeGetCommandObject
159 GetLanguageRuntimeGetCommandObjectAtIndex(uint32_t idx);
161 static LanguageRuntimeCreateInstance
162 GetLanguageRuntimeCreateCallbackForPluginName(const ConstString &name);
164 //------------------------------------------------------------------
166 //------------------------------------------------------------------
167 static bool RegisterPlugin(const ConstString &name, const char *description,
168 SystemRuntimeCreateInstance create_callback);
170 static bool UnregisterPlugin(SystemRuntimeCreateInstance create_callback);
172 static SystemRuntimeCreateInstance
173 GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx);
175 static SystemRuntimeCreateInstance
176 GetSystemRuntimeCreateCallbackForPluginName(const ConstString &name);
178 //------------------------------------------------------------------
180 //------------------------------------------------------------------
182 RegisterPlugin(const ConstString &name, const char *description,
183 ObjectFileCreateInstance create_callback,
184 ObjectFileCreateMemoryInstance create_memory_callback,
185 ObjectFileGetModuleSpecifications get_module_specifications,
186 ObjectFileSaveCore save_core = nullptr);
188 static bool UnregisterPlugin(ObjectFileCreateInstance create_callback);
190 static ObjectFileCreateInstance
191 GetObjectFileCreateCallbackAtIndex(uint32_t idx);
193 static ObjectFileCreateMemoryInstance
194 GetObjectFileCreateMemoryCallbackAtIndex(uint32_t idx);
196 static ObjectFileGetModuleSpecifications
197 GetObjectFileGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
199 static ObjectFileCreateInstance
200 GetObjectFileCreateCallbackForPluginName(const ConstString &name);
202 static ObjectFileCreateMemoryInstance
203 GetObjectFileCreateMemoryCallbackForPluginName(const ConstString &name);
205 static Status SaveCore(const lldb::ProcessSP &process_sp,
206 const FileSpec &outfile);
208 //------------------------------------------------------------------
210 //------------------------------------------------------------------
212 RegisterPlugin(const ConstString &name, const char *description,
213 ObjectContainerCreateInstance create_callback,
214 ObjectFileGetModuleSpecifications get_module_specifications);
216 static bool UnregisterPlugin(ObjectContainerCreateInstance create_callback);
218 static ObjectContainerCreateInstance
219 GetObjectContainerCreateCallbackAtIndex(uint32_t idx);
221 static ObjectContainerCreateInstance
222 GetObjectContainerCreateCallbackForPluginName(const ConstString &name);
224 static ObjectFileGetModuleSpecifications
225 GetObjectContainerGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
227 //------------------------------------------------------------------
229 //------------------------------------------------------------------
231 RegisterPlugin(const ConstString &name, const char *description,
232 PlatformCreateInstance create_callback,
233 DebuggerInitializeCallback debugger_init_callback = nullptr);
235 static bool UnregisterPlugin(PlatformCreateInstance create_callback);
237 static PlatformCreateInstance GetPlatformCreateCallbackAtIndex(uint32_t idx);
239 static PlatformCreateInstance
240 GetPlatformCreateCallbackForPluginName(const ConstString &name);
242 static const char *GetPlatformPluginNameAtIndex(uint32_t idx);
244 static const char *GetPlatformPluginDescriptionAtIndex(uint32_t idx);
246 static size_t AutoCompletePlatformName(llvm::StringRef partial_name,
247 StringList &matches);
248 //------------------------------------------------------------------
250 //------------------------------------------------------------------
252 RegisterPlugin(const ConstString &name, const char *description,
253 ProcessCreateInstance create_callback,
254 DebuggerInitializeCallback debugger_init_callback = nullptr);
256 static bool UnregisterPlugin(ProcessCreateInstance create_callback);
258 static ProcessCreateInstance GetProcessCreateCallbackAtIndex(uint32_t idx);
260 static ProcessCreateInstance
261 GetProcessCreateCallbackForPluginName(const ConstString &name);
263 static const char *GetProcessPluginNameAtIndex(uint32_t idx);
265 static const char *GetProcessPluginDescriptionAtIndex(uint32_t idx);
267 //------------------------------------------------------------------
269 //------------------------------------------------------------------
270 static bool RegisterPlugin(const ConstString &name, const char *description,
271 lldb::ScriptLanguage script_lang,
272 ScriptInterpreterCreateInstance create_callback);
274 static bool UnregisterPlugin(ScriptInterpreterCreateInstance create_callback);
276 static ScriptInterpreterCreateInstance
277 GetScriptInterpreterCreateCallbackAtIndex(uint32_t idx);
279 static lldb::ScriptInterpreterSP
280 GetScriptInterpreterForLanguage(lldb::ScriptLanguage script_lang,
281 CommandInterpreter &interpreter);
283 //------------------------------------------------------------------
284 // StructuredDataPlugin
285 //------------------------------------------------------------------
287 //------------------------------------------------------------------
288 /// Register a StructuredDataPlugin class along with optional
289 /// callbacks for debugger initialization and Process launch info
290 /// filtering and manipulation.
293 /// The name of the plugin.
295 /// @param[in] description
296 /// A description string for the plugin.
298 /// @param[in] create_callback
299 /// The callback that will be invoked to create an instance of
300 /// the callback. This may not be nullptr.
302 /// @param[in] debugger_init_callback
303 /// An optional callback that will be made when a Debugger
304 /// instance is initialized.
306 /// @param[in] filter_callback
307 /// An optional callback that will be invoked before LLDB
308 /// launches a process for debugging. The callback must
309 /// do the following:
310 /// 1. Only do something if the plugin's behavior is enabled.
311 /// 2. Only make changes for processes that are relevant to the
312 /// plugin. The callback gets a pointer to the Target, which
313 /// can be inspected as needed. The ProcessLaunchInfo is
314 /// provided in read-write mode, and may be modified by the
315 /// plugin if, for instance, additional environment variables
316 /// are needed to support the feature when enabled.
319 /// Returns true upon success; otherwise, false.
320 //------------------------------------------------------------------
322 RegisterPlugin(const ConstString &name, const char *description,
323 StructuredDataPluginCreateInstance create_callback,
324 DebuggerInitializeCallback debugger_init_callback = nullptr,
325 StructuredDataFilterLaunchInfo filter_callback = nullptr);
328 UnregisterPlugin(StructuredDataPluginCreateInstance create_callback);
330 static StructuredDataPluginCreateInstance
331 GetStructuredDataPluginCreateCallbackAtIndex(uint32_t idx);
333 static StructuredDataPluginCreateInstance
334 GetStructuredDataPluginCreateCallbackForPluginName(const ConstString &name);
336 static StructuredDataFilterLaunchInfo
337 GetStructuredDataFilterCallbackAtIndex(uint32_t idx,
338 bool &iteration_complete);
340 //------------------------------------------------------------------
342 //------------------------------------------------------------------
344 RegisterPlugin(const ConstString &name, const char *description,
345 SymbolFileCreateInstance create_callback,
346 DebuggerInitializeCallback debugger_init_callback = nullptr);
348 static bool UnregisterPlugin(SymbolFileCreateInstance create_callback);
350 static SymbolFileCreateInstance
351 GetSymbolFileCreateCallbackAtIndex(uint32_t idx);
353 static SymbolFileCreateInstance
354 GetSymbolFileCreateCallbackForPluginName(const ConstString &name);
356 //------------------------------------------------------------------
358 //------------------------------------------------------------------
359 static bool RegisterPlugin(const ConstString &name, const char *description,
360 SymbolVendorCreateInstance create_callback);
362 static bool UnregisterPlugin(SymbolVendorCreateInstance create_callback);
364 static SymbolVendorCreateInstance
365 GetSymbolVendorCreateCallbackAtIndex(uint32_t idx);
367 static SymbolVendorCreateInstance
368 GetSymbolVendorCreateCallbackForPluginName(const ConstString &name);
370 //------------------------------------------------------------------
372 //------------------------------------------------------------------
373 static bool RegisterPlugin(const ConstString &name, const char *description,
374 UnwindAssemblyCreateInstance create_callback);
376 static bool UnregisterPlugin(UnwindAssemblyCreateInstance create_callback);
378 static UnwindAssemblyCreateInstance
379 GetUnwindAssemblyCreateCallbackAtIndex(uint32_t idx);
381 static UnwindAssemblyCreateInstance
382 GetUnwindAssemblyCreateCallbackForPluginName(const ConstString &name);
384 //------------------------------------------------------------------
386 //------------------------------------------------------------------
387 static bool RegisterPlugin(const ConstString &name, const char *description,
388 MemoryHistoryCreateInstance create_callback);
390 static bool UnregisterPlugin(MemoryHistoryCreateInstance create_callback);
392 static MemoryHistoryCreateInstance
393 GetMemoryHistoryCreateCallbackAtIndex(uint32_t idx);
395 static MemoryHistoryCreateInstance
396 GetMemoryHistoryCreateCallbackForPluginName(const ConstString &name);
398 //------------------------------------------------------------------
399 // InstrumentationRuntime
400 //------------------------------------------------------------------
402 RegisterPlugin(const ConstString &name, const char *description,
403 InstrumentationRuntimeCreateInstance create_callback,
404 InstrumentationRuntimeGetType get_type_callback);
407 UnregisterPlugin(InstrumentationRuntimeCreateInstance create_callback);
409 static InstrumentationRuntimeGetType
410 GetInstrumentationRuntimeGetTypeCallbackAtIndex(uint32_t idx);
412 static InstrumentationRuntimeCreateInstance
413 GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx);
415 static InstrumentationRuntimeCreateInstance
416 GetInstrumentationRuntimeCreateCallbackForPluginName(const ConstString &name);
418 //------------------------------------------------------------------
420 //------------------------------------------------------------------
421 static bool RegisterPlugin(
422 const ConstString &name, const char *description,
423 TypeSystemCreateInstance create_callback,
424 TypeSystemEnumerateSupportedLanguages enumerate_languages_callback);
426 static bool UnregisterPlugin(TypeSystemCreateInstance create_callback);
428 static TypeSystemCreateInstance
429 GetTypeSystemCreateCallbackAtIndex(uint32_t idx);
431 static TypeSystemCreateInstance
432 GetTypeSystemCreateCallbackForPluginName(const ConstString &name);
434 static TypeSystemEnumerateSupportedLanguages
435 GetTypeSystemEnumerateSupportedLanguagesCallbackAtIndex(uint32_t idx);
437 static TypeSystemEnumerateSupportedLanguages
438 GetTypeSystemEnumerateSupportedLanguagesCallbackForPluginName(
439 const ConstString &name);
441 //------------------------------------------------------------------
443 //------------------------------------------------------------------
445 RegisterPlugin(const ConstString &name, const char *description,
446 REPLCreateInstance create_callback,
447 REPLEnumerateSupportedLanguages enumerate_languages_callback);
449 static bool UnregisterPlugin(REPLCreateInstance create_callback);
451 static REPLCreateInstance GetREPLCreateCallbackAtIndex(uint32_t idx);
453 static REPLCreateInstance
454 GetREPLCreateCallbackForPluginName(const ConstString &name);
456 static REPLEnumerateSupportedLanguages
457 GetREPLEnumerateSupportedLanguagesCallbackAtIndex(uint32_t idx);
459 static REPLEnumerateSupportedLanguages
460 GetREPLSystemEnumerateSupportedLanguagesCallbackForPluginName(
461 const ConstString &name);
463 //------------------------------------------------------------------
464 // Some plug-ins might register a DebuggerInitializeCallback
465 // callback when registering the plug-in. After a new Debugger
466 // instance is created, this DebuggerInitialize function will get
467 // called. This allows plug-ins to install Properties and do any
468 // other initialization that requires a debugger instance.
469 //------------------------------------------------------------------
470 static void DebuggerInitialize(Debugger &debugger);
472 static lldb::OptionValuePropertiesSP
473 GetSettingForDynamicLoaderPlugin(Debugger &debugger,
474 const ConstString &setting_name);
476 static bool CreateSettingForDynamicLoaderPlugin(
477 Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
478 const ConstString &description, bool is_global_property);
480 static lldb::OptionValuePropertiesSP
481 GetSettingForPlatformPlugin(Debugger &debugger,
482 const ConstString &setting_name);
484 static bool CreateSettingForPlatformPlugin(
485 Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
486 const ConstString &description, bool is_global_property);
488 static lldb::OptionValuePropertiesSP
489 GetSettingForProcessPlugin(Debugger &debugger,
490 const ConstString &setting_name);
492 static bool CreateSettingForProcessPlugin(
493 Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
494 const ConstString &description, bool is_global_property);
496 static lldb::OptionValuePropertiesSP
497 GetSettingForSymbolFilePlugin(Debugger &debugger,
498 const ConstString &setting_name);
500 static bool CreateSettingForSymbolFilePlugin(
501 Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
502 const ConstString &description, bool is_global_property);
504 static lldb::OptionValuePropertiesSP
505 GetSettingForJITLoaderPlugin(Debugger &debugger,
506 const ConstString &setting_name);
508 static bool CreateSettingForJITLoaderPlugin(
509 Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
510 const ConstString &description, bool is_global_property);
512 static lldb::OptionValuePropertiesSP
513 GetSettingForOperatingSystemPlugin(Debugger &debugger,
514 const ConstString &setting_name);
516 static bool CreateSettingForOperatingSystemPlugin(
517 Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
518 const ConstString &description, bool is_global_property);
520 static lldb::OptionValuePropertiesSP
521 GetSettingForStructuredDataPlugin(Debugger &debugger,
522 const ConstString &setting_name);
524 static bool CreateSettingForStructuredDataPlugin(
525 Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
526 const ConstString &description, bool is_global_property);
529 } // namespace lldb_private
531 #endif // liblldb_PluginManager_h_