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