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       This version stops once with threads 0x111 and 0x222, then stops a second time with threads
7*99451b44SJordan Rupprecht       0x111 and 0x333."""
8*99451b44SJordan Rupprecht
9*99451b44SJordan Rupprecht    def __init__(self, process):
10*99451b44SJordan Rupprecht        '''Initialization needs a valid.SBProcess object.
11*99451b44SJordan Rupprecht
12*99451b44SJordan Rupprecht        This plug-in will get created after a live process is valid and has stopped for the first time.
13*99451b44SJordan Rupprecht        '''
14*99451b44SJordan Rupprecht        self.process = None
15*99451b44SJordan Rupprecht        self.registers = None
16*99451b44SJordan Rupprecht        self.threads = None
17*99451b44SJordan Rupprecht        self.times_called = 0
18*99451b44SJordan Rupprecht        if isinstance(process, lldb.SBProcess) and process.IsValid():
19*99451b44SJordan Rupprecht            self.process = process
20*99451b44SJordan Rupprecht            self.threads = None  # Will be an dictionary containing info for each thread
21*99451b44SJordan Rupprecht
22*99451b44SJordan Rupprecht    def get_target(self):
23*99451b44SJordan Rupprecht        return self.process.target
24*99451b44SJordan Rupprecht
25*99451b44SJordan Rupprecht    def get_thread_info(self):
26*99451b44SJordan Rupprecht        self.times_called += 1
27*99451b44SJordan Rupprecht
28*99451b44SJordan Rupprecht        if self.times_called == 1:
29*99451b44SJordan Rupprecht            self.threads = [{
30*99451b44SJordan Rupprecht                'tid': 0x111,
31*99451b44SJordan Rupprecht                'name': 'one',
32*99451b44SJordan Rupprecht                'queue': 'queue1',
33*99451b44SJordan Rupprecht                'state': 'stopped',
34*99451b44SJordan Rupprecht                'stop_reason': 'none',
35*99451b44SJordan Rupprecht                'core': 1
36*99451b44SJordan Rupprecht            }, {
37*99451b44SJordan Rupprecht                'tid': 0x222,
38*99451b44SJordan Rupprecht                'name': 'two',
39*99451b44SJordan Rupprecht                'queue': 'queue2',
40*99451b44SJordan Rupprecht                'state': 'stopped',
41*99451b44SJordan Rupprecht                'stop_reason': 'none',
42*99451b44SJordan Rupprecht                'core': 0
43*99451b44SJordan Rupprecht            }]
44*99451b44SJordan Rupprecht        else:
45*99451b44SJordan Rupprecht            self.threads = [{
46*99451b44SJordan Rupprecht                'tid': 0x111,
47*99451b44SJordan Rupprecht                'name': 'one',
48*99451b44SJordan Rupprecht                'queue': 'queue1',
49*99451b44SJordan Rupprecht                'state': 'stopped',
50*99451b44SJordan Rupprecht                'stop_reason': 'none',
51*99451b44SJordan Rupprecht                'core': 1
52*99451b44SJordan Rupprecht            }, {
53*99451b44SJordan Rupprecht                'tid': 0x333,
54*99451b44SJordan Rupprecht                'name': 'three',
55*99451b44SJordan Rupprecht                'queue': 'queue3',
56*99451b44SJordan Rupprecht                'state': 'stopped',
57*99451b44SJordan Rupprecht                'stop_reason': 'none',
58*99451b44SJordan Rupprecht                'core': 0
59*99451b44SJordan Rupprecht            }]
60*99451b44SJordan Rupprecht        return self.threads
61*99451b44SJordan Rupprecht
62