diff mbox series

[1/4] Add block parameter to begin_block debug hook

Message ID 20241107043915.2112-1-mark@harmstone.com
State New
Headers show
Series [1/4] Add block parameter to begin_block debug hook | expand

Commit Message

Mark Harmstone Nov. 7, 2024, 4:39 a.m. UTC
Add a parameter to the begin_block debug hook that is a pointer to the
tree_node of the block in question. CodeView needs this as it records
line numbers of inlined functions in a different manner, so we need to
be able to tell if the block is actually the start of an inlined
function.

gcc/
	* debug.cc (do_nothing_debug_hooks): Change begin_block
	function pointer.
	(debug_nothing_int_int_tree): New function.
	* debug.h (struct gcc_debug_hooks): Add tree parameter to begin_block.
	(debug_nothing_int_int_tree): Add declaration.
	* dwarf2out.cc (dwarf2out_begin_block): Add tree parameter.
	(dwarf2_lineno_debug_hooks): Use new dummy function for begin_block.
	* final.cc (final_scan_insn_1): Pass insn block through to
	debug_hooks->begin_block.
	* vmsdbgout.cc (vmsdbgout_begin_block): Add tree parameter.
---
 gcc/debug.cc     | 9 ++++++++-
 gcc/debug.h      | 3 ++-
 gcc/dwarf2out.cc | 7 ++++---
 gcc/final.cc     | 2 +-
 gcc/vmsdbgout.cc | 5 +++--
 5 files changed, 18 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/gcc/debug.cc b/gcc/debug.cc
index 81f6683f4e1..65725decdb1 100644
--- a/gcc/debug.cc
+++ b/gcc/debug.cc
@@ -32,7 +32,7 @@  const struct gcc_debug_hooks do_nothing_debug_hooks =
   debug_nothing_int_charstar,
   debug_nothing_int_charstar,
   debug_nothing_int,
-  debug_nothing_int_int,	         /* begin_block */
+  debug_nothing_int_int_tree,	         /* begin_block */
   debug_nothing_int_int,	         /* end_block */
   debug_true_const_tree,	         /* ignore_block */
   debug_nothing_int_int_charstar_int_bool, /* source_line */
@@ -146,6 +146,13 @@  debug_nothing_int_int (unsigned int line ATTRIBUTE_UNUSED,
 {
 }
 
+void
+debug_nothing_int_int_tree (unsigned int line ATTRIBUTE_UNUSED,
+			    unsigned int n ATTRIBUTE_UNUSED,
+			    tree block ATTRIBUTE_UNUSED)
+{
+}
+
 void
 debug_nothing_tree_int (tree decl ATTRIBUTE_UNUSED,
 			int local ATTRIBUTE_UNUSED)
diff --git a/gcc/debug.h b/gcc/debug.h
index 1d6642aad03..7d35d7d5877 100644
--- a/gcc/debug.h
+++ b/gcc/debug.h
@@ -57,7 +57,7 @@  struct gcc_debug_hooks
 
   /* Record the beginning of block N, counting from 1 and not
      including the function-scope block, at LINE.  */
-  void (* begin_block) (unsigned int line, unsigned int n);
+  void (* begin_block) (unsigned int line, unsigned int n, tree block);
 
   /* Record the end of a block.  Arguments as for begin_block.  */
   void (* end_block) (unsigned int line, unsigned int n);
@@ -223,6 +223,7 @@  extern void debug_nothing_int_int_charstar_int_bool (unsigned int,
 						     int, bool);
 extern void debug_nothing_int (unsigned int);
 extern void debug_nothing_int_int (unsigned int, unsigned int);
+extern void debug_nothing_int_int_tree (unsigned int, unsigned int, tree);
 extern void debug_nothing_tree (tree);
 extern void debug_nothing_tree_tree (tree, tree);
 extern void debug_nothing_tree_int (tree, int);
diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
index a2621ec7c76..698926b41c0 100644
--- a/gcc/dwarf2out.cc
+++ b/gcc/dwarf2out.cc
@@ -2866,7 +2866,7 @@  static void dwarf2out_undef (unsigned int, const char *);
 static void dwarf2out_start_source_file (unsigned, const char *);
 static void dwarf2out_end_source_file (unsigned);
 static void dwarf2out_function_decl (tree);
-static void dwarf2out_begin_block (unsigned, unsigned);
+static void dwarf2out_begin_block (unsigned, unsigned, tree);
 static void dwarf2out_end_block (unsigned, unsigned);
 static bool dwarf2out_ignore_block (const_tree);
 static void dwarf2out_set_ignored_loc (unsigned, unsigned, const char *);
@@ -2951,7 +2951,7 @@  const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
   debug_nothing_int_charstar,
   debug_nothing_int_charstar,
   debug_nothing_int,
-  debug_nothing_int_int,	         /* begin_block */
+  debug_nothing_int_int_tree,	         /* begin_block */
   debug_nothing_int_int,	         /* end_block */
   debug_true_const_tree,	         /* ignore_block */
   dwarf2out_source_line,		 /* source_line */
@@ -27806,7 +27806,8 @@  dwarf2out_function_decl (tree decl)
 
 static void
 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
-		       unsigned int blocknum)
+		       unsigned int blocknum,
+		       tree block ATTRIBUTE_UNUSED)
 {
   switch_to_section (current_function_section ());
   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
diff --git a/gcc/final.cc b/gcc/final.cc
index 11141f2b56c..fa5b46e13b2 100644
--- a/gcc/final.cc
+++ b/gcc/final.cc
@@ -2300,7 +2300,7 @@  final_scan_insn_1 (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
 
 	      /* Output debugging info about the symbol-block beginning.  */
 	      if (!DECL_IGNORED_P (current_function_decl))
-		debug_hooks->begin_block (last_linenum, n);
+		debug_hooks->begin_block (last_linenum, n, NOTE_BLOCK (insn));
 
 	      /* Mark this block as output.  */
 	      TREE_ASM_WRITTEN (NOTE_BLOCK (insn)) = 1;
diff --git a/gcc/vmsdbgout.cc b/gcc/vmsdbgout.cc
index f5d0d84cf70..d9e6a8b7b74 100644
--- a/gcc/vmsdbgout.cc
+++ b/gcc/vmsdbgout.cc
@@ -154,7 +154,7 @@  static void vmsdbgout_define (unsigned int, const char *);
 static void vmsdbgout_undef (unsigned int, const char *);
 static void vmsdbgout_start_source_file (unsigned int, const char *);
 static void vmsdbgout_end_source_file (unsigned int);
-static void vmsdbgout_begin_block (unsigned int, unsigned int);
+static void vmsdbgout_begin_block (unsigned int, unsigned int, tree);
 static void vmsdbgout_end_block (unsigned int, unsigned int);
 static bool vmsdbgout_ignore_block (const_tree);
 static void vmsdbgout_source_line (unsigned int, unsigned int, const char *,
@@ -1230,7 +1230,8 @@  vmsdbgout_end_epilogue (unsigned int line, const char *file)
    a lexical block.  */
 
 static void
-vmsdbgout_begin_block (unsigned line, unsigned blocknum)
+vmsdbgout_begin_block (unsigned line, unsigned blocknum,
+		       tree block ATTRIBUTE_UNUSED)
 {
   if (write_symbols == VMS_AND_DWARF2_DEBUG)
     (*dwarf2_debug_hooks.begin_block) (line, blocknum);