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:
parent
f13c4673a5
commit
881a5e608a
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue