Commit efbf619b by Martin Liska Committed by Martin Liska

gdbhooks: Add new pretty-printers for: varpool_node, symtab_node, cgraph_edge and ipa_ref.

2018-04-10  Martin Liska  <mliska@suse.cz>

	* gdbhooks.py: Add pretty-printers for varpool_node, symtab_node,
	cgraph_edge and ipa_ref.

From-SVN: r259283
parent 672c767b
2018-04-10 Martin Liska <mliska@suse.cz>
* gdbhooks.py: Add pretty-printers for varpool_node, symtab_node,
cgraph_edge and ipa_ref.
2018-04-10 Jakub Jelinek <jakub@redhat.com> 2018-04-10 Jakub Jelinek <jakub@redhat.com>
PR target/85177 PR target/85177
......
...@@ -105,10 +105,19 @@ it's a quick way of getting lots of debuggability quickly. ...@@ -105,10 +105,19 @@ it's a quick way of getting lots of debuggability quickly.
Callgraph nodes are printed with the name of the function decl, if Callgraph nodes are printed with the name of the function decl, if
available: available:
(gdb) frame 5 (gdb) frame 5
#5 0x00000000006c288a in expand_function (node=<cgraph_node* 0x7ffff0312720 "foo">) at ../../src/gcc/cgraphunit.c:1594 #5 0x00000000006c288a in expand_function (node=<cgraph_node* 0x7ffff0312720 "foo"/12345>) at ../../src/gcc/cgraphunit.c:1594
1594 execute_pass_list (g->get_passes ()->all_passes); 1594 execute_pass_list (g->get_passes ()->all_passes);
(gdb) p node (gdb) p node
$1 = <cgraph_node* 0x7ffff0312720 "foo"> $1 = <cgraph_node* 0x7ffff0312720 "foo"/12345>
Similarly for symtab_node and varpool_node classes.
Cgraph edges are printed with the name of caller and callee:
(gdb) p this->callees
$4 = <cgraph_edge* 0x7fffe25aa000 (<cgraph_node * 0x7fffe62b22e0 "_GLOBAL__sub_I__ZN5Pooma5pinfoE"/19660> -> <cgraph_node * 0x7fffe620f730 "__static_initialization_and_destruction_1"/19575>)>
IPA reference follow very similar format:
(gdb) Value returned is $5 = <ipa_ref* 0x7fffefcb80c8 (<symtab_node * 0x7ffff562f000 "__dt_base "/875> -> <symtab_node * 0x7fffe795f000 "_ZTVN6Smarts8RunnableE"/16056>:IPA_REF_ADDR)>
vec<> pointers are printed as the address followed by the elements in vec<> pointers are printed as the address followed by the elements in
braces. Here's a length 2 vec: braces. Here's a length 2 vec:
...@@ -245,18 +254,45 @@ class TreePrinter: ...@@ -245,18 +254,45 @@ class TreePrinter:
# Callgraph pretty-printers # Callgraph pretty-printers
###################################################################### ######################################################################
class CGraphNodePrinter: class SymtabNodePrinter:
def __init__(self, gdbval): def __init__(self, gdbval):
self.gdbval = gdbval self.gdbval = gdbval
def to_string (self): def to_string (self):
result = '<cgraph_node* 0x%x' % intptr(self.gdbval) t = str(self.gdbval.type)
result = '<%s 0x%x' % (t, intptr(self.gdbval))
if intptr(self.gdbval): if intptr(self.gdbval):
# symtab_node::name calls lang_hooks.decl_printable_name # symtab_node::name calls lang_hooks.decl_printable_name
# default implementation (lhd_decl_printable_name) is: # default implementation (lhd_decl_printable_name) is:
# return IDENTIFIER_POINTER (DECL_NAME (decl)); # return IDENTIFIER_POINTER (DECL_NAME (decl));
tree_decl = Tree(self.gdbval['decl']) tree_decl = Tree(self.gdbval['decl'])
result += ' "%s"' % tree_decl.DECL_NAME().IDENTIFIER_POINTER() result += ' "%s"/%d' % (tree_decl.DECL_NAME().IDENTIFIER_POINTER(), self.gdbval['order'])
result += '>'
return result
class CgraphEdgePrinter:
def __init__(self, gdbval):
self.gdbval = gdbval
def to_string (self):
result = '<cgraph_edge* 0x%x' % intptr(self.gdbval)
if intptr(self.gdbval):
src = SymtabNodePrinter(self.gdbval['caller']).to_string()
dest = SymtabNodePrinter(self.gdbval['callee']).to_string()
result += ' (%s -> %s)' % (src, dest)
result += '>'
return result
class IpaReferencePrinter:
def __init__(self, gdbval):
self.gdbval = gdbval
def to_string (self):
result = '<ipa_ref* 0x%x' % intptr(self.gdbval)
if intptr(self.gdbval):
src = SymtabNodePrinter(self.gdbval['referring']).to_string()
dest = SymtabNodePrinter(self.gdbval['referred']).to_string()
result += ' (%s -> %s:%s)' % (src, dest, str(self.gdbval['use']))
result += '>' result += '>'
return result return result
...@@ -503,8 +539,12 @@ def build_pretty_printer(): ...@@ -503,8 +539,12 @@ def build_pretty_printer():
pp = GdbPrettyPrinters('gcc') pp = GdbPrettyPrinters('gcc')
pp.add_printer_for_types(['tree'], pp.add_printer_for_types(['tree'],
'tree', TreePrinter) 'tree', TreePrinter)
pp.add_printer_for_types(['cgraph_node *'], pp.add_printer_for_types(['cgraph_node *', 'varpool_node *', 'symtab_node *'],
'cgraph_node', CGraphNodePrinter) 'symtab_node', SymtabNodePrinter)
pp.add_printer_for_types(['cgraph_edge *'],
'cgraph_edge', CgraphEdgePrinter)
pp.add_printer_for_types(['ipa_ref *'],
'ipa_ref', IpaReferencePrinter)
pp.add_printer_for_types(['dw_die_ref'], pp.add_printer_for_types(['dw_die_ref'],
'dw_die_ref', DWDieRefPrinter) 'dw_die_ref', DWDieRefPrinter)
pp.add_printer_for_types(['gimple', 'gimple *', pp.add_printer_for_types(['gimple', 'gimple *',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment