199451b44SJordan Rupprechtfrom __future__ import print_function 299451b44SJordan Rupprechtimport lldb 399451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 499451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 5*33c0f93fSPavel Labathfrom lldbsuite.test.gdbclientutils import * 6*33c0f93fSPavel Labathfrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 799451b44SJordan Rupprecht 899451b44SJordan Rupprechtclass TestNoWatchpointSupportInfo(GDBRemoteTestBase): 999451b44SJordan Rupprecht 1099451b44SJordan Rupprecht @skipIfXmlSupportMissing 1199451b44SJordan Rupprecht @skipIfRemote 1299451b44SJordan Rupprecht def test(self): 1399451b44SJordan Rupprecht """ 1499451b44SJordan Rupprecht Test lldb's parsing of the <architecture> tag in the target.xml register 1599451b44SJordan Rupprecht description packet. 1699451b44SJordan Rupprecht """ 1799451b44SJordan Rupprecht class MyResponder(MockGDBServerResponder): 1899451b44SJordan Rupprecht 1999451b44SJordan Rupprecht def haltReason(self): 2099451b44SJordan Rupprecht return "T02thread:1ff0d;thread-pcs:10001bc00;" 2199451b44SJordan Rupprecht 2299451b44SJordan Rupprecht def threadStopInfo(self, threadnum): 2399451b44SJordan Rupprecht if threadnum == 0x1ff0d: 2499451b44SJordan Rupprecht return "T02thread:1ff0d;thread-pcs:10001bc00;" 2599451b44SJordan Rupprecht return "" 2699451b44SJordan Rupprecht 2799451b44SJordan Rupprecht def setBreakpoint(self, packet): 2899451b44SJordan Rupprecht if packet.startswith("Z2,"): 2999451b44SJordan Rupprecht return "OK" 3099451b44SJordan Rupprecht 3199451b44SJordan Rupprecht def qXferRead(self, obj, annex, offset, length): 3299451b44SJordan Rupprecht if annex == "target.xml": 3399451b44SJordan Rupprecht return """<?xml version="1.0"?> 3499451b44SJordan Rupprecht <target version="1.0"> 3599451b44SJordan Rupprecht <architecture>i386:x86-64</architecture> 3699451b44SJordan Rupprecht <feature name="org.gnu.gdb.i386.core"> 3799451b44SJordan Rupprecht <reg name="rip" bitsize="64" regnum="0" type="code_ptr" group="general"/> 3899451b44SJordan Rupprecht </feature> 3999451b44SJordan Rupprecht </target>""", False 4099451b44SJordan Rupprecht else: 4199451b44SJordan Rupprecht return None, False 4299451b44SJordan Rupprecht 4399451b44SJordan Rupprecht self.server.responder = MyResponder() 4499451b44SJordan Rupprecht if self.TraceOn(): 4599451b44SJordan Rupprecht self.runCmd("log enable gdb-remote packets") 4699451b44SJordan Rupprecht self.addTearDownHook( 4799451b44SJordan Rupprecht lambda: self.runCmd("log disable gdb-remote packets")) 4899451b44SJordan Rupprecht self.dbg.SetDefaultArchitecture("x86_64") 4999451b44SJordan Rupprecht target = self.dbg.CreateTargetWithFileAndArch(None, None) 5099451b44SJordan Rupprecht 5199451b44SJordan Rupprecht process = self.connect(target) 5299451b44SJordan Rupprecht 5399451b44SJordan Rupprecht if self.TraceOn(): 5499451b44SJordan Rupprecht interp = self.dbg.GetCommandInterpreter() 5599451b44SJordan Rupprecht result = lldb.SBCommandReturnObject() 5699451b44SJordan Rupprecht interp.HandleCommand("target list", result) 5799451b44SJordan Rupprecht print(result.GetOutput()) 5899451b44SJordan Rupprecht 5999451b44SJordan Rupprecht 6099451b44SJordan Rupprecht err = lldb.SBError() 6199451b44SJordan Rupprecht wp = target.WatchAddress(0x100, 8, False, True, err) 6299451b44SJordan Rupprecht if self.TraceOn() and (err.Fail() or wp.IsValid == False): 6399451b44SJordan Rupprecht strm = lldb.SBStream() 6499451b44SJordan Rupprecht err.GetDescription(strm) 6599451b44SJordan Rupprecht print("watchpoint failed: %s" % strm.GetData()) 6699451b44SJordan Rupprecht self.assertTrue(wp.IsValid()) 6799451b44SJordan Rupprecht 68