OSDN Git Service

2012-05-03 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / sdbout.c
index 0e1cf18..255c68e 100644 (file)
@@ -1,6 +1,6 @@
 /* Output sdb-format symbol table information from GNU compiler.
    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
+   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -48,7 +48,7 @@ AT&T C compiler.  From the example below I would conclude the following:
 #include "debug.h"
 #include "tree.h"
 #include "ggc.h"
-#include "varray.h"
+#include "vec.h"
 
 static GTY(()) tree anonymous_types;
 
@@ -58,7 +58,7 @@ static GTY(()) int unnamed_struct_number;
 
 /* Declarations whose debug info was deferred till end of compilation.  */
 
-static GTY(()) varray_type deferred_global_decls;
+static GTY(()) VEC(tree,gc) *deferred_global_decls;
 
 /* The C front end may call sdbout_symbol before sdbout_init runs.
    We save all such decls in this list and output them when we get
@@ -75,7 +75,7 @@ static GTY(()) bool sdbout_initialized;
 #include "insn-config.h"
 #include "reload.h"
 #include "output.h"
-#include "toplev.h"
+#include "diagnostic-core.h"
 #include "tm_p.h"
 #include "gsyms.h"
 #include "langhooks.h"
@@ -307,6 +307,7 @@ const struct gcc_debug_hooks sdb_debug_hooks =
 {
   sdbout_init,                          /* init */
   sdbout_finish,                        /* finish */
+  debug_nothing_void,                   /* assembly_start */
   debug_nothing_int_charstar,           /* define */
   debug_nothing_int_charstar,           /* undef */
   sdbout_start_source_file,             /* start_source_file */
@@ -324,6 +325,7 @@ const struct gcc_debug_hooks sdb_debug_hooks =
   sdbout_begin_prologue,                /* begin_prologue */
   debug_nothing_int_charstar,           /* end_prologue */
 #endif
+  debug_nothing_int_charstar,           /* begin_epilogue */
   sdbout_end_epilogue,                  /* end_epilogue */
   sdbout_begin_function,                /* begin_function */
   sdbout_end_function,                  /* end_function */
@@ -338,7 +340,8 @@ const struct gcc_debug_hooks sdb_debug_hooks =
   debug_nothing_rtx,                    /* var_location */
   debug_nothing_void,                    /* switch_text_section */
   debug_nothing_tree_tree,              /* set_name */
-  0                                      /* start_end_main_source_file */
+  0,                                     /* start_end_main_source_file */
+  TYPE_SYMTAB_IS_POINTER                 /* tree_type_symtab_field */
 };
 
 /* Return a unique string to name an anonymous type.  */
@@ -488,6 +491,7 @@ plain_type_1 (tree type, int level)
   switch (TREE_CODE (type))
     {
     case VOID_TYPE:
+    case NULLPTR_TYPE:
       return T_VOID;
     case BOOLEAN_TYPE:
     case INTEGER_TYPE:
@@ -898,7 +902,7 @@ sdbout_symbol (tree decl, int local)
       else if (MEM_P (value)
               && ((GET_CODE (XEXP (value, 0)) == PLUS
                    && REG_P (XEXP (XEXP (value, 0), 0))
-                   && GET_CODE (XEXP (XEXP (value, 0), 1)) == CONST_INT)
+                   && CONST_INT_P (XEXP (XEXP (value, 0), 1)))
                   /* This is for variables which are at offset zero from
                      the frame pointer.  This happens on the Alpha.
                      Non-frame pointer registers are excluded above.  */
@@ -1151,7 +1155,7 @@ sdbout_one_type (tree type)
              {
                tree child_type = BINFO_TYPE (child);
                tree child_type_name;
-               
+
                if (TYPE_NAME (child_type) == 0)
                  continue;
                if (TREE_CODE (TYPE_NAME (child_type)) == IDENTIFIER_NODE)
@@ -1237,10 +1241,10 @@ sdbout_one_type (tree type)
        PUT_SDB_SIZE (size);
        PUT_SDB_ENDEF;
        break;
-
-      default:
-       break;
       }
+
+    default:
+      break;
     }
 }
 
@@ -1285,7 +1289,7 @@ sdbout_parms (tree parms)
               If that is not true, we produce meaningless results,
               but do not crash.  */
            if (GET_CODE (addr) == PLUS
-               && GET_CODE (XEXP (addr, 1)) == CONST_INT)
+               && CONST_INT_P (XEXP (addr, 1)))
              current_sym_value = INTVAL (XEXP (addr, 1));
            else
              current_sym_value = 0;
@@ -1413,7 +1417,7 @@ sdbout_reg_parms (tree parms)
        /* Report parms that live in memory but not where they were passed.  */
        else if (MEM_P (DECL_RTL (parms))
                 && GET_CODE (XEXP (DECL_RTL (parms), 0)) == PLUS
-                && GET_CODE (XEXP (XEXP (DECL_RTL (parms), 0), 1)) == CONST_INT
+                && CONST_INT_P (XEXP (XEXP (DECL_RTL (parms), 0), 1))
                 && PARM_PASSED_IN_MEMORY (parms)
                 && ! rtx_equal_p (DECL_RTL (parms), DECL_INCOMING_RTL (parms)))
          {
@@ -1459,7 +1463,7 @@ sdbout_global_decl (tree decl)
       if (!DECL_INITIAL (decl) || !TREE_PUBLIC (decl))
        sdbout_symbol (decl, 0);
       else
-       VARRAY_PUSH_TREE (deferred_global_decls, decl);
+       VEC_safe_push (tree, gc, deferred_global_decls, decl);
 
       /* Output COFF information for non-global file-scope initialized
         variables.  */
@@ -1475,9 +1479,10 @@ static void
 sdbout_finish (const char *main_filename ATTRIBUTE_UNUSED)
 {
   size_t i;
+  tree decl;
 
-  for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_global_decls); i++)
-    sdbout_symbol (VARRAY_TREE (deferred_global_decls, i), 0);
+  FOR_EACH_VEC_ELT (tree, deferred_global_decls, i, decl)
+    sdbout_symbol (decl, 0);
 }
 
 /* Describe the beginning of an internal block within a function.
@@ -1684,7 +1689,7 @@ sdbout_init (const char *input_file_name ATTRIBUTE_UNUSED)
   current_file->name = input_file_name;
 #endif
 
-  VARRAY_TREE_INIT (deferred_global_decls, 12, "deferred_global_decls");
+  deferred_global_decls = VEC_alloc (tree, gc, 12);
 
   /* Emit debug information which was queued by sdbout_symbol before
      we got here.  */
@@ -1695,11 +1700,6 @@ sdbout_init (const char *input_file_name ATTRIBUTE_UNUSED)
   preinit_symbols = 0;
 }
 
-#else  /* SDB_DEBUGGING_INFO */
-
-/* This should never be used, but its address is needed for comparisons.  */
-const struct gcc_debug_hooks sdb_debug_hooks;
-
 #endif /* SDB_DEBUGGING_INFO */
 
 #include "gt-sdbout.h"