public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 1/2] Fix debug info for ignored decls at start of assembly
@ 2021-07-26 16:45 Bernd Edlinger
  2021-07-28 12:51 ` Richard Biener
  0 siblings, 1 reply; 6+ messages in thread
From: Bernd Edlinger @ 2021-07-26 16:45 UTC (permalink / raw)
  To: gcc-patches, Richard Biener, Eric Botcazou, Arnaud Charlet

Ignored functions decls that are compiled at the start of
the assembly have bogus line numbers until the first .file
directive, as reported in PR101575.

The work around for this issue is to emit a dummy .file
directive when the first function is DECL_IGNORED_P, when
that is not already done, mostly for -fdwarf-4.

2021-07-24  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	PR ada/101575
	* dwarf2out.c (dwarf2out_begin_prologue): Move init
	of fde->ignored_debug to dwarf2out_set_ignored_loc.
	(dwarf2out_set_ignored_loc): This is now also called
	when no .loc statement is to be generated, in that case
	we emit a dummy .file statement when needed.
	* final.c (final_start_function_1,
	final_scan_insn_1): Call debug_hooks->set_ignored_loc
	for all DECL_IGNORED_P functions.
---
 gcc/dwarf2out.c | 29 +++++++++++++++++++++++++----
 gcc/final.c     |  5 ++---
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 884f1e1..8de0d6f 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -1115,7 +1115,6 @@ dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
   fde->dw_fde_current_label = dup_label;
   fde->in_std_section = (fnsec == text_section
 			 || (cold_text_section && fnsec == cold_text_section));
-  fde->ignored_debug = DECL_IGNORED_P (current_function_decl);
   in_text_section_p = fnsec == text_section;
 
   /* We only want to output line number information for the genuine dwarf2
@@ -28546,10 +28545,32 @@ dwarf2out_set_ignored_loc (unsigned int line, unsigned int column,
 {
   dw_fde_ref fde = cfun->fde;
 
-  fde->ignored_debug = false;
-  set_cur_line_info_table (function_section (fde->decl));
+  if (filename)
+    {
+      set_cur_line_info_table (function_section (fde->decl));
+
+      dwarf2out_source_line (line, column, filename, 0, true);
+    }
+  else
+    {
+      fde->ignored_debug = true;
+
+      /* Work around for PR101575: output a dummy .file directive.  */
+      if (in_first_function_p
+	  && debug_info_level >= DINFO_LEVEL_TERSE
+	  && dwarf_debuginfo_p ()
+#if defined(HAVE_AS_GDWARF_5_DEBUG_FLAG) && defined(HAVE_AS_WORKING_DWARF_N_FLAG)
+	  && dwarf_version <= 4
+#endif
+	  && output_asm_line_debug_info ())
+	{
+	  const char *filename0 = get_AT_string (comp_unit_die (), DW_AT_name);
 
-  dwarf2out_source_line (line, column, filename, 0, true);
+	  if (filename0 == NULL)
+	    filename0 = "<dummy>";
+	  maybe_emit_file (lookup_filename (filename0));
+	}
+    }
 }
 
 /* Record the beginning of a new source file.  */
diff --git a/gcc/final.c b/gcc/final.c
index ac6892d..82a5767 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -1725,7 +1725,7 @@ final_start_function_1 (rtx_insn **firstp, FILE *file, int *seen,
   if (!dwarf2_debug_info_emitted_p (current_function_decl))
     dwarf2out_begin_prologue (0, 0, NULL);
 
-  if (DECL_IGNORED_P (current_function_decl) && last_linenum && last_filename)
+  if (DECL_IGNORED_P (current_function_decl))
     debug_hooks->set_ignored_loc (last_linenum, last_columnnum, last_filename);
 
 #ifdef LEAF_REG_REMAP
@@ -2205,8 +2205,7 @@ final_scan_insn_1 (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
 	    }
 	  else if (!DECL_IGNORED_P (current_function_decl))
 	    debug_hooks->switch_text_section ();
-	  if (DECL_IGNORED_P (current_function_decl) && last_linenum
-	      && last_filename)
+	  if (DECL_IGNORED_P (current_function_decl))
 	    debug_hooks->set_ignored_loc (last_linenum, last_columnnum,
 					  last_filename);
 
-- 
1.9.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-08-02 13:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-26 16:45 [PATCH 1/2] Fix debug info for ignored decls at start of assembly Bernd Edlinger
2021-07-28 12:51 ` Richard Biener
2021-07-28 15:26   ` Bernd Edlinger
2021-07-29  7:23     ` Richard Biener
2021-07-30 11:09       ` Bernd Edlinger
2021-08-02 13:31         ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).