binutils-gdb/gdb/expanded-symbol.h
Simon Marchi ea4bacd354 gdb: introduce iteration_status enum, use it for search callbacks
There are a bunch of iteration functions that take a callback returning
true or false to indicate whether to continue or stop iterating.  These
functions then return the same value, indicate whether the iteration was
done until the end of interrupted.  I think this is confusing and
error-prone, as I never know which value means what.  It is especially
confusing when two opposite conventions collide, such as in
objfile::map_symtabs_matching_filename.

I propose to make that more obvious by introducing a new
iteration_status enum with self-documenting values.

I started to change the callback type
compunit_symtab_iteration_callback, taken by
quick_symbol_functions::search, and then followed that path to update a
bunch of other functions.

I chose the name to be kind of generic, so that it can be used for other
similar iteration patterns.  I also put it in gdbsupport, in case we
want to use it in gdbserver too.

Change-Id: I55d84d0c1af8ac0b82cc9f49ccf0d6b60e1769e0
Approved-By: Andrew Burgess <aburgess@redhat.com>
2026-04-17 15:30:29 -04:00

101 lines
3 KiB
C++

/* An implementation of "quick" symbol functions for already expanded
symbol tables.
Copyright (C) 2026-2026 Free Software Foundation, Inc.
This file is part of GDB.
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/>. */
#ifndef GDB_EXPANDED_SYMBOL_H
#define GDB_EXPANDED_SYMBOL_H
#include "quick-symbol.h"
/* An implementation of "quick" symbol functions that relies solely only on
already present symtabs. This is useful in cases where symbols are created
eagerly by user-provided code (such as when using JIT reader API). */
struct expanded_symbols_functions : public quick_symbol_functions
{
explicit expanded_symbols_functions
(std::vector<compunit_symtab *> compunit_symtabs)
: m_compunit_symtabs (std::move (compunit_symtabs))
{}
bool has_symbols (objfile *objfile) override
{
return true;
}
bool has_unexpanded_symtabs (objfile *objfile) override
{
return false;
}
symtab *find_last_source_symtab (objfile *objfile) override;
void forget_cached_source_info (objfile *objfile) override
{
}
enum language lookup_global_symbol_language (objfile *objfile,
const char *name,
domain_search_flags domain,
bool *symbol_found_p) override;
void print_stats (objfile *objfile, bool print_bcache) override
{
}
void dump (objfile *objfile) override
{
}
void expand_all_symtabs (objfile *objfile) override
{
}
iteration_status search (objfile *objfile,
search_symtabs_file_matcher file_matcher,
const lookup_name_info *lookup_name,
search_symtabs_symbol_matcher symbol_matcher,
compunit_symtab_iteration_callback compunit_callback,
block_search_flags search_flags,
domain_search_flags domain,
search_symtabs_lang_matcher lang_matcher) override;
compunit_symtab *find_pc_sect_compunit_symtab
(objfile *objfile, bound_minimal_symbol msymbol, CORE_ADDR pc,
obj_section *section, int warn_if_readin) override
{
/* Simply returning NULL here is okay since the (only) caller
find_compunit_symtab_for_pc_sect iterates over existing CUs
anyway. */
return nullptr;
}
symbol *find_symbol_by_address (objfile *objfile, CORE_ADDR address)
override;
void map_symbol_filenames (objfile *objfile, symbol_filename_listener fun,
bool need_fullname) override
{
}
private:
std::vector<compunit_symtab *> m_compunit_symtabs;
};
#endif /* GDB_EXPANDED_SYMBOL_H */