[Lldb-commits] [lldb] [lldb] Track CFA pointer metadata in StackID (PR #157498)

Felipe de Azevedo Piovezan via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 10 17:59:33 PDT 2025


================
@@ -0,0 +1,25 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+ at skipUnlessDarwin
+ at skipIf(archs=no_match(["arm64"]))
+class TestArmPointerMetadataStripping(TestBase):
+    def test(self):
+        self.build()
+        target, process, thread, bkpt = lldbutil.run_to_name_breakpoint(self, "foo")
+
+        # Step over the first two instructions of foo in order to
+        # toggle the bit of fp and save it on the stack:
+        # orr   x29, x29, #0x1000000000000000
+        # stp	x29, x30, [sp, #-16]!
+        thread.StepInstruction(False)
+        thread.StepInstruction(False)
+
+        argv_addr = thread.frames[1].GetValueForVariablePath("&argv")
+        self.assertTrue(argv_addr.IsValid())
+
+        argv_addr_uint = argv_addr.GetValueAsUnsigned()
+        self.assertNotEqual((argv_addr_uint & (1 << 60)), 0)
----------------
felipepiovezan wrote:

Good point. I'm still not sure whether we should make `SBFrame::GetCFA` return the stripped or unstripped pointer, but at least the test would document the existing behavior.

https://github.com/llvm/llvm-project/pull/157498


More information about the lldb-commits mailing list