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