summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhananjay Balan <mb.dhananjay@gmail.com>2013-07-12 19:07:46 +0530
committerChris Johns <chrisj@rtems.org>2014-08-25 09:52:40 +1000
commita785e254f2360e946baa14a11fbd3f403047b880 (patch)
treeb8ce0a76ca0340225d2b58f826ad9e2595cdcdba
parentHeavy refactoring + Improved mesege queu printing. (diff)
downloadrtems-tools-a785e254f2360e946baa14a11fbd3f403047b880.tar.bz2
Add printers to stage.
-rw-r--r--tools/gdb/python/classic_printer.py62
-rw-r--r--tools/gdb/python/supercore.py24
-rw-r--r--tools/gdb/python/supercore_printer.py140
3 files changed, 226 insertions, 0 deletions
diff --git a/tools/gdb/python/classic_printer.py b/tools/gdb/python/classic_printer.py
new file mode 100644
index 0000000..e9d7cb8
--- /dev/null
+++ b/tools/gdb/python/classic_printer.py
@@ -0,0 +1,62 @@
+#
+# RTEMS Classic pretty printers for GDB
+#
+
+class attribute_printer:
+
+ def __init__(self, attribute):
+ ''' ToDo: Verify - usage of all '''
+ self.attr = classic.attribute(attribute,'all')
+
+ def to_string(self):
+ return gdb.Value(self.attr.to_string())
+
+class semaphore_printer:
+ """WIP: Print a Semaphore_Control object. Print using the struct display hint
+ and an iterator. """
+
+ class iterator:
+ """Use an iterator for each field expanded from the id so GDB output
+ is formatted correctly."""
+
+ def __init__(self, semaphore):
+ self.semaphore = semaphore
+ self.count = 0
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ self.count += 1
+ if self.count == 1:
+ return self.semaphore['Object']
+ elif self.count == 2:
+ attr = attribute(self.semaphore['attribute_set'],
+ 'semaphore')
+ return attr.to_string()
+ elif self.count == 3:
+ return self.semaphore['Core_control']
+ raise StopIteration
+
+ def __init__(self, semaphore):
+ self.semaphore = semaphore
+
+ def to_string(self):
+ return ''
+
+ @staticmethod
+ def key(i):
+ if i == 0:
+ return 'Object'
+ elif i == 1:
+ return 'attribute_set'
+ elif i == 2:
+ return 'Core_control'
+ return 'bad'
+
+ def children(self):
+ counter = itertools.imap (self.key, itertools.count())
+ return itertools.izip (counter, self.iterator(self.semaphore))
+
+ def display_hint (self):
+ return 'struct'
diff --git a/tools/gdb/python/supercore.py b/tools/gdb/python/supercore.py
new file mode 100644
index 0000000..4378e12
--- /dev/null
+++ b/tools/gdb/python/supercore.py
@@ -0,0 +1,24 @@
+#
+# RTEMS Supercore Objects
+#
+
+import threads
+
+# ToDo: Move this to helper.
+def tasks_printer_rotuine(wait_queue):
+ tasks = wait_queue.tasks()
+ print ' Queue: len = %d, state = %s' % (len(tasks),wait_queue.state())
+ for t in range(0, len(tasks)):
+ print ' ', tasks[t].brief(), ' (%08x)' % (tasks[t].id())
+
+class CORE_message_queue:
+ '''Manage a Supercore message_queue'''
+
+ def __init__(self, message_queue):
+ self.queue = message_queue
+ self.wait_queue = threads.queue(self.queue['Wait_queue'])
+ # ToDo: self.attribute =''
+ # self.buffer
+
+ def show(self):
+ tasks_printer_rotuine(self.wait_queue)
diff --git a/tools/gdb/python/supercore_printer.py b/tools/gdb/python/supercore_printer.py
new file mode 100644
index 0000000..cee9097
--- /dev/null
+++ b/tools/gdb/python/supercore_printer.py
@@ -0,0 +1,140 @@
+#
+# RTEMS Supercore pretty printers for GDB
+#
+import objects
+import itertools
+
+class id_printer:
+ """Print an object given the ID. Print using the struct display hint and an
+ iterator."""
+
+ class iterator:
+ """Use an iterator for each field expanded from the id so GDB output
+ is formatted correctly."""
+
+ def __init__(self, id):
+ self.id = id
+ self.count = 0
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ self.count += 1
+ if self.count == 1:
+ return int(self.id.value())
+ elif self.count == 2:
+ return self.id.node()
+ elif self.count == 3:
+ return self.id.api()
+ elif self.count == 4:
+ return self.id._class()
+ elif self.count == 5:
+ return self.id.index()
+ raise StopIteration
+
+ def __init__(self, id):
+ self.id = objects.ident(id)
+
+ def to_string(self):
+ return ''
+
+ @staticmethod
+ def key(i):
+ if i == 0:
+ return 'id'
+ elif i == 1:
+ return 'node'
+ elif i == 2:
+ return 'api'
+ elif i == 3:
+ return 'class'
+ elif i == 4:
+ return 'index'
+ return 'bad'
+
+ def children(self):
+ counter = itertools.imap (self.key, itertools.count())
+ return itertools.izip (counter, self.iterator(self.id))
+
+ def display_hint (self):
+ return 'struct'
+
+class name_printer:
+ """Pretty printer for an object's name. It has to guess the type as no
+ information is available to help determine it."""
+
+ def __init__(self, nameval):
+ self.name = objects.name(nameval)
+
+ def to_string(self):
+ return str(self.name)
+
+class control_printer:
+
+ class iterator:
+ """Use an iterator for each field expanded from the id so GDB output
+ is formatted correctly."""
+
+ def __init__(self, object):
+ self.object = object
+ self.count = 0
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ self.count += 1
+ if self.count == 1:
+ return self.object.node()
+ elif self.count == 2:
+ return self.object.id()
+ elif self.count == 3:
+ return self.object.name()
+ raise StopIteration
+
+ def to_string(self):
+ return ''
+
+ def __init__(self, object):
+ self.object = objects.control(object)
+
+ @staticmethod
+ def key(i):
+ if i == 0:
+ return 'Node'
+ elif i == 1:
+ return 'id'
+ elif i == 2:
+ return 'name'
+ return 'bad'
+
+ def children(self):
+ counter = itertools.imap (self.key, itertools.count())
+ return itertools.izip (counter, self.iterator(self.object))
+
+ def display_hint (self):
+ return 'struct'
+
+
+class state_printer:
+
+ def __init__(self, state):
+ self.state = threads.state(state)
+ def to_string(self):
+ return self.state.to_string()
+
+class chains_printer:
+
+ def __init__(self,chain):
+ self.chain = chains.control(chain)
+
+ def to_string(self):
+ return "First:"+str(self.chain.first())+"\n Last:"+str(self.chain.last())
+
+class node_printer:
+ def __init__(self, node):
+ self.node = chains.node(node)
+
+ def to_string(self):
+ return "Node: "+str(self.node)+" Next: "+str(self.node.next())+" Prev: "+str(self.node.previous()) \ No newline at end of file