mirror of
https://git.rtems.org/rtems-tools/
synced 2025-10-17 06:37:43 +08:00
Add printers to stage.
This commit is contained in:

committed by
Chris Johns

parent
b061a67742
commit
a785e254f2
62
tools/gdb/python/classic_printer.py
Normal file
62
tools/gdb/python/classic_printer.py
Normal 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'
|
24
tools/gdb/python/supercore.py
Normal file
24
tools/gdb/python/supercore.py
Normal 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)
|
140
tools/gdb/python/supercore_printer.py
Normal file
140
tools/gdb/python/supercore_printer.py
Normal 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())
|
Reference in New Issue
Block a user