1be198e03SJordan Rupprechtimport gdbremote_testcase 2be198e03SJordan Rupprechtimport textwrap 3be198e03SJordan Rupprechtfrom lldbsuite.test.decorators import * 4be198e03SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 5be198e03SJordan Rupprechtfrom lldbsuite.test import lldbutil 6be198e03SJordan Rupprechtimport re 7be198e03SJordan Rupprechtimport xml.etree.ElementTree as ET 8be198e03SJordan Rupprecht 9be198e03SJordan Rupprecht 102238dcc3SJonas Devlieghereclass TestGdbRemoteTargetXmlPacket(gdbremote_testcase.GdbRemoteTestCaseBase): 11be198e03SJordan Rupprecht @llgs_test 12be198e03SJordan Rupprecht def test_g_target_xml_returns_correct_data(self): 13be198e03SJordan Rupprecht self.build() 14be198e03SJordan Rupprecht self.set_inferior_startup_launch() 15be198e03SJordan Rupprecht 16be198e03SJordan Rupprecht procs = self.prep_debug_monitor_and_inferior() 17be198e03SJordan Rupprecht 18be198e03SJordan Rupprecht OFFSET = 0 192238dcc3SJonas Devlieghere LENGTH = 0x1FFFF0 202238dcc3SJonas Devlieghere self.test_sequence.add_log_lines( 212238dcc3SJonas Devlieghere [ 22be198e03SJordan Rupprecht "read packet: $qXfer:features:read:target.xml:{:x},{:x}#00".format( 232238dcc3SJonas Devlieghere OFFSET, LENGTH 242238dcc3SJonas Devlieghere ), 25be198e03SJordan Rupprecht { 26be198e03SJordan Rupprecht "direction": "send", 27ba822e24SDavid Spickett "regex": re.compile("^\$l(.+)#[0-9a-fA-F]{2}$", flags=re.DOTALL), 282238dcc3SJonas Devlieghere "capture": {1: "target_xml"}, 292238dcc3SJonas Devlieghere }, 302238dcc3SJonas Devlieghere ], 312238dcc3SJonas Devlieghere True, 322238dcc3SJonas Devlieghere ) 33be198e03SJordan Rupprecht context = self.expect_gdbremote_sequence() 34be198e03SJordan Rupprecht 35be198e03SJordan Rupprecht target_xml = context.get("target_xml") 36be198e03SJordan Rupprecht 37be198e03SJordan Rupprecht root = ET.fromstring(target_xml) 38be198e03SJordan Rupprecht self.assertIsNotNone(root) 39be198e03SJordan Rupprecht self.assertEqual(root.tag, "target") 40be198e03SJordan Rupprecht 41be198e03SJordan Rupprecht architecture = root.find("architecture") 42be198e03SJordan Rupprecht self.assertIsNotNone(architecture) 433bb48898SJonas Devlieghere self.assertIn(self.getArchitecture(), architecture.text) 44be198e03SJordan Rupprecht 45be198e03SJordan Rupprecht feature = root.find("feature") 46be198e03SJordan Rupprecht self.assertIsNotNone(feature) 47be198e03SJordan Rupprecht 48be198e03SJordan Rupprecht target_xml_registers = feature.findall("reg") 49*9c246882SJordan Rupprecht self.assertGreater(len(target_xml_registers), 0) 50be198e03SJordan Rupprecht 51be198e03SJordan Rupprecht # registers info collected by qRegisterInfo 52be198e03SJordan Rupprecht self.add_register_info_collection_packets() 53be198e03SJordan Rupprecht context = self.expect_gdbremote_sequence() 54be198e03SJordan Rupprecht self.assertIsNotNone(context) 55be198e03SJordan Rupprecht q_info_registers = self.parse_register_info_packets(context) 56be198e03SJordan Rupprecht 57619e2e09SDave Lee self.assertEqual(len(target_xml_registers), len(q_info_registers)) 58be198e03SJordan Rupprecht for register in zip(target_xml_registers, q_info_registers): 59be198e03SJordan Rupprecht xml_info_reg = register[0] 60be198e03SJordan Rupprecht q_info_reg = register[1] 61be198e03SJordan Rupprecht self.assertEqual(q_info_reg["name"], xml_info_reg.get("name")) 62be198e03SJordan Rupprecht self.assertEqual(q_info_reg["set"], xml_info_reg.get("group")) 63be198e03SJordan Rupprecht self.assertEqual(q_info_reg["format"], xml_info_reg.get("format")) 64be198e03SJordan Rupprecht self.assertEqual(q_info_reg["bitsize"], xml_info_reg.get("bitsize")) 6578cb4562SMuhammad Omair Javaid 6610f5e08aSMuhammad Omair Javaid if not self.isAArch64(): 67be198e03SJordan Rupprecht self.assertEqual(q_info_reg["offset"], xml_info_reg.get("offset")) 6878cb4562SMuhammad Omair Javaid 69be198e03SJordan Rupprecht self.assertEqual(q_info_reg["encoding"], xml_info_reg.get("encoding")) 70