1 import gdbremote_testcase
3 from lldbsuite
.test
.decorators
import *
4 from lldbsuite
.test
.lldbtest
import *
5 from lldbsuite
.test
import lldbutil
7 import xml
.etree
.ElementTree
as ET
10 class TestGdbRemoteTargetXmlPacket(gdbremote_testcase
.GdbRemoteTestCaseBase
):
12 def test_g_target_xml_returns_correct_data(self
):
14 self
.set_inferior_startup_launch()
16 procs
= self
.prep_debug_monitor_and_inferior()
20 self
.test_sequence
.add_log_lines(
22 "read packet: $qXfer:features:read:target.xml:{:x},{:x}#00".format(
27 "regex": re
.compile("^\$l(.+)#[0-9a-fA-F]{2}$", flags
=re
.DOTALL
),
28 "capture": {1: "target_xml"},
33 context
= self
.expect_gdbremote_sequence()
35 target_xml
= context
.get("target_xml")
37 root
= ET
.fromstring(target_xml
)
38 self
.assertIsNotNone(root
)
39 self
.assertEqual(root
.tag
, "target")
41 architecture
= root
.find("architecture")
42 self
.assertIsNotNone(architecture
)
43 self
.assertIn(self
.getArchitecture(), architecture
.text
)
45 feature
= root
.find("feature")
46 self
.assertIsNotNone(feature
)
48 target_xml_registers
= feature
.findall("reg")
49 self
.assertGreater(len(target_xml_registers
), 0)
51 # registers info collected by qRegisterInfo
52 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
)
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"))
66 if not self
.isAArch64():
67 self
.assertEqual(q_info_reg
["offset"], xml_info_reg
.get("offset"))
69 self
.assertEqual(q_info_reg
["encoding"], xml_info_reg
.get("encoding"))