diff options
author | Pierre-Marie de Rodat <derodat@adacore.com> | 2015-06-11 12:40:10 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2015-06-11 12:40:10 +0000 |
commit | 881a5e608a945bebcfbefcf8c521a2e481610789 (patch) | |
tree | f7c9d03a32db11d1b9f07488e40eac40beba11a8 | |
parent | f13c4673a54c76a1c92018d630f48126349732b0 (diff) | |
download | gcc-881a5e608a945bebcfbefcf8c521a2e481610789.zip gcc-881a5e608a945bebcfbefcf8c521a2e481610789.tar.gz gcc-881a5e608a945bebcfbefcf8c521a2e481610789.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 20 | ||||
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/utils.c | 5 | ||||
-rw-r--r-- | gcc/c/c-decl.c | 1 | ||||
-rw-r--r-- | gcc/cp/decl.c | 2 | ||||
-rw-r--r-- | gcc/dbxout.c | 1 | ||||
-rw-r--r-- | gcc/debug.c | 1 | ||||
-rw-r--r-- | gcc/debug.h | 4 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 27 | ||||
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/f95-lang.c | 1 | ||||
-rw-r--r-- | gcc/sdbout.c | 1 | ||||
-rw-r--r-- | gcc/vmsdbgout.c | 1 |
13 files changed, 73 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6327ef5..902f708 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ad509e0..4eeb13e 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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. diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 9076529..655bfa1 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -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; } diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index 7fd662d..3fde22f 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -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; diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 3bed538..ffd068a 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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); diff --git a/gcc/dbxout.c b/gcc/dbxout.c index 48b5065..94fac42 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -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 */ diff --git a/gcc/debug.c b/gcc/debug.c index 9c621f8..ab92cc8 100644 --- a/gcc/debug.c +++ b/gcc/debug.c @@ -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 */ diff --git a/gcc/debug.h b/gcc/debug.h index e7e1334..269c4d8 100644 --- a/gcc/debug.h +++ b/gcc/debug.h @@ -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 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index ee2bcb1..8a36fe8 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d77cc1a..57a9997 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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. diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c index 6daac83..2c055f5 100644 --- a/gcc/fortran/f95-lang.c +++ b/gcc/fortran/f95-lang.c @@ -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); } diff --git a/gcc/sdbout.c b/gcc/sdbout.c index f5671c6..033886a 100644 --- a/gcc/sdbout.c +++ b/gcc/sdbout.c @@ -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 */ diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c index 8297e02..8c917e0 100644 --- a/gcc/vmsdbgout.c +++ b/gcc/vmsdbgout.c @@ -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, |