| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| from lldbsuite.test import configuration | |
| class TestPtrAuthObjectiveC(TestBase): | |
| NO_DEBUG_INFO_TESTCASE = True | |
| SHARED_BUILD_TESTCASE = False | |
| def build_arm64e(self): | |
| self.build( | |
| dictionary={"TRIPLE": configuration.triple.replace("arm64", "arm64e")} | |
| ) | |
| @skipUnlessArm64eSupported | |
| def test_objc_message_send(self): | |
| self.build_arm64e() | |
| 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_arm64e() | |
| 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_arm64e() | |
| 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_arm64e() | |
| 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_arm64e() | |
| 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", | |
| ) |