diff options
Diffstat (limited to 'binutils/stabs.c')
-rw-r--r-- | binutils/stabs.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/binutils/stabs.c b/binutils/stabs.c index e84aa6f..18788b9 100644 --- a/binutils/stabs.c +++ b/binutils/stabs.c @@ -3037,15 +3037,27 @@ parse_stab_argtypes (void *dhandle, struct stab_handle *info, && fieldname[1] == 'p' && (fieldname[2] == '$' || fieldname[2] == '.')) { - /* Opname selection is no longer supported by libiberty's demangler. */ - return DEBUG_TYPE_NULL; - } + const char *opname; - physname = (char *) xmalloc (mangled_name_len); - if (is_constructor) - physname[0] = '\0'; + opname = cplus_mangle_opname (fieldname + 3, 0); + if (opname == NULL) + { + fprintf (stderr, _("No mangling for \"%s\"\n"), fieldname); + return DEBUG_TYPE_NULL; + } + mangled_name_len += strlen (opname); + physname = (char *) xmalloc (mangled_name_len); + strncpy (physname, fieldname, 3); + strcpy (physname + 3, opname); + } else - strcpy (physname, fieldname); + { + physname = (char *) xmalloc (mangled_name_len); + if (is_constructor) + physname[0] = '\0'; + else + strcpy (physname, fieldname); + } physname_len = strlen (physname); strcat (physname, buf); |