/* Do various things to symbol tables (other than lookup), for GDB.
- Copyright (C) 1986-2018 Free Software Foundation, Inc.
+ Copyright (C) 1986-2019 Free Software Foundation, Inc.
This file is part of GDB.
print_symbol_bcache_statistics (void)
{
struct program_space *pspace;
- struct objfile *objfile;
ALL_PSPACES (pspace)
- ALL_PSPACE_OBJFILES (pspace, objfile)
- {
- QUIT;
- printf_filtered (_("Byte cache statistics for '%s':\n"),
- objfile_name (objfile));
- print_bcache_statistics (psymbol_bcache_get_bcache (objfile->psymbol_cache),
- "partial symbol cache");
- print_bcache_statistics (objfile->per_bfd->macro_cache,
- "preprocessor macro cache");
- print_bcache_statistics (objfile->per_bfd->filename_cache,
- "file name cache");
- }
+ for (objfile *objfile : pspace->objfiles ())
+ {
+ QUIT;
+ printf_filtered (_("Byte cache statistics for '%s':\n"),
+ objfile_name (objfile));
+ print_bcache_statistics
+ (psymbol_bcache_get_bcache (objfile->partial_symtabs->psymbol_cache),
+ "partial symbol cache");
+ print_bcache_statistics (objfile->per_bfd->macro_cache,
+ "preprocessor macro cache");
+ print_bcache_statistics (objfile->per_bfd->filename_cache,
+ "file name cache");
+ }
}
void
print_objfile_statistics (void)
{
struct program_space *pspace;
- struct objfile *objfile;
- struct compunit_symtab *cu;
- struct symtab *s;
int i, linetables, blockvectors;
ALL_PSPACES (pspace)
- ALL_PSPACE_OBJFILES (pspace, objfile)
- {
- QUIT;
- printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile));
- if (OBJSTAT (objfile, n_stabs) > 0)
- printf_filtered (_(" Number of \"stab\" symbols read: %d\n"),
- OBJSTAT (objfile, n_stabs));
- if (objfile->per_bfd->n_minsyms > 0)
- printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
- objfile->per_bfd->n_minsyms);
- if (OBJSTAT (objfile, n_psyms) > 0)
- printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
- OBJSTAT (objfile, n_psyms));
- if (OBJSTAT (objfile, n_syms) > 0)
- printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
- OBJSTAT (objfile, n_syms));
- if (OBJSTAT (objfile, n_types) > 0)
- printf_filtered (_(" Number of \"types\" defined: %d\n"),
- OBJSTAT (objfile, n_types));
- if (objfile->sf)
- objfile->sf->qf->print_stats (objfile);
- i = linetables = blockvectors = 0;
- ALL_OBJFILE_FILETABS (objfile, cu, s)
- {
- i++;
- if (SYMTAB_LINETABLE (s) != NULL)
- linetables++;
- }
- ALL_OBJFILE_COMPUNITS (objfile, cu)
- blockvectors++;
- printf_filtered (_(" Number of symbol tables: %d\n"), i);
- printf_filtered (_(" Number of symbol tables with line tables: %d\n"),
- linetables);
- printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"),
- blockvectors);
-
- if (OBJSTAT (objfile, sz_strtab) > 0)
- printf_filtered (_(" Space used by string tables: %d\n"),
- OBJSTAT (objfile, sz_strtab));
- printf_filtered (_(" Total memory used for objfile obstack: %s\n"),
- pulongest (obstack_memory_used (&objfile
- ->objfile_obstack)));
- printf_filtered (_(" Total memory used for BFD obstack: %s\n"),
- pulongest (obstack_memory_used (&objfile->per_bfd
- ->storage_obstack)));
- printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
- bcache_memory_used (psymbol_bcache_get_bcache
- (objfile->psymbol_cache)));
- printf_filtered (_(" Total memory used for macro cache: %d\n"),
- bcache_memory_used (objfile->per_bfd->macro_cache));
- printf_filtered (_(" Total memory used for file name cache: %d\n"),
- bcache_memory_used (objfile->per_bfd->filename_cache));
- }
+ for (objfile *objfile : pspace->objfiles ())
+ {
+ QUIT;
+ printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile));
+ if (OBJSTAT (objfile, n_stabs) > 0)
+ printf_filtered (_(" Number of \"stab\" symbols read: %d\n"),
+ OBJSTAT (objfile, n_stabs));
+ if (objfile->per_bfd->n_minsyms > 0)
+ printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
+ objfile->per_bfd->n_minsyms);
+ if (OBJSTAT (objfile, n_psyms) > 0)
+ printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
+ OBJSTAT (objfile, n_psyms));
+ if (OBJSTAT (objfile, n_syms) > 0)
+ printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
+ OBJSTAT (objfile, n_syms));
+ if (OBJSTAT (objfile, n_types) > 0)
+ printf_filtered (_(" Number of \"types\" defined: %d\n"),
+ OBJSTAT (objfile, n_types));
+ if (objfile->sf)
+ objfile->sf->qf->print_stats (objfile);
+ i = linetables = 0;
+ for (compunit_symtab *cu : objfile->compunits ())
+ {
+ for (symtab *s : compunit_filetabs (cu))
+ {
+ i++;
+ if (SYMTAB_LINETABLE (s) != NULL)
+ linetables++;
+ }
+ }
+ blockvectors = std::distance (objfile->compunits ().begin (),
+ objfile->compunits ().end ());
+ printf_filtered (_(" Number of symbol tables: %d\n"), i);
+ printf_filtered (_(" Number of symbol tables with line tables: %d\n"),
+ linetables);
+ printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"),
+ blockvectors);
+
+ if (OBJSTAT (objfile, sz_strtab) > 0)
+ printf_filtered (_(" Space used by string tables: %d\n"),
+ OBJSTAT (objfile, sz_strtab));
+ printf_filtered (_(" Total memory used for objfile obstack: %s\n"),
+ pulongest (obstack_memory_used (&objfile
+ ->objfile_obstack)));
+ printf_filtered (_(" Total memory used for BFD obstack: %s\n"),
+ pulongest (obstack_memory_used (&objfile->per_bfd
+ ->storage_obstack)));
+ printf_filtered
+ (_(" Total memory used for psymbol cache: %d\n"),
+ bcache_memory_used (psymbol_bcache_get_bcache
+ (objfile->partial_symtabs->psymbol_cache)));
+ printf_filtered (_(" Total memory used for macro cache: %d\n"),
+ bcache_memory_used (objfile->per_bfd->macro_cache));
+ printf_filtered (_(" Total memory used for file name cache: %d\n"),
+ bcache_memory_used (objfile->per_bfd->filename_cache));
+ }
}
static void
dump_objfile (struct objfile *objfile)
{
- struct compunit_symtab *cust;
- struct symtab *symtab;
-
printf_filtered ("\nObject file %s: ", objfile_name (objfile));
printf_filtered ("Objfile at ");
gdb_print_host_address (objfile, gdb_stdout);
if (objfile->compunit_symtabs != NULL)
{
printf_filtered ("Symtabs:\n");
- ALL_OBJFILE_FILETABS (objfile, cust, symtab)
+ for (compunit_symtab *cu : objfile->compunits ())
{
- printf_filtered ("%s at ", symtab_to_filename_for_display (symtab));
- gdb_print_host_address (symtab, gdb_stdout);
- printf_filtered (", ");
- if (SYMTAB_OBJFILE (symtab) != objfile)
+ for (symtab *symtab : compunit_filetabs (cu))
{
- printf_filtered ("NOT ON CHAIN! ");
+ printf_filtered ("%s at ",
+ symtab_to_filename_for_display (symtab));
+ gdb_print_host_address (symtab, gdb_stdout);
+ printf_filtered (", ");
+ if (SYMTAB_OBJFILE (symtab) != objfile)
+ {
+ printf_filtered ("NOT ON CHAIN! ");
+ }
+ wrap_here (" ");
}
- wrap_here (" ");
}
printf_filtered ("\n\n");
}
dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
{
struct gdbarch *gdbarch = get_objfile_arch (objfile);
- struct minimal_symbol *msymbol;
int index;
char ms_type;
return;
}
index = 0;
- ALL_OBJFILE_MSYMBOLS (objfile, msymbol)
+ for (minimal_symbol *msymbol : objfile->msymbols ())
{
struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
struct objfile *objfile = SYMTAB_OBJFILE (symtab);
struct gdbarch *gdbarch = get_objfile_arch (objfile);
int i;
- struct dict_iterator iter;
+ struct mdict_iterator miter;
int len;
struct linetable *l;
const struct blockvector *bv;
even if we're using a hashtable, but nothing else but this message
wants it. */
fprintf_filtered (outfile, ", %d syms/buckets in ",
- dict_size (BLOCK_DICT (b)));
+ mdict_size (BLOCK_MULTIDICT (b)));
fputs_filtered (paddress (gdbarch, BLOCK_START (b)), outfile);
fprintf_filtered (outfile, "..");
fputs_filtered (paddress (gdbarch, BLOCK_END (b)), outfile);
/* Now print each symbol in this block (in no particular order, if
we're using a hashtable). Note that we only want this
block, not any blocks from included symtabs. */
- ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
+ ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b), miter, sym)
{
TRY
{
}
else
{
- struct objfile *objfile;
- struct compunit_symtab *cu;
- struct symtab *s;
int found = 0;
- ALL_OBJFILES (objfile)
+ for (objfile *objfile : current_program_space->objfiles ())
{
int print_for_objfile = 1;
if (!print_for_objfile)
continue;
- ALL_OBJFILE_FILETABS (objfile, cu, s)
+ for (compunit_symtab *cu : objfile->compunits ())
{
- int print_for_source = 0;
-
- QUIT;
- if (source_arg != NULL)
+ for (symtab *s : compunit_filetabs (cu))
{
- print_for_source
- = compare_filenames_for_search
- (symtab_to_filename_for_display (s), source_arg);
- found = 1;
+ int print_for_source = 0;
+
+ QUIT;
+ if (source_arg != NULL)
+ {
+ print_for_source
+ = compare_filenames_for_search
+ (symtab_to_filename_for_display (s), source_arg);
+ found = 1;
+ }
+ if (source_arg == NULL
+ || print_for_source)
+ dump_symtab (s, outfile);
}
- if (source_arg == NULL
- || print_for_source)
- dump_symtab (s, outfile);
}
}
{
struct ui_file *outfile = gdb_stdout;
char *objfile_arg = NULL;
- struct objfile *objfile;
int i, outfile_idx;
dont_repeat ();
outfile = &arg_outfile;
}
- ALL_OBJFILES (objfile)
- {
- QUIT;
- if (objfile_arg == NULL
- || compare_filenames_for_search (objfile_name (objfile), objfile_arg))
- dump_msymbols (objfile, outfile);
- }
+ for (objfile *objfile : current_program_space->objfiles ())
+ {
+ QUIT;
+ if (objfile_arg == NULL
+ || compare_filenames_for_search (objfile_name (objfile), objfile_arg))
+ dump_msymbols (objfile, outfile);
+ }
}
static void
maintenance_print_objfiles (const char *regexp, int from_tty)
{
struct program_space *pspace;
- struct objfile *objfile;
dont_repeat ();
re_comp (regexp);
ALL_PSPACES (pspace)
- ALL_PSPACE_OBJFILES (pspace, objfile)
+ for (objfile *objfile : pspace->objfiles ())
{
QUIT;
if (! regexp
maintenance_info_symtabs (const char *regexp, int from_tty)
{
struct program_space *pspace;
- struct objfile *objfile;
dont_repeat ();
re_comp (regexp);
ALL_PSPACES (pspace)
- ALL_PSPACE_OBJFILES (pspace, objfile)
- {
- struct compunit_symtab *cust;
- struct symtab *symtab;
-
- /* We don't want to print anything for this objfile until we
- actually find a symtab whose name matches. */
- int printed_objfile_start = 0;
-
- ALL_OBJFILE_COMPUNITS (objfile, cust)
- {
- int printed_compunit_symtab_start = 0;
-
- ALL_COMPUNIT_FILETABS (cust, symtab)
- {
- QUIT;
+ for (objfile *objfile : pspace->objfiles ())
+ {
+ /* We don't want to print anything for this objfile until we
+ actually find a symtab whose name matches. */
+ int printed_objfile_start = 0;
- if (! regexp
- || re_exec (symtab_to_filename_for_display (symtab)))
- {
- if (! printed_objfile_start)
- {
- printf_filtered ("{ objfile %s ", objfile_name (objfile));
- wrap_here (" ");
- printf_filtered ("((struct objfile *) %s)\n",
- host_address_to_string (objfile));
- printed_objfile_start = 1;
- }
- if (! printed_compunit_symtab_start)
- {
- printf_filtered (" { ((struct compunit_symtab *) %s)\n",
- host_address_to_string (cust));
- printf_filtered (" debugformat %s\n",
- COMPUNIT_DEBUGFORMAT (cust));
- printf_filtered (" producer %s\n",
- COMPUNIT_PRODUCER (cust) != NULL
- ? COMPUNIT_PRODUCER (cust)
- : "(null)");
- printf_filtered (" dirname %s\n",
- COMPUNIT_DIRNAME (cust) != NULL
- ? COMPUNIT_DIRNAME (cust)
- : "(null)");
- printf_filtered (" blockvector"
- " ((struct blockvector *) %s)\n",
- host_address_to_string
+ for (compunit_symtab *cust : objfile->compunits ())
+ {
+ int printed_compunit_symtab_start = 0;
+
+ for (symtab *symtab : compunit_filetabs (cust))
+ {
+ QUIT;
+
+ if (! regexp
+ || re_exec (symtab_to_filename_for_display (symtab)))
+ {
+ if (! printed_objfile_start)
+ {
+ printf_filtered ("{ objfile %s ", objfile_name (objfile));
+ wrap_here (" ");
+ printf_filtered ("((struct objfile *) %s)\n",
+ host_address_to_string (objfile));
+ printed_objfile_start = 1;
+ }
+ if (! printed_compunit_symtab_start)
+ {
+ printf_filtered (" { ((struct compunit_symtab *) %s)\n",
+ host_address_to_string (cust));
+ printf_filtered (" debugformat %s\n",
+ COMPUNIT_DEBUGFORMAT (cust));
+ printf_filtered (" producer %s\n",
+ COMPUNIT_PRODUCER (cust) != NULL
+ ? COMPUNIT_PRODUCER (cust)
+ : "(null)");
+ printf_filtered (" dirname %s\n",
+ COMPUNIT_DIRNAME (cust) != NULL
+ ? COMPUNIT_DIRNAME (cust)
+ : "(null)");
+ printf_filtered (" blockvector"
+ " ((struct blockvector *) %s)\n",
+ host_address_to_string
(COMPUNIT_BLOCKVECTOR (cust)));
- printed_compunit_symtab_start = 1;
- }
-
- printf_filtered ("\t{ symtab %s ",
- symtab_to_filename_for_display (symtab));
- wrap_here (" ");
- printf_filtered ("((struct symtab *) %s)\n",
- host_address_to_string (symtab));
- printf_filtered ("\t fullname %s\n",
- symtab->fullname != NULL
- ? symtab->fullname
- : "(null)");
- printf_filtered ("\t "
- "linetable ((struct linetable *) %s)\n",
- host_address_to_string (symtab->linetable));
- printf_filtered ("\t}\n");
- }
- }
-
- if (printed_compunit_symtab_start)
- printf_filtered (" }\n");
- }
+ printed_compunit_symtab_start = 1;
+ }
+
+ printf_filtered ("\t{ symtab %s ",
+ symtab_to_filename_for_display (symtab));
+ wrap_here (" ");
+ printf_filtered ("((struct symtab *) %s)\n",
+ host_address_to_string (symtab));
+ printf_filtered ("\t fullname %s\n",
+ symtab->fullname != NULL
+ ? symtab->fullname
+ : "(null)");
+ printf_filtered ("\t "
+ "linetable ((struct linetable *) %s)\n",
+ host_address_to_string (symtab->linetable));
+ printf_filtered ("\t}\n");
+ }
+ }
+
+ if (printed_compunit_symtab_start)
+ printf_filtered (" }\n");
+ }
- if (printed_objfile_start)
- printf_filtered ("}\n");
- }
+ if (printed_objfile_start)
+ printf_filtered ("}\n");
+ }
}
/* Check consistency of symtabs.
maintenance_check_symtabs (const char *ignore, int from_tty)
{
struct program_space *pspace;
- struct objfile *objfile;
ALL_PSPACES (pspace)
- ALL_PSPACE_OBJFILES (pspace, objfile)
- {
- struct compunit_symtab *cust;
-
- /* We don't want to print anything for this objfile until we
- actually find something worth printing. */
- int printed_objfile_start = 0;
-
- ALL_OBJFILE_COMPUNITS (objfile, cust)
- {
- int found_something = 0;
- struct symtab *symtab = compunit_primary_filetab (cust);
-
- QUIT;
-
- if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
- found_something = 1;
- /* Add more checks here. */
+ for (objfile *objfile : pspace->objfiles ())
+ {
+ /* We don't want to print anything for this objfile until we
+ actually find something worth printing. */
+ int printed_objfile_start = 0;
- if (found_something)
- {
- if (! printed_objfile_start)
- {
- printf_filtered ("{ objfile %s ", objfile_name (objfile));
- wrap_here (" ");
- printf_filtered ("((struct objfile *) %s)\n",
- host_address_to_string (objfile));
- printed_objfile_start = 1;
- }
- printf_filtered (" { symtab %s\n",
- symtab_to_filename_for_display (symtab));
- if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
- printf_filtered (" NULL blockvector\n");
- printf_filtered (" }\n");
- }
- }
+ for (compunit_symtab *cust : objfile->compunits ())
+ {
+ int found_something = 0;
+ struct symtab *symtab = compunit_primary_filetab (cust);
+
+ QUIT;
+
+ if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
+ found_something = 1;
+ /* Add more checks here. */
+
+ if (found_something)
+ {
+ if (! printed_objfile_start)
+ {
+ printf_filtered ("{ objfile %s ", objfile_name (objfile));
+ wrap_here (" ");
+ printf_filtered ("((struct objfile *) %s)\n",
+ host_address_to_string (objfile));
+ printed_objfile_start = 1;
+ }
+ printf_filtered (" { symtab %s\n",
+ symtab_to_filename_for_display (symtab));
+ if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
+ printf_filtered (" NULL blockvector\n");
+ printf_filtered (" }\n");
+ }
+ }
- if (printed_objfile_start)
- printf_filtered ("}\n");
- }
+ if (printed_objfile_start)
+ printf_filtered ("}\n");
+ }
}
/* Expand all symbol tables whose name matches an optional regexp. */
maintenance_expand_symtabs (const char *args, int from_tty)
{
struct program_space *pspace;
- struct objfile *objfile;
char *regexp = NULL;
/* We use buildargv here so that we handle spaces in the regexp
re_comp (regexp);
ALL_PSPACES (pspace)
- ALL_PSPACE_OBJFILES (pspace, objfile)
- {
- if (objfile->sf)
- {
- objfile->sf->qf->expand_symtabs_matching
- (objfile,
- [&] (const char *filename, bool basenames)
- {
- /* KISS: Only apply the regexp to the complete file name. */
- return (!basenames
- && (regexp == NULL || re_exec (filename)));
- },
- lookup_name_info::match_any (),
- [] (const char *symname)
- {
- /* Since we're not searching on symbols, just return true. */
- return true;
- },
- NULL,
- ALL_DOMAIN);
- }
- }
+ for (objfile *objfile : pspace->objfiles ())
+ {
+ if (objfile->sf)
+ {
+ objfile->sf->qf->expand_symtabs_matching
+ (objfile,
+ [&] (const char *filename, bool basenames)
+ {
+ /* KISS: Only apply the regexp to the complete file name. */
+ return (!basenames
+ && (regexp == NULL || re_exec (filename)));
+ },
+ lookup_name_info::match_any (),
+ [] (const char *symname)
+ {
+ /* Since we're not searching on symbols, just return true. */
+ return true;
+ },
+ NULL,
+ ALL_DOMAIN);
+ }
+ }
}
\f
maintenance_info_line_tables (const char *regexp, int from_tty)
{
struct program_space *pspace;
- struct objfile *objfile;
dont_repeat ();
re_comp (regexp);
ALL_PSPACES (pspace)
- ALL_PSPACE_OBJFILES (pspace, objfile)
- {
- struct compunit_symtab *cust;
- struct symtab *symtab;
-
- ALL_OBJFILE_COMPUNITS (objfile, cust)
- {
- ALL_COMPUNIT_FILETABS (cust, symtab)
- {
- QUIT;
-
- if (regexp == NULL
- || re_exec (symtab_to_filename_for_display (symtab)))
- maintenance_print_one_line_table (symtab, NULL);
- }
- }
- }
+ for (objfile *objfile : pspace->objfiles ())
+ {
+ for (compunit_symtab *cust : objfile->compunits ())
+ {
+ for (symtab *symtab : compunit_filetabs (cust))
+ {
+ QUIT;
+
+ if (regexp == NULL
+ || re_exec (symtab_to_filename_for_display (symtab)))
+ maintenance_print_one_line_table (symtab, NULL);
+ }
+ }
+ }
}
\f
add_cmd ("symbols", class_maintenance, maintenance_print_symbols, _("\
Print dump of current symbol definitions.\n\
-Usage: mt print symbols [-pc address] [--] [outfile]\n\
- mt print symbols [-objfile objfile] [-source source] [--] [outfile]\n\
+Usage: mt print symbols [-pc ADDRESS] [--] [OUTFILE]\n\
+ mt print symbols [-objfile OBJFILE] [-source SOURCE] [--] [OUTFILE]\n\
Entries in the full symbol table are dumped to file OUTFILE,\n\
or the terminal if OUTFILE is unspecified.\n\
If ADDRESS is provided, dump only the file for that address.\n\
add_cmd ("msymbols", class_maintenance, maintenance_print_msymbols, _("\
Print dump of current minimal symbol definitions.\n\
-Usage: mt print msymbols [-objfile objfile] [--] [outfile]\n\
+Usage: mt print msymbols [-objfile OBJFILE] [--] [OUTFILE]\n\
Entries in the minimal symbol table are dumped to file OUTFILE,\n\
or the terminal if OUTFILE is unspecified.\n\
If OBJFILE is provided, dump only that file's minimal symbols."),