[Lldb-commits] [PATCH] D110033: [lldb] [gdb-remote] Always send PID when detaching w/ multiprocess
Michał Górny via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Mon Sep 20 03:54:51 PDT 2021
mgorny updated this revision to Diff 373545.
mgorny added a comment.
Add tests.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110033/new/
https://reviews.llvm.org/D110033
Files:
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
Index: lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
===================================================================
--- lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
+++ lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
@@ -354,3 +354,45 @@
"QEnvironmentHexEncoded:4e45454453454e43343d6623726f62",
"QEnvironmentHexEncoded:455155414c533d666f6f3d626172",
])
+
+ def test_detach_no_multiprocess(self):
+ class MyResponder(MockGDBServerResponder):
+ def __init__(self):
+ super().__init__()
+ self.detached = None
+
+ def qfThreadInfo(self):
+ return "10200"
+
+ def D(self, packet):
+ self.detached = packet
+ return "OK"
+
+ self.server.responder = MyResponder()
+ target = self.dbg.CreateTarget('')
+ process = self.connect(target)
+ process.Detach()
+ self.assertEqual(self.server.responder.detached, "D")
+
+ def test_detach_pid(self):
+ class MyResponder(MockGDBServerResponder):
+ def __init__(self):
+ super().__init__()
+ self.detached = None
+
+ def qSupported(self, client_supported):
+ assert "multiprocess+" in client_supported
+ return "multiprocess+;" + super().qSupported(client_supported)
+
+ def qfThreadInfo(self):
+ return "mp400.10200"
+
+ def D(self, packet):
+ self.detached = packet
+ return "OK"
+
+ self.server.responder = MyResponder()
+ target = self.dbg.CreateTarget('')
+ process = self.connect(target)
+ process.Detach()
+ self.assertRegex(self.server.responder.detached, r"D;0*400")
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
@@ -1543,14 +1543,16 @@
}
}
- if (pid != LLDB_INVALID_PROCESS_ID) {
- if (!m_supports_multiprocess) {
- error.SetErrorString(
- "Multiprocess extension not supported by the server.");
- return error;
- }
+ if (m_supports_multiprocess) {
+ // Some servers (e.g. qemu) require specifying the PID even if only a single
+ // process is running.
+ if (pid == LLDB_INVALID_PROCESS_ID)
+ pid = GetCurrentProcessID();
packet.PutChar(';');
packet.PutHex64(pid);
+ } else if (pid != LLDB_INVALID_PROCESS_ID) {
+ error.SetErrorString("Multiprocess extension not supported by the server.");
+ return error;
}
StringExtractorGDBRemote response;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110033.373545.patch
Type: text/x-patch
Size: 2872 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210920/6d689986/attachment.bin>
More information about the lldb-commits
mailing list