OSDN Git Service

* include/ext/pool_allocator.h: Include c++config.h.
[pf3gnuchains/gcc-fork.git] / gcc / dbxout.c
index 9419331..e020d03 100644 (file)
@@ -1,6 +1,6 @@
 /* Output dbx-format symbol table information from GNU compiler.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -203,7 +203,8 @@ struct dbx_file
    should always be 0 because we should not have needed any file numbers
    yet.  */
 
-#ifdef DBX_USE_BINCL
+#if (defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)) \
+    && defined (DBX_USE_BINCL)
 static struct dbx_file *current_file;
 #endif
 
@@ -381,23 +382,26 @@ const struct gcc_debug_hooks dbx_debug_hooks =
   dbxout_end_source_file,
   dbxout_begin_block,
   dbxout_end_block,
-  debug_true_tree,             /* ignore_block */
-  dbxout_source_line,          /* source_line */
-  dbxout_source_line,          /* begin_prologue: just output line info */
-  debug_nothing_int_charstar,  /* end_prologue */
-  debug_nothing_int_charstar,  /* end_epilogue */
+  debug_true_tree,                      /* ignore_block */
+  dbxout_source_line,                   /* source_line */
+  dbxout_source_line,                   /* begin_prologue: just output 
+                                           line info */
+  debug_nothing_int_charstar,           /* end_prologue */
+  debug_nothing_int_charstar,           /* end_epilogue */
 #ifdef DBX_FUNCTION_FIRST
   dbxout_begin_function,
 #else
-  debug_nothing_tree,          /* begin_function */
+  debug_nothing_tree,                   /* begin_function */
 #endif
-  debug_nothing_int,           /* end_function */
+  debug_nothing_int,                    /* end_function */
   dbxout_function_decl,
-  dbxout_global_decl,          /* global_decl */
-  debug_nothing_tree,          /* deferred_inline_function */
-  debug_nothing_tree,          /* outlining_inline_function */
-  debug_nothing_rtx,           /* label */
-  dbxout_handle_pch            /* handle_pch */
+  dbxout_global_decl,                   /* global_decl */
+  debug_nothing_tree_tree,               /* imported_module_or_decl */
+  debug_nothing_tree,                   /* deferred_inline_function */
+  debug_nothing_tree,                   /* outlining_inline_function */
+  debug_nothing_rtx,                    /* label */
+  dbxout_handle_pch,                    /* handle_pch */
+  debug_nothing_rtx                     /* var_location */
 };
 #endif /* DBX_DEBUGGING_INFO  */
 
@@ -412,19 +416,21 @@ const struct gcc_debug_hooks xcoff_debug_hooks =
   dbxout_end_source_file,
   xcoffout_begin_block,
   xcoffout_end_block,
-  debug_true_tree,             /* ignore_block */
+  debug_true_tree,                      /* ignore_block */
   xcoffout_source_line,
-  xcoffout_begin_prologue,     /* begin_prologue */
-  debug_nothing_int_charstar,  /* end_prologue */
+  xcoffout_begin_prologue,              /* begin_prologue */
+  debug_nothing_int_charstar,           /* end_prologue */
   xcoffout_end_epilogue,
-  debug_nothing_tree,          /* begin_function */
+  debug_nothing_tree,                   /* begin_function */
   xcoffout_end_function,
-  debug_nothing_tree,          /* function_decl */
-  dbxout_global_decl,          /* global_decl */
-  debug_nothing_tree,          /* deferred_inline_function */
-  debug_nothing_tree,          /* outlining_inline_function */
-  debug_nothing_rtx,           /* label */
-  dbxout_handle_pch            /* handle_pch */
+  debug_nothing_tree,                   /* function_decl */
+  dbxout_global_decl,                   /* global_decl */
+  debug_nothing_tree_tree,               /* imported_module_or_decl */
+  debug_nothing_tree,                   /* deferred_inline_function */
+  debug_nothing_tree,                   /* outlining_inline_function */
+  debug_nothing_rtx,                    /* label */
+  dbxout_handle_pch,                    /* handle_pch */
+  debug_nothing_rtx                     /* var_location */
 };
 #endif /* XCOFF_DEBUGGING_INFO  */
 \f
