[debug-early] remove deferred_asm_name

Aldy Hernandez aldyh@redhat.com
Tue Jan 6 19:28:00 GMT 2015


As discussed in previous threads, we need to get rid of 
deferred_asm_name (and limbo nodes, etc) as part of the debug-early work.

The original patch for deferred_asm_name came in Alex's patch here:

https://gcc.gnu.org/ml/gcc-patches/2009-06/msg00030.html

One alternative to avoid this mechanism would be to to provide a non 
destructive decl_assembler_name() variant that would just return the 
mangled name, but without setting the .assembler_name field and 
triggering the template instantiation Alex speaks of.  I had a patch for 
this, but Jason was skeptical that the instantiation was still 
happening.  At Jason's request, I have removed deferred_asm_name 
altogether, and tested it by a full bootstrap on _mainline_.

Unless someone can come up with a testcase for the instantiation 
problem, I am going to commit this to the branch within a day or two.

Jason/Richi: Does this patch look reasonable?

Thanks.
Aldy
-------------- next part --------------
commit 4c3da3f77a9a996179ee2b9f05b89d02fa103c95
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Tue Jan 6 11:14:07 2015 -0800

    	* dwarf2out.c: Remove deferred_asm_name.
    	(add_linkage_name): Same.
    	(dwarf2out_finish): Same.
    	(dwarf2out_c_finalize): Same.
    	(move_linkage_attr): Remove.

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 9d60d88..e3ccda2 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -2785,10 +2785,6 @@ static GTY(()) comdat_type_node *comdat_type_list;
 /* A list of DIEs with a NULL parent waiting to be relocated.  */
 static GTY(()) limbo_die_node *limbo_die_list;
 
-/* A list of DIEs for which we may have to generate
-   DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
-static GTY(()) limbo_die_node *deferred_asm_name;
-
 struct dwarf_file_hasher : ggc_hasher<dwarf_file_data *>
 {
   typedef const char *compare_type;
@@ -17007,22 +17003,9 @@ add_linkage_name (dw_die_ref die, tree decl)
       && (TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
       && TREE_PUBLIC (decl)
       && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
-      && die->die_tag != DW_TAG_member)
-    {
-      /* Defer until we have an assembler name set.  */
-      if (!DECL_ASSEMBLER_NAME_SET_P (decl))
-	{
-	  limbo_die_node *asm_name;
-
-	  asm_name = ggc_cleared_alloc<limbo_die_node> ();
-	  asm_name->die = die;
-	  asm_name->created_for = decl;
-	  asm_name->next = deferred_asm_name;
-	  deferred_asm_name = asm_name;
-	}
-      else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
-	add_linkage_attr (die, decl);
-    }
+      && die->die_tag != DW_TAG_member
+      && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
+    add_linkage_attr (die, decl);
 }
 
 /* Add a DW_AT_name attribute and source coordinate attribute for the
@@ -23597,37 +23580,6 @@ comdat_type_hasher::equal (const value_type *type_node_1,
                     DWARF_TYPE_SIGNATURE_SIZE));
 }
 
-/* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
-   to the location it would have been added, should we know its
-   DECL_ASSEMBLER_NAME when we added other attributes.  This will
-   probably improve compactness of debug info, removing equivalent
-   abbrevs, and hide any differences caused by deferring the
-   computation of the assembler name, triggered by e.g. PCH.  */
-
-static inline void
-move_linkage_attr (dw_die_ref die)
-{
-  unsigned ix = vec_safe_length (die->die_attr);
-  dw_attr_node linkage = (*die->die_attr)[ix - 1];
-
-  gcc_assert (linkage.dw_attr == DW_AT_linkage_name
-	      || linkage.dw_attr == DW_AT_MIPS_linkage_name);
-
-  while (--ix > 0)
-    {
-      dw_attr_node *prev = &(*die->die_attr)[ix - 1];
-
-      if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
-	break;
-    }
-
-  if (ix != vec_safe_length (die->die_attr) - 1)
-    {
-      die->die_attr->pop ();
-      die->die_attr->quick_insert (ix, linkage);
-    }
-}
-
 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
    referenced from typed stack ops and count how often they are used.  */
 
@@ -24873,23 +24825,6 @@ dwarf2out_finish (const char *filename)
   resolve_addr (comp_unit_die ());
   move_marked_base_types ();
 
-  for (node = deferred_asm_name; node; node = node->next)
-    {
-      tree decl = node->created_for;
-      /* When generating LTO bytecode we can not generate new assembler
-         names at this point and all important decls got theirs via
-	 free-lang-data.  */
-      if (((!flag_generate_lto && !flag_generate_offload)
-	   || DECL_ASSEMBLER_NAME_SET_P (decl))
-	  && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
-	{
-	  add_linkage_attr (node->die, decl);
-	  move_linkage_attr (node->die);
-	}
-    }
-
-  deferred_asm_name = NULL;
-
   /* Walk through the list of incomplete types again, trying once more to
      emit full debugging info for them.  */
   retry_incomplete_types ();
@@ -25231,7 +25166,6 @@ dwarf2out_c_finalize (void)
   single_comp_unit_die = NULL;
   comdat_type_list = NULL;
   limbo_die_list = NULL;
-  deferred_asm_name = NULL;
   file_table = NULL;
   decl_die_table = NULL;
   common_block_die_table = NULL;


More information about the Gcc-patches mailing list