This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

3 new debug hooks


This builds upon my previous patch, of function_decl and global_decl
hooks, with a third hook for deferred inline functions, and claims a
victim in the process: dwarfout.h is no more.

This is in stage2 of a bootstrap, and has compiled C++ too.  OK to
commit?

Neil.

	* Makefile.in (toplev.o, dwarfout.o, final.o): Don't depend on
	dwarfout.h.
	* dbxout.c (dbxout_function): Rename dbxout_funciton_decl, move
	to conditionally compiled block.
	(dbx_debug_hooks, xcoff_debug_hooks): Update.
	* dbxout.h (dbxout_function): Remove.
	* debug.c (do_nothing_debug_hooks): Update.
	* debug.h (struct gcc_debug_hooks): New hooks function_decl,
	global_decl, deferred_inline_function.
	* dwarf2out.c (dwarf2_debug_hooks): Update.
	(dwarf2out_global_decl): New.
	* dwarfout.c: Don't include dwarfout.h.
	(dwarfout_global_decl, dwarfout_function_decl,
	dwarfout_deferred_inline_function): New.
	(dwarf_debug_hooks): Update.
	* dwarfout.h: Remove.
	* final.c: Don't include dwarfout.h.
	* sdbout.c (sdbout_global_decl): New.
	(sdbout_debug_hooks): Update.
	* toplev.c: Don't include dwarfout.h.
	(check_global_declarations, rest_of_compilation): Use new debug hooks.
	(note_deferral_of_defined_inline_function): Remove.
	* toplev.h (note_deferral_of_defined_inline_function): Remove.
	* ch/Makefile.in (lex.o): No dependence on dwarfout.h.
	* ch/lex.c: Don't include dwarfout.h.
	* cp/Make-lang.in (decl2.o): No dependence on dwarfout.h, dwarf2out.h.
	(semantics.o, optimize.o): Depend on debug.h not dwarfout.h.
	* cp/decl2.c: Don't include dwarfout.h and dwarf2out.h.
	* cp/optimize.c: Include debug.h.
	(maybe_clone_body): Use debug hook.
	* cp/semantics.c: Include debug.h.
	(expand_body): Use debug hook.
	* po/POTFILES.in: Remove dwarfout.h.

============================================================
Index: gcc/Makefile.in
--- gcc/Makefile.in	2001/07/15 16:50:41	1.699
+++ gcc/Makefile.in	2001/07/18 17:34:06
@@ -1340,7 +1340,7 @@ diagnostic.o : diagnostic.c diagnostic.h
    $(GGC_H) input.h $(INSN_ATTR_H) insn-config.h toplev.h intl.h
 toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) function.h \
    flags.h input.h $(INSN_ATTR_H) xcoffout.h output.h diagnostic.h \
-   debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h dwarfout.h \
+   debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \
    dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
    graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \
    ssa.h $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h
@@ -1401,7 +1401,7 @@ sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM
    insn-config.h $(OBSTACK_H) xcoffout.h c-pragma.h ggc.h \
    sdbout.h toplev.h $(TM_P_H) except.h debug.h
 dwarfout.o : dwarfout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf.h \
-   flags.h insn-config.h reload.h output.h toplev.h dwarfout.h $(TM_P_H) \
+   flags.h insn-config.h reload.h output.h toplev.h $(TM_P_H) \
    debug.h
 dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf2.h \
    debug.h flags.h insn-config.h reload.h output.h diagnostic.h \
@@ -1524,7 +1524,7 @@ sched-vis.o : sched-vis.c $(CONFIG_H) $(
 final.o : final.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h intl.h \
    $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) function.h \
    real.h output.h hard-reg-set.h except.h debug.h \
-   xcoffout.h toplev.h reload.h dwarfout.h dwarf2out.h sdbout.h \
+   xcoffout.h toplev.h reload.h dwarf2out.h sdbout.h \
    dbxout.h $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H)
 recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) function.h $(BASIC_BLOCK_H) \
    $(REGS_H) $(RECOG_H) $(EXPR_H) hard-reg-set.h flags.h insn-config.h \
