brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 603aa00 Raw
70 lines · python
1import gdbremote_testcase2import textwrap3from lldbsuite.test.decorators import *4from lldbsuite.test.lldbtest import *5from lldbsuite.test import lldbutil6import re7import xml.etree.ElementTree as ET8 9 10class TestGdbRemoteTargetXmlPacket(gdbremote_testcase.GdbRemoteTestCaseBase):11    @llgs_test12    def test_g_target_xml_returns_correct_data(self):13        self.build()14        self.set_inferior_startup_launch()15 16        procs = self.prep_debug_monitor_and_inferior()17 18        OFFSET = 019        LENGTH = 0x1FFFF020        self.test_sequence.add_log_lines(21            [22                "read packet: $qXfer:features:read:target.xml:{:x},{:x}#00".format(23                    OFFSET, LENGTH24                ),25                {26                    "direction": "send",27                    "regex": re.compile(r"^\$l(.+)#[0-9a-fA-F]{2}$", flags=re.DOTALL),28                    "capture": {1: "target_xml"},29                },30            ],31            True,32        )33        context = self.expect_gdbremote_sequence()34 35        target_xml = context.get("target_xml")36 37        root = ET.fromstring(target_xml)38        self.assertIsNotNone(root)39        self.assertEqual(root.tag, "target")40 41        architecture = root.find("architecture")42        self.assertIsNotNone(architecture)43        self.assertIn(self.getArchitecture(), architecture.text)44 45        feature = root.find("feature")46        self.assertIsNotNone(feature)47 48        target_xml_registers = feature.findall("reg")49        self.assertGreater(len(target_xml_registers), 0)50 51        # registers info collected by qRegisterInfo52        self.add_register_info_collection_packets()53        context = self.expect_gdbremote_sequence()54        self.assertIsNotNone(context)55        q_info_registers = self.parse_register_info_packets(context)56 57        self.assertEqual(len(target_xml_registers), len(q_info_registers))58        for register in zip(target_xml_registers, q_info_registers):59            xml_info_reg = register[0]60            q_info_reg = register[1]61            self.assertEqual(q_info_reg["name"], xml_info_reg.get("name"))62            self.assertEqual(q_info_reg["set"], xml_info_reg.get("group"))63            self.assertEqual(q_info_reg["format"], xml_info_reg.get("format"))64            self.assertEqual(q_info_reg["bitsize"], xml_info_reg.get("bitsize"))65 66            if not (self.isAArch64() or self.isRISCV()):67                self.assertEqual(q_info_reg["offset"], xml_info_reg.get("offset"))68 69            self.assertEqual(q_info_reg["encoding"], xml_info_reg.get("encoding"))70