blob: abd3aeace8969538c4c3edb990f9dc2907278bb0 [file]
""" Check that unavailable registers are reported when reading register sets."""
from textwrap import dedent
import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
from lldbsuite.test.gdbclientutils import *
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
class MyResponder(MockGDBServerResponder):
def readRegisters(self):
return "E01"
def readRegister(self, regnum):
if regnum in [0, 1, 2]:
return "E01"
return "5555555555555555"
def qHostInfo(self):
# The triple is hex encoded ASCII "x86_64-linux-gnu".
return "triple:7838365F36342D6C696E75782D676E75;"
class TestRegistersUnavailable(GDBRemoteTestBase):
@skipIfRemote
# So that we have multiple register sets.
@skipIfLLVMTargetMissing("X86")
def test_unavailable_registers(self):
self.server.responder = MyResponder()
target = self.dbg.CreateTarget("")
if self.TraceOn():
self.runCmd("log enable gdb-remote packets process")
self.addTearDownHook(
lambda: self.runCmd("log disable gdb-remote packets process")
)
process = self.connect(target)
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), process, [lldb.eStateStopped]
)
# We are using a long regex pattern here to check that the indentation
# is correct when you have multiple register sets and they all have
# some missing registers.
self.expect(
"register read --all",
patterns=[
"(?sm)^general purpose registers:\n"
"^\s+rdx = 0x5555555555555555\n"
".*"
"^3 registers were unavailable.\n"
"\n"
"^supplementary registers:\n"
"^\s+edx = 0x55555555\n"
".*"
"^12 registers were unavailable."
],
)