OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / xcoffout.c
index 6ee08ec..695beb6 100644 (file)
@@ -1,5 +1,6 @@
 /* Output xcoff-format symbol table information from GNU compiler.
-   Copyright (C) 1992, 1994, 1995, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1994, 1995, 1997, 1998,
+   1999, 2000 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -31,6 +32,7 @@ Boston, MA 02111-1307, USA.  */
 #include "flags.h"
 #include "toplev.h"
 #include "output.h"
+#include "ggc.h"
 
 #ifdef XCOFF_DEBUGGING_INFO
 
@@ -115,8 +117,8 @@ char *xcoff_lastfile;
 #define ASM_OUTPUT_LBE(FILE,LINENUM,BLOCKNUM) \
   fprintf (FILE, "\t.eb\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM))
 
-static void assign_type_number         PROTO((tree, char *, int));
-static void xcoffout_block             PROTO((tree, int, tree));
+static void assign_type_number         PARAMS ((tree, char *, int));
+static void xcoffout_block             PARAMS ((tree, int, tree));
 \f
 /* Support routines for XCOFF debugging info.  */
 
@@ -350,6 +352,9 @@ xcoffout_source_file (file, filename, inline_p)
          fprintf (file, "\n");
          xcoff_current_include_file = filename;
        }
+      
+      if (!xcoff_lastfile)
+       ggc_add_string_root (&xcoff_lastfile, 1);
 
       xcoff_lastfile = filename;
     }
@@ -370,15 +375,12 @@ xcoffout_source_line (file, filename, note)
 }
 \f
 /* Output the symbols defined in block number DO_BLOCK.
-   Set NEXT_BLOCK_NUMBER to 0 before calling.
 
    This function works by walking the tree structure of blocks,
    counting blocks until it finds the desired block.  */
 
 static int do_block = 0;
 
-static int next_block_number;
-
 static void
 xcoffout_block (block, depth, args)
      register tree block;
@@ -391,7 +393,7 @@ xcoffout_block (block, depth, args)
       if (TREE_USED (block))
        {
          /* When we reach the specified block, output its symbols.  */
-         if (next_block_number == do_block)
+         if (BLOCK_NUMBER (block) == do_block)
            {
              /* Output the syms of the block.  */
              if (debug_info_level != DINFO_LEVEL_TERSE || depth == 0)
@@ -403,11 +405,9 @@ xcoffout_block (block, depth, args)
              return;
            }
          /* If we are past the specified block, stop the scan.  */
-         else if (next_block_number >= do_block)
+         else if (BLOCK_NUMBER (block) >= do_block)
            return;
 
-         next_block_number++;
-
          /* Output the subblocks.  */
          xcoffout_block (BLOCK_SUBBLOCKS (block), depth + 1, NULL_TREE);
        }
@@ -438,7 +438,6 @@ xcoffout_begin_block (file, line, n)
     ASM_OUTPUT_LBB (file, line, n);
 
   do_block = n;
-  next_block_number = 0;
   xcoffout_block (DECL_INITIAL (decl), 0, DECL_ARGUMENTS (decl));
 }
 
@@ -508,8 +507,7 @@ xcoffout_begin_function (file, last_linenum)
      in sdbout_begin_block, but there is no guarantee that there will be any
      inner block 1, so we must do it here.  This gives a result similar to
      dbxout, so it does make some sense.  */
-  do_block = 0;
-  next_block_number = 0;
+  do_block = BLOCK_NUMBER (DECL_INITIAL (current_function_decl));
   xcoffout_block (DECL_INITIAL (current_function_decl), 0,
                  DECL_ARGUMENTS (current_function_decl));