20#if !defined (SYMTAB_H)
27#include "gdbsupport/gdb_vecs.h"
29#include "gdbsupport/gdb_obstack.h"
30#include "gdbsupport/gdb_regex.h"
31#include "gdbsupport/enum-flags.h"
32#include "gdbsupport/function-view.h"
33#include "gdbsupport/gdb_optional.h"
34#include "gdbsupport/gdb_string_view.h"
35#include "gdbsupport/next-iterator.h"
36#include "gdbsupport/iterator-range.h"
91 const char *search_name);
105 bool matches (
const char *symbol_search_name,
133 std::vector<gdb::string_view> result;
135 result.emplace_back (
"standard");
348 template<
typename Field,
typename... Args>
352 field.emplace (*
this, std::forward<Args> (args)...);
367 mutable gdb::optional<ada_lookup_name_info>
m_ada;
368 mutable gdb::optional<demangle_for_lookup_info>
m_cplus;
369 mutable gdb::optional<demangle_for_lookup_info>
m_d;
370 mutable gdb::optional<demangle_for_lookup_info>
m_go;
399 (
const char *symbol_search_name,
514 gdb::optional<hashval_t> hash
515 = gdb::optional<hashval_t> ());
659 const char *search_name);
716#define MINSYM_TYPE_BITS 4
936#define SYMBOL_DOMAIN_BITS 3
1082#define SYMBOL_ACLASS_BITS 5
1144 std::vector<bool> ®isters_used,
1145 CORE_ADDR pc,
const char *result_name);
1160 const gdb_byte **start,
size_t *length);
1227extern gdb::array_view<const struct symbol_impl>
symbol_impls;
1258 owner.symtab =
nullptr;
1543#define SYMBOL_COMPUTED_OPS(symbol) ((symbol)->impl ().ops_computed)
1544#define SYMBOL_BLOCK_OPS(symbol) ((symbol)->impl ().ops_block)
1545#define SYMBOL_REGISTER_OPS(symbol) ((symbol)->impl ().ops_register)
1546#define SYMBOL_LOCATION_BATON(symbol) (symbol)->aux_value
1611 && (
line != 0) != (other.
line != 0))
2001 if (cust ==
nullptr)
2019#define VTBL_FNADDR_OFFSET 2
2072 const struct block *,
2080 const struct block *,
2219 CORE_ADDR *
address, CORE_ADDR *endaddr,
2227 CORE_ADDR *
address, CORE_ADDR *endaddr,
2243 CORE_ADDR *endaddr);
2283#ifndef GCC_COMPILED_FLAG_SYMBOL
2284#define GCC_COMPILED_FLAG_SYMBOL "gcc_compiled."
2288#ifndef GCC2_COMPILED_FLAG_SYMBOL
2289#define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled."
2304 CORE_ADDR *function_address_p);
2313#define gnu_ifunc_resolve_addr gnu_ifunc_fns_p->gnu_ifunc_resolve_addr
2314#define gnu_ifunc_resolve_name gnu_ifunc_fns_p->gnu_ifunc_resolve_name
2315#define gnu_ifunc_resolver_stop gnu_ifunc_fns_p->gnu_ifunc_resolver_stop
2316#define gnu_ifunc_resolver_return_stop \
2317 gnu_ifunc_fns_p->gnu_ifunc_resolver_return_stop
2397 const char *text,
const char *word,
const char *break_on,
2403 const char *,
const char *);
2405 const char *,
const char *,
2412 const char *,
const char *,
const char *);
2429template<
typename Symbol>
2460 CORE_ADDR func_addr);
2537 const char *symbol_name_regexp)
2569 std::vector<symbol_search>
search ()
const;
2604 const gdb::optional<compiled_regex> &preg)
const;
2613 const gdb::optional<compiled_regex> &preg,
2614 const gdb::optional<compiled_regex> &treg,
2615 std::set<symbol_search> *result_set)
const;
2624 const gdb::optional<compiled_regex> &preg,
2625 std::vector<symbol_search> *results)
const;
2644 (
const char *module_regexp,
const char *regexp,
2656 const struct symbol *sym);
2683#define symtab_create_debug_printf(fmt, ...) \
2684 debug_prefixed_printf_cond (symtab_create_debug >= 1, "symtab-create", fmt, ##__VA_ARGS__)
2689#define symtab_create_debug_printf_v(fmt, ...) \
2690 debug_prefixed_printf_cond (symtab_create_debug >= 2, "symtab-create", fmt, ##__VA_ARGS__)
2712#define symbol_lookup_debug_printf(fmt, ...) \
2713 debug_prefixed_printf_cond (symbol_lookup_debug_enabled (), \
2714 "symbol-lookup", fmt, ##__VA_ARGS__)
2718#define symbol_lookup_debug_printf_v(fmt, ...) \
2719 debug_prefixed_printf_cond (symbol_lookup_debug_enabled_v (), \
2720 "symbol-lookup", fmt, ##__VA_ARGS__)
2724#define SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT \
2725 scoped_debug_enter_exit (symbol_lookup_debug_enabled, "symbol-lookup")
2730 const char *search_name);
2733 const char *search_name);
2736 const char *real_path,
2739 gdb::function_view<
bool (
symtab *)> callback);
2742 gdb::function_view<
bool (
symtab *)> callback);
2767 gdb::function_view<symbol_found_callback_ftype> callback);
2777 gdb::function_view<symbol_found_callback_ftype> callback);
2821 const char *symname,
2823 const char *text,
const char *word);
2831 const std::vector<block_symbol> &
2838 const std::vector<bound_minimal_symbol> &
2850 std::vector<symtab *> *search_symtabs,
2901 bool matches (
const char *fullname)
const;
2924 bool group_by_objfile,
bool matches(const char *symbol_search_name, symbol_name_match_type match_type, completion_match_result *comp_match_res) const
const std::string & lookup_name() const
bool wild_match_p() const
ada_lookup_name_info(const lookup_name_info &lookup_name)
std::string m_encoded_name
std::vector< gdb::string_view > split_name() const
gdb::unique_xmalloc_ptr< char > m_malloc
const char * set_malloc_ptr(gdb::unique_xmalloc_ptr< char > &&str)
const char * set_malloc_ptr(char *ptr)
const char * m_symbol_name_regexp
std::vector< symbol_search > search() const
void set_exclude_minsyms(bool exclude_minsyms)
const char * m_symbol_type_regexp
void set_max_search_results(size_t max_search_results)
static bool is_suitable_msymbol(const enum search_domain kind, const minimal_symbol *msymbol)
enum search_domain m_kind
global_symbol_searcher(enum search_domain kind, const char *symbol_name_regexp)
void set_symbol_type_regexp(const char *regexp)
bool add_matching_msymbols(objfile *objfile, const gdb::optional< compiled_regex > &preg, std::vector< symbol_search > *results) const
bool add_matching_symbols(objfile *objfile, const gdb::optional< compiled_regex > &preg, const gdb::optional< compiled_regex > &treg, std::set< symbol_search > *result_set) const
bool expand_symtabs(objfile *objfile, const gdb::optional< compiled_regex > &preg) const
std::vector< const char * > filenames
size_t m_max_search_results
unsigned int search_name_hash(language lang) const
const demangle_for_lookup_info & go() const
static const lookup_name_info & match_any()
void maybe_init(Field &field, Args &&... args) const
const char * c_str() const
std::vector< gdb::string_view > split_name(language lang) const
gdb::optional< ada_lookup_name_info > m_ada
gdb::optional< demangle_for_lookup_info > m_cplus
std::array< bool, nr_languages > m_demangled_hashes_p
lookup_name_info(const std::string &name, symbol_name_match_type match_type, bool completion_mode=false, bool ignore_parameters=false)
symbol_name_match_type m_match_type
gdb::optional< demangle_for_lookup_info > m_go
const ada_lookup_name_info & ada() const
const char * language_lookup_name(language lang) const
const demangle_for_lookup_info & cplus() const
const demangle_for_lookup_info & d() const
lookup_name_info(const char *name, symbol_name_match_type match_type, bool completion_mode=false, bool ignore_parameters=false)
std::array< unsigned int, nr_languages > m_demangled_hashes
symbol_name_match_type match_type() const
const bool ignore_parameters() const
lookup_name_info(std::string &&name, symbol_name_match_type match_type, bool completion_mode=false, bool ignore_parameters=false)=delete
lookup_name_info make_ignore_params() const
gdb::string_view name() const
gdb::optional< demangle_for_lookup_info > m_d
bool completion_mode() const
std::vector< block_symbol > m_symbols
const std::vector< block_symbol > & matching_symbols() const
void find_all_symbols(const std::string &name, const struct language_defn *language, enum search_domain search_domain, std::vector< symtab * > *search_symtabs, struct program_space *search_pspace)
const std::vector< bound_minimal_symbol > & matching_msymbols() const
std::vector< bound_minimal_symbol > m_minimal_symbols
std::vector< gdb::unique_xmalloc_ptr< char > > completion_list
std::string copy_name(struct stoken token)
const struct block * block
struct minimal_symbol * minsym
void set_epilogue_unwind_valid(bool epilogue_unwind_valid)
symtab * primary_filetab() const
bool locations_valid() const
struct macro_table * macro_table() const
const struct blockvector * blockvector() const
enum language language() const
call_site * find_call_site(CORE_ADDR pc) const
const char * debugformat() const
void set_blockvector(struct blockvector *blockvector)
struct macro_table * m_macro_table
struct compunit_symtab * next
struct blockvector * blockvector()
struct compunit_symtab * user
void set_macro_table(struct macro_table *macro_table)
bool epilogue_unwind_valid() const
void set_locations_valid(bool locations_valid)
void set_call_site_htab(htab_t call_site_htab)
const char * m_debugformat
void set_dirname(const char *dirname)
void add_filetab(symtab *filetab)
struct blockvector * m_blockvector
void set_objfile(struct objfile *objfile)
void set_debugformat(const char *debugformat)
unsigned int m_locations_valid
struct compunit_symtab ** includes
struct objfile * objfile() const
void set_producer(const char *producer)
symtab_range filetabs() const
void set_primary_filetab(symtab *primary_filetab)
const char * dirname() const
const char * producer() const
unsigned int m_epilogue_unwind_valid
struct objfile * m_objfile
demangle_for_lookup_info(const lookup_name_info &lookup_name, language lang)
std::string m_demangled_name
const std::string & lookup_name() const
struct fn_fieldlist * fn_field
void set_section_index(short idx)
CORE_ADDR value_address() const
void set_demangled_name(const char *name, struct obstack *obstack)
const char * natural_name() const
void set_value_address(CORE_ADDR address)
union general_symbol_info::@183 language_specific
const char * demangled_name
const char * print_name() const
const struct common_block * common_block
void compute_and_set_names(gdb::string_view linkage_name, bool copy_name, struct objfile_per_bfd_storage *per_bfd, gdb::optional< hashval_t > hash=gdb::optional< hashval_t >())
const char * search_name() const
void set_unrelocated_address(unrelocated_addr addr)
enum language language() const
const char * demangled_name() const
const struct block * block
void set_language(enum language language, struct obstack *obstack)
short section_index() const
__extension__ enum language m_language
struct obj_section * obj_section(const struct objfile *objfile) const
const char * linkage_name() const
void set_linkage_name(const char *linkage_name)
union general_symbol_info::@182 m_value
unrelocated_addr unrelocated_address() const
unrelocated_addr unrel_addr
bool(* gnu_ifunc_resolve_name)(const char *function_name, CORE_ADDR *function_address_p)
void(* gnu_ifunc_resolver_return_stop)(code_breakpoint *b)
void(* gnu_ifunc_resolver_stop)(code_breakpoint *b)
CORE_ADDR(* gnu_ifunc_resolve_addr)(struct gdbarch *gdbarch, CORE_ADDR pc)
DISABLE_COPY_AND_ASSIGN(info_sources_filter)
bool matches(const char *fullname) const
info_sources_filter(match_on match_type, const char *regexp)
gdb::optional< compiled_regex > m_c_regexp
void set_unrelocated_pc(unrelocated_addr pc)
bool operator==(const linetable_entry &other) const
CORE_ADDR pc(const struct objfile *objfile) const
bool operator<(const linetable_entry &other) const
unrelocated_addr unrelocated_pc() const
struct linetable_entry item[1]
void set_type(minimal_symbol_type type)
struct minimal_symbol * hash_next
struct minimal_symbol * demangled_hash_next
unsigned int created_by_gdb
bool target_flag_2() const
bool maybe_copied(objfile *objfile) const
unsigned long size() const
CORE_ADDR value_address() const =delete
bool target_flag_1() const
unsigned int m_target_flag_2
unsigned int m_target_flag_1
void set_target_flag_2(bool target_flag_2)
__extension__ enum minimal_symbol_type m_type
void set_size(unsigned long size)
void set_target_flag_1(bool target_flag_1)
minimal_symbol_type type() const
unrelocated_addr unrelocated_end_address() const
LONGEST value_longest() const
unrelocated_addr unrelocated_address() const
struct type * concrete_type
CORE_ADDR(* get_frame_base)(struct symbol *framefunc, frame_info_ptr frame)
void(* find_frame_base_location)(struct symbol *framefunc, CORE_ADDR pc, const gdb_byte **start, size_t *length)
enum symbol_needs_kind(* get_symbol_read_needs)(struct symbol *symbol)
void(* describe_location)(struct symbol *symbol, CORE_ADDR addr, struct ui_file *stream)
void(* tracepoint_var_ref)(struct symbol *symbol, struct agent_expr *ax, struct axs_value *value)
unsigned char location_has_loclist
void(* generate_c_location)(struct symbol *symbol, string_file *stream, struct gdbarch *gdbarch, std::vector< bool > ®isters_used, CORE_ADDR pc, const char *result_name)
enum address_class aclass
const struct symbol_computed_ops * ops_computed
const struct symbol_block_ops * ops_block
const struct symbol_register_ops * ops_register
int(* register_number)(struct symbol *symbol, struct gdbarch *gdbarch)
static int compare_search_syms(const symbol_search &sym_a, const symbol_search &sym_b)
bool operator<(const symbol_search &other) const
symbol_search(block_enum block_, struct symbol *symbol_)
symbol_search(block_enum block_, struct minimal_symbol *minsym, struct objfile *objfile)
bool operator==(const symbol_search &other) const
struct bound_minimal_symbol msymbol
void set_line(unsigned int line)
symbol * value_chain() const
const block * value_block() const
address_class aclass() const
unsigned int m_aclass_index
struct type * type() const
void set_value_block(const block *block)
domain_enum domain() const
void set_aclass_index(unsigned int aclass_index)
LONGEST value_longest() const
struct gdbarch * arch() const
const gdb_byte * value_bytes() const
bool is_objfile_owned() const
unsigned int line() const
void set_is_artificial(bool artificial)
__extension__ enum symbol_subclass_kind subclass
__extension__ enum domain_enum m_domain
void set_type(struct type *type)
bool matches(domain_enum d) const
void set_is_argument(bool is_argument)
const symbol_impl & impl() const
void set_value_address(CORE_ADDR address)
CORE_ADDR value_address() const
struct objfile * objfile() const
void set_value_bytes(const gdb_byte *bytes)
symbol & operator=(const symbol &)=default
void set_is_inlined(bool is_inlined)
bool is_artificial() const
void set_value_longest(LONGEST value)
void set_value_chain(symbol *sym)
const common_block * value_common_block() const
symbol(const symbol &)=default
struct symbol * hash_next
struct symtab * symtab() const
void set_is_objfile_owned(bool is_objfile_owned)
unsigned int m_is_objfile_owned
void set_domain(domain_enum domain)
void set_symtab(struct symtab *symtab)
bool is_cplus_template_function() const
void set_value_common_block(const common_block *common_block)
struct obj_section * section
struct program_space * pspace
struct minimal_symbol * msymbol
const char * filename_for_id
enum language language() const
void set_linetable(const struct linetable *linetable)
struct compunit_symtab * compunit() const
void set_language(enum language language)
struct compunit_symtab * m_compunit
const struct linetable * linetable() const
void set_compunit(struct compunit_symtab *compunit)
const struct linetable * m_linetable
struct symbol ** template_arguments
void collect_file_symbol_completion_matches(completion_tracker &tracker, complete_symbol_mode, symbol_name_match_type name_match_type, const char *, const char *, const char *)
#define SYMBOL_DOMAIN_BITS
struct block_symbol lookup_static_symbol(const char *name, const domain_enum domain)
void fixup_symbol_section(struct symbol *sym, struct objfile *objfile)
completion_list make_source_files_completion_list(const char *, const char *)
next_range< compunit_symtab > compunit_symtab_range
struct symtab * find_pc_line_symtab(CORE_ADDR)
bool symbol_is_function_or_method(symbol *sym)
void collect_symbol_completion_matches(completion_tracker &tracker, complete_symbol_mode mode, symbol_name_match_type name_match_type, const char *, const char *)
symbol * find_function_alias_target(bound_minimal_symbol msymbol)
bool find_line_pc(struct symtab *, int, CORE_ADDR *)
const char multiple_symbols_all[]
bool matching_obj_sections(struct obj_section *, struct obj_section *)
struct compunit_symtab * find_pc_compunit_symtab(CORE_ADDR)
int register_symbol_block_impl(enum address_class aclass, const struct symbol_block_ops *ops)
const char multiple_symbols_ask[]
CORE_ADDR symbol_overlayed_address(CORE_ADDR, struct obj_section *)
struct block_symbol lookup_symbol(const char *, const struct block *, const domain_enum, struct field_of_this_result *)
bound_minimal_symbol find_gnu_ifunc(const symbol *sym)
struct symbol * find_pc_function(CORE_ADDR)
bool find_function_entry_range_from_pc(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
static bool is_main_symtab_of_compunit_symtab(struct symtab *symtab)
bool compare_glob_filenames_for_search(const char *filename, const char *search_name)
struct block_symbol lookup_global_symbol(const char *name, const struct block *block, const domain_enum domain)
void iterate_over_symtabs(const char *name, gdb::function_view< bool(symtab *)> callback)
std::vector< CORE_ADDR > find_pcs_for_symtab_line(struct symtab *symtab, int line, const linetable_entry **best_entry)
bool producer_is_realview(const char *producer)
const char multiple_symbols_cancel[]
CORE_ADDR skip_prologue_using_sal(struct gdbarch *gdbarch, CORE_ADDR func_addr)
bool symbol_found_callback_ftype(struct block_symbol *bsym)
bool iterate_over_symbols_terminated(const struct block *block, const lookup_name_info &name, const domain_enum domain, gdb::function_view< symbol_found_callback_ftype > callback)
bool symbol_matches_search_name(const struct general_symbol_info *gsymbol, const lookup_name_info &name)
struct symbol * find_pc_sect_containing_function(CORE_ADDR pc, struct obj_section *section)
#define SYMBOL_ACLASS_BITS
struct type * find_function_type(CORE_ADDR pc)
struct type * lookup_union(const char *, const struct block *)
gdb_static_assert(nr_minsym_types<=(1<< MINSYM_TYPE_BITS))
void reread_symbols(int from_tty)
bool symbol_name_matcher_ftype(const char *symbol_search_name, const lookup_name_info &lookup_name, completion_match_result *comp_match_res)
struct block_symbol lookup_global_symbol_from_objfile(struct objfile *main_objfile, enum block_enum block_index, const char *name, const domain_enum domain)
CORE_ADDR get_symbol_address(const struct symbol *sym)
#define SYMBOL_BLOCK_OPS(symbol)
static bool compunit_epilogue_unwind_valid(struct compunit_symtab *cust)
void collect_symbol_completion_matches_type(completion_tracker &tracker, const char *, const char *, enum type_code)
struct symbol * find_pc_sect_function(CORE_ADDR, struct obj_section *)
const struct gnu_ifunc_fns * gnu_ifunc_fns_p
struct type * lookup_struct(const char *, const struct block *)
int register_symbol_computed_impl(enum address_class, const struct symbol_computed_ops *)
gdb::array_view< const struct symbol_impl > symbol_impls
void default_collect_symbol_completion_matches_break_on(completion_tracker &tracker, complete_symbol_mode mode, symbol_name_match_type name_match_type, const char *text, const char *word, const char *break_on, enum type_code code)
bool compare_filenames_for_search(const char *filename, const char *search_name)
bool treg_matches_sym_type_name(const compiled_regex &treg, const struct symbol *sym)
std::pair< symbol_search, symbol_search > module_symbol_search
next_range< symtab > symtab_range
struct type * lookup_enum(const char *, const struct block *)
bool find_pc_partial_function_sym(CORE_ADDR pc, const general_symbol_info **sym, CORE_ADDR *address, CORE_ADDR *endaddr, const struct block **block=nullptr)
struct symtab_and_line find_pc_sect_line(CORE_ADDR, struct obj_section *, int)
bool find_pc_line_pc_range(CORE_ADDR, CORE_ADDR *, CORE_ADDR *)
int register_symbol_register_impl(enum address_class, const struct symbol_register_ops *)
std::vector< module_symbol_search > search_module_symbols(const char *module_regexp, const char *regexp, const char *type_regexp, search_domain kind)
const char * multiple_symbols_select_mode(void)
bool basenames_may_differ
struct symtab * lookup_symtab(const char *)
gdb::unique_xmalloc_ptr< char > symbol_find_demangled_name(struct general_symbol_info *gsymbol, const char *mangled)
bool iterate_over_symbols(const struct block *block, const lookup_name_info &name, const domain_enum domain, gdb::function_view< symbol_found_callback_ftype > callback)
static bool completion_skip_symbol(complete_symbol_mode mode, Symbol *sym)
bool find_line_pc_range(struct symtab_and_line, CORE_ADDR *, CORE_ADDR *)
struct block_symbol lookup_symbol_search_name(const char *search_name, const struct block *block, domain_enum domain)
void skip_prologue_sal(struct symtab_and_line *)
std::vector< CORE_ADDR > section_offsets
struct symtab * find_line_symtab(struct symtab *, int, int *, bool *)
struct block_symbol lookup_symbol_in_language(const char *, const struct block *, const domain_enum, enum language, struct field_of_this_result *)
struct symtab_and_line find_pc_line(CORE_ADDR, int)
bool iterate_over_some_symtabs(const char *name, const char *real_path, struct compunit_symtab *first, struct compunit_symtab *after_last, gdb::function_view< bool(symtab *)> callback)
void info_sources_worker(struct ui_out *uiout, bool group_by_objfile, const info_sources_filter &filter)
struct compunit_symtab * find_pc_sect_compunit_symtab(CORE_ADDR, struct obj_section *)
const char * domain_name(domain_enum)
struct symbol * lookup_symbol_in_block(const char *name, symbol_name_match_type match_type, const struct block *block, const domain_enum domain)
struct type * basic_lookup_transparent_type(const char *)
struct block_symbol lookup_symbol_in_static_block(const char *name, const struct block *block, const domain_enum domain)
bool completion_list_add_name(completion_tracker &tracker, language symbol_language, const char *symname, const lookup_name_info &lookup_name, const char *text, const char *word)
const char * demangle_for_lookup(const char *name, enum language lang, demangle_result_storage &storage)
symtab_and_line find_function_start_sal(symbol *sym, bool funfirstline)
unsigned int symbol_lookup_debug
void resolve_sal_pc(struct symtab_and_line *)
bool symbol_matches_domain(enum language symbol_language, domain_enum symbol_domain, domain_enum domain)
bool find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr, const struct block **block=nullptr)
struct block_symbol lookup_language_this(const struct language_defn *lang, const struct block *block)
struct type * find_gnu_ifunc_target_type(CORE_ADDR resolver_funaddr)
bool in_gnu_ifunc_stub(CORE_ADDR pc)
std::string symbol_to_info_string(struct symbol *sym, int block, enum search_domain kind)
CORE_ADDR find_solib_trampoline_target(frame_info_ptr, CORE_ADDR)
const char * search_domain_name(enum search_domain)
struct type * lookup_transparent_type(const char *)
int currently_reading_symtab
void clear_pc_function_cache(void)
struct symbol * find_symbol_at_address(CORE_ADDR)
static bool symbol_lookup_debug_enabled_v()
enum language main_language(void)
CORE_ADDR get_msymbol_address(struct objfile *objf, const struct minimal_symbol *minsym)
static bool symbol_lookup_debug_enabled()
unsigned int search_name_hash(enum language language, const char *search_name)
unsigned int symtab_create_debug