debug.h (set_name): Declare.

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.

From-SVN: r146137
This commit is contained in:
Catherine Moore 2009-04-15 17:40:25 -04:00 committed by Catherine Moore
parent 4268e5a550
commit a417cdd963
8 changed files with 75 additions and 7 deletions

View 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

View 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;

View 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 */

View 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 */
};
@ -66,6 +67,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,

View 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);

View 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. */

View 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 */
};

View 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 */
};