diff options
Diffstat (limited to 'gdb/symfile-debug.c')
-rw-r--r-- | gdb/symfile-debug.c | 418 |
1 files changed, 201 insertions, 217 deletions
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c index 7c022ae..419f24d 100644 --- a/gdb/symfile-debug.c +++ b/gdb/symfile-debug.c @@ -68,312 +68,296 @@ debug_symtab_name (struct symtab *symtab) return symtab_to_filename_for_display (symtab); } -/* Debugging version of struct quick_symbol_functions. */ -static bool -debug_qf_has_symbols (struct objfile *objfile) +/* See objfiles.h. */ + +bool +objfile::has_partial_symbols () { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - bool retval; + bool retval = false; - retval = debug_data->real_sf->qf->has_symbols (objfile); + /* If we have not read psymbols, but we have a function capable of reading + them, then that is an indication that they are in fact available. Without + this function the symbols may have been already read in but they also may + not be present in this objfile. */ + if ((flags & OBJF_PSYMTABS_READ) == 0 + && sf != nullptr + && sf->sym_read_psymbols != NULL) + retval = true; + else if (sf != nullptr) + retval = sf->qf->has_symbols (this); - fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n", - objfile_debug_name (objfile), retval); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n", + objfile_debug_name (this), retval); return retval; } -static struct symtab * -debug_qf_find_last_source_symtab (struct objfile *objfile) +struct symtab * +objfile::find_last_source_symtab () { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - struct symtab *retval; + struct symtab *retval = nullptr; - fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n", - objfile_debug_name (objfile)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n", + objfile_debug_name (this)); - retval = debug_data->real_sf->qf->find_last_source_symtab (objfile); + if (sf != nullptr) + retval = sf->qf->find_last_source_symtab (this); - fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n", - retval ? debug_symtab_name (retval) : "NULL"); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n", + retval ? debug_symtab_name (retval) : "NULL"); return retval; } -static void -debug_qf_forget_cached_source_info (struct objfile *objfile) +void +objfile::forget_cached_source_info () { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n", - objfile_debug_name (objfile)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n", + objfile_debug_name (this)); - debug_data->real_sf->qf->forget_cached_source_info (objfile); + if (sf != nullptr) + sf->qf->forget_cached_source_info (this); } -static bool -debug_qf_map_symtabs_matching_filename - (struct objfile *objfile, const char *name, const char *real_path, +bool +objfile::map_symtabs_matching_filename + (const char *name, const char *real_path, gdb::function_view<bool (symtab *)> callback) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, - "qf->map_symtabs_matching_filename (%s, \"%s\", \"%s\", %s)\n", - objfile_debug_name (objfile), name, - real_path ? real_path : NULL, - host_address_to_string (&callback)); - - bool retval = (debug_data->real_sf->qf->map_symtabs_matching_filename - (objfile, name, real_path, callback)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->map_symtabs_matching_filename (%s, \"%s\", " + "\"%s\", %s)\n", + objfile_debug_name (this), name, + real_path ? real_path : NULL, + host_address_to_string (&callback)); + + bool retval = false; + if (sf != nullptr) + retval = (sf->qf->map_symtabs_matching_filename + (this, name, real_path, callback)); - fprintf_filtered (gdb_stdlog, - "qf->map_symtabs_matching_filename (...) = %d\n", - retval); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->map_symtabs_matching_filename (...) = %d\n", + retval); return retval; } -static struct compunit_symtab * -debug_qf_lookup_symbol (struct objfile *objfile, block_enum kind, - const char *name, domain_enum domain) +struct compunit_symtab * +objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - struct compunit_symtab *retval; + struct compunit_symtab *retval = nullptr; - fprintf_filtered (gdb_stdlog, - "qf->lookup_symbol (%s, %d, \"%s\", %s)\n", - objfile_debug_name (objfile), kind, name, - domain_name (domain)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->lookup_symbol (%s, %d, \"%s\", %s)\n", + objfile_debug_name (this), kind, name, + domain_name (domain)); - retval = debug_data->real_sf->qf->lookup_symbol (objfile, kind, name, - domain); + if (sf != nullptr) + retval = sf->qf->lookup_symbol (this, kind, name, domain); - fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n", - retval - ? debug_symtab_name (compunit_primary_filetab (retval)) - : "NULL"); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n", + retval + ? debug_symtab_name (compunit_primary_filetab (retval)) + : "NULL"); return retval; } -static void -debug_qf_print_stats (struct objfile *objfile) +void +objfile::print_stats () { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n", - objfile_debug_name (objfile)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n", + objfile_debug_name (this)); - debug_data->real_sf->qf->print_stats (objfile); + if (sf != nullptr) + sf->qf->print_stats (this); } -static void -debug_qf_dump (struct objfile *objfile) +void +objfile::dump () { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n", - objfile_debug_name (objfile)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n", + objfile_debug_name (this)); - debug_data->real_sf->qf->dump (objfile); + if (sf != nullptr) + sf->qf->dump (this); } -static void -debug_qf_expand_symtabs_for_function (struct objfile *objfile, - const char *func_name) +void +objfile::expand_symtabs_for_function (const char *func_name) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, - "qf->expand_symtabs_for_function (%s, \"%s\")\n", - objfile_debug_name (objfile), func_name); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->expand_symtabs_for_function (%s, \"%s\")\n", + objfile_debug_name (this), func_name); - debug_data->real_sf->qf->expand_symtabs_for_function (objfile, func_name); + if (sf != nullptr) + sf->qf->expand_symtabs_for_function (this, func_name); } -static void -debug_qf_expand_all_symtabs (struct objfile *objfile) +void +objfile::expand_all_symtabs () { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n", - objfile_debug_name (objfile)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n", + objfile_debug_name (this)); - debug_data->real_sf->qf->expand_all_symtabs (objfile); + if (sf != nullptr) + sf->qf->expand_all_symtabs (this); } -static void -debug_qf_expand_symtabs_with_fullname (struct objfile *objfile, - const char *fullname) +void +objfile::expand_symtabs_with_fullname (const char *fullname) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, - "qf->expand_symtabs_with_fullname (%s, \"%s\")\n", - objfile_debug_name (objfile), fullname); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->expand_symtabs_with_fullname (%s, \"%s\")\n", + objfile_debug_name (this), fullname); - debug_data->real_sf->qf->expand_symtabs_with_fullname (objfile, fullname); + if (sf != nullptr) + sf->qf->expand_symtabs_with_fullname (this, fullname); } -static void -debug_qf_map_matching_symbols - (struct objfile *objfile, - const lookup_name_info &name, domain_enum domain, +void +objfile::map_matching_symbols + (const lookup_name_info &name, domain_enum domain, int global, gdb::function_view<symbol_found_callback_ftype> callback, symbol_compare_ftype *ordered_compare) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - - fprintf_filtered (gdb_stdlog, - "qf->map_matching_symbols (%s, %s, %d, %s)\n", - objfile_debug_name (objfile), - domain_name (domain), global, - host_address_to_string (ordered_compare)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->map_matching_symbols (%s, %s, %d, %s)\n", + objfile_debug_name (this), + domain_name (domain), global, + host_address_to_string (ordered_compare)); - debug_data->real_sf->qf->map_matching_symbols (objfile, name, - domain, global, - callback, - ordered_compare); + if (sf != nullptr) + sf->qf->map_matching_symbols (this, name, domain, global, + callback, ordered_compare); } -static void -debug_qf_expand_symtabs_matching - (struct objfile *objfile, - gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, +void +objfile::expand_symtabs_matching + (gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, const lookup_name_info *lookup_name, gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, enum search_domain kind) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n", + objfile_debug_name (this), + host_address_to_string (&file_matcher), + host_address_to_string (&symbol_matcher), + host_address_to_string (&expansion_notify), + search_domain_name (kind)); - fprintf_filtered (gdb_stdlog, - "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n", - objfile_debug_name (objfile), - host_address_to_string (&file_matcher), - host_address_to_string (&symbol_matcher), - host_address_to_string (&expansion_notify), - search_domain_name (kind)); - - debug_data->real_sf->qf->expand_symtabs_matching (objfile, - file_matcher, - lookup_name, - symbol_matcher, - expansion_notify, - kind); -} - -static struct compunit_symtab * -debug_qf_find_pc_sect_compunit_symtab (struct objfile *objfile, - struct bound_minimal_symbol msymbol, + if (sf != nullptr) + sf->qf->expand_symtabs_matching (this, file_matcher, lookup_name, + symbol_matcher, expansion_notify, kind); +} + +struct compunit_symtab * +objfile::find_pc_sect_compunit_symtab (struct bound_minimal_symbol msymbol, CORE_ADDR pc, struct obj_section *section, int warn_if_readin) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - struct compunit_symtab *retval; + struct compunit_symtab *retval = nullptr; - fprintf_filtered (gdb_stdlog, - "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n", - objfile_debug_name (objfile), - host_address_to_string (msymbol.minsym), - hex_string (pc), - host_address_to_string (section), - warn_if_readin); - - retval - = debug_data->real_sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol, - pc, section, - warn_if_readin); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n", + objfile_debug_name (this), + host_address_to_string (msymbol.minsym), + hex_string (pc), + host_address_to_string (section), + warn_if_readin); + + if (sf != nullptr) + retval + = sf->qf->find_pc_sect_compunit_symtab (this, msymbol, pc, section, + warn_if_readin); - fprintf_filtered (gdb_stdlog, - "qf->find_pc_sect_compunit_symtab (...) = %s\n", - retval - ? debug_symtab_name (compunit_primary_filetab (retval)) - : "NULL"); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->find_pc_sect_compunit_symtab (...) = %s\n", + retval + ? debug_symtab_name (compunit_primary_filetab (retval)) + : "NULL"); return retval; } -static void -debug_qf_map_symbol_filenames (struct objfile *objfile, - symbol_filename_ftype *fun, void *data, +void +objfile::map_symbol_filenames (symbol_filename_ftype *fun, void *data, int need_fullname) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - fprintf_filtered (gdb_stdlog, - "qf->map_symbol_filenames (%s, %s, %s, %d)\n", - objfile_debug_name (objfile), - host_address_to_string (fun), - host_address_to_string (data), - need_fullname); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->map_symbol_filenames (%s, %s, %s, %d)\n", + objfile_debug_name (this), + host_address_to_string (fun), + host_address_to_string (data), + need_fullname); - debug_data->real_sf->qf->map_symbol_filenames (objfile, fun, data, - need_fullname); + if (sf != nullptr) + sf->qf->map_symbol_filenames (this, fun, data, need_fullname); } -static struct compunit_symtab * -debug_qf_find_compunit_symtab_by_address (struct objfile *objfile, - CORE_ADDR address) +struct compunit_symtab * +objfile::find_compunit_symtab_by_address (CORE_ADDR address) { - const struct debug_sym_fns_data *debug_data - = symfile_debug_objfile_data_key.get (objfile); - fprintf_filtered (gdb_stdlog, - "qf->find_compunit_symtab_by_address (%s, %s)\n", - objfile_debug_name (objfile), - hex_string (address)); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->find_compunit_symtab_by_address (%s, %s)\n", + objfile_debug_name (this), + hex_string (address)); struct compunit_symtab *result = NULL; - if (debug_data->real_sf->qf->map_symbol_filenames != NULL) - result - = debug_data->real_sf->qf->find_compunit_symtab_by_address (objfile, - address); + if (sf != nullptr && sf->qf->find_compunit_symtab_by_address != NULL) + result = sf->qf->find_compunit_symtab_by_address (this, address); - fprintf_filtered (gdb_stdlog, - "qf->find_compunit_symtab_by_address (...) = %s\n", - result - ? debug_symtab_name (compunit_primary_filetab (result)) - : "NULL"); + if (debug_symfile) + fprintf_filtered (gdb_stdlog, + "qf->find_compunit_symtab_by_address (...) = %s\n", + result + ? debug_symtab_name (compunit_primary_filetab (result)) + : "NULL"); + + return result; +} + +enum language +objfile::lookup_global_symbol_language (const char *name, + domain_enum domain, + bool *symbol_found_p) +{ + enum language result = language_unknown; + + if (sf != nullptr && sf->qf->lookup_global_symbol_language != nullptr) + result = sf->qf->lookup_global_symbol_language (this, name, domain, + symbol_found_p); + else + *symbol_found_p = false; return result; } -static const struct quick_symbol_functions debug_sym_quick_functions = -{ - debug_qf_has_symbols, - debug_qf_find_last_source_symtab, - debug_qf_forget_cached_source_info, - debug_qf_map_symtabs_matching_filename, - debug_qf_lookup_symbol, - NULL, - debug_qf_print_stats, - debug_qf_dump, - debug_qf_expand_symtabs_for_function, - debug_qf_expand_all_symtabs, - debug_qf_expand_symtabs_with_fullname, - debug_qf_map_matching_symbols, - debug_qf_expand_symtabs_matching, - debug_qf_find_pc_sect_compunit_symtab, - debug_qf_find_compunit_symtab_by_address, - debug_qf_map_symbol_filenames -}; /* Debugging version of struct sym_probe_fns. */ @@ -532,7 +516,7 @@ static const struct sym_fns debug_sym_fns = debug_sym_read_linetable, debug_sym_relocate, &debug_sym_probe_fns, - &debug_sym_quick_functions + nullptr }; /* Install the debugging versions of the symfile functions for OBJFILE. @@ -571,7 +555,7 @@ install_symfile_debug_logging (struct objfile *objfile) COPY_SF_PTR (real_sf, debug_data, sym_relocate, debug_sym_relocate); if (real_sf->sym_probe_fns) debug_data->debug_sf.sym_probe_fns = &debug_sym_probe_fns; - debug_data->debug_sf.qf = &debug_sym_quick_functions; + debug_data->debug_sf.qf = real_sf->qf; #undef COPY_SF_PTR |