diff options
author | clm <clm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-15 21:40:25 +0000 |
---|---|---|
committer | clm <clm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-15 21:40:25 +0000 |
commit | 8d17cbdd62b3a33333ada4ea4100516bf4931a88 (patch) | |
tree | 0402e3e8283f7c4c4e6a30872b20d24962d60c70 /gcc/dwarf2out.c | |
parent | a2d73c62af929b53cc20a9a3145bca17a5bab2c1 (diff) | |
download | gcc-8d17cbdd62b3a33333ada4ea4100516bf4931a88.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146137 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 7d82c47679a..81a5062fc20 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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. */ |