============================================================
Index: gcc/dbxout.c
--- gcc/dbxout.c	2001/07/17 19:47:57	1.92
+++ gcc/dbxout.c	2001/07/18 17:34:16
@@ -317,6 +317,7 @@ static void dbxout_begin_function	PARAMS
 
 static void dbxout_begin_block		PARAMS ((unsigned, unsigned));
 static void dbxout_end_block		PARAMS ((unsigned, unsigned));
+static void dbxout_function_decl	PARAMS ((tree));
 
 struct gcc_debug_hooks dbx_debug_hooks =
 {
@@ -337,7 +338,10 @@ struct gcc_debug_hooks dbx_debug_hooks =
 #else
   debug_nothing_tree,		/* begin_function */
 #endif
-  debug_nothing_int		/* end_function */
+  debug_nothing_int,		/* end_function */
+  dbxout_function_decl,
+  debug_nothing_tree,		/* global_decl */
+  debug_nothing_tree		/* deferred_inline_function */
 };
 #endif /* DBX_DEBUGGING_INFO  */
 
@@ -357,7 +361,10 @@ struct gcc_debug_hooks xcoff_debug_hooks
   debug_nothing_int,		/* end_prologue */
   xcoffout_end_epilogue,
   debug_nothing_tree,		/* begin_function */
-  xcoffout_end_function
+  xcoffout_end_function,
+  debug_nothing_tree,		/* function_decl */
+  debug_nothing_tree,		/* global_decl */
+  debug_nothing_tree		/* deferred_inline_function */
 };
 #endif /* XCOFF_DEBUGGING_INFO  */
 
@@ -608,6 +615,33 @@ dbxout_end_block (line, n)
   ASM_OUTPUT_INTERNAL_LABEL (asmfile, "LBE", n);
 }
 
+/* Output dbx data for a function definition.
+   This includes a definition of the function name itself (a symbol),
+   definitions of the parameters (locating them in the parameter list)
+   and then output the block that makes up the function's body
+   (including all the auto variables of the function).  */
+
+static void
+dbxout_function_decl (decl)
+     tree decl;
+{
+#ifndef DBX_FUNCTION_FIRST
+  dbxout_begin_function (decl);
+#endif
+  dbxout_block (DECL_INITIAL (decl), 0, DECL_ARGUMENTS (decl));
+#ifdef DBX_OUTPUT_FUNCTION_END
+  DBX_OUTPUT_FUNCTION_END (asmfile, decl);
+#endif
+#if defined(ASM_OUTPUT_SECTION_NAME)
+  if (use_gnu_debug_info_extensions
+#if defined(NO_DBX_FUNCTION_END)
+      && ! NO_DBX_FUNCTION_END
+#endif
+      )
+    dbxout_function_end ();
+#endif
+}
+
 #endif /* DBX_DEBUGGING_INFO  */
 
 /* At the end of compilation, finish writing the symbol table.
@@ -2733,30 +2767,4 @@ dbxout_begin_function (decl)
     dbxout_symbol (DECL_RESULT (decl), 1);
 }
 
-/* Output dbx data for a function definition.
-   This includes a definition of the function name itself (a symbol),
-   definitions of the parameters (locating them in the parameter list)
-   and then output the block that makes up the function's body
-   (including all the auto variables of the function).  */
-
-void
-dbxout_function (decl)
-     tree decl;
-{
-#ifndef DBX_FUNCTION_FIRST
-  dbxout_begin_function (decl);
-#endif
-  dbxout_block (DECL_INITIAL (decl), 0, DECL_ARGUMENTS (decl));
-#ifdef DBX_OUTPUT_FUNCTION_END
-  DBX_OUTPUT_FUNCTION_END (asmfile, decl);
-#endif
-#if defined(ASM_OUTPUT_SECTION_NAME)
-  if (use_gnu_debug_info_extensions
-#if defined(NO_DBX_FUNCTION_END)
-      && ! NO_DBX_FUNCTION_END
-#endif
-      )
-    dbxout_function_end ();
-#endif
-}
 #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */
