https://gcc.gnu.org/g:17d9d479afd4de2939c2d507691394ff32983296
commit 17d9d479afd4de2939c2d507691394ff32983296 Author: Alexandre Oliva <ol...@adacore.com> Date: Thu Aug 15 02:00:18 2024 -0300 Dump aliases in -fcallgraph-info Dump ICF-unified decls, thunks, aliases and whatnot along with their ultimate targets, with edges from the alias to the target. for gcc/ChangeLog * toplev.cc (dump_final_alias_vcg): New. (dump_final_node_vcg): Dump aliases along with node. Diff: --- gcc/toplev.cc | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/gcc/toplev.cc b/gcc/toplev.cc index eee4805b504..f308fb15108 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -914,6 +914,37 @@ dump_final_callee_vcg (FILE *f, location_t location, tree callee) fputs ("\" }\n", f); } +/* Callback for cgraph_node::call_for_symbol_thunks_and_aliases to dump to F_ a + node and an edge from ALIAS->DECL to CURRENT_FUNCTION_DECL. */ + +static bool +dump_final_alias_vcg (cgraph_node *alias, void *f_) +{ + FILE *f = (FILE *)f_; + + if (alias->decl == current_function_decl) + return false; + + dump_final_node_vcg_start (f, alias->decl); + fputs ("\" shape : triangle }\n", f); + + fputs ("edge: { sourcename: \"", f); + print_decl_identifier (f, alias->decl, PRINT_DECL_UNIQUE_NAME); + fputs ("\" targetname: \"", f); + print_decl_identifier (f, current_function_decl, PRINT_DECL_UNIQUE_NAME); + location_t location = DECL_SOURCE_LOCATION (alias->decl); + if (LOCATION_LOCUS (location) != UNKNOWN_LOCATION) + { + expanded_location loc; + fputs ("\" label: \"", f); + loc = expand_location (location); + fprintf (f, "%s:%d:%d", loc.file, loc.line, loc.column); + } + fputs ("\" }\n", f); + + return false; +} + /* Dump final cgraph node in VCG format. */ static void @@ -950,6 +981,12 @@ dump_final_node_vcg (FILE *f) dump_final_callee_vcg (f, c->location, c->decl); vec_free (cfun->su->callees); cfun->su->callees = NULL; + + cgraph_node *node = cgraph_node::get (current_function_decl); + if (!node) + return; + node->call_for_symbol_thunks_and_aliases (dump_final_alias_vcg, f, + true, false); } /* Output stack usage and callgraph info, as requested. */