diff options
author | Dhananjay Balan <mb.dhananjay@gmail.com> | 2013-06-24 09:40:59 +0530 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2014-08-25 09:52:40 +1000 |
commit | 10bcd5d4dc77a9296d458855c9385fdd82c97ac0 (patch) | |
tree | 4d4a8bcd0d3780a2bbf3d62aeee3560a136eca67 | |
parent | Intial commit. (diff) | |
download | rtems-tools-10bcd5d4dc77a9296d458855c9385fdd82c97ac0.tar.bz2 |
Update chains structures
- Fixes chains structure parsing
- Fix Semaphore node parsing
-rw-r--r-- | tools/gdb/python/chains.py | 12 | ||||
-rw-r--r-- | tools/gdb/python/objects.py | 7 | ||||
-rw-r--r-- | tools/gdb/python/threads.py | 16 |
3 files changed, 21 insertions, 14 deletions
diff --git a/tools/gdb/python/chains.py b/tools/gdb/python/chains.py index 961ca2d..d691822 100644 --- a/tools/gdb/python/chains.py +++ b/tools/gdb/python/chains.py @@ -14,15 +14,17 @@ class node: self.node_val = node_val def null(self): - return self.node_val['next'] == 0 + if not self.node_val: + return True + return False def next(self): if not self.null(): - self.node_val = self.node_val['next'].dereference() + self.node_val = self.node_val['next'] def previous(self): if not self.null(): - self.node_val = self.node_val['previous'].dereference() + self.node_val = self.node_val['previous'] def cast(self, typename): if not self.null(): @@ -30,6 +32,7 @@ class node: return self.node_val.cast(nodetype) return None + class control: """Manage the Chain_Control.""" @@ -37,7 +40,8 @@ class control: self.ctrl = ctrl def first(self): - return node(self.ctrl['first'].dereference()) + t = node(self.ctrl['Head']['Node']) + return t def last(self): return node(self.ctrl['first']) diff --git a/tools/gdb/python/objects.py b/tools/gdb/python/objects.py index 22d2b2c..16ceac1 100644 --- a/tools/gdb/python/objects.py +++ b/tools/gdb/python/objects.py @@ -62,6 +62,9 @@ class infotables: api = id.api() _class = id._class() index = id.index() + return self.object_return(api, _class, index) + + def object_return(self, api, _class, index): n = self.name(api, _class) self.load(n) max = self.maximum(api, _class) @@ -96,7 +99,7 @@ class ident: { 'index': (0, 15), 'node': (16, 23), 'api': (24, 26), - 'class': (27, 31) } + 'class': (27, 31) } ] OBJECT_16_BITS = 0 @@ -147,7 +150,7 @@ class ident: 'variable_memory_pools', 'fixed_memory_pools') } - + def __init__(self, id): if type(id) != gdb.Value and type(id) != int and type(id) != unicode: raise TypeError('%s: must be gdb.Value, int, unicoded int' % (type(id))) diff --git a/tools/gdb/python/threads.py b/tools/gdb/python/threads.py index 906cf5a..3debbe7 100644 --- a/tools/gdb/python/threads.py +++ b/tools/gdb/python/threads.py @@ -14,7 +14,6 @@ def task_chain(chain): tasks = [] node = chain.first() while not node.null(): - print node.addr tasks.append(control(node.cast('Thread_Control'))) node.next() return tasks @@ -62,7 +61,7 @@ class state: WAITING_FOR_EVENT | \ WAITING_ON_THREAD_QUEUE | \ INTERRUPTIBLE_BY_SIGNAL - + masks = { ALL_SET : 'all-set', READY : 'ready', @@ -85,7 +84,7 @@ class state: WAITING_FOR_BARRIER : 'waiting-for-barrier', WAITING_FOR_RWLOCK : 'waiting-for-rwlock' } - + def __init__(self, s): self.s = s @@ -121,16 +120,16 @@ class wait_info: def block2n(self): return task_chain(chains.control(self.info['Block2n'])) - + def queue(self): return task_chain(chains.control(self.info['queue'])) class control: - + def __init__(self, ctrl): self.ctrl = ctrl self.object = objects.control(ctrl['Object']) - + def id(self): return self.object.id() @@ -181,14 +180,15 @@ class queue: def state(self): return state(self.que['state']).to_string() - + def tasks(self): if self.fifo(): t = task_chain(chains.control(self.que['Queues']['Fifo'])) else: t = [] for ph in range(0, self.priority_headers): - t.extend(task_chain(chains.control(self.que['Queues']['Fifo']))) + t.extend(task_chain(chains.control( \ + self.que['Queues']['Priority'][ph]))) return t def to_string(self): |