Add printers to stage.

This commit is contained in:
Dhananjay Balan
2013-07-12 19:07:46 +05:30
committed by Chris Johns
parent b061a67742
commit a785e254f2
3 changed files with 226 additions and 0 deletions

View File

@@ -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'

View File

@@ -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)

View File

@@ -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())