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