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.
92 lines
2.3 KiB
Python
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",
|
|
)
|