aprantl created this revision.
aprantl added reviewers: jasonmolenda, friss.
Herald added subscribers: aheejin, sbc100.
This patch detects when an ios process runs on a macOS host and
updates the target triple with the "simulator" environment.
This is part of https://bugs.swift.org/browse/SR-11971
rdar://problem/58438125
https://reviews.llvm.org/D75696
Files:
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/test/API/functionalities/gdb_remote_client/TestIOSSimulator.py
lldb/test/API/functionalities/gdb_remote_client/TestWasm.py
lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py
Index: lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py
===================================================================
--- lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py
+++ lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py
@@ -170,6 +170,8 @@
return self.qQueryGDBServer()
if packet == "qHostInfo":
return self.qHostInfo()
+ if packet == "qProcessInfo":
+ return self.qProcessInfo()
if packet == "qGetWorkingDir":
return self.qGetWorkingDir()
if packet == "qOffsets":
@@ -196,6 +198,9 @@
def qHostInfo(self):
return "ptrsize:8;endian:little;"
+ def qProcessInfo(self):
+ return "pid:1;ptrsize:8;endian:little;"
+
def qQueryGDBServer(self):
return "E04"
Index: lldb/test/API/functionalities/gdb_remote_client/TestWasm.py
===================================================================
--- lldb/test/API/functionalities/gdb_remote_client/TestWasm.py
+++ lldb/test/API/functionalities/gdb_remote_client/TestWasm.py
@@ -31,8 +31,6 @@
MockGDBServerResponder.__init__(self)
def respond(self, packet):
- if packet == "qProcessInfo":
- return self.qProcessInfo()
if packet[0:13] == "qRegisterInfo":
return self.qRegisterInfo(packet[13:])
return MockGDBServerResponder.respond(self, packet)
Index: lldb/test/API/functionalities/gdb_remote_client/TestIOSSimulator.py
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/gdb_remote_client/TestIOSSimulator.py
@@ -0,0 +1,32 @@
+import lldb
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.decorators import *
+from gdbclientutils import *
+
+class TestIOSSimulator(GDBRemoteTestBase):
+
+ @skipIfRemote
+ def test(self):
+ """
+ Test that an ios simulator process is recognized as such.
+ """
+ class MyResponder(MockGDBServerResponder):
+
+ def qHostInfo(self):
+ return "cputype:16777223;cpusubtype:8;ostype:macosx;watchpoint_exceptions_received:after;vendor:apple;os_version:10.15.4;maccatalyst_version:13.4;endian:little;ptrsize:8;"
+ def qProcessInfo(self):
+ return "pid:a860;parent-pid:d2a0;real-uid:1f5;real-gid:14;effective-uid:1f5;effective-gid:14;cputype:1000007;cpusubtype:8;ptrsize:8;ostype:ios;vendor:apple;endian:little;"
+ def vCont(self):
+ return "vCont;"
+
+ self.server.responder = MyResponder()
+ if self.TraceOn():
+ self.runCmd("log enable gdb-remote packets")
+ self.addTearDownHook(
+ lambda: self.runCmd("log disable gdb-remote packets"))
+
+ #self.dbg.SetDefaultArchitecture("armv7em")
+ target = self.dbg.CreateTargetWithFileAndArch(None, None)
+ process = self.connect(target)
+ triple = target.GetTriple()
+ self.assertEqual(triple, "x86_64h-apple-ios-simulator")
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
@@ -2129,12 +2129,24 @@
if (byte_order != eByteOrderInvalid) {
assert(byte_order == m_process_arch.GetByteOrder());
}
- m_process_arch.GetTriple().setVendorName(llvm::StringRef(vendor_name));
- m_process_arch.GetTriple().setOSName(llvm::StringRef(os_name));
- m_process_arch.GetTriple().setEnvironmentName(llvm::StringRef(environment));
- m_host_arch.GetTriple().setVendorName(llvm::StringRef(vendor_name));
- m_host_arch.GetTriple().setOSName(llvm::StringRef(os_name));
- m_host_arch.GetTriple().setEnvironmentName(llvm::StringRef(environment));
+ auto &process_triple = m_process_arch.GetTriple();
+ process_triple.setVendorName(llvm::StringRef(vendor_name));
+ process_triple.setOSName(llvm::StringRef(os_name));
+ process_triple.setEnvironmentName(llvm::StringRef(environment));
+
+ // Detect iOS simulators and set the environment
+ // accordingly. The remote server reads the process info out
+ // of the Mach-O load commands, which don't distinguish
+ // between simulator and the real hardware.
+ if (m_host_arch.GetTriple().getOS() == llvm::Triple::MacOSX) {
+ if (!process_triple.hasEnvironment()) {
+ auto process_os = process_triple.getOS();
+ if (process_os == llvm::Triple::IOS ||
+ process_os == llvm::Triple::TvOS ||
+ process_os == llvm::Triple::WatchOS)
+ process_triple.setEnvironment(llvm::Triple::Simulator);
+ }
+ }
}
return true;
}
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits