1import lldb 2from lldbsuite.test.lldbtest import * 3from lldbsuite.test.decorators import * 4from lldbsuite.test.gdbclientutils import * 5from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 6 7 8class TestNoWatchpointSupportInfo(GDBRemoteTestBase): 9 @skipIfXmlSupportMissing 10 @skipIfRemote 11 def test(self): 12 """ 13 Test lldb's parsing of the <architecture> tag in the target.xml register 14 description packet. 15 """ 16 17 class MyResponder(MockGDBServerResponder): 18 def haltReason(self): 19 return "T02thread:1ff0d;thread-pcs:10001bc00;" 20 21 def threadStopInfo(self, threadnum): 22 if threadnum == 0x1FF0D: 23 return "T02thread:1ff0d;thread-pcs:10001bc00;" 24 return "" 25 26 def setBreakpoint(self, packet): 27 if packet.startswith("Z2,"): 28 return "OK" 29 30 def qXferRead(self, obj, annex, offset, length): 31 if annex == "target.xml": 32 return ( 33 """<?xml version="1.0"?> 34 <target version="1.0"> 35 <architecture>i386:x86-64</architecture> 36 <feature name="org.gnu.gdb.i386.core"> 37 <reg name="rip" bitsize="64" regnum="0" type="code_ptr" group="general"/> 38 </feature> 39 </target>""", 40 False, 41 ) 42 else: 43 return None, False 44 45 self.server.responder = MyResponder() 46 if self.TraceOn(): 47 self.runCmd("log enable gdb-remote packets") 48 self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets")) 49 self.dbg.SetDefaultArchitecture("x86_64") 50 target = self.dbg.CreateTargetWithFileAndArch(None, None) 51 52 process = self.connect(target) 53 54 if self.TraceOn(): 55 interp = self.dbg.GetCommandInterpreter() 56 result = lldb.SBCommandReturnObject() 57 interp.HandleCommand("target list", result) 58 print(result.GetOutput()) 59 60 err = lldb.SBError() 61 wp_opts = lldb.SBWatchpointOptions() 62 wp_opts.SetWatchpointTypeWrite(lldb.eWatchpointWriteTypeOnModify) 63 wp = target.WatchpointCreateByAddress(0x100, 8, wp_opts, err) 64 if self.TraceOn() and (err.Fail() or not wp.IsValid): 65 strm = lldb.SBStream() 66 err.GetDescription(strm) 67 print("watchpoint failed: %s" % strm.GetData()) 68 self.assertTrue(wp.IsValid()) 69