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