aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-09-24 10:32:41 +0200
committerTom de Vries <tdevries@suse.de>2024-09-24 10:32:41 +0200
commit510ecbcdfbf3c90761eb9f1d08d63a84999a8b9b (patch)
treee8901aa679f46e4e11a7f1b5890cee3bfc0ef05b
parent21fc5abfb1f15f66f1a4a805a6b74ebfaa9b583d (diff)
downloadgdb-510ecbcdfbf3c90761eb9f1d08d63a84999a8b9b.zip
gdb-510ecbcdfbf3c90761eb9f1d08d63a84999a8b9b.tar.gz
gdb-510ecbcdfbf3c90761eb9f1d08d63a84999a8b9b.tar.bz2
[gdb/symtab] Use expand_all_symtabs in maint expand-symtabs
When issuing a command "maint expand-symtabs", maintenance_expand_symtabs is called with regexp == nullptr, and calls expand_symtabs_matching like so: ... objfile->expand_symtabs_matching ([&] (const char *filename, bool basenames) { /* KISS: Only apply the regexp to the complete file name. */ return (!basenames && (regexp == NULL || re_exec (filename))); }, ... To expand all symtabs gdb usually uses expand_all_symtabs (used for -readnow), but here we try to handle it in the filename_matcher argument. Make this more similar to how gdb usually works by using expand_all_symtabs. A previous version of the patch instead used a nullptr filename_matcher for the regexp == nullptr case. That approach regressed test-cases gdb.dwarf2/dwz-unused-pu.exp and gdb.dwarf2/dw2-dummy.exp. Tested on x86_64-linux.
-rw-r--r--gdb/symmisc.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 7f81415..caca1e0 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -903,18 +903,25 @@ maintenance_expand_symtabs (const char *args, int from_tty)
}
}
- if (regexp)
- re_comp (regexp);
+ if (regexp == nullptr)
+ {
+ for (struct program_space *pspace : program_spaces)
+ for (objfile *objfile : pspace->objfiles ())
+ objfile->expand_all_symtabs ();
+
+ return;
+ }
+
+ re_comp (regexp);
for (struct program_space *pspace : program_spaces)
for (objfile *objfile : pspace->objfiles ())
objfile->expand_symtabs_matching
([&] (const char *filename, bool basenames)
- {
- /* KISS: Only apply the regexp to the complete file name. */
- return (!basenames
- && (regexp == NULL || re_exec (filename)));
- },
+ {
+ /* KISS: Only apply the regexp to the complete file name. */
+ return !basenames && re_exec (filename);
+ },
NULL,
NULL,
NULL,