diff options
author | Dhananjay Balan <mb.dhananjay@gmail.com> | 2013-07-12 19:07:46 +0530 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2014-08-25 09:52:40 +1000 |
commit | a785e254f2360e946baa14a11fbd3f403047b880 (patch) | |
tree | b8ce0a76ca0340225d2b58f826ad9e2595cdcdba /tools/gdb/python/supercore_printer.py | |
parent | b061a67742d58bedaa161970c5cae028aa440e1f (diff) |
Add printers to stage.
Diffstat (limited to '')
-rw-r--r-- | tools/gdb/python/supercore_printer.py | 140 |
1 files changed, 140 insertions, 0 deletions
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 |