diff options
author | Tom Tromey <tom@tromey.com> | 2020-05-08 14:14:05 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-05-08 14:14:06 -0600 |
commit | 596dc4adfff347b4d8dc1f7e4eb57b8f2f342281 (patch) | |
tree | 612ad84effaac4a52857ea209f8297f0a1859340 /gdb/linespec.c | |
parent | bf4cb9bee210298c813f87aae005432d2e934449 (diff) | |
download | gdb-596dc4adfff347b4d8dc1f7e4eb57b8f2f342281.zip gdb-596dc4adfff347b4d8dc1f7e4eb57b8f2f342281.tar.gz gdb-596dc4adfff347b4d8dc1f7e4eb57b8f2f342281.tar.bz2 |
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 <tom@tromey.com>
* symtab.h (class demangle_result_storage) <set_malloc_ptr>: New
overload.
<swap_string, m_string>: 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.
Diffstat (limited to 'gdb/linespec.c')
-rw-r--r-- | gdb/linespec.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gdb/linespec.c b/gdb/linespec.c index 6e4fe6c..6007cd2 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -3898,9 +3898,10 @@ find_linespec_symbols (struct linespec_state *state, std::vector <block_symbol> *symbols, std::vector<bound_minimal_symbol> *minsyms) { - std::string canon = cp_canonicalize_string_no_typedefs (lookup_name); - if (!canon.empty ()) - lookup_name = canon.c_str (); + gdb::unique_xmalloc_ptr<char> canon + = cp_canonicalize_string_no_typedefs (lookup_name); + if (canon != nullptr) + lookup_name = canon.get (); /* It's important to not call expand_symtabs_matching unnecessarily as it can really slow things down (by unnecessarily expanding |