X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsymfile-debug.c;h=37959bf0d408dc96c89843f9f134bc56fb01c9be;hb=f1d293cc58bfe5f6b507dc2351f17632df8ab677;hp=9d8007d92e9805c7622f82aa34d1448740d675c1;hpb=76727919ceb590f03ff0f6db08b7ceab5b7aeaff;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c index 9d8007d92e..37959bf0d4 100644 --- a/gdb/symfile-debug.c +++ b/gdb/symfile-debug.c @@ -1,6 +1,6 @@ /* Debug logging for the symbol file functions for the GNU debugger, GDB. - Copyright (C) 2013-2018 Free Software Foundation, Inc. + Copyright (C) 2013-2019 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -39,16 +39,17 @@ struct debug_sym_fns_data { - const struct sym_fns *real_sf; - struct sym_fns debug_sf; + const struct sym_fns *real_sf = nullptr; + struct sym_fns debug_sf {}; }; /* We need to record a pointer to the real set of functions for each objfile. */ -static const struct objfile_data *symfile_debug_objfile_data_key; +static const struct objfile_key + symfile_debug_objfile_data_key; -/* If non-zero all calls to the symfile functions are logged. */ -static int debug_symfile = 0; +/* If true all calls to the symfile functions are logged. */ +static bool debug_symfile = false; /* Return non-zero if symfile debug logging is installed. */ @@ -56,7 +57,7 @@ static int symfile_debug_installed (struct objfile *objfile) { return (objfile->sf != NULL - && objfile_data (objfile, symfile_debug_objfile_data_key) != NULL); + && symfile_debug_objfile_data_key.get (objfile) != NULL); } /* Utility return the name to print for SYMTAB. */ @@ -73,8 +74,7 @@ static int debug_qf_has_symbols (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); int retval; retval = debug_data->real_sf->qf->has_symbols (objfile); @@ -89,8 +89,7 @@ static struct symtab * debug_qf_find_last_source_symtab (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); struct symtab *retval; fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n", @@ -108,8 +107,7 @@ static void debug_qf_forget_cached_source_info (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n", objfile_debug_name (objfile)); @@ -123,8 +121,7 @@ debug_qf_map_symtabs_matching_filename gdb::function_view callback) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->map_symtabs_matching_filename (%s, \"%s\", \"%s\", %s)\n", @@ -143,12 +140,11 @@ debug_qf_map_symtabs_matching_filename } static struct compunit_symtab * -debug_qf_lookup_symbol (struct objfile *objfile, int kind, const char *name, - domain_enum domain) +debug_qf_lookup_symbol (struct objfile *objfile, block_enum kind, + const char *name, domain_enum domain) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); struct compunit_symtab *retval; fprintf_filtered (gdb_stdlog, @@ -171,8 +167,7 @@ static void debug_qf_print_stats (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n", objfile_debug_name (objfile)); @@ -184,8 +179,7 @@ static void debug_qf_dump (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n", objfile_debug_name (objfile)); @@ -193,30 +187,12 @@ debug_qf_dump (struct objfile *objfile) debug_data->real_sf->qf->dump (objfile); } -static void -debug_qf_relocate (struct objfile *objfile, - const struct section_offsets *new_offsets, - const struct section_offsets *delta) -{ - const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); - - fprintf_filtered (gdb_stdlog, "qf->relocate (%s, %s, %s)\n", - objfile_debug_name (objfile), - host_address_to_string (new_offsets), - host_address_to_string (delta)); - - debug_data->real_sf->qf->relocate (objfile, new_offsets, delta); -} - static void debug_qf_expand_symtabs_for_function (struct objfile *objfile, const char *func_name) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->expand_symtabs_for_function (%s, \"%s\")\n", @@ -229,8 +205,7 @@ static void debug_qf_expand_all_symtabs (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n", objfile_debug_name (objfile)); @@ -243,8 +218,7 @@ debug_qf_expand_symtabs_with_fullname (struct objfile *objfile, const char *fullname) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->expand_symtabs_with_fullname (%s, \"%s\")\n", @@ -254,32 +228,25 @@ debug_qf_expand_symtabs_with_fullname (struct objfile *objfile, } static void -debug_qf_map_matching_symbols (struct objfile *objfile, - const char *name, domain_enum domain, - int global, - int (*callback) (struct block *, - struct symbol *, void *), - void *data, - symbol_name_match_type match, - symbol_compare_ftype *ordered_compare) +debug_qf_map_matching_symbols + (struct objfile *objfile, + const lookup_name_info &name, domain_enum domain, + int global, + gdb::function_view callback, + symbol_compare_ftype *ordered_compare) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, - "qf->map_matching_symbols (%s, \"%s\", %s, %d, %s, %s, %s, %s)\n", - objfile_debug_name (objfile), name, + "qf->map_matching_symbols (%s, %s, %d, %s)\n", + objfile_debug_name (objfile), domain_name (domain), global, - host_address_to_string (callback), - host_address_to_string (data), - plongest ((LONGEST) match), host_address_to_string (ordered_compare)); debug_data->real_sf->qf->map_matching_symbols (objfile, name, domain, global, - callback, data, - match, + callback, ordered_compare); } @@ -293,8 +260,7 @@ debug_qf_expand_symtabs_matching enum search_domain kind) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n", @@ -320,8 +286,7 @@ debug_qf_find_pc_sect_compunit_symtab (struct objfile *objfile, int warn_if_readin) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); struct compunit_symtab *retval; fprintf_filtered (gdb_stdlog, @@ -352,8 +317,7 @@ debug_qf_map_symbol_filenames (struct objfile *objfile, int need_fullname) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->map_symbol_filenames (%s, %s, %s, %d)\n", objfile_debug_name (objfile), @@ -370,8 +334,7 @@ debug_qf_find_compunit_symtab_by_address (struct objfile *objfile, CORE_ADDR address) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->find_compunit_symtab_by_address (%s, %s)\n", objfile_debug_name (objfile), @@ -401,7 +364,6 @@ static const struct quick_symbol_functions debug_sym_quick_functions = debug_qf_lookup_symbol, debug_qf_print_stats, debug_qf_dump, - debug_qf_relocate, debug_qf_expand_symtabs_for_function, debug_qf_expand_all_symtabs, debug_qf_expand_symtabs_with_fullname, @@ -414,14 +376,13 @@ static const struct quick_symbol_functions debug_sym_quick_functions = /* Debugging version of struct sym_probe_fns. */ -static const std::vector & +static const std::vector> & debug_sym_get_probes (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); - const std::vector &retval + const std::vector> &retval = debug_data->real_sf->sym_probe_fns->sym_get_probes (objfile); fprintf_filtered (gdb_stdlog, @@ -443,8 +404,7 @@ static void debug_sym_new_init (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "sf->sym_new_init (%s)\n", objfile_debug_name (objfile)); @@ -456,8 +416,7 @@ static void debug_sym_init (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "sf->sym_init (%s)\n", objfile_debug_name (objfile)); @@ -469,8 +428,7 @@ static void debug_sym_read (struct objfile *objfile, symfile_add_flags symfile_flags) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "sf->sym_read (%s, 0x%x)\n", objfile_debug_name (objfile), (unsigned) symfile_flags); @@ -482,8 +440,7 @@ static void debug_sym_read_psymbols (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "sf->sym_read_psymbols (%s)\n", objfile_debug_name (objfile)); @@ -495,8 +452,7 @@ static void debug_sym_finish (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "sf->sym_finish (%s)\n", objfile_debug_name (objfile)); @@ -509,8 +465,7 @@ debug_sym_offsets (struct objfile *objfile, const section_addr_info &info) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "sf->sym_offsets (%s, %s)\n", objfile_debug_name (objfile), @@ -532,8 +487,7 @@ static void debug_sym_read_linetable (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "sf->sym_read_linetable (%s)\n", objfile_debug_name (objfile)); @@ -545,8 +499,7 @@ static bfd_byte * debug_sym_relocate (struct objfile *objfile, asection *sectp, bfd_byte *buf) { const struct debug_sym_fns_data *debug_data - = ((const struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + = symfile_debug_objfile_data_key.get (objfile); bfd_byte *retval; retval = debug_data->real_sf->sym_relocate (objfile, sectp, buf); @@ -581,14 +534,6 @@ static const struct sym_fns debug_sym_fns = &debug_sym_quick_functions }; -/* Free the copy of sym_fns recorded in the registry. */ - -static void -symfile_debug_free_objfile (struct objfile *objfile, void *datum) -{ - xfree (datum); -} - /* Install the debugging versions of the symfile functions for OBJFILE. Do not call this if the debug versions are already installed. */ @@ -604,7 +549,7 @@ install_symfile_debug_logging (struct objfile *objfile) real_sf = objfile->sf; /* Alas we have to preserve NULL entries in REAL_SF. */ - debug_data = XCNEW (struct debug_sym_fns_data); + debug_data = new struct debug_sym_fns_data; #define COPY_SF_PTR(from, to, name, func) \ do { \ @@ -630,7 +575,7 @@ install_symfile_debug_logging (struct objfile *objfile) #undef COPY_SF_PTR debug_data->real_sf = real_sf; - set_objfile_data (objfile, symfile_debug_objfile_data_key, debug_data); + symfile_debug_objfile_data_key.set (objfile, debug_data); objfile->sf = &debug_data->debug_sf; } @@ -645,12 +590,10 @@ uninstall_symfile_debug_logging (struct objfile *objfile) /* The debug versions should be currently installed. */ gdb_assert (symfile_debug_installed (objfile)); - debug_data = ((struct debug_sym_fns_data *) - objfile_data (objfile, symfile_debug_objfile_data_key)); + debug_data = symfile_debug_objfile_data_key.get (objfile); objfile->sf = debug_data->real_sf; - xfree (debug_data); - set_objfile_data (objfile, symfile_debug_objfile_data_key, NULL); + symfile_debug_objfile_data_key.clear (objfile); } /* Call this function to set OBJFILE->SF. @@ -678,22 +621,21 @@ static void set_debug_symfile (const char *args, int from_tty, struct cmd_list_element *c) { struct program_space *pspace; - struct objfile *objfile; ALL_PSPACES (pspace) - ALL_PSPACE_OBJFILES (pspace, objfile) - { - if (debug_symfile) - { - if (!symfile_debug_installed (objfile)) - install_symfile_debug_logging (objfile); - } - else - { - if (symfile_debug_installed (objfile)) - uninstall_symfile_debug_logging (objfile); - } - } + for (objfile *objfile : pspace->objfiles ()) + { + if (debug_symfile) + { + if (!symfile_debug_installed (objfile)) + install_symfile_debug_logging (objfile); + } + else + { + if (symfile_debug_installed (objfile)) + uninstall_symfile_debug_logging (objfile); + } + } } static void @@ -706,9 +648,6 @@ show_debug_symfile (struct ui_file *file, int from_tty, void _initialize_symfile_debug (void) { - symfile_debug_objfile_data_key - = register_objfile_data_with_cleanup (NULL, symfile_debug_free_objfile); - add_setshow_boolean_cmd ("symfile", no_class, &debug_symfile, _("\ Set debugging of the symfile functions."), _("\ Show debugging of the symfile functions."), _("\