Jason Molenda 6d6feaf7e3 [lldb][NFC] update API tests which skip/expect-fail arm
The architectures provided to skipIf / expectedFail are regular
expressions (v. _match_decorator_property() in decorators.py
so on Darwin systems "arm64" would match the skips for "arm" (32-bit
Linux).  Update these to "arm$" to prevent this, and also update
three tests (TestBuiltinFormats.py, TestCrossDSOTailCalls.py,
TestCrossObjectTailCalls.py) that were skipped for arm64 via this
behavior, and need to be skipped or they will fail.

This was moviated by the new TestDynamicValue.py test which has
an expected-fail for arm, but the test was passing on arm64 Darwin
resulting in failure for the CIs.
2025-05-27 18:41:16 -07:00

51 lines
1.7 KiB
Python

"""
Ensure that when the interrupt is raised we still make frame 0.
and make sure "GetNumFrames" isn't interrupted.
"""
import lldb
import lldbsuite.test.lldbutil as lldbutil
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
class TestInterruptingBacktrace(TestBase):
NO_DEBUG_INFO_TESTCASE = True
@skipIf(oslist=["linux"], archs=["arm$"])
def test_backtrace_interrupt(self):
"""Use RequestInterrupt followed by stack operations
to ensure correct interrupt behavior for stacks."""
self.build()
self.main_source_file = lldb.SBFileSpec("main.c")
self.bt_interrupt_test()
def bt_interrupt_test(self):
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "Set a breakpoint here", self.main_source_file
)
# Now continue, and when we stop we will have crashed.
process.Continue()
self.dbg.RequestInterrupt()
# Be sure to turn this off again:
def cleanup():
if self.dbg.InterruptRequested():
self.dbg.CancelInterruptRequest()
self.addTearDownHook(cleanup)
frame_0 = thread.GetFrameAtIndex(0)
self.assertTrue(frame_0.IsValid(), "Got a good 0th frame")
# The interrupt flag is up already, so any attempt to backtrace
# should be cut short:
frame_1 = thread.GetFrameAtIndex(1)
self.assertFalse(frame_1.IsValid(), "Prevented from getting more frames")
# Since GetNumFrames is a contract, we don't interrupt it:
num_frames = thread.GetNumFrames()
print(f"Number of frames: {num_frames}")
self.assertGreater(num_frames, 1, "Got many frames")
self.dbg.CancelInterruptRequest()