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/>. */
28 #include "breakpoint.h"
30 #include "gdb_obstack.h"
31 #include "exceptions.h"
35 #include "gdb_regex.h"
37 #include "dictionary.h"
39 #include "gdb_string.h"
40 #include "readline/readline.h"
45 #define DEV_TTY "/dev/tty"
48 /* Unfortunately for debugging, stderr is usually a macro. This is painful
49 when calling functions that take FILE *'s from the debugger.
50 So we make a variable which has the same value and which is accessible when
51 debugging GDB with itself. Because stdin et al need not be constants,
52 we initialize them in the _initialize_symmisc function at the bottom
58 /* Prototypes for local functions */
60 static void dump_symtab (struct objfile *, struct symtab *,
63 static void dump_msymbols (struct objfile *, struct ui_file *);
65 static void dump_objfile (struct objfile *);
67 static int block_depth (struct block *);
69 void _initialize_symmisc (void);
71 struct print_symbol_args
73 struct gdbarch *gdbarch;
74 struct symbol *symbol;
76 struct ui_file *outfile;
79 static int print_symbol (void *);
81 /* Free all the storage associated with the struct symtab <- S.
82 Note that some symtabs have contents that all live inside one big block of
83 memory, and some share the contents of another symbol table and so you
84 should not free the contents on their behalf (except sometimes the
85 linetable, which maybe per symtab even when the rest is not).
86 It is s->free_code that says which alternative to use. */
89 free_symtab (struct symtab *s)
94 /* All the contents are part of a big block of memory (an obstack),
95 and some other symtab is in charge of freeing that block.
96 Therefore, do nothing. */
100 /* Everything will be freed either by our `free_func'
101 or by some other symtab, except for our linetable.
104 xfree (LINETABLE (s));
108 /* If there is a single block of memory to free, free it. */
109 if (s->free_func != NULL)
112 /* Free source-related stuff. */
113 if (s->line_charpos != NULL)
114 xfree (s->line_charpos);
115 if (s->fullname != NULL)
117 if (s->debugformat != NULL)
118 xfree (s->debugformat);
123 print_symbol_bcache_statistics (void)
125 struct program_space *pspace;
126 struct objfile *objfile;
130 ALL_PSPACE_OBJFILES (pspace, objfile)
132 printf_filtered (_("Byte cache statistics for '%s':\n"), objfile->name);
133 print_bcache_statistics (psymbol_bcache_get_bcache (objfile->psymbol_cache),
134 "partial symbol cache");
135 print_bcache_statistics (objfile->macro_cache, "preprocessor macro cache");
136 print_bcache_statistics (objfile->filename_cache, "file name cache");
142 print_objfile_statistics (void)
144 struct program_space *pspace;
145 struct objfile *objfile;
147 int i, linetables, blockvectors;
151 ALL_PSPACE_OBJFILES (pspace, objfile)
153 printf_filtered (_("Statistics for '%s':\n"), objfile->name);
154 if (OBJSTAT (objfile, n_stabs) > 0)
155 printf_filtered (_(" Number of \"stab\" symbols read: %d\n"),
156 OBJSTAT (objfile, n_stabs));
157 if (OBJSTAT (objfile, n_minsyms) > 0)
158 printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
159 OBJSTAT (objfile, n_minsyms));
160 if (OBJSTAT (objfile, n_psyms) > 0)
161 printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
162 OBJSTAT (objfile, n_psyms));
163 if (OBJSTAT (objfile, n_syms) > 0)
164 printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
165 OBJSTAT (objfile, n_syms));
166 if (OBJSTAT (objfile, n_types) > 0)
167 printf_filtered (_(" Number of \"types\" defined: %d\n"),
168 OBJSTAT (objfile, n_types));
170 objfile->sf->qf->print_stats (objfile);
171 i = linetables = blockvectors = 0;
172 ALL_OBJFILE_SYMTABS (objfile, s)
175 if (s->linetable != NULL)
180 printf_filtered (_(" Number of symbol tables: %d\n"), i);
181 printf_filtered (_(" Number of symbol tables with line tables: %d\n"),
183 printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"),
186 if (OBJSTAT (objfile, sz_strtab) > 0)
187 printf_filtered (_(" Space used by a.out string tables: %d\n"),
188 OBJSTAT (objfile, sz_strtab));
189 printf_filtered (_(" Total memory used for objfile obstack: %d\n"),
190 obstack_memory_used (&objfile->objfile_obstack));
191 printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
192 bcache_memory_used (psymbol_bcache_get_bcache
193 (objfile->psymbol_cache)));
194 printf_filtered (_(" Total memory used for macro cache: %d\n"),
195 bcache_memory_used (objfile->macro_cache));
196 printf_filtered (_(" Total memory used for file name cache: %d\n"),
197 bcache_memory_used (objfile->filename_cache));
203 dump_objfile (struct objfile *objfile)
205 struct symtab *symtab;
207 printf_filtered ("\nObject file %s: ", objfile->name);
208 printf_filtered ("Objfile at ");
209 gdb_print_host_address (objfile, gdb_stdout);
210 printf_filtered (", bfd at ");
211 gdb_print_host_address (objfile->obfd, gdb_stdout);
212 printf_filtered (", %d minsyms\n\n",
213 objfile->minimal_symbol_count);
216 objfile->sf->qf->dump (objfile);
218 if (objfile->symtabs)
220 printf_filtered ("Symtabs:\n");
221 for (symtab = objfile->symtabs;
223 symtab = symtab->next)
225 printf_filtered ("%s at ", symtab->filename);
226 gdb_print_host_address (symtab, gdb_stdout);
227 printf_filtered (", ");
228 if (symtab->objfile != objfile)
230 printf_filtered ("NOT ON CHAIN! ");
234 printf_filtered ("\n\n");
238 /* Print minimal symbols from this objfile. */
241 dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
243 struct gdbarch *gdbarch = get_objfile_arch (objfile);
244 struct minimal_symbol *msymbol;
248 fprintf_filtered (outfile, "\nObject file %s:\n\n", objfile->name);
249 if (objfile->minimal_symbol_count == 0)
251 fprintf_filtered (outfile, "No minimal symbols found.\n");
255 ALL_OBJFILE_MSYMBOLS (objfile, msymbol)
257 struct obj_section *section = SYMBOL_OBJ_SECTION (msymbol);
259 switch (MSYMBOL_TYPE (msymbol))
267 case mst_solib_trampoline:
292 fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
293 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (msymbol)),
295 fprintf_filtered (outfile, " %s", SYMBOL_LINKAGE_NAME (msymbol));
297 fprintf_filtered (outfile, " section %s",
298 bfd_section_name (objfile->obfd,
299 section->the_bfd_section));
300 if (SYMBOL_DEMANGLED_NAME (msymbol) != NULL)
302 fprintf_filtered (outfile, " %s", SYMBOL_DEMANGLED_NAME (msymbol));
304 if (msymbol->filename)
305 fprintf_filtered (outfile, " %s", msymbol->filename);
306 fputs_filtered ("\n", outfile);
309 if (objfile->minimal_symbol_count != index)
311 warning (_("internal error: minimal symbol count %d != %d"),
312 objfile->minimal_symbol_count, index);
314 fprintf_filtered (outfile, "\n");
318 dump_symtab_1 (struct objfile *objfile, struct symtab *symtab,
319 struct ui_file *outfile)
321 struct gdbarch *gdbarch = get_objfile_arch (objfile);
323 struct dict_iterator iter;
326 struct blockvector *bv;
331 fprintf_filtered (outfile, "\nSymtab for file %s\n", symtab->filename);
333 fprintf_filtered (outfile, "Compilation directory is %s\n",
335 fprintf_filtered (outfile, "Read from object file %s (", objfile->name);
336 gdb_print_host_address (objfile, outfile);
337 fprintf_filtered (outfile, ")\n");
338 fprintf_filtered (outfile, "Language: %s\n",
339 language_str (symtab->language));
341 /* First print the line table. */
342 l = LINETABLE (symtab);
345 fprintf_filtered (outfile, "\nLine table:\n\n");
347 for (i = 0; i < len; i++)
349 fprintf_filtered (outfile, " line %d at ", l->item[i].line);
350 fputs_filtered (paddress (gdbarch, l->item[i].pc), outfile);
351 fprintf_filtered (outfile, "\n");
354 /* Now print the block info, but only for primary symtabs since we will
355 print lots of duplicate info otherwise. */
358 fprintf_filtered (outfile, "\nBlockvector:\n\n");
359 bv = BLOCKVECTOR (symtab);
360 len = BLOCKVECTOR_NBLOCKS (bv);
361 for (i = 0; i < len; i++)
363 b = BLOCKVECTOR_BLOCK (bv, i);
364 depth = block_depth (b) * 2;
365 print_spaces (depth, outfile);
366 fprintf_filtered (outfile, "block #%03d, object at ", i);
367 gdb_print_host_address (b, outfile);
368 if (BLOCK_SUPERBLOCK (b))
370 fprintf_filtered (outfile, " under ");
371 gdb_print_host_address (BLOCK_SUPERBLOCK (b), outfile);
373 /* drow/2002-07-10: We could save the total symbols count
374 even if we're using a hashtable, but nothing else but this message
376 fprintf_filtered (outfile, ", %d syms/buckets in ",
377 dict_size (BLOCK_DICT (b)));
378 fputs_filtered (paddress (gdbarch, BLOCK_START (b)), outfile);
379 fprintf_filtered (outfile, "..");
380 fputs_filtered (paddress (gdbarch, BLOCK_END (b)), outfile);
381 if (BLOCK_FUNCTION (b))
383 fprintf_filtered (outfile, ", function %s",
384 SYMBOL_LINKAGE_NAME (BLOCK_FUNCTION (b)));
385 if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)) != NULL)
387 fprintf_filtered (outfile, ", %s",
388 SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)));
391 fprintf_filtered (outfile, "\n");
392 /* Now print each symbol in this block (in no particular order, if
393 we're using a hashtable). */
394 ALL_BLOCK_SYMBOLS (b, iter, sym)
396 struct print_symbol_args s;
402 catch_errors (print_symbol, &s, "Error printing symbol:\n",
406 fprintf_filtered (outfile, "\n");
410 fprintf_filtered (outfile, "\nBlockvector same as previous symtab\n\n");
415 dump_symtab (struct objfile *objfile, struct symtab *symtab,
416 struct ui_file *outfile)
418 /* Set the current language to the language of the symtab we're dumping
419 because certain routines used during dump_symtab() use the current
420 language to print an image of the symbol. We'll restore it later.
421 But use only real languages, not placeholders. */
422 if (symtab->language != language_unknown
423 && symtab->language != language_auto)
425 enum language saved_lang;
427 saved_lang = set_language (symtab->language);
429 dump_symtab_1 (objfile, symtab, outfile);
431 set_language (saved_lang);
434 dump_symtab_1 (objfile, symtab, outfile);
438 maintenance_print_symbols (char *args, int from_tty)
441 struct ui_file *outfile;
442 struct cleanup *cleanups;
443 char *symname = NULL;
444 char *filename = DEV_TTY;
445 struct objfile *objfile;
452 error (_("Arguments missing: an output file name "
453 "and an optional symbol file name"));
455 argv = gdb_buildargv (args);
456 cleanups = make_cleanup_freeargv (argv);
461 /* If a second arg is supplied, it is a source file name to match on. */
468 filename = tilde_expand (filename);
469 make_cleanup (xfree, filename);
471 outfile = gdb_fopen (filename, FOPEN_WT);
473 perror_with_name (filename);
474 make_cleanup_ui_file_delete (outfile);
477 ALL_SYMTABS (objfile, s)
478 if (symname == NULL || strcmp (symname, s->filename) == 0)
479 dump_symtab (objfile, s, outfile);
481 do_cleanups (cleanups);
484 /* Print symbol ARGS->SYMBOL on ARGS->OUTFILE. ARGS->DEPTH says how
485 far to indent. ARGS is really a struct print_symbol_args *, but is
486 declared as char * to get it past catch_errors. Returns 0 for error,
490 print_symbol (void *args)
492 struct gdbarch *gdbarch = ((struct print_symbol_args *) args)->gdbarch;
493 struct symbol *symbol = ((struct print_symbol_args *) args)->symbol;
494 int depth = ((struct print_symbol_args *) args)->depth;
495 struct ui_file *outfile = ((struct print_symbol_args *) args)->outfile;
496 struct obj_section *section = SYMBOL_OBJ_SECTION (symbol);
498 print_spaces (depth, outfile);
499 if (SYMBOL_DOMAIN (symbol) == LABEL_DOMAIN)
501 fprintf_filtered (outfile, "label %s at ", SYMBOL_PRINT_NAME (symbol));
502 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
505 fprintf_filtered (outfile, " section %s\n",
506 bfd_section_name (section->the_bfd_section->owner,
507 section->the_bfd_section));
509 fprintf_filtered (outfile, "\n");
512 if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN)
514 if (TYPE_TAG_NAME (SYMBOL_TYPE (symbol)))
516 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth);
520 fprintf_filtered (outfile, "%s %s = ",
521 (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_ENUM
523 : (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_STRUCT
524 ? "struct" : "union")),
525 SYMBOL_LINKAGE_NAME (symbol));
526 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth);
528 fprintf_filtered (outfile, ";\n");
532 if (SYMBOL_CLASS (symbol) == LOC_TYPEDEF)
533 fprintf_filtered (outfile, "typedef ");
534 if (SYMBOL_TYPE (symbol))
536 /* Print details of types, except for enums where it's clutter. */
537 LA_PRINT_TYPE (SYMBOL_TYPE (symbol), SYMBOL_PRINT_NAME (symbol),
539 TYPE_CODE (SYMBOL_TYPE (symbol)) != TYPE_CODE_ENUM,
541 fprintf_filtered (outfile, "; ");
544 fprintf_filtered (outfile, "%s ", SYMBOL_PRINT_NAME (symbol));
546 switch (SYMBOL_CLASS (symbol))
549 fprintf_filtered (outfile, "const %ld (0x%lx)",
550 SYMBOL_VALUE (symbol),
551 SYMBOL_VALUE (symbol));
554 case LOC_CONST_BYTES:
557 struct type *type = check_typedef (SYMBOL_TYPE (symbol));
559 fprintf_filtered (outfile, "const %u hex bytes:",
561 for (i = 0; i < TYPE_LENGTH (type); i++)
562 fprintf_filtered (outfile, " %02x",
563 (unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
568 fprintf_filtered (outfile, "static at ");
569 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
572 fprintf_filtered (outfile, " section %s",
573 bfd_section_name (section->the_bfd_section->owner,
574 section->the_bfd_section));
578 if (SYMBOL_IS_ARGUMENT (symbol))
579 fprintf_filtered (outfile, "parameter register %ld",
580 SYMBOL_VALUE (symbol));
582 fprintf_filtered (outfile, "register %ld", SYMBOL_VALUE (symbol));
586 fprintf_filtered (outfile, "arg at offset 0x%lx",
587 SYMBOL_VALUE (symbol));
591 fprintf_filtered (outfile, "reference arg at 0x%lx", SYMBOL_VALUE (symbol));
594 case LOC_REGPARM_ADDR:
595 fprintf_filtered (outfile, "address parameter register %ld", SYMBOL_VALUE (symbol));
599 fprintf_filtered (outfile, "local at offset 0x%lx",
600 SYMBOL_VALUE (symbol));
607 fprintf_filtered (outfile, "label at ");
608 fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
611 fprintf_filtered (outfile, " section %s",
612 bfd_section_name (section->the_bfd_section->owner,
613 section->the_bfd_section));
617 fprintf_filtered (outfile, "block object ");
618 gdb_print_host_address (SYMBOL_BLOCK_VALUE (symbol), outfile);
619 fprintf_filtered (outfile, ", ");
620 fputs_filtered (paddress (gdbarch,
621 BLOCK_START (SYMBOL_BLOCK_VALUE (symbol))),
623 fprintf_filtered (outfile, "..");
624 fputs_filtered (paddress (gdbarch,
625 BLOCK_END (SYMBOL_BLOCK_VALUE (symbol))),
628 fprintf_filtered (outfile, " section %s",
629 bfd_section_name (section->the_bfd_section->owner,
630 section->the_bfd_section));
634 fprintf_filtered (outfile, "computed at runtime");
638 fprintf_filtered (outfile, "unresolved");
641 case LOC_OPTIMIZED_OUT:
642 fprintf_filtered (outfile, "optimized out");
646 fprintf_filtered (outfile, "botched symbol class %x",
647 SYMBOL_CLASS (symbol));
651 fprintf_filtered (outfile, "\n");
656 maintenance_print_msymbols (char *args, int from_tty)
659 struct ui_file *outfile;
660 struct cleanup *cleanups;
661 char *filename = DEV_TTY;
662 char *symname = NULL;
663 struct program_space *pspace;
664 struct objfile *objfile;
666 struct stat sym_st, obj_st;
672 error (_("print-msymbols takes an output file "
673 "name and optional symbol file name"));
675 argv = gdb_buildargv (args);
676 cleanups = make_cleanup_freeargv (argv);
681 /* If a second arg is supplied, it is a source file name to match on. */
684 symname = xfullpath (argv[1]);
685 make_cleanup (xfree, symname);
686 if (symname && stat (symname, &sym_st))
687 perror_with_name (symname);
691 filename = tilde_expand (filename);
692 make_cleanup (xfree, filename);
694 outfile = gdb_fopen (filename, FOPEN_WT);
696 perror_with_name (filename);
697 make_cleanup_ui_file_delete (outfile);
701 ALL_PSPACE_OBJFILES (pspace, objfile)
702 if (symname == NULL || (!stat (objfile->name, &obj_st)
703 && sym_st.st_ino == obj_st.st_ino))
704 dump_msymbols (objfile, outfile);
706 fprintf_filtered (outfile, "\n\n");
707 do_cleanups (cleanups);
711 maintenance_print_objfiles (char *ignore, int from_tty)
713 struct program_space *pspace;
714 struct objfile *objfile;
720 ALL_PSPACE_OBJFILES (pspace, objfile)
721 dump_objfile (objfile);
726 /* List all the symbol tables whose names match REGEXP (optional). */
728 maintenance_info_symtabs (char *regexp, int from_tty)
730 struct program_space *pspace;
731 struct objfile *objfile;
737 ALL_PSPACE_OBJFILES (pspace, objfile)
739 struct symtab *symtab;
741 /* We don't want to print anything for this objfile until we
742 actually find a symtab whose name matches. */
743 int printed_objfile_start = 0;
745 ALL_OBJFILE_SYMTABS (objfile, symtab)
750 || re_exec (symtab->filename))
752 if (! printed_objfile_start)
754 printf_filtered ("{ objfile %s ", objfile->name);
756 printf_filtered ("((struct objfile *) %s)\n",
757 host_address_to_string (objfile));
758 printed_objfile_start = 1;
761 printf_filtered (" { symtab %s ", symtab->filename);
763 printf_filtered ("((struct symtab *) %s)\n",
764 host_address_to_string (symtab));
765 printf_filtered (" dirname %s\n",
766 symtab->dirname ? symtab->dirname : "(null)");
767 printf_filtered (" fullname %s\n",
768 symtab->fullname ? symtab->fullname : "(null)");
770 "blockvector ((struct blockvector *) %s)%s\n",
771 host_address_to_string (symtab->blockvector),
772 symtab->primary ? " (primary)" : "");
774 "linetable ((struct linetable *) %s)\n",
775 host_address_to_string (symtab->linetable));
776 printf_filtered (" debugformat %s\n",
777 symtab->debugformat);
778 printf_filtered (" }\n");
782 if (printed_objfile_start)
783 printf_filtered ("}\n");
788 /* Return the nexting depth of a block within other blocks in its symtab. */
791 block_depth (struct block *block)
795 while ((block = BLOCK_SUPERBLOCK (block)) != NULL)
803 /* Do early runtime initializations. */
805 _initialize_symmisc (void)