============================================================
Index: gcc/dbxout.h
--- gcc/dbxout.h	2001/07/17 19:47:57	1.11
+++ gcc/dbxout.h	2001/07/18 17:34:16
@@ -25,4 +25,3 @@ extern int dbxout_symbol		PARAMS ((tree,
 extern void dbxout_parms		PARAMS ((tree));
 extern void dbxout_reg_parms		PARAMS ((tree));
 extern int dbxout_syms			PARAMS ((tree));
-extern void dbxout_function		PARAMS ((tree));
============================================================
Index: gcc/debug.c
--- gcc/debug.c	2001/07/17 19:47:57	1.5
+++ gcc/debug.c	2001/07/18 17:34:16
@@ -35,7 +35,10 @@ struct gcc_debug_hooks do_nothing_debug_
   debug_nothing_int,		/* end_prologue */
   debug_nothing_void,		/* end_epilogue */
   debug_nothing_tree,		/* begin_function */
-  debug_nothing_int		/* end_function */
+  debug_nothing_int,		/* end_function */
+  debug_nothing_tree,		/* function_decl */
+  debug_nothing_tree,		/* global_decl */
+  debug_nothing_tree		/* deferred_inline_function */
 };
 
 /* This file contains implementations of each debug hook that do
============================================================
Index: gcc/debug.h
--- gcc/debug.h	2001/07/17 19:47:57	1.5
+++ gcc/debug.h	2001/07/18 17:34:17
@@ -73,6 +73,20 @@ struct gcc_debug_hooks
 
   /* Record end of function.  LINE is highest line number in function.  */
   void (* end_function) PARAMS ((unsigned int line));
+
+  /* Debug information for a function DECL.  This might include the
+     function name (a symbol), its parameters, and the block that
+     makes up the function's body, and the local variables of the
+     function.  */
+  void (* function_decl) PARAMS ((union tree_node *decl));
+
+  /* Debug information for a global DECL.  Called from toplev.c after
+     compilation proper has finished.  */
+  void (* global_decl) PARAMS ((union tree_node *decl));
+
+  /* DECL is an inline function, whose body is present, but which is
+     not being output at this point.  */
+  void (* deferred_inline_function) PARAMS ((union tree_node *decl));
 };
 
 extern struct gcc_debug_hooks *debug_hooks;
============================================================
Index: gcc/dwarf2out.c
--- gcc/dwarf2out.c	2001/07/17 19:47:57	1.291
+++ gcc/dwarf2out.c	2001/07/18 17:34:52
@@ -3022,6 +3022,7 @@ static void dwarf2out_start_source_file	
 static void dwarf2out_end_source_file	PARAMS ((unsigned));
 static void dwarf2out_begin_block	PARAMS ((unsigned, unsigned));
 static void dwarf2out_end_block		PARAMS ((unsigned, unsigned));
+static void dwarf2out_global_decl	PARAMS ((tree));
 
 /* The debug hooks structure.  */
 
@@ -3040,7 +3041,10 @@ struct gcc_debug_hooks dwarf2_debug_hook
   debug_nothing_int,		/* end_prologue */
   dwarf2out_end_epilogue,
   debug_nothing_tree,		/* begin_function */
-  debug_nothing_int		/* end_function */
+  debug_nothing_int,		/* end_function */
+  dwarf2out_decl,		/* function_decl */
+  dwarf2out_global_decl,
+  debug_nothing_tree		/* deferred_inline_function */
 };
 
 /* NOTE: In the comments in this file, many references are made to
@@ -11006,6 +11010,21 @@ dwarf2out_add_library_unit_info (filenam
       add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
       add_pubname (context_list_decl, unit_die);
     }
+}
+
+/* Debug information for a global DECL.  Called from toplev.c after
+   compilation proper has finished.  */
+static void
+dwarf2out_global_decl (decl)
+     tree decl;
+{
+  /* Output DWARF2 information for file-scope tentative data object
+     declarations, file-scope (extern) function declarations (which
+     had no corresponding body) and file-scope tagged type
+     declarations and definitions which have not yet been forced out.  */
+
+  if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
+    dwarf2out_decl (decl);
 }
 
 /* Write the debugging output for DECL.  */
