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