public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH 4/9] Add 'domain' parameter to expand_symtabs_matching
Date: Thu, 25 Mar 2021 11:04:53 -0600	[thread overview]
Message-ID: <20210325170458.2351251-5-tom@tromey.com> (raw)
In-Reply-To: <20210325170458.2351251-1-tom@tromey.com>

Currently, expand_symtabs_matching only accepts a search_domain
parameter.  However, lookup_symbol uses a domain_enum instead, and the
two, confusingly, do quite different things -- one cannot emulate the
other.  So, this patch adds a domain_enum parameter to
expand_symtabs_matching, with UNDEF_DOMAIN used as a wildcard.

This is another step toward replacing lookup_symbol with
expand_symtabs_matching.

2021-03-25  Tom Tromey  <tom@tromey.com>

	* symtab.c (global_symbol_searcher::expand_symtabs): Update.
	* symmisc.c (maintenance_expand_symtabs): Update.
	* symfile.c (expand_symtabs_matching): Update.
	* symfile-debug.c (objfile::expand_symtabs_matching): Add 'domain'
	parameter.
	* quick-symbol.h (struct quick_symbol_functions)
	<expand_symtabs_matching>: Add 'domain' parameter.
	* psymtab.c (recursively_search_psymtabs)
	(psymbol_functions::expand_symtabs_matching): Add 'domain'
	parameter.
	* psympriv.h (struct psymbol_functions) <expand_symtabs_matching>:
	Add 'domain' parameter.
	* objfiles.h (struct objfile) <expand_symtabs_matching>: Add
	'domain' parameter.
	* linespec.c (iterate_over_all_matching_symtabs): Update.
	* dwarf2/read.c (struct dwarf2_gdb_index)
	<expand_symtabs_matching>: Add 'domain' parameter.
	(struct dwarf2_debug_names_index) <expand_symtabs_matching>: Add
	'domain' parameter.
	(dw2_expand_symtabs_matching)
	(dwarf2_gdb_index::expand_symtabs_matching)
	(dw2_debug_names_iterator)
	(dwarf2_debug_names_index::expand_symtabs_matching): Add 'domain'
	parameter.
---
 gdb/ChangeLog       | 27 +++++++++++++++++++++++++++
 gdb/dwarf2/read.c   | 13 ++++++++++---
 gdb/linespec.c      |  1 +
 gdb/objfiles.h      |  1 +
 gdb/psympriv.h      |  1 +
 gdb/psymtab.c       | 34 ++++++++++++++++++++--------------
 gdb/quick-symbol.h  |  4 +++-
 gdb/symfile-debug.c |  3 ++-
 gdb/symfile.c       |  1 +
 gdb/symmisc.c       |  1 +
 gdb/symtab.c        |  1 +
 11 files changed, 68 insertions(+), 19 deletions(-)

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 36177ebc944..195def9d355 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -2261,6 +2261,7 @@ struct dwarf2_gdb_index : public dwarf2_base_index_functions
      gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
      gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
      block_search_flags search_flags,
+     domain_enum domain,
      enum search_domain kind) override;
 };
 
@@ -2291,6 +2292,7 @@ struct dwarf2_debug_names_index : public dwarf2_base_index_functions
      gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
      gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
      block_search_flags search_flags,
+     domain_enum domain,
      enum search_domain kind) override;
 };
 
@@ -4861,6 +4863,7 @@ dw2_expand_symtabs_matching
    gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
    gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
    block_search_flags search_flags,
+   domain_enum domain,
    enum search_domain kind)
 {
   dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
@@ -4909,11 +4912,12 @@ dwarf2_gdb_index::expand_symtabs_matching
      gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
      gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
      block_search_flags search_flags,
+     domain_enum domain,
      enum search_domain kind)
 {
   return dw2_expand_symtabs_matching (objfile, file_matcher, lookup_name,
 				      symbol_matcher, expansion_notify,
-				      search_flags, kind);
+				      search_flags, domain, kind);
 }
 
 /* A helper for dw2_find_pc_sect_compunit_symtab which finds the most specific
@@ -5396,8 +5400,10 @@ class dw2_debug_names_iterator
 
   dw2_debug_names_iterator (const mapped_debug_names &map,
 			    search_domain search, uint32_t namei,
-			    dwarf2_per_objfile *per_objfile)
+			    dwarf2_per_objfile *per_objfile,
+			    domain_enum domain = UNDEF_DOMAIN)
     : m_map (map),
+      m_domain (domain),
       m_search (search),
       m_addr (find_vec_in_debug_names (map, namei, per_objfile)),
       m_per_objfile (per_objfile)
@@ -5948,6 +5954,7 @@ dwarf2_debug_names_index::expand_symtabs_matching
    gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
    gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
    block_search_flags search_flags,
+   domain_enum domain,
    enum search_domain kind)
 {
   dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
@@ -5981,7 +5988,7 @@ dwarf2_debug_names_index::expand_symtabs_matching
     {
       /* The name was matched, now expand corresponding CUs that were
 	 marked.  */
