diff options
author | Tom Tromey <tromey@adacore.com> | 2021-10-04 08:44:22 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2021-10-04 13:45:38 -0600 |
commit | 3456e70c9d69da8d62a0ea1f8c2e643648afc654 (patch) | |
tree | 7959a8dc460685d2e8e3197478eddb4430d48708 /gdb/symtab.c | |
parent | e133de4984cef9acb32fd756c607aa2fa1d090fb (diff) | |
download | fsf-binutils-gdb-3456e70c9d69da8d62a0ea1f8c2e643648afc654.zip fsf-binutils-gdb-3456e70c9d69da8d62a0ea1f8c2e643648afc654.tar.gz fsf-binutils-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/symtab.c')
-rw-r--r-- | gdb/symtab.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index 85e6b08..3f2eb64 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -821,11 +821,11 @@ create_demangled_names_hash (struct objfile_per_bfd_storage *per_bfd) /* See symtab.h */ -char * +gdb::unique_xmalloc_ptr<char> symbol_find_demangled_name (struct general_symbol_info *gsymbol, const char *mangled) { - char *demangled = NULL; + gdb::unique_xmalloc_ptr<char> demangled; int i; if (gsymbol->language () == language_unknown) @@ -931,8 +931,8 @@ general_symbol_info::compute_and_set_names (gdb::string_view linkage_name, linkage_name_copy = linkage_name; if (demangled_name.get () == nullptr) - demangled_name.reset - (symbol_find_demangled_name (this, linkage_name_copy.data ())); + demangled_name + = symbol_find_demangled_name (this, linkage_name_copy.data ()); /* Suppose we have demangled_name==NULL, copy_name==0, and linkage_name_copy==linkage_name. In this case, we already have the @@ -1858,9 +1858,10 @@ demangle_for_lookup (const char *name, enum language lang, lookup, so we can always binary search. */ if (lang == language_cplus) { - char *demangled_name = gdb_demangle (name, DMGL_ANSI | DMGL_PARAMS); + gdb::unique_xmalloc_ptr<char> demangled_name + = gdb_demangle (name, DMGL_ANSI | DMGL_PARAMS); if (demangled_name != NULL) - return storage.set_malloc_ptr (demangled_name); + return storage.set_malloc_ptr (std::move (demangled_name)); /* If we were given a non-mangled name, canonicalize it according to the language (so far only for C++). */ @@ -1870,16 +1871,16 @@ demangle_for_lookup (const char *name, enum language lang, } else if (lang == language_d) { - char *demangled_name = d_demangle (name, 0); + gdb::unique_xmalloc_ptr<char> demangled_name = d_demangle (name, 0); if (demangled_name != NULL) - return storage.set_malloc_ptr (demangled_name); + return storage.set_malloc_ptr (std::move (demangled_name)); } else if (lang == language_go) { - char *demangled_name + gdb::unique_xmalloc_ptr<char> demangled_name = language_def (language_go)->demangle_symbol (name, 0); if (demangled_name != NULL) - return storage.set_malloc_ptr (demangled_name); + return storage.set_malloc_ptr (std::move (demangled_name)); } return name; |