diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h index e7b1691031111..1d7c976f3c382 100644 --- a/lldb/include/lldb/Core/PluginManager.h +++ b/lldb/include/lldb/Core/PluginManager.h @@ -236,12 +236,6 @@ class PluginManager { static SystemRuntimeCreateInstance GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx); - static std::vector GetSystemRuntimePluginInfo(); - - // Modify the enabled state of a SystemRuntime plugin. - // Returns false if the plugin name is not found. - static bool SetSystemRuntimePluginEnabled(llvm::StringRef name, bool enabled); - // ObjectFile static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, @@ -549,12 +543,6 @@ class PluginManager { static InstrumentationRuntimeCreateInstance GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx); - static std::vector - GetInstrumentationRuntimePluginInfo(); - - static bool SetInstrumentationRuntimePluginEnabled(llvm::StringRef name, - bool enabled); - // TypeSystem static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, TypeSystemCreateInstance create_callback, @@ -690,6 +678,102 @@ class PluginManager { static bool CreateSettingForCPlusPlusLanguagePlugin( Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp, llvm::StringRef description, bool is_global_property); + + // + // Plugin Info+Enable Declarations + // + static std::vector GetABIPluginInfo(); + static bool SetABIPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetArchitecturePluginInfo(); + static bool SetArchitecturePluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetDisassemblerPluginInfo(); + static bool SetDisassemblerPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetDynamicLoaderPluginInfo(); + static bool SetDynamicLoaderPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetEmulateInstructionPluginInfo(); + static bool SetEmulateInstructionPluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector + GetInstrumentationRuntimePluginInfo(); + static bool SetInstrumentationRuntimePluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector GetJITLoaderPluginInfo(); + static bool SetJITLoaderPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetLanguagePluginInfo(); + static bool SetLanguagePluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetLanguageRuntimePluginInfo(); + static bool SetLanguageRuntimePluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector GetMemoryHistoryPluginInfo(); + static bool SetMemoryHistoryPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetObjectContainerPluginInfo(); + static bool SetObjectContainerPluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector GetObjectFilePluginInfo(); + static bool SetObjectFilePluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetOperatingSystemPluginInfo(); + static bool SetOperatingSystemPluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector GetPlatformPluginInfo(); + static bool SetPlatformPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetProcessPluginInfo(); + static bool SetProcessPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetREPLPluginInfo(); + static bool SetREPLPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetRegisterTypeBuilderPluginInfo(); + static bool SetRegisterTypeBuilderPluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector GetScriptInterpreterPluginInfo(); + static bool SetScriptInterpreterPluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector GetScriptedInterfacePluginInfo(); + static bool SetScriptedInterfacePluginEnabled(llvm::StringRef name, + bool enable); + + static std::vector GetStructuredDataPluginInfo(); + static bool SetStructuredDataPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetSymbolFilePluginInfo(); + static bool SetSymbolFilePluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetSymbolLocatorPluginInfo(); + static bool SetSymbolLocatorPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetSymbolVendorPluginInfo(); + static bool SetSymbolVendorPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetSystemRuntimePluginInfo(); + static bool SetSystemRuntimePluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetTracePluginInfo(); + static bool SetTracePluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetTraceExporterPluginInfo(); + static bool SetTraceExporterPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetTypeSystemPluginInfo(); + static bool SetTypeSystemPluginEnabled(llvm::StringRef name, bool enable); + + static std::vector GetUnwindAssemblyPluginInfo(); + static bool SetUnwindAssemblyPluginEnabled(llvm::StringRef name, bool enable); }; } // namespace lldb_private diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp index 5d44434033c55..dfa865929b64f 100644 --- a/lldb/source/Core/PluginManager.cpp +++ b/lldb/source/Core/PluginManager.cpp @@ -182,14 +182,176 @@ void PluginManager::Terminate() { } llvm::ArrayRef PluginManager::GetPluginNamespaces() { - // Currently supported set of plugin namespaces. This will be expanded - // over time. static PluginNamespace PluginNamespaces[] = { - {"system-runtime", PluginManager::GetSystemRuntimePluginInfo, - PluginManager::SetSystemRuntimePluginEnabled}, - {"instrumentation-runtime", - PluginManager::GetInstrumentationRuntimePluginInfo, - PluginManager::SetInstrumentationRuntimePluginEnabled}}; + + { + "abi", + PluginManager::GetABIPluginInfo, + PluginManager::SetABIPluginEnabled, + }, + + { + "architecture", + PluginManager::GetArchitecturePluginInfo, + PluginManager::SetArchitecturePluginEnabled, + }, + + { + "disassembler", + PluginManager::GetDisassemblerPluginInfo, + PluginManager::SetDisassemblerPluginEnabled, + }, + + { + "dynamic-loader", + PluginManager::GetDynamicLoaderPluginInfo, + PluginManager::SetDynamicLoaderPluginEnabled, + }, + + { + "emulate-instruction", + PluginManager::GetEmulateInstructionPluginInfo, + PluginManager::SetEmulateInstructionPluginEnabled, + }, + + { + "instrumentation-runtime", + PluginManager::GetInstrumentationRuntimePluginInfo, + PluginManager::SetInstrumentationRuntimePluginEnabled, + }, + + { + "jit-loader", + PluginManager::GetJITLoaderPluginInfo, + PluginManager::SetJITLoaderPluginEnabled, + }, + + { + "language", + PluginManager::GetLanguagePluginInfo, + PluginManager::SetLanguagePluginEnabled, + }, + + { + "language-runtime", + PluginManager::GetLanguageRuntimePluginInfo, + PluginManager::SetLanguageRuntimePluginEnabled, + }, + + { + "memory-history", + PluginManager::GetMemoryHistoryPluginInfo, + PluginManager::SetMemoryHistoryPluginEnabled, + }, + + { + "object-container", + PluginManager::GetObjectContainerPluginInfo, + PluginManager::SetObjectContainerPluginEnabled, + }, + + { + "object-file", + PluginManager::GetObjectFilePluginInfo, + PluginManager::SetObjectFilePluginEnabled, + }, + + { + "operating-system", + PluginManager::GetOperatingSystemPluginInfo, + PluginManager::SetOperatingSystemPluginEnabled, + }, + + { + "platform", + PluginManager::GetPlatformPluginInfo, + PluginManager::SetPlatformPluginEnabled, + }, + + { + "process", + PluginManager::GetProcessPluginInfo, + PluginManager::SetProcessPluginEnabled, + }, + + { + "repl", + PluginManager::GetREPLPluginInfo, + PluginManager::SetREPLPluginEnabled, + }, + + { + "register-type-builder", + PluginManager::GetRegisterTypeBuilderPluginInfo, + PluginManager::SetRegisterTypeBuilderPluginEnabled, + }, + + { + "script-interpreter", + PluginManager::GetScriptInterpreterPluginInfo, + PluginManager::SetScriptInterpreterPluginEnabled, + }, + + { + "scripted-interface", + PluginManager::GetScriptedInterfacePluginInfo, + PluginManager::SetScriptedInterfacePluginEnabled, + }, + + { + "structured-data", + PluginManager::GetStructuredDataPluginInfo, + PluginManager::SetStructuredDataPluginEnabled, + }, + + { + "symbol-file", + PluginManager::GetSymbolFilePluginInfo, + PluginManager::SetSymbolFilePluginEnabled, + }, + + { + "symbol-locator", + PluginManager::GetSymbolLocatorPluginInfo, + PluginManager::SetSymbolLocatorPluginEnabled, + }, + + { + "symbol-vendor", + PluginManager::GetSymbolVendorPluginInfo, + PluginManager::SetSymbolVendorPluginEnabled, + }, + + { + "system-runtime", + PluginManager::GetSystemRuntimePluginInfo, + PluginManager::SetSystemRuntimePluginEnabled, + }, + + { + "trace", + PluginManager::GetTracePluginInfo, + PluginManager::SetTracePluginEnabled, + }, + + { + "trace-exporter", + PluginManager::GetTraceExporterPluginInfo, + PluginManager::SetTraceExporterPluginEnabled, + }, + + { + "type-system", + PluginManager::GetTypeSystemPluginInfo, + PluginManager::SetTypeSystemPluginEnabled, + }, + + { + "unwind-assembly", + PluginManager::GetUnwindAssemblyPluginInfo, + PluginManager::SetUnwindAssemblyPluginEnabled, + }, + }; return PluginNamespaces; } @@ -407,7 +569,7 @@ ABICreateInstance PluginManager::GetABICreateCallbackAtIndex(uint32_t idx) { #pragma mark Architecture typedef PluginInstance ArchitectureInstance; -typedef std::vector ArchitectureInstances; +typedef PluginInstances ArchitectureInstances; static ArchitectureInstances &GetArchitectureInstances() { static ArchitectureInstances g_instances; @@ -417,25 +579,18 @@ static ArchitectureInstances &GetArchitectureInstances() { void PluginManager::RegisterPlugin(llvm::StringRef name, llvm::StringRef description, ArchitectureCreateInstance create_callback) { - GetArchitectureInstances().push_back({name, description, create_callback}); + GetArchitectureInstances().RegisterPlugin(name, description, create_callback); } void PluginManager::UnregisterPlugin( ArchitectureCreateInstance create_callback) { auto &instances = GetArchitectureInstances(); - - for (auto pos = instances.begin(), end = instances.end(); pos != end; ++pos) { - if (pos->create_callback == create_callback) { - instances.erase(pos); - return; - } - } - llvm_unreachable("Plugin not found"); + instances.UnregisterPlugin(create_callback); } std::unique_ptr PluginManager::CreateArchitectureInstance(const ArchSpec &arch) { - for (const auto &instances : GetArchitectureInstances()) { + for (const auto &instances : GetArchitectureInstances().GetSnapshot()) { if (auto plugin_up = instances.create_callback(arch)) return plugin_up; } @@ -718,15 +873,6 @@ PluginManager::GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx) { return GetSystemRuntimeInstances().GetCallbackAtIndex(idx); } -std::vector PluginManager::GetSystemRuntimePluginInfo() { - return GetSystemRuntimeInstances().GetPluginInfoForAllInstances(); -} - -bool PluginManager::SetSystemRuntimePluginEnabled(llvm::StringRef name, - bool enable) { - return GetSystemRuntimeInstances().SetInstanceEnabled(name, enable); -} - #pragma mark ObjectFile struct ObjectFileInstance : public PluginInstance { @@ -1563,16 +1709,6 @@ PluginManager::GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx) { return GetInstrumentationRuntimeInstances().GetCallbackAtIndex(idx); } -std::vector -PluginManager::GetInstrumentationRuntimePluginInfo() { - return GetInstrumentationRuntimeInstances().GetPluginInfoForAllInstances(); -} - -bool PluginManager::SetInstrumentationRuntimePluginEnabled(llvm::StringRef name, - bool enable) { - return GetInstrumentationRuntimeInstances().SetInstanceEnabled(name, enable); -} - #pragma mark TypeSystem struct TypeSystemInstance : public PluginInstance { @@ -2057,3 +2193,234 @@ bool PluginManager::CreateSettingForCPlusPlusLanguagePlugin( "Settings for CPlusPlus language plug-ins", properties_sp, description, is_global_property); } + +// +// Plugin Info+Enable Implementations +// +std::vector PluginManager::GetABIPluginInfo() { + return GetABIInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetABIPluginEnabled(llvm::StringRef name, bool enable) { + return GetABIInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetArchitecturePluginInfo() { + return GetArchitectureInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetArchitecturePluginEnabled(llvm::StringRef name, + bool enable) { + return GetArchitectureInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetDisassemblerPluginInfo() { + return GetDisassemblerInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetDisassemblerPluginEnabled(llvm::StringRef name, + bool enable) { + return GetDisassemblerInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetDynamicLoaderPluginInfo() { + return GetDynamicLoaderInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetDynamicLoaderPluginEnabled(llvm::StringRef name, + bool enable) { + return GetDynamicLoaderInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetEmulateInstructionPluginInfo() { + return GetEmulateInstructionInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetEmulateInstructionPluginEnabled(llvm::StringRef name, + bool enable) { + return GetEmulateInstructionInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetInstrumentationRuntimePluginInfo() { + return GetInstrumentationRuntimeInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetInstrumentationRuntimePluginEnabled(llvm::StringRef name, + bool enable) { + return GetInstrumentationRuntimeInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetJITLoaderPluginInfo() { + return GetJITLoaderInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetJITLoaderPluginEnabled(llvm::StringRef name, + bool enable) { + return GetJITLoaderInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetLanguagePluginInfo() { + return GetLanguageInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetLanguagePluginEnabled(llvm::StringRef name, + bool enable) { + return GetLanguageInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetLanguageRuntimePluginInfo() { + return GetLanguageRuntimeInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetLanguageRuntimePluginEnabled(llvm::StringRef name, + bool enable) { + return GetLanguageRuntimeInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetMemoryHistoryPluginInfo() { + return GetMemoryHistoryInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetMemoryHistoryPluginEnabled(llvm::StringRef name, + bool enable) { + return GetMemoryHistoryInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetObjectContainerPluginInfo() { + return GetObjectContainerInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetObjectContainerPluginEnabled(llvm::StringRef name, + bool enable) { + return GetObjectContainerInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetObjectFilePluginInfo() { + return GetObjectFileInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetObjectFilePluginEnabled(llvm::StringRef name, + bool enable) { + return GetObjectFileInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetOperatingSystemPluginInfo() { + return GetOperatingSystemInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetOperatingSystemPluginEnabled(llvm::StringRef name, + bool enable) { + return GetOperatingSystemInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetPlatformPluginInfo() { + return GetPlatformInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetPlatformPluginEnabled(llvm::StringRef name, + bool enable) { + return GetPlatformInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetProcessPluginInfo() { + return GetProcessInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetProcessPluginEnabled(llvm::StringRef name, bool enable) { + return GetProcessInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetREPLPluginInfo() { + return GetREPLInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetREPLPluginEnabled(llvm::StringRef name, bool enable) { + return GetREPLInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetRegisterTypeBuilderPluginInfo() { + return GetRegisterTypeBuilderInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetRegisterTypeBuilderPluginEnabled(llvm::StringRef name, + bool enable) { + return GetRegisterTypeBuilderInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetScriptInterpreterPluginInfo() { + return GetScriptInterpreterInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetScriptInterpreterPluginEnabled(llvm::StringRef name, + bool enable) { + return GetScriptInterpreterInstances().SetInstanceEnabled(name, enable); +} + +std::vector +PluginManager::GetScriptedInterfacePluginInfo() { + return GetScriptedInterfaceInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetScriptedInterfacePluginEnabled(llvm::StringRef name, + bool enable) { + return GetScriptedInterfaceInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetStructuredDataPluginInfo() { + return GetStructuredDataPluginInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetStructuredDataPluginEnabled(llvm::StringRef name, + bool enable) { + return GetStructuredDataPluginInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetSymbolFilePluginInfo() { + return GetSymbolFileInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetSymbolFilePluginEnabled(llvm::StringRef name, + bool enable) { + return GetSymbolFileInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetSymbolLocatorPluginInfo() { + return GetSymbolLocatorInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetSymbolLocatorPluginEnabled(llvm::StringRef name, + bool enable) { + return GetSymbolLocatorInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetSymbolVendorPluginInfo() { + return GetSymbolVendorInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetSymbolVendorPluginEnabled(llvm::StringRef name, + bool enable) { + return GetSymbolVendorInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetSystemRuntimePluginInfo() { + return GetSystemRuntimeInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetSystemRuntimePluginEnabled(llvm::StringRef name, + bool enable) { + return GetSystemRuntimeInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetTracePluginInfo() { + return GetTracePluginInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetTracePluginEnabled(llvm::StringRef name, bool enable) { + return GetTracePluginInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetTraceExporterPluginInfo() { + return GetTraceExporterInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetTraceExporterPluginEnabled(llvm::StringRef name, + bool enable) { + return GetTraceExporterInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetTypeSystemPluginInfo() { + return GetTypeSystemInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetTypeSystemPluginEnabled(llvm::StringRef name, + bool enable) { + return GetTypeSystemInstances().SetInstanceEnabled(name, enable); +} + +std::vector PluginManager::GetUnwindAssemblyPluginInfo() { + return GetUnwindAssemblyInstances().GetPluginInfoForAllInstances(); +} +bool PluginManager::SetUnwindAssemblyPluginEnabled(llvm::StringRef name, + bool enable) { + return GetUnwindAssemblyInstances().SetInstanceEnabled(name, enable); +} diff --git a/lldb/test/API/commands/plugin/TestPlugin.py b/lldb/test/API/commands/plugin/TestPlugin.py new file mode 100644 index 0000000000000..fdfb14bfcc24e --- /dev/null +++ b/lldb/test/API/commands/plugin/TestPlugin.py @@ -0,0 +1,62 @@ +""" +Make sure the plugin list, enable, and disable commands work. +""" + +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * + + +class TestFrameVar(TestBase): + # If your test case doesn't stress debug info, then + # set this to true. That way it won't be run once for + # each debug info format. + NO_DEBUG_INFO_TESTCASE = True + + def test_plugin_list_enable_disable_commands(self): + for plugin_namespace in [ + "abi", + "architecture", + "disassembler", + "dynamic-loader", + "emulate-instruction", + "instrumentation-runtime", + "jit-loader", + "language", + "language-runtime", + "memory-history", + "object-container", + "object-file", + "operating-system", + "platform", + "process", + "repl", + "register-type-builder", + "script-interpreter", + "scripted-interface", + "structured-data", + "symbol-file", + "symbol-locator", + "symbol-vendor", + "system-runtime", + # 'trace', # No trace plugin is registered by default. + "trace-exporter", + "type-system", + "unwind-assembly", + ]: + self.do_list_disable_enable_test(plugin_namespace) + + def do_list_disable_enable_test(self, plugin_namespace): + # Plugins are enabled by default. + self.expect( + f"plugin list {plugin_namespace}", substrs=[plugin_namespace, "[+]"] + ) + + # Plugins can be disabled. + self.expect( + f"plugin disable {plugin_namespace}", substrs=[plugin_namespace, "[-]"] + ) + + # Plugins can be enabled. + self.expect( + f"plugin enable {plugin_namespace}", substrs=[plugin_namespace, "[+]"] + ) diff --git a/lldb/test/Shell/Commands/command-plugin-list.test b/lldb/test/Shell/Commands/command-plugin-list.test index 9d3680d48cdd0..3f02157665bb2 100644 --- a/lldb/test/Shell/Commands/command-plugin-list.test +++ b/lldb/test/Shell/Commands/command-plugin-list.test @@ -10,10 +10,10 @@ # Test plugin list without an argument will list all plugins. plugin list # CHECK-LABEL: plugin list -# CHECK: system-runtime -# CHECK: [+] systemruntime-macosx System runtime plugin for Mac OS X native libraries -# CHECK: instrumentation-runtime -# CHECK: [+] AddressSanitizer AddressSanitizer instrumentation runtime plugin. +# CHECK-DAG: instrumentation-runtime +# CHECK-DAG: [+] AddressSanitizer AddressSanitizer instrumentation runtime plugin. +# CHECK-DAG: system-runtime +# CHECK-DAG: [+] systemruntime-macosx System runtime plugin for Mac OS X native libraries # Test plugin list works with fully qualified name. plugin list system-runtime.systemruntime-macosx