199451b44SJordan Rupprechtimport lldb
299451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
399451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
4*33c0f93fSPavel Labathfrom lldbsuite.test.gdbclientutils import *
5*33c0f93fSPavel Labathfrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
699451b44SJordan Rupprecht
799451b44SJordan Rupprecht
899451b44SJordan Rupprechtclass TestStopPCs(GDBRemoteTestBase):
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht    @skipIfXmlSupportMissing
1199451b44SJordan Rupprecht    def test(self):
1299451b44SJordan Rupprecht        class MyResponder(MockGDBServerResponder):
1399451b44SJordan Rupprecht            def haltReason(self):
1499451b44SJordan Rupprecht                return "T02thread:1ff0d;threads:1ff0d,2ff0d;thread-pcs:10001bc00,10002bc00;"
1599451b44SJordan Rupprecht
1699451b44SJordan Rupprecht            def threadStopInfo(self, threadnum):
1799451b44SJordan Rupprecht                if threadnum == 0x1ff0d:
1899451b44SJordan Rupprecht                    return "T02thread:1ff0d;threads:1ff0d,2ff0d;thread-pcs:10001bc00,10002bc00;"
1999451b44SJordan Rupprecht                if threadnum == 0x2ff0d:
2099451b44SJordan Rupprecht                    return "T00thread:2ff0d;threads:1ff0d,2ff0d;thread-pcs:10001bc00,10002bc00;"
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht            def qXferRead(self, obj, annex, offset, length):
2399451b44SJordan Rupprecht                if annex == "target.xml":
2499451b44SJordan Rupprecht                    return """<?xml version="1.0"?>
2599451b44SJordan Rupprecht                        <target version="1.0">
2699451b44SJordan Rupprecht                          <architecture>i386:x86-64</architecture>
2799451b44SJordan Rupprecht                          <feature name="org.gnu.gdb.i386.core">
2899451b44SJordan Rupprecht                            <reg name="rip" bitsize="64" regnum="0" type="code_ptr" group="general"/>
2999451b44SJordan Rupprecht                          </feature>
3099451b44SJordan Rupprecht                        </target>""", False
3199451b44SJordan Rupprecht                else:
3299451b44SJordan Rupprecht                    return None, False
3399451b44SJordan Rupprecht
3499451b44SJordan Rupprecht        self.server.responder = MyResponder()
3599451b44SJordan Rupprecht        target = self.dbg.CreateTarget('')
3699451b44SJordan Rupprecht        if self.TraceOn():
3799451b44SJordan Rupprecht          self.runCmd("log enable gdb-remote packets")
3899451b44SJordan Rupprecht          self.addTearDownHook(
3999451b44SJordan Rupprecht                lambda: self.runCmd("log disable gdb-remote packets"))
4099451b44SJordan Rupprecht        process = self.connect(target)
4199451b44SJordan Rupprecht
4299451b44SJordan Rupprecht        self.assertEqual(process.GetNumThreads(), 2)
4399451b44SJordan Rupprecht        th0 = process.GetThreadAtIndex(0)
4499451b44SJordan Rupprecht        th1 = process.GetThreadAtIndex(1)
4599451b44SJordan Rupprecht        self.assertEqual(th0.GetThreadID(), 0x1ff0d)
4699451b44SJordan Rupprecht        self.assertEqual(th1.GetThreadID(), 0x2ff0d)
4799451b44SJordan Rupprecht        self.assertEqual(th0.GetFrameAtIndex(0).GetPC(), 0x10001bc00)
4899451b44SJordan Rupprecht        self.assertEqual(th1.GetFrameAtIndex(0).GetPC(), 0x10002bc00)
49