* dbxout.c, sdbout.c, varasm.c: Revert most recent patch.
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 22 Jul 2001 09:42:47 +0000 (09:42 +0000)
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 22 Jul 2001 09:42:47 +0000 (09:42 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44237 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/dbxout.c
gcc/sdbout.c
gcc/varasm.c

index 089d6b7..52a647e 100644 (file)
@@ -1,3 +1,7 @@
+2001-07-22  Neil Booth  <neil@cat.daikokuya.demon.co.uk>
+
+       * dbxout.c, sdbout.c, varasm.c: Revert most recent debug patch.
+
 2001-07-22  Richard Henderson  <rth@redhat.com>
 
        * regrename.c (regrename_optimize): Compute nregs for each
index 183a65f..e7c2c54 100644 (file)
@@ -313,7 +313,6 @@ static void dbxout_prepare_symbol   PARAMS ((tree));
 static void dbxout_finish_symbol       PARAMS ((tree));
 static void dbxout_block               PARAMS ((tree, int, tree));
 static void dbxout_begin_function      PARAMS ((tree));
-static void dbxout_global_decl         PARAMS ((tree));
 \f
 /* The debug hooks structure.  */
 #if defined (DBX_DEBUGGING_INFO)
@@ -344,7 +343,7 @@ struct gcc_debug_hooks dbx_debug_hooks =
 #endif
   debug_nothing_int,           /* end_function */
   dbxout_function_decl,
-  dbxout_global_decl,          /* global_decl */
+  debug_nothing_tree,          /* global_decl */
   debug_nothing_tree,          /* deferred_inline_function */
   debug_nothing_tree,          /* outlining_inline_function */
   debug_nothing_rtx            /* label */
@@ -370,7 +369,7 @@ struct gcc_debug_hooks xcoff_debug_hooks =
   debug_nothing_tree,          /* begin_function */
   xcoffout_end_function,
   debug_nothing_tree,          /* function_decl */
-  dbxout_global_decl,          /* global_decl */
+  debug_nothing_tree,          /* global_decl */
   debug_nothing_tree,          /* deferred_inline_function */
   debug_nothing_tree,          /* outlining_inline_function */
   debug_nothing_rtx            /* label */
@@ -624,15 +623,6 @@ dbxout_end_block (line, n)
   ASM_OUTPUT_INTERNAL_LABEL (asmfile, "LBE", n);
 }
 
-/* Debug information for a global DECL.  Called from toplev.c after
-   compilation proper has finished.  */
-static void
-dbxout_global_decl (decl)
-     tree decl;
-{
-  dbxout_symbol (decl, 0);
-} 
-
 /* 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)
index 5ec4b23..accd9ed 100644 (file)
@@ -93,7 +93,6 @@ extern tree current_function_decl;
 #include "sdbout.h"
 
 static void sdbout_init                        PARAMS ((const char *));
-static void sdbout_finish              PARAMS ((const char *));
 static void sdbout_start_source_file   PARAMS ((unsigned, const char *));
 static void sdbout_end_source_file     PARAMS ((unsigned));
 static void sdbout_begin_block         PARAMS ((unsigned, unsigned));
@@ -125,7 +124,6 @@ static void sdbout_field_types              PARAMS ((tree));
 static void sdbout_one_type            PARAMS ((tree));
 static void sdbout_parms               PARAMS ((tree));
 static void sdbout_reg_parms           PARAMS ((tree));
-static void sdbout_global_decl         PARAMS ((tree));
 \f
 /* Random macros describing parts of SDB data.  */
 
