1*99451b44SJordan Rupprechtimport lldb
2*99451b44SJordan Rupprecht
3*99451b44SJordan Rupprecht
4*99451b44SJordan Rupprechtclass OperatingSystemPlugIn(object):
5*99451b44SJordan Rupprecht    """Class that provides data for an instance of a LLDB 'OperatingSystemPython' plug-in class"""
6*99451b44SJordan Rupprecht
7*99451b44SJordan Rupprecht    def __init__(self, process):
8*99451b44SJordan Rupprecht        '''Initialization needs a valid.SBProcess object.
9*99451b44SJordan Rupprecht
10*99451b44SJordan Rupprecht        This plug-in will get created after a live process is valid and has stopped for the first time.
11*99451b44SJordan Rupprecht        '''
12*99451b44SJordan Rupprecht        self.process = None
13*99451b44SJordan Rupprecht        self.registers = None
14*99451b44SJordan Rupprecht        self.threads = None
15*99451b44SJordan Rupprecht        if isinstance(process, lldb.SBProcess) and process.IsValid():
16*99451b44SJordan Rupprecht            self.process = process
17*99451b44SJordan Rupprecht            self.threads = None  # Will be an dictionary containing info for each thread
18*99451b44SJordan Rupprecht
19*99451b44SJordan Rupprecht    def get_target(self):
20*99451b44SJordan Rupprecht        return self.process.target
21*99451b44SJordan Rupprecht
22*99451b44SJordan Rupprecht    def get_thread_info(self):
23*99451b44SJordan Rupprecht        if not self.threads:
24*99451b44SJordan Rupprecht            self.threads = [{
25*99451b44SJordan Rupprecht                'tid': 0x1,
26*99451b44SJordan Rupprecht                'name': 'one',
27*99451b44SJordan Rupprecht                'queue': 'queue1',
28*99451b44SJordan Rupprecht                'state': 'stopped',
29*99451b44SJordan Rupprecht                'stop_reason': 'none'
30*99451b44SJordan Rupprecht            }, {
31*99451b44SJordan Rupprecht                'tid': 0x2,
32*99451b44SJordan Rupprecht                'name': 'two',
33*99451b44SJordan Rupprecht                'queue': 'queue2',
34*99451b44SJordan Rupprecht                'state': 'stopped',
35*99451b44SJordan Rupprecht                'stop_reason': 'none'
36*99451b44SJordan Rupprecht            }, {
37*99451b44SJordan Rupprecht                'tid': 0x3,
38*99451b44SJordan Rupprecht                'name': 'three',
39*99451b44SJordan Rupprecht                'queue': 'queue3',
40*99451b44SJordan Rupprecht                'state': 'stopped',
41*99451b44SJordan Rupprecht                'stop_reason': 'sigstop',
42*99451b44SJordan Rupprecht                'core': 0
43*99451b44SJordan Rupprecht            }]
44*99451b44SJordan Rupprecht        return self.threads
45