Files
clang-p2996/lldb/test/API/functionalities/unwind/aarch64_unwind_pac/TestAArch64UnwindPAC.py
Dave Lee 4cc8f2a017 [lldb][tests] Automatically call compute_mydir (NFC)
Eliminate boilerplate of having each test manually assign to `mydir` by calling
`compute_mydir` in lldbtest.py.

Differential Revision: https://reviews.llvm.org/D128077
2022-06-17 14:34:49 -07:00

47 lines
1.7 KiB
Python

"""
Test that we can backtrace correctly when AArch64 PAC is enabled
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class AArch64UnwindPAC(TestBase):
@skipIf(archs=no_match(["aarch64"]))
@skipIf(oslist=no_match(['linux']))
def test(self):
"""Test that we can backtrace correctly when AArch64 PAC is enabled"""
if not self.isAArch64PAuth():
self.skipTest('Target must support Pointer Authentication.')
self.build()
self.line = line_number('main.c', '// Frame func_c')
exe = self.getBuildArtifact("a.out")
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
lldbutil.run_break_set_by_file_and_line(
self, "main.c", self.line, num_expected_locations=1)
self.runCmd("run", RUN_SUCCEEDED)
self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT,
substrs=["stop reason = breakpoint 1."])
target = self.dbg.GetSelectedTarget()
process = target.GetProcess()
thread = process.GetThreadAtIndex(0)
backtrace = ["func_c", "func_b", "func_a", "main", "__libc_start_main", "_start"]
self.assertEqual(thread.GetNumFrames(), len(backtrace))
for frame_idx, frame in enumerate(thread.frames):
frame = thread.GetFrameAtIndex(frame_idx)
self.assertTrue(frame)
self.assertEqual(frame.GetFunctionName(), backtrace[frame_idx])
# Check line number for functions in main.c
if (frame_idx < 4):
self.assertEqual(frame.GetLineEntry().GetLine(),
line_number("main.c", "Frame " + backtrace[frame_idx]))