xref: /llvm-project/lldb/include/lldb/Core/PluginManager.h (revision 572943e79080962cd70d30fe58a17a8bd0579fd7)
1 //===-- PluginManager.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_CORE_PLUGINMANAGER_H
10 #define LLDB_CORE_PLUGINMANAGER_H
11 
12 #include "lldb/Core/Architecture.h"
13 #include "lldb/Interpreter/Interfaces/ScriptedInterfaceUsages.h"
14 #include "lldb/Symbol/TypeSystem.h"
15 #include "lldb/Utility/CompletionRequest.h"
16 #include "lldb/Utility/FileSpec.h"
17 #include "lldb/Utility/Status.h"
18 #include "lldb/lldb-enumerations.h"
19 #include "lldb/lldb-forward.h"
20 #include "lldb/lldb-private-interfaces.h"
21 #include "llvm/ADT/StringRef.h"
22 
23 #include <cstddef>
24 #include <cstdint>
25 
26 #define LLDB_PLUGIN_DEFINE_ADV(ClassName, PluginName)                          \
27   namespace lldb_private {                                                     \
28   void lldb_initialize_##PluginName() { ClassName::Initialize(); }             \
29   void lldb_terminate_##PluginName() { ClassName::Terminate(); }               \
30   }
31 
32 #define LLDB_PLUGIN_DEFINE(PluginName)                                         \
33   LLDB_PLUGIN_DEFINE_ADV(PluginName, PluginName)
34 
35 // FIXME: Generate me with CMake
36 #define LLDB_PLUGIN_DECLARE(PluginName)                                        \
37   namespace lldb_private {                                                     \
38   extern void lldb_initialize_##PluginName();                                  \
39   extern void lldb_terminate_##PluginName();                                   \
40   }
41 
42 #define LLDB_PLUGIN_INITIALIZE(PluginName) lldb_initialize_##PluginName()
43 #define LLDB_PLUGIN_TERMINATE(PluginName) lldb_terminate_##PluginName()
44 
45 namespace lldb_private {
46 class CommandInterpreter;
47 class Debugger;
48 class StringList;
49 
50 class PluginManager {
51 public:
52   static void Initialize();
53 
54   static void Terminate();
55 
56   // ABI
57   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
58                              ABICreateInstance create_callback);
59 
60   static bool UnregisterPlugin(ABICreateInstance create_callback);
61 
62   static ABICreateInstance GetABICreateCallbackAtIndex(uint32_t idx);
63 
64   // Architecture
65   static void RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
66                              ArchitectureCreateInstance create_callback);
67 
68   static void UnregisterPlugin(ArchitectureCreateInstance create_callback);
69 
70   static std::unique_ptr<Architecture>
71   CreateArchitectureInstance(const ArchSpec &arch);
72 
73   // Disassembler
74   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
75                              DisassemblerCreateInstance create_callback);
76 
77   static bool UnregisterPlugin(DisassemblerCreateInstance create_callback);
78 
79   static DisassemblerCreateInstance
80   GetDisassemblerCreateCallbackAtIndex(uint32_t idx);
81 
82   static DisassemblerCreateInstance
83   GetDisassemblerCreateCallbackForPluginName(llvm::StringRef name);
84 
85   // DynamicLoader
86   static bool
87   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
88                  DynamicLoaderCreateInstance create_callback,
89                  DebuggerInitializeCallback debugger_init_callback = nullptr);
90 
91   static bool UnregisterPlugin(DynamicLoaderCreateInstance create_callback);
92 
93   static DynamicLoaderCreateInstance
94   GetDynamicLoaderCreateCallbackAtIndex(uint32_t idx);
95 
96   static DynamicLoaderCreateInstance
97   GetDynamicLoaderCreateCallbackForPluginName(llvm::StringRef name);
98 
99   // JITLoader
100   static bool
101   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
102                  JITLoaderCreateInstance create_callback,
103                  DebuggerInitializeCallback debugger_init_callback = nullptr);
104 
105   static bool UnregisterPlugin(JITLoaderCreateInstance create_callback);
106 
107   static JITLoaderCreateInstance
108   GetJITLoaderCreateCallbackAtIndex(uint32_t idx);
109 
110   // EmulateInstruction
111   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
112                              EmulateInstructionCreateInstance create_callback);
113 
114   static bool
115   UnregisterPlugin(EmulateInstructionCreateInstance create_callback);
116 
117   static EmulateInstructionCreateInstance
118   GetEmulateInstructionCreateCallbackAtIndex(uint32_t idx);
119 
120   static EmulateInstructionCreateInstance
121   GetEmulateInstructionCreateCallbackForPluginName(llvm::StringRef name);
122 
123   // OperatingSystem
124   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
125                              OperatingSystemCreateInstance create_callback,
126                              DebuggerInitializeCallback debugger_init_callback);
127 
128   static bool UnregisterPlugin(OperatingSystemCreateInstance create_callback);
129 
130   static OperatingSystemCreateInstance
131   GetOperatingSystemCreateCallbackAtIndex(uint32_t idx);
132 
133   static OperatingSystemCreateInstance
134   GetOperatingSystemCreateCallbackForPluginName(llvm::StringRef name);
135 
136   // Language
137   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
138                              LanguageCreateInstance create_callback);
139 
140   static bool UnregisterPlugin(LanguageCreateInstance create_callback);
141 
142   static LanguageCreateInstance GetLanguageCreateCallbackAtIndex(uint32_t idx);
143 
144   // LanguageRuntime
145   static bool RegisterPlugin(
146       llvm::StringRef name, llvm::StringRef description,
147       LanguageRuntimeCreateInstance create_callback,
148       LanguageRuntimeGetCommandObject command_callback = nullptr,
149       LanguageRuntimeGetExceptionPrecondition precondition_callback = nullptr);
150 
151   static bool UnregisterPlugin(LanguageRuntimeCreateInstance create_callback);
152 
153   static LanguageRuntimeCreateInstance
154   GetLanguageRuntimeCreateCallbackAtIndex(uint32_t idx);
155 
156   static LanguageRuntimeGetCommandObject
157   GetLanguageRuntimeGetCommandObjectAtIndex(uint32_t idx);
158 
159   static LanguageRuntimeGetExceptionPrecondition
160   GetLanguageRuntimeGetExceptionPreconditionAtIndex(uint32_t idx);
161 
162   // SystemRuntime
163   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
164                              SystemRuntimeCreateInstance create_callback);
165 
166   static bool UnregisterPlugin(SystemRuntimeCreateInstance create_callback);
167 
168   static SystemRuntimeCreateInstance
169   GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx);
170 
171   // ObjectFile
172   static bool
173   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
174                  ObjectFileCreateInstance create_callback,
175                  ObjectFileCreateMemoryInstance create_memory_callback,
176                  ObjectFileGetModuleSpecifications get_module_specifications,
177                  ObjectFileSaveCore save_core = nullptr,
178                  DebuggerInitializeCallback debugger_init_callback = nullptr);
179 
180   static bool UnregisterPlugin(ObjectFileCreateInstance create_callback);
181 
182   static bool IsRegisteredObjectFilePluginName(llvm::StringRef name);
183 
184   static ObjectFileCreateInstance
185   GetObjectFileCreateCallbackAtIndex(uint32_t idx);
186 
187   static ObjectFileCreateMemoryInstance
188   GetObjectFileCreateMemoryCallbackAtIndex(uint32_t idx);
189 
190   static ObjectFileGetModuleSpecifications
191   GetObjectFileGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
192 
193   static ObjectFileCreateMemoryInstance
194   GetObjectFileCreateMemoryCallbackForPluginName(llvm::StringRef name);
195 
196   static Status SaveCore(const lldb::ProcessSP &process_sp,
197                          lldb_private::SaveCoreOptions &core_options);
198 
199   // ObjectContainer
200   static bool RegisterPlugin(
201       llvm::StringRef name, llvm::StringRef description,
202       ObjectContainerCreateInstance create_callback,
203       ObjectFileGetModuleSpecifications get_module_specifications,
204       ObjectContainerCreateMemoryInstance create_memory_callback = nullptr);
205 
206   static bool UnregisterPlugin(ObjectContainerCreateInstance create_callback);
207 
208   static ObjectContainerCreateInstance
209   GetObjectContainerCreateCallbackAtIndex(uint32_t idx);
210 
211   static ObjectContainerCreateMemoryInstance
212   GetObjectContainerCreateMemoryCallbackAtIndex(uint32_t idx);
213 
214   static ObjectFileGetModuleSpecifications
215   GetObjectContainerGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
216 
217   // Platform
218   static bool
219   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
220                  PlatformCreateInstance create_callback,
221                  DebuggerInitializeCallback debugger_init_callback = nullptr);
222 
223   static bool UnregisterPlugin(PlatformCreateInstance create_callback);
224 
225   static PlatformCreateInstance GetPlatformCreateCallbackAtIndex(uint32_t idx);
226 
227   static PlatformCreateInstance
228   GetPlatformCreateCallbackForPluginName(llvm::StringRef name);
229 
230   static llvm::StringRef GetPlatformPluginNameAtIndex(uint32_t idx);
231 
232   static llvm::StringRef GetPlatformPluginDescriptionAtIndex(uint32_t idx);
233 
234   static void AutoCompletePlatformName(llvm::StringRef partial_name,
235                                        CompletionRequest &request);
236   // Process
237   static bool
238   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
239                  ProcessCreateInstance create_callback,
240                  DebuggerInitializeCallback debugger_init_callback = nullptr);
241 
242   static bool UnregisterPlugin(ProcessCreateInstance create_callback);
243 
244   static ProcessCreateInstance GetProcessCreateCallbackAtIndex(uint32_t idx);
245 
246   static ProcessCreateInstance
247   GetProcessCreateCallbackForPluginName(llvm::StringRef name);
248 
249   static llvm::StringRef GetProcessPluginNameAtIndex(uint32_t idx);
250 
251   static llvm::StringRef GetProcessPluginDescriptionAtIndex(uint32_t idx);
252 
253   static void AutoCompleteProcessName(llvm::StringRef partial_name,
254                                       CompletionRequest &request);
255 
256   // Register Type Provider
257   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
258                              RegisterTypeBuilderCreateInstance create_callback);
259 
260   static bool
261   UnregisterPlugin(RegisterTypeBuilderCreateInstance create_callback);
262 
263   static lldb::RegisterTypeBuilderSP GetRegisterTypeBuilder(Target &target);
264 
265   // ScriptInterpreter
266   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
267                              lldb::ScriptLanguage script_lang,
268                              ScriptInterpreterCreateInstance create_callback);
269 
270   static bool UnregisterPlugin(ScriptInterpreterCreateInstance create_callback);
271 
272   static ScriptInterpreterCreateInstance
273   GetScriptInterpreterCreateCallbackAtIndex(uint32_t idx);
274 
275   static lldb::ScriptInterpreterSP
276   GetScriptInterpreterForLanguage(lldb::ScriptLanguage script_lang,
277                                   Debugger &debugger);
278 
279   // StructuredDataPlugin
280 
281   /// Register a StructuredDataPlugin class along with optional
282   /// callbacks for debugger initialization and Process launch info
283   /// filtering and manipulation.
284   ///
285   /// \param[in] name
286   ///    The name of the plugin.
287   ///
288   /// \param[in] description
289   ///    A description string for the plugin.
290   ///
291   /// \param[in] create_callback
292   ///    The callback that will be invoked to create an instance of
293   ///    the callback.  This may not be nullptr.
294   ///
295   /// \param[in] debugger_init_callback
296   ///    An optional callback that will be made when a Debugger
297   ///    instance is initialized.
298   ///
299   /// \param[in] filter_callback
300   ///    An optional callback that will be invoked before LLDB
301   ///    launches a process for debugging.  The callback must
302   ///    do the following:
303   ///    1. Only do something if the plugin's behavior is enabled.
304   ///    2. Only make changes for processes that are relevant to the
305   ///       plugin.  The callback gets a pointer to the Target, which
306   ///       can be inspected as needed.  The ProcessLaunchInfo is
307   ///       provided in read-write mode, and may be modified by the
308   ///       plugin if, for instance, additional environment variables
309   ///       are needed to support the feature when enabled.
310   ///
311   /// \return
312   ///    Returns true upon success; otherwise, false.
313   static bool
314   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
315                  StructuredDataPluginCreateInstance create_callback,
316                  DebuggerInitializeCallback debugger_init_callback = nullptr,
317                  StructuredDataFilterLaunchInfo filter_callback = nullptr);
318 
319   static bool
320   UnregisterPlugin(StructuredDataPluginCreateInstance create_callback);
321 
322   static StructuredDataPluginCreateInstance
323   GetStructuredDataPluginCreateCallbackAtIndex(uint32_t idx);
324 
325   static StructuredDataFilterLaunchInfo
326   GetStructuredDataFilterCallbackAtIndex(uint32_t idx,
327                                          bool &iteration_complete);
328 
329   // SymbolFile
330   static bool
331   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
332                  SymbolFileCreateInstance create_callback,
333                  DebuggerInitializeCallback debugger_init_callback = nullptr);
334 
335   static bool UnregisterPlugin(SymbolFileCreateInstance create_callback);
336 
337   static SymbolFileCreateInstance
338   GetSymbolFileCreateCallbackAtIndex(uint32_t idx);
339 
340   // SymbolVendor
341   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
342                              SymbolVendorCreateInstance create_callback);
343 
344   static bool UnregisterPlugin(SymbolVendorCreateInstance create_callback);
345 
346   static SymbolVendorCreateInstance
347   GetSymbolVendorCreateCallbackAtIndex(uint32_t idx);
348 
349   // SymbolLocator
350   static bool RegisterPlugin(
351       llvm::StringRef name, llvm::StringRef description,
352       SymbolLocatorCreateInstance create_callback,
353       SymbolLocatorLocateExecutableObjectFile locate_executable_object_file =
354           nullptr,
355       SymbolLocatorLocateExecutableSymbolFile locate_executable_symbol_file =
356           nullptr,
357       SymbolLocatorDownloadObjectAndSymbolFile download_object_symbol_file =
358           nullptr,
359       SymbolLocatorFindSymbolFileInBundle find_symbol_file_in_bundle = nullptr,
360       DebuggerInitializeCallback debugger_init_callback = nullptr);
361 
362   static bool UnregisterPlugin(SymbolLocatorCreateInstance create_callback);
363 
364   static SymbolLocatorCreateInstance
365   GetSymbolLocatorCreateCallbackAtIndex(uint32_t idx);
366 
367   static ModuleSpec LocateExecutableObjectFile(const ModuleSpec &module_spec);
368 
369   static FileSpec
370   LocateExecutableSymbolFile(const ModuleSpec &module_spec,
371                              const FileSpecList &default_search_paths);
372 
373   static bool DownloadObjectAndSymbolFile(ModuleSpec &module_spec,
374                                           Status &error,
375                                           bool force_lookup = true,
376                                           bool copy_executable = true);
377 
378   static FileSpec FindSymbolFileInBundle(const FileSpec &dsym_bundle_fspec,
379                                          const UUID *uuid,
380                                          const ArchSpec *arch);
381 
382   // Trace
383   static bool RegisterPlugin(
384       llvm::StringRef name, llvm::StringRef description,
385       TraceCreateInstanceFromBundle create_callback_from_bundle,
386       TraceCreateInstanceForLiveProcess create_callback_for_live_process,
387       llvm::StringRef schema,
388       DebuggerInitializeCallback debugger_init_callback);
389 
390   static bool
391   UnregisterPlugin(TraceCreateInstanceFromBundle create_callback);
392 
393   static TraceCreateInstanceFromBundle
394   GetTraceCreateCallback(llvm::StringRef plugin_name);
395 
396   static TraceCreateInstanceForLiveProcess
397   GetTraceCreateCallbackForLiveProcess(llvm::StringRef plugin_name);
398 
399   /// Get the JSON schema for a trace bundle description file corresponding to
400   /// the given plugin.
401   ///
402   /// \param[in] plugin_name
403   ///     The name of the plugin.
404   ///
405   /// \return
406   ///     An empty \a StringRef if no plugin was found with that plugin name,
407   ///     otherwise the actual schema is returned.
408   static llvm::StringRef GetTraceSchema(llvm::StringRef plugin_name);
409 
410   /// Get the JSON schema for a trace bundle description file corresponding to
411   /// the plugin given by its index.
412   ///
413   /// \param[in] index
414   ///     The index of the plugin to get the schema of.
415   ///
416   /// \return
417   ///     An empty \a StringRef if the index is greater than or equal to the
418   ///     number plugins, otherwise the actual schema is returned.
419   static llvm::StringRef GetTraceSchema(size_t index);
420 
421   // TraceExporter
422 
423   /// \param[in] create_thread_trace_export_command
424   ///     This callback is used to create a CommandObject that will be listed
425   ///     under "thread trace export". Can be \b null.
426   static bool RegisterPlugin(
427       llvm::StringRef name, llvm::StringRef description,
428       TraceExporterCreateInstance create_callback,
429       ThreadTraceExportCommandCreator create_thread_trace_export_command);
430 
431   static TraceExporterCreateInstance
432   GetTraceExporterCreateCallback(llvm::StringRef plugin_name);
433 
434   static bool UnregisterPlugin(TraceExporterCreateInstance create_callback);
435 
436   static llvm::StringRef GetTraceExporterPluginNameAtIndex(uint32_t index);
437 
438   /// Return the callback used to create the CommandObject that will be listed
439   /// under "thread trace export". Can be \b null.
440   static ThreadTraceExportCommandCreator
441   GetThreadTraceExportCommandCreatorAtIndex(uint32_t index);
442 
443   // UnwindAssembly
444   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
445                              UnwindAssemblyCreateInstance create_callback);
446 
447   static bool UnregisterPlugin(UnwindAssemblyCreateInstance create_callback);
448 
449   static UnwindAssemblyCreateInstance
450   GetUnwindAssemblyCreateCallbackAtIndex(uint32_t idx);
451 
452   // MemoryHistory
453   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
454                              MemoryHistoryCreateInstance create_callback);
455 
456   static bool UnregisterPlugin(MemoryHistoryCreateInstance create_callback);
457 
458   static MemoryHistoryCreateInstance
459   GetMemoryHistoryCreateCallbackAtIndex(uint32_t idx);
460 
461   // InstrumentationRuntime
462   static bool
463   RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
464                  InstrumentationRuntimeCreateInstance create_callback,
465                  InstrumentationRuntimeGetType get_type_callback);
466 
467   static bool
468   UnregisterPlugin(InstrumentationRuntimeCreateInstance create_callback);
469 
470   static InstrumentationRuntimeGetType
471   GetInstrumentationRuntimeGetTypeCallbackAtIndex(uint32_t idx);
472 
473   static InstrumentationRuntimeCreateInstance
474   GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx);
475 
476   // TypeSystem
477   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
478                              TypeSystemCreateInstance create_callback,
479                              LanguageSet supported_languages_for_types,
480                              LanguageSet supported_languages_for_expressions);
481 
482   static bool UnregisterPlugin(TypeSystemCreateInstance create_callback);
483 
484   static TypeSystemCreateInstance
485   GetTypeSystemCreateCallbackAtIndex(uint32_t idx);
486 
487   static LanguageSet GetAllTypeSystemSupportedLanguagesForTypes();
488 
489   static LanguageSet GetAllTypeSystemSupportedLanguagesForExpressions();
490 
491   // Scripted Interface
492   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
493                              ScriptedInterfaceCreateInstance create_callback,
494                              lldb::ScriptLanguage language,
495                              ScriptedInterfaceUsages usages);
496 
497   static bool UnregisterPlugin(ScriptedInterfaceCreateInstance create_callback);
498 
499   static uint32_t GetNumScriptedInterfaces();
500 
501   static llvm::StringRef GetScriptedInterfaceNameAtIndex(uint32_t idx);
502 
503   static llvm::StringRef GetScriptedInterfaceDescriptionAtIndex(uint32_t idx);
504 
505   static lldb::ScriptLanguage GetScriptedInterfaceLanguageAtIndex(uint32_t idx);
506 
507   static ScriptedInterfaceUsages
508   GetScriptedInterfaceUsagesAtIndex(uint32_t idx);
509 
510   // REPL
511   static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
512                              REPLCreateInstance create_callback,
513                              LanguageSet supported_languages);
514 
515   static bool UnregisterPlugin(REPLCreateInstance create_callback);
516 
517   static REPLCreateInstance GetREPLCreateCallbackAtIndex(uint32_t idx);
518 
519   static LanguageSet GetREPLSupportedLanguagesAtIndex(uint32_t idx);
520 
521   static LanguageSet GetREPLAllTypeSystemSupportedLanguages();
522 
523   // Some plug-ins might register a DebuggerInitializeCallback callback when
524   // registering the plug-in. After a new Debugger instance is created, this
525   // DebuggerInitialize function will get called. This allows plug-ins to
526   // install Properties and do any other initialization that requires a
527   // debugger instance.
528   static void DebuggerInitialize(Debugger &debugger);
529 
530   static lldb::OptionValuePropertiesSP
531   GetSettingForDynamicLoaderPlugin(Debugger &debugger,
532                                    llvm::StringRef setting_name);
533 
534   static bool CreateSettingForDynamicLoaderPlugin(
535       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
536       llvm::StringRef description, bool is_global_property);
537 
538   static lldb::OptionValuePropertiesSP
539   GetSettingForPlatformPlugin(Debugger &debugger, llvm::StringRef setting_name);
540 
541   static bool CreateSettingForPlatformPlugin(
542       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
543       llvm::StringRef description, bool is_global_property);
544 
545   static lldb::OptionValuePropertiesSP
546   GetSettingForProcessPlugin(Debugger &debugger, llvm::StringRef setting_name);
547 
548   static bool CreateSettingForProcessPlugin(
549       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
550       llvm::StringRef description, bool is_global_property);
551 
552   static lldb::OptionValuePropertiesSP
553   GetSettingForSymbolLocatorPlugin(Debugger &debugger,
554                                    llvm::StringRef setting_name);
555 
556   static bool CreateSettingForSymbolLocatorPlugin(
557       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
558       llvm::StringRef description, bool is_global_property);
559 
560   static bool CreateSettingForTracePlugin(
561       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
562       llvm::StringRef description, bool is_global_property);
563 
564   static lldb::OptionValuePropertiesSP
565   GetSettingForObjectFilePlugin(Debugger &debugger,
566                                 llvm::StringRef setting_name);
567 
568   static bool CreateSettingForObjectFilePlugin(
569       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
570       llvm::StringRef description, bool is_global_property);
571 
572   static lldb::OptionValuePropertiesSP
573   GetSettingForSymbolFilePlugin(Debugger &debugger,
574                                 llvm::StringRef setting_name);
575 
576   static bool CreateSettingForSymbolFilePlugin(
577       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
578       llvm::StringRef description, bool is_global_property);
579 
580   static lldb::OptionValuePropertiesSP
581   GetSettingForJITLoaderPlugin(Debugger &debugger,
582                                llvm::StringRef setting_name);
583 
584   static bool CreateSettingForJITLoaderPlugin(
585       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
586       llvm::StringRef description, bool is_global_property);
587 
588   static lldb::OptionValuePropertiesSP
589   GetSettingForOperatingSystemPlugin(Debugger &debugger,
590                                      llvm::StringRef setting_name);
591 
592   static bool CreateSettingForOperatingSystemPlugin(
593       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
594       llvm::StringRef description, bool is_global_property);
595 
596   static lldb::OptionValuePropertiesSP
597   GetSettingForStructuredDataPlugin(Debugger &debugger,
598                                     llvm::StringRef setting_name);
599 
600   static bool CreateSettingForStructuredDataPlugin(
601       Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
602       llvm::StringRef description, bool is_global_property);
603 };
604 
605 } // namespace lldb_private
606 
607 #endif // LLDB_CORE_PLUGINMANAGER_H
608