199451b44SJordan Rupprechtimport lldb 299451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 399451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 433c0f93fSPavel Labathfrom lldbsuite.test.gdbclientutils import * 533c0f93fSPavel Labathfrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 699451b44SJordan Rupprecht 799451b44SJordan Rupprecht 82238dcc3SJonas Devlieghereclass TestNoWatchpointSupportInfo(GDBRemoteTestBase): 999451b44SJordan Rupprecht @skipIfXmlSupportMissing 1099451b44SJordan Rupprecht @skipIfRemote 1199451b44SJordan Rupprecht def test(self): 1299451b44SJordan Rupprecht """ 1399451b44SJordan Rupprecht Test lldb's parsing of the <architecture> tag in the target.xml register 1499451b44SJordan Rupprecht description packet. 1599451b44SJordan Rupprecht """ 1699451b44SJordan Rupprecht 172238dcc3SJonas Devlieghere class MyResponder(MockGDBServerResponder): 1899451b44SJordan Rupprecht def haltReason(self): 1999451b44SJordan Rupprecht return "T02thread:1ff0d;thread-pcs:10001bc00;" 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht def threadStopInfo(self, threadnum): 222238dcc3SJonas Devlieghere if threadnum == 0x1FF0D: 2399451b44SJordan Rupprecht return "T02thread:1ff0d;thread-pcs:10001bc00;" 2499451b44SJordan Rupprecht return "" 2599451b44SJordan Rupprecht 2699451b44SJordan Rupprecht def setBreakpoint(self, packet): 2799451b44SJordan Rupprecht if packet.startswith("Z2,"): 2899451b44SJordan Rupprecht return "OK" 2999451b44SJordan Rupprecht 3099451b44SJordan Rupprecht def qXferRead(self, obj, annex, offset, length): 3199451b44SJordan Rupprecht if annex == "target.xml": 322238dcc3SJonas Devlieghere return ( 332238dcc3SJonas Devlieghere """<?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> 392238dcc3SJonas Devlieghere </target>""", 402238dcc3SJonas Devlieghere False, 412238dcc3SJonas Devlieghere ) 4299451b44SJordan Rupprecht else: 4399451b44SJordan Rupprecht return None, False 4499451b44SJordan Rupprecht 4599451b44SJordan Rupprecht self.server.responder = MyResponder() 4699451b44SJordan Rupprecht if self.TraceOn(): 4799451b44SJordan Rupprecht self.runCmd("log enable gdb-remote packets") 482238dcc3SJonas Devlieghere self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets")) 4999451b44SJordan Rupprecht self.dbg.SetDefaultArchitecture("x86_64") 5099451b44SJordan Rupprecht target = self.dbg.CreateTargetWithFileAndArch(None, None) 5199451b44SJordan Rupprecht 5299451b44SJordan Rupprecht process = self.connect(target) 5399451b44SJordan Rupprecht 5499451b44SJordan Rupprecht if self.TraceOn(): 5599451b44SJordan Rupprecht interp = self.dbg.GetCommandInterpreter() 5699451b44SJordan Rupprecht result = lldb.SBCommandReturnObject() 5799451b44SJordan Rupprecht interp.HandleCommand("target list", result) 5899451b44SJordan Rupprecht print(result.GetOutput()) 5999451b44SJordan Rupprecht 6099451b44SJordan Rupprecht err = lldb.SBError() 6175e86207SDavid Spickett wp_opts = lldb.SBWatchpointOptions() 6275e86207SDavid Spickett wp_opts.SetWatchpointTypeWrite(lldb.eWatchpointWriteTypeOnModify) 6375e86207SDavid Spickett wp = target.WatchpointCreateByAddress(0x100, 8, wp_opts, err) 64*fd35a923SEisuke Kawashima if self.TraceOn() and (err.Fail() or not wp.IsValid): 6599451b44SJordan Rupprecht strm = lldb.SBStream() 6699451b44SJordan Rupprecht err.GetDescription(strm) 6799451b44SJordan Rupprecht print("watchpoint failed: %s" % strm.GetData()) 6899451b44SJordan Rupprecht self.assertTrue(wp.IsValid()) 69