[rtems-tools commit] Update chains structures

Chris Johns chrisj at rtems.org
Sun Aug 24 23:45:33 UTC 2014


Module:    rtems-tools
Branch:    master
Commit:    10bcd5d4dc77a9296d458855c9385fdd82c97ac0
Changeset: http://git.rtems.org/rtems-tools/commit/?id=10bcd5d4dc77a9296d458855c9385fdd82c97ac0

Author:    Dhananjay Balan <mb.dhananjay at gmail.com>
Date:      Mon Jun 24 09:58:59 2013 +0530

Update chains structures
- Fixes chains structure parsing
- Fix Semaphore node parsing

---

 tools/gdb/python/chains.py  |   12 ++++++++----
 tools/gdb/python/objects.py |    7 +++++--
 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):



More information about the vc mailing list