Fix wrong assembly line number calculation that assumes the instruction size is `GetAddressByteSize() / 2` Fixes #136495
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
"""
|
|
Test lldb-dap stack trace containing x86 assembly
|
|
"""
|
|
|
|
import lldbdap_testcase
|
|
from lldbsuite.test import lldbplatformutil
|
|
from lldbsuite.test.decorators import skipUnlessArch, skipUnlessPlatform
|
|
from lldbsuite.test.lldbtest import line_number
|
|
|
|
|
|
class TestDAP_stacktrace_x86(lldbdap_testcase.DAPTestCaseBase):
|
|
@skipUnlessArch("x86_64")
|
|
@skipUnlessPlatform(["linux"] + lldbplatformutil.getDarwinOSTriples())
|
|
def test_stacktrace_x86(self):
|
|
"""
|
|
Tests that lldb-dap steps through correctly and the source lines are correct in x86 assembly.
|
|
"""
|
|
program = self.getBuildArtifact("a.out")
|
|
self.build_and_launch(
|
|
program,
|
|
initCommands=[
|
|
"settings set target.process.thread.step-in-avoid-nodebug false"
|
|
],
|
|
)
|
|
|
|
source = "main.c"
|
|
breakpoint_ids = self.set_source_breakpoints(
|
|
source,
|
|
[line_number(source, "// Break here")],
|
|
)
|
|
self.continue_to_breakpoints(breakpoint_ids)
|
|
self.stepIn()
|
|
|
|
frame = self.get_stackFrames()[0]
|
|
self.assertEqual(
|
|
frame["name"],
|
|
"no_branch_func",
|
|
"verify we are in the no_branch_func function",
|
|
)
|
|
|
|
self.assertEqual(frame["line"], 1, "verify we are at the start of the function")
|
|
minimum_assembly_lines = (
|
|
line_number(source, "Assembly end")
|
|
- line_number(source, "Assembly start")
|
|
+ 1
|
|
)
|
|
self.assertLessEqual(
|
|
10,
|
|
minimum_assembly_lines,
|
|
"verify we have a reasonable number of assembly lines",
|
|
)
|
|
|
|
for i in range(2, minimum_assembly_lines):
|
|
self.stepIn()
|
|
frame = self.get_stackFrames()[0]
|
|
self.assertEqual(
|
|
frame["name"],
|
|
"no_branch_func",
|
|
"verify we are still in the no_branch_func function",
|
|
)
|
|
self.assertEqual(
|
|
frame["line"],
|
|
i,
|
|
f"step in should advance a single line in the function to {i}",
|
|
)
|