From: "Rohr, Stephan" <stephan.rohr@intel.com>
To: Simon Marchi <simon.marchi@efficios.com>,
"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: RE: [PATCH 1/9] gdb: add symbol_search_kind enum for global_symbol_searcher
Date: Wed, 30 Sep 2026 09:31:59 +0000 [thread overview]
Message-ID: <DS7PR11MB6247455443EA9D148423EAB5938B2@DS7PR11MB6247.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20260929194119.155169-2-simon.marchi@efficios.com>
Hi Simon,
see my feedback inlined below.
Thanks
Stephan
> -----Original Message-----
> From: Simon Marchi <simon.marchi@efficios.com>
> Sent: Tuesday, 29 September 2026 21:39
> To: gdb-patches@sourceware.org
> Cc: Simon Marchi <simon.marchi@efficios.com>
> Subject: [PATCH 1/9] gdb: add symbol_search_kind enum for
> global_symbol_searcher
>
> While reading the global_symbol_searcher code, something that was not
> clear to me was that despite accepting a domain_search_flags, searches
Double spaces in ", searches".
> are mutually exclusive between types, variables and functions.
>
> One snippet of code that really confused me was (now removed by a
> previous commit):
>
Should we mention the previous commit " gdb: Skip useless minsym scan in
variable-only symbol searches" explicitly? It may help future readers of the
patch.
> if ((kind & SEARCH_FUNCTION_DOMAIN) != 0
> ? (find_compunit_symtab_for_pc
> (msymbol->value_address (objfile)) == NULL)
> : (lookup_symbol_in_objfile_from_linkage_name
> (objfile, msymbol->linkage_name (),
> SEARCH_VFT)
> .symbol == NULL))
>
> I kept thinking: what if you search for both functions and variables,
> this will take the "function" path, this can't work. The answer is that
> it's not supposed to happen.
>
> This patch adds the symbol_search_kind enum and uses it in
> global_symbol_searcher (and a few caller functions), making it clear
> that you search just one kind at a time.
>
> The new enum has a certain overlap with enum domain_search_flag, but I
> think that having the more scoped enum makes global_symbol_searcher
> easier to understand, by specifying clearly what it needs to handle.
>
> Change-Id: I4a3f4752c7be51a4da5831f9780d21e6e7271b38
> ---
> gdb/mi/mi-symbol-cmds.c | 36 +++++++------
> gdb/python/python.c | 2 +-
> gdb/symtab.c | 112 ++++++++++++++++++++++------------------
> gdb/symtab.h | 33 ++++++++----
> 4 files changed, 106 insertions(+), 77 deletions(-)
>
> diff --git a/gdb/mi/mi-symbol-cmds.c b/gdb/mi/mi-symbol-cmds.c
> index 58f2feef5533..30b8ec495e8f 100644
> --- a/gdb/mi/mi-symbol-cmds.c
> +++ b/gdb/mi/mi-symbol-cmds.c
> @@ -71,7 +71,7 @@ mi_cmd_symbol_list_lines (const char *command, const
> char *const *argv,
> results. */
>
> static void
> -output_debug_symbol (ui_out *uiout, domain_search_flags kind,
> +output_debug_symbol (ui_out *uiout, symbol_search_kind kind,
> struct symbol *sym, int block)
> {
> ui_out_emit_tuple tuple_emitter (uiout);
> @@ -80,7 +80,8 @@ output_debug_symbol (ui_out *uiout,
> domain_search_flags kind,
> uiout->field_unsigned ("line", sym->line ());
> uiout->field_string ("name", sym->print_name ());
>
> - if ((kind & (SEARCH_FUNCTION_DOMAIN | SEARCH_VAR_DOMAIN)) != 0)
> + if (kind == symbol_search_kind::FUNCTION
> + || kind == symbol_search_kind::VARIABLE)
> {
> string_file tmp_stream;
> type_print (sym->type (), "", &tmp_stream, -1);
> @@ -111,7 +112,7 @@ output_nondebug_symbol (ui_out *uiout, const
> bound_minimal_symbol &msymbol)
> and then prints the matching [m]symbols in an MI structured format. */
>
> static void
> -mi_symbol_info (domain_search_flags kind, const char *name_regexp,
> +mi_symbol_info (symbol_search_kind kind, const char *name_regexp,
> const char *type_regexp, bool exclude_minsyms,
> size_t max_results)
> {
> @@ -188,7 +189,7 @@ parse_max_results_option (const char *arg)
> Processes command line options from ARGV and ARGC. */
>
> static void
> -mi_info_functions_or_variables (domain_search_flags kind,
> +mi_info_functions_or_variables (symbol_search_kind kind,
> const char *const *argv, int argc)
> {
> size_t max_results = SIZE_MAX;
> @@ -215,7 +216,7 @@ mi_info_functions_or_variables
> (domain_search_flags kind,
> while (1)
> {
> const char *cmd_string
> - = ((kind == SEARCH_FUNCTION_DOMAIN)
> + = ((kind == symbol_search_kind::FUNCTION)
> ? "-symbol-info-functions" : "-symbol-info-variables");
> int opt = mi_getopt (cmd_string, argc, argv, opts, &oind, &oarg);
> if (opt < 0)
> @@ -251,7 +252,7 @@ using module_symbol_search_iterator
> static module_symbol_search_iterator
> output_module_symbols_in_single_module_and_file
> (struct ui_out *uiout, module_symbol_search_iterator iter,
> - const module_symbol_search_iterator end, domain_search_flags
> kind)
> + const module_symbol_search_iterator end, symbol_search_kind
> kind)
> {
> /* The symbol for the module in which the first result resides. */
> const symbol *first_module_symbol = iter->first.symbol;
> @@ -286,7 +287,7 @@ output_module_symbols_in_single_module_and_file
> static module_symbol_search_iterator
> output_module_symbols_in_single_module
> (struct ui_out *uiout, module_symbol_search_iterator iter,
> - const module_symbol_search_iterator end, domain_search_flags
> kind)
> + const module_symbol_search_iterator end, symbol_search_kind
> kind)
> {
> gdb_assert (iter->first.symbol != nullptr);
> gdb_assert (iter->second.symbol != nullptr);
> @@ -314,7 +315,7 @@ output_module_symbols_in_single_module
> command line options passed to the MI command. */
>
> static void
> -mi_info_module_functions_or_variables (domain_search_flags kind,
> +mi_info_module_functions_or_variables (symbol_search_kind kind,
> const char *const *argv, int argc)
> {
> const char *module_regexp = nullptr;
> @@ -341,7 +342,7 @@ mi_info_module_functions_or_variables
> (domain_search_flags kind,
> while (1)
> {
> const char *cmd_string
> - = ((kind == SEARCH_FUNCTION_DOMAIN)
> + = ((kind == symbol_search_kind::FUNCTION)
> ? "-symbol-info-module-functions"
> : "-symbol-info-module-variables");
> int opt = mi_getopt (cmd_string, argc, argv, opts, &oind, &oarg);
> @@ -383,7 +384,7 @@ void
> mi_cmd_symbol_info_functions (const char *command, const char *const
> *argv,
> int argc)
> {
> - mi_info_functions_or_variables (SEARCH_FUNCTION_DOMAIN, argv, argc);
> + mi_info_functions_or_variables (symbol_search_kind::FUNCTION, argv,
> argc);
> }
>
> /* Implement -symbol-info-module-functions command. */
> @@ -392,7 +393,8 @@ void
> mi_cmd_symbol_info_module_functions (const char *command,
> const char *const *argv, int argc)
> {
> - mi_info_module_functions_or_variables (SEARCH_FUNCTION_DOMAIN,
> argv, argc);
> + mi_info_module_functions_or_variables (symbol_search_kind::FUNCTION,
> + argv, argc);
> }
>
> /* Implement -symbol-info-module-variables command. */
> @@ -401,7 +403,8 @@ void
> mi_cmd_symbol_info_module_variables (const char *command,
> const char *const *argv, int argc)
> {
> - mi_info_module_functions_or_variables (SEARCH_VAR_DOMAIN, argv,
> argc);
> + mi_info_module_functions_or_variables (symbol_search_kind::VARIABLE,
> + argv, argc);
> }
>
> /* Implement -symbol-inf-modules command. */
> @@ -444,7 +447,8 @@ mi_cmd_symbol_info_modules (const char
> *command, const char *const *argv,
> }
> }
>
> - mi_symbol_info (SEARCH_MODULE_DOMAIN, regexp, nullptr, true,
> max_results);
> + mi_symbol_info (symbol_search_kind::MODULE, regexp, nullptr, true,
> + max_results);
> }
>
> /* Implement -symbol-info-types command. */
> @@ -487,8 +491,8 @@ mi_cmd_symbol_info_types (const char *command,
> const char *const *argv,
> }
> }
>
> - mi_symbol_info (SEARCH_TYPE_DOMAIN | SEARCH_STRUCT_DOMAIN,
> regexp, nullptr,
> - true, max_results);
> + mi_symbol_info (symbol_search_kind::TYPE, regexp, nullptr, true,
> + max_results);
> }
>
> /* Implement -symbol-info-variables command. */
> @@ -497,5 +501,5 @@ void
> mi_cmd_symbol_info_variables (const char *command, const char *const
> *argv,
> int argc)
> {
> - mi_info_functions_or_variables (SEARCH_VAR_DOMAIN, argv, argc);
> + mi_info_functions_or_variables (symbol_search_kind::VARIABLE, argv,
> argc);
> }
> diff --git a/gdb/python/python.c b/gdb/python/python.c
> index d51cd83966be..467317b7996e 100644
> --- a/gdb/python/python.c
> +++ b/gdb/python/python.c
> @@ -848,7 +848,7 @@ gdbpy_rbreak (PyObject *self, PyObject *args,
> PyObject *kw)
> minsyms_p = cmp;
> }
>
> - global_symbol_searcher spec (SEARCH_FUNCTION_DOMAIN, regex);
> + global_symbol_searcher spec (symbol_search_kind::FUNCTION, regex);
>
> /* The "symtabs" keyword is any Python iterable object that returns
> a gdb.Symtab on each iteration. If specified, iterate through
> diff --git a/gdb/symtab.c b/gdb/symtab.c
> index 27070f74f83e..708df078e2ea 100644
> --- a/gdb/symtab.c
> +++ b/gdb/symtab.c
> @@ -4698,11 +4698,31 @@ treg_matches_sym_type_name (const
> compiled_regex &treg,
> return treg.exec (printed_sym_type_name.c_str (), 0, NULL, 0) == 0;
> }
>
> +/* Return the domain search flags matching symbols of kind KIND. */
> +
> +static domain_search_flags
> +to_search_flags (symbol_search_kind kind)
Same name as " to_search_flags (domain_enum domain)" in symtab.h.
Not sure if this might be confusing. I don't have a strong opinion here.
> +{
> + switch (kind)
> + {
> + case symbol_search_kind::VARIABLE:
> + return SEARCH_VAR_DOMAIN;
> + case symbol_search_kind::FUNCTION:
> + return SEARCH_FUNCTION_DOMAIN;
> + case symbol_search_kind::TYPE:
Should we add a comment why the " SEARCH_STRUCT_DOMAIN" is
included? I think this might be helpful for future readers, e.g.
"Some languages have a tag namespace. Search the "STRUCT_DOMAIN", too."
> + return SEARCH_TYPE_DOMAIN | SEARCH_STRUCT_DOMAIN;
> + case symbol_search_kind::MODULE:
> + return SEARCH_MODULE_DOMAIN;
> + }
> +
> + gdb_assert_not_reached ("invalid symbol_search_kind");
> +}
> +
> /* See symtab.h. */
>
> bool
> global_symbol_searcher::is_suitable_msymbol
> - (const domain_search_flags kind, const minimal_symbol *msymbol)
> + (symbol_search_kind kind, const minimal_symbol *msymbol)
> {
> switch (msymbol->type ())
> {
> @@ -4710,12 +4730,12 @@ global_symbol_searcher::is_suitable_msymbol
> case mst_bss:
> case mst_file_data:
> case mst_file_bss:
> - return (kind & SEARCH_VAR_DOMAIN) != 0;
> + return kind == symbol_search_kind::VARIABLE;
> case mst_text:
> case mst_file_text:
> case mst_solib_trampoline:
> case mst_text_gnu_ifunc:
> - return (kind & SEARCH_FUNCTION_DOMAIN) != 0;
> + return kind == symbol_search_kind::FUNCTION;
> default:
> return false;
> }
> @@ -4727,7 +4747,6 @@ bool
> global_symbol_searcher::expand_symtabs
> (objfile *objfile, const std::optional<compiled_regex> &preg) const
> {
> - domain_search_flags kind = m_kind;
> bool found_func_msymbol_without_debug_info = false;
>
> auto do_file_match = [&] (const char *filename, bool basenames)
> @@ -4748,7 +4767,7 @@ global_symbol_searcher::expand_symtabs
> },
> NULL,
> SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
> - kind);
> + to_search_flags (m_kind));
>
> /* Here, we search through the minimal symbol tables for functions that
> match, and force their symbols to be read. The symbol will then be found
> @@ -4764,7 +4783,7 @@ global_symbol_searcher::expand_symtabs
> symtab. When no file names were given the caller unconditionally rescans
> the minimal symbols for SEARCH_VAR_DOMAIN. */
> if (m_filenames.empty ()
> - && (kind & SEARCH_FUNCTION_DOMAIN) != 0)
> + && m_kind == symbol_search_kind::FUNCTION)
> {
> for (minimal_symbol *msymbol : objfile->msymbols ())
> {
> @@ -4773,7 +4792,7 @@ global_symbol_searcher::expand_symtabs
> if (msymbol->created_by_gdb)
> continue;
>
> - if (is_suitable_msymbol (kind, msymbol))
> + if (is_suitable_msymbol (m_kind, msymbol))
> {
> if (!preg.has_value ()
> || preg->exec (msymbol->natural_name (), 0,
> @@ -4804,7 +4823,7 @@ global_symbol_searcher::add_matching_symbols
> const std::optional<compiled_regex> &treg,
> std::set<symbol_search> *result_set) const
> {
> - domain_search_flags kind = m_kind;
> + domain_search_flags domain = to_search_flags (m_kind);
>
> /* Add matching symbols (if not already present). */
> for (compunit_symtab &cust : objfile->compunits ())
> @@ -4832,7 +4851,7 @@ global_symbol_searcher::add_matching_symbols
> m_filenames, false))))
> continue;
>
> - if (!sym->matches (kind))
> + if (!sym->matches (domain))
> continue;
>
> if (preg.has_value () && preg->exec (sym->natural_name (), 0,
> @@ -4845,7 +4864,7 @@ global_symbol_searcher::add_matching_symbols
> && !treg_matches_sym_type_name (*treg, sym)))
> continue;
>
> - if ((kind & SEARCH_VAR_DOMAIN) != 0)
> + if (m_kind == symbol_search_kind::VARIABLE)
> {
> if (sym->loc_class () == LOC_UNRESOLVED
> /* LOC_CONST can be used for more than
> @@ -4882,8 +4901,6 @@
> global_symbol_searcher::add_matching_msymbols
> (objfile *objfile, const std::optional<compiled_regex> &preg,
> std::vector<symbol_search> *results) const
> {
> - domain_search_flags kind = m_kind;
> -
> for (minimal_symbol *msymbol : objfile->msymbols ())
> {
> QUIT;
> @@ -4891,7 +4908,7 @@
> global_symbol_searcher::add_matching_msymbols
> if (msymbol->created_by_gdb)
> continue;
>
> - if (is_suitable_msymbol (kind, msymbol))
> + if (is_suitable_msymbol (m_kind, msymbol))
> {
> if (!preg.has_value ()
> || preg->exec (msymbol->natural_name (), 0,
> @@ -4899,7 +4916,7 @@
> global_symbol_searcher::add_matching_msymbols
> {
> /* For functions we can do a quick check of whether the
> symbol might be found via find_pc_symtab. */
> - if ((kind & SEARCH_FUNCTION_DOMAIN) == 0
> + if (m_kind != symbol_search_kind::FUNCTION
> || (find_compunit_symtab_for_pc
> (msymbol->value_address (objfile)) == NULL))
> {
> @@ -5006,12 +5023,12 @@ global_symbol_searcher::search () const
> minimal symbol, as we assume that a minimal symbol does not have a
> type. */
> if ((found_func_msymbol_without_debug_info
> - || (m_filenames.empty () && (m_kind & SEARCH_VAR_DOMAIN) != 0))
> + || (m_filenames.empty () && m_kind ==
> symbol_search_kind::VARIABLE))
> && !m_exclude_minsyms
> && !treg.has_value ())
> {
> - gdb_assert ((m_kind & (SEARCH_VAR_DOMAIN |
> SEARCH_FUNCTION_DOMAIN))
> - != 0);
> + gdb_assert (m_kind == symbol_search_kind::VARIABLE
> + || m_kind == symbol_search_kind::FUNCTION);
> for (objfile &objfile : current_program_space->objfiles ())
> if (!add_matching_msymbols (&objfile, preg, &result))
> break;
> @@ -5143,7 +5160,7 @@ print_msymbol_info (bound_minimal_symbol
> msymbol)
>
> static void
> symtab_symbol_info (bool quiet, bool exclude_minsyms,
> - const char *regexp, domain_enum kind,
> + const char *regexp, symbol_search_kind kind,
> const char *t_regexp, int from_tty)
> {
> const char *last_filename = "";
> @@ -5152,11 +5169,7 @@ symtab_symbol_info (bool quiet, bool
> exclude_minsyms,
> if (regexp != nullptr && *regexp == '\0')
> regexp = nullptr;
>
> - domain_search_flags flags = to_search_flags (kind);
> - if (kind == TYPE_DOMAIN)
> - flags |= SEARCH_STRUCT_DOMAIN;
> -
> - global_symbol_searcher spec (flags, regexp);
> + global_symbol_searcher spec (kind, regexp);
> spec.set_symbol_type_regexp (t_regexp);
> spec.set_exclude_minsyms (exclude_minsyms);
> std::vector<symbol_search> symbols = spec.search ();
> @@ -5166,20 +5179,20 @@ symtab_symbol_info (bool quiet, bool
> exclude_minsyms,
> const char *classname;
> switch (kind)
> {
> - case VAR_DOMAIN:
> + case symbol_search_kind::VARIABLE:
> classname = "variable";
> break;
> - case FUNCTION_DOMAIN:
> + case symbol_search_kind::FUNCTION:
> classname = "function";
> break;
> - case TYPE_DOMAIN:
> + case symbol_search_kind::TYPE:
> classname = "type";
> break;
> - case MODULE_DOMAIN:
> + case symbol_search_kind::MODULE:
> classname = "module";
> break;
> default:
> - gdb_assert_not_reached ("invalid domain enum");
> + gdb_assert_not_reached ("invalid symbol_search_kind");
I think we could drop the "default" case as part of this refactoring. All
cases are handled; we lose compile time warnings for unhandled cases with
the "default" case.
> }
>
> if (regexp != NULL)
> @@ -5304,7 +5317,7 @@ info_variables_command (const char *args, int
> from_tty)
> args = nullptr;
>
> symtab_symbol_info
> - (opts.quiet, opts.exclude_minsyms, args, VAR_DOMAIN,
> + (opts.quiet, opts.exclude_minsyms, args, symbol_search_kind::VARIABLE,
> opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
> from_tty);
> }
> @@ -5323,7 +5336,7 @@ info_functions_command (const char *args, int
> from_tty)
> args = nullptr;
>
> symtab_symbol_info
> - (opts.quiet, opts.exclude_minsyms, args, FUNCTION_DOMAIN,
> + (opts.quiet, opts.exclude_minsyms, args, symbol_search_kind::FUNCTION,
> opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
> from_tty);
> }
> @@ -5366,8 +5379,8 @@ info_types_command (const char *args, int
> from_tty)
> (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
> if (args != nullptr && *args == '\0')
> args = nullptr;
> - symtab_symbol_info (opts.quiet, false, args, TYPE_DOMAIN, nullptr,
> - from_tty);
> + symtab_symbol_info (opts.quiet, false, args, symbol_search_kind::TYPE,
> + nullptr, from_tty);
> }
>
> /* Command completer for 'info types' command. */
> @@ -5399,8 +5412,8 @@ info_modules_command (const char *args, int
> from_tty)
> (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
> if (args != nullptr && *args == '\0')
> args = nullptr;
> - symtab_symbol_info (opts.quiet, true, args, MODULE_DOMAIN, nullptr,
> - from_tty);
> + symtab_symbol_info (opts.quiet, true, args, symbol_search_kind::MODULE,
> + nullptr, from_tty);
> }
>
> /* Implement the 'info main' command. */
> @@ -5441,7 +5454,7 @@ rbreak_command (const char *regexp, int
> from_tty)
> because the std::move nullifies file_name. */
> bool file_name_p = file_name != nullptr;
>
> - global_symbol_searcher spec (SEARCH_FUNCTION_DOMAIN, regexp);
> + global_symbol_searcher spec (symbol_search_kind::FUNCTION, regexp);
> if (file_name_p)
> spec.add_filename (std::move (file_name));
> std::vector<symbol_search> symbols = spec.search ();
> @@ -6654,12 +6667,12 @@ static struct cmd_list_element
> *info_module_cmdlist = NULL;
>
> std::vector<module_symbol_search>
> search_module_symbols (const char *module_regexp, const char *regexp,
> - const char *type_regexp, domain_search_flags kind)
> + const char *type_regexp, symbol_search_kind kind)
> {
> std::vector<module_symbol_search> results;
>
> /* Search for all modules matching MODULE_REGEXP. */
> - global_symbol_searcher spec1 (SEARCH_MODULE_DOMAIN,
> module_regexp);
> + global_symbol_searcher spec1 (symbol_search_kind::MODULE,
> module_regexp);
> spec1.set_exclude_minsyms (true);
> std::vector<symbol_search> modules = spec1.search ();
>
> @@ -6705,9 +6718,10 @@ search_module_symbols (const char
> *module_regexp, const char *regexp,
> static void
> info_module_subcommand (bool quiet, const char *module_regexp,
> const char *regexp, const char *type_regexp,
> - domain_search_flags kind)
> + symbol_search_kind kind)
> {
> - gdb_assert (kind == SEARCH_FUNCTION_DOMAIN || kind ==
> SEARCH_VAR_DOMAIN);
> + gdb_assert (kind == symbol_search_kind::FUNCTION
> + || kind == symbol_search_kind::VARIABLE);
>
> /* Print a header line. Don't build the header line bit by bit as this
> prevents internationalisation. */
> @@ -6718,12 +6732,12 @@ info_module_subcommand (bool quiet, const
> char *module_regexp,
> if (type_regexp == nullptr)
> {
> if (regexp == nullptr)
> - gdb_printf ((kind == SEARCH_VAR_DOMAIN
> + gdb_printf ((kind == symbol_search_kind::VARIABLE
> ? _("All variables in all modules:")
> : _("All functions in all modules:")));
> else
> gdb_printf
> - ((kind == SEARCH_VAR_DOMAIN
> + ((kind == symbol_search_kind::VARIABLE
> ? _("All variables matching regular expression"
> " \"%s\" in all modules:")
> : _("All functions matching regular expression"
> @@ -6734,7 +6748,7 @@ info_module_subcommand (bool quiet, const char
> *module_regexp,
> {
> if (regexp == nullptr)
> gdb_printf
> - ((kind == SEARCH_VAR_DOMAIN
> + ((kind == symbol_search_kind::VARIABLE
> ? _("All variables with type matching regular "
> "expression \"%s\" in all modules:")
> : _("All functions with type matching regular "
> @@ -6742,7 +6756,7 @@ info_module_subcommand (bool quiet, const char
> *module_regexp,
> type_regexp);
> else
> gdb_printf
> - ((kind == SEARCH_VAR_DOMAIN
> + ((kind == symbol_search_kind::VARIABLE
> ? _("All variables matching regular expression "
> "\"%s\",\n\twith type matching regular "
> "expression \"%s\" in all modules:")
> @@ -6758,7 +6772,7 @@ info_module_subcommand (bool quiet, const char
> *module_regexp,
> {
> if (regexp == nullptr)
> gdb_printf
> - ((kind == SEARCH_VAR_DOMAIN
> + ((kind == symbol_search_kind::VARIABLE
> ? _("All variables in all modules matching regular "
> "expression \"%s\":")
> : _("All functions in all modules matching regular "
> @@ -6766,7 +6780,7 @@ info_module_subcommand (bool quiet, const char
> *module_regexp,
> module_regexp);
> else
> gdb_printf
> - ((kind == SEARCH_VAR_DOMAIN
> + ((kind == symbol_search_kind::VARIABLE
> ? _("All variables matching regular expression "
> "\"%s\",\n\tin all modules matching regular "
> "expression \"%s\":")
> @@ -6779,7 +6793,7 @@ info_module_subcommand (bool quiet, const char
> *module_regexp,
> {
> if (regexp == nullptr)
> gdb_printf
> - ((kind == SEARCH_VAR_DOMAIN
> + ((kind == symbol_search_kind::VARIABLE
> ? _("All variables with type matching regular "
> "expression \"%s\"\n\tin all modules matching "
> "regular expression \"%s\":")
> @@ -6789,7 +6803,7 @@ info_module_subcommand (bool quiet, const char
> *module_regexp,
> type_regexp, module_regexp);
> else
> gdb_printf
> - ((kind == SEARCH_VAR_DOMAIN
> + ((kind == symbol_search_kind::VARIABLE
> ? _("All variables matching regular expression "
> "\"%s\",\n\twith type matching regular expression "
> "\"%s\",\n\tin all modules matching regular "
> @@ -6901,7 +6915,7 @@ info_module_functions_command (const char
> *args, int from_tty)
> (opts.quiet,
> opts.module_regexp.empty () ? nullptr : opts.module_regexp.c_str (), args,
> opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
> - SEARCH_FUNCTION_DOMAIN);
> + symbol_search_kind::FUNCTION);
> }
>
> /* Implements the 'info module variables' command. */
> @@ -6920,7 +6934,7 @@ info_module_variables_command (const char
> *args, int from_tty)
> (opts.quiet,
> opts.module_regexp.empty () ? nullptr : opts.module_regexp.c_str (), args,
> opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
> - SEARCH_VAR_DOMAIN);
> + symbol_search_kind::VARIABLE);
> }
>
> /* Command completer for 'info module ...' sub-commands. */
> diff --git a/gdb/symtab.h b/gdb/symtab.h
> index 6443216fd7f0..a35449fbeeda 100644
> --- a/gdb/symtab.h
> +++ b/gdb/symtab.h
> @@ -2586,6 +2586,23 @@ struct symbol_search
> const symbol_search &sym_b);
> };
>
> +/* The kind of symbols searched for by global_symbol_searcher. */
> +
> +enum class symbol_search_kind
> +{
> + /* Variables, excluding enum constants. */
> + VARIABLE,
> +
> + /* Functions. */
> + FUNCTION,
> +
> + /* Type names. */
IIUC, this covers "SEARCH_TYPE_DOMAIN | SEARCH_STRUCT_DOMAIN" ?
Should the comment be extended to state this explicitly, e.g., "Type names,
including struct, union and enum tags." ?
> + TYPE,
> +
> + /* Fortran modules. */
> + MODULE,
> +};
> +
> /* In order to search for global symbols of a particular kind matching
> particular regular expressions, create an instance of this structure and
> call the SEARCH member function. */
> @@ -2594,7 +2611,7 @@ class global_symbol_searcher
> public:
>
> /* Constructor. */
> - global_symbol_searcher (domain_search_flags kind,
> + global_symbol_searcher (symbol_search_kind kind,
> const char *symbol_name_regexp)
> : m_kind (kind),
> m_symbol_name_regexp (symbol_name_regexp)
> @@ -2635,14 +2652,8 @@ class global_symbol_searcher
> /* The set of source files to search in for matching symbols. */
> std::vector<gdb::unique_xmalloc_ptr<char>> m_filenames;
>
> - /* The kind of symbols are we searching for.
> - VARIABLES_DOMAIN - Search all symbols, excluding functions, type
> - names, and constants (enums).
> - FUNCTIONS_DOMAIN - Search all functions..
> - TYPES_DOMAIN - Search all type names.
> - MODULES_DOMAIN - Search all Fortran modules.
> - ALL_DOMAIN - Not valid for this function. */
> - domain_search_flags m_kind;
> + /* The kind of symbols we are searching for. */
> + symbol_search_kind m_kind;
>
> /* Regular expression to match against the symbol name. */
> const char *m_symbol_name_regexp = nullptr;
> @@ -2686,7 +2697,7 @@ class global_symbol_searcher
> std::vector<symbol_search> *results) const;
>
> /* Return true if MSYMBOL is of type KIND. */
> - static bool is_suitable_msymbol (const domain_search_flags kind,
> + static bool is_suitable_msymbol (symbol_search_kind kind,
> const minimal_symbol *msymbol);
> };
>
> @@ -2703,7 +2714,7 @@ using module_symbol_search =
> std::pair<symbol_search, symbol_search>;
> within the module. */
> extern std::vector<module_symbol_search> search_module_symbols
> (const char *module_regexp, const char *regexp,
> - const char *type_regexp, domain_search_flags kind);
> + const char *type_regexp, symbol_search_kind kind);
>
> /* Convert a global or static symbol SYM (based on BLOCK, which should be
> either GLOBAL_BLOCK or STATIC_BLOCK) into a string for use in 'info'
> --
> 2.55.0
________________________________________
Intel Deutschland GmbH
Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany
Tel: +49 (89) 99143-0
www.intel.de
Managing Directors: Candice Moore, Jeffrey Schneiderman, Ramachandran Sitaraman
Chairperson of the Supervisory Board: Sonja Pierer
Registered Seat: Munich Commercial Register B: Amtsgericht Munich HRB 186928
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
next prev parent reply other threads:[~2026-09-30 9:32 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-29 19:39 [PATCH 0/9] Cleanups in global_symbol_searcher Simon Marchi
2026-09-29 19:39 ` [PATCH 1/9] gdb: add symbol_search_kind enum for global_symbol_searcher Simon Marchi
2026-09-30 9:31 ` Rohr, Stephan [this message]
2026-09-30 14:50 ` Simon Marchi
2026-09-29 19:39 ` [PATCH 2/9] gdb: factor out regexp compilation from global_symbol_searcher::search Simon Marchi
2026-09-30 12:10 ` Rohr, Stephan
2026-09-30 16:21 ` Simon Marchi
2026-09-29 19:39 ` [PATCH 3/9] gdb: simplify insertion in global_symbol_searcher::add_matching_symbols Simon Marchi
2026-09-30 8:20 ` Rohr, Stephan
2026-09-30 16:36 ` Simon Marchi
2026-09-29 19:39 ` [PATCH 4/9] gdb: use a switch on m_kind in add_matching_symbols Simon Marchi
[not found] ` <DS7PR11MB624725508FC878F3C263C2B3938B2@DS7PR11MB6247.namprd11.prod.outlook.com>
2026-09-30 19:41 ` Simon Marchi
2026-09-29 19:39 ` [PATCH 5/9] gdb: make global_symbol_searcher::is_suitable_msymbol non-static Simon Marchi
2026-09-30 12:39 ` Rohr, Stephan
2026-09-29 19:39 ` [PATCH 6/9] gdb: update comment of global_symbol_searcher::expand_symtabs Simon Marchi
2026-09-30 13:08 ` Rohr, Stephan
2026-09-30 20:01 ` Simon Marchi
2026-09-29 19:39 ` [PATCH 7/9] gdb: add matching helpers to global_symbol_searcher Simon Marchi
2026-09-30 13:51 ` Rohr, Stephan
2026-09-30 20:27 ` Simon Marchi
2026-09-29 19:39 ` [PATCH 8/9] gdb: pass result containers by reference in global_symbol_searcher Simon Marchi
2026-09-30 13:58 ` Rohr, Stephan
2026-10-01 1:33 ` Simon Marchi
2026-09-29 19:39 ` [PATCH 9/9] gdb: fix some comments " Simon Marchi
2026-09-30 14:01 ` Rohr, Stephan
2026-10-01 1:38 ` Simon Marchi
2026-10-01 2:09 ` [PATCH v2 00/11] Cleanups " simon.marchi
2026-10-01 2:09 ` [PATCH v2 01/11] gdb: add symbol_search_kind enum for global_symbol_searcher simon.marchi
2026-10-01 10:30 ` Andrew Burgess
2026-10-01 13:22 ` Simon Marchi
2026-10-01 15:35 ` Tom Tromey
2026-10-01 2:09 ` [PATCH v2 02/11] gdb: rename some preg/treg variables simon.marchi
2026-10-01 12:59 ` Andrew Burgess
2026-10-01 13:52 ` Simon Marchi
2026-10-01 2:09 ` [PATCH v2 03/11] gdb: factor out regexp compilation from global_symbol_searcher::search simon.marchi
2026-10-01 13:19 ` Andrew Burgess
2026-10-01 13:54 ` Simon Marchi
2026-10-01 2:09 ` [PATCH v2 04/11] gdb: use compile_symbol_search_regex in stack.c simon.marchi
2026-10-01 13:43 ` Andrew Burgess
2026-10-01 15:36 ` Tom Tromey
2026-10-01 15:52 ` Simon Marchi
2026-10-01 2:09 ` [PATCH v2 05/11] gdb: simplify insertion in global_symbol_searcher::add_matching_symbols simon.marchi
2026-10-01 13:46 ` Andrew Burgess
2026-10-01 2:09 ` [PATCH v2 06/11] gdb: use a switch on m_kind in add_matching_symbols simon.marchi
2026-10-01 15:01 ` Andrew Burgess
2026-10-01 15:07 ` Simon Marchi
2026-10-01 2:09 ` [PATCH v2 07/11] gdb: make global_symbol_searcher::is_suitable_msymbol non-static simon.marchi
2026-10-01 15:09 ` Andrew Burgess
2026-10-01 2:09 ` [PATCH v2 08/11] gdb: update comments of global_symbol_searcher::expand_symtabs simon.marchi
2026-10-01 15:13 ` Andrew Burgess
2026-10-01 2:09 ` [PATCH v2 09/11] gdb: add matching helpers to global_symbol_searcher simon.marchi
2026-10-01 15:39 ` Andrew Burgess
2026-10-01 15:48 ` Simon Marchi
2026-10-01 2:09 ` [PATCH v2 10/11] gdb: change some pointers to references in global_symbol_searcher simon.marchi
2026-10-01 15:53 ` Andrew Burgess
2026-10-01 15:55 ` Simon Marchi
2026-10-01 2:09 ` [PATCH v2 11/11] gdb: fix some comments " simon.marchi
2026-10-01 15:56 ` Andrew Burgess
2026-10-01 17:47 ` Simon Marchi
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=DS7PR11MB6247455443EA9D148423EAB5938B2@DS7PR11MB6247.namprd11.prod.outlook.com \
--to=stephan.rohr@intel.com \
--cc=gdb-patches@sourceware.org \
--cc=simon.marchi@efficios.com \
/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