[binutils-gdb] [gdb/symtab] Use expand_all_symtabs in maint expand-symtabs

Tom de Vries vries@sourceware.org
Tue Sep 24 08:32:39 GMT 2024


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=510ecbcdfbf3c90761eb9f1d08d63a84999a8b9b

commit 510ecbcdfbf3c90761eb9f1d08d63a84999a8b9b
Author: Tom de Vries <tdevries@suse.de>
Date:   Tue Sep 24 10:32:41 2024 +0200

    [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.

Diff:
---
 gdb/symmisc.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 7f8141588b7..caca1e09f64 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,


More information about the Gdb-cvs mailing list