aboutsummaryrefslogtreecommitdiff
path: root/binutils/stabs.c
diff options
context:
space:
mode:
Diffstat (limited to 'binutils/stabs.c')
-rw-r--r--binutils/stabs.c26
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);