============================================================
Index: gcc/dwarfout.c
--- gcc/dwarfout.c	2001/07/17 19:47:57	1.91
+++ gcc/dwarfout.c	2001/07/18 17:35:13
@@ -574,7 +574,6 @@ Boston, MA 02111-1307, USA.  */
 #include "insn-config.h"
 #include "reload.h"
 #include "output.h"
-#include "dwarfout.h"
 #include "toplev.h"
 #include "tm_p.h"
 #include "debug.h"
@@ -801,6 +800,10 @@ static void dwarfout_end_epilogue	PARAMS
 static void dwarfout_source_line	PARAMS ((unsigned int, const char *));
 static void dwarfout_end_prologue	PARAMS ((unsigned int));
 static void dwarfout_end_function	PARAMS ((unsigned int));
+static void dwarfout_function_decl	PARAMS ((tree));
+static void dwarfout_global_decl	PARAMS ((tree));
+static void dwarfout_deferred_inline_function	PARAMS ((tree));
+static void dwarfout_file_scope_decl 	PARAMS ((tree , int));
 static const char *dwarf_tag_name	PARAMS ((unsigned));
 static const char *dwarf_attr_name	PARAMS ((unsigned));
 static const char *dwarf_stack_op_name	PARAMS ((unsigned));
@@ -1389,7 +1392,10 @@ struct gcc_debug_hooks dwarf_debug_hooks
   dwarfout_end_prologue,
   dwarfout_end_epilogue,
   debug_nothing_tree,		/* begin_function */
-  dwarfout_end_function
+  dwarfout_end_function,
+  dwarfout_function_decl,
+  dwarfout_global_decl,
+  dwarfout_deferred_inline_function
 };
 
 /************************ general utility functions **************************/
@@ -5324,7 +5330,7 @@ output_decl (decl, containing_scope)
 
       /* If we're emitting an out-of-line copy of an inline function,
 	 set up to refer to the abstract instance emitted from
-	 note_deferral_of_defined_inline_function.  */
+	 dwarfout_deferred_inline_function.  */
       if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl)
 	  && ! (containing_scope && TYPE_P (containing_scope)))
 	set_decl_origin_self (decl);
@@ -5631,7 +5637,62 @@ output_decl (decl, containing_scope)
     }
 }
 
-void
+/* Output debug information for a function.  */
+static void
+dwarfout_function_decl (decl)
+     tree decl;
+{
+  dwarfout_file_scope_decl (decl, 0);
+}
+
+/* Debug information for a global DECL.  Called from toplev.c after
+   compilation proper has finished.  */
+static void
+dwarfout_global_decl (decl)
+     tree decl;
+{
+  /* Output DWARF information for file-scope tentative data object
+     declarations, file-scope (extern) function declarations (which
+     had no corresponding body) and file-scope tagged type
+     declarations and definitions which have not yet been forced out.  */
+
+  if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
+    dwarfout_file_scope_decl (decl, 1);
+}
+
+/* DECL is an inline function, whose body is present, but which is not
+   being output at this point.  (We're putting that off until we need
+   to do it.)  */
+static void
+dwarfout_deferred_inline_function (decl)
+     tree decl;
+{
+  /* Generate the DWARF info for the "abstract" instance of a function
+     which we may later generate inlined and/or out-of-line instances
+     of.  */
+  if ((DECL_INLINE (decl) || DECL_ABSTRACT (decl))
+      && ! DECL_ABSTRACT_ORIGIN (decl))
+    {
+      /* The front-end may not have set CURRENT_FUNCTION_DECL, but the
+	 DWARF code expects it to be set in this case.  Intuitively,
+	 DECL is the function we just finished defining, so setting
+	 CURRENT_FUNCTION_DECL is sensible.  */
+      tree saved_cfd = current_function_decl;
+      int was_abstract = DECL_ABSTRACT (decl);
+      current_function_decl = decl;
+
+      /* Let the DWARF code do its work.  */
+      set_decl_abstract_flags (decl, 1);
+      dwarfout_file_scope_decl (decl, 0);
+      if (! was_abstract)
+	set_decl_abstract_flags (decl, 0);
+
+      /* Reset CURRENT_FUNCTION_DECL.  */
+      current_function_decl = saved_cfd;
+    }
+}
+
+static void
 dwarfout_file_scope_decl (decl, set_finalizing)
      register tree decl;
      register int set_finalizing;
