1"""Test that SBValue clears non-addressable bits""" 2 3import lldb 4from lldbsuite.test.decorators import * 5from lldbsuite.test.lldbtest import * 6from lldbsuite.test import lldbutil 7 8 9class TestClearSBValueNonAddressableBits(TestBase): 10 NO_DEBUG_INFO_TESTCASE = True 11 12 # On AArch64 systems, the top bits that are not used for 13 # addressing may be used for TBI, MTE, and/or pointer 14 # authentication. 15 @skipIf(archs=no_match(["aarch64", "arm64", "arm64e"])) 16 17 # Only run this test on systems where TBI is known to be 18 # enabled, so the address mask will clear the TBI bits. 19 @skipUnlessPlatform(["linux"] + lldbplatformutil.getDarwinOSTriples()) 20 def test(self): 21 self.source = "main.c" 22 self.build() 23 (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( 24 self, "break here", lldb.SBFileSpec(self.source, False) 25 ) 26 27 if self.TraceOn(): 28 self.runCmd("frame variable") 29 self.runCmd("frame variable &count &global") 30 31 frame = thread.GetFrameAtIndex(0) 32 33 count_p = frame.FindVariable("count_p") 34 count_invalid_p = frame.FindVariable("count_invalid_p") 35 self.assertEqual( 36 count_p.GetValueAsUnsigned(), count_invalid_p.GetValueAsAddress() 37 ) 38 self.assertNotEqual( 39 count_invalid_p.GetValueAsUnsigned(), count_invalid_p.GetValueAsAddress() 40 ) 41 self.assertEqual(5, count_p.Dereference().GetValueAsUnsigned()) 42 self.assertEqual(5, count_invalid_p.Dereference().GetValueAsUnsigned()) 43 44 global_p = frame.FindVariable("global_p") 45 global_invalid_p = frame.FindVariable("global_invalid_p") 46 self.assertEqual( 47 global_p.GetValueAsUnsigned(), global_invalid_p.GetValueAsAddress() 48 ) 49 self.assertNotEqual( 50 global_invalid_p.GetValueAsUnsigned(), global_invalid_p.GetValueAsAddress() 51 ) 52 self.assertEqual(10, global_p.Dereference().GetValueAsUnsigned()) 53 self.assertEqual(10, global_invalid_p.Dereference().GetValueAsUnsigned()) 54 55 main_p = frame.FindVariable("main_p") 56 main_invalid_p = frame.FindVariable("main_invalid_p") 57 self.assertEqual( 58 main_p.GetValueAsUnsigned(), main_invalid_p.GetValueAsAddress() 59 ) 60