diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-12 21:42:28 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-12 21:42:28 +0000 |
commit | 73ae3ef72f8c419fc963cd401e8cc2ef53d9434b (patch) | |
tree | cfa7bbb13d0bfc85e73ea5724b507a1d241d14d5 /gcc/sdbout.c | |
parent | cdfbccf4aec52c4f8777f857e7b34e5f0fd24627 (diff) | |
download | gcc-73ae3ef72f8c419fc963cd401e8cc2ef53d9434b.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77730 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sdbout.c')
-rw-r--r-- | gcc/sdbout.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/gcc/sdbout.c b/gcc/sdbout.c index 648b4c9ccde..56cebba5936 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 */ |