============================================================
Index: gcc/dwarfout.h
--- /sourceware/cvs-tmp/cvso7IMxG	Wed Jul 18 10:36:24 2001
+++ /dev/null	Tue May  5 13:32:27 1998
@@ -1,21 +0,0 @@
-/* dwarfout.h - Various declarations for functions found in dwarfout.c
-   Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-extern void dwarfout_file_scope_decl 	PARAMS ((tree , int));
============================================================
Index: gcc/final.c
--- gcc/final.c	2001/07/17 19:47:57	1.185
+++ gcc/final.c	2001/07/18 17:35:28
@@ -76,10 +76,6 @@ Boston, MA 02111-1307, USA.  */
 #include "xcoffout.h"
 #endif
 
-#ifdef DWARF_DEBUGGING_INFO
-#include "dwarfout.h"
-#endif
-
 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
 #include "dwarf2out.h"
 #endif
============================================================
Index: gcc/sdbout.c
--- gcc/sdbout.c	2001/07/17 19:47:57	1.49
+++ gcc/sdbout.c	2001/07/18 17:35:32
@@ -99,6 +99,7 @@ static void sdbout_begin_block		PARAMS (
 static void sdbout_end_block		PARAMS ((unsigned, unsigned));
 static void sdbout_source_line		PARAMS ((unsigned int, const char *));
 static void sdbout_end_epilogue		PARAMS ((void));
+static void sdbout_global_decl		PARAMS ((tree));
 #ifndef MIPS_DEBUGGING_INFO
 static void sdbout_begin_prologue	PARAMS ((unsigned int, const char *));
 #endif
@@ -315,7 +316,10 @@ struct gcc_debug_hooks sdb_debug_hooks =
 #endif
   sdbout_end_epilogue,
   sdbout_begin_function,
-  sdbout_end_function
+  sdbout_end_function,
+  debug_nothing_tree,		/* function_decl */
+  sdbout_global_decl,
+  debug_nothing_tree		/* deferred_inline_function */
 };
 
 #if 0
@@ -1470,6 +1474,32 @@ sdbout_reg_parms (parms)
 	      }
 	  }
       }
+}
+
+/* Output debug information for a global DECL.  Called from toplev.c
+   after compilation proper has finished.  */
+
+static void
+sdbout_global_decl (decl)
+     tree decl;
+{
+  if (TREE_CODE (decl) == VAR_DECL
+      && DECL_INITIAL (decl)
+      && ! DECL_EXTERNAL (decl)
+      && DECL_RTL (decl) != 0)
+    {
+      /* The COFF linker can move initialized global vars to the end.
+	 And that can screw up the symbol ordering.  By putting the
+	 symbols in that order to begin with, we avoid a problem.
+	 mcsun!unido!fauern!tumuc!pes@uunet.uu.net.  */
+      if (TREE_PUBLIC (decl))
+	sdbout_symbol (decl, 0);
+
+      /* Output COFF information for non-global file-scope initialized
+	 variables.  */
+      if (GET_CODE (DECL_RTL (decl)) == MEM)
+	sdbout_toplevel_data (decl);
+    }
 }
 
 /* Describe the beginning of an internal block within a function.
============================================================
Index: gcc/toplev.c
--- gcc/toplev.c	2001/07/16 20:54:44	1.492
+++ gcc/toplev.c	2001/07/18 17:35:51
@@ -68,10 +68,6 @@ Boston, MA 02111-1307, USA.  */
 #include "integrate.h"
 #include "debug.h"
 
-#ifdef DWARF_DEBUGGING_INFO
-#include "dwarfout.h"
-#endif
-
 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
 #include "dwarf2out.h"
 #endif
@@ -2059,47 +2055,7 @@ check_global_declarations (vec, len)
 	warning_with_decl (decl, "`%s' defined but not used");
 
       timevar_push (TV_SYMOUT);
