1*e69a3d18SMichał Górnyfrom __future__ import print_function
2*e69a3d18SMichał Górnyimport lldb
3*e69a3d18SMichał Górnyfrom lldbsuite.test.lldbtest import *
4*e69a3d18SMichał Górnyfrom lldbsuite.test.decorators import *
5*e69a3d18SMichał Górnyfrom lldbsuite.test.gdbclientutils import *
6*e69a3d18SMichał Górnyfrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
7*e69a3d18SMichał Górny
8*e69a3d18SMichał Górnyimport binascii
9*e69a3d18SMichał Górny
10*e69a3d18SMichał Górny
11*e69a3d18SMichał Górnyclass TestGDBServerTargetXML(GDBRemoteTestBase):
12*e69a3d18SMichał Górny
13*e69a3d18SMichał Górny    @staticmethod
14*e69a3d18SMichał Górny    def filecheck_to_blob(fc):
15*e69a3d18SMichał Górny        for l in fc.strip().splitlines():
16*e69a3d18SMichał Górny            val = l.split('0x')[1]
17*e69a3d18SMichał Górny            yield binascii.b2a_hex(bytes(reversed(binascii.a2b_hex(val)))).decode()
18*e69a3d18SMichał Górny
19*e69a3d18SMichał Górny    @skipIfRemote
20*e69a3d18SMichał Górny    @skipIfLLVMTargetMissing("X86")
21*e69a3d18SMichał Górny    def test_x86_64_regs(self):
22*e69a3d18SMichał Górny        """Test grabbing various x86_64 registers from gdbserver."""
23*e69a3d18SMichał Górny
24*e69a3d18SMichał Górny        GPRS = '''
25*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rax = 0x0807060504030201
26*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rbx = 0x1817161514131211
27*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rcx = 0x2827262524232221
28*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rdx = 0x3837363534333231
29*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rsi = 0x4847464544434241
30*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rdi = 0x5857565554535251
31*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rbp = 0x6867666564636261
32*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rsp = 0x7877767574737271
33*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r8 = 0x8887868584838281
34*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r9 = 0x9897969594939291
35*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r10 = 0xa8a7a6a5a4a3a2a1
36*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r11 = 0xb8b7b6b5b4b3b2b1
37*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r12 = 0xc8c7c6c5c4c3c2c1
38*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r13 = 0xd8d7d6d5d4d3d2d1
39*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r14 = 0xe8e7e6e5e4e3e2e1
40*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r15 = 0xf8f7f6f5f4f3f2f1
41*e69a3d18SMichał GórnyCHECK-AMD64-DAG: rip = 0x100f0e0d0c0b0a09
42*e69a3d18SMichał GórnyCHECK-AMD64-DAG: eflags = 0x1c1b1a19
43*e69a3d18SMichał GórnyCHECK-AMD64-DAG: cs = 0x2c2b2a29
44*e69a3d18SMichał GórnyCHECK-AMD64-DAG: ss = 0x3c3b3a39
45*e69a3d18SMichał Górny'''
46*e69a3d18SMichał Górny
47*e69a3d18SMichał Górny        SUPPL = '''
48*e69a3d18SMichał GórnyCHECK-AMD64-DAG: eax = 0x04030201
49*e69a3d18SMichał GórnyCHECK-AMD64-DAG: ebx = 0x14131211
50*e69a3d18SMichał GórnyCHECK-AMD64-DAG: ecx = 0x24232221
51*e69a3d18SMichał GórnyCHECK-AMD64-DAG: edx = 0x34333231
52*e69a3d18SMichał GórnyCHECK-AMD64-DAG: esi = 0x44434241
53*e69a3d18SMichał GórnyCHECK-AMD64-DAG: edi = 0x54535251
54*e69a3d18SMichał GórnyCHECK-AMD64-DAG: ebp = 0x64636261
55*e69a3d18SMichał GórnyCHECK-AMD64-DAG: esp = 0x74737271
56*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r8d = 0x84838281
57*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r9d = 0x94939291
58*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r10d = 0xa4a3a2a1
59*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r11d = 0xb4b3b2b1
60*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r12d = 0xc4c3c2c1
61*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r13d = 0xd4d3d2d1
62*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r14d = 0xe4e3e2e1
63*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r15d = 0xf4f3f2f1
64*e69a3d18SMichał Górny
65*e69a3d18SMichał GórnyCHECK-AMD64-DAG: ax = 0x0201
66*e69a3d18SMichał GórnyCHECK-AMD64-DAG: bx = 0x1211
67*e69a3d18SMichał GórnyCHECK-AMD64-DAG: cx = 0x2221
68*e69a3d18SMichał GórnyCHECK-AMD64-DAG: dx = 0x3231
69*e69a3d18SMichał GórnyCHECK-AMD64-DAG: si = 0x4241
70*e69a3d18SMichał GórnyCHECK-AMD64-DAG: di = 0x5251
71*e69a3d18SMichał GórnyCHECK-AMD64-DAG: bp = 0x6261
72*e69a3d18SMichał GórnyCHECK-AMD64-DAG: sp = 0x7271
73*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r8w = 0x8281
74*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r9w = 0x9291
75*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r10w = 0xa2a1
76*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r11w = 0xb2b1
77*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r12w = 0xc2c1
78*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r13w = 0xd2d1
79*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r14w = 0xe2e1
80*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r15w = 0xf2f1
81*e69a3d18SMichał Górny
82*e69a3d18SMichał GórnyCHECK-AMD64-DAG: ah = 0x02
83*e69a3d18SMichał GórnyCHECK-AMD64-DAG: bh = 0x12
84*e69a3d18SMichał GórnyCHECK-AMD64-DAG: ch = 0x22
85*e69a3d18SMichał GórnyCHECK-AMD64-DAG: dh = 0x32
86*e69a3d18SMichał Górny
87*e69a3d18SMichał GórnyCHECK-AMD64-DAG: al = 0x01
88*e69a3d18SMichał GórnyCHECK-AMD64-DAG: bl = 0x11
89*e69a3d18SMichał GórnyCHECK-AMD64-DAG: cl = 0x21
90*e69a3d18SMichał GórnyCHECK-AMD64-DAG: dl = 0x31
91*e69a3d18SMichał GórnyCHECK-AMD64-DAG: sil = 0x41
92*e69a3d18SMichał GórnyCHECK-AMD64-DAG: dil = 0x51
93*e69a3d18SMichał GórnyCHECK-AMD64-DAG: bpl = 0x61
94*e69a3d18SMichał GórnyCHECK-AMD64-DAG: spl = 0x71
95*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r8l = 0x81
96*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r9l = 0x91
97*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r10l = 0xa1
98*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r11l = 0xb1
99*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r12l = 0xc1
100*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r13l = 0xd1
101*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r14l = 0xe1
102*e69a3d18SMichał GórnyCHECK-AMD64-DAG: r15l = 0xf1
103*e69a3d18SMichał Górny'''
104*e69a3d18SMichał Górny
105*e69a3d18SMichał Górny        class MyResponder(MockGDBServerResponder):
106*e69a3d18SMichał Górny            reg_data = ''.join(self.filecheck_to_blob(GPRS))
107*e69a3d18SMichał Górny
108*e69a3d18SMichał Górny            def readRegister(self, regnum):
109*e69a3d18SMichał Górny                return ""
110*e69a3d18SMichał Górny
111*e69a3d18SMichał Górny            def readRegisters(self):
112*e69a3d18SMichał Górny                return self.reg_data
113*e69a3d18SMichał Górny
114*e69a3d18SMichał Górny            def haltReason(self):
115*e69a3d18SMichał Górny                return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"
116*e69a3d18SMichał Górny
117*e69a3d18SMichał Górny        self.server.responder = MyResponder()
118*e69a3d18SMichał Górny
119*e69a3d18SMichał Górny        target = self.createTarget("basic_eh_frame.yaml")
120*e69a3d18SMichał Górny        process = self.connect(target)
121*e69a3d18SMichał Górny        lldbutil.expect_state_changes(self, self.dbg.GetListener(), process,
122*e69a3d18SMichał Górny                                      [lldb.eStateStopped])
123*e69a3d18SMichał Górny
124*e69a3d18SMichał Górny        # test all registers
125*e69a3d18SMichał Górny        self.filecheck("register read --all", __file__,
126*e69a3d18SMichał Górny                       filecheck_options='--check-prefix=CHECK-AMD64')
127*e69a3d18SMichał Górny
128*e69a3d18SMichał Górny        # test generic aliases
129*e69a3d18SMichał Górny        self.match("register read arg4",
130*e69a3d18SMichał Górny                   ["rcx = 0x2827262524232221"])
131*e69a3d18SMichał Górny        self.match("register read arg3",
132*e69a3d18SMichał Górny                   ["rdx = 0x3837363534333231"])
133*e69a3d18SMichał Górny        self.match("register read arg2",
134*e69a3d18SMichał Górny                   ["rsi = 0x4847464544434241"])
135*e69a3d18SMichał Górny        self.match("register read arg1",
136*e69a3d18SMichał Górny                   ["rdi = 0x5857565554535251"])
137*e69a3d18SMichał Górny        self.match("register read fp",
138*e69a3d18SMichał Górny                   ["rbp = 0x6867666564636261"])
139*e69a3d18SMichał Górny        self.match("register read sp",
140*e69a3d18SMichał Górny                   ["rsp = 0x7877767574737271"])
141*e69a3d18SMichał Górny        self.match("register read arg5",
142*e69a3d18SMichał Górny                   ["r8 = 0x8887868584838281"])
143*e69a3d18SMichał Górny        self.match("register read arg6",
144*e69a3d18SMichał Górny                   ["r9 = 0x9897969594939291"])
145*e69a3d18SMichał Górny        self.match("register read pc",
146*e69a3d18SMichał Górny                   ["rip = 0x100f0e0d0c0b0a09"])
147*e69a3d18SMichał Górny        self.match("register read flags",
148*e69a3d18SMichał Górny                   ["eflags = 0x1c1b1a19"])
149*e69a3d18SMichał Górny
150*e69a3d18SMichał Górny    @skipIfRemote
151*e69a3d18SMichał Górny    @skipIfLLVMTargetMissing("AArch64")
152*e69a3d18SMichał Górny    def test_aarch64_regs(self):
153*e69a3d18SMichał Górny        """Test grabbing various aarch64 registers from gdbserver."""
154*e69a3d18SMichał Górny
155*e69a3d18SMichał Górny        GPRS = '''
156*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x0 = 0x0001020304050607
157*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x1 = 0x0102030405060708
158*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x2 = 0x0203040506070809
159*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x3 = 0x030405060708090a
160*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x4 = 0x0405060708090a0b
161*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x5 = 0x05060708090a0b0c
162*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x6 = 0x060708090a0b0c0d
163*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x7 = 0x0708090a0b0c0d0e
164*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x8 = 0x08090a0b0c0d0e0f
165*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x9 = 0x090a0b0c0d0e0f10
166*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x10 = 0x0a0b0c0d0e0f1011
167*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x11 = 0x0b0c0d0e0f101112
168*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x12 = 0x0c0d0e0f10111213
169*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x13 = 0x0d0e0f1011121314
170*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x14 = 0x0e0f101112131415
171*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x15 = 0x0f10111213141516
172*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x16 = 0x1011121314151617
173*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x17 = 0x1112131415161718
174*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x18 = 0x1213141516171819
175*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x19 = 0x131415161718191a
176*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x20 = 0x1415161718191a1b
177*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x21 = 0x15161718191a1b1c
178*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x22 = 0x161718191a1b1c1d
179*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x23 = 0x1718191a1b1c1d1e
180*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x24 = 0x18191a1b1c1d1e1f
181*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x25 = 0x191a1b1c1d1e1f20
182*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x26 = 0x1a1b1c1d1e1f2021
183*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x27 = 0x1b1c1d1e1f202122
184*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x28 = 0x1c1d1e1f20212223
185*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x29 = 0x1d1e1f2021222324
186*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: x30 = 0x1e1f202122232425
187*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: sp = 0x1f20212223242526
188*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: pc = 0x2021222324252627
189*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: cpsr = 0x21222324
190*e69a3d18SMichał Górny'''
191*e69a3d18SMichał Górny
192*e69a3d18SMichał Górny        SUPPL = '''
193*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w0 = 0x04050607
194*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w1 = 0x05060708
195*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w2 = 0x06070809
196*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w3 = 0x0708090a
197*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w4 = 0x08090a0b
198*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w5 = 0x090a0b0c
199*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w6 = 0x0a0b0c0d
200*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w7 = 0x0b0c0d0e
201*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w8 = 0x0c0d0e0f
202*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w9 = 0x0d0e0f10
203*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w10 = 0x0e0f1011
204*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w11 = 0x0f101112
205*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w12 = 0x10111213
206*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w13 = 0x11121314
207*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w14 = 0x12131415
208*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w15 = 0x13141516
209*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w16 = 0x14151617
210*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w17 = 0x15161718
211*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w18 = 0x16171819
212*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w19 = 0x1718191a
213*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w20 = 0x18191a1b
214*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w21 = 0x191a1b1c
215*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w22 = 0x1a1b1c1d
216*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w23 = 0x1b1c1d1e
217*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w24 = 0x1c1d1e1f
218*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w25 = 0x1d1e1f20
219*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w26 = 0x1e1f2021
220*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w27 = 0x1f202122
221*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w28 = 0x20212223
222*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w29 = 0x21222324
223*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w30 = 0x22232425
224*e69a3d18SMichał GórnyCHECK-AARCH64-DAG: w31 = 0x23242526
225*e69a3d18SMichał Górny'''
226*e69a3d18SMichał Górny
227*e69a3d18SMichał Górny        class MyResponder(MockGDBServerResponder):
228*e69a3d18SMichał Górny            reg_data = ''.join(self.filecheck_to_blob(GPRS))
229*e69a3d18SMichał Górny
230*e69a3d18SMichał Górny            def readRegister(self, regnum):
231*e69a3d18SMichał Górny                return ""
232*e69a3d18SMichał Górny
233*e69a3d18SMichał Górny            def readRegisters(self):
234*e69a3d18SMichał Górny                return self.reg_data
235*e69a3d18SMichał Górny
236*e69a3d18SMichał Górny            def haltReason(self):
237*e69a3d18SMichał Górny                return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"
238*e69a3d18SMichał Górny
239*e69a3d18SMichał Górny        self.server.responder = MyResponder()
240*e69a3d18SMichał Górny
241*e69a3d18SMichał Górny        target = self.createTarget("basic_eh_frame-aarch64.yaml")
242*e69a3d18SMichał Górny        process = self.connect(target)
243*e69a3d18SMichał Górny        lldbutil.expect_state_changes(self, self.dbg.GetListener(), process,
244*e69a3d18SMichał Górny                                      [lldb.eStateStopped])
245*e69a3d18SMichał Górny
246*e69a3d18SMichał Górny        # test all registers
247*e69a3d18SMichał Górny        self.filecheck("register read --all", __file__,
248*e69a3d18SMichał Górny                       filecheck_options='--check-prefix=CHECK-AARCH64')
249*e69a3d18SMichał Górny
250*e69a3d18SMichał Górny        # test generic aliases
251*e69a3d18SMichał Górny        self.match("register read arg1",
252*e69a3d18SMichał Górny                   ["x0 = 0x0001020304050607"])
253*e69a3d18SMichał Górny        self.match("register read arg2",
254*e69a3d18SMichał Górny                   ["x1 = 0x0102030405060708"])
255*e69a3d18SMichał Górny        self.match("register read fp",
256*e69a3d18SMichał Górny                   ["x29 = 0x1d1e1f2021222324"])
257*e69a3d18SMichał Górny        self.match("register read lr",
258*e69a3d18SMichał Górny                   ["x30 = 0x1e1f202122232425"])
259*e69a3d18SMichał Górny        self.match("register read ra",
260*e69a3d18SMichał Górny                   ["x30 = 0x1e1f202122232425"])
261*e69a3d18SMichał Górny        self.match("register read flags",
262*e69a3d18SMichał Górny                   ["cpsr = 0x21222324"])
263*e69a3d18SMichał Górny
264*e69a3d18SMichał Górny    @skipIfRemote
265*e69a3d18SMichał Górny    @skipIfLLVMTargetMissing("X86")
266*e69a3d18SMichał Górny    def test_i386_regs(self):
267*e69a3d18SMichał Górny        """Test grabbing various i386 registers from gdbserver."""
268*e69a3d18SMichał Górny
269*e69a3d18SMichał Górny        GPRS = '''
270*e69a3d18SMichał GórnyCHECK-I386-DAG: eax = 0x04030201
271*e69a3d18SMichał GórnyCHECK-I386-DAG: ecx = 0x14131211
272*e69a3d18SMichał GórnyCHECK-I386-DAG: edx = 0x24232221
273*e69a3d18SMichał GórnyCHECK-I386-DAG: ebx = 0x34333231
274*e69a3d18SMichał GórnyCHECK-I386-DAG: esp = 0x44434241
275*e69a3d18SMichał GórnyCHECK-I386-DAG: ebp = 0x54535251
276*e69a3d18SMichał GórnyCHECK-I386-DAG: esi = 0x64636261
277*e69a3d18SMichał GórnyCHECK-I386-DAG: edi = 0x74737271
278*e69a3d18SMichał GórnyCHECK-I386-DAG: eip = 0x84838281
279*e69a3d18SMichał GórnyCHECK-I386-DAG: eflags = 0x94939291
280*e69a3d18SMichał GórnyCHECK-I386-DAG: cs = 0xa4a3a2a1
281*e69a3d18SMichał GórnyCHECK-I386-DAG: ss = 0xb4b3b2b1
282*e69a3d18SMichał GórnyCHECK-I386-DAG: ds = 0xc4c3c2c1
283*e69a3d18SMichał GórnyCHECK-I386-DAG: es = 0xd4d3d2d1
284*e69a3d18SMichał GórnyCHECK-I386-DAG: fs = 0xe4e3e2e1
285*e69a3d18SMichał GórnyCHECK-I386-DAG: gs = 0xf4f3f2f1
286*e69a3d18SMichał Górny'''
287*e69a3d18SMichał Górny
288*e69a3d18SMichał Górny        SUPPL = '''
289*e69a3d18SMichał GórnyCHECK-I386-DAG: ax = 0x0201
290*e69a3d18SMichał GórnyCHECK-I386-DAG: cx = 0x1211
291*e69a3d18SMichał GórnyCHECK-I386-DAG: dx = 0x2221
292*e69a3d18SMichał GórnyCHECK-I386-DAG: bx = 0x3231
293*e69a3d18SMichał GórnyCHECK-I386-DAG: sp = 0x4241
294*e69a3d18SMichał GórnyCHECK-I386-DAG: bp = 0x5251
295*e69a3d18SMichał GórnyCHECK-I386-DAG: si = 0x6261
296*e69a3d18SMichał GórnyCHECK-I386-DAG: di = 0x7271
297*e69a3d18SMichał Górny
298*e69a3d18SMichał GórnyCHECK-I386-DAG: ah = 0x02
299*e69a3d18SMichał GórnyCHECK-I386-DAG: ch = 0x12
300*e69a3d18SMichał GórnyCHECK-I386-DAG: dh = 0x22
301*e69a3d18SMichał GórnyCHECK-I386-DAG: bh = 0x32
302*e69a3d18SMichał Górny
303*e69a3d18SMichał GórnyCHECK-I386-DAG: al = 0x01
304*e69a3d18SMichał GórnyCHECK-I386-DAG: cl = 0x11
305*e69a3d18SMichał GórnyCHECK-I386-DAG: dl = 0x21
306*e69a3d18SMichał GórnyCHECK-I386-DAG: bl = 0x31
307*e69a3d18SMichał GórnyCHECK-I386-DAG: spl = 0x41
308*e69a3d18SMichał GórnyCHECK-I386-DAG: bpl = 0x51
309*e69a3d18SMichał GórnyCHECK-I386-DAG: sil = 0x61
310*e69a3d18SMichał GórnyCHECK-I386-DAG: dil = 0x71
311*e69a3d18SMichał Górny'''
312*e69a3d18SMichał Górny
313*e69a3d18SMichał Górny        class MyResponder(MockGDBServerResponder):
314*e69a3d18SMichał Górny            reg_data = ''.join(self.filecheck_to_blob(GPRS))
315*e69a3d18SMichał Górny
316*e69a3d18SMichał Górny            def readRegister(self, regnum):
317*e69a3d18SMichał Górny                return ""
318*e69a3d18SMichał Górny
319*e69a3d18SMichał Górny            def readRegisters(self):
320*e69a3d18SMichał Górny                return self.reg_data
321*e69a3d18SMichał Górny
322*e69a3d18SMichał Górny            def haltReason(self):
323*e69a3d18SMichał Górny                return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;"
324*e69a3d18SMichał Górny
325*e69a3d18SMichał Górny        self.server.responder = MyResponder()
326*e69a3d18SMichał Górny
327*e69a3d18SMichał Górny        target = self.createTarget("basic_eh_frame-i386.yaml")
328*e69a3d18SMichał Górny        process = self.connect(target)
329*e69a3d18SMichał Górny        lldbutil.expect_state_changes(self, self.dbg.GetListener(), process,
330*e69a3d18SMichał Górny                                      [lldb.eStateStopped])
331*e69a3d18SMichał Górny
332*e69a3d18SMichał Górny        # test all registers
333*e69a3d18SMichał Górny        self.filecheck("register read --all", __file__,
334*e69a3d18SMichał Górny                       filecheck_options='--check-prefix=CHECK-I386')
335*e69a3d18SMichał Górny
336*e69a3d18SMichał Górny        # test generic aliases
337*e69a3d18SMichał Górny        self.match("register read fp",
338*e69a3d18SMichał Górny                   ["ebp = 0x54535251"])
339*e69a3d18SMichał Górny        self.match("register read sp",
340*e69a3d18SMichał Górny                   ["esp = 0x44434241"])
341*e69a3d18SMichał Górny        self.match("register read pc",
342*e69a3d18SMichał Górny                   ["eip = 0x84838281"])
343*e69a3d18SMichał Górny        self.match("register read flags",
344*e69a3d18SMichał Górny                   ["eflags = 0x94939291"])
345