1 /* Do various things to symbol tables (other than lookup), for GDB.
3 Copyright (C) 1986-2019 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "filenames.h"
27 #include "breakpoint.h"
29 #include "gdb_obstack.h"
33 #include "gdb_regex.h"
35 #include "dictionary.h"
36 #include "typeprint.h"
39 #include "readline/readline.h"
43 /* Unfortunately for debugging, stderr is usually a macro. This is painful
44 when calling functions that take FILE *'s from the debugger.
45 So we make a variable which has the same value and which is accessible when
46 debugging GDB with itself. Because stdin et al need not be constants,
47 we initialize them in the _initialize_symmisc function at the bottom
53 /* Prototypes for local functions */
55 static int block_depth (struct block *);
57 static void print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
58 int depth, ui_file *outfile);
62 print_symbol_bcache_statistics (void)
64 struct program_space *pspace;
67 for (objfile *objfile : all_objfiles (pspace))
70 printf_filtered (_("Byte cache statistics for '%s':\n"),
71 objfile_name (objfile));
72 print_bcache_statistics (psymbol_bcache_get_bcache (objfile->psymbol_cache),
73 "partial symbol cache");
74 print_bcache_statistics (objfile->per_bfd->macro_cache,
75 "preprocessor macro cache");
76 print_bcache_statistics (objfile->per_bfd->filename_cache,
82 print_objfile_statistics (void)
84 struct program_space *pspace;
85 struct compunit_symtab *cu;
87 int i, linetables, blockvectors;
90 for (objfile *objfile : all_objfiles (pspace))
93 printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile));
94 if (OBJSTAT (objfile, n_stabs) > 0)
95 printf_filtered (_(" Number of \"stab\" symbols read: %d\n"),
96 OBJSTAT (objfile, n_stabs));
97 if (objfile->per_bfd->n_minsyms > 0)
98 printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
99 objfile->per_bfd->n_minsyms);
100 if (OBJSTAT (objfile, n_psyms) > 0)
101 printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
102 OBJSTAT (objfile, n_psyms));
103 if (OBJSTAT (objfile, n_syms) > 0)
104 printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
105 OBJSTAT (objfile, n_syms));
106 if (OBJSTAT (objfile, n_types) > 0)
107 printf_filtered (_(" Number of \"types\" defined: %d\n"),
108 OBJSTAT (objfile, n_types));
110 objfile->sf->qf->print_stats (objfile);
111 i = linetables = blockvectors = 0;
112 ALL_OBJFILE_FILETABS (objfile, cu, s)
115 if (SYMTAB_LINETABLE (s) != NULL)
118 ALL_OBJFILE_COMPUNITS (objfile, cu)
120 printf_filtered (_(" Number of symbol tables: %d\n"), i);
121 printf_filtered (_(" Number of symbol tables with line tables: %d\n"),
123 printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"),
126 if (OBJSTAT (objfile, sz_strtab) > 0)
127 printf_filtered (_(" Space used by string tables: %d\n"),
128 OBJSTAT (objfile, sz_strtab));
129 printf_filtered (_(" Total memory used for objfile obstack: %s\n"),
130 pulongest (obstack_memory_used (&objfile
131 ->objfile_obstack)));
132 printf_filtered (_(" Total memory used for BFD obstack: %s\n"),
133 pulongest (obstack_memory_used (&objfile->per_bfd
134 ->storage_obstack)));
135 printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
136 bcache_memory_used (psymbol_bcache_get_bcache
137 (objfile->psymbol_cache)));
138 printf_filtered (_(" Total memory used for macro cache: %d\n"),
139 bcache_memory_used (objfile->per_bfd->macro_cache));
140 printf_filtered (_(" Total memory used for file name cache: %d\n"),
141 bcache_memory_used (objfile->per_bfd->filename_cache));
146 dump_objfile (struct objfile *objfile)
148 struct compunit_symtab *cust;
149 struct symtab *symtab;
151 printf_filtered ("\nObject file %s: ", objfile_name (objfile));
152 printf_filtered ("Objfile at ");
153 gdb_print_host_address (objfile, gdb_stdout);
154 printf_filtered (", bfd at ");
155 gdb_print_host_address (objfile->obfd, gdb_stdout);
156 printf_filtered (", %d minsyms\n\n",
157 objfile->per_bfd->minimal_symbol_count);
160 objfile->sf->qf->dump (objfile);
162 if (objfile->compunit_symtabs != NULL)
164 printf_filtered ("Symtabs:\n");
165 ALL_OBJFILE_FILETABS (objfile, cust, symtab)
167 printf_filtered ("%s at ", symtab_to_filename_for_display (symtab));
168 gdb_print_host_address (symtab, gdb_stdout);
169 printf_filtered (", ");
170 if (SYMTAB_OBJFILE (symtab) != objfile)
172 printf_filtered ("NOT ON CHAIN! ");
176 printf_filtered ("\n\n");
180 /* Print minimal symbols from this objfile. */
183 dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
185 struct gdbarch *gdbarch = get_objfile_arch (objfile);
189 fprintf_filtered (outfile, "\nObject file %s:\n\n", objfile_name (objfile));
190 if (objfile->per_bfd->minimal_symbol_count == 0)
192 fprintf_filtered (outfile, "No minimal symbols found.\n");
196 for (minimal_symbol *msymbol : objfile_msymbols (objfile))
198 struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
200 switch (MSYMBOL_TYPE (msymbol))
208 case mst_text_gnu_ifunc:
209 case mst_data_gnu_ifunc:
212 case mst_solib_trampoline:
237 fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
238 fputs_filtered (paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (objfile,
241 fprintf_filtered (outfile, " %s", MSYMBOL_LINKAGE_NAME (msymbol));
244 if (section->the_bfd_section != NULL)
245 fprintf_filtered (outfile, " section %s",
246 bfd_section_name (objfile->obfd,
247 section->the_bfd_section));
249 fprintf_filtered (outfile, " spurious section %ld",
250 (long) (section - objfile->sections));
252 if (MSYMBOL_DEMANGLED_NAME (msymbol) != NULL)
254 fprintf_filtered (outfile, " %s", MSYMBOL_DEMANGLED_NAME (msymbol));
256 if (msymbol->filename)
257 fprintf_filtered (outfile, " %s", msymbol->filename);
258 fputs_filtered ("\n", outfile);
261 if (objfile->per_bfd->minimal_symbol_count != index)
263 warning (_("internal error: minimal symbol count %d != %d"),
264 objfile->per_bfd->minimal_symbol_count, index);
266 fprintf_filtered (outfile, "\n");
270 dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
272 struct objfile *objfile = SYMTAB_OBJFILE (symtab);
273 struct gdbarch *gdbarch = get_objfile_arch (objfile);
275 struct dict_iterator iter;
278 const struct blockvector *bv;
283 fprintf_filtered (outfile, "\nSymtab for file %s\n",
284 symtab_to_filename_for_display (symtab));
285 if (SYMTAB_DIRNAME (symtab) != NULL)
286 fprintf_filtered (outfile, "Compilation directory is %s\n",
287 SYMTAB_DIRNAME (symtab));
288 fprintf_filtered (outfile, "Read from object file %s (",
289 objfile_name (objfile));
290 gdb_print_host_address (objfile, outfile);
291 fprintf_filtered (outfile, ")\n");
292 fprintf_filtered (outfile, "Language: %s\n",
293 language_str (symtab->language));
295 /* First print the line table. */
296 l = SYMTAB_LINETABLE (symtab);
299 fprintf_filtered (outfile, "\nLine table:\n\n");
301 for (i = 0; i < len; i++)
303 fprintf_filtered (outfile, " line %d at ", l->item[i].line);
304 fputs_filtered (paddress (gdbarch, l->item[i].pc), outfile);
305 fprintf_filtered (outfile, "\n");
308 /* Now print the block info, but only for compunit symtabs since we will
309 print lots of duplicate info otherwise. */
310 if (symtab == COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab)))
312 fprintf_filtered (outfile, "\nBlockvector:\n\n");
313 bv = SYMTAB_BLOCKVECTOR (symtab);
314 len = BLOCKVECTOR_NBLOCKS (bv);
315 for (i = 0; i < len; i++)
317 b = BLOCKVECTOR_BLOCK (bv, i);
318 depth = block_depth (b) * 2;
319 print_spaces (depth, outfile);
320 fprintf_filtered (outfile, "block #%03d, object at ", i);
321 gdb_print_host_address (b, outfile);
322 if (BLOCK_SUPERBLOCK (b))
324 fprintf_filtered (outfile, " under ");
325 gdb_print_host_address (BLOCK_SUPERBLOCK (b), outfile);
327 /* drow/2002-07-10: We could save the total symbols count
328 even if we're using a hashtable, but nothing else but this message
330 fprintf_filtered (outfile, ", %d syms/buckets in ",
331 dict_size (BLOCK_DICT (b)));
332 fputs_filtered (paddress (gdbarch, BLOCK_START (b)), outfile);
333 fprintf_filtered (outfile, "..");
334 fputs_filtered (paddress (gdbarch, BLOCK_END (b)), outfile);
335 if (BLOCK_FUNCTION (b))
337 fprintf_filtered (outfile, ", function %s",
338 SYMBOL_LINKAGE_NAME (BLOCK_FUNCTION (b)));
339 if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)) != NULL)
341 fprintf_filtered (outfile, ", %s",
342 SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)));
345 fprintf_filtered (outfile, "\n");
346 /* Now print each symbol in this block (in no particular order, if
347 we're using a hashtable). Note that we only want this
348 block, not any blocks from included symtabs. */
349 ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
353 print_symbol (gdbarch, sym, depth + 1, outfile);
355 CATCH (ex, RETURN_MASK_ERROR)
357 exception_fprintf (gdb_stderr, ex,
358 "Error printing symbol:\n");
363 fprintf_filtered (outfile, "\n");
367 const char *compunit_filename
368 = symtab_to_filename_for_display (COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab)));
370 fprintf_filtered (outfile,
371 "\nBlockvector same as owning compunit: %s\n\n",
377 dump_symtab (struct symtab *symtab, struct ui_file *outfile)
379 /* Set the current language to the language of the symtab we're dumping
380 because certain routines used during dump_symtab() use the current
381 language to print an image of the symbol. We'll restore it later.
382 But use only real languages, not placeholders. */
383 if (symtab->language != language_unknown
384 && symtab->language != language_auto)
386 enum language saved_lang;
388 saved_lang = set_language (symtab->language);
390 dump_symtab_1 (symtab, outfile);
392 set_language (saved_lang);
395 dump_symtab_1 (symtab, outfile);
399 maintenance_print_symbols (const char *args, int from_tty)
401 struct ui_file *outfile = gdb_stdout;
402 char *address_arg = NULL, *source_arg = NULL, *objfile_arg = NULL;
407 gdb_argv argv (args);
409 for (i = 0; argv != NULL && argv[i] != NULL; ++i)
411 if (strcmp (argv[i], "-pc") == 0)
413 if (argv[i + 1] == NULL)
414 error (_("Missing pc value"));
415 address_arg = argv[++i];
417 else if (strcmp (argv[i], "-source") == 0)
419 if (argv[i + 1] == NULL)
420 error (_("Missing source file"));
421 source_arg = argv[++i];
423 else if (strcmp (argv[i], "-objfile") == 0)
425 if (argv[i + 1] == NULL)
426 error (_("Missing objfile name"));
427 objfile_arg = argv[++i];
429 else if (strcmp (argv[i], "--") == 0)
431 /* End of options. */
435 else if (argv[i][0] == '-')
437 /* Future proofing: Don't allow OUTFILE to begin with "-". */
438 error (_("Unknown option: %s"), argv[i]);
445 if (address_arg != NULL && source_arg != NULL)
446 error (_("Must specify at most one of -pc and -source"));
448 stdio_file arg_outfile;
450 if (argv != NULL && argv[outfile_idx] != NULL)
452 if (argv[outfile_idx + 1] != NULL)
453 error (_("Junk at end of command"));
454 gdb::unique_xmalloc_ptr<char> outfile_name
455 (tilde_expand (argv[outfile_idx]));
456 if (!arg_outfile.open (outfile_name.get (), FOPEN_WT))
457 perror_with_name (outfile_name.get ());
458 outfile = &arg_outfile;
461 if (address_arg != NULL)
463 CORE_ADDR pc = parse_and_eval_address (address_arg);
464 struct symtab *s = find_pc_line_symtab (pc);
467 error (_("No symtab for address: %s"), address_arg);
468 dump_symtab (s, outfile);
472 struct compunit_symtab *cu;
476 for (objfile *objfile : all_objfiles (current_program_space))
478 int print_for_objfile = 1;
480 if (objfile_arg != NULL)
482 = compare_filenames_for_search (objfile_name (objfile),
484 if (!print_for_objfile)
487 ALL_OBJFILE_FILETABS (objfile, cu, s)
489 int print_for_source = 0;
492 if (source_arg != NULL)
495 = compare_filenames_for_search
496 (symtab_to_filename_for_display (s), source_arg);
499 if (source_arg == NULL
501 dump_symtab (s, outfile);
505 if (source_arg != NULL && !found)
506 error (_("No symtab for source file: %s"), source_arg);
510 /* Print symbol SYMBOL on OUTFILE. DEPTH says how far to indent. */
513 print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
514 int depth, ui_file *outfile)
516 struct obj_section *section;
518 if (SYMBOL_OBJFILE_OWNED (symbol))
519 section = SYMBOL_OBJ_SECTION (symbol_objfile (symbol), symbol);
523 print_spaces (depth, outfile);
524 if (SYMBOL_DOMAIN (symbol) == LABEL_DOMAIN)
526 fprintf_filtered (outfile, "label %s at ", SYMBOL_PRINT_NAME (symbol));
527 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
530 fprintf_filtered (outfile, " section %s\n",
531 bfd_section_name (section->the_bfd_section->owner,
532 section->the_bfd_section));
534 fprintf_filtered (outfile, "\n");
538 if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN)
540 if (TYPE_NAME (SYMBOL_TYPE (symbol)))
542 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth,
543 &type_print_raw_options);
547 fprintf_filtered (outfile, "%s %s = ",
548 (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_ENUM
550 : (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_STRUCT
551 ? "struct" : "union")),
552 SYMBOL_LINKAGE_NAME (symbol));
553 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth,
554 &type_print_raw_options);
556 fprintf_filtered (outfile, ";\n");
560 if (SYMBOL_CLASS (symbol) == LOC_TYPEDEF)
561 fprintf_filtered (outfile, "typedef ");
562 if (SYMBOL_TYPE (symbol))
564 /* Print details of types, except for enums where it's clutter. */
565 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), SYMBOL_PRINT_NAME (symbol),
567 TYPE_CODE (SYMBOL_TYPE (symbol)) != TYPE_CODE_ENUM,
569 &type_print_raw_options);
570 fprintf_filtered (outfile, "; ");
573 fprintf_filtered (outfile, "%s ", SYMBOL_PRINT_NAME (symbol));
575 switch (SYMBOL_CLASS (symbol))
578 fprintf_filtered (outfile, "const %s (%s)",
579 plongest (SYMBOL_VALUE (symbol)),
580 hex_string (SYMBOL_VALUE (symbol)));
583 case LOC_CONST_BYTES:
586 struct type *type = check_typedef (SYMBOL_TYPE (symbol));
588 fprintf_filtered (outfile, "const %u hex bytes:",
590 for (i = 0; i < TYPE_LENGTH (type); i++)
591 fprintf_filtered (outfile, " %02x",
592 (unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
597 fprintf_filtered (outfile, "static at ");
598 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
601 fprintf_filtered (outfile, " section %s",
602 bfd_section_name (section->the_bfd_section->owner,
603 section->the_bfd_section));
607 if (SYMBOL_IS_ARGUMENT (symbol))
608 fprintf_filtered (outfile, "parameter register %s",
609 plongest (SYMBOL_VALUE (symbol)));
611 fprintf_filtered (outfile, "register %s",
612 plongest (SYMBOL_VALUE (symbol)));
616 fprintf_filtered (outfile, "arg at offset %s",
617 hex_string (SYMBOL_VALUE (symbol)));
621 fprintf_filtered (outfile, "reference arg at %s",
622 hex_string (SYMBOL_VALUE (symbol)));
625 case LOC_REGPARM_ADDR:
626 fprintf_filtered (outfile, "address parameter register %s",
627 plongest (SYMBOL_VALUE (symbol)));
631 fprintf_filtered (outfile, "local at offset %s",
632 hex_string (SYMBOL_VALUE (symbol)));
639 fprintf_filtered (outfile, "label at ");
640 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
643 fprintf_filtered (outfile, " section %s",
644 bfd_section_name (section->the_bfd_section->owner,
645 section->the_bfd_section));
649 fprintf_filtered (outfile, "block object ");
650 gdb_print_host_address (SYMBOL_BLOCK_VALUE (symbol), outfile);
651 fprintf_filtered (outfile, ", ");
652 fputs_filtered (paddress (gdbarch,
653 BLOCK_START (SYMBOL_BLOCK_VALUE (symbol))),
655 fprintf_filtered (outfile, "..");
656 fputs_filtered (paddress (gdbarch,
657 BLOCK_END (SYMBOL_BLOCK_VALUE (symbol))),
660 fprintf_filtered (outfile, " section %s",
661 bfd_section_name (section->the_bfd_section->owner,
662 section->the_bfd_section));
666 fprintf_filtered (outfile, "computed at runtime");
670 fprintf_filtered (outfile, "unresolved");
673 case LOC_OPTIMIZED_OUT:
674 fprintf_filtered (outfile, "optimized out");
678 fprintf_filtered (outfile, "botched symbol class %x",
679 SYMBOL_CLASS (symbol));
683 fprintf_filtered (outfile, "\n");
687 maintenance_print_msymbols (const char *args, int from_tty)
689 struct ui_file *outfile = gdb_stdout;
690 char *objfile_arg = NULL;
695 gdb_argv argv (args);
697 for (i = 0; argv != NULL && argv[i] != NULL; ++i)
699 if (strcmp (argv[i], "-objfile") == 0)
701 if (argv[i + 1] == NULL)
702 error (_("Missing objfile name"));
703 objfile_arg = argv[++i];
705 else if (strcmp (argv[i], "--") == 0)
707 /* End of options. */
711 else if (argv[i][0] == '-')
713 /* Future proofing: Don't allow OUTFILE to begin with "-". */
714 error (_("Unknown option: %s"), argv[i]);
721 stdio_file arg_outfile;
723 if (argv != NULL && argv[outfile_idx] != NULL)
725 if (argv[outfile_idx + 1] != NULL)
726 error (_("Junk at end of command"));
727 gdb::unique_xmalloc_ptr<char> outfile_name
728 (tilde_expand (argv[outfile_idx]));
729 if (!arg_outfile.open (outfile_name.get (), FOPEN_WT))
730 perror_with_name (outfile_name.get ());
731 outfile = &arg_outfile;
734 for (objfile *objfile : all_objfiles (current_program_space))
737 if (objfile_arg == NULL
738 || compare_filenames_for_search (objfile_name (objfile), objfile_arg))
739 dump_msymbols (objfile, outfile);
744 maintenance_print_objfiles (const char *regexp, int from_tty)
746 struct program_space *pspace;
754 for (objfile *objfile : all_objfiles (pspace))
758 || re_exec (objfile_name (objfile)))
759 dump_objfile (objfile);
763 /* List all the symbol tables whose names match REGEXP (optional). */
766 maintenance_info_symtabs (const char *regexp, int from_tty)
768 struct program_space *pspace;
776 for (objfile *objfile : all_objfiles (pspace))
778 struct compunit_symtab *cust;
779 struct symtab *symtab;
781 /* We don't want to print anything for this objfile until we
782 actually find a symtab whose name matches. */
783 int printed_objfile_start = 0;
785 ALL_OBJFILE_COMPUNITS (objfile, cust)
787 int printed_compunit_symtab_start = 0;
789 ALL_COMPUNIT_FILETABS (cust, symtab)
794 || re_exec (symtab_to_filename_for_display (symtab)))
796 if (! printed_objfile_start)
798 printf_filtered ("{ objfile %s ", objfile_name (objfile));
800 printf_filtered ("((struct objfile *) %s)\n",
801 host_address_to_string (objfile));
802 printed_objfile_start = 1;
804 if (! printed_compunit_symtab_start)
806 printf_filtered (" { ((struct compunit_symtab *) %s)\n",
807 host_address_to_string (cust));
808 printf_filtered (" debugformat %s\n",
809 COMPUNIT_DEBUGFORMAT (cust));
810 printf_filtered (" producer %s\n",
811 COMPUNIT_PRODUCER (cust) != NULL
812 ? COMPUNIT_PRODUCER (cust)
814 printf_filtered (" dirname %s\n",
815 COMPUNIT_DIRNAME (cust) != NULL
816 ? COMPUNIT_DIRNAME (cust)
818 printf_filtered (" blockvector"
819 " ((struct blockvector *) %s)\n",
820 host_address_to_string
821 (COMPUNIT_BLOCKVECTOR (cust)));
822 printed_compunit_symtab_start = 1;
825 printf_filtered ("\t{ symtab %s ",
826 symtab_to_filename_for_display (symtab));
828 printf_filtered ("((struct symtab *) %s)\n",
829 host_address_to_string (symtab));
830 printf_filtered ("\t fullname %s\n",
831 symtab->fullname != NULL
834 printf_filtered ("\t "
835 "linetable ((struct linetable *) %s)\n",
836 host_address_to_string (symtab->linetable));
837 printf_filtered ("\t}\n");
841 if (printed_compunit_symtab_start)
842 printf_filtered (" }\n");
845 if (printed_objfile_start)
846 printf_filtered ("}\n");
850 /* Check consistency of symtabs.
851 An example of what this checks for is NULL blockvectors.
852 They can happen if there's a bug during debug info reading.
853 GDB assumes they are always non-NULL.
855 Note: This does not check for psymtab vs symtab consistency.
856 Use "maint check-psymtabs" for that. */
859 maintenance_check_symtabs (const char *ignore, int from_tty)
861 struct program_space *pspace;
864 for (objfile *objfile : all_objfiles (pspace))
866 struct compunit_symtab *cust;
868 /* We don't want to print anything for this objfile until we
869 actually find something worth printing. */
870 int printed_objfile_start = 0;
872 ALL_OBJFILE_COMPUNITS (objfile, cust)
874 int found_something = 0;
875 struct symtab *symtab = compunit_primary_filetab (cust);
879 if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
881 /* Add more checks here. */
885 if (! printed_objfile_start)
887 printf_filtered ("{ objfile %s ", objfile_name (objfile));
889 printf_filtered ("((struct objfile *) %s)\n",
890 host_address_to_string (objfile));
891 printed_objfile_start = 1;
893 printf_filtered (" { symtab %s\n",
894 symtab_to_filename_for_display (symtab));
895 if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
896 printf_filtered (" NULL blockvector\n");
897 printf_filtered (" }\n");
901 if (printed_objfile_start)
902 printf_filtered ("}\n");
906 /* Expand all symbol tables whose name matches an optional regexp. */
909 maintenance_expand_symtabs (const char *args, int from_tty)
911 struct program_space *pspace;
914 /* We use buildargv here so that we handle spaces in the regexp
915 in a way that allows adding more arguments later. */
916 gdb_argv argv (args);
924 error (_("Extra arguments after regexp."));
932 for (objfile *objfile : all_objfiles (pspace))
936 objfile->sf->qf->expand_symtabs_matching
938 [&] (const char *filename, bool basenames)
940 /* KISS: Only apply the regexp to the complete file name. */
942 && (regexp == NULL || re_exec (filename)));
944 lookup_name_info::match_any (),
945 [] (const char *symname)
947 /* Since we're not searching on symbols, just return true. */
957 /* Return the nexting depth of a block within other blocks in its symtab. */
960 block_depth (struct block *block)
964 while ((block = BLOCK_SUPERBLOCK (block)) != NULL)
972 /* Used by MAINTENANCE_INFO_LINE_TABLES to print the information about a
973 single line table. */
976 maintenance_print_one_line_table (struct symtab *symtab, void *data)
978 struct linetable *linetable;
979 struct objfile *objfile;
981 objfile = symtab->compunit_symtab->objfile;
982 printf_filtered (_("objfile: %s ((struct objfile *) %s)\n"),
983 objfile_name (objfile),
984 host_address_to_string (objfile));
985 printf_filtered (_("compunit_symtab: ((struct compunit_symtab *) %s)\n"),
986 host_address_to_string (symtab->compunit_symtab));
987 printf_filtered (_("symtab: %s ((struct symtab *) %s)\n"),
988 symtab_to_fullname (symtab),
989 host_address_to_string (symtab));
990 linetable = SYMTAB_LINETABLE (symtab);
991 printf_filtered (_("linetable: ((struct linetable *) %s):\n"),
992 host_address_to_string (linetable));
994 if (linetable == NULL)
995 printf_filtered (_("No line table.\n"));
996 else if (linetable->nitems <= 0)
997 printf_filtered (_("Line table has no lines.\n"));
1002 /* Leave space for 6 digits of index and line number. After that the
1003 tables will just not format as well. */
1004 printf_filtered (_("%-6s %6s %s\n"),
1005 _("INDEX"), _("LINE"), _("ADDRESS"));
1007 for (i = 0; i < linetable->nitems; ++i)
1009 struct linetable_entry *item;
1011 item = &linetable->item [i];
1012 printf_filtered (_("%-6d %6d %s\n"), i, item->line,
1013 core_addr_to_string (item->pc));
1020 /* Implement the 'maint info line-table' command. */
1023 maintenance_info_line_tables (const char *regexp, int from_tty)
1025 struct program_space *pspace;
1032 ALL_PSPACES (pspace)
1033 for (objfile *objfile : all_objfiles (pspace))
1035 struct compunit_symtab *cust;
1036 struct symtab *symtab;
1038 ALL_OBJFILE_COMPUNITS (objfile, cust)
1040 ALL_COMPUNIT_FILETABS (cust, symtab)
1045 || re_exec (symtab_to_filename_for_display (symtab)))
1046 maintenance_print_one_line_table (symtab, NULL);
1054 /* Do early runtime initializations. */
1057 _initialize_symmisc (void)
1063 add_cmd ("symbols", class_maintenance, maintenance_print_symbols, _("\
1064 Print dump of current symbol definitions.\n\
1065 Usage: mt print symbols [-pc ADDRESS] [--] [OUTFILE]\n\
1066 mt print symbols [-objfile OBJFILE] [-source SOURCE] [--] [OUTFILE]\n\
1067 Entries in the full symbol table are dumped to file OUTFILE,\n\
1068 or the terminal if OUTFILE is unspecified.\n\
1069 If ADDRESS is provided, dump only the file for that address.\n\
1070 If SOURCE is provided, dump only that file's symbols.\n\
1071 If OBJFILE is provided, dump only that file's minimal symbols."),
1072 &maintenanceprintlist);
1074 add_cmd ("msymbols", class_maintenance, maintenance_print_msymbols, _("\
1075 Print dump of current minimal symbol definitions.\n\
1076 Usage: mt print msymbols [-objfile OBJFILE] [--] [OUTFILE]\n\
1077 Entries in the minimal symbol table are dumped to file OUTFILE,\n\
1078 or the terminal if OUTFILE is unspecified.\n\
1079 If OBJFILE is provided, dump only that file's minimal symbols."),
1080 &maintenanceprintlist);
1082 add_cmd ("objfiles", class_maintenance, maintenance_print_objfiles,
1083 _("Print dump of current object file definitions.\n\
1084 With an argument REGEXP, list the object files with matching names."),
1085 &maintenanceprintlist);
1087 add_cmd ("symtabs", class_maintenance, maintenance_info_symtabs, _("\
1088 List the full symbol tables for all object files.\n\
1089 This does not include information about individual symbols, blocks, or\n\
1090 linetables --- just the symbol table structures themselves.\n\
1091 With an argument REGEXP, list the symbol tables with matching names."),
1092 &maintenanceinfolist);
1094 add_cmd ("line-table", class_maintenance, maintenance_info_line_tables, _("\
1095 List the contents of all line tables, from all symbol tables.\n\
1096 With an argument REGEXP, list just the line tables for the symbol\n\
1097 tables with matching names."),
1098 &maintenanceinfolist);
1100 add_cmd ("check-symtabs", class_maintenance, maintenance_check_symtabs,
1102 Check consistency of currently expanded symtabs."),
1105 add_cmd ("expand-symtabs", class_maintenance, maintenance_expand_symtabs,
1106 _("Expand symbol tables.\n\
1107 With an argument REGEXP, only expand the symbol tables with matching names."),