-#ifdef SDB_DEBUGGING_INFO
-      /* The COFF linker can move initialized global vars to the end.
-	 And that can screw up the symbol ordering.
-	 By putting the symbols in that order to begin with,
-	 we avoid a problem.  mcsun!unido!fauern!tumuc!pes@uunet.uu.net.  */
-      if (write_symbols == SDB_DEBUG && TREE_CODE (decl) == VAR_DECL
-	  && TREE_PUBLIC (decl) && DECL_INITIAL (decl)
-	  && ! DECL_EXTERNAL (decl)
-	  && DECL_RTL (decl) != 0)
-	sdbout_symbol (decl, 0);
-
-      /* Output COFF information for non-global
-	 file-scope initialized variables.  */
-      if (write_symbols == SDB_DEBUG
-	  && TREE_CODE (decl) == VAR_DECL
-	  && DECL_INITIAL (decl)
-	  && ! DECL_EXTERNAL (decl)
-	  && DECL_RTL (decl) != 0
-	  && GET_CODE (DECL_RTL (decl)) == MEM)
-	sdbout_toplevel_data (decl);
-#endif /* SDB_DEBUGGING_INFO  */
-#ifdef DWARF_DEBUGGING_INFO
-      /* Output DWARF information for file-scope tentative data object
-	 declarations, file-scope (extern) function declarations (which
-	 had no corresponding body) and file-scope tagged type declarations
-	 and definitions which have not yet been forced out.  */
-
-      if (write_symbols == DWARF_DEBUG
-	  && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)))
-	dwarfout_file_scope_decl (decl, 1);
-#endif
-#ifdef DWARF2_DEBUGGING_INFO
-      /* Output DWARF2 information for file-scope tentative data object
-	 declarations, file-scope (extern) function declarations (which
-	 had no corresponding body) and file-scope tagged type declarations
-	 and definitions which have not yet been forced out.  */
-
-      if (write_symbols == DWARF2_DEBUG
-	  && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)))
-	dwarf2out_decl (decl);
-#endif
+      (*debug_hooks->global_decl) (decl);
       timevar_pop (TV_SYMOUT);
     }
 }
@@ -2634,46 +2590,6 @@ rest_of_type_compilation (type, toplev)
   timevar_pop (TV_SYMOUT);
 }
 
-/* DECL is an inline function, whose body is present, but which is not
-   being output at this point.  (We're putting that off until we need
-   to do it.)  If there are any actions that need to take place,
-   including the emission of debugging information for the function,
-   this is where they should go.  This function may be called by
-   language-dependent code for front-ends that do not even generate
-   RTL for functions that don't need to be put out.  */
-
-void
-note_deferral_of_defined_inline_function (decl)
-     tree decl ATTRIBUTE_UNUSED;
-{
-#ifdef DWARF_DEBUGGING_INFO
-  /* Generate the DWARF info for the "abstract" instance of a function
-     which we may later generate inlined and/or out-of-line instances
-     of.  */
-  if (write_symbols == DWARF_DEBUG
-      && (DECL_INLINE (decl) || DECL_ABSTRACT (decl))
-      && ! DECL_ABSTRACT_ORIGIN (decl))
-    {
-      /* The front-end may not have set CURRENT_FUNCTION_DECL, but the
-	 DWARF code expects it to be set in this case.  Intuitively,
-	 DECL is the function we just finished defining, so setting
-	 CURRENT_FUNCTION_DECL is sensible.  */
-      tree saved_cfd = current_function_decl;
-      int was_abstract = DECL_ABSTRACT (decl);
-      current_function_decl = decl;
-
-      /* Let the DWARF code do its work.  */
-      set_decl_abstract_flags (decl, 1);
-      dwarfout_file_scope_decl (decl, 0);
-      if (! was_abstract)
-	set_decl_abstract_flags (decl, 0);
-
-      /* Reset CURRENT_FUNCTION_DECL.  */
-      current_function_decl = saved_cfd;
-    }
-#endif
-}
-
 /* FNDECL is an inline function which is about to be emitted out of line.
    Do any preparation, such as emitting abstract debug info for the inline
    before it gets mangled by optimization.  */
