diff options
author | Elena Zannoni <ezannoni@kwikemart.cygnus.com> | 2000-10-12 19:34:27 +0000 |
---|---|---|
committer | Elena Zannoni <ezannoni@kwikemart.cygnus.com> | 2000-10-12 19:34:27 +0000 |
commit | 235d1e032292b26ef7f9e66bab679edc8455f535 (patch) | |
tree | e5edb7a50332073dc34dc7dae258ca59012f2462 /gdb/symtab.c | |
parent | 627427debc29d3c6758a637edc47d6b6fa2860fd (diff) | |
download | gdb-235d1e032292b26ef7f9e66bab679edc8455f535.zip gdb-235d1e032292b26ef7f9e66bab679edc8455f535.tar.gz gdb-235d1e032292b26ef7f9e66bab679edc8455f535.tar.bz2 |
2000-10-12 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
From Daniel Berlin <dberlin@redhat.com> :
* symtab.h (SYMBOL_INIT_DEMANGLED_NAME): Initialize the symbol
language to auto instead of unknown, so it will try to demangle
the symbol.
* symtab.h (OPNAME_PREFIX_P): Change operator prefix to correct value.
* symtab.c (gdb_mangle_name): Properly handle C++ operators.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r-- | gdb/symtab.c | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index 3a97e10..56a1795 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -303,6 +303,9 @@ gdb_mangle_name (struct type *type, int method_id, int signature_id) char buf[20]; int len = (newname == NULL ? 0 : strlen (newname)); + if (OPNAME_PREFIX_P (field_name)) + return xstrdup (physname); + is_full_physname_constructor = ((physname[0] == '_' && physname[1] == '_' && (isdigit (physname[2]) || physname[2] == 'Q' || physname[2] == 't')) @@ -338,25 +341,8 @@ gdb_mangle_name (struct type *type, int method_id, int signature_id) sprintf (buf, "__%s%s%d", const_prefix, volatile_prefix, len); } mangled_name_len = ((is_constructor ? 0 : strlen (field_name)) - + strlen (buf) + len - + strlen (physname) - + 1); - - /* Only needed for GNU-mangled names. ANSI-mangled names - work with the normal mechanisms. */ - if (OPNAME_PREFIX_P (field_name)) - { - const char *opname = cplus_mangle_opname (field_name + 3, 0); - if (opname == NULL) - error ("No mangling for \"%s\"", field_name); - mangled_name_len += strlen (opname); - mangled_name = (char *) xmalloc (mangled_name_len); + + strlen (buf) + len + strlen (physname) + 1); - strncpy (mangled_name, field_name, 3); - mangled_name[3] = '\0'; - strcat (mangled_name, opname); - } - else { mangled_name = (char *) xmalloc (mangled_name_len); if (is_constructor) |