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