| """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.GetValueAsUnsigned(), main_invalid_p.GetValueAsAddress() |
| ) |