aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwalter erquinigo <walter@modular.com>2023-04-26 19:09:26 -0500
committerwalter erquinigo <walter@modular.com>2023-04-26 19:31:19 -0500
commitb1465cd49efcbc114a75220b153f5a055ce7911f (patch)
tree590bbc4b010cf791e1ce78e345d41a6d73dde848
parentd7fa92126cc398b993f301273816739b23ed8740 (diff)
downloadllvm-b1465cd49efcbc114a75220b153f5a055ce7911f.zip
llvm-b1465cd49efcbc114a75220b153f5a055ce7911f.tar.gz
llvm-b1465cd49efcbc114a75220b153f5a055ce7911f.tar.bz2
[lldb] Create a way to force remove commands
Some LLDB set ups need to hide certain commands for security reasons, so I'm adding a flag that allows removing non-user commands. Differential Revision: https://reviews.llvm.org/D149312
-rw-r--r--lldb/include/lldb/Interpreter/CommandInterpreter.h5
-rw-r--r--lldb/source/Interpreter/CommandInterpreter.cpp7
2 files changed, 7 insertions, 5 deletions
diff --git a/lldb/include/lldb/Interpreter/CommandInterpreter.h b/lldb/include/lldb/Interpreter/CommandInterpreter.h
index e428614..f6a9a4d 100644
--- a/lldb/include/lldb/Interpreter/CommandInterpreter.h
+++ b/lldb/include/lldb/Interpreter/CommandInterpreter.h
@@ -324,8 +324,9 @@ public:
lldb::CommandObjectSP &command_obj_sp,
llvm::StringRef args_string = llvm::StringRef());
- // Remove a command if it is removable (python or regex command)
- bool RemoveCommand(llvm::StringRef cmd);
+ /// Remove a command if it is removable (python or regex command). If \b force
+ /// is provided, the command is removed regardless of its removable status.
+ bool RemoveCommand(llvm::StringRef cmd, bool force = false);
bool RemoveAlias(llvm::StringRef alias_name);
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 09fc8e2..cee17df 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -1374,11 +1374,12 @@ bool CommandInterpreter::RemoveAlias(llvm::StringRef alias_name) {
return false;
}
-bool CommandInterpreter::RemoveCommand(llvm::StringRef cmd) {
+bool CommandInterpreter::RemoveCommand(llvm::StringRef cmd, bool force) {
auto pos = m_command_dict.find(std::string(cmd));
if (pos != m_command_dict.end()) {
- if (pos->second->IsRemovable()) {
- // Only regular expression objects or python commands are removable
+ if (force || pos->second->IsRemovable()) {
+ // Only regular expression objects or python commands are removable under
+ // normal circumstances.
m_command_dict.erase(pos);
return true;
}