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 (const 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
: pspace
->objfiles ())
70 printf_filtered (_("Byte cache statistics for '%s':\n"),
71 objfile_name (objfile
));
72 objfile
->partial_symtabs
->psymbol_cache
.print_statistics
73 ("partial symbol cache");
74 objfile
->per_bfd
->macro_cache
.print_statistics
75 ("preprocessor macro cache");
76 objfile
->per_bfd
->filename_cache
.print_statistics ("file name cache");
81 print_objfile_statistics (void)
83 struct program_space
*pspace
;
84 int i
, linetables
, blockvectors
;
87 for (objfile
*objfile
: pspace
->objfiles ())
90 printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile
));
91 if (OBJSTAT (objfile
, n_stabs
) > 0)
92 printf_filtered (_(" Number of \"stab\" symbols read: %d\n"),
93 OBJSTAT (objfile
, n_stabs
));
94 if (objfile
->per_bfd
->n_minsyms
> 0)
95 printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
96 objfile
->per_bfd
->n_minsyms
);
97 if (OBJSTAT (objfile
, n_psyms
) > 0)
98 printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
99 OBJSTAT (objfile
, n_psyms
));
100 if (OBJSTAT (objfile
, n_syms
) > 0)
101 printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
102 OBJSTAT (objfile
, n_syms
));
103 if (OBJSTAT (objfile
, n_types
) > 0)
104 printf_filtered (_(" Number of \"types\" defined: %d\n"),
105 OBJSTAT (objfile
, n_types
));
107 objfile
->sf
->qf
->print_stats (objfile
);
109 for (compunit_symtab
*cu
: objfile
->compunits ())
111 for (symtab
*s
: compunit_filetabs (cu
))
114 if (SYMTAB_LINETABLE (s
) != NULL
)
118 blockvectors
= std::distance (objfile
->compunits ().begin (),
119 objfile
->compunits ().end ());
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
)));
136 (_(" Total memory used for psymbol cache: %d\n"),
137 objfile
->partial_symtabs
->psymbol_cache
.memory_used ());
138 printf_filtered (_(" Total memory used for macro cache: %d\n"),
139 objfile
->per_bfd
->macro_cache
.memory_used ());
140 printf_filtered (_(" Total memory used for file name cache: %d\n"),
141 objfile
->per_bfd
->filename_cache
.memory_used ());
146 dump_objfile (struct objfile
*objfile
)
148 printf_filtered ("\nObject file %s: ", objfile_name (objfile
));
149 printf_filtered ("Objfile at ");
150 gdb_print_host_address (objfile
, gdb_stdout
);
151 printf_filtered (", bfd at ");
152 gdb_print_host_address (objfile
->obfd
, gdb_stdout
);
153 printf_filtered (", %d minsyms\n\n",
154 objfile
->per_bfd
->minimal_symbol_count
);
157 objfile
->sf
->qf
->dump (objfile
);
159 if (objfile
->compunit_symtabs
!= NULL
)
161 printf_filtered ("Symtabs:\n");
162 for (compunit_symtab
*cu
: objfile
->compunits ())
164 for (symtab
*symtab
: compunit_filetabs (cu
))
166 printf_filtered ("%s at ",
167 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! ");
177 printf_filtered ("\n\n");
181 /* Print minimal symbols from this objfile. */
184 dump_msymbols (struct objfile
*objfile
, struct ui_file
*outfile
)
186 struct gdbarch
*gdbarch
= get_objfile_arch (objfile
);
190 fprintf_filtered (outfile
, "\nObject file %s:\n\n", objfile_name (objfile
));
191 if (objfile
->per_bfd
->minimal_symbol_count
== 0)
193 fprintf_filtered (outfile
, "No minimal symbols found.\n");
197 for (minimal_symbol
*msymbol
: objfile
->msymbols ())
199 struct obj_section
*section
= MSYMBOL_OBJ_SECTION (objfile
, msymbol
);
201 switch (MSYMBOL_TYPE (msymbol
))
209 case mst_text_gnu_ifunc
:
210 case mst_data_gnu_ifunc
:
213 case mst_solib_trampoline
:
238 fprintf_filtered (outfile
, "[%2d] %c ", index
, ms_type
);
239 fputs_filtered (paddress (gdbarch
, MSYMBOL_VALUE_ADDRESS (objfile
,
242 fprintf_filtered (outfile
, " %s", MSYMBOL_LINKAGE_NAME (msymbol
));
245 if (section
->the_bfd_section
!= NULL
)
246 fprintf_filtered (outfile
, " section %s",
247 bfd_section_name (objfile
->obfd
,
248 section
->the_bfd_section
));
250 fprintf_filtered (outfile
, " spurious section %ld",
251 (long) (section
- objfile
->sections
));
253 if (MSYMBOL_DEMANGLED_NAME (msymbol
) != NULL
)
255 fprintf_filtered (outfile
, " %s", MSYMBOL_DEMANGLED_NAME (msymbol
));
257 if (msymbol
->filename
)
258 fprintf_filtered (outfile
, " %s", msymbol
->filename
);
259 fputs_filtered ("\n", outfile
);
262 if (objfile
->per_bfd
->minimal_symbol_count
!= index
)
264 warning (_("internal error: minimal symbol count %d != %d"),
265 objfile
->per_bfd
->minimal_symbol_count
, index
);
267 fprintf_filtered (outfile
, "\n");
271 dump_symtab_1 (struct symtab
*symtab
, struct ui_file
*outfile
)
273 struct objfile
*objfile
= SYMTAB_OBJFILE (symtab
);
274 struct gdbarch
*gdbarch
= get_objfile_arch (objfile
);
276 struct mdict_iterator miter
;
279 const struct blockvector
*bv
;
281 const struct block
*b
;
284 fprintf_filtered (outfile
, "\nSymtab for file %s\n",
285 symtab_to_filename_for_display (symtab
));
286 if (SYMTAB_DIRNAME (symtab
) != NULL
)
287 fprintf_filtered (outfile
, "Compilation directory is %s\n",
288 SYMTAB_DIRNAME (symtab
));
289 fprintf_filtered (outfile
, "Read from object file %s (",
290 objfile_name (objfile
));
291 gdb_print_host_address (objfile
, outfile
);
292 fprintf_filtered (outfile
, ")\n");
293 fprintf_filtered (outfile
, "Language: %s\n",
294 language_str (symtab
->language
));
296 /* First print the line table. */
297 l
= SYMTAB_LINETABLE (symtab
);
300 fprintf_filtered (outfile
, "\nLine table:\n\n");
302 for (i
= 0; i
< len
; i
++)
304 fprintf_filtered (outfile
, " line %d at ", l
->item
[i
].line
);
305 fputs_filtered (paddress (gdbarch
, l
->item
[i
].pc
), outfile
);
306 fprintf_filtered (outfile
, "\n");
309 /* Now print the block info, but only for compunit symtabs since we will
310 print lots of duplicate info otherwise. */
311 if (symtab
== COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab
)))
313 fprintf_filtered (outfile
, "\nBlockvector:\n\n");
314 bv
= SYMTAB_BLOCKVECTOR (symtab
);
315 len
= BLOCKVECTOR_NBLOCKS (bv
);
316 for (i
= 0; i
< len
; i
++)
318 b
= BLOCKVECTOR_BLOCK (bv
, i
);
319 depth
= block_depth (b
) * 2;
320 print_spaces (depth
, outfile
);
321 fprintf_filtered (outfile
, "block #%03d, object at ", i
);
322 gdb_print_host_address (b
, outfile
);
323 if (BLOCK_SUPERBLOCK (b
))
325 fprintf_filtered (outfile
, " under ");
326 gdb_print_host_address (BLOCK_SUPERBLOCK (b
), outfile
);
328 /* drow/2002-07-10: We could save the total symbols count
329 even if we're using a hashtable, but nothing else but this message
331 fprintf_filtered (outfile
, ", %d syms/buckets in ",
332 mdict_size (BLOCK_MULTIDICT (b
)));
333 fputs_filtered (paddress (gdbarch
, BLOCK_START (b
)), outfile
);
334 fprintf_filtered (outfile
, "..");
335 fputs_filtered (paddress (gdbarch
, BLOCK_END (b
)), outfile
);
336 if (BLOCK_FUNCTION (b
))
338 fprintf_filtered (outfile
, ", function %s",
339 SYMBOL_LINKAGE_NAME (BLOCK_FUNCTION (b
)));
340 if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b
)) != NULL
)
342 fprintf_filtered (outfile
, ", %s",
343 SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b
)));
346 fprintf_filtered (outfile
, "\n");
347 /* Now print each symbol in this block (in no particular order, if
348 we're using a hashtable). Note that we only want this
349 block, not any blocks from included symtabs. */
350 ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b
), miter
, sym
)
354 print_symbol (gdbarch
, sym
, depth
+ 1, outfile
);
356 CATCH (ex
, RETURN_MASK_ERROR
)
358 exception_fprintf (gdb_stderr
, ex
,
359 "Error printing symbol:\n");
364 fprintf_filtered (outfile
, "\n");
368 const char *compunit_filename
369 = symtab_to_filename_for_display (COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab
)));
371 fprintf_filtered (outfile
,
372 "\nBlockvector same as owning compunit: %s\n\n",
378 dump_symtab (struct symtab
*symtab
, struct ui_file
*outfile
)
380 /* Set the current language to the language of the symtab we're dumping
381 because certain routines used during dump_symtab() use the current
382 language to print an image of the symbol. We'll restore it later.
383 But use only real languages, not placeholders. */
384 if (symtab
->language
!= language_unknown
385 && symtab
->language
!= language_auto
)
387 scoped_restore_current_language save_lang
;
388 set_language (symtab
->language
);
389 dump_symtab_1 (symtab
, outfile
);
392 dump_symtab_1 (symtab
, outfile
);
396 maintenance_print_symbols (const char *args
, int from_tty
)
398 struct ui_file
*outfile
= gdb_stdout
;
399 char *address_arg
= NULL
, *source_arg
= NULL
, *objfile_arg
= NULL
;
404 gdb_argv
argv (args
);
406 for (i
= 0; argv
!= NULL
&& argv
[i
] != NULL
; ++i
)
408 if (strcmp (argv
[i
], "-pc") == 0)
410 if (argv
[i
+ 1] == NULL
)
411 error (_("Missing pc value"));
412 address_arg
= argv
[++i
];
414 else if (strcmp (argv
[i
], "-source") == 0)
416 if (argv
[i
+ 1] == NULL
)
417 error (_("Missing source file"));
418 source_arg
= argv
[++i
];
420 else if (strcmp (argv
[i
], "-objfile") == 0)
422 if (argv
[i
+ 1] == NULL
)
423 error (_("Missing objfile name"));
424 objfile_arg
= argv
[++i
];
426 else if (strcmp (argv
[i
], "--") == 0)
428 /* End of options. */
432 else if (argv
[i
][0] == '-')
434 /* Future proofing: Don't allow OUTFILE to begin with "-". */
435 error (_("Unknown option: %s"), argv
[i
]);
442 if (address_arg
!= NULL
&& source_arg
!= NULL
)
443 error (_("Must specify at most one of -pc and -source"));
445 stdio_file arg_outfile
;
447 if (argv
!= NULL
&& argv
[outfile_idx
] != NULL
)
449 if (argv
[outfile_idx
+ 1] != NULL
)
450 error (_("Junk at end of command"));
451 gdb::unique_xmalloc_ptr
<char> outfile_name
452 (tilde_expand (argv
[outfile_idx
]));
453 if (!arg_outfile
.open (outfile_name
.get (), FOPEN_WT
))
454 perror_with_name (outfile_name
.get ());
455 outfile
= &arg_outfile
;
458 if (address_arg
!= NULL
)
460 CORE_ADDR pc
= parse_and_eval_address (address_arg
);
461 struct symtab
*s
= find_pc_line_symtab (pc
);
464 error (_("No symtab for address: %s"), address_arg
);
465 dump_symtab (s
, outfile
);
471 for (objfile
*objfile
: current_program_space
->objfiles ())
473 int print_for_objfile
= 1;
475 if (objfile_arg
!= NULL
)
477 = compare_filenames_for_search (objfile_name (objfile
),
479 if (!print_for_objfile
)
482 for (compunit_symtab
*cu
: objfile
->compunits ())
484 for (symtab
*s
: compunit_filetabs (cu
))
486 int print_for_source
= 0;
489 if (source_arg
!= NULL
)
492 = compare_filenames_for_search
493 (symtab_to_filename_for_display (s
), source_arg
);
496 if (source_arg
== NULL
498 dump_symtab (s
, outfile
);
503 if (source_arg
!= NULL
&& !found
)
504 error (_("No symtab for source file: %s"), source_arg
);
508 /* Print symbol SYMBOL on OUTFILE. DEPTH says how far to indent. */
511 print_symbol (struct gdbarch
*gdbarch
, struct symbol
*symbol
,
512 int depth
, ui_file
*outfile
)
514 struct obj_section
*section
;
516 if (SYMBOL_OBJFILE_OWNED (symbol
))
517 section
= SYMBOL_OBJ_SECTION (symbol_objfile (symbol
), symbol
);
521 print_spaces (depth
, outfile
);
522 if (SYMBOL_DOMAIN (symbol
) == LABEL_DOMAIN
)
524 fprintf_filtered (outfile
, "label %s at ", SYMBOL_PRINT_NAME (symbol
));
525 fputs_filtered (paddress (gdbarch
, SYMBOL_VALUE_ADDRESS (symbol
)),
528 fprintf_filtered (outfile
, " section %s\n",
529 bfd_section_name (section
->the_bfd_section
->owner
,
530 section
->the_bfd_section
));
532 fprintf_filtered (outfile
, "\n");
536 if (SYMBOL_DOMAIN (symbol
) == STRUCT_DOMAIN
)
538 if (TYPE_NAME (SYMBOL_TYPE (symbol
)))
540 LA_PRINT_TYPE (SYMBOL_TYPE (symbol
), "", outfile
, 1, depth
,
541 &type_print_raw_options
);
545 fprintf_filtered (outfile
, "%s %s = ",
546 (TYPE_CODE (SYMBOL_TYPE (symbol
)) == TYPE_CODE_ENUM
548 : (TYPE_CODE (SYMBOL_TYPE (symbol
)) == TYPE_CODE_STRUCT
549 ? "struct" : "union")),
550 SYMBOL_LINKAGE_NAME (symbol
));
551 LA_PRINT_TYPE (SYMBOL_TYPE (symbol
), "", outfile
, 1, depth
,
552 &type_print_raw_options
);
554 fprintf_filtered (outfile
, ";\n");
558 if (SYMBOL_CLASS (symbol
) == LOC_TYPEDEF
)
559 fprintf_filtered (outfile
, "typedef ");
560 if (SYMBOL_TYPE (symbol
))
562 /* Print details of types, except for enums where it's clutter. */
563 LA_PRINT_TYPE (SYMBOL_TYPE (symbol
), SYMBOL_PRINT_NAME (symbol
),
565 TYPE_CODE (SYMBOL_TYPE (symbol
)) != TYPE_CODE_ENUM
,
567 &type_print_raw_options
);
568 fprintf_filtered (outfile
, "; ");
571 fprintf_filtered (outfile
, "%s ", SYMBOL_PRINT_NAME (symbol
));
573 switch (SYMBOL_CLASS (symbol
))
576 fprintf_filtered (outfile
, "const %s (%s)",
577 plongest (SYMBOL_VALUE (symbol
)),
578 hex_string (SYMBOL_VALUE (symbol
)));
581 case LOC_CONST_BYTES
:
584 struct type
*type
= check_typedef (SYMBOL_TYPE (symbol
));
586 fprintf_filtered (outfile
, "const %u hex bytes:",
588 for (i
= 0; i
< TYPE_LENGTH (type
); i
++)
589 fprintf_filtered (outfile
, " %02x",
590 (unsigned) SYMBOL_VALUE_BYTES (symbol
)[i
]);
595 fprintf_filtered (outfile
, "static at ");
596 fputs_filtered (paddress (gdbarch
, SYMBOL_VALUE_ADDRESS (symbol
)),
599 fprintf_filtered (outfile
, " section %s",
600 bfd_section_name (section
->the_bfd_section
->owner
,
601 section
->the_bfd_section
));
605 if (SYMBOL_IS_ARGUMENT (symbol
))
606 fprintf_filtered (outfile
, "parameter register %s",
607 plongest (SYMBOL_VALUE (symbol
)));
609 fprintf_filtered (outfile
, "register %s",
610 plongest (SYMBOL_VALUE (symbol
)));
614 fprintf_filtered (outfile
, "arg at offset %s",
615 hex_string (SYMBOL_VALUE (symbol
)));
619 fprintf_filtered (outfile
, "reference arg at %s",
620 hex_string (SYMBOL_VALUE (symbol
)));
623 case LOC_REGPARM_ADDR
:
624 fprintf_filtered (outfile
, "address parameter register %s",
625 plongest (SYMBOL_VALUE (symbol
)));
629 fprintf_filtered (outfile
, "local at offset %s",
630 hex_string (SYMBOL_VALUE (symbol
)));
637 fprintf_filtered (outfile
, "label at ");
638 fputs_filtered (paddress (gdbarch
, SYMBOL_VALUE_ADDRESS (symbol
)),
641 fprintf_filtered (outfile
, " section %s",
642 bfd_section_name (section
->the_bfd_section
->owner
,
643 section
->the_bfd_section
));
647 fprintf_filtered (outfile
, "block object ");
648 gdb_print_host_address (SYMBOL_BLOCK_VALUE (symbol
), outfile
);
649 fprintf_filtered (outfile
, ", ");
650 fputs_filtered (paddress (gdbarch
,
651 BLOCK_START (SYMBOL_BLOCK_VALUE (symbol
))),
653 fprintf_filtered (outfile
, "..");
654 fputs_filtered (paddress (gdbarch
,
655 BLOCK_END (SYMBOL_BLOCK_VALUE (symbol
))),
658 fprintf_filtered (outfile
, " section %s",
659 bfd_section_name (section
->the_bfd_section
->owner
,
660 section
->the_bfd_section
));
664 fprintf_filtered (outfile
, "computed at runtime");
668 fprintf_filtered (outfile
, "unresolved");
671 case LOC_OPTIMIZED_OUT
:
672 fprintf_filtered (outfile
, "optimized out");
676 fprintf_filtered (outfile
, "botched symbol class %x",
677 SYMBOL_CLASS (symbol
));
681 fprintf_filtered (outfile
, "\n");
685 maintenance_print_msymbols (const char *args
, int from_tty
)
687 struct ui_file
*outfile
= gdb_stdout
;
688 char *objfile_arg
= NULL
;
693 gdb_argv
argv (args
);
695 for (i
= 0; argv
!= NULL
&& argv
[i
] != NULL
; ++i
)
697 if (strcmp (argv
[i
], "-objfile") == 0)
699 if (argv
[i
+ 1] == NULL
)
700 error (_("Missing objfile name"));
701 objfile_arg
= argv
[++i
];
703 else if (strcmp (argv
[i
], "--") == 0)
705 /* End of options. */
709 else if (argv
[i
][0] == '-')
711 /* Future proofing: Don't allow OUTFILE to begin with "-". */
712 error (_("Unknown option: %s"), argv
[i
]);
719 stdio_file arg_outfile
;
721 if (argv
!= NULL
&& argv
[outfile_idx
] != NULL
)
723 if (argv
[outfile_idx
+ 1] != NULL
)
724 error (_("Junk at end of command"));
725 gdb::unique_xmalloc_ptr
<char> outfile_name
726 (tilde_expand (argv
[outfile_idx
]));
727 if (!arg_outfile
.open (outfile_name
.get (), FOPEN_WT
))
728 perror_with_name (outfile_name
.get ());
729 outfile
= &arg_outfile
;
732 for (objfile
*objfile
: current_program_space
->objfiles ())
735 if (objfile_arg
== NULL
736 || compare_filenames_for_search (objfile_name (objfile
), objfile_arg
))
737 dump_msymbols (objfile
, outfile
);
742 maintenance_print_objfiles (const char *regexp
, int from_tty
)
744 struct program_space
*pspace
;
752 for (objfile
*objfile
: pspace
->objfiles ())
756 || re_exec (objfile_name (objfile
)))
757 dump_objfile (objfile
);
761 /* List all the symbol tables whose names match REGEXP (optional). */
764 maintenance_info_symtabs (const char *regexp
, int from_tty
)
766 struct program_space
*pspace
;
774 for (objfile
*objfile
: pspace
->objfiles ())
776 /* We don't want to print anything for this objfile until we
777 actually find a symtab whose name matches. */
778 int printed_objfile_start
= 0;
780 for (compunit_symtab
*cust
: objfile
->compunits ())
782 int printed_compunit_symtab_start
= 0;
784 for (symtab
*symtab
: compunit_filetabs (cust
))
789 || re_exec (symtab_to_filename_for_display (symtab
)))
791 if (! printed_objfile_start
)
793 printf_filtered ("{ objfile %s ", objfile_name (objfile
));
795 printf_filtered ("((struct objfile *) %s)\n",
796 host_address_to_string (objfile
));
797 printed_objfile_start
= 1;
799 if (! printed_compunit_symtab_start
)
801 printf_filtered (" { ((struct compunit_symtab *) %s)\n",
802 host_address_to_string (cust
));
803 printf_filtered (" debugformat %s\n",
804 COMPUNIT_DEBUGFORMAT (cust
));
805 printf_filtered (" producer %s\n",
806 COMPUNIT_PRODUCER (cust
) != NULL
807 ? COMPUNIT_PRODUCER (cust
)
809 printf_filtered (" dirname %s\n",
810 COMPUNIT_DIRNAME (cust
) != NULL
811 ? COMPUNIT_DIRNAME (cust
)
813 printf_filtered (" blockvector"
814 " ((struct blockvector *) %s)\n",
815 host_address_to_string
816 (COMPUNIT_BLOCKVECTOR (cust
)));
817 printed_compunit_symtab_start
= 1;
820 printf_filtered ("\t{ symtab %s ",
821 symtab_to_filename_for_display (symtab
));
823 printf_filtered ("((struct symtab *) %s)\n",
824 host_address_to_string (symtab
));
825 printf_filtered ("\t fullname %s\n",
826 symtab
->fullname
!= NULL
829 printf_filtered ("\t "
830 "linetable ((struct linetable *) %s)\n",
831 host_address_to_string (symtab
->linetable
));
832 printf_filtered ("\t}\n");
836 if (printed_compunit_symtab_start
)
837 printf_filtered (" }\n");
840 if (printed_objfile_start
)
841 printf_filtered ("}\n");
845 /* Check consistency of symtabs.
846 An example of what this checks for is NULL blockvectors.
847 They can happen if there's a bug during debug info reading.
848 GDB assumes they are always non-NULL.
850 Note: This does not check for psymtab vs symtab consistency.
851 Use "maint check-psymtabs" for that. */
854 maintenance_check_symtabs (const char *ignore
, int from_tty
)
856 struct program_space
*pspace
;
859 for (objfile
*objfile
: pspace
->objfiles ())
861 /* We don't want to print anything for this objfile until we
862 actually find something worth printing. */
863 int printed_objfile_start
= 0;
865 for (compunit_symtab
*cust
: objfile
->compunits ())
867 int found_something
= 0;
868 struct symtab
*symtab
= compunit_primary_filetab (cust
);
872 if (COMPUNIT_BLOCKVECTOR (cust
) == NULL
)
874 /* Add more checks here. */
878 if (! printed_objfile_start
)
880 printf_filtered ("{ objfile %s ", objfile_name (objfile
));
882 printf_filtered ("((struct objfile *) %s)\n",
883 host_address_to_string (objfile
));
884 printed_objfile_start
= 1;
886 printf_filtered (" { symtab %s\n",
887 symtab_to_filename_for_display (symtab
));
888 if (COMPUNIT_BLOCKVECTOR (cust
) == NULL
)
889 printf_filtered (" NULL blockvector\n");
890 printf_filtered (" }\n");
894 if (printed_objfile_start
)
895 printf_filtered ("}\n");
899 /* Expand all symbol tables whose name matches an optional regexp. */
902 maintenance_expand_symtabs (const char *args
, int from_tty
)
904 struct program_space
*pspace
;
907 /* We use buildargv here so that we handle spaces in the regexp
908 in a way that allows adding more arguments later. */
909 gdb_argv
argv (args
);
917 error (_("Extra arguments after regexp."));
925 for (objfile
*objfile
: pspace
->objfiles ())
929 objfile
->sf
->qf
->expand_symtabs_matching
931 [&] (const char *filename
, bool basenames
)
933 /* KISS: Only apply the regexp to the complete file name. */
935 && (regexp
== NULL
|| re_exec (filename
)));
937 lookup_name_info::match_any (),
938 [] (const char *symname
)
940 /* Since we're not searching on symbols, just return true. */
950 /* Return the nexting depth of a block within other blocks in its symtab. */
953 block_depth (const struct block
*block
)
957 while ((block
= BLOCK_SUPERBLOCK (block
)) != NULL
)
965 /* Used by MAINTENANCE_INFO_LINE_TABLES to print the information about a
966 single line table. */
969 maintenance_print_one_line_table (struct symtab
*symtab
, void *data
)
971 struct linetable
*linetable
;
972 struct objfile
*objfile
;
974 objfile
= symtab
->compunit_symtab
->objfile
;
975 printf_filtered (_("objfile: %s ((struct objfile *) %s)\n"),
976 objfile_name (objfile
),
977 host_address_to_string (objfile
));
978 printf_filtered (_("compunit_symtab: ((struct compunit_symtab *) %s)\n"),
979 host_address_to_string (symtab
->compunit_symtab
));
980 printf_filtered (_("symtab: %s ((struct symtab *) %s)\n"),
981 symtab_to_fullname (symtab
),
982 host_address_to_string (symtab
));
983 linetable
= SYMTAB_LINETABLE (symtab
);
984 printf_filtered (_("linetable: ((struct linetable *) %s):\n"),
985 host_address_to_string (linetable
));
987 if (linetable
== NULL
)
988 printf_filtered (_("No line table.\n"));
989 else if (linetable
->nitems
<= 0)
990 printf_filtered (_("Line table has no lines.\n"));
995 /* Leave space for 6 digits of index and line number. After that the
996 tables will just not format as well. */
997 printf_filtered (_("%-6s %6s %s\n"),
998 _("INDEX"), _("LINE"), _("ADDRESS"));
1000 for (i
= 0; i
< linetable
->nitems
; ++i
)
1002 struct linetable_entry
*item
;
1004 item
= &linetable
->item
[i
];
1005 printf_filtered (_("%-6d %6d %s\n"), i
, item
->line
,
1006 core_addr_to_string (item
->pc
));
1013 /* Implement the 'maint info line-table' command. */
1016 maintenance_info_line_tables (const char *regexp
, int from_tty
)
1018 struct program_space
*pspace
;
1025 ALL_PSPACES (pspace
)
1026 for (objfile
*objfile
: pspace
->objfiles ())
1028 for (compunit_symtab
*cust
: objfile
->compunits ())
1030 for (symtab
*symtab
: compunit_filetabs (cust
))
1035 || re_exec (symtab_to_filename_for_display (symtab
)))
1036 maintenance_print_one_line_table (symtab
, NULL
);
1044 /* Do early runtime initializations. */
1047 _initialize_symmisc (void)
1053 add_cmd ("symbols", class_maintenance
, maintenance_print_symbols
, _("\
1054 Print dump of current symbol definitions.\n\
1055 Usage: mt print symbols [-pc ADDRESS] [--] [OUTFILE]\n\
1056 mt print symbols [-objfile OBJFILE] [-source SOURCE] [--] [OUTFILE]\n\
1057 Entries in the full symbol table are dumped to file OUTFILE,\n\
1058 or the terminal if OUTFILE is unspecified.\n\
1059 If ADDRESS is provided, dump only the file for that address.\n\
1060 If SOURCE is provided, dump only that file's symbols.\n\
1061 If OBJFILE is provided, dump only that file's minimal symbols."),
1062 &maintenanceprintlist
);
1064 add_cmd ("msymbols", class_maintenance
, maintenance_print_msymbols
, _("\
1065 Print dump of current minimal symbol definitions.\n\
1066 Usage: mt print msymbols [-objfile OBJFILE] [--] [OUTFILE]\n\
1067 Entries in the minimal symbol table are dumped to file OUTFILE,\n\
1068 or the terminal if OUTFILE is unspecified.\n\
1069 If OBJFILE is provided, dump only that file's minimal symbols."),
1070 &maintenanceprintlist
);
1072 add_cmd ("objfiles", class_maintenance
, maintenance_print_objfiles
,
1073 _("Print dump of current object file definitions.\n\
1074 With an argument REGEXP, list the object files with matching names."),
1075 &maintenanceprintlist
);
1077 add_cmd ("symtabs", class_maintenance
, maintenance_info_symtabs
, _("\
1078 List the full symbol tables for all object files.\n\
1079 This does not include information about individual symbols, blocks, or\n\
1080 linetables --- just the symbol table structures themselves.\n\
1081 With an argument REGEXP, list the symbol tables with matching names."),
1082 &maintenanceinfolist
);
1084 add_cmd ("line-table", class_maintenance
, maintenance_info_line_tables
, _("\
1085 List the contents of all line tables, from all symbol tables.\n\
1086 With an argument REGEXP, list just the line tables for the symbol\n\
1087 tables with matching names."),
1088 &maintenanceinfolist
);
1090 add_cmd ("check-symtabs", class_maintenance
, maintenance_check_symtabs
,
1092 Check consistency of currently expanded symtabs."),
1095 add_cmd ("expand-symtabs", class_maintenance
, maintenance_expand_symtabs
,
1096 _("Expand symbol tables.\n\
1097 With an argument REGEXP, only expand the symbol tables with matching names."),