2020-02-20 22:15:37 +05:00
|
|
|
|
|
|
|
|
|
|
|
import gdbremote_testcase
|
|
|
|
import textwrap
|
|
|
|
from lldbsuite.test.decorators import *
|
|
|
|
from lldbsuite.test.lldbtest import *
|
|
|
|
from lldbsuite.test import lldbutil
|
|
|
|
import re
|
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
|
|
class TestGdbRemoteTargetXmlPacket(gdbremote_testcase.GdbRemoteTestCaseBase):
|
|
|
|
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
|
|
|
|
@llgs_test
|
|
|
|
def test_g_target_xml_returns_correct_data(self):
|
|
|
|
self.build()
|
|
|
|
self.set_inferior_startup_launch()
|
|
|
|
|
|
|
|
procs = self.prep_debug_monitor_and_inferior()
|
|
|
|
|
|
|
|
OFFSET = 0
|
|
|
|
LENGTH = 0x1ffff0
|
|
|
|
self.test_sequence.add_log_lines([
|
|
|
|
"read packet: $qXfer:features:read:target.xml:{:x},{:x}#00".format(
|
|
|
|
OFFSET,
|
|
|
|
LENGTH),
|
|
|
|
{
|
|
|
|
"direction": "send",
|
|
|
|
"regex": re.compile("^\$l(.+)#[0-9a-fA-F]{2}$"),
|
|
|
|
"capture": {1: "target_xml"}
|
|
|
|
}],
|
|
|
|
True)
|
|
|
|
context = self.expect_gdbremote_sequence()
|
|
|
|
|
|
|
|
target_xml = context.get("target_xml")
|
|
|
|
|
|
|
|
root = ET.fromstring(target_xml)
|
|
|
|
self.assertIsNotNone(root)
|
|
|
|
self.assertEqual(root.tag, "target")
|
|
|
|
|
|
|
|
architecture = root.find("architecture")
|
|
|
|
self.assertIsNotNone(architecture)
|
2020-07-30 11:47:55 -07:00
|
|
|
self.assertIn(self.getArchitecture(), architecture.text)
|
2020-02-20 22:15:37 +05:00
|
|
|
|
|
|
|
feature = root.find("feature")
|
|
|
|
self.assertIsNotNone(feature)
|
|
|
|
|
|
|
|
target_xml_registers = feature.findall("reg")
|
|
|
|
self.assertTrue(len(target_xml_registers) > 0)
|
|
|
|
|
|
|
|
# registers info collected by qRegisterInfo
|
|
|
|
self.add_register_info_collection_packets()
|
|
|
|
context = self.expect_gdbremote_sequence()
|
|
|
|
self.assertIsNotNone(context)
|
|
|
|
q_info_registers = self.parse_register_info_packets(context)
|
|
|
|
|
|
|
|
self.assertTrue(len(target_xml_registers) == len(q_info_registers))
|
|
|
|
for register in zip(target_xml_registers, q_info_registers):
|
|
|
|
xml_info_reg = register[0]
|
|
|
|
q_info_reg = register[1]
|
|
|
|
self.assertEqual(q_info_reg["name"], xml_info_reg.get("name"))
|
|
|
|
self.assertEqual(q_info_reg["set"], xml_info_reg.get("group"))
|
|
|
|
self.assertEqual(q_info_reg["format"], xml_info_reg.get("format"))
|
|
|
|
self.assertEqual(q_info_reg["bitsize"], xml_info_reg.get("bitsize"))
|
2020-12-02 03:09:14 +05:00
|
|
|
|
|
|
|
if not self.getArchitecture() == 'aarch64':
|
|
|
|
self.assertEqual(q_info_reg["offset"], xml_info_reg.get("offset"))
|
|
|
|
|
2020-07-30 10:25:28 -07:00
|
|
|
self.assertEqual(q_info_reg["encoding"], xml_info_reg.get("encoding"))
|