+2020-04-14 Tom de Vries <tdevries@suse.de>
+
+ PR symtab/25720
+ * symmisc.c (maintenance_expand_symtabs): Call expand_symtabs_matching
+ with NULL symbol_matcher and lookup_name.
+ * psymtab.c (psym_expand_symtabs_matching): Handle NULL symbol_matcher
+ and lookup_name.
+ * dwarf2/read.c (dw2_expand_symtabs_matching)
+ (dw2_debug_names_expand_symtabs_matching): Same.
+ * symfile.h (struct quick_symbol_functions::expand_symtabs_matching):
+ Make lookup_name a pointer. Update comment.
+ * symtab.c (global_symbol_searcher::expand_symtabs): Handle
+ lookup_name being a pointer.
+ * symfile.c (expand_symtabs_matching): Same.
+ * symfile-debug.c (debug_qf_expand_symtabs_matching): Same.
+ * linespec.c (iterate_over_all_matching_symtabs): Same.
+
2020-04-13 Tom Tromey <tom@tromey.com>
* run-on-main-thread.c: Update include.
dw2_expand_symtabs_matching
(struct objfile *objfile,
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
- const lookup_name_info &lookup_name,
+ const lookup_name_info *lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind)
dw_expand_symtabs_matching_file_matcher (dwarf2_per_objfile, file_matcher);
+ if (symbol_matcher == NULL && lookup_name == NULL)
+ {
+ for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
+ {
+ QUIT;
+
+ dw2_expand_symtabs_matching_one (per_cu, file_matcher,
+ expansion_notify);
+ }
+ return;
+ }
+
mapped_index &index = *dwarf2_per_objfile->index_table;
- dw2_expand_symtabs_matching_symbol (index, lookup_name,
+ dw2_expand_symtabs_matching_symbol (index, *lookup_name,
symbol_matcher,
kind, [&] (offset_type idx)
{
dw2_debug_names_expand_symtabs_matching
(struct objfile *objfile,
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
- const lookup_name_info &lookup_name,
+ const lookup_name_info *lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind)
dw_expand_symtabs_matching_file_matcher (dwarf2_per_objfile, file_matcher);
+ if (symbol_matcher == NULL && lookup_name == NULL)
+ {
+ for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
+ {
+ QUIT;
+
+ dw2_expand_symtabs_matching_one (per_cu, file_matcher,
+ expansion_notify);
+ }
+ return;
+ }
+
mapped_debug_names &map = *dwarf2_per_objfile->debug_names_table;
- dw2_expand_symtabs_matching_symbol (map, lookup_name,
+ dw2_expand_symtabs_matching_symbol (map, *lookup_name,
symbol_matcher,
kind, [&] (offset_type namei)
{
if (objfile->sf)
objfile->sf->qf->expand_symtabs_matching (objfile,
NULL,
- lookup_name,
+ &lookup_name,
NULL, NULL,
search_domain);
psym_expand_symtabs_matching
(struct objfile *objfile,
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
- const lookup_name_info &lookup_name_in,
+ const lookup_name_info *lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain domain)
{
- lookup_name_info lookup_name = lookup_name_in.make_ignore_params ();
-
/* Clear the search flags. */
for (partial_symtab *ps : require_partial_symbols (objfile, true))
ps->searched_flag = PST_NOT_SEARCHED;
continue;
}
- if (recursively_search_psymtabs (ps, objfile, domain,
- lookup_name, symbol_matcher))
+ if ((symbol_matcher == NULL && lookup_name == NULL)
+ || recursively_search_psymtabs (ps, objfile, domain,
+ lookup_name->make_ignore_params (),
+ symbol_matcher))
{
struct compunit_symtab *symtab =
psymtab_to_symtab (objfile, ps);
debug_qf_expand_symtabs_matching
(struct objfile *objfile,
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
- const lookup_name_info &lookup_name,
+ const lookup_name_info *lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind)
{
if (objfile->sf)
objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher,
- lookup_name,
+ &lookup_name,
symbol_matcher,
expansion_notify, kind);
}
names (the passed file name is already only the lbasename'd
part).
- Otherwise, if KIND does not match, this symbol is skipped.
+ If the file is not skipped, and SYMBOL_MATCHER and LOOKUP_NAME are NULL,
+ the symbol table is expanded.
- If even KIND matches, SYMBOL_MATCHER is called for each symbol
- defined in the file. The symbol "search" name is passed to
- SYMBOL_MATCHER.
+ Otherwise, individual symbols are considered.
+
+ If KIND does not match, the symbol is skipped.
+
+ If the symbol name does not match LOOKUP_NAME, the symbol is skipped.
If SYMBOL_MATCHER returns false, then the symbol is skipped.
void (*expand_symtabs_matching)
(struct objfile *objfile,
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
- const lookup_name_info &lookup_name,
+ const lookup_name_info *lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind);
return (!basenames
&& (regexp == NULL || re_exec (filename)));
},
- lookup_name_info::match_any (),
- [] (const char *symname)
- {
- /* Since we're not searching on symbols, just return true. */
- return true;
- },
+ NULL,
+ NULL,
NULL,
ALL_DOMAIN);
}
{
return file_matches (filename, filenames, basenames);
},
- lookup_name_info::match_any (),
+ &lookup_name_info::match_any (),
[&] (const char *symname)
{
return (!preg.has_value ()
+2020-04-14 Tom de Vries <tdevries@suse.de>
+
+ PR symtab/25720
+ * gdb.base/maint-expand-symbols-header-file.c: New test.
+ * gdb.base/maint-expand-symbols-header-file.exp: New file.
+ * gdb.base/maint-expand-symbols-header-file.h: New test.
+
2020-04-14 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.dwarf2/dw2-inline-many-frames.exp (get_func_info): Delete.
--- /dev/null
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2020 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include "maint-expand-symbols-header-file.h"
+
+int
+main (void)
+{
+ printf ("hello: %s\n", foo ());
+ return 0;
+}
--- /dev/null
+# Copyright 2020 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Test-case to verify that symbol-less symtabs are expanded by
+# "maint expand-symtabs".
+
+standard_testfile .c
+
+if {[prepare_for_testing "failed to prepare" $testfile \
+ $srcfile {debug nowarnings}]} {
+ return -1
+}
+
+set test "verify no symtabs are expanded"
+if { [readnow] } {
+ unsupported $test
+ return -1
+}
+gdb_test_no_output "maint info symtabs" $test
+
+# Expand the header file symtab.
+gdb_test_no_output "maint expand-symtabs maint-expand-symbols-header-file.h"
+
+# Check that the include symtab was in fact expanded.
+set file_re "\[^\r\n\]*/maint-expand-symbols-header-file.h"
+gdb_test "maint info symtabs" \
+ "\r\n\t{ symtab $file_re \\(\\(struct symtab \\*\\) $hex\\)\r\n.*" \
+ "check header file psymtab expansion"
+
+# Check that the symtab the include symtab was referring to was expanded.
+set file_re "\[^\r\n\]*/maint-expand-symbols-header-file.c"
+gdb_test "maint info symtabs" \
+ "\r\n\t{ symtab $file_re \\(\\(struct symtab \\*\\) $hex\\)\r\n.*" \
+ "check source file psymtab expansion"
--- /dev/null
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2020 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+inline static const char*
+foo (void)
+{
+ return "foo";
+}