Message ID | patch-17094-tamar@arm.com |
---|---|
State | New |
Headers | show |
Series | middle-end: On emergency dumps finish the graph generation. | expand |
On Tue, 7 Mar 2023, Tamar Christina wrote: > Hi All, > > When doing an emergency dump the cfg output dumps are corrupted because the > ending "}" is missing. > > Normally when the pass manager finishes it would call finish_graph_dump_file to > produce this. This is called here because each pass can dump multiple digraphs. > > However during an emergency dump we only dump the current function and so after > that is done we never go back to the pass manager. > > As such, we need to manually call finish_graph_dump_file in order to properly > finish off graph generation. > > With this -ftree-dump-*-graph works properly during a crash dump. > > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. > > Ok for master? OK. > Thanks, > Tamar > > gcc/ChangeLog: > > * passes.cc (emergency_dump_function): Finish graph generation. > > --- inline copy of patch -- > diff --git a/gcc/passes.cc b/gcc/passes.cc > index 347214e81d0cfac05d9ba782db0eda1cdd7e9c87..38642a4010941b414a1ed1fd70a348778addbf60 100644 > --- a/gcc/passes.cc > +++ b/gcc/passes.cc > @@ -1845,6 +1845,13 @@ emergency_dump_function () > fprintf (dump_file, "\n\n\nEMERGENCY DUMP:\n\n"); > execute_function_dump (cfun, current_pass); > > + /* Normally the passmanager will close the graphs as a pass could be wanting > + to print multiple digraphs. But during an emergency dump there can only be > + one and we must finish the graph manually. */ > + if ((cfun->curr_properties & PROP_cfg) > + && (dump_flags & TDF_GRAPH)) > + finish_graph_dump_file (dump_file_name); > + > if (symtab && current_pass->type == IPA_PASS) > symtab->dump (dump_file); > } > > > > >
--- a/gcc/passes.cc +++ b/gcc/passes.cc @@ -1845,6 +1845,13 @@ emergency_dump_function () fprintf (dump_file, "\n\n\nEMERGENCY DUMP:\n\n"); execute_function_dump (cfun, current_pass); + /* Normally the passmanager will close the graphs as a pass could be wanting + to print multiple digraphs. But during an emergency dump there can only be + one and we must finish the graph manually. */ + if ((cfun->curr_properties & PROP_cfg) + && (dump_flags & TDF_GRAPH)) + finish_graph_dump_file (dump_file_name); + if (symtab && current_pass->type == IPA_PASS) symtab->dump (dump_file); }