summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhananjay Balan <mb.dhananjay@gmail.com>2013-06-24 09:40:59 +0530
committerChris Johns <chrisj@rtems.org>2014-08-25 09:52:40 +1000
commit10bcd5d4dc77a9296d458855c9385fdd82c97ac0 (patch)
tree4d4a8bcd0d3780a2bbf3d62aeee3560a136eca67
parentIntial commit. (diff)
downloadrtems-tools-10bcd5d4dc77a9296d458855c9385fdd82c97ac0.tar.bz2
Update chains structures
- Fixes chains structure parsing - Fix Semaphore node parsing
-rw-r--r--tools/gdb/python/chains.py12
-rw-r--r--tools/gdb/python/objects.py7
-rw-r--r--tools/gdb/python/threads.py16
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):