1ced4e000SAdrian Prantlimport lldb 2ced4e000SAdrian Prantlfrom lldbsuite.test.lldbtest import * 3ced4e000SAdrian Prantlfrom lldbsuite.test.decorators import * 4ced4e000SAdrian Prantlfrom lldbsuite.test.gdbclientutils import * 5ced4e000SAdrian Prantlfrom lldbsuite.test.lldbgdbclient import * 6ced4e000SAdrian Prantl 7ced4e000SAdrian Prantlimages = """ 8ced4e000SAdrian Prantl{"images":[ 9ced4e000SAdrian Prantl {"load_address":4370792448, 10ced4e000SAdrian Prantl "mod_date":0, 11ced4e000SAdrian Prantl "pathname":"/usr/lib/dyld", 12ced4e000SAdrian Prantl "uuid":"75627683-A780-32AD-AE34-CF86DD23A26B", 13ced4e000SAdrian Prantl "min_version_os_name":"macosx", 14ced4e000SAdrian Prantl "min_version_os_sdk":"12.5", 15ced4e000SAdrian Prantl "mach_header":{ 16ced4e000SAdrian Prantl "magic":4277009103, 17ced4e000SAdrian Prantl "cputype":16777228, 18ced4e000SAdrian Prantl "cpusubtype":2, 19ced4e000SAdrian Prantl "filetype":7, 20ced4e000SAdrian Prantl "flags":133}, 21ced4e000SAdrian Prantl "segments":[ 22ced4e000SAdrian Prantl {"name":"__TEXT", 23ced4e000SAdrian Prantl "vmaddr":0, 24ced4e000SAdrian Prantl "vmsize":393216, 25ced4e000SAdrian Prantl "fileoff":0, 26ced4e000SAdrian Prantl "filesize":393216, 27ced4e000SAdrian Prantl "maxprot":5}, 28ced4e000SAdrian Prantl {"name":"__DATA_CONST", 29ced4e000SAdrian Prantl "vmaddr":393216, 30ced4e000SAdrian Prantl "vmsize":98304, 31ced4e000SAdrian Prantl "fileoff":393216, 32ced4e000SAdrian Prantl "filesize":98304, 33ced4e000SAdrian Prantl "maxprot":3}, 34ced4e000SAdrian Prantl {"name":"__DATA", 35ced4e000SAdrian Prantl "vmaddr":491520, 36ced4e000SAdrian Prantl "vmsize":16384, 37ced4e000SAdrian Prantl "fileoff":491520, 38ced4e000SAdrian Prantl "filesize":16384, 39ced4e000SAdrian Prantl "maxprot":3}, 40ced4e000SAdrian Prantl {"name":"__LINKEDIT", 41ced4e000SAdrian Prantl "vmaddr":507904, 42ced4e000SAdrian Prantl "vmsize":229376, 43ced4e000SAdrian Prantl "fileoff":507904, 44ced4e000SAdrian Prantl "filesize":227520, 45ced4e000SAdrian Prantl "maxprot":1} 46ced4e000SAdrian Prantl ] 47ced4e000SAdrian Prantl }, 48ced4e000SAdrian Prantl {"load_address":4369842176, 49ced4e000SAdrian Prantl "mod_date":0, 50ced4e000SAdrian Prantl "pathname":"/tmp/a.out", 51ced4e000SAdrian Prantl "uuid":"536A0A09-792A-377C-BEBA-FFB00A787C38", 52ced4e000SAdrian Prantl "min_version_os_name":"macosx", 53ced4e000SAdrian Prantl "min_version_os_sdk":"12.0", 54ced4e000SAdrian Prantl "mach_header":{ 55ced4e000SAdrian Prantl "magic":4277009103, 56ced4e000SAdrian Prantl "cputype":16777228, 57ced4e000SAdrian Prantl "cpusubtype":%s, 58ced4e000SAdrian Prantl "filetype":2, 59ced4e000SAdrian Prantl "flags":2097285 60ced4e000SAdrian Prantl }, 61ced4e000SAdrian Prantl "segments":[ 62ced4e000SAdrian Prantl {"name":"__PAGEZERO", 63ced4e000SAdrian Prantl "vmaddr":0, 64ced4e000SAdrian Prantl "vmsize":4294967296, 65ced4e000SAdrian Prantl "fileoff":0, 66ced4e000SAdrian Prantl "filesize":0, 67ced4e000SAdrian Prantl "maxprot":0}, 68ced4e000SAdrian Prantl {"name":"__TEXT", 69ced4e000SAdrian Prantl "vmaddr":4294967296, 70ced4e000SAdrian Prantl "vmsize":16384, 71ced4e000SAdrian Prantl "fileoff":0, 72ced4e000SAdrian Prantl "filesize":16384, 73ced4e000SAdrian Prantl "maxprot":5}, 74ced4e000SAdrian Prantl {"name":"__DATA_CONST", 75ced4e000SAdrian Prantl "vmaddr":4294983680, 76ced4e000SAdrian Prantl "vmsize":16384, 77ced4e000SAdrian Prantl "fileoff":16384, 78ced4e000SAdrian Prantl "filesize":16384, 79ced4e000SAdrian Prantl "maxprot":3}, 80ced4e000SAdrian Prantl {"name":"__LINKEDIT", 81ced4e000SAdrian Prantl "vmaddr":4295000064, 82ced4e000SAdrian Prantl "vmsize":32768, 83ced4e000SAdrian Prantl "fileoff":32768, 84ced4e000SAdrian Prantl "filesize":19488, 85ced4e000SAdrian Prantl "maxprot":1}] 86ced4e000SAdrian Prantl } 87ced4e000SAdrian Prantl] 88ced4e000SAdrian Prantl} 89ced4e000SAdrian Prantl""" 90ced4e000SAdrian Prantl 91603d5a8dSAdrian Prantlarm64_binary = "cffaedfe0c000001000000000200000010000000e8020000850020000000000019000000480000005f5f504147455a45524f00000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000019000000e80000005f5f54455854000000000000000000000000000001000000004000000000000000000000000000000040000000000000050000000500000002000000000000005f5f74657874000000000000000000005f5f5445585400000000000000000000b03f0000010000000800000000000000b03f0000020000000000000000000000000400800000000000000000000000005f5f756e77696e645f696e666f0000005f5f5445585400000000000000000000b83f0000010000004800000000000000b83f00000200000000000000000000000000000000000000000000000000000019000000480000005f5f4c494e4b45444954000000000000004000000100000000400000000000000040000000000000b8010000000000000100000001000000000000000000000034000080100000000040000038000000330000801000000038400000300000000200000018000000704000000100000080400000180000000b000000500000000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000200000000c0000002f7573722f6c69622f64796c64000000000000001b00000018000000a9981092eb3632f4afd9957e769160d932000000200000000100000000000c0000050c000100000003000000000633032a0000001000000000000000000000002800008018000000b03f00000000000000000000000000000c00000038000000180000000200000001781f05000001002f7573722f6c69622f6c696253797374656d2e422e64796c696200000000000026000000100000006840000008000000290000001000000070400000000000001d00000010000000a04000001801" 92ced4e000SAdrian Prantl 93*2238dcc3SJonas Devlieghere 94ced4e000SAdrian Prantlclass TestDynamicLoaderDarwin(GDBRemoteTestBase): 95ced4e000SAdrian Prantl NO_DEBUG_INFO_TESTCASE = True 96ced4e000SAdrian Prantl 97*2238dcc3SJonas Devlieghere class MyResponder(MockGDBServerResponder): 98ced4e000SAdrian Prantl def __init__(self, cpusubtype): 99ced4e000SAdrian Prantl self.cpusubtype = cpusubtype 100ced4e000SAdrian Prantl MockGDBServerResponder.__init__(self) 101ced4e000SAdrian Prantl 102ced4e000SAdrian Prantl def respond(self, packet): 103ced4e000SAdrian Prantl if packet == "qProcessInfo": 104ced4e000SAdrian Prantl return self.qProcessInfo() 105ced4e000SAdrian Prantl return MockGDBServerResponder.respond(self, packet) 106ced4e000SAdrian Prantl 107ced4e000SAdrian Prantl def qHostInfo(self): 108ced4e000SAdrian Prantl return "cputype:16777223;cpusubtype:2;ostype:macosx;vendor:apple;os_version:10.15.4;maccatalyst_version:13.4;endian:little;ptrsize:8;" 109ced4e000SAdrian Prantl 110ced4e000SAdrian Prantl def qProcessInfo(self): 111ced4e000SAdrian Prantl 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:macosx;vendor:apple;endian:little;" 112ced4e000SAdrian Prantl 113ced4e000SAdrian Prantl def jGetLoadedDynamicLibrariesInfos(self, packet): 114*2238dcc3SJonas Devlieghere if "fetch_all_solibs" in packet: 115ced4e000SAdrian Prantl return escape_binary(images % self.cpusubtype) 116ced4e000SAdrian Prantl return "OK" 117ced4e000SAdrian Prantl 118ced4e000SAdrian Prantl def vCont(self): 119ced4e000SAdrian Prantl return "vCont;" 120ced4e000SAdrian Prantl 121ced4e000SAdrian Prantl def readMemory(self, addr, length): 122603d5a8dSAdrian Prantl vm_addr = 4369842176 123603d5a8dSAdrian Prantl file_offset = addr - vm_addr 124603d5a8dSAdrian Prantl if file_offset < 0: 125603d5a8dSAdrian Prantl return None 126603d5a8dSAdrian Prantl # arm64_binary is just a hex-encoded (hence the 2*) Mach-O 127603d5a8dSAdrian Prantl # header, pad out the rest with NUL characters, it doesn't 128603d5a8dSAdrian Prantl # matter for this test. 129*2238dcc3SJonas Devlieghere memory = arm64_binary + "00" * (length - len(arm64_binary) << 1) 130603d5a8dSAdrian Prantl return memory[2 * file_offset :] 131ced4e000SAdrian Prantl 132ced4e000SAdrian Prantl def setBreakpoint(self, packet): 133ced4e000SAdrian Prantl return "" 134ced4e000SAdrian Prantl 135ced4e000SAdrian Prantl @skipIfRemote 136ced4e000SAdrian Prantl def test(self): 137ced4e000SAdrian Prantl """Test that when attaching to an arm64 binary on an arm64e 138ced4e000SAdrian Prantl host, the target's arch is set to arm64, even though 139ced4e000SAdrian Prantl debugserver reports the process as being arm64e. 140ced4e000SAdrian Prantl """ 141ced4e000SAdrian Prantl subtype_arm64e = 2 142ced4e000SAdrian Prantl self.server.responder = self.MyResponder(subtype_arm64e) 143ced4e000SAdrian Prantl if self.TraceOn(): 144ced4e000SAdrian Prantl self.runCmd("log enable gdb-remote packets") 145*2238dcc3SJonas Devlieghere self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets")) 146ced4e000SAdrian Prantl 147ced4e000SAdrian Prantl target = self.dbg.CreateTargetWithFileAndArch(None, None) 148ced4e000SAdrian Prantl process = self.connect(target) 149ced4e000SAdrian Prantl 150ced4e000SAdrian Prantl self.assertEqual(target.GetTriple(), "arm64-apple-macosx-") 151