xref: /llvm-project/lldb/test/API/macosx/arm-corefile-regctx/TestArmMachoCorefileRegctx.py (revision 1eeeab82c6eb185f5139e633a59c2dbcb15616e4)
1"""Test that Mach-O armv7/arm64 corefile register contexts are read by lldb."""
2
3
4import os
5import re
6import subprocess
7
8import lldb
9from lldbsuite.test.decorators import *
10from lldbsuite.test.lldbtest import *
11from lldbsuite.test import lldbutil
12
13
14class TestArmMachoCorefileRegctx(TestBase):
15    NO_DEBUG_INFO_TESTCASE = True
16
17    @skipUnlessDarwin
18    def setUp(self):
19        TestBase.setUp(self)
20        self.build()
21        self.create_corefile = self.getBuildArtifact("a.out")
22        self.corefile = self.getBuildArtifact("core")
23
24    def test_armv7_corefile(self):
25        ### Create corefile
26        retcode = call(self.create_corefile + " armv7 " + self.corefile, shell=True)
27
28        target = self.dbg.CreateTarget("")
29        err = lldb.SBError()
30        process = target.LoadCore(self.corefile)
31        self.assertTrue(process.IsValid())
32        thread = process.GetSelectedThread()
33        frame = thread.GetSelectedFrame()
34
35        lr = frame.FindRegister("lr")
36        self.assertTrue(lr.IsValid())
37        self.assertEqual(lr.GetValueAsUnsigned(), 0x000F0000)
38
39        pc = frame.FindRegister("pc")
40        self.assertTrue(pc.IsValid())
41        self.assertEqual(pc.GetValueAsUnsigned(), 0x00100000)
42
43        exception = frame.FindRegister("exception")
44        self.assertTrue(exception.IsValid())
45        self.assertEqual(exception.GetValueAsUnsigned(), 0x00003F5C)
46
47    def test_arm64_corefile(self):
48        ### Create corefile
49        retcode = call(self.create_corefile + " arm64 " + self.corefile, shell=True)
50
51        target = self.dbg.CreateTarget("")
52        err = lldb.SBError()
53        process = target.LoadCore(self.corefile)
54        self.assertTrue(process.IsValid())
55        thread = process.GetSelectedThread()
56        frame = thread.GetSelectedFrame()
57
58        lr = frame.FindRegister("lr")
59        self.assertTrue(lr.IsValid())
60        self.assertEqual(lr.GetValueAsUnsigned(), 0x000000018CD97F28)
61
62        pc = frame.FindRegister("pc")
63        self.assertTrue(pc.IsValid())
64        self.assertEqual(pc.GetValueAsUnsigned(), 0x0000000100003F5C)
65
66        exception = frame.FindRegister("far")
67        self.assertTrue(exception.IsValid())
68        self.assertEqual(exception.GetValueAsUnsigned(), 0x0000000100003F5C)
69