diff options
author | Richard Biener <rguenther@suse.de> | 2016-09-19 07:20:16 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-09-19 07:20:16 +0000 |
commit | 321e76fbf83720a7d88948d3e157ea9097e099ad (patch) | |
tree | b2a2ed3d1067076874c7b9afa52e6cdfe3344e21 /gcc | |
parent | ae5276392fb59dbdec56dd8cc6cc8253d9334c8b (diff) | |
download | gcc-321e76fbf83720a7d88948d3e157ea9097e099ad.zip gcc-321e76fbf83720a7d88948d3e157ea9097e099ad.tar.gz gcc-321e76fbf83720a7d88948d3e157ea9097e099ad.tar.bz2 |
dwarf2out.c (early_dwarf_finished): New global.
2016-09-16 Richard Biener <rguenther@suse.de>
* dwarf2out.c (early_dwarf_finished): New global.
(set_early_dwarf::set_early_dwarf): Assert early_dwarf_finished
is false.
(dwarf2out_early_finish): Set early_dwarf_finished at the end,
if called from LTO exit early.
(dwarf2out_late_global_decl): When being during the early
debug phase do not add locations but only const value attributes.
Adjust the way we generate early DIEs for LTO.
lto/
* lto.c (lto_main): Invoke early_finish debug hook.
From-SVN: r240228
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 45 | ||||
-rw-r--r-- | gcc/lto/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/lto/lto.c | 3 |
4 files changed, 55 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e29c212..2f3f91b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2016-09-19 Richard Biener <rguenther@suse.de> + * dwarf2out.c (early_dwarf_finished): New global. + (set_early_dwarf::set_early_dwarf): Assert early_dwarf_finished + is false. + (dwarf2out_early_finish): Set early_dwarf_finished at the end, + if called from LTO exit early. + (dwarf2out_late_global_decl): When being during the early + debug phase do not add locations but only const value attributes. + Adjust the way we generate early DIEs for LTO. + +2016-09-19 Richard Biener <rguenther@suse.de> + PR middle-end/77605 * tree-data-ref.c (analyze_subscript_affine_affine): Use the proper niter to bound the loops. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 11e0113..434a2fc 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -2711,9 +2711,14 @@ die_node; /* Set to TRUE while dwarf2out_early_global_decl is running. */ static bool early_dwarf; +static bool early_dwarf_finished; struct set_early_dwarf { bool saved; - set_early_dwarf () : saved(early_dwarf) { early_dwarf = true; } + set_early_dwarf () : saved(early_dwarf) + { + gcc_assert (! early_dwarf_finished); + early_dwarf = true; + } ~set_early_dwarf () { early_dwarf = saved; } }; @@ -23878,18 +23883,31 @@ dwarf2out_early_global_decl (tree decl) static void dwarf2out_late_global_decl (tree decl) { - /* We have to generate early debug late for LTO. */ - if (in_lto_p) - dwarf2out_early_global_decl (decl); - - /* Fill-in any location information we were unable to determine - on the first pass. */ + /* Fill-in any location information we were unable to determine + on the first pass. */ if (TREE_CODE (decl) == VAR_DECL && !POINTER_BOUNDS_P (decl)) { dw_die_ref die = lookup_decl_die (decl); + + /* We have to generate early debug late for LTO. */ + if (! die && in_lto_p) + { + dwarf2out_decl (decl); + die = lookup_decl_die (decl); + } + if (die) - add_location_or_const_value_attribute (die, decl, false); + { + /* We get called during the early debug phase via the symtab + code invoking late_global_decl for symbols that are optimized + out. When the early phase is not finished, do not add + locations. */ + if (! early_dwarf_finished) + tree_add_const_value_attribute_for_decl (die, decl); + else + add_location_or_const_value_attribute (die, decl, false); + } } } @@ -28137,6 +28155,14 @@ dwarf2out_early_finish (void) { set_early_dwarf s; + /* With LTO early dwarf was really finished at compile-time, so make + sure to adjust the phase after annotating the LTRANS CU DIE. */ + if (in_lto_p) + { + early_dwarf_finished = true; + return; + } + /* Walk through the list of incomplete types again, trying once more to emit full debugging info for them. */ retry_incomplete_types (); @@ -28163,6 +28189,9 @@ dwarf2out_early_finish (void) } } deferred_asm_name = NULL; + + /* The early debug phase is now finished. */ + early_dwarf_finished = true; } /* Reset all state within dwarf2out.c so that we can rerun the compiler diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 0744822..c5bd7a0 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,7 @@ +2016-09-19 Richard Biener <rguenther@suse.de> + + * lto.c (lto_main): Invoke early_finish debug hook. + 2016-07-25 Richard Biener <rguenther@suse.de> * lto.c (compare_tree_sccs_1): Remove streamer_handle_as_builtin_p uses. diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 73d1e26..c94ed62 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -3315,6 +3315,9 @@ lto_main (void) if (!flag_ltrans) lto_promote_statics_nonwpa (); + /* Annotate the CU DIE and mark the early debug phase as finished. */ + debug_hooks->early_finish (); + /* Let the middle end know that we have read and merged all of the input files. */ symtab->compile (); |