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)

Reply via email to