
It's not scientific but I think the PDB we produce on the Windows on Arm bot simply doesn't have the information needed. Could also be that clang is producing some DWARF, but link.exe is dropping it from the final executable, the effect is the same.
33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class ExprFromNonZeroFrame(TestBase):
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
# Requires DWARF debug information.
|
|
@skipIfWindows
|
|
def test(self):
|
|
"""
|
|
Tests that we can use SBFrame::EvaluateExpression on a frame
|
|
that we're not stopped in, even if thread-plans run as part of
|
|
parsing the expression (e.g., when running static initializers).
|
|
"""
|
|
self.build()
|
|
|
|
(_, _, thread, _) = lldbutil.run_to_source_breakpoint(
|
|
self, "return 5", lldb.SBFileSpec("main.c")
|
|
)
|
|
frame = thread.GetFrameAtIndex(1)
|
|
|
|
# Using a function pointer inside the expression ensures we
|
|
# emit a ptrauth static initializer on arm64e into the JITted
|
|
# expression. The thread-plan that runs for this static
|
|
# initializer should save/restore the current execution context
|
|
# frame (which in this test is frame #1).
|
|
result = frame.EvaluateExpression("int (*fptr)() = &func; fptr()")
|
|
self.assertTrue(result.GetError().Success())
|
|
self.assertEqual(result.GetValueAsSigned(), 5)
|