@@ -2822,7 +2738,7 @@ rest_of_compilation (decl)
 	   declared inline but not inlined, and those inlined even
 	   though they weren't declared inline.  Conveniently, that's
 	   what DECL_INLINE means at this point.  */
-	note_deferral_of_defined_inline_function (decl);
+	(*debug_hooks->deferred_inline_function) (decl);
 
       if (DECL_DEFER_OUTPUT (decl))
 	{
@@ -3802,20 +3718,7 @@ rest_of_compilation (decl)
      generated.  During that call, we *will* be routed past here.  */
 
   timevar_push (TV_SYMOUT);
-#ifdef DBX_DEBUGGING_INFO
-  if (write_symbols == DBX_DEBUG)
-    dbxout_function (decl);
-#endif
-
-#ifdef DWARF_DEBUGGING_INFO
-  if (write_symbols == DWARF_DEBUG)
-    dwarfout_file_scope_decl (decl, 0);
-#endif
-
-#ifdef DWARF2_DEBUGGING_INFO
-  if (write_symbols == DWARF2_DEBUG)
-    dwarf2out_decl (decl);
-#endif
+  (*debug_hooks->function_decl) (decl);
   timevar_pop (TV_SYMOUT);
 
  exit_rest_of_compilation:
============================================================
Index: gcc/toplev.h
--- gcc/toplev.h	2001/07/11 20:51:46	1.68
+++ gcc/toplev.h	2001/07/18 17:35:51
@@ -123,8 +123,6 @@ extern void fnotice			PARAMS ((FILE *, c
 
 extern int wrapup_global_declarations   PARAMS ((union tree_node **, int));
 extern void check_global_declarations   PARAMS ((union tree_node **, int));
-extern void note_deferral_of_defined_inline_function
-					PARAMS ((union tree_node *));
 extern void note_outlining_of_inline_function
 					PARAMS ((union tree_node *));
 
============================================================
Index: gcc/ch/Makefile.in
--- gcc/ch/Makefile.in	2001/06/28 12:26:35	1.33
+++ gcc/ch/Makefile.in	2001/07/18 17:35:51
@@ -290,7 +290,7 @@ lang.o : lang.c $(CONFIG_H) $(CHILL_TREE
 	$(srcdir)/../diagnostic.h
 lex.o : lex.c $(CONFIG_H) $(CHILL_TREE_H) $(RTL_H) $(srcdir)/../flags.h \
 	$(srcdir)/../input.h $(srcdir)/parse.h $(srcdir)/../system.h	\
-	$(srcdir)/../toplev.h lex.h $(srcdir)/../dwarfout.h hash.h
+	$(srcdir)/../toplev.h lex.h hash.h
 loop.o : loop.c $(CONFIG_H) $(RTL_H) $(CHILL_TREE_H) lex.h \
 	$(srcdir)/../flags.h $(srcdir)/../input.h \
 	$(srcdir)/../tree.h $(srcdir)/../system.h $(srcdir)/../toplev.h
============================================================
Index: gcc/ch/lex.c
--- gcc/ch/lex.c	2001/02/04 23:18:43	1.19
+++ gcc/ch/lex.c	2001/07/18 17:35:56
@@ -35,10 +35,6 @@ Boston, MA 02111-1307, USA.  */
 #include "toplev.h"
 #include "tm_p.h"
 
-#ifdef DWARF_DEBUGGING_INFO
-#include "dwarfout.h"
-#endif
-
 #ifdef MULTIBYTE_CHARS
 #include <locale.h>
 #endif
============================================================
Index: gcc/cp/Make-lang.in
--- gcc/cp/Make-lang.in	2001/06/26 18:09:23	1.86
+++ gcc/cp/Make-lang.in	2001/07/18 17:35:57
@@ -244,7 +244,7 @@ cp/decl.o: cp/decl.c $(CXX_TREE_H) flags
   output.h $(EXPR_H) except.h toplev.h hash.h $(GGC_H) $(RTL_H) \
   cp/operators.def $(TM_P_H)
 cp/decl2.o: cp/decl2.c $(CXX_TREE_H) flags.h cp/lex.h cp/decl.h $(EXPR_H) \
-  output.h except.h toplev.h dwarf2out.h dwarfout.h $(GGC_H) $(RTL_H)
+  output.h except.h toplev.h $(GGC_H) $(RTL_H)
 cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) flags.h toplev.h output.h $(TM_P_H) \
    diagnostic.h
 cp/typeck.o: cp/typeck.c $(CXX_TREE_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \
@@ -274,10 +274,10 @@ cp/error.o: cp/error.c $(CXX_TREE_H) top
 cp/errfn.o: cp/errfn.c $(CXX_TREE_H) toplev.h
 cp/repo.o: cp/repo.c $(CXX_TREE_H) toplev.h $(GGC_H) diagnostic.h
 cp/semantics.o: cp/semantics.c $(CXX_TREE_H) cp/lex.h except.h toplev.h \
-  flags.h $(GGC_H) output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H)
+  flags.h $(GGC_H) debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H)
 cp/dump.o: cp/dump.c $(CXX_TREE_H) c-dump.h
 cp/optimize.o: cp/optimize.c $(CXX_TREE_H) rtl.h integrate.h insn-config.h \
-  input.h params.h
+  input.h params.h debug.h
 cp/mangle.o: cp/mangle.c $(CXX_TREE_H) toplev.h
 
 cp/parse.o: cp/parse.c $(CXX_TREE_H) flags.h cp/lex.h except.h output.h \
============================================================
Index: gcc/cp/decl2.c
--- gcc/cp/decl2.c	2001/07/13 20:40:43	1.475
+++ gcc/cp/decl2.c	2001/07/18 17:36:14
@@ -40,8 +40,6 @@ Boston, MA 02111-1307, USA.  */
 #include "output.h"
 #include "except.h"
 #include "toplev.h"
-#include "dwarf2out.h"
-#include "dwarfout.h"
 #include "ggc.h"
 #include "timevar.h"
 #include "cpplib.h"
============================================================
Index: gcc/cp/optimize.c
--- gcc/cp/optimize.c	2001/07/02 12:16:57	1.74
+++ gcc/cp/optimize.c	2001/07/18 17:36:16
@@ -32,6 +32,7 @@ Software Foundation, 59 Temple Place - S
 #include "ggc.h"
 #include "params.h"
 #include "hashtab.h"
+#include "debug.h"
 
 /* To Do:
 
@@ -1104,7 +1105,7 @@ maybe_clone_body (fn)
     return 0;
 
   /* Emit the DWARF1 abstract instance.  */
-  note_deferral_of_defined_inline_function (fn);
+  (*debug_hooks->deferred_inline_function) (fn);
 
   /* We know that any clones immediately follow FN in the TYPE_METHODS
      list.  */
============================================================
Index: gcc/cp/semantics.c
--- gcc/cp/semantics.c	2001/07/11 17:35:54	1.218
+++ gcc/cp/semantics.c	2001/07/18 17:36:22
@@ -37,6 +37,7 @@
 #include "expr.h"
 #include "output.h"
 #include "timevar.h"
+#include "debug.h"
 
 /* There routines provide a modular interface to perform many parsing
    operations.  They may therefore be used during actual parsing, or
@@ -2440,7 +2441,7 @@ expand_body (fn)
 	 we actually need to write this function out.  */
       defer_fn (fn);
       /* Let the back-end know that this funtion exists.  */
-      note_deferral_of_defined_inline_function (fn);
+      (*debug_hooks->deferred_inline_function) (fn);
       return;
     }
 
============================================================
Index: gcc/po/POTFILES.in
--- gcc/po/POTFILES.in	2001/07/09 19:42:28	1.50
+++ gcc/po/POTFILES.in	2001/07/18 17:36:23
@@ -731,7 +731,6 @@ dwarf2asm.h
 dwarf2out.c
 dwarf2out.h
 dwarfout.c
-dwarfout.h
 emit-rtl.c
 #enquire.c is used only by GCC maintainers and installers
 errors.c


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]