1 /* Do various things to symbol tables (other than lookup), for GDB.
3 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2007, 2008, 2009, 2010,
5 2011 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26 #include "filenames.h"
29 #include "breakpoint.h"
31 #include "gdb_obstack.h"
32 #include "exceptions.h"
36 #include "gdb_regex.h"
38 #include "dictionary.h"
40 #include "gdb_string.h"
41 #include "readline/readline.h"
46 #define DEV_TTY "/dev/tty"
49 /* Unfortunately for debugging, stderr is usually a macro. This is painful
50 when calling functions that take FILE *'s from the debugger.
51 So we make a variable which has the same value and which is accessible when
52 debugging GDB with itself. Because stdin et al need not be constants,
53 we initialize them in the _initialize_symmisc function at the bottom
59 /* Prototypes for local functions */
61 static void dump_symtab (struct objfile *, struct symtab *,
64 static void dump_msymbols (struct objfile *, struct ui_file *);
66 static void dump_objfile (struct objfile *);
68 static int block_depth (struct block *);
70 void _initialize_symmisc (void);
72 struct print_symbol_args
74 struct gdbarch *gdbarch;
75 struct symbol *symbol;
77 struct ui_file *outfile;
80 static int print_symbol (void *);
82 /* Free all the storage associated with the struct symtab <- S.
83 Note that some symtabs have contents that all live inside one big block of
84 memory, and some share the contents of another symbol table and so you
85 should not free the contents on their behalf (except sometimes the
86 linetable, which maybe per symtab even when the rest is not).
87 It is s->free_code that says which alternative to use. */
90 free_symtab (struct symtab *s)
95 /* All the contents are part of a big block of memory (an obstack),
96 and some other symtab is in charge of freeing that block.
97 Therefore, do nothing. */
101 /* Everything will be freed either by our `free_func'
102 or by some other symtab, except for our linetable.
105 xfree (LINETABLE (s));
109 /* If there is a single block of memory to free, free it. */
110 if (s->free_func != NULL)
113 /* Free source-related stuff. */
114 if (s->line_charpos != NULL)
115 xfree (s->line_charpos);
116 if (s->fullname != NULL)
118 if (s->debugformat != NULL)
119 xfree (s->debugformat);
124 print_symbol_bcache_statistics (void)
126 struct program_space *pspace;
127 struct objfile *objfile;
131 ALL_PSPACE_OBJFILES (pspace, objfile)
133 printf_filtered (_("Byte cache statistics for '%s':\n"), objfile->name);
134 print_bcache_statistics (psymbol_bcache_get_bcache (objfile->psymbol_cache),
135 "partial symbol cache");
136 print_bcache_statistics (objfile->macro_cache, "preprocessor macro cache");
137 print_bcache_statistics (objfile->filename_cache, "file name cache");
143 print_objfile_statistics (void)
145 struct program_space *pspace;
146 struct objfile *objfile;
148 int i, linetables, blockvectors;
152 ALL_PSPACE_OBJFILES (pspace, objfile)
154 printf_filtered (_("Statistics for '%s':\n"), objfile->name);
155 if (OBJSTAT (objfile, n_stabs) > 0)
156 printf_filtered (_(" Number of \"stab\" symbols read: %d\n"),
157 OBJSTAT (objfile, n_stabs));
158 if (OBJSTAT (objfile, n_minsyms) > 0)
159 printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
160 OBJSTAT (objfile, n_minsyms));
161 if (OBJSTAT (objfile, n_psyms) > 0)
162 printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
163 OBJSTAT (objfile, n_psyms));
164 if (OBJSTAT (objfile, n_syms) > 0)
165 printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
166 OBJSTAT (objfile, n_syms));
167 if (OBJSTAT (objfile, n_types) > 0)
168 printf_filtered (_(" Number of \"types\" defined: %d\n"),
169 OBJSTAT (objfile, n_types));
171 objfile->sf->qf->print_stats (objfile);
172 i = linetables = blockvectors = 0;
173 ALL_OBJFILE_SYMTABS (objfile, s)
176 if (s->linetable != NULL)
181 printf_filtered (_(" Number of symbol tables: %d\n"), i);
182 printf_filtered (_(" Number of symbol tables with line tables: %d\n"),
184 printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"),
187 if (OBJSTAT (objfile, sz_strtab) > 0)
188 printf_filtered (_(" Space used by a.out string tables: %d\n"),
189 OBJSTAT (objfile, sz_strtab));
190 printf_filtered (_(" Total memory used for objfile obstack: %d\n"),
191 obstack_memory_used (&objfile->objfile_obstack));
192 printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
193 bcache_memory_used (psymbol_bcache_get_bcache
194 (objfile->psymbol_cache)));
195 printf_filtered (_(" Total memory used for macro cache: %d\n"),
196 bcache_memory_used (objfile->macro_cache));
197 printf_filtered (_(" Total memory used for file name cache: %d\n"),
198 bcache_memory_used (objfile->filename_cache));
204 dump_objfile (struct objfile *objfile)
206 struct symtab *symtab;
208 printf_filtered ("\nObject file %s: ", objfile->name);
209 printf_filtered ("Objfile at ");
210 gdb_print_host_address (objfile, gdb_stdout);
211 printf_filtered (", bfd at ");
212 gdb_print_host_address (objfile->obfd, gdb_stdout);
213 printf_filtered (", %d minsyms\n\n",
214 objfile->minimal_symbol_count);
217 objfile->sf->qf->dump (objfile);
219 if (objfile->symtabs)
221 printf_filtered ("Symtabs:\n");
222 for (symtab = objfile->symtabs;
224 symtab = symtab->next)
226 printf_filtered ("%s at ", symtab->filename);
227 gdb_print_host_address (symtab, gdb_stdout);
228 printf_filtered (", ");
229 if (symtab->objfile != objfile)
231 printf_filtered ("NOT ON CHAIN! ");
235 printf_filtered ("\n\n");
239 /* Print minimal symbols from this objfile. */
242 dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
244 struct gdbarch *gdbarch = get_objfile_arch (objfile);
245 struct minimal_symbol *msymbol;
249 fprintf_filtered (outfile, "\nObject file %s:\n\n", objfile->name);
250 if (objfile->minimal_symbol_count == 0)
252 fprintf_filtered (outfile, "No minimal symbols found.\n");
256 ALL_OBJFILE_MSYMBOLS (objfile, msymbol)
258 struct obj_section *section = SYMBOL_OBJ_SECTION (msymbol);
260 switch (MSYMBOL_TYPE (msymbol))
268 case mst_solib_trampoline:
293 fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
294 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (msymbol)),
296 fprintf_filtered (outfile, " %s", SYMBOL_LINKAGE_NAME (msymbol));
298 fprintf_filtered (outfile, " section %s",
299 bfd_section_name (objfile->obfd,
300 section->the_bfd_section));
301 if (SYMBOL_DEMANGLED_NAME (msymbol) != NULL)
303 fprintf_filtered (outfile, " %s", SYMBOL_DEMANGLED_NAME (msymbol));
305 if (msymbol->filename)
306 fprintf_filtered (outfile, " %s", msymbol->filename);
307 fputs_filtered ("\n", outfile);
310 if (objfile->minimal_symbol_count != index)
312 warning (_("internal error: minimal symbol count %d != %d"),
313 objfile->minimal_symbol_count, index);
315 fprintf_filtered (outfile, "\n");
319 dump_symtab_1 (struct objfile *objfile, struct symtab *symtab,
320 struct ui_file *outfile)
322 struct gdbarch *gdbarch = get_objfile_arch (objfile);
324 struct dict_iterator iter;
327 struct blockvector *bv;
332 fprintf_filtered (outfile, "\nSymtab for file %s\n", symtab->filename);
334 fprintf_filtered (outfile, "Compilation directory is %s\n",
336 fprintf_filtered (outfile, "Read from object file %s (", objfile->name);
337 gdb_print_host_address (objfile, outfile);
338 fprintf_filtered (outfile, ")\n");
339 fprintf_filtered (outfile, "Language: %s\n",
340 language_str (symtab->language));
342 /* First print the line table. */
343 l = LINETABLE (symtab);
346 fprintf_filtered (outfile, "\nLine table:\n\n");
348 for (i = 0; i < len; i++)
350 fprintf_filtered (outfile, " line %d at ", l->item[i].line);
351 fputs_filtered (paddress (gdbarch, l->item[i].pc), outfile);
352 fprintf_filtered (outfile, "\n");
355 /* Now print the block info, but only for primary symtabs since we will
356 print lots of duplicate info otherwise. */
359 fprintf_filtered (outfile, "\nBlockvector:\n\n");
360 bv = BLOCKVECTOR (symtab);
361 len = BLOCKVECTOR_NBLOCKS (bv);
362 for (i = 0; i < len; i++)
364 b = BLOCKVECTOR_BLOCK (bv, i);
365 depth = block_depth (b) * 2;
366 print_spaces (depth, outfile);
367 fprintf_filtered (outfile, "block #%03d, object at ", i);
368 gdb_print_host_address (b, outfile);
369 if (BLOCK_SUPERBLOCK (b))
371 fprintf_filtered (outfile, " under ");
372 gdb_print_host_address (BLOCK_SUPERBLOCK (b), outfile);
374 /* drow/2002-07-10: We could save the total symbols count
375 even if we're using a hashtable, but nothing else but this message
377 fprintf_filtered (outfile, ", %d syms/buckets in ",
378 dict_size (BLOCK_DICT (b)));
379 fputs_filtered (paddress (gdbarch, BLOCK_START (b)), outfile);
380 fprintf_filtered (outfile, "..");
381 fputs_filtered (paddress (gdbarch, BLOCK_END (b)), outfile);
382 if (BLOCK_FUNCTION (b))
384 fprintf_filtered (outfile, ", function %s",
385 SYMBOL_LINKAGE_NAME (BLOCK_FUNCTION (b)));
386 if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)) != NULL)
388 fprintf_filtered (outfile, ", %s",
389 SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)));
392 fprintf_filtered (outfile, "\n");
393 /* Now print each symbol in this block (in no particular order, if
394 we're using a hashtable). */
395 ALL_BLOCK_SYMBOLS (b, iter, sym)
397 struct print_symbol_args s;
403 catch_errors (print_symbol, &s, "Error printing symbol:\n",
407 fprintf_filtered (outfile, "\n");
411 fprintf_filtered (outfile, "\nBlockvector same as previous symtab\n\n");
416 dump_symtab (struct objfile *objfile, struct symtab *symtab,
417 struct ui_file *outfile)
419 /* Set the current language to the language of the symtab we're dumping
420 because certain routines used during dump_symtab() use the current
421 language to print an image of the symbol. We'll restore it later.
422 But use only real languages, not placeholders. */
423 if (symtab->language != language_unknown
424 && symtab->language != language_auto)
426 enum language saved_lang;
428 saved_lang = set_language (symtab->language);
430 dump_symtab_1 (objfile, symtab, outfile);
432 set_language (saved_lang);
435 dump_symtab_1 (objfile, symtab, outfile);
439 maintenance_print_symbols (char *args, int from_tty)
442 struct ui_file *outfile;
443 struct cleanup *cleanups;
444 char *symname = NULL;
445 char *filename = DEV_TTY;
446 struct objfile *objfile;
453 error (_("Arguments missing: an output file name "
454 "and an optional symbol file name"));
456 argv = gdb_buildargv (args);
457 cleanups = make_cleanup_freeargv (argv);
462 /* If a second arg is supplied, it is a source file name to match on. */
469 filename = tilde_expand (filename);
470 make_cleanup (xfree, filename);
472 outfile = gdb_fopen (filename, FOPEN_WT);
474 perror_with_name (filename);
475 make_cleanup_ui_file_delete (outfile);
478 ALL_SYMTABS (objfile, s)
479 if (symname == NULL || filename_cmp (symname, s->filename) == 0)
480 dump_symtab (objfile, s, outfile);
482 do_cleanups (cleanups);
485 /* Print symbol ARGS->SYMBOL on ARGS->OUTFILE. ARGS->DEPTH says how
486 far to indent. ARGS is really a struct print_symbol_args *, but is
487 declared as char * to get it past catch_errors. Returns 0 for error,
491 print_symbol (void *args)
493 struct gdbarch *gdbarch = ((struct print_symbol_args *) args)->gdbarch;
494 struct symbol *symbol = ((struct print_symbol_args *) args)->symbol;
495 int depth = ((struct print_symbol_args *) args)->depth;
496 struct ui_file *outfile = ((struct print_symbol_args *) args)->outfile;
497 struct obj_section *section = SYMBOL_OBJ_SECTION (symbol);
499 print_spaces (depth, outfile);
500 if (SYMBOL_DOMAIN (symbol) == LABEL_DOMAIN)
502 fprintf_filtered (outfile, "label %s at ", SYMBOL_PRINT_NAME (symbol));
503 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
506 fprintf_filtered (outfile, " section %s\n",
507 bfd_section_name (section->the_bfd_section->owner,
508 section->the_bfd_section));
510 fprintf_filtered (outfile, "\n");
513 if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN)
515 if (TYPE_TAG_NAME (SYMBOL_TYPE (symbol)))
517 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth);
521 fprintf_filtered (outfile, "%s %s = ",
522 (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_ENUM
524 : (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_STRUCT
525 ? "struct" : "union")),
526 SYMBOL_LINKAGE_NAME (symbol));
527 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth);
529 fprintf_filtered (outfile, ";\n");
533 if (SYMBOL_CLASS (symbol) == LOC_TYPEDEF)
534 fprintf_filtered (outfile, "typedef ");
535 if (SYMBOL_TYPE (symbol))
537 /* Print details of types, except for enums where it's clutter. */
538 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), SYMBOL_PRINT_NAME (symbol),
540 TYPE_CODE (SYMBOL_TYPE (symbol)) != TYPE_CODE_ENUM,
542 fprintf_filtered (outfile, "; ");
545 fprintf_filtered (outfile, "%s ", SYMBOL_PRINT_NAME (symbol));
547 switch (SYMBOL_CLASS (symbol))
550 fprintf_filtered (outfile, "const %ld (0x%lx)",
551 SYMBOL_VALUE (symbol),
552 SYMBOL_VALUE (symbol));
555 case LOC_CONST_BYTES:
558 struct type *type = check_typedef (SYMBOL_TYPE (symbol));
560 fprintf_filtered (outfile, "const %u hex bytes:",
562 for (i = 0; i < TYPE_LENGTH (type); i++)
563 fprintf_filtered (outfile, " %02x",
564 (unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
569 fprintf_filtered (outfile, "static at ");
570 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
573 fprintf_filtered (outfile, " section %s",
574 bfd_section_name (section->the_bfd_section->owner,
575 section->the_bfd_section));
579 if (SYMBOL_IS_ARGUMENT (symbol))
580 fprintf_filtered (outfile, "parameter register %ld",
581 SYMBOL_VALUE (symbol));
583 fprintf_filtered (outfile, "register %ld", SYMBOL_VALUE (symbol));
587 fprintf_filtered (outfile, "arg at offset 0x%lx",
588 SYMBOL_VALUE (symbol));
592 fprintf_filtered (outfile, "reference arg at 0x%lx", SYMBOL_VALUE (symbol));
595 case LOC_REGPARM_ADDR:
596 fprintf_filtered (outfile, "address parameter register %ld", SYMBOL_VALUE (symbol));
600 fprintf_filtered (outfile, "local at offset 0x%lx",
601 SYMBOL_VALUE (symbol));
608 fprintf_filtered (outfile, "label at ");
609 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
612 fprintf_filtered (outfile, " section %s",
613 bfd_section_name (section->the_bfd_section->owner,
614 section->the_bfd_section));
618 fprintf_filtered (outfile, "block object ");
619 gdb_print_host_address (SYMBOL_BLOCK_VALUE (symbol), outfile);
620 fprintf_filtered (outfile, ", ");
621 fputs_filtered (paddress (gdbarch,
622 BLOCK_START (SYMBOL_BLOCK_VALUE (symbol))),
624 fprintf_filtered (outfile, "..");
625 fputs_filtered (paddress (gdbarch,
626 BLOCK_END (SYMBOL_BLOCK_VALUE (symbol))),
629 fprintf_filtered (outfile, " section %s",
630 bfd_section_name (section->the_bfd_section->owner,
631 section->the_bfd_section));
635 fprintf_filtered (outfile, "computed at runtime");
639 fprintf_filtered (outfile, "unresolved");
642 case LOC_OPTIMIZED_OUT:
643 fprintf_filtered (outfile, "optimized out");
647 fprintf_filtered (outfile, "botched symbol class %x",
648 SYMBOL_CLASS (symbol));
652 fprintf_filtered (outfile, "\n");
657 maintenance_print_msymbols (char *args, int from_tty)
660 struct ui_file *outfile;
661 struct cleanup *cleanups;
662 char *filename = DEV_TTY;
663 char *symname = NULL;
664 struct program_space *pspace;
665 struct objfile *objfile;
667 struct stat sym_st, obj_st;
673 error (_("print-msymbols takes an output file "
674 "name and optional symbol file name"));
676 argv = gdb_buildargv (args);
677 cleanups = make_cleanup_freeargv (argv);
682 /* If a second arg is supplied, it is a source file name to match on. */
685 symname = xfullpath (argv[1]);
686 make_cleanup (xfree, symname);
687 if (symname && stat (symname, &sym_st))
688 perror_with_name (symname);
692 filename = tilde_expand (filename);
693 make_cleanup (xfree, filename);
695 outfile = gdb_fopen (filename, FOPEN_WT);
697 perror_with_name (filename);
698 make_cleanup_ui_file_delete (outfile);
702 ALL_PSPACE_OBJFILES (pspace, objfile)
703 if (symname == NULL || (!stat (objfile->name, &obj_st)
704 && sym_st.st_ino == obj_st.st_ino))
705 dump_msymbols (objfile, outfile);
707 fprintf_filtered (outfile, "\n\n");
708 do_cleanups (cleanups);
712 maintenance_print_objfiles (char *ignore, int from_tty)
714 struct program_space *pspace;
715 struct objfile *objfile;
721 ALL_PSPACE_OBJFILES (pspace, objfile)
722 dump_objfile (objfile);
727 /* List all the symbol tables whose names match REGEXP (optional). */
729 maintenance_info_symtabs (char *regexp, int from_tty)
731 struct program_space *pspace;
732 struct objfile *objfile;
738 ALL_PSPACE_OBJFILES (pspace, objfile)
740 struct symtab *symtab;
742 /* We don't want to print anything for this objfile until we
743 actually find a symtab whose name matches. */
744 int printed_objfile_start = 0;
746 ALL_OBJFILE_SYMTABS (objfile, symtab)
751 || re_exec (symtab->filename))
753 if (! printed_objfile_start)
755 printf_filtered ("{ objfile %s ", objfile->name);
757 printf_filtered ("((struct objfile *) %s)\n",
758 host_address_to_string (objfile));
759 printed_objfile_start = 1;
762 printf_filtered (" { symtab %s ", symtab->filename);
764 printf_filtered ("((struct symtab *) %s)\n",
765 host_address_to_string (symtab));
766 printf_filtered (" dirname %s\n",
767 symtab->dirname ? symtab->dirname : "(null)");
768 printf_filtered (" fullname %s\n",
769 symtab->fullname ? symtab->fullname : "(null)");
771 "blockvector ((struct blockvector *) %s)%s\n",
772 host_address_to_string (symtab->blockvector),
773 symtab->primary ? " (primary)" : "");
775 "linetable ((struct linetable *) %s)\n",
776 host_address_to_string (symtab->linetable));
777 printf_filtered (" debugformat %s\n",
778 symtab->debugformat);
779 printf_filtered (" }\n");
783 if (printed_objfile_start)
784 printf_filtered ("}\n");
789 /* Return the nexting depth of a block within other blocks in its symtab. */
792 block_depth (struct block *block)
796 while ((block = BLOCK_SUPERBLOCK (block)) != NULL)
804 /* Do early runtime initializations. */
806 _initialize_symmisc (void)