This patch is another attempt to fix platform selection on Apple Silicon. It partially undoes D117340 which tried to fix the issue by always instantiating a remote-ios platform for "iPhone and iPad Apps on Apple Silicon Macs". While the previous patch worked for attaching, it broke launching and everything else that expects the remote platform to be connected. I made an attempt to work around that, but quickly found out that there were just too may places that had this assumption baked in. This patch takes a different approach and reverts back to marking the host platform compatible with iOS triples. This brings us back to the original situation where platform selection was broken for remote iOS debugging on Apple Silicon. To fix that, we now look at the process' host architecture to differentiate between iOS binaries running remotely and iOS binaries running locally. I tested the following scenarios, which now all uses the desired platform: - Launching an iOS binary on macOS: uses the host platform - Attaching to an iOS binary on macOS: uses the host platform - Attaching to a remote iOS binary: uses the remote-ios platform rdar://89840215 Differential revision: https://reviews.llvm.org/D121444
61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import lldb
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.gdbclientutils import *
|
|
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
|
|
|
|
|
|
class TestPlatformMacOSX(GDBRemoteTestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
class MyResponder(MockGDBServerResponder):
|
|
|
|
def __init__(self, host):
|
|
self.host_ostype = host
|
|
MockGDBServerResponder.__init__(self)
|
|
|
|
def respond(self, packet):
|
|
if packet == "qProcessInfo":
|
|
return self.qProcessInfo()
|
|
return MockGDBServerResponder.respond(self, packet)
|
|
|
|
def qHostInfo(self):
|
|
return "cputype:16777223;cpusubtype:2;ostype:%s;vendor:apple;os_version:10.15.4;maccatalyst_version:13.4;endian:little;ptrsize:8;" % self.host_ostype
|
|
|
|
def qProcessInfo(self):
|
|
return "pid:a860;parent-pid:d2a0;real-uid:1f5;real-gid:14;effective-uid:1f5;effective-gid:14;cputype:100000c;cpusubtype:2;ptrsize:8;ostype:ios;vendor:apple;endian:little;"
|
|
|
|
def vCont(self):
|
|
return "vCont;"
|
|
|
|
def platform_test(self, host, expected_triple, expected_platform):
|
|
self.server.responder = self.MyResponder(host)
|
|
if self.TraceOn():
|
|
self.runCmd("log enable gdb-remote packets")
|
|
self.addTearDownHook(
|
|
lambda: self.runCmd("log disable gdb-remote packets"))
|
|
|
|
target = self.dbg.CreateTargetWithFileAndArch(None, None)
|
|
process = self.connect(target)
|
|
|
|
triple = target.GetTriple()
|
|
self.assertEqual(triple, expected_triple)
|
|
|
|
platform = target.GetPlatform()
|
|
self.assertEqual(platform.GetName(), expected_platform)
|
|
|
|
@skipIfRemote
|
|
def test_ios(self):
|
|
self.platform_test(host="ios",
|
|
expected_triple="arm64e-apple-ios-",
|
|
expected_platform="remote-ios")
|
|
|
|
@skipIfRemote
|
|
@skipUnlessDarwin
|
|
@skipUnlessArch("arm64")
|
|
def test_macos(self):
|
|
self.platform_test(host="macosx",
|
|
expected_triple="arm64e-apple-ios-",
|
|
expected_platform="host")
|