""" 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)