xref: /llvm-project/lldb/test/API/functionalities/gdb_remote_client/TestDynamicLoaderDarwin.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
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