Commit 881a5e60 by Pierre-Marie de Rodat Committed by Pierre-Marie de Rodat

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
parent f13c4673
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> 2015-06-11 Marek Polacek <polacek@redhat.com>
* match.pd ((x & y) ^ (x | y) -> x ^ y): New pattern. * 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> 2015-06-09 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/misc.c: Remove duplicate include directives. * gcc-interface/misc.c: Remove duplicate include directives.
......
...@@ -667,7 +667,10 @@ static tree ...@@ -667,7 +667,10 @@ static tree
get_global_context (void) get_global_context (void)
{ {
if (!global_context) 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; return global_context;
} }
......
...@@ -1196,6 +1196,7 @@ pop_scope (void) ...@@ -1196,6 +1196,7 @@ pop_scope (void)
{ {
tree file_decl = build_translation_unit_decl (NULL_TREE); tree file_decl = build_translation_unit_decl (NULL_TREE);
context = file_decl; context = file_decl;
debug_hooks->register_main_translation_unit (file_decl);
} }
else else
context = block; context = block;
......
...@@ -3831,6 +3831,8 @@ cxx_init_decl_processing (void) ...@@ -3831,6 +3831,8 @@ cxx_init_decl_processing (void)
global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name, global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
void_type_node); void_type_node);
DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE); 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; TREE_PUBLIC (global_namespace) = 1;
begin_scope (sk_namespace, global_namespace); begin_scope (sk_namespace, global_namespace);
......
...@@ -380,6 +380,7 @@ const struct gcc_debug_hooks dbx_debug_hooks = ...@@ -380,6 +380,7 @@ const struct gcc_debug_hooks dbx_debug_hooks =
debug_nothing_tree, /* begin_function */ debug_nothing_tree, /* begin_function */
#endif #endif
debug_nothing_int, /* end_function */ debug_nothing_int, /* end_function */
debug_nothing_tree, /* register_main_translation_unit */
dbxout_function_decl, dbxout_function_decl,
dbxout_early_global_decl, /* early_global_decl */ dbxout_early_global_decl, /* early_global_decl */
dbxout_late_global_decl, /* late_global_decl */ dbxout_late_global_decl, /* late_global_decl */
......
...@@ -46,6 +46,7 @@ const struct gcc_debug_hooks do_nothing_debug_hooks = ...@@ -46,6 +46,7 @@ const struct gcc_debug_hooks do_nothing_debug_hooks =
debug_nothing_int_charstar, /* end_epilogue */ debug_nothing_int_charstar, /* end_epilogue */
debug_nothing_tree, /* begin_function */ debug_nothing_tree, /* begin_function */
debug_nothing_int, /* end_function */ debug_nothing_int, /* end_function */
debug_nothing_tree, /* register_main_translation_unit */
debug_nothing_tree, /* function_decl */ debug_nothing_tree, /* function_decl */
debug_nothing_tree, /* early_global_decl */ debug_nothing_tree, /* early_global_decl */
debug_nothing_tree, /* late_global_decl */ debug_nothing_tree, /* late_global_decl */
......
...@@ -89,6 +89,10 @@ struct gcc_debug_hooks ...@@ -89,6 +89,10 @@ struct gcc_debug_hooks
/* Record end of function. LINE is highest line number in function. */ /* Record end of function. LINE is highest line number in function. */
void (* end_function) (unsigned int line); 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 /* Debug information for a function DECL. This might include the
function name (a symbol), its parameters, and the block that function name (a symbol), its parameters, and the block that
makes up the function's body, and the local variables of the makes up the function's body, and the local variables of the
......
...@@ -2446,6 +2446,7 @@ static void dwarf2out_abstract_function (tree); ...@@ -2446,6 +2446,7 @@ static void dwarf2out_abstract_function (tree);
static void dwarf2out_var_location (rtx_insn *); static void dwarf2out_var_location (rtx_insn *);
static void dwarf2out_begin_function (tree); static void dwarf2out_begin_function (tree);
static void dwarf2out_end_function (unsigned int); static void dwarf2out_end_function (unsigned int);
static void dwarf2out_register_main_translation_unit (tree unit);
static void dwarf2out_set_name (tree, tree); static void dwarf2out_set_name (tree, tree);
/* The debug hooks structure. */ /* The debug hooks structure. */
...@@ -2475,6 +2476,7 @@ const struct gcc_debug_hooks dwarf2_debug_hooks = ...@@ -2475,6 +2476,7 @@ const struct gcc_debug_hooks dwarf2_debug_hooks =
dwarf2out_end_epilogue, dwarf2out_end_epilogue,
dwarf2out_begin_function, dwarf2out_begin_function,
dwarf2out_end_function, /* end_function */ dwarf2out_end_function, /* end_function */
dwarf2out_register_main_translation_unit,
dwarf2out_function_decl, /* function_decl */ dwarf2out_function_decl, /* function_decl */
dwarf2out_early_global_decl, dwarf2out_early_global_decl,
dwarf2out_late_global_decl, dwarf2out_late_global_decl,
...@@ -22505,6 +22507,26 @@ dwarf2out_end_function (unsigned int) ...@@ -22505,6 +22507,26 @@ dwarf2out_end_function (unsigned int)
maybe_at_text_label_p = false; 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. */ /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE. */
static void static void
...@@ -23242,6 +23264,11 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ...@@ -23242,6 +23264,11 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
/* Make sure the line number table for .text always exists. */ /* Make sure the line number table for .text always exists. */
text_section_line_info = new_line_info_table (); text_section_line_info = new_line_info_table ();
text_section_line_info->end_label = text_end_label; 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 /* 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> 2015-06-08 Andrew MacLeod <amacleod@redhat.com>
* convert.c : Adjust include files. * convert.c : Adjust include files.
......
...@@ -204,6 +204,7 @@ gfc_create_decls (void) ...@@ -204,6 +204,7 @@ gfc_create_decls (void)
/* Build our translation-unit decl. */ /* Build our translation-unit decl. */
current_translation_unit = build_translation_unit_decl (NULL_TREE); current_translation_unit = build_translation_unit_decl (NULL_TREE);
debug_hooks->register_main_translation_unit (current_translation_unit);
} }
......
...@@ -296,6 +296,7 @@ const struct gcc_debug_hooks sdb_debug_hooks = ...@@ -296,6 +296,7 @@ const struct gcc_debug_hooks sdb_debug_hooks =
sdbout_end_epilogue, /* end_epilogue */ sdbout_end_epilogue, /* end_epilogue */
sdbout_begin_function, /* begin_function */ sdbout_begin_function, /* begin_function */
sdbout_end_function, /* end_function */ sdbout_end_function, /* end_function */
debug_nothing_tree, /* register_main_translation_unit */
debug_nothing_tree, /* function_decl */ debug_nothing_tree, /* function_decl */
sdbout_early_global_decl, /* early_global_decl */ sdbout_early_global_decl, /* early_global_decl */
sdbout_late_global_decl, /* late_global_decl */ sdbout_late_global_decl, /* late_global_decl */
......
...@@ -194,6 +194,7 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks ...@@ -194,6 +194,7 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks
vmsdbgout_end_epilogue, vmsdbgout_end_epilogue,
vmsdbgout_begin_function, vmsdbgout_begin_function,
vmsdbgout_end_function, vmsdbgout_end_function,
debug_nothing_tree, /* register_main_translation_unit */
vmsdbgout_function_decl, vmsdbgout_function_decl,
vmsdbgout_early_global_decl, vmsdbgout_early_global_decl,
vmsdbgout_late_global_decl, vmsdbgout_late_global_decl,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment