summaryrefslogtreecommitdiffstats
path: root/tools/gdb/python/chains.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gdb/python/chains.py')
-rw-r--r--tools/gdb/python/chains.py35
1 files changed, 28 insertions, 7 deletions
diff --git a/tools/gdb/python/chains.py b/tools/gdb/python/chains.py
index 6ae2518..58a354a 100644
--- a/tools/gdb/python/chains.py
+++ b/tools/gdb/python/chains.py
@@ -37,7 +37,18 @@ class node:
"""Manage the Chain_Node."""
def __init__(self, node_val):
- self.node_val = node_val
+ if node_val:
+ if node_val.type.code == gdb.TYPE_CODE_PTR:
+ self.reference = node_val
+ self.node_val = node_val.dereference()
+ else:
+ self.node_val = node_val
+ self.reference = node_val.address
+ else:
+ self.node_val = node_val
+
+ def __str__(self):
+ return self.to_string()
def null(self):
if not self.node_val:
@@ -46,11 +57,11 @@ class node:
def next(self):
if not self.null():
- self.node_val = self.node_val['next']
+ return self.node_val['next']
def previous(self):
if not self.null():
- self.node_val = self.node_val['previous']
+ return self.node_val['previous']
def cast(self, typename):
if not self.null():
@@ -59,21 +70,31 @@ class node:
return None
def to_string(self):
- return self.node_val['next'] + "Prev: "+self.node_val['previous']
+ if self.null():
+ return 'NULL'
+ return 'Node:%s Next:%s Prev:%s' % (self.reference,
+ self.node_val['next'],
+ self.node_val['previous'])
class control:
"""Manage the Chain_Control."""
def __init__(self, ctrl):
- self.ctrl = ctrl
+ if ctrl.type.code == gdb.TYPE_CODE_PTR:
+ self.reference = ctrl
+ self.ctrl = ctrl.dereference()
+ else:
+ self.ctrl = ctrl
+ self.reference = ctrl.address
def first(self):
t = node(self.ctrl['Head']['Node'])
return t
- def last(self):
+ def tail(self):
return node(self.ctrl['Tail']['Node'])
def empty(self):
- if self.last() == self.first().next():
+ if self.tail().previous() == self.reference:
return True
+ return False