wallace updated this revision to Diff 223376.
wallace added a comment.
added a test
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68293/new/
https://reviews.llvm.org/D68293
Files:
lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py
lldb/source/Host/linux/Host.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
lldb/source/Utility/ProcessInfo.cpp
Index: lldb/source/Utility/ProcessInfo.cpp
===================================================================
--- lldb/source/Utility/ProcessInfo.cpp
+++ lldb/source/Utility/ProcessInfo.cpp
@@ -39,6 +39,8 @@
}
const char *ProcessInfo::GetName() const {
+ if (m_executable.GetFilename().IsEmpty())
+ return GetArguments().GetArgumentAtIndex(0);
return m_executable.GetFilename().GetCString();
}
Index: lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
+++ lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp
@@ -1184,6 +1184,15 @@
proc_info.GetEffectiveUserID(), proc_info.GetEffectiveGroupID());
response.PutCString("name:");
response.PutStringAsRawHex8(proc_info.GetExecutableFile().GetCString());
+
+ response.PutChar(';');
+ response.PutCString("args:");
+ response.PutStringAsRawHex8(proc_info.GetArg0());
+ for (auto &arg : proc_info.GetArguments()) {
+ response.PutChar('-');
+ response.PutStringAsRawHex8(arg.c_str());
+ }
+
response.PutChar(';');
const ArchSpec &proc_arch = proc_info.GetArchitecture();
if (proc_arch.IsValid()) {
Index: lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -1927,6 +1927,27 @@
std::string name;
extractor.GetHexByteString(name);
process_info.GetExecutableFile().SetFile(name, FileSpec::Style::native);
+ } else if (name.equals("args")) {
+ StringExtractor extractor(value);
+ std::stringstream stream(value);
+
+ auto extractOneArg = [&](std::string &arg) {
+ std::string hex_arg;
+ if (!getline(stream, hex_arg, '-'))
+ return false;
+ extractor = StringExtractor(hex_arg);
+ extractor.GetHexByteString(arg);
+ return true;
+ };
+
+ std::string arg;
+ if (!extractOneArg(arg))
+ continue;
+ process_info.SetArg0(arg);
+ process_info.GetArguments().AppendArgument(arg);
+
+ while (extractOneArg(arg))
+ process_info.GetArguments().AppendArgument(arg);
} else if (name.equals("cputype")) {
value.getAsInteger(0, cpu);
} else if (name.equals("cpusubtype")) {
Index: lldb/source/Host/linux/Host.cpp
===================================================================
--- lldb/source/Host/linux/Host.cpp
+++ lldb/source/Host/linux/Host.cpp
@@ -156,6 +156,8 @@
while (!Rest.empty()) {
llvm::StringRef Arg;
std::tie(Arg, Rest) = Rest.split('\0');
+ if (Arg.empty())
+ continue;
process_info.GetArguments().AppendArgument(Arg);
}
}
@@ -192,7 +194,7 @@
auto BufferOrError = getProcFile(pid, "environ");
if (!BufferOrError)
return;
-
+
std::unique_ptr<llvm::MemoryBuffer> Environ = std::move(*BufferOrError);
llvm::StringRef Rest = Environ->getBuffer();
while (!Rest.empty()) {
Index: lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py
===================================================================
--- lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py
+++ lldb/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py
@@ -14,7 +14,10 @@
class MyResponder(MockGDBServerResponder):
def qfProcessInfo(self, packet):
if "all_users:1" in packet:
- return "pid:10;ppid:1;uid:2;gid:3;euid:4;egid:5;name:" + binascii.hexlify("/a/process") + ";args:"
+ name = binascii.hexlify("/a/process")
+ args = "-".join(map(binascii.hexlify,
+ ["/system/bin/sh", "-c", "/data/local/tmp/lldb-server"]))
+ return "pid:10;ppid:1;uid:2;gid:3;euid:4;egid:5;name:" + name + ";args:" + args + ";"
else:
return "E04"
@@ -23,6 +26,7 @@
self.runCmd("platform select remote-linux")
try:
+ self.runCmd("log enable gdb-remote all")
self.runCmd("platform connect connect://localhost:%d" %
self.server.port)
self.assertTrue(self.dbg.GetSelectedPlatform().IsConnected())
@@ -31,7 +35,8 @@
self.expect("platform process list -xv",
substrs=[
"PID PARENT USER GROUP EFF USER EFF GROUP",
- "10 1 2 3 4 5"])
+ "10 1 2 3 4 5",
+ "/system/bin/sh -c /data/local/tmp/lldb-server"])
self.expect("platform process list",
error="error: no processes were found on the \"remote-linux\" platform")
finally:
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits