import lldb from lldbsuite.test.lldbtest import * from lldbsuite.test.decorators import * from lldbsuite.test.gdbclientutils import * from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase class TestArmRegisterDefinition(GDBRemoteTestBase): @skipIfXmlSupportMissing @skipIfRemote def test(self): """ Test lldb's parsing of the tag in the target.xml register description packet. """ class MyResponder(MockGDBServerResponder): def qXferRead(self, obj, annex, offset, length): if annex == "target.xml": return ( """ arm """, False, ) else: return None, False def readRegister(self, regnum): return "E01" def readRegisters(self): return "20000000f8360020001000002fcb0008f8360020a0360020200c0020000000000000000000000000000000000000000000000000b87f0120b7d100082ed20008addebeafbc00000001b87f01200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" def haltReason(self): return "S05" def qfThreadInfo(self): return "mdead" def qC(self): return "" def qSupported(self, client_supported): return "PacketSize=4000;qXfer:memory-map:read-;QStartNoAckMode+;qXfer:threads:read+;hwbreak+;qXfer:features:read+" def QThreadSuffixSupported(self): return "OK" def QListThreadsInStopReply(self): return "OK" self.server.responder = MyResponder() if self.TraceOn(): self.runCmd("log enable gdb-remote packets") self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets")) self.dbg.SetDefaultArchitecture("armv7em") target = self.dbg.CreateTargetWithFileAndArch(None, None) process = self.connect(target) if self.TraceOn(): interp = self.dbg.GetCommandInterpreter() result = lldb.SBCommandReturnObject() interp.HandleCommand("target list", result) print(result.GetOutput()) r0_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("r0") self.assertEqual(r0_valobj.GetValueAsUnsigned(), 0x20) pc_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("pc") self.assertEqual(pc_valobj.GetValueAsUnsigned(), 0x0800D22E) sys_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("SYS0") self.assertEqual(sys_valobj.GetValueAsUnsigned(), 0xDEAD) sys_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("SYS1") self.assertEqual(sys_valobj.GetValueAsUnsigned(), 0xBE) sys_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("SYS2") self.assertEqual(sys_valobj.GetValueAsUnsigned(), 0xAF) sys_valobj = process.GetThreadAtIndex(0).GetFrameAtIndex(0).FindRegister("SYS3") self.assertEqual(sys_valobj.GetValueAsUnsigned(), 0xBC)