File: TestGDBServerNoTargetXML.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (334 lines) | stat: -rw-r--r-- 11,243 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
from lldbsuite.test.gdbclientutils import *
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase

import binascii


class TestGDBServerTargetXML(GDBRemoteTestBase):
    @staticmethod
    def filecheck_to_blob(fc):
        for l in fc.strip().splitlines():
            val = l.split("0x")[1]
            yield binascii.b2a_hex(bytes(reversed(binascii.a2b_hex(val)))).decode()

    @skipIfRemote
    @skipIfLLVMTargetMissing("X86")
    def test_x86_64_regs(self):
        """Test grabbing various x86_64 registers from gdbserver."""

        GPRS = """
CHECK-AMD64-DAG: rax = 0x0807060504030201
CHECK-AMD64-DAG: rbx = 0x1817161514131211
CHECK-AMD64-DAG: rcx = 0x2827262524232221
CHECK-AMD64-DAG: rdx = 0x3837363534333231
CHECK-AMD64-DAG: rsi = 0x4847464544434241
CHECK-AMD64-DAG: rdi = 0x5857565554535251
CHECK-AMD64-DAG: rbp = 0x6867666564636261
CHECK-AMD64-DAG: rsp = 0x7877767574737271
CHECK-AMD64-DAG: r8 = 0x8887868584838281
CHECK-AMD64-DAG: r9 = 0x9897969594939291
CHECK-AMD64-DAG: r10 = 0xa8a7a6a5a4a3a2a1
CHECK-AMD64-DAG: r11 = 0xb8b7b6b5b4b3b2b1
CHECK-AMD64-DAG: r12 = 0xc8c7c6c5c4c3c2c1
CHECK-AMD64-DAG: r13 = 0xd8d7d6d5d4d3d2d1
CHECK-AMD64-DAG: r14 = 0xe8e7e6e5e4e3e2e1
CHECK-AMD64-DAG: r15 = 0xf8f7f6f5f4f3f2f1
CHECK-AMD64-DAG: rip = 0x100f0e0d0c0b0a09
CHECK-AMD64-DAG: eflags = 0x1c1b1a19
CHECK-AMD64-DAG: cs = 0x2c2b2a29
CHECK-AMD64-DAG: ss = 0x3c3b3a39
"""

        SUPPL = """
CHECK-AMD64-DAG: eax = 0x04030201
CHECK-AMD64-DAG: ebx = 0x14131211
CHECK-AMD64-DAG: ecx = 0x24232221
CHECK-AMD64-DAG: edx = 0x34333231
CHECK-AMD64-DAG: esi = 0x44434241
CHECK-AMD64-DAG: edi = 0x54535251
CHECK-AMD64-DAG: ebp = 0x64636261
CHECK-AMD64-DAG: esp = 0x74737271
CHECK-AMD64-DAG: r8d = 0x84838281
CHECK-AMD64-DAG: r9d = 0x94939291
CHECK-AMD64-DAG: r10d = 0xa4a3a2a1
CHECK-AMD64-DAG: r11d = 0xb4b3b2b1
CHECK-AMD64-DAG: r12d = 0xc4c3c2c1
CHECK-AMD64-DAG: r13d = 0xd4d3d2d1
CHECK-AMD64-DAG: r14d = 0xe4e3e2e1
CHECK-AMD64-DAG: r15d = 0xf4f3f2f1

CHECK-AMD64-DAG: ax = 0x0201
CHECK-AMD64-DAG: bx = 0x1211
CHECK-AMD64-DAG: cx = 0x2221
CHECK-AMD64-DAG: dx = 0x3231
CHECK-AMD64-DAG: si = 0x4241
CHECK-AMD64-DAG: di = 0x5251
CHECK-AMD64-DAG: bp = 0x6261
CHECK-AMD64-DAG: sp = 0x7271
CHECK-AMD64-DAG: r8w = 0x8281
CHECK-AMD64-DAG: r9w = 0x9291
CHECK-AMD64-DAG: r10w = 0xa2a1
CHECK-AMD64-DAG: r11w = 0xb2b1
CHECK-AMD64-DAG: r12w = 0xc2c1
CHECK-AMD64-DAG: r13w = 0xd2d1
CHECK-AMD64-DAG: r14w = 0xe2e1
CHECK-AMD64-DAG: r15w = 0xf2f1

CHECK-AMD64-DAG: ah = 0x02
CHECK-AMD64-DAG: bh = 0x12
CHECK-AMD64-DAG: ch = 0x22
CHECK-AMD64-DAG: dh = 0x32

CHECK-AMD64-DAG: al = 0x01
CHECK-AMD64-DAG: bl = 0x11
CHECK-AMD64-DAG: cl = 0x21
CHECK-AMD64-DAG: dl = 0x31
CHECK-AMD64-DAG: sil = 0x41
CHECK-AMD64-DAG: dil = 0x51
CHECK-AMD64-DAG: bpl = 0x61
CHECK-AMD64-DAG: spl = 0x71
CHECK-AMD64-DAG: r8l = 0x81
CHECK-AMD64-DAG: r9l = 0x91
CHECK-AMD64-DAG: r10l = 0xa1
CHECK-AMD64-DAG: r11l = 0xb1
CHECK-AMD64-DAG: r12l = 0xc1
CHECK-AMD64-DAG: r13l = 0xd1
CHECK-AMD64-DAG: r14l = 0xe1
CHECK-AMD64-DAG: r15l = 0xf1
"""

        class MyResponder(MockGDBServerResponder):
            reg_data = "".join(self.filecheck_to_blob(GPRS))

            def readRegister(self, regnum):
                return ""

            def readRegisters(self):
                return self.reg_data

            def haltReason(self):
                return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"

        self.server.responder = MyResponder()

        target = self.createTarget("basic_eh_frame.yaml")
        process = self.connect(target)
        lldbutil.expect_state_changes(
            self, self.dbg.GetListener(), process, [lldb.eStateStopped]
        )

        # test all registers
        self.filecheck(
            "register read --all",
            __file__,
            filecheck_options="--check-prefix=CHECK-AMD64",
        )

        # test generic aliases
        self.match("register read arg4", ["rcx = 0x2827262524232221"])
        self.match("register read arg3", ["rdx = 0x3837363534333231"])
        self.match("register read arg2", ["rsi = 0x4847464544434241"])
        self.match("register read arg1", ["rdi = 0x5857565554535251"])
        self.match("register read fp", ["rbp = 0x6867666564636261"])
        self.match("register read sp", ["rsp = 0x7877767574737271"])
        self.match("register read arg5", ["r8 = 0x8887868584838281"])
        self.match("register read arg6", ["r9 = 0x9897969594939291"])
        self.match("register read pc", ["rip = 0x100f0e0d0c0b0a09"])
        self.match("register read flags", ["eflags = 0x1c1b1a19"])

    @skipIfRemote
    @skipIfLLVMTargetMissing("AArch64")
    def test_aarch64_regs(self):
        """Test grabbing various aarch64 registers from gdbserver."""

        GPRS = """
CHECK-AARCH64-DAG: x0 = 0x0001020304050607
CHECK-AARCH64-DAG: x1 = 0x0102030405060708
CHECK-AARCH64-DAG: x2 = 0x0203040506070809
CHECK-AARCH64-DAG: x3 = 0x030405060708090a
CHECK-AARCH64-DAG: x4 = 0x0405060708090a0b
CHECK-AARCH64-DAG: x5 = 0x05060708090a0b0c
CHECK-AARCH64-DAG: x6 = 0x060708090a0b0c0d
CHECK-AARCH64-DAG: x7 = 0x0708090a0b0c0d0e
CHECK-AARCH64-DAG: x8 = 0x08090a0b0c0d0e0f
CHECK-AARCH64-DAG: x9 = 0x090a0b0c0d0e0f10
CHECK-AARCH64-DAG: x10 = 0x0a0b0c0d0e0f1011
CHECK-AARCH64-DAG: x11 = 0x0b0c0d0e0f101112
CHECK-AARCH64-DAG: x12 = 0x0c0d0e0f10111213
CHECK-AARCH64-DAG: x13 = 0x0d0e0f1011121314
CHECK-AARCH64-DAG: x14 = 0x0e0f101112131415
CHECK-AARCH64-DAG: x15 = 0x0f10111213141516
CHECK-AARCH64-DAG: x16 = 0x1011121314151617
CHECK-AARCH64-DAG: x17 = 0x1112131415161718
CHECK-AARCH64-DAG: x18 = 0x1213141516171819
CHECK-AARCH64-DAG: x19 = 0x131415161718191a
CHECK-AARCH64-DAG: x20 = 0x1415161718191a1b
CHECK-AARCH64-DAG: x21 = 0x15161718191a1b1c
CHECK-AARCH64-DAG: x22 = 0x161718191a1b1c1d
CHECK-AARCH64-DAG: x23 = 0x1718191a1b1c1d1e
CHECK-AARCH64-DAG: x24 = 0x18191a1b1c1d1e1f
CHECK-AARCH64-DAG: x25 = 0x191a1b1c1d1e1f20
CHECK-AARCH64-DAG: x26 = 0x1a1b1c1d1e1f2021
CHECK-AARCH64-DAG: x27 = 0x1b1c1d1e1f202122
CHECK-AARCH64-DAG: x28 = 0x1c1d1e1f20212223
CHECK-AARCH64-DAG: x29 = 0x1d1e1f2021222324
CHECK-AARCH64-DAG: x30 = 0x1e1f202122232425
CHECK-AARCH64-DAG: sp = 0x1f20212223242526
CHECK-AARCH64-DAG: pc = 0x2021222324252627
CHECK-AARCH64-DAG: cpsr = 0x21222324
"""

        SUPPL = """
CHECK-AARCH64-DAG: w0 = 0x04050607
CHECK-AARCH64-DAG: w1 = 0x05060708
CHECK-AARCH64-DAG: w2 = 0x06070809
CHECK-AARCH64-DAG: w3 = 0x0708090a
CHECK-AARCH64-DAG: w4 = 0x08090a0b
CHECK-AARCH64-DAG: w5 = 0x090a0b0c
CHECK-AARCH64-DAG: w6 = 0x0a0b0c0d
CHECK-AARCH64-DAG: w7 = 0x0b0c0d0e
CHECK-AARCH64-DAG: w8 = 0x0c0d0e0f
CHECK-AARCH64-DAG: w9 = 0x0d0e0f10
CHECK-AARCH64-DAG: w10 = 0x0e0f1011
CHECK-AARCH64-DAG: w11 = 0x0f101112
CHECK-AARCH64-DAG: w12 = 0x10111213
CHECK-AARCH64-DAG: w13 = 0x11121314
CHECK-AARCH64-DAG: w14 = 0x12131415
CHECK-AARCH64-DAG: w15 = 0x13141516
CHECK-AARCH64-DAG: w16 = 0x14151617
CHECK-AARCH64-DAG: w17 = 0x15161718
CHECK-AARCH64-DAG: w18 = 0x16171819
CHECK-AARCH64-DAG: w19 = 0x1718191a
CHECK-AARCH64-DAG: w20 = 0x18191a1b
CHECK-AARCH64-DAG: w21 = 0x191a1b1c
CHECK-AARCH64-DAG: w22 = 0x1a1b1c1d
CHECK-AARCH64-DAG: w23 = 0x1b1c1d1e
CHECK-AARCH64-DAG: w24 = 0x1c1d1e1f
CHECK-AARCH64-DAG: w25 = 0x1d1e1f20
CHECK-AARCH64-DAG: w26 = 0x1e1f2021
CHECK-AARCH64-DAG: w27 = 0x1f202122
CHECK-AARCH64-DAG: w28 = 0x20212223
CHECK-AARCH64-DAG: w29 = 0x21222324
CHECK-AARCH64-DAG: w30 = 0x22232425
CHECK-AARCH64-DAG: w31 = 0x23242526
"""

        class MyResponder(MockGDBServerResponder):
            reg_data = "".join(self.filecheck_to_blob(GPRS))

            def readRegister(self, regnum):
                return ""

            def readRegisters(self):
                return self.reg_data

            def haltReason(self):
                return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"

        self.server.responder = MyResponder()

        target = self.createTarget("basic_eh_frame-aarch64.yaml")
        process = self.connect(target)
        lldbutil.expect_state_changes(
            self, self.dbg.GetListener(), process, [lldb.eStateStopped]
        )

        # test all registers
        self.filecheck(
            "register read --all",
            __file__,
            filecheck_options="--check-prefix=CHECK-AARCH64",
        )

        # test generic aliases
        self.match("register read arg1", ["x0 = 0x0001020304050607"])
        self.match("register read arg2", ["x1 = 0x0102030405060708"])
        self.match("register read fp", ["x29 = 0x1d1e1f2021222324"])
        self.match("register read lr", ["x30 = 0x1e1f202122232425"])
        self.match("register read ra", ["x30 = 0x1e1f202122232425"])
        self.match("register read flags", ["cpsr = 0x21222324"])

    @skipIfRemote
    @skipIfLLVMTargetMissing("X86")
    def test_i386_regs(self):
        """Test grabbing various i386 registers from gdbserver."""

        GPRS = """
CHECK-I386-DAG: eax = 0x04030201
CHECK-I386-DAG: ecx = 0x14131211
CHECK-I386-DAG: edx = 0x24232221
CHECK-I386-DAG: ebx = 0x34333231
CHECK-I386-DAG: esp = 0x44434241
CHECK-I386-DAG: ebp = 0x54535251
CHECK-I386-DAG: esi = 0x64636261
CHECK-I386-DAG: edi = 0x74737271
CHECK-I386-DAG: eip = 0x84838281
CHECK-I386-DAG: eflags = 0x94939291
CHECK-I386-DAG: cs = 0xa4a3a2a1
CHECK-I386-DAG: ss = 0xb4b3b2b1
CHECK-I386-DAG: ds = 0xc4c3c2c1
CHECK-I386-DAG: es = 0xd4d3d2d1
CHECK-I386-DAG: fs = 0xe4e3e2e1
CHECK-I386-DAG: gs = 0xf4f3f2f1
"""

        SUPPL = """
CHECK-I386-DAG: ax = 0x0201
CHECK-I386-DAG: cx = 0x1211
CHECK-I386-DAG: dx = 0x2221
CHECK-I386-DAG: bx = 0x3231
CHECK-I386-DAG: sp = 0x4241
CHECK-I386-DAG: bp = 0x5251
CHECK-I386-DAG: si = 0x6261
CHECK-I386-DAG: di = 0x7271

CHECK-I386-DAG: ah = 0x02
CHECK-I386-DAG: ch = 0x12
CHECK-I386-DAG: dh = 0x22
CHECK-I386-DAG: bh = 0x32

CHECK-I386-DAG: al = 0x01
CHECK-I386-DAG: cl = 0x11
CHECK-I386-DAG: dl = 0x21
CHECK-I386-DAG: bl = 0x31
CHECK-I386-DAG: spl = 0x41
CHECK-I386-DAG: bpl = 0x51
CHECK-I386-DAG: sil = 0x61
CHECK-I386-DAG: dil = 0x71
"""

        class MyResponder(MockGDBServerResponder):
            reg_data = "".join(self.filecheck_to_blob(GPRS))

            def readRegister(self, regnum):
                return ""

            def readRegisters(self):
                return self.reg_data

            def haltReason(self):
                return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"

        self.server.responder = MyResponder()

        target = self.createTarget("basic_eh_frame-i386.yaml")
        process = self.connect(target)
        lldbutil.expect_state_changes(
            self, self.dbg.GetListener(), process, [lldb.eStateStopped]
        )

        # test all registers
        self.filecheck(
            "register read --all",
            __file__,
            filecheck_options="--check-prefix=CHECK-I386",
        )

        # test generic aliases
        self.match("register read fp", ["ebp = 0x54535251"])
        self.match("register read sp", ["esp = 0x44434241"])
        self.match("register read pc", ["eip = 0x84838281"])
        self.match("register read flags", ["eflags = 0x94939291"])