199451b44SJordan Rupprechtimport lldb 299451b44SJordan Rupprecht 399451b44SJordan Rupprecht 499451b44SJordan Rupprechtclass OperatingSystemPlugIn(object): 599451b44SJordan Rupprecht """Class that provides data for an instance of a LLDB 'OperatingSystemPython' plug-in class 699451b44SJordan Rupprecht This version stops once with threads 0x111 and 0x222, then stops a second time with threads 799451b44SJordan Rupprecht 0x111 and 0x333.""" 899451b44SJordan Rupprecht 999451b44SJordan Rupprecht def __init__(self, process): 10*2238dcc3SJonas Devlieghere """Initialization needs a valid.SBProcess object. 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht This plug-in will get created after a live process is valid and has stopped for the first time. 13*2238dcc3SJonas Devlieghere """ 1499451b44SJordan Rupprecht self.process = None 1599451b44SJordan Rupprecht self.registers = None 1699451b44SJordan Rupprecht self.threads = None 1799451b44SJordan Rupprecht self.times_called = 0 1899451b44SJordan Rupprecht if isinstance(process, lldb.SBProcess) and process.IsValid(): 1999451b44SJordan Rupprecht self.process = process 2099451b44SJordan Rupprecht self.threads = None # Will be an dictionary containing info for each thread 2199451b44SJordan Rupprecht 2299451b44SJordan Rupprecht def get_target(self): 2399451b44SJordan Rupprecht return self.process.target 2499451b44SJordan Rupprecht 2599451b44SJordan Rupprecht def get_thread_info(self): 2699451b44SJordan Rupprecht self.times_called += 1 2799451b44SJordan Rupprecht 2899451b44SJordan Rupprecht if self.times_called == 1: 29*2238dcc3SJonas Devlieghere self.threads = [ 30*2238dcc3SJonas Devlieghere { 31*2238dcc3SJonas Devlieghere "tid": 0x111, 32*2238dcc3SJonas Devlieghere "name": "one", 33*2238dcc3SJonas Devlieghere "queue": "queue1", 34*2238dcc3SJonas Devlieghere "state": "stopped", 35*2238dcc3SJonas Devlieghere "stop_reason": "none", 36*2238dcc3SJonas Devlieghere "core": 1, 37*2238dcc3SJonas Devlieghere }, 38*2238dcc3SJonas Devlieghere { 39*2238dcc3SJonas Devlieghere "tid": 0x222, 40*2238dcc3SJonas Devlieghere "name": "two", 41*2238dcc3SJonas Devlieghere "queue": "queue2", 42*2238dcc3SJonas Devlieghere "state": "stopped", 43*2238dcc3SJonas Devlieghere "stop_reason": "none", 44*2238dcc3SJonas Devlieghere "core": 0, 45*2238dcc3SJonas Devlieghere }, 46*2238dcc3SJonas Devlieghere ] 4799451b44SJordan Rupprecht else: 48*2238dcc3SJonas Devlieghere self.threads = [ 49*2238dcc3SJonas Devlieghere { 50*2238dcc3SJonas Devlieghere "tid": 0x111, 51*2238dcc3SJonas Devlieghere "name": "one", 52*2238dcc3SJonas Devlieghere "queue": "queue1", 53*2238dcc3SJonas Devlieghere "state": "stopped", 54*2238dcc3SJonas Devlieghere "stop_reason": "none", 55*2238dcc3SJonas Devlieghere "core": 1, 56*2238dcc3SJonas Devlieghere }, 57*2238dcc3SJonas Devlieghere { 58*2238dcc3SJonas Devlieghere "tid": 0x333, 59*2238dcc3SJonas Devlieghere "name": "three", 60*2238dcc3SJonas Devlieghere "queue": "queue3", 61*2238dcc3SJonas Devlieghere "state": "stopped", 62*2238dcc3SJonas Devlieghere "stop_reason": "none", 63*2238dcc3SJonas Devlieghere "core": 0, 64*2238dcc3SJonas Devlieghere }, 65*2238dcc3SJonas Devlieghere ] 6699451b44SJordan Rupprecht return self.threads 67