diff options
Diffstat (limited to 'lldb/source/Commands/CommandObjectProcess.cpp')
-rw-r--r-- | lldb/source/Commands/CommandObjectProcess.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lldb/source/Commands/CommandObjectProcess.cpp b/lldb/source/Commands/CommandObjectProcess.cpp index b1f243c..0a17442 100644 --- a/lldb/source/Commands/CommandObjectProcess.cpp +++ b/lldb/source/Commands/CommandObjectProcess.cpp @@ -1281,7 +1281,27 @@ public: ~CommandOptions() override = default; llvm::ArrayRef<OptionDefinition> GetDefinitions() override { - return llvm::ArrayRef(g_process_save_core_options); + if (!m_opt_def.empty()) + return llvm::ArrayRef(m_opt_def); + + auto orig = llvm::ArrayRef(g_process_save_core_options); + m_opt_def.resize(orig.size()); + llvm::copy(g_process_save_core_options, m_opt_def.data()); + for (OptionDefinition &value : m_opt_def) { + llvm::StringRef opt_name = value.long_option; + if (opt_name != "plugin-name") + continue; + + std::vector<llvm::StringRef> plugin_names = + PluginManager::GetSaveCorePluginNames(); + m_plugin_enums.resize(plugin_names.size()); + for (auto [num, val] : llvm::zip(plugin_names, m_plugin_enums)) { + val.string_value = num.data(); + } + value.enum_values = llvm::ArrayRef(m_plugin_enums); + break; + } + return llvm::ArrayRef(m_opt_def); } Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, @@ -1312,6 +1332,8 @@ public: // Instance variables to hold the values for command options. SaveCoreOptions m_core_dump_options; + llvm::SmallVector<OptionEnumValueElement> m_plugin_enums; + std::vector<OptionDefinition> m_opt_def; }; protected: |