aboutsummaryrefslogtreecommitdiff
path: root/gdb/gnu-v2-abi.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2021-10-04 08:44:22 -0600
committerTom Tromey <tromey@adacore.com>2021-10-04 13:45:38 -0600
commit3456e70c9d69da8d62a0ea1f8c2e643648afc654 (patch)
tree7959a8dc460685d2e8e3197478eddb4430d48708 /gdb/gnu-v2-abi.c
parente133de4984cef9acb32fd756c607aa2fa1d090fb (diff)
downloadgdb-3456e70c9d69da8d62a0ea1f8c2e643648afc654.zip
gdb-3456e70c9d69da8d62a0ea1f8c2e643648afc654.tar.gz
gdb-3456e70c9d69da8d62a0ea1f8c2e643648afc654.tar.bz2
Use unique_xmalloc_ptr<char> when demangling
I noticed that some methods in language_defn could use unique_xmalloc_ptr<char> rather than a plain 'char *'. This patch implements this change, fixing up the fallout and changing gdb_demangle to also return this type. In one spot, std::string is used to simplify some related code, and in another, an auto_obstack is used to avoid manual management. Regression tested on x86-64 Fedora 34.
Diffstat (limited to 'gdb/gnu-v2-abi.c')
-rw-r--r--gdb/gnu-v2-abi.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c
index c0200b2..cdcd3d5 100644
--- a/gdb/gnu-v2-abi.c
+++ b/gdb/gnu-v2-abi.c
@@ -189,7 +189,7 @@ gnuv2_value_rtti_type (struct value *v, int *full, LONGEST *top, int *using_enc)
struct type *rtti_type;
CORE_ADDR vtbl;
struct bound_minimal_symbol minsym;
- char *demangled_name, *p;
+ char *p;
const char *linkage_name;
struct type *btype;
struct type *known_type_vptr_basetype;
@@ -248,14 +248,15 @@ gnuv2_value_rtti_type (struct value *v, int *full, LONGEST *top, int *using_enc)
return NULL;
/* If we just skip the prefix, we get screwed by namespaces. */
- demangled_name=gdb_demangle(linkage_name,DMGL_PARAMS|DMGL_ANSI);
- p = strchr (demangled_name, ' ');
+ gdb::unique_xmalloc_ptr<char> demangled_name
+ = gdb_demangle(linkage_name,DMGL_PARAMS|DMGL_ANSI);
+ p = strchr (demangled_name.get (), ' ');
if (p)
*p = '\0';
/* Lookup the type for the name. */
/* FIXME: chastain/2003-11-26: block=NULL is bogus. See pr gdb/1465. */
- rtti_type = cp_lookup_rtti_type (demangled_name, NULL);
+ rtti_type = cp_lookup_rtti_type (demangled_name.get (), NULL);
if (rtti_type == NULL)
return NULL;