diff --git a/lldb/test/API/commands/register/register/TestRegistersUnavailable.py b/lldb/test/API/commands/register/register/TestRegistersUnavailable.py new file mode 100644 --- /dev/null +++ b/lldb/test/API/commands/register/register/TestRegistersUnavailable.py @@ -0,0 +1,57 @@ +""" 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): + # Only allow reads of rip. + if regnum in [0, 1, 2]: + return "E01" + return "5555555555555555" + + def qXferRead(self, obj, annex, offset, length): + if annex == "target.xml": + return """ + + i386:x86-64 + + + + + + + """, False + else: + return None, False + +class TestRegistersUnavailable(GDBRemoteTestBase): + @skipIfXmlSupportMissing + @skipIfRemote + 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]) + + self.expect("register read --all", substrs=[ + "general:\n" + " rip = 0x5555555555555555\n" + "2 registers were unavailable.\n" + "\n" + "other:\n" + "1 registers were unavailable."])