summaryrefslogtreecommitdiff
path: root/gcc/sdbout.c
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-12 21:42:28 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-12 21:42:28 +0000
commit73ae3ef72f8c419fc963cd401e8cc2ef53d9434b (patch)
treecfa7bbb13d0bfc85e73ea5724b507a1d241d14d5 /gcc/sdbout.c
parentcdfbccf4aec52c4f8777f857e7b34e5f0fd24627 (diff)
downloadgcc-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.c35
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 */