DavidSpickett created this revision. Herald added a project: All. DavidSpickett requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
Prior to this the only check was that we did not print this message when reading registers that should exist. I thought there was an indentation bug here so I wrote a test for it. There is not, but we could do with the coverage anyway. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D145940 Files: lldb/test/API/commands/register/register/TestRegistersUnavailable.py Index: lldb/test/API/commands/register/register/TestRegistersUnavailable.py =================================================================== --- /dev/null +++ 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 """<?xml version="1.0"?> + <target version="1.0"> + <architecture>i386:x86-64</architecture> + <feature name="org.gnu.gdb.i386.core"> + <reg name="rax" bitsize="64" regnum="0" group="general"/> + <reg name="rbx" bitsize="64" regnum="1" group="general"/> + <reg name="rsi" bitsize="64" regnum="2" group="other"/> + <reg name="rip" bitsize="64" regnum="3" group="general" generic="pc"/> + </feature> + </target>""", 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."])
Index: lldb/test/API/commands/register/register/TestRegistersUnavailable.py =================================================================== --- /dev/null +++ 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 """<?xml version="1.0"?> + <target version="1.0"> + <architecture>i386:x86-64</architecture> + <feature name="org.gnu.gdb.i386.core"> + <reg name="rax" bitsize="64" regnum="0" group="general"/> + <reg name="rbx" bitsize="64" regnum="1" group="general"/> + <reg name="rsi" bitsize="64" regnum="2" group="other"/> + <reg name="rip" bitsize="64" regnum="3" group="general" generic="pc"/> + </feature> + </target>""", 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."])
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits