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.
This commit is contained in:
parent
627427debc
commit
235d1e0322
@ -1,3 +1,13 @@
|
||||
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.
|
||||
|
||||
2000-10-12 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
|
||||
|
||||
From Daniel Berlin <dberlin@redhat.com> :
|
||||
|
22
gdb/symtab.c
22
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);
|
||||
+ 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);
|
||||
|
||||
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)
|
||||
|
14
gdb/symtab.h
14
gdb/symtab.h
@ -170,6 +170,8 @@ extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, asection *);
|
||||
#define SYMBOL_INIT_DEMANGLED_NAME(symbol,obstack) \
|
||||
do { \
|
||||
char *demangled = NULL; \
|
||||
if (SYMBOL_LANGUAGE (symbol) == language_unknown) \
|
||||
SYMBOL_LANGUAGE (symbol) = language_auto; \
|
||||
if (SYMBOL_LANGUAGE (symbol) == language_cplus \
|
||||
|| SYMBOL_LANGUAGE (symbol) == language_auto) \
|
||||
{ \
|
||||
@ -222,10 +224,6 @@ extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, asection *);
|
||||
SYMBOL_CHILL_DEMANGLED_NAME (symbol) = NULL; \
|
||||
} \
|
||||
} \
|
||||
if (SYMBOL_LANGUAGE (symbol) == language_auto) \
|
||||
{ \
|
||||
SYMBOL_LANGUAGE (symbol) = language_unknown; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Macro that returns the demangled name for a symbol based on the language
|
||||
@ -1047,13 +1045,9 @@ struct partial_symtab
|
||||
#define VTBL_FNADDR_OFFSET 2
|
||||
|
||||
/* Macro that yields non-zero value iff NAME is the prefix for C++ operator
|
||||
names. If you leave out the parenthesis here you will lose!
|
||||
Currently 'o' 'p' CPLUS_MARKER is used for both the symbol in the
|
||||
symbol-file and the names in gdb's symbol table.
|
||||
Note that this macro is g++ specific (FIXME). */
|
||||
|
||||
names. If you leave out the parenthesis here you will lose! */
|
||||
#define OPNAME_PREFIX_P(NAME) \
|
||||
((NAME)[0] == 'o' && (NAME)[1] == 'p' && is_cplus_marker ((NAME)[2]))
|
||||
(!strncmp (NAME, "operator", 8))
|
||||
|
||||
/* Macro that yields non-zero value iff NAME is the prefix for C++ vtbl
|
||||
names. Note that this macro is g++ specific (FIXME).
|
||||
|
Loading…
Reference in New Issue
Block a user