From 596dc4adfff347b4d8dc1f7e4eb57b8f2f342281 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 8 May 2020 14:14:05 -0600 Subject: Speed up psymbol reading by removing a copy I noticed that cp_canonicalize_string and friends copy a unique_xmalloc_ptr to a std::string. However, this copy isn't genuinely needed anywhere, and it serves to slow down DWARF psymbol reading. This patch removes the copy and updates the callers to adapt. This speeds up the reader from 1.906 seconds (mean of 10 runs, of gdb on a copy of itself) to 1.888 seconds (mean of 10 runs, on the same copy as the first trial). gdb/ChangeLog 2020-05-08 Tom Tromey * symtab.h (class demangle_result_storage) : New overload. : Remove. * symtab.c (demangle_for_lookup, completion_list_add_symbol): Update. * stabsread.c (define_symbol, read_type): Update. * linespec.c (find_linespec_symbols): Update. * gnu-v3-abi.c (gnuv3_get_typeid): Update. * dwarf2/read.c (dwarf2_canonicalize_name): Update. * dbxread.c (read_dbx_symtab): Update. * cp-support.h (cp_canonicalize_string_full) (cp_canonicalize_string, cp_canonicalize_string_no_typedefs): Return unique_xmalloc_ptr. * cp-support.c (inspect_type): Update. (cp_canonicalize_string_full): Return unique_xmalloc_ptr. (cp_canonicalize_string_no_typedefs, cp_canonicalize_string): Likewise. * c-typeprint.c (print_name_maybe_canonical): Update. * break-catch-throw.c (check_status_exception_catchpoint): Update. --- gdb/cp-support.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'gdb/cp-support.h') diff --git a/gdb/cp-support.h b/gdb/cp-support.h index 6f14834..6ca8983 100644 --- a/gdb/cp-support.h +++ b/gdb/cp-support.h @@ -77,15 +77,16 @@ struct demangle_parse_info /* Functions from cp-support.c. */ -extern std::string cp_canonicalize_string (const char *string); +extern gdb::unique_xmalloc_ptr cp_canonicalize_string + (const char *string); -extern std::string cp_canonicalize_string_no_typedefs (const char *string); +extern gdb::unique_xmalloc_ptr cp_canonicalize_string_no_typedefs + (const char *string); typedef const char *(canonicalization_ftype) (struct type *, void *); -extern std::string cp_canonicalize_string_full (const char *string, - canonicalization_ftype *finder, - void *data); +extern gdb::unique_xmalloc_ptr cp_canonicalize_string_full + (const char *string, canonicalization_ftype *finder, void *data); extern char *cp_class_name_from_physname (const char *physname); -- cgit v1.1