blob: 4ffbc5e49fb0d80f77e4de5ac4b1e98c7186105f [file] [log] [blame] [edit]
"""
Test Getting the expression path for registers works correctly
"""
import lldb
from lldbsuite.test import lldbutil
from lldbsuite.test.lldbtest import TestBase, VALID_BREAKPOINT, VALID_TARGET
class TestExprPathRegisters(TestBase):
NO_DEBUG_INFO_TESTCASE = True
def verify_register_path(self, reg_value: lldb.SBValue):
stream = lldb.SBStream()
reg_name = reg_value.name
self.assertTrue(
reg_value.GetExpressionPath(stream),
f"Expected an expression path for register {reg_name}.",
)
reg_expr_path = stream.GetData()
self.assertEqual(reg_expr_path, f"${reg_name}")
def test_float_registers(self):
"""Verify the expression path of the registers is valid."""
self.build()
_, _, thread, _ = lldbutil.run_to_name_breakpoint(self, "my_foo")
frame = thread.GetSelectedFrame()
self.assertTrue(frame, "Expected a valid Frame.")
# possible floating point register on some cpus.
register_names = [
"xmm0",
"ymm0",
"v0",
"v1",
"f0",
"f1",
"d0",
"d1",
"vr0",
"vr1",
"st0",
"st1",
]
for name in register_names:
reg_value = frame.FindRegister(name)
# some the register will not be available for the cpu
# only verify if it is valid.
if reg_value:
self.verify_register_path(reg_value)
def test_all_registers(self):
"""Test all the registers that is avaiable on the machine"""
self.build()
_, _, thread, _ = lldbutil.run_to_name_breakpoint(self, "my_foo")
frame = thread.GetSelectedFrame()
self.assertTrue(frame, "Expected a valid Frame.")
register_sets = frame.GetRegisters()
self.assertTrue(register_sets.IsValid(), "Expected Frame Registers")
for register_set in register_sets:
for register in register_set.children:
self.verify_register_path(register)