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