| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| from lldbsuite.test.lldbarm64e import Arm64eTestBase | |
| class TestPtrAuthObjectiveC(Arm64eTestBase): | |
| NO_DEBUG_INFO_TESTCASE = True | |
| SHARED_BUILD_TESTCASE = False | |
| 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", | |
| ) | |
| 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", | |
| ) | |
| 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", | |
| ) | |
| 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", | |
| ) | |
| 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", | |
| ) |