Restore DW_AT_abstract_origin for cross-unit call sites

PR debug/66503

gcc/ChangeLog:
	* 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.

gcc/ada/ChangeLog:
	* gcc-interface/utils.c (get_global_context): Register the main
	translation unit through the new debug hook.

gcc/fortran/ChangeLog:
	* f95-lang.c (gfc_create_decls): Register the main translation
	unit through the new debug hook.

From-SVN: r224371
This commit is contained in:
Pierre-Marie de Rodat 2015-06-11 12:40:10 +00:00 committed by Pierre-Marie de Rodat
parent f13c4673a5
commit 881a5e608a
13 changed files with 73 additions and 1 deletions

View File

@ -1,3 +1,23 @@
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.

View File

@ -1,3 +1,8 @@
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.

View File

@ -667,7 +667,10 @@ static tree
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;
}

View File

@ -1196,6 +1196,7 @@ pop_scope (void)
{
tree file_decl = build_translation_unit_decl (NULL_TREE);
context = file_decl;
debug_hooks->register_main_translation_unit (file_decl);
}
else
context = block;

View File

@ -3831,6 +3831,8 @@ cxx_init_decl_processing (void)
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);

View File

@ -380,6 +380,7 @@ const struct gcc_debug_hooks dbx_debug_hooks =
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 */

View File

@ -46,6 +46,7 @@ const struct gcc_debug_hooks do_nothing_debug_hooks =
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 */

View File

@ -89,6 +89,10 @@ struct gcc_debug_hooks
/* 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

View File

@ -2446,6 +2446,7 @@ static void dwarf2out_abstract_function (tree);
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. */
@ -2475,6 +2476,7 @@ const struct gcc_debug_hooks dwarf2_debug_hooks =
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,
@ -22505,6 +22507,26 @@ dwarf2out_end_function (unsigned int)
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
@ -23242,6 +23264,11 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
/* 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

View File

@ -1,3 +1,8 @@
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.

View File

@ -204,6 +204,7 @@ gfc_create_decls (void)
/* Build our translation-unit decl. */
current_translation_unit = build_translation_unit_decl (NULL_TREE);
debug_hooks->register_main_translation_unit (current_translation_unit);
}

View File

@ -296,6 +296,7 @@ const struct gcc_debug_hooks sdb_debug_hooks =
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 */

View File

@ -194,6 +194,7 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks
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,