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 TestStopPCs(GDBRemoteTestBase):
9
10    mydir = TestBase.compute_mydir(__file__)
11
12    @skipIfXmlSupportMissing
13    def test(self):
14        class MyResponder(MockGDBServerResponder):
15            def haltReason(self):
16                return "T02thread:1ff0d;threads:1ff0d,2ff0d;thread-pcs:10001bc00,10002bc00;"
17
18            def threadStopInfo(self, threadnum):
19                if threadnum == 0x1ff0d:
20                    return "T02thread:1ff0d;threads:1ff0d,2ff0d;thread-pcs:10001bc00,10002bc00;"
21                if threadnum == 0x2ff0d:
22                    return "T00thread:2ff0d;threads:1ff0d,2ff0d;thread-pcs:10001bc00,10002bc00;"
23
24            def qXferRead(self, obj, annex, offset, length):
25                if annex == "target.xml":
26                    return """<?xml version="1.0"?>
27                        <target version="1.0">
28                          <architecture>i386:x86-64</architecture>
29                          <feature name="org.gnu.gdb.i386.core">
30                            <reg name="rip" bitsize="64" regnum="0" type="code_ptr" group="general"/>
31                          </feature>
32                        </target>""", False
33                else:
34                    return None, False
35
36        self.server.responder = MyResponder()
37        target = self.dbg.CreateTarget('')
38        if self.TraceOn():
39          self.runCmd("log enable gdb-remote packets")
40          self.addTearDownHook(
41                lambda: self.runCmd("log disable gdb-remote packets"))
42        process = self.connect(target)
43
44        self.assertEqual(process.GetNumThreads(), 2)
45        th0 = process.GetThreadAtIndex(0)
46        th1 = process.GetThreadAtIndex(1)
47        self.assertEqual(th0.GetThreadID(), 0x1ff0d)
48        self.assertEqual(th1.GetThreadID(), 0x2ff0d)
49        self.assertEqual(th0.GetFrameAtIndex(0).GetPC(), 0x10001bc00)
50        self.assertEqual(th1.GetFrameAtIndex(0).GetPC(), 0x10002bc00)
51