"""
Test that we can set up software breakpoint even if we failed to decode and execute instruction
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class TestBreakpointIllegal(TestBase):
@skipIf(archs=no_match(["rv64gc"]))
def test_4(self):
self.build()
(target, process, cur_thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "main", lldb.SBFileSpec("main.c")
)
self.runCmd("thread step-inst")
# we need to step more, as some compilers do not set appropriate debug info.
while cur_thread.GetStopDescription(256) == "instruction step into":
self.runCmd("thread step-inst")
# The stop reason of the thread should be illegal opcode.
self.expect(
"thread list",
STOPPED_DUE_TO_SIGNAL,
substrs=["stopped", "stop reason = signal SIGILL: illegal opcode"],
)
@skipIf(archs=no_match(["rv64gc"]))
def test_2(self):
self.build(dictionary={"C_SOURCES": "compressed.c", "EXE": "compressed.x"})
(target, process, cur_thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "main", lldb.SBFileSpec("compressed.c"), exe_name="compressed.x"
)
self.runCmd("thread step-inst")
# we need to step more, as some compilers do not set appropriate debug info.
while cur_thread.GetStopDescription(256) == "instruction step into":
self.runCmd("thread step-inst")
# The stop reason of the thread should be illegal opcode.
self.expect(
"thread list",
STOPPED_DUE_TO_SIGNAL,
substrs=["stopped", "stop reason = signal SIGILL: illegal opcode"],
)