| """Test that SBValue clears non-addressable bits""" | |
| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| class TestClearSBValueNonAddressableBits(TestBase): | |
| NO_DEBUG_INFO_TESTCASE = True | |
| # On AArch64 systems, the top bits that are not used for | |
| # addressing may be used for TBI, MTE, and/or pointer | |
| # authentication. | |
| @skipIf(archs=no_match(["aarch64", "arm64", "arm64e"])) | |
| # Only run this test on systems where TBI is known to be | |
| # enabled, so the address mask will clear the TBI bits. | |
| @skipUnlessPlatform(["linux"] + lldbplatformutil.getDarwinOSTriples()) | |
| def test(self): | |
| self.source = "main.c" | |
| self.build() | |
| (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( | |
| self, "break here", lldb.SBFileSpec(self.source, False) | |
| ) | |
| if self.TraceOn(): | |
| self.runCmd("frame variable") | |
| self.runCmd("frame variable &count &global") | |
| frame = thread.GetFrameAtIndex(0) | |
| count_p = frame.FindVariable("count_p") | |
| count_invalid_p = frame.FindVariable("count_invalid_p") | |
| self.assertEqual( | |
| count_p.GetValueAsUnsigned(), count_invalid_p.GetValueAsAddress() | |
| ) | |
| self.assertNotEqual( | |
| count_invalid_p.GetValueAsUnsigned(), count_invalid_p.GetValueAsAddress() | |
| ) | |
| self.assertEqual(5, count_p.Dereference().GetValueAsUnsigned()) | |
| self.assertEqual(5, count_invalid_p.Dereference().GetValueAsUnsigned()) | |
| global_p = frame.FindVariable("global_p") | |
| global_invalid_p = frame.FindVariable("global_invalid_p") | |
| self.assertEqual( | |
| global_p.GetValueAsUnsigned(), global_invalid_p.GetValueAsAddress() | |
| ) | |
| self.assertNotEqual( | |
| global_invalid_p.GetValueAsUnsigned(), global_invalid_p.GetValueAsAddress() | |
| ) | |
| self.assertEqual(10, global_p.Dereference().GetValueAsUnsigned()) | |
| self.assertEqual(10, global_invalid_p.Dereference().GetValueAsUnsigned()) | |
| main_p = frame.FindVariable("main_p") | |
| main_invalid_p = frame.FindVariable("main_invalid_p") | |
| self.assertEqual(main_p.GetValueAsAddress(), main_invalid_p.GetValueAsAddress()) |