On 12/10/14 06:21, David Malcolm wrote:
On Tue, 2014-12-09 at 13:10 -0800, Aldy Hernandez wrote:From: Aldy Hernandez <[email protected]> To: jason merrill <[email protected]> Cc: David Malcolm <[email protected]>, gcc-patches <[email protected]> Subject: [patch] gdb python pretty printer for DIEs Date: Tue, 09 Dec 2014 13:10:57 -0800 (12/09/2014 04:10:57 PM)I am tired of dumping entire DIEs just to see what type they are. With this patch, we get: (gdb) print context_die $5 = <dw_die_ref 0x7ffff6de0230 DW_TAG_module <parent=0x7ffff6de0000 DW_TAG_compile_unit>> I know it's past the end of stage1, but this debugging aid can help in fixing bugs in stage >= 3. I am committing this to the [debug-early] branch, but I am hoping I can also commit it to mainline and avoid dragging it along. OK for mainline?--- a/gcc/gdbhooks.py +++ b/gcc/gdbhooks.py @@ -253,6 +253,26 @@ class CGraphNodePrinter: return result ###################################################################### +# Dwarf DIE pretty-printers +###################################################################### + +class DWDieRefPrinter: + def __init__(self, gdbval): + self.gdbval = gdbval + + def to_string (self): + result = '<dw_die_ref 0x%x' % long(self.gdbval)A minor nit: for the NULL case, you're doing slightly more work than necessary: you start building "result" above...
Thanks. Tom also pointed the same thing. Ooops. I'm committing the attached patch. Aldy
commit d3f07cb1cbae79b10dc01affb863302e3f5e444d Author: Aldy Hernandez <[email protected]> Date: Tue Dec 9 13:04:46 2014 -0800 * gdbhooks.py (class DWDieRefPrinter): New class. (build_pretty_printer): Register dw_die_ref's. diff --git a/gcc/gdbhooks.py b/gcc/gdbhooks.py index a74e712..6d9e41e 100644 --- a/gcc/gdbhooks.py +++ b/gcc/gdbhooks.py @@ -253,6 +253,26 @@ class CGraphNodePrinter: return result ###################################################################### +# Dwarf DIE pretty-printers +###################################################################### + +class DWDieRefPrinter: + def __init__(self, gdbval): + self.gdbval = gdbval + + def to_string (self): + if long(self.gdbval) == 0: + return '<dw_die_ref 0x0>' + result = '<dw_die_ref 0x%x' % long(self.gdbval) + result += ' %s' % self.gdbval['die_tag'] + if long(self.gdbval['die_parent']) != 0: + result += ' <parent=0x%x %s>' % (long(self.gdbval['die_parent']), + self.gdbval['die_parent']['die_tag']) + + result += '>' + return result + +###################################################################### class GimplePrinter: def __init__(self, gdbval): @@ -455,6 +475,8 @@ def build_pretty_printer(): 'tree', TreePrinter) pp.add_printer_for_types(['cgraph_node *'], 'cgraph_node', CGraphNodePrinter) + pp.add_printer_for_types(['dw_die_ref'], + 'dw_die_ref', DWDieRefPrinter) pp.add_printer_for_types(['gimple', 'gimple_statement_base *', # Keep this in the same order as gimple.def:
