[Lldb-commits] [lldb] ca8faf8 - [lldb] Respect empty arguments in target.run-args
Alex Langford via lldb-commits
lldb-commits at lists.llvm.org
Tue Mar 7 11:29:41 PST 2023
Author: Alex Langford
Date: 2023-03-07T11:29:27-08:00
New Revision: ca8faf8f465962e5c39d145a0e2236648cbcc27d
URL: https://github.com/llvm/llvm-project/commit/ca8faf8f465962e5c39d145a0e2236648cbcc27d
DIFF: https://github.com/llvm/llvm-project/commit/ca8faf8f465962e5c39d145a0e2236648cbcc27d.diff
LOG: [lldb] Respect empty arguments in target.run-args
Currently empty arguments are not respected. They are silently dropped
in two places: (1) when extracting them from the target.run-args
setting and (2) when constructing the lldb-argdumper invocation.
(1) is actually a regression from a few years ago. We did not always
drop empty arguments. See 31d97a5c8ab78c619deada0cdb1fcf64021d25dd.
rdar://106279228
Differential Revision: https://reviews.llvm.org/D145450
Added:
lldb/test/Shell/Driver/Inputs/dumpargs.c
lldb/test/Shell/Driver/TestEmptyArgument.test
Modified:
lldb/source/Host/common/ProcessLaunchInfo.cpp
lldb/source/Interpreter/OptionValueArgs.cpp
Removed:
################################################################################
diff --git a/lldb/source/Host/common/ProcessLaunchInfo.cpp b/lldb/source/Host/common/ProcessLaunchInfo.cpp
index af278cc1a03c3..8e09601b5715b 100644
--- a/lldb/source/Host/common/ProcessLaunchInfo.cpp
+++ b/lldb/source/Host/common/ProcessLaunchInfo.cpp
@@ -321,6 +321,8 @@ bool ProcessLaunchInfo::ConvertArgumentsForLaunchingInShell(
} else {
for (size_t i = 0; argv[i] != nullptr; ++i) {
std::string safe_arg = Args::GetShellSafeArgument(m_shell, argv[i]);
+ if (safe_arg.empty())
+ safe_arg = "\"\"";
// Add a space to separate this arg from the previous one.
shell_command.PutCString(" ");
shell_command.PutCString(safe_arg);
diff --git a/lldb/source/Interpreter/OptionValueArgs.cpp b/lldb/source/Interpreter/OptionValueArgs.cpp
index bdb5f486835a6..0e20154907b02 100644
--- a/lldb/source/Interpreter/OptionValueArgs.cpp
+++ b/lldb/source/Interpreter/OptionValueArgs.cpp
@@ -17,8 +17,7 @@ size_t OptionValueArgs::GetArgs(Args &args) const {
args.Clear();
for (const auto &value : m_values) {
llvm::StringRef string_value = value->GetStringValue();
- if (!string_value.empty())
- args.AppendArgument(string_value);
+ args.AppendArgument(string_value);
}
return args.GetArgumentCount();
diff --git a/lldb/test/Shell/Driver/Inputs/dumpargs.c b/lldb/test/Shell/Driver/Inputs/dumpargs.c
new file mode 100644
index 0000000000000..5f0e6a4cb01d0
--- /dev/null
+++ b/lldb/test/Shell/Driver/Inputs/dumpargs.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int main(int argc, char *argv[]) {
+ for (int i = 0; i < argc; i++) {
+ printf("argv[%d] = \"%s\"\n", i, argv[i]);
+ }
+ return 0;
+}
diff --git a/lldb/test/Shell/Driver/TestEmptyArgument.test b/lldb/test/Shell/Driver/TestEmptyArgument.test
new file mode 100644
index 0000000000000..ff327bdd38d01
--- /dev/null
+++ b/lldb/test/Shell/Driver/TestEmptyArgument.test
@@ -0,0 +1,7 @@
+# RUN: %clang_host %S/Inputs/dumpargs.c -o %t.out
+# RUN: %lldb -b -o "r" %t.out -- "one" "two" "" "three" | FileCheck %s
+
+# CHECK: argv[1] = "one"
+# CHECK: argv[2] = "two"
+# CHECK: argv[3] = ""
+# CHECK: argv[4] = "three"
More information about the lldb-commits
mailing list