xref: /llvm-project/lldb/test/API/functionalities/gdb_remote_client/TestAArch64XMLRegOffsets.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
178cb4562SMuhammad Omair Javaidfrom textwrap import dedent
278cb4562SMuhammad Omair Javaidimport lldb
378cb4562SMuhammad Omair Javaidfrom lldbsuite.test.lldbtest import *
478cb4562SMuhammad Omair Javaidfrom lldbsuite.test.decorators import *
533c0f93fSPavel Labathfrom lldbsuite.test.gdbclientutils import *
633c0f93fSPavel Labathfrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
778cb4562SMuhammad Omair Javaid
878cb4562SMuhammad Omair Javaid
978cb4562SMuhammad Omair Javaidclass MyResponder(MockGDBServerResponder):
1078cb4562SMuhammad Omair Javaid    def qXferRead(self, obj, annex, offset, length):
1178cb4562SMuhammad Omair Javaid        if annex == "target.xml":
12*2238dcc3SJonas Devlieghere            return (
13*2238dcc3SJonas Devlieghere                dedent(
14*2238dcc3SJonas Devlieghere                    """\
1578cb4562SMuhammad Omair Javaid                <?xml version="1.0"?>
1678cb4562SMuhammad Omair Javaid                  <target version="1.0">
1778cb4562SMuhammad Omair Javaid                    <architecture>aarch64</architecture>
1878cb4562SMuhammad Omair Javaid                    <feature name="org.gnu.gdb.aarch64.core">
1978cb4562SMuhammad Omair Javaid                      <reg name="cpsr" regnum="33" bitsize="32"/>
2078cb4562SMuhammad Omair Javaid                      <reg name="x0" regnum="0" bitsize="64"/>
2178cb4562SMuhammad Omair Javaid                      <reg name="x1" bitsize="64"/>
2278cb4562SMuhammad Omair Javaid                      <reg name="x2" bitsize="64"/>
2378cb4562SMuhammad Omair Javaid                      <reg name="x3" bitsize="64"/>
2478cb4562SMuhammad Omair Javaid                      <reg name="x4" bitsize="64"/>
2578cb4562SMuhammad Omair Javaid                      <reg name="x5" bitsize="64"/>
2678cb4562SMuhammad Omair Javaid                      <reg name="x6" bitsize="64"/>
2778cb4562SMuhammad Omair Javaid                      <reg name="x7" bitsize="64"/>
2878cb4562SMuhammad Omair Javaid                      <reg name="x8" bitsize="64"/>
2978cb4562SMuhammad Omair Javaid                      <reg name="x9" bitsize="64"/>
3078cb4562SMuhammad Omair Javaid                      <reg name="x10" bitsize="64"/>
3178cb4562SMuhammad Omair Javaid                      <reg name="x11" bitsize="64"/>
3278cb4562SMuhammad Omair Javaid                      <reg name="x12" bitsize="64"/>
3378cb4562SMuhammad Omair Javaid                      <reg name="x13" bitsize="64"/>
3478cb4562SMuhammad Omair Javaid                      <reg name="x14" bitsize="64"/>
3578cb4562SMuhammad Omair Javaid                      <reg name="x15" bitsize="64"/>
3678cb4562SMuhammad Omair Javaid                      <reg name="x16" bitsize="64"/>
3778cb4562SMuhammad Omair Javaid                      <reg name="x17" bitsize="64"/>
3878cb4562SMuhammad Omair Javaid                      <reg name="x18" bitsize="64"/>
3978cb4562SMuhammad Omair Javaid                      <reg name="x19" bitsize="64"/>
4078cb4562SMuhammad Omair Javaid                      <reg name="x20" bitsize="64"/>
4178cb4562SMuhammad Omair Javaid                      <reg name="x21" bitsize="64"/>
4278cb4562SMuhammad Omair Javaid                      <reg name="x22" bitsize="64"/>
4378cb4562SMuhammad Omair Javaid                      <reg name="x23" bitsize="64"/>
4478cb4562SMuhammad Omair Javaid                      <reg name="x24" bitsize="64"/>
4578cb4562SMuhammad Omair Javaid                      <reg name="x25" bitsize="64"/>
4678cb4562SMuhammad Omair Javaid                      <reg name="x26" bitsize="64"/>
4778cb4562SMuhammad Omair Javaid                      <reg name="x27" bitsize="64"/>
4878cb4562SMuhammad Omair Javaid                      <reg name="x28" bitsize="64"/>
4978cb4562SMuhammad Omair Javaid                      <reg name="x29" bitsize="64"/>
5078cb4562SMuhammad Omair Javaid                      <reg name="x30" bitsize="64"/>
5178cb4562SMuhammad Omair Javaid                      <reg name="sp" bitsize="64"/>
5278cb4562SMuhammad Omair Javaid                      <reg name="pc" bitsize="64"/>
5378cb4562SMuhammad Omair Javaid                      <reg name="w0" bitsize="32" value_regnums="0" invalidate_regnums="0" regnum="34"/>
5478cb4562SMuhammad Omair Javaid                      <reg name="w1" bitsize="32" value_regnums="1" invalidate_regnums="1"/>
5578cb4562SMuhammad Omair Javaid                      <reg name="w2" bitsize="32" value_regnums="2" invalidate_regnums="2"/>
5678cb4562SMuhammad Omair Javaid                      <reg name="w3" bitsize="32" value_regnums="3" invalidate_regnums="3"/>
5778cb4562SMuhammad Omair Javaid                      <reg name="w4" bitsize="32" value_regnums="4" invalidate_regnums="4"/>
5878cb4562SMuhammad Omair Javaid                      <reg name="w5" bitsize="32" value_regnums="5" invalidate_regnums="5"/>
5978cb4562SMuhammad Omair Javaid                      <reg name="w6" bitsize="32" value_regnums="6" invalidate_regnums="6"/>
6078cb4562SMuhammad Omair Javaid                      <reg name="w7" bitsize="32" value_regnums="7" invalidate_regnums="7"/>
6178cb4562SMuhammad Omair Javaid                      <reg name="w8" bitsize="32" value_regnums="8" invalidate_regnums="8"/>
6278cb4562SMuhammad Omair Javaid                      <reg name="w9" bitsize="32" value_regnums="9" invalidate_regnums="9"/>
6378cb4562SMuhammad Omair Javaid                      <reg name="w10" bitsize="32" value_regnums="10" invalidate_regnums="10"/>
6478cb4562SMuhammad Omair Javaid                      <reg name="w11" bitsize="32" value_regnums="11" invalidate_regnums="11"/>
6578cb4562SMuhammad Omair Javaid                      <reg name="w12" bitsize="32" value_regnums="12" invalidate_regnums="12"/>
6678cb4562SMuhammad Omair Javaid                      <reg name="w13" bitsize="32" value_regnums="13" invalidate_regnums="13"/>
6778cb4562SMuhammad Omair Javaid                      <reg name="w14" bitsize="32" value_regnums="14" invalidate_regnums="14"/>
6878cb4562SMuhammad Omair Javaid                      <reg name="w15" bitsize="32" value_regnums="15" invalidate_regnums="15"/>
6978cb4562SMuhammad Omair Javaid                      <reg name="w16" bitsize="32" value_regnums="16" invalidate_regnums="16"/>
7078cb4562SMuhammad Omair Javaid                      <reg name="w17" bitsize="32" value_regnums="17" invalidate_regnums="17"/>
7178cb4562SMuhammad Omair Javaid                      <reg name="w18" bitsize="32" value_regnums="18" invalidate_regnums="18"/>
7278cb4562SMuhammad Omair Javaid                      <reg name="w19" bitsize="32" value_regnums="19" invalidate_regnums="19"/>
7378cb4562SMuhammad Omair Javaid                      <reg name="w20" bitsize="32" value_regnums="20" invalidate_regnums="20"/>
7478cb4562SMuhammad Omair Javaid                      <reg name="w21" bitsize="32" value_regnums="21" invalidate_regnums="21"/>
7578cb4562SMuhammad Omair Javaid                      <reg name="w22" bitsize="32" value_regnums="22" invalidate_regnums="22"/>
7678cb4562SMuhammad Omair Javaid                      <reg name="w23" bitsize="32" value_regnums="23" invalidate_regnums="23"/>
7778cb4562SMuhammad Omair Javaid                      <reg name="w24" bitsize="32" value_regnums="24" invalidate_regnums="24"/>
7878cb4562SMuhammad Omair Javaid                      <reg name="w25" bitsize="32" value_regnums="25" invalidate_regnums="25"/>
7978cb4562SMuhammad Omair Javaid                      <reg name="w26" bitsize="32" value_regnums="26" invalidate_regnums="26"/>
8078cb4562SMuhammad Omair Javaid                      <reg name="w27" bitsize="32" value_regnums="27" invalidate_regnums="27"/>
8178cb4562SMuhammad Omair Javaid                      <reg name="w28" bitsize="32" value_regnums="28" invalidate_regnums="28"/>
8278cb4562SMuhammad Omair Javaid                    </feature>
8378cb4562SMuhammad Omair Javaid                  </target>
84*2238dcc3SJonas Devlieghere                """
85*2238dcc3SJonas Devlieghere                ),
86*2238dcc3SJonas Devlieghere                False,
87*2238dcc3SJonas Devlieghere            )
8878cb4562SMuhammad Omair Javaid        else:
89*2238dcc3SJonas Devlieghere            return (None,)
9078cb4562SMuhammad Omair Javaid
9178cb4562SMuhammad Omair Javaid    def readRegister(self, regnum):
9278cb4562SMuhammad Omair Javaid        return "E01"
9378cb4562SMuhammad Omair Javaid
9478cb4562SMuhammad Omair Javaid    def readRegisters(self):
9578cb4562SMuhammad Omair Javaid        return "20000000000000002000000000000000f0c154bfffff00005daa985a8fea0b48f0b954bfffff0000ad13cce570150b48380000000000000070456abfffff0000a700000000000000000000000000000001010101010101010000000000000000f0c154bfffff00000f2700000000000008e355bfffff0000080e55bfffff0000281041000000000010de61bfffff00005c05000000000000f0c154bfffff000090fcffffffff00008efcffffffff00008ffcffffffff00000000000000000000001000000000000090fcffffffff000000d06cbfffff0000f0c154bfffff00000100000000000000d0b954bfffff0000e407400000000000d0b954bfffff0000e40740000000000000100000"
9678cb4562SMuhammad Omair Javaid
9778cb4562SMuhammad Omair Javaid
9878cb4562SMuhammad Omair Javaidclass TestAArch64XMLRegOffsets(GDBRemoteTestBase):
9978cb4562SMuhammad Omair Javaid    @skipIfXmlSupportMissing
10078cb4562SMuhammad Omair Javaid    @skipIfRemote
10178cb4562SMuhammad Omair Javaid    @skipIfLLVMTargetMissing("AArch64")
10278cb4562SMuhammad Omair Javaid    def test_register_gpacket_offsets(self):
10378cb4562SMuhammad Omair Javaid        """
10478cb4562SMuhammad Omair Javaid        Test that we correctly associate the register info with the eh_frame
10578cb4562SMuhammad Omair Javaid        register numbers.
10678cb4562SMuhammad Omair Javaid        """
10778cb4562SMuhammad Omair Javaid
10878cb4562SMuhammad Omair Javaid        target = self.createTarget("basic_eh_frame-aarch64.yaml")
10978cb4562SMuhammad Omair Javaid        self.server.responder = MyResponder()
11078cb4562SMuhammad Omair Javaid
11178cb4562SMuhammad Omair Javaid        if self.TraceOn():
11278cb4562SMuhammad Omair Javaid            self.runCmd("log enable gdb-remote packets")
113*2238dcc3SJonas Devlieghere            self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets"))
11478cb4562SMuhammad Omair Javaid
11578cb4562SMuhammad Omair Javaid        process = self.connect(target)
116*2238dcc3SJonas Devlieghere        lldbutil.expect_state_changes(
117*2238dcc3SJonas Devlieghere            self, self.dbg.GetListener(), process, [lldb.eStateStopped]
118*2238dcc3SJonas Devlieghere        )
11978cb4562SMuhammad Omair Javaid
120*2238dcc3SJonas Devlieghere        registerSet = (
121*2238dcc3SJonas Devlieghere            process.GetThreadAtIndex(0)
122*2238dcc3SJonas Devlieghere            .GetFrameAtIndex(0)
123*2238dcc3SJonas Devlieghere            .GetRegisters()
124*2238dcc3SJonas Devlieghere            .GetValueAtIndex(0)
125*2238dcc3SJonas Devlieghere        )
12678cb4562SMuhammad Omair Javaid
12778cb4562SMuhammad Omair Javaid        reg_val_dict = {
128*2238dcc3SJonas Devlieghere            "x0": 0x0000000000000020,
129*2238dcc3SJonas Devlieghere            "x1": 0x0000000000000020,
130*2238dcc3SJonas Devlieghere            "x2": 0x0000FFFFBF54C1F0,
131*2238dcc3SJonas Devlieghere            "x3": 0x480BEA8F5A98AA5D,
132*2238dcc3SJonas Devlieghere            "x4": 0x0000FFFFBF54B9F0,
133*2238dcc3SJonas Devlieghere            "x5": 0x480B1570E5CC13AD,
134*2238dcc3SJonas Devlieghere            "x6": 0x0000000000000038,
135*2238dcc3SJonas Devlieghere            "x7": 0x0000FFFFBF6A4570,
136*2238dcc3SJonas Devlieghere            "x8": 0x00000000000000A7,
137*2238dcc3SJonas Devlieghere            "x9": 0x0000000000000000,
138*2238dcc3SJonas Devlieghere            "x10": 0x0101010101010101,
139*2238dcc3SJonas Devlieghere            "x11": 0x0000000000000000,
140*2238dcc3SJonas Devlieghere            "x12": 0x0000FFFFBF54C1F0,
141*2238dcc3SJonas Devlieghere            "x13": 0x000000000000270F,
142*2238dcc3SJonas Devlieghere            "x14": 0x0000FFFFBF55E308,
143*2238dcc3SJonas Devlieghere            "x15": 0x0000FFFFBF550E08,
144*2238dcc3SJonas Devlieghere            "x16": 0x0000000000411028,
145*2238dcc3SJonas Devlieghere            "x17": 0x0000FFFFBF61DE10,
146*2238dcc3SJonas Devlieghere            "x18": 0x000000000000055C,
147*2238dcc3SJonas Devlieghere            "x19": 0x0000FFFFBF54C1F0,
148*2238dcc3SJonas Devlieghere            "x20": 0x0000FFFFFFFFFC90,
149*2238dcc3SJonas Devlieghere            "x21": 0x0000FFFFFFFFFC8E,
150*2238dcc3SJonas Devlieghere            "x22": 0x0000FFFFFFFFFC8F,
151*2238dcc3SJonas Devlieghere            "x23": 0x0000000000000000,
152*2238dcc3SJonas Devlieghere            "x24": 0x0000000000001000,
153*2238dcc3SJonas Devlieghere            "x25": 0x0000FFFFFFFFFC90,
154*2238dcc3SJonas Devlieghere            "x26": 0x0000FFFFBF6CD000,
155*2238dcc3SJonas Devlieghere            "x27": 0x0000FFFFBF54C1F0,
156*2238dcc3SJonas Devlieghere            "x28": 0x0000000000000001,
157*2238dcc3SJonas Devlieghere            "x29": 0x0000FFFFBF54B9D0,
158*2238dcc3SJonas Devlieghere            "x30": 0x00000000004007E4,
159*2238dcc3SJonas Devlieghere            "sp": 0x0000FFFFBF54B9D0,
160*2238dcc3SJonas Devlieghere            "pc": 0x00000000004007E4,
161*2238dcc3SJonas Devlieghere            "cpsr": 0x00001000,
162*2238dcc3SJonas Devlieghere            "w0": 0x00000020,
163*2238dcc3SJonas Devlieghere            "w1": 0x00000020,
164*2238dcc3SJonas Devlieghere            "w2": 0xBF54C1F0,
165*2238dcc3SJonas Devlieghere            "w3": 0x5A98AA5D,
166*2238dcc3SJonas Devlieghere            "w4": 0xBF54B9F0,
167*2238dcc3SJonas Devlieghere            "w5": 0xE5CC13AD,
168*2238dcc3SJonas Devlieghere            "w6": 0x00000038,
169*2238dcc3SJonas Devlieghere            "w7": 0xBF6A4570,
170*2238dcc3SJonas Devlieghere            "w8": 0x000000A7,
171*2238dcc3SJonas Devlieghere            "w9": 0x00000000,
172*2238dcc3SJonas Devlieghere            "w10": 0x01010101,
173*2238dcc3SJonas Devlieghere            "w11": 0x00000000,
174*2238dcc3SJonas Devlieghere            "w12": 0xBF54C1F0,
175*2238dcc3SJonas Devlieghere            "w13": 0x0000270F,
176*2238dcc3SJonas Devlieghere            "w14": 0xBF55E308,
177*2238dcc3SJonas Devlieghere            "w15": 0xBF550E08,
178*2238dcc3SJonas Devlieghere            "w16": 0x00411028,
179*2238dcc3SJonas Devlieghere            "w17": 0xBF61DE10,
180*2238dcc3SJonas Devlieghere            "w18": 0x0000055C,
181*2238dcc3SJonas Devlieghere            "w19": 0xBF54C1F0,
182*2238dcc3SJonas Devlieghere            "w20": 0xFFFFFC90,
183*2238dcc3SJonas Devlieghere            "w21": 0xFFFFFC8E,
184*2238dcc3SJonas Devlieghere            "w22": 0xFFFFFC8F,
185*2238dcc3SJonas Devlieghere            "w23": 0x00000000,
186*2238dcc3SJonas Devlieghere            "w24": 0x00001000,
187*2238dcc3SJonas Devlieghere            "w25": 0xFFFFFC90,
188*2238dcc3SJonas Devlieghere            "w26": 0xBF6CD000,
189*2238dcc3SJonas Devlieghere            "w27": 0xBF54C1F0,
190*2238dcc3SJonas Devlieghere            "w28": 0x00000001,
19178cb4562SMuhammad Omair Javaid        }
19278cb4562SMuhammad Omair Javaid
19378cb4562SMuhammad Omair Javaid        for reg in registerSet:
194*2238dcc3SJonas Devlieghere            self.assertEqual(reg.GetValueAsUnsigned(), reg_val_dict[reg.GetName()])
195