OK.
On Tue, Sep 27, 2016 at 9:47 AM, Richard Biener <rguent...@suse.de> wrote: > > This is moving break_out_includes (aka -feliminate-dwarf2-dups handling) > to early finish. It requires some massaging with the way we pick > up its results which previously "conveniently" ended up in the > limbo list but after moving to early will be scrapped off by > late finish doing a limbo list flush (where we just drop all CU DIEs > thinking it can only be comp_unit_die () itself). Thus this patch > adds a cu_die_list list for it (much similar to the comdat one we already > have). > > Eventually -feliminate-dwarf2-dups might die anyway(?), its testing > coverage is very low and it's declared broken for C++. > > Bootstrapped on x86_64-unknown-linux-gnu, testing in progress. > > Ok for trunk? > > Thanks, > Richard. > > 2016-09-27 Richard Biener <rguent...@suse.de> > > * dwarf2out.c (cu_die_list): New global. > (dwarf2out_finish): Walk cu_die_list instead of limbo DIEs. Add > main_comp_unit_die to cu_die_list if we created it. > Move break_out_includes ... > (dwarf2out_early_finish): ... here. Push created CU DIEs onto > the cu_die_list. > > diff -u gcc/dwarf2out.c gcc/dwarf2out.c > --- gcc/dwarf2out.c (working copy) > +++ gcc/dwarf2out.c (working copy) > @@ -2866,6 +2866,9 @@ > /* A list of type DIEs that have been separated into comdat sections. */ > static GTY(()) comdat_type_node *comdat_type_list; > > +/* A list of CU DIEs that have been separated. */ > +static GTY(()) limbo_die_node *cu_die_list; > + > /* A list of DIEs with a NULL parent waiting to be relocated. */ > static GTY(()) limbo_die_node *limbo_die_list; > > @@ -27855,11 +27858,6 @@ > resolve_addr (comp_unit_die ()); > move_marked_base_types (); > > - /* Generate separate CUs for each of the include files we've seen. > - They will go into limbo_die_list. */ > - if (flag_eliminate_dwarf2_dups) > - break_out_includes (comp_unit_die ()); > - > /* Initialize sections and labels used for actual assembler output. */ > init_sections_and_labels (); > > @@ -27867,7 +27865,7 @@ > have children. */ > add_sibling_attributes (comp_unit_die ()); > limbo_die_node *node; > - for (node = limbo_die_list; node; node = node->next) > + for (node = cu_die_list; node; node = node->next) > add_sibling_attributes (node->die); > for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next) > add_sibling_attributes (ctnode->root_die); > @@ -27876,7 +27874,15 @@ > skeleton compile_unit DIE that remains in the .o, while > most attributes go in the DWO compile_unit_die. */ > if (dwarf_split_debug_info) > - main_comp_unit_die = gen_compile_unit_die (NULL); > + { > + limbo_die_node *cu; > + main_comp_unit_die = gen_compile_unit_die (NULL); > + cu = limbo_die_list; > + gcc_assert (cu->die == main_comp_unit_die); > + limbo_die_list = limbo_die_list->next; > + cu->next = cu_die_list; > + cu_die_list = cu; > + } > else > main_comp_unit_die = comp_unit_die (); > > @@ -27988,7 +27994,7 @@ > > /* Output all of the compilation units. We put the main one last so that > the offsets are available to output_pubnames. */ > - for (node = limbo_die_list; node; node = node->next) > + for (node = cu_die_list; node; node = node->next) > output_comp_unit (node->die, 0); > > hash_table<comdat_type_hasher> comdat_type_table (100); > @@ -28217,6 +28223,21 @@ > prune_unused_types (); > } > > + /* Generate separate CUs for each of the include files we've seen. > + They will go into limbo_die_list and from there to cu_die_list. */ > + if (flag_eliminate_dwarf2_dups) > + { > + gcc_assert (limbo_die_list == NULL); > + break_out_includes (comp_unit_die ()); > + limbo_die_node *cu; > + while ((cu = limbo_die_list)) > + { > + limbo_die_list = cu->next; > + cu->next = cu_die_list; > + cu_die_list = cu; > + } > + } > + > /* The early debug phase is now finished. */ > early_dwarf_finished = true; > }