From: Tom Tromey Date: Mon, 6 Dec 2021 19:20:28 +0000 (-0700) Subject: Avoid extra work in global_symbol_searcher::expand_symtabs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c5a9fcdfeea5e961b8f73417c213fa570c8affb6;p=binutils-gdb.git Avoid extra work in global_symbol_searcher::expand_symtabs I noticed that global_symbol_searcher::expand_symtabs always passes a file matcher to expand_symtabs_matching. However, if 'filenames' is empty, then this always returns true. It's slightly more efficient to pass a null file matcher in this case, because that lets the "quick" symbol implementations skip any filename checks. Regression tested on x86-64 Fedora 34. --- diff --git a/gdb/symtab.c b/gdb/symtab.c index 3f2eb64a7c4..68b6267f878 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -4678,11 +4678,16 @@ global_symbol_searcher::expand_symtabs enum search_domain kind = m_kind; bool found_msymbol = false; + auto do_file_match = [&] (const char *filename, bool basenames) + { + return file_matches (filename, filenames, basenames); + }; + gdb::function_view file_matcher = nullptr; + if (!filenames.empty ()) + file_matcher = do_file_match; + objfile->expand_symtabs_matching - ([&] (const char *filename, bool basenames) - { - return file_matches (filename, filenames, basenames); - }, + (file_matcher, &lookup_name_info::match_any (), [&] (const char *symname) {