From 0eb0a82097beda29e9face374bf45205a8748b9e Mon Sep 17 00:00:00 2001 From: Michael Tiemann Date: Mon, 20 Jan 1992 16:55:45 +0000 Subject: [PATCH] Fix demangling of destructors, and fix a minor indentation problem. --- gdb/ChangeLog | 4 ++++ gdb/buildsym.c | 2 +- gdb/cplus-dem.c | 17 +++++++++++++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ae583edcbfc..12ce372ed0f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +Mon Jan 20 08:54:00 1992 Michael Tiemann (tiemann at cygnus.com) + + * cplus-dem.c (cplus_demangle): Correctly demangle destructors. + Sat Jan 18 17:17:45 1992 Stu Grossman (grossman at cygnus.com) * Makefile.in (HFILES): Add partial-stab.h. diff --git a/gdb/buildsym.c b/gdb/buildsym.c index 37baacd094d..ae1d9f93e66 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -2461,7 +2461,7 @@ read_struct_type (pp, type) if (nfn_fields) { - TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *) + TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *) obstack_alloc (symbol_obstack, sizeof (struct fn_fieldlist) * nfn_fields); TYPE_NFN_FIELDS (type) = nfn_fields; diff --git a/gdb/cplus-dem.c b/gdb/cplus-dem.c index e58a9552e71..626b756f7f4 100644 --- a/gdb/cplus-dem.c +++ b/gdb/cplus-dem.c @@ -290,11 +290,20 @@ cplus_demangle (type, arg_mode) /* destructor */ if (type[0] == '_' && type[1] == CPLUS_MARKER && type[2] == '_') { - int n = (strlen (type) - 3)*2 + 3 + 2 + 1; - char *tem = (char *) xmalloc (n); - strcpy (tem, type + 3); + int n; + char *tem; + + type += 3; /* Get past _$_ at front. */ + while (isdigit (*type)) + /* If there are digits at the front, it's because + of new 2.0 name mangling. Just skip them. */ + type++; + + n = strlen (type)*2 + 3 + 2 + 1; + tem = (char *) xmalloc (n); + strcpy (tem, type); strcat (tem, "::~"); - strcat (tem, type + 3); + strcat (tem, type); if (print_arg_types) strcat (tem, "()"); return tem; -- 2.30.2