+2015-06-11 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ * debug.h (struct gcc_debug_hooks): Add a
+ register_main_translation_unit hook.
+ * debug.c (do_nothing_debug_hooks): Provide a function for this
+ new hook.
+ * dbxout.c (dbx_debug_hooks): Likewise.
+ * sdbout.c (sdb_debug_hooks): Likewise.
+ * vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
+ * dwarf2out.c (main_translation_unit): New global variable.
+ (dwarf2out_register_main_translation_unit): New function
+ implementing the new hook.
+ (dwarf2_debug_hooks): Assign
+ dwarf2out_register_main_translation_unit to this new hook.
+ (dwarf2out_init): Associate any main translation unit to
+ comp_unit_die ().
+ * c/c-decl.c (pop_scope): Register the main translation unit
+ through the new debug hook.
+ * cp/decl.c (cxx_init_decl_processing): Likewise.
+
2015-06-11 Marek Polacek <polacek@redhat.com>
* match.pd ((x & y) ^ (x | y) -> x ^ y): New pattern.
+2015-06-11 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ * gcc-interface/utils.c (get_global_context): Register the main
+ translation unit through the new debug hook.
+
2015-06-09 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/misc.c: Remove duplicate include directives.
get_global_context (void)
{
if (!global_context)
- global_context = build_translation_unit_decl (NULL_TREE);
+ {
+ global_context = build_translation_unit_decl (NULL_TREE);
+ debug_hooks->register_main_translation_unit (global_context);
+ }
return global_context;
}
{
tree file_decl = build_translation_unit_decl (NULL_TREE);
context = file_decl;
+ debug_hooks->register_main_translation_unit (file_decl);
}
else
context = block;
global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
void_type_node);
DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
+ debug_hooks->register_main_translation_unit
+ (DECL_CONTEXT (global_namespace));
TREE_PUBLIC (global_namespace) = 1;
begin_scope (sk_namespace, global_namespace);
debug_nothing_tree, /* begin_function */
#endif
debug_nothing_int, /* end_function */
+ debug_nothing_tree, /* register_main_translation_unit */
dbxout_function_decl,
dbxout_early_global_decl, /* early_global_decl */
dbxout_late_global_decl, /* late_global_decl */
debug_nothing_int_charstar, /* end_epilogue */
debug_nothing_tree, /* begin_function */
debug_nothing_int, /* end_function */
+ debug_nothing_tree, /* register_main_translation_unit */
debug_nothing_tree, /* function_decl */
debug_nothing_tree, /* early_global_decl */
debug_nothing_tree, /* late_global_decl */
/* Record end of function. LINE is highest line number in function. */
void (* end_function) (unsigned int line);
+ /* Register UNIT as the main translation unit. Called from front-ends when
+ they create their main translation unit. */
+ void (* register_main_translation_unit) (tree);
+
/* Debug information for a function DECL. This might include the
function name (a symbol), its parameters, and the block that
makes up the function's body, and the local variables of the
static void dwarf2out_var_location (rtx_insn *);
static void dwarf2out_begin_function (tree);
static void dwarf2out_end_function (unsigned int);
+static void dwarf2out_register_main_translation_unit (tree unit);
static void dwarf2out_set_name (tree, tree);
/* The debug hooks structure. */
dwarf2out_end_epilogue,
dwarf2out_begin_function,
dwarf2out_end_function, /* end_function */
+ dwarf2out_register_main_translation_unit,
dwarf2out_function_decl, /* function_decl */
dwarf2out_early_global_decl,
dwarf2out_late_global_decl,
maybe_at_text_label_p = false;
}
+/* Temporary holder for dwarf2out_register_main_translation_unit. Used to let
+ front-ends register a translation unit even before dwarf2out_init is
+ called. */
+static tree main_translation_unit = NULL_TREE;
+
+/* Hook called by front-ends after they built their main translation unit.
+ Associate comp_unit_die to UNIT. */
+
+static void
+dwarf2out_register_main_translation_unit (tree unit)
+{
+ gcc_assert (TREE_CODE (unit) == TRANSLATION_UNIT_DECL
+ && main_translation_unit == NULL_TREE);
+ main_translation_unit = unit;
+ /* If dwarf2out_init has not been called yet, it will perform the association
+ itself looking at main_translation_unit. */
+ if (decl_die_table != NULL)
+ equate_decl_number_to_die (unit, comp_unit_die ());
+}
+
/* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE. */
static void
/* Make sure the line number table for .text always exists. */
text_section_line_info = new_line_info_table ();
text_section_line_info->end_label = text_end_label;
+
+ /* If front-ends already registered a main translation unit but we were not
+ ready to perform the association, do this now. */
+ if (main_translation_unit != NULL_TREE)
+ equate_decl_number_to_die (main_translation_unit, comp_unit_die ());
}
/* Called before compile () starts outputtting functions, variables
+2015-06-11 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ * f95-lang.c (gfc_create_decls): Register the main translation unit
+ through the new debug hook.
+
2015-06-08 Andrew MacLeod <amacleod@redhat.com>
* convert.c : Adjust include files.
/* Build our translation-unit decl. */
current_translation_unit = build_translation_unit_decl (NULL_TREE);
+ debug_hooks->register_main_translation_unit (current_translation_unit);
}
sdbout_end_epilogue, /* end_epilogue */
sdbout_begin_function, /* begin_function */
sdbout_end_function, /* end_function */
+ debug_nothing_tree, /* register_main_translation_unit */
debug_nothing_tree, /* function_decl */
sdbout_early_global_decl, /* early_global_decl */
sdbout_late_global_decl, /* late_global_decl */
vmsdbgout_end_epilogue,
vmsdbgout_begin_function,
vmsdbgout_end_function,
+ debug_nothing_tree, /* register_main_translation_unit */
vmsdbgout_function_decl,
vmsdbgout_early_global_decl,
vmsdbgout_late_global_decl,