From 21d13d8372447885e205a86f4b1c41d437d6dd1e Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Thu, 12 Feb 2004 21:42:28 +0000 Subject: debug.h (struct gcc_debug_hooks): Add type_decl field. * debug.h (struct gcc_debug_hooks): Add type_decl field. (debug_nothing_tree_int): Prototype. (dwarf_debug_hooks): Delete, unused. * debug.c (do_nothing_debug_hooks): Update. (debug_nothing_tree_int): New function. * langhooks.h (struct lang_hooks_for_decls): Remove builtin_type_decls field. * langhooks-def.h (LANG_HOOKS_BUILTIN_TYPE_DECLS): Delete. (LANG_HOOKS_DECLS): Update. * toplev.c (rest_of_decl_compilation, rest_of_type_compilation): Use debug_hooks->type_decl. * dbxout.c (preinit_symbols): New static. (dbx_debug_hooks, xcoff_debug_hooks): Update. (dbxout_init): Don't call DBX_OUTPUT_STANDARD_TYPES or lang_hooks.decls.builtin_type_decls. Do scan preinit_symbols for symbols to output. (dbxout_type_decl): New function. (dbxout_symbol): If called before dbxout_init has run, queue the symbol for later. Apply DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER to TYPE_DECLs before emitting them. * xcoffout.c (assign_type_number): Delete. (xcoff_type_numbers): New static table. (xcoff_assign_fundamental_type_number): New function. * xcoffout.h: Define DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER, not DBX_OUTPUT_STANDARD_TYPES. Remove unnecessary #ifdefs. * sdbout.c: Include varray.h. (deferred_global_decls): New static. (sdb_debug_hooks): Update. (sdbout_global_decl): If we can't emit something right now, remember it in deferred_global_decls. (sdbout_finish): Just scan deferred_global_decls; don't call getdecls. (sdbout_init): Initialize deferred_global_decls. * Makefile.in: Update dependencies of sdbout.o. * dwarf2out.c (dwarf2out_type_decl): New function. (dwarf2_debug_hooks): Update. * vmsdbgout.c (vmsdbg_debug_hooks): Update. * c-decl.c (getdecls): Just return 0. (check_for_loop_decls): Don't use getdecls. (record_builtin_type): Call debug_hooks->type_decl on the TYPE_DECL. * c-objc-common.c (c_objc_common_finish_file): Don't use getdecls. cp: * cp-lang.c: Don't define LANG_HOOKS_BUILTIN_TYPE_DECLS. * cp-tree.h: Don't declare cxx_builtin_type_decls. * decl.c (builtin_type_decls, cxx_builtin_type_decls): Delete. (record_builtin_type): Call debug_hooks->type_decl on the TYPE_DECL. From-SVN: r77730 --- gcc/sdbout.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) (limited to 'gcc/sdbout.c') diff --git a/gcc/sdbout.c b/gcc/sdbout.c index 648b4c9..56cebba 100644 --- a/gcc/sdbout.c +++ b/gcc/sdbout.c @@ -48,6 +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" static GTY(()) tree anonymous_types; @@ -59,6 +60,10 @@ static GTY(()) int sdbout_source_line_counter; static GTY(()) int unnamed_struct_number; +/* Declarations whose debug info was deferred till end of compilation. */ + +static GTY(()) varray_type deferred_global_decls; + #ifdef SDB_DEBUGGING_INFO #include "rtl.h" @@ -331,6 +336,7 @@ const struct gcc_debug_hooks sdb_debug_hooks = sdbout_end_function, /* end_function */ debug_nothing_tree, /* function_decl */ sdbout_global_decl, /* global_decl */ + sdbout_type_decl, /* type_decl */ debug_nothing_tree_tree, /* imported_module_or_decl */ debug_nothing_tree, /* deferred_inline_function */ debug_nothing_tree, /* outlining_inline_function */ @@ -1438,6 +1444,8 @@ sdbout_global_decl (tree decl) sdbout_finish (). */ if (!DECL_INITIAL (decl) || !TREE_PUBLIC (decl)) sdbout_symbol (decl, 0); + else + VARRAY_PUSH_TREE (deferred_global_decls, decl); /* Output COFF information for non-global file-scope initialized variables. */ @@ -1452,29 +1460,12 @@ sdbout_global_decl (tree decl) static void sdbout_finish (const char *main_filename ATTRIBUTE_UNUSED) { - tree decl = (*lang_hooks.decls.getdecls) (); - unsigned int len = list_length (decl); - tree *vec = xmalloc (sizeof (tree) * len); - unsigned int i; + 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 < VARRAY_ACTIVE_SIZE (deferred_global_decls); i++) + sdbout_symbol (VARRAY_TREE (deferred_global_decls, i), 0); - 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); + VARRAY_FREE (deferred_global_decls); } /* Describe the beginning of an internal block within a function. @@ -1677,6 +1668,8 @@ sdbout_init (const char *input_file_name ATTRIBUTE_UNUSED) current_file->next = NULL; current_file->name = input_file_name; #endif + + VARRAY_TREE_INIT (deferred_global_decls, 12, "deferred_global_decls"); } #else /* SDB_DEBUGGING_INFO */ -- cgit v1.1