Files
clang-p2996/lldb/test/API/functionalities/gdb_remote_client/TestPlatformMacOSX.py
Jonas Devlieghere c22c7a61b6 [lldb] Fix platform selection on Apple Silicon (again)
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
2022-03-15 09:06:29 -07:00

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")