-      dw2_debug_names_iterator iter (map, kind, namei, per_objfile);
+      dw2_debug_names_iterator iter (map, kind, namei, per_objfile, domain);
 
       struct dwarf2_per_cu_data *per_cu;
       while ((per_cu = iter.next ()) != NULL)
diff --git a/gdb/linespec.c b/gdb/linespec.c
index f37861b343a..03a11fda214 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1172,6 +1172,7 @@ iterate_over_all_matching_symtabs
 	  objfile->expand_symtabs_matching (NULL, &lookup_name, NULL, NULL,
 					    (SEARCH_GLOBAL_BLOCK
 					     | SEARCH_STATIC_BLOCK),
+					    UNDEF_DOMAIN,
 					    search_domain);
 
 	  for (compunit_symtab *cu : objfile->compunits ())
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index 5c362d509e2..22e7d7d84e1 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -581,6 +581,7 @@ struct objfile
      gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
      gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
      block_search_flags search_flags,
+     domain_enum domain,
      enum search_domain kind);
 
   /* See quick_symbol_functions.  */
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 74c1262709d..ff3157c6691 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -547,6 +547,7 @@ struct psymbol_functions : public quick_symbol_functions
      gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
      gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
      block_search_flags search_flags,
+     domain_enum domain,
      enum search_domain kind) override;
 
   struct compunit_symtab *find_pc_sect_compunit_symtab
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 1d92c61bad3..a1df7c777fe 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1208,7 +1208,8 @@ recursively_search_psymtabs
   (struct partial_symtab *ps,
    struct objfile *objfile,
    block_search_flags search_flags,
-   enum search_domain domain,
+   domain_enum domain,
+   enum search_domain search,
    const lookup_name_info &lookup_name,
    gdb::function_view<expand_symtabs_symbol_matcher_ftype> sym_matcher)
 {
@@ -1230,7 +1231,7 @@ recursively_search_psymtabs
 	continue;
 
       r = recursively_search_psymtabs (ps->dependencies[i],
-				       objfile, search_flags, domain,
+				       objfile, search_flags, domain, search,
 				       lookup_name, sym_matcher);
       if (r != 0)
 	{
@@ -1278,16 +1279,19 @@ recursively_search_psymtabs
 	{
 	  QUIT;
 
-	  if ((domain == ALL_DOMAIN
-	       || (domain == MODULES_DOMAIN
-		   && (*psym)->domain == MODULE_DOMAIN)
-	       || (domain == VARIABLES_DOMAIN
-		   && (*psym)->aclass != LOC_TYPEDEF
-		   && (*psym)->aclass != LOC_BLOCK)
-	       || (domain == FUNCTIONS_DOMAIN
-		   && (*psym)->aclass == LOC_BLOCK)
-	       || (domain == TYPES_DOMAIN
-		   && (*psym)->aclass == LOC_TYPEDEF))
+	  if ((domain == UNDEF_DOMAIN
+	       || symbol_matches_domain ((*psym)->ginfo.language (),
+					 (*psym)->domain, domain))
+	      && (search == ALL_DOMAIN
+		  || (search == MODULES_DOMAIN
+		      && (*psym)->domain == MODULE_DOMAIN)
+		  || (search == VARIABLES_DOMAIN
+		      && (*psym)->aclass != LOC_TYPEDEF
+		      && (*psym)->aclass != LOC_BLOCK)
+		  || (search == FUNCTIONS_DOMAIN
+		      && (*psym)->aclass == LOC_BLOCK)
+		  || (search == TYPES_DOMAIN
+		      && (*psym)->aclass == LOC_TYPEDEF))
 	      && psymbol_name_matches (*psym, lookup_name)
 	      && (sym_matcher == NULL
 		  || sym_matcher ((*psym)->ginfo.search_name ())))
@@ -1315,7 +1319,8 @@ psymbol_functions::expand_symtabs_matching
    gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
    gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
    block_search_flags search_flags,
-   enum search_domain domain)
+   domain_enum domain,
+   enum search_domain search)
 {
   /* Clear the search flags.  */
   for (partial_symtab *ps : require_partial_symbols (objfile))
@@ -1353,7 +1358,8 @@ psymbol_functions::expand_symtabs_matching
 	}
 
       if ((symbol_matcher == NULL && lookup_name == NULL)
-	  || recursively_search_psymtabs (ps, objfile, search_flags, domain,
+	  || recursively_search_psymtabs (ps, objfile, search_flags,
+					  domain, search,
 					  *psym_lookup_name,
 					  symbol_matcher))
 	{
diff --git a/gdb/quick-symbol.h b/gdb/quick-symbol.h
index 0a3e6d40d92..822e3643566 100644
--- a/gdb/quick-symbol.h
+++ b/gdb/quick-symbol.h
@@ -202,7 +202,8 @@ struct quick_symbol_functions
 
      Otherwise, individual symbols are considered.
 
-     If KIND does not match, the symbol is skipped.
+     If DOMAIN or KIND do not match, the symbol is skipped.
+     If DOMAIN is UNDEF_DOMAIN, that is treated as a wildcard.
 
      If the symbol name does not match LOOKUP_NAME, the symbol is skipped.
 
@@ -220,6 +221,7 @@ struct quick_symbol_functions
      gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
      gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
      block_search_flags search_flags,
+     domain_enum domain,
      enum search_domain kind) = 0;
 
   /* Return the comp unit from OBJFILE that contains PC and
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index 35720769460..1e8cd549764 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -272,6 +272,7 @@ objfile::expand_symtabs_matching
    gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
    gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
    block_search_flags search_flags,
+   domain_enum domain,
    enum search_domain kind)
 {
   if (debug_symfile)
@@ -286,7 +287,7 @@ objfile::expand_symtabs_matching
   for (const auto &iter : qf)
     if (!iter->expand_symtabs_matching (this, file_matcher, lookup_name,
 					symbol_matcher, expansion_notify,
-					search_flags, kind))
+					search_flags, domain, kind))
       return false;
   return true;
 }
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 9f2b1614dc3..bd11d6f0799 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3732,6 +3732,7 @@ expand_symtabs_matching
 					   symbol_matcher,
 					   expansion_notify,
 					   search_flags,
+					   UNDEF_DOMAIN,
 					   kind))
       return false;
   return true;
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 33657f88fa9..d992c671635 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -939,6 +939,7 @@ maintenance_expand_symtabs (const char *args, int from_tty)
 	 NULL,
 	 NULL,
 	 SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
+	 UNDEF_DOMAIN,
 	 ALL_DOMAIN);
 }
 \f
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 91251a22ce6..5d9534032ea 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4553,6 +4553,7 @@ global_symbol_searcher::expand_symtabs
      },
      NULL,
      SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
+     UNDEF_DOMAIN,
      kind);
 
   /* Here, we search through the minimal symbol tables for functions and
-- 
2.26.2


  parent reply	other threads:[~2021-03-25 17:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-25 17:04 [PATCH 0/9] Simplify quick_symbol_functions Tom Tromey
2021-03-25 17:04 ` [PATCH 1/9] Add block_search_flags Tom Tromey
2021-03-25 17:04 ` [PATCH 2/9] Let expand_symtabs_matching short-circuit Tom Tromey
2021-03-25 17:04 ` [PATCH 3/9] Add search_flags to expand_symtabs_matching Tom Tromey
2021-03-25 17:04 ` Tom Tromey [this message]
2021-03-25 17:04 ` [PATCH 5/9] Remove quick_symbol_functions::lookup_symbol Tom Tromey
2021-03-25 17:04 ` [PATCH 6/9] Remove quick_symbol_functions::map_symtabs_matching_filename Tom Tromey
2021-03-25 17:04 ` [PATCH 7/9] Remove quick_symbol_functions::expand_symtabs_for_function Tom Tromey
2021-03-25 17:04 ` [PATCH 8/9] Remove quick_symbol_functions::expand_symtabs_with_fullname Tom Tromey
2021-03-25 17:04 ` [PATCH 9/9] Simplify quick_symbol_functions::map_matching_symbols Tom Tromey
2021-04-17 15:38 ` [PATCH 0/9] Simplify quick_symbol_functions Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210325170458.2351251-5-tom@tromey.com \
    --to=tom@tromey.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).