llvm-project/lldb/test/API/commands/register/TestRegistersUnavailable.py
David Spickett c329cc59d9
[lldb][test][NFC] Move register command tests (#190144)
For whatever reason we ended up with register/register but the first
register just had the second register folder in it.

Move the files up one level so we have register/<test files>.
2026-04-02 11:13:44 +01:00

61 lines
1.9 KiB
Python

""" 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."
],
)