@@ -863,6 +869,11 @@ dbxout_type_fields (tree type)
      field that we can support.  */
   for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
     {
+
+      /* If on of the nodes is an error_mark or its type is then return early. */
+      if (tem == error_mark_node || TREE_TYPE (tem) == error_mark_node)
+       return;
+
       /* Omit here local type decls until we know how to support them.  */
       if (TREE_CODE (tem) == TYPE_DECL
          /* Omit fields whose position or size are variable or too large to
@@ -1672,8 +1683,10 @@ dbxout_type (tree type, int full)
            if (use_gnu_debug_info_extensions)
              {
                have_used_extensions = 1;
-               putc (TREE_VIA_VIRTUAL (child) ? '1' : '0', asmfile);
-               putc (access == access_public_node ? '2' : '0', asmfile);
+                putc (TREE_VIA_VIRTUAL (child) ? '1' : '0', asmfile);
+                putc (access == access_public_node ? '2' :
+                      (access == access_protected_node ? '1' :'0'),
+                      asmfile);
                CHARS (2);
                if (TREE_VIA_VIRTUAL (child)
                    && strcmp (lang_hooks.name, "GNU C++") == 0)
@@ -2041,11 +2054,6 @@ dbxout_symbol (tree decl, int local ATTRIBUTE_UNUSED)
   /* "Intercept" dbxout_symbol() calls like we do all debug_hooks.  */
   ++debug_nesting;
 
-  /* Cast avoids warning in old compilers.  */
-  current_sym_code = (STAB_CODE_TYPE) 0;
-  current_sym_value = 0;
-  current_sym_addr = 0;
-
   /* Ignore nameless syms, but don't ignore type tags.  */
 
   if ((DECL_NAME (decl) == 0 && TREE_CODE (decl) != TYPE_DECL)
@@ -2346,7 +2354,7 @@ dbxout_symbol (tree decl, int local ATTRIBUTE_UNUSED)
                }
              else if (TREE_CODE (TREE_TYPE (decl)) == REAL_TYPE)
                {
-                 /* don't know how to do this yet.  */
+                 /* Don't know how to do this yet.  */
                }
              break;
            }
@@ -2572,10 +2580,6 @@ dbxout_symbol_location (tree decl, tree type, const char *suffix, rtx home)
       else
        dbxout_symbol_location (decl, subtype, "$real", XEXP (home, 0));
 
-      /* Cast avoids warning in old compilers.  */
-      current_sym_code = (STAB_CODE_TYPE) 0;
-      current_sym_value = 0;
-      current_sym_addr = 0;
       dbxout_prepare_symbol (decl);
 
       if (WORDS_BIG_ENDIAN)
@@ -2615,9 +2619,11 @@ dbxout_symbol_name (tree decl, const char *suffix, int letter)
 {
   const char *name;
 
-  if (DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl)))
-    /* One slight hitch: if this is a VAR_DECL which is a static
-       class member, we must put out the mangled name instead of the
+  if (DECL_CONTEXT (decl) 
+      && (TYPE_P (DECL_CONTEXT (decl))
+         || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL))
+    /* One slight hitch: if this is a VAR_DECL which is a class member
+       or a namespace member, we must put out the mangled name instead of the
        DECL_NAME.  Note also that static member (variable) names DO NOT begin
        with underscores in .stabs directives.  */
     name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
@@ -2643,6 +2649,14 @@ dbxout_prepare_symbol (tree decl ATTRIBUTE_UNUSED)
 
   dbxout_source_file (asmfile, filename);
 #endif
+
+  /* Initialize variables used to communicate each symbol's debug
+     information to dbxout_finish_symbol with zeroes.  */
+
+  /* Cast avoids warning in old compilers.  */
+  current_sym_code = (STAB_CODE_TYPE) 0;
+  current_sym_value = 0;
+  current_sym_addr = 0;
 }
 
 static void