@@ -300,16 +298,16 @@ static struct sdb_file *current_file;
 /* The debug hooks structure.  */
 struct gcc_debug_hooks sdb_debug_hooks =
 {
-  sdbout_init,                 /* init */
-  sdbout_finish,               /* finish */
-  debug_nothing_int_charstar,  /* define */
-  debug_nothing_int_charstar,  /* undef */
-  sdbout_start_source_file,    /* start_source_file */
-  sdbout_end_source_file,      /* end_source_file */
-  sdbout_begin_block,          /* begin_block */
-  sdbout_end_block,            /* end_block */
+  sdbout_init,
+  debug_nothing_charstar,
+  debug_nothing_int_charstar,
+  debug_nothing_int_charstar,
+  sdbout_start_source_file,
+  sdbout_end_source_file,
+  sdbout_begin_block,
+  sdbout_end_block,
   debug_true_tree,             /* ignore_block */
-  sdbout_source_line,          /* source_line */
+  sdbout_source_line,
 #ifdef MIPS_DEBUGGING_INFO
   /* Defer on MIPS systems so that parameter descriptions follow
      function entry.  */
@@ -319,11 +317,11 @@ struct gcc_debug_hooks sdb_debug_hooks =
   sdbout_begin_prologue,       /* begin_prologue */
   debug_nothing_int,           /* end_prologue */
 #endif
-  sdbout_end_epilogue,         /* end_epilogue */
-  sdbout_begin_function,       /* begin_function */
-  sdbout_end_function,         /* end_function */
+  sdbout_end_epilogue,
+  sdbout_begin_function,
+  sdbout_end_function,
   debug_nothing_tree,          /* function_decl */
-  sdbout_global_decl,          /* global_decl */
+  sdbout_global_decl,
   debug_nothing_tree,          /* deferred_inline_function */
   debug_nothing_tree,          /* outlining_inline_function */
   sdbout_label
@@ -1491,53 +1489,23 @@ sdbout_global_decl (decl)
      tree decl;
 {
   if (TREE_CODE (decl) == VAR_DECL
-      && !DECL_EXTERNAL (decl)
-      && DECL_RTL_SET_P (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.  Defer those for
-        sdbout_finish ().  */
-      if (!DECL_INITIAL (decl) || !TREE_PUBLIC (decl))
+        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 (DECL_INITIAL (decl) && GET_CODE (DECL_RTL (decl)) == MEM)
+      if (GET_CODE (DECL_RTL (decl)) == MEM)
        sdbout_toplevel_data (decl);
     }
 }
-
-/* Output initialized global vars at the end, in the order of
-   definition.  See comment in sdbout_global_decl.  */
-
-static void
-sdbout_finish (main_filename)
-     const char *main_filename ATTRIBUTE_UNUSED;
-{
-  tree decl = getdecls ();
-  unsigned int len = list_length (decl);
-  tree *vec = (tree *) xmalloc (sizeof (tree) * len);
-  unsigned int i;
-
-  /* Process the decls in reverse order--earliest first.  Put them
-     into VEC from back to front, then take out from front.  */
-
-  for (i = 0; i < len; i++, decl = TREE_CHAIN (decl))
-    vec[len - i - 1] = decl;
-
-  for (i = 0; i < len; i++)
-    {
-      decl = vec[i];
-      if (TREE_CODE (decl) == VAR_DECL
-         && ! DECL_EXTERNAL (decl)
-         && DECL_INITIAL (decl)
-         && TREE_PUBLIC (decl)
-         && DECL_RTL_SET_P (decl))
-       sdbout_symbol (decl, 0);
-    }
-
-  free (vec);
-}
 \f
 /* Describe the beginning of an internal block within a function.
    Also output descriptions of variables defined in this block.
index 7adae8e..630dad0 100644 (file)
@@ -1232,6 +1232,44 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
 
   last_assemble_variable_decl = 0;
 
+  if (DECL_RTL_SET_P (decl) && GET_CODE (DECL_RTL (decl)) == REG)
+    {
+      /* Do output symbol info for global register variables, but do nothing
+        else for them.  */
+
+      if (TREE_ASM_WRITTEN (decl))
+       return;
+      TREE_ASM_WRITTEN (decl) = 1;
+
+      /* Do no output if -fsyntax-only.  */
+      if (flag_syntax_only)
+       return;
+
+#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
+      /* File-scope global variables are output here.  */
+      if ((write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG)
+          && top_level)
+       dbxout_symbol (decl, 0);
+#endif
+#ifdef SDB_DEBUGGING_INFO
+      if (write_symbols == SDB_DEBUG && top_level
+         /* Leave initialized global vars for end of compilation;
+            see comment in compile_file.  */
+         && (TREE_PUBLIC (decl) == 0 || DECL_INITIAL (decl) == 0))
+       sdbout_symbol (decl, 0);
+#endif
+
+      /* Don't output any DWARF debugging information for variables here.
+        In the case of local variables, the information for them is output
+        when we do our recursive traversal of the tree representation for
+        the entire containing function.  In the case of file-scope variables,
+        we output information for all of them at the very end of compilation
+        while we are doing our final traversal of the chain of file-scope
+        declarations.  */
+
+      return;
+    }
+
   /* Normally no need to say anything here for external references,
      since assemble_external is called by the language-specific code
      when a declaration is first seen.  */
@@ -1245,13 +1283,6 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
   if (TREE_CODE (decl) == FUNCTION_DECL)
     return;
 
-  /* Do nothing for global register variables.  */
-  if (DECL_RTL_SET_P (decl) && GET_CODE (DECL_RTL (decl)) == REG)
-    {
-      TREE_ASM_WRITTEN (decl) = 1;
-      return;
-    }
-
   /* If type was incomplete when the variable was declared,
      see if it is complete now.  */
 
@@ -1380,6 +1411,27 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
            (decl, "requested alignment for %s is greater than implemented alignment of %d.",rounded);
 #endif
        
+#ifdef DBX_DEBUGGING_INFO
+      /* File-scope global variables are output here.  */
+      if (write_symbols == DBX_DEBUG && top_level)
+       dbxout_symbol (decl, 0);
+#endif
+#ifdef SDB_DEBUGGING_INFO
+      if (write_symbols == SDB_DEBUG && top_level
+         /* Leave initialized global vars for end of compilation;
+            see comment in compile_file.  */
+         && (TREE_PUBLIC (decl) == 0 || DECL_INITIAL (decl) == 0))
+       sdbout_symbol (decl, 0);
+#endif
+
+      /* Don't output any DWARF debugging information for variables here.
+        In the case of local variables, the information for them is output
+        when we do our recursive traversal of the tree representation for
+        the entire containing function.  In the case of file-scope variables,
+        we output information for all of them at the very end of compilation
+        while we are doing our final traversal of the chain of file-scope
+        declarations.  */
+
 #if 0 /* ??? We should either delete this or add a comment describing what
         it was intended to do and why we shouldn't delete it.  */
       if (flag_shared_data)
@@ -1442,6 +1494,29 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
   /* Record current section so we can restore it if dbxout.c clobbers it.  */
   saved_in_section = in_section;
 
+  /* Output the dbx info now that we have chosen the section.  */
+
+#ifdef DBX_DEBUGGING_INFO
+  /* File-scope global variables are output here.  */
+  if (write_symbols == DBX_DEBUG && top_level)
+    dbxout_symbol (decl, 0);
+#endif
+#ifdef SDB_DEBUGGING_INFO
+  if (write_symbols == SDB_DEBUG && top_level
+      /* Leave initialized global vars for end of compilation;
+        see comment in compile_file.  */
+      && (TREE_PUBLIC (decl) == 0 || DECL_INITIAL (decl) == 0))
+    sdbout_symbol (decl, 0);
+#endif
+
+  /* Don't output any DWARF debugging information for variables here.
+     In the case of local variables, the information for them is output
+     when we do our recursive traversal of the tree representation for
+     the entire containing function.  In the case of file-scope variables,
+     we output information for all of them at the very end of compilation
+     while we are doing our final traversal of the chain of file-scope
+     declarations.  */
+
   /* If the debugging output changed sections, reselect the section
      that's supposed to be selected.  */
   if (in_section != saved_in_section)