On Mon, 20 Nov 2017, Jakub Jelinek wrote: > Hi! > > The dwarf2out.c code relies on the assembly_start debug hook being > invoked before any RTL is processed from final.c (and needs it to be > done just once). Normally it is called from cgraphunit.c, but when > __RTL is seen with a starting pass, run_rtl_passes is called already > from the FE. While it would be better to defer the rtl finalization > until cgraph says so, it might be quite hard, so instead this patch > hacks dwarf2out_assembly_start so that it can be invoked multiple times > (and does nothing on the 2nd+ call) and invokes it from the run_rtl_passes > function too. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
works for me. Richard. > 2017-11-20 Jakub Jelinek <ja...@redhat.com> > > PR debug/82933 > * run-rtl-passes.c: Include debug.h. > (run_rtl_passes): Call debug_hooks->assembly_start. > * dwarf2out.c (dwarf2out_assembly_start): Return early if invoked > multiple times. > > * gcc.dg/rtl/x86_64/pr82933.c: New test. > > --- gcc/run-rtl-passes.c.jj 2017-01-24 23:29:09.000000000 +0100 > +++ gcc/run-rtl-passes.c 2017-11-20 17:36:31.320854900 +0100 > @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. > #include "bitmap.h" > #include "df.h" > #include "regs.h" > +#include "debug.h" /* for debug_hooks. */ > #include "insn-attr-common.h" /* for INSN_SCHEDULING. */ > #include "insn-attr.h" /* for init_sched_attrs. */ > #include "run-rtl-passes.h" > @@ -43,6 +44,9 @@ run_rtl_passes (char *initial_pass_name) > cfun->pass_startwith = initial_pass_name; > max_regno = max_reg_num (); > > + /* cgraphunit.c normally handles this. */ > + (*debug_hooks->assembly_start) (); > + > /* Pass "expand" normally sets this up. */ > #ifdef INSN_SCHEDULING > init_sched_attrs (); > --- gcc/dwarf2out.c.jj 2017-11-15 09:38:26.000000000 +0100 > +++ gcc/dwarf2out.c 2017-11-20 17:31:48.222394813 +0100 > @@ -27507,6 +27507,9 @@ dwarf2out_init (const char *filename ATT > static void > dwarf2out_assembly_start (void) > { > + if (text_section_line_info) > + return; > + > #ifndef DWARF2_LINENO_DEBUGGING_INFO > ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0); > ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); > --- gcc/testsuite/gcc.dg/rtl/x86_64/pr82933.c.jj 2017-11-20 > 17:34:54.680063313 +0100 > +++ gcc/testsuite/gcc.dg/rtl/x86_64/pr82933.c 2017-11-20 17:35:26.361667161 > +0100 > @@ -0,0 +1,4 @@ > +/* { dg-do run { target { { i?86-*-* x86_64-*-* } && lp64 } } } */ > +/* { dg-options "-g" } */ > + > +#include "into-cfglayout.c" > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)