| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| class TestArm64eAttach(TestBase): | |
| NO_DEBUG_INFO_TESTCASE = True | |
| # On Darwin systems, arch arm64e means ARMv8.3 with ptrauth ABI used. | |
| @skipIf(archs=no_match(["arm64e"])) | |
| def test(self): | |
| # Skip this test if not running on AArch64 target that supports PAC | |
| if not self.isAArch64PAuth(): | |
| self.skipTest("Target must support pointer authentication.") | |
| self.build() | |
| popen = self.spawnSubprocess(self.getBuildArtifact(), []) | |
| # This simulates how Xcode attaches to a process by pid/name. | |
| error = lldb.SBError() | |
| target = self.dbg.CreateTarget("", "arm64", "", True, error) | |
| listener = lldb.SBListener("my.attach.listener") | |
| process = target.AttachToProcessWithID(listener, popen.pid, error) | |
| self.assertSuccess(error) | |
| self.assertTrue(process, PROCESS_IS_VALID) | |
| self.assertEqual(target.GetTriple().split('-')[0], "arm64e", | |
| "target triple is updated correctly") | |
| self.expect('process plugin packet send qProcessInfo', | |
| "debugserver returns correct triple", | |
| substrs=['cputype:100000c', 'cpusubtype:2', 'ptrsize:8']) | |
| error = process.Kill() | |
| self.assertSuccess(error) |