Jonas Devlieghere b9d276748e
[lldb] Support arm64e Objective-C signing in the expression evaluator (#187765)
When targeting arm64e, ISA pointers, class_ro_t pointers, and interface
selectors are signed in Objective-C. This PR adds support for that in
the expression evaluator.
2026-03-21 00:50:16 +00:00

92 lines
2.3 KiB
Python

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class TestPtrAuthObjectiveC(TestBase):
NO_DEBUG_INFO_TESTCASE = True
@skipUnlessArm64eSupported
def test_objc_message_send(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.m", False)
)
self.expect_expr(
"[obj doubleValue]",
result_type="int",
result_value="42",
)
@skipUnlessArm64eSupported
def test_objc_message_send_with_arg(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.m", False)
)
self.expect_expr(
"[obj addValue:9]",
result_type="int",
result_value="30",
)
@skipUnlessArm64eSupported
def test_objc_alloc_and_message(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.m", False)
)
self.expect_expr(
"PtrAuthTestObj *tmp = (PtrAuthTestObj *)[[PtrAuthTestObj alloc] init]; "
"tmp.value = 7; [tmp doubleValue]",
result_type="int",
result_value="14",
)
@skipUnlessArm64eSupported
def test_objc_derived_class(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.m", False)
)
self.expect_expr(
"[derived tripleValue]",
result_type="int",
result_value="30",
)
self.expect_expr(
"[derived doubleValue]",
result_type="int",
result_value="20",
)
@skipUnlessArm64eSupported
def test_objc_isa_check(self):
self.build()
lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.m", False)
)
self.expect_expr(
"(bool)[derived isKindOfClass:[PtrAuthTestObj class]]",
result_type="bool",
result_value="true",
)
self.expect_expr(
"(bool)[obj isKindOfClass:[PtrAuthDerived class]]",
result_type="bool",
result_value="false",
)