2009-04-15 Catherine Moore <clm@codesourcery.com>
authorclm <clm@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Apr 2009 21:40:25 +0000 (21:40 +0000)
committerclm <clm@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Apr 2009 21:40:25 +0000 (21:40 +0000)
        * debug.h (set_name):  Declare.
        * dwarf2out.c (dwarf2out_set_name): Declare.
        (dwarf2_debug_hooks): Add set_name.
        (find_AT_string): New.
        (add_AT_string): Call find_AT_string.
        (dwarf2out_set_name): New.
        * cp/decl.c (grokdeclarator): Call set_name.
        * vmsdbgout.c (vmsdbg_debug_hooks): Add set_name_debug_nothing.
        * debug.c (do_nothing_debug_hooks):  Likewise.
        * dbxout.c (dbx_debug_hooks): Likewise.
        * sdbout.c (sdb_debug_hooks): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146137 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cp/decl.c
gcc/dbxout.c
gcc/debug.c
gcc/debug.h
gcc/dwarf2out.c
gcc/sdbout.c
gcc/vmsdbgout.c

index 47f1ce6..fa122a9 100644 (file)
@@ -1,3 +1,17 @@
+2009-04-15  Catherine Moore  <clm@codesourcery.com>
+
+        * debug.h (set_name):  Declare.
+        * dwarf2out.c (dwarf2out_set_name): Declare.
+        (dwarf2_debug_hooks): Add set_name.
+        (find_AT_string): New.
+        (add_AT_string): Call find_AT_string.
+        (dwarf2out_set_name): New.
+        * cp/decl.c (grokdeclarator): Call set_name.
+        * vmsdbgout.c (vmsdbg_debug_hooks): Add set_name_debug_nothing.
+        * debug.c (do_nothing_debug_hooks):  Likewise.
+        * dbxout.c (dbx_debug_hooks): Likewise.
+        * sdbout.c (sdb_debug_hooks): Likewise.
+
 2009-04-15  Michael Eager <eager@eagercon.com>
 
        * config/rs6000/rs6000.c: rs6000_function_value: set function return
index 5ab9392..2c13e84 100644 (file)
@@ -8828,8 +8828,13 @@ grokdeclarator (const cp_declarator *declarator,
 
          /* Replace the anonymous name with the real name everywhere.  */
          for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
-           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
-             TYPE_NAME (t) = decl;
+           {
+             if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
+               {
+                 debug_hooks->set_name (t, decl);
+                 TYPE_NAME (t) = decl;
+               }
+           }
 
          if (TYPE_LANG_SPECIFIC (type))
            TYPE_WAS_ANONYMOUS (type) = 1;
index babba15..dc63c7c 100644 (file)
@@ -376,6 +376,7 @@ const struct gcc_debug_hooks dbx_debug_hooks =
   dbxout_handle_pch,                    /* handle_pch */
   debug_nothing_rtx,                    /* var_location */
   debug_nothing_void,                    /* switch_text_section */
+  debug_nothing_tree_tree,              /* set_name */
   0                                      /* start_end_main_source_file */
 };
 #endif /* DBX_DEBUGGING_INFO  */
index e0beaa9..3946deb 100644 (file)
@@ -50,6 +50,7 @@ const struct gcc_debug_hooks do_nothing_debug_hooks =
   debug_nothing_int,                    /* handle_pch */
   debug_nothing_rtx,                    /* var_location */
   debug_nothing_void,                    /* switch_text_section */
+  debug_nothing_tree_tree,              /* set_name */
   0                                      /* start_end_main_source_file */
 };
 
@@ -67,6 +68,12 @@ debug_nothing_tree (tree decl ATTRIBUTE_UNUSED)
 }
 
 void
+debug_nothing_tree_tree (tree t1 ATTRIBUTE_UNUSED,
+                        tree t2 ATTRIBUTE_UNUSED)
+{
+}
+
+void
 debug_nothing_tree_tree_tree_bool (tree t1 ATTRIBUTE_UNUSED,
                                   tree t2 ATTRIBUTE_UNUSED,
                                   tree t3 ATTRIBUTE_UNUSED,
index e1ee12e..1169c51 100644 (file)
@@ -126,6 +126,8 @@ struct gcc_debug_hooks
      text sections.  */
   void (* switch_text_section) (void);
 
+  void (* set_name) (tree, tree);
+
   /* This is 1 if the debug writer wants to see start and end commands for the
      main source files, and 0 otherwise.  */
   int start_end_main_source_file;
@@ -140,6 +142,7 @@ extern void debug_nothing_int_charstar (unsigned int, const char *);
 extern void debug_nothing_int (unsigned int);
 extern void debug_nothing_int_int (unsigned int, unsigned int);
 extern void debug_nothing_tree (tree);
+extern void debug_nothing_tree_tree (tree, tree);
 extern void debug_nothing_tree_int (tree, int);
 extern void debug_nothing_tree_tree_tree_bool (tree, tree, tree, bool);
 extern bool debug_true_const_tree (const_tree);
index 7d82c47..81a5062 100644 (file)
@@ -4549,6 +4549,7 @@ static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
 static void dwarf2out_abstract_function (tree);
 static void dwarf2out_var_location (rtx);
 static void dwarf2out_begin_function (tree);
+static void dwarf2out_set_name (tree, tree);
 
 /* The debug hooks structure.  */
 
@@ -4582,6 +4583,7 @@ const struct gcc_debug_hooks dwarf2_debug_hooks =
   debug_nothing_int,           /* handle_pch */
   dwarf2out_var_location,
   dwarf2out_switch_text_section,
+  dwarf2out_set_name,
   1                             /* start_end_main_source_file */
 };
 #endif
@@ -5929,12 +5931,9 @@ debug_str_eq (const void *x1, const void *x2)
                 (const char *)x2) == 0;
 }
 
-/* Add a string attribute value to a DIE.  */
-
-static inline void
-add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
+static struct indirect_string_node *
+find_AT_string (const char *str)
 {
-  dw_attr_node attr;
   struct indirect_string_node *node;
   void **slot;
 
@@ -5955,6 +5954,18 @@ add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
     node = (struct indirect_string_node *) *slot;
 
   node->refcount++;
+  return node;
+}
+
+/* Add a string attribute value to a DIE.  */
+
+static inline void
+add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
+{
+  dw_attr_node attr;
+  struct indirect_string_node *node;
+
+  node = find_AT_string (str);
 
   attr.dw_attr = attr_kind;
   attr.dw_attr_val.val_class = dw_val_class_str;
@@ -15763,6 +15774,31 @@ maybe_emit_file (struct dwarf_file_data * fd)
   return fd->emitted_number;
 }
 
+/* Replace DW_AT_name for the decl with name.  */
+static void
+dwarf2out_set_name (tree decl, tree name)
+{
+  dw_die_ref die;
+  dw_attr_ref attr;
+
+  die = TYPE_SYMTAB_DIE (decl);
+  if (!die)
+    return;
+
+  attr = get_AT (die, DW_AT_name);
+  if (attr)
+    {
+      struct indirect_string_node *node;
+
+      node = find_AT_string (dwarf2_name (name, 0));
+      /* replace the string.  */
+      attr->dw_attr_val.v.val_str = node;
+    }
+
+  else
+    add_name_attribute (die, dwarf2_name (name, 0));
+}
 /* Called by the final INSN scan whenever we see a var location.  We
    use it to drop labels in the right places, and throw the location in
    our lookup table.  */
index 1b64a50..9874db7 100644 (file)
@@ -337,6 +337,7 @@ const struct gcc_debug_hooks sdb_debug_hooks =
   debug_nothing_int,                    /* handle_pch */
   debug_nothing_rtx,                    /* var_location */
   debug_nothing_void,                    /* switch_text_section */
+  debug_nothing_tree_tree,              /* set_name */
   0                                      /* start_end_main_source_file */
 };
 
index c655caa..134c7d9 100644 (file)
@@ -211,6 +211,7 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks
    debug_nothing_int,            /* handle_pch */
    debug_nothing_rtx,            /* var_location */
    debug_nothing_void,            /* switch_text_section */
+   debug_nothing_tree_tree,      /* set_name */
    0                              /* start_end_main_source_file */
 };