1import lldb 2from lldbsuite.test.lldbtest import * 3from lldbsuite.test.decorators import * 4from lldbsuite.test.gdbclientutils import * 5from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 6 7 8class TestPlatformMacOSX(GDBRemoteTestBase): 9 class MyResponder(MockGDBServerResponder): 10 def __init__(self, host): 11 self.host_ostype = host 12 MockGDBServerResponder.__init__(self) 13 14 def respond(self, packet): 15 if packet == "qProcessInfo": 16 return self.qProcessInfo() 17 return MockGDBServerResponder.respond(self, packet) 18 19 def qHostInfo(self): 20 return ( 21 "cputype:16777223;cpusubtype:2;ostype:%s;vendor:apple;os_version:10.15.4;maccatalyst_version:13.4;endian:little;ptrsize:8;" 22 % self.host_ostype 23 ) 24 25 def qProcessInfo(self): 26 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;" 27 28 def vCont(self): 29 return "vCont;" 30 31 def platform_test(self, host, expected_triple, expected_platform): 32 self.server.responder = self.MyResponder(host) 33 if self.TraceOn(): 34 self.runCmd("log enable gdb-remote packets") 35 self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets")) 36 37 target = self.dbg.CreateTargetWithFileAndArch(None, None) 38 process = self.connect(target) 39 40 triple = target.GetTriple() 41 self.assertEqual(triple, expected_triple) 42 43 platform = target.GetPlatform() 44 self.assertEqual(platform.GetName(), expected_platform) 45 46 @skipIfRemote 47 def test_ios(self): 48 self.platform_test( 49 host="ios", 50 expected_triple="arm64e-apple-ios-", 51 expected_platform="remote-ios", 52 ) 53 54 @skipIfRemote 55 @skipUnlessDarwin 56 @skipUnlessArch("arm64") 57 def test_macos(self): 58 self.platform_test( 59 host="macosx", expected_triple="arm64e-apple-ios-", expected_platform="host" 60 ) 61