dwarf2out.c (early_dwarf_finished): New global.
authorRichard Biener <rguenther@suse.de>
Mon, 19 Sep 2016 07:20:16 +0000 (07:20 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 19 Sep 2016 07:20:16 +0000 (07:20 +0000)
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

gcc/ChangeLog
gcc/dwarf2out.c
gcc/lto/ChangeLog
gcc/lto/lto.c

index e29c212303af0083a2ec042031f9def17b1b52e8..2f3f91b4a03fa8b04ec22444393991b9f3998edb 100644 (file)
@@ -1,3 +1,14 @@
+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
index 11e011399afb686cbf6d2f6846ca9988376cb510..434a2fc8b5a669c94e6fc3f0c58f3d6a6adf631f 100644 (file)
@@ -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
index 0744822c20e7411682cc54a75c17d5d291d5c056..c5bd7a07a6ea7d1c2f938d075ea7948fbff6e63a 100644 (file)
@@ -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.
index 73d1e26be71bddca03439e36ec6f61083c29deda..c94ed622307eae682d318befc42a5d7990dea716 100644 (file)
@@ -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 ();