from __future__ import print_function import lldb from lldbsuite.test.lldbtest import * from lldbsuite.test.decorators import * from gdbclientutils import * class TestGDBServerTargetXML(GDBRemoteTestBase): @skipIfXmlSupportMissing @skipIfRemote @skipIfLLVMTargetMissing("X86") def test_x86_64_regs(self): """Test grabbing various x86_64 registers from gdbserver.""" reg_data = [ "0102030405060708", # rcx "1112131415161718", # rdx "2122232425262728", # rsi "3132333435363738", # rdi "4142434445464748", # rbp "5152535455565758", # rsp "6162636465666768", # r8 "7172737475767778", # r9 "8182838485868788", # rip "91929394", # eflags "0102030405060708090a", # st0 "1112131415161718191a", # st1 ] + 6 * [ "2122232425262728292a" # st2..st7 ] + [ "8182838485868788898a8b8c8d8e8f90", # xmm0 "9192939495969798999a9b9c9d9e9fa0", # xmm1 ] + 14 * [ "a1a2a3a4a5a6a7a8a9aaabacadaeafb0", # xmm2..xmm15 ] + [ "00000000", # mxcsr ] + [ "b1b2b3b4b5b6b7b8b9babbbcbdbebfc0", # ymm0h "c1c2c3c4c5c6c7c8c9cacbcccdcecfd0", # ymm1h ] + 14 * [ "d1d2d3d4d5d6d7d8d9dadbdcdddedfe0", # ymm2h..ymm15h ] class MyResponder(MockGDBServerResponder): def qXferRead(self, obj, annex, offset, length): if annex == "target.xml": return """ i386:x86-64 GNU/Linux """, False else: return None, False def readRegister(self, regnum): return "" def readRegisters(self): return "".join(reg_data) def writeRegisters(self, reg_hex): return "OK" def haltReason(self): return "T02thread:1ff0d;threads:1ff0d;thread-pcs:000000010001bc00;07:0102030405060708;10:1112131415161718;" self.server.responder = MyResponder() target = self.createTarget("basic_eh_frame.yaml") process = self.connect(target) lldbutil.expect_state_changes(self, self.dbg.GetListener(), process, [lldb.eStateStopped]) # test generic aliases self.match("register read arg4", ["rcx = 0x0807060504030201"]) self.match("register read arg3", ["rdx = 0x1817161514131211"]) self.match("register read arg2", ["rsi = 0x2827262524232221"]) self.match("register read arg1", ["rdi = 0x3837363534333231"]) self.match("register read fp", ["rbp = 0x4847464544434241"]) self.match("register read sp", ["rsp = 0x5857565554535251"]) self.match("register read arg5", ["r8 = 0x6867666564636261"]) self.match("register read arg6", ["r9 = 0x7877767574737271"]) self.match("register read pc", ["rip = 0x8887868584838281"]) self.match("register read flags", ["eflags = 0x94939291"])