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 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", language_str (symtab
->language
));
340 /* First print the line table. */
341 l
= LINETABLE (symtab
);
344 fprintf_filtered (outfile
, "\nLine table:\n\n");
346 for (i
= 0; i
< len
; i
++)
348 fprintf_filtered (outfile
, " line %d at ", l
->item
[i
].line
);
349 fputs_filtered (paddress (gdbarch
, l
->item
[i
].pc
), outfile
);
350 fprintf_filtered (outfile
, "\n");
353 /* Now print the block info, but only for primary symtabs since we will
354 print lots of duplicate info otherwise. */
357 fprintf_filtered (outfile
, "\nBlockvector:\n\n");
358 bv
= BLOCKVECTOR (symtab
);
359 len
= BLOCKVECTOR_NBLOCKS (bv
);
360 for (i
= 0; i
< len
; i
++)
362 b
= BLOCKVECTOR_BLOCK (bv
, i
);
363 depth
= block_depth (b
) * 2;
364 print_spaces (depth
, outfile
);
365 fprintf_filtered (outfile
, "block #%03d, object at ", i
);
366 gdb_print_host_address (b
, outfile
);
367 if (BLOCK_SUPERBLOCK (b
))
369 fprintf_filtered (outfile
, " under ");
370 gdb_print_host_address (BLOCK_SUPERBLOCK (b
), outfile
);
372 /* drow/2002-07-10: We could save the total symbols count
373 even if we're using a hashtable, but nothing else but this message
375 fprintf_filtered (outfile
, ", %d syms/buckets in ",
376 dict_size (BLOCK_DICT (b
)));
377 fputs_filtered (paddress (gdbarch
, BLOCK_START (b
)), outfile
);
378 fprintf_filtered (outfile
, "..");
379 fputs_filtered (paddress (gdbarch
, BLOCK_END (b
)), outfile
);
380 if (BLOCK_FUNCTION (b
))
382 fprintf_filtered (outfile
, ", function %s",
383 SYMBOL_LINKAGE_NAME (BLOCK_FUNCTION (b
)));
384 if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b
)) != NULL
)
386 fprintf_filtered (outfile
, ", %s",
387 SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b
)));
390 fprintf_filtered (outfile
, "\n");
391 /* Now print each symbol in this block (in no particular order, if
392 we're using a hashtable). */
393 ALL_BLOCK_SYMBOLS (b
, iter
, sym
)
395 struct print_symbol_args s
;
401 catch_errors (print_symbol
, &s
, "Error printing symbol:\n",
405 fprintf_filtered (outfile
, "\n");
409 fprintf_filtered (outfile
, "\nBlockvector same as previous symtab\n\n");
414 dump_symtab (struct objfile
*objfile
, struct symtab
*symtab
,
415 struct ui_file
*outfile
)
417 /* Set the current language to the language of the symtab we're dumping
418 because certain routines used during dump_symtab() use the current
419 language to print an image of the symbol. We'll restore it later.
420 But use only real languages, not placeholders. */
421 if (symtab
->language
!= language_unknown
422 && symtab
->language
!= language_auto
)
424 enum language saved_lang
;
426 saved_lang
= set_language (symtab
->language
);
428 dump_symtab_1 (objfile
, symtab
, outfile
);
430 set_language (saved_lang
);
433 dump_symtab_1 (objfile
, symtab
, outfile
);
437 maintenance_print_symbols (char *args
, int from_tty
)
440 struct ui_file
*outfile
;
441 struct cleanup
*cleanups
;
442 char *symname
= NULL
;
443 char *filename
= DEV_TTY
;
444 struct objfile
*objfile
;
452 Arguments missing: an output file name and an optional symbol file name"));
454 argv
= gdb_buildargv (args
);
455 cleanups
= make_cleanup_freeargv (argv
);
460 /* If a second arg is supplied, it is a source file name to match on */
467 filename
= tilde_expand (filename
);
468 make_cleanup (xfree
, filename
);
470 outfile
= gdb_fopen (filename
, FOPEN_WT
);
472 perror_with_name (filename
);
473 make_cleanup_ui_file_delete (outfile
);
476 ALL_SYMTABS (objfile
, s
)
477 if (symname
== NULL
|| strcmp (symname
, s
->filename
) == 0)
478 dump_symtab (objfile
, s
, outfile
);
480 do_cleanups (cleanups
);
483 /* Print symbol ARGS->SYMBOL on ARGS->OUTFILE. ARGS->DEPTH says how
484 far to indent. ARGS is really a struct print_symbol_args *, but is
485 declared as char * to get it past catch_errors. Returns 0 for error,
489 print_symbol (void *args
)
491 struct gdbarch
*gdbarch
= ((struct print_symbol_args
*) args
)->gdbarch
;
492 struct symbol
*symbol
= ((struct print_symbol_args
*) args
)->symbol
;
493 int depth
= ((struct print_symbol_args
*) args
)->depth
;
494 struct ui_file
*outfile
= ((struct print_symbol_args
*) args
)->outfile
;
495 struct obj_section
*section
= SYMBOL_OBJ_SECTION (symbol
);
497 print_spaces (depth
, outfile
);
498 if (SYMBOL_DOMAIN (symbol
) == LABEL_DOMAIN
)
500 fprintf_filtered (outfile
, "label %s at ", SYMBOL_PRINT_NAME (symbol
));
501 fputs_filtered (paddress (gdbarch
, SYMBOL_VALUE_ADDRESS (symbol
)),
504 fprintf_filtered (outfile
, " section %s\n",
505 bfd_section_name (section
->the_bfd_section
->owner
,
506 section
->the_bfd_section
));
508 fprintf_filtered (outfile
, "\n");
511 if (SYMBOL_DOMAIN (symbol
) == STRUCT_DOMAIN
)
513 if (TYPE_TAG_NAME (SYMBOL_TYPE (symbol
)))
515 LA_PRINT_TYPE (SYMBOL_TYPE (symbol
), "", outfile
, 1, depth
);
519 fprintf_filtered (outfile
, "%s %s = ",
520 (TYPE_CODE (SYMBOL_TYPE (symbol
)) == TYPE_CODE_ENUM
522 : (TYPE_CODE (SYMBOL_TYPE (symbol
)) == TYPE_CODE_STRUCT
523 ? "struct" : "union")),
524 SYMBOL_LINKAGE_NAME (symbol
));
525 LA_PRINT_TYPE (SYMBOL_TYPE (symbol
), "", outfile
, 1, depth
);
527 fprintf_filtered (outfile
, ";\n");
531 if (SYMBOL_CLASS (symbol
) == LOC_TYPEDEF
)
532 fprintf_filtered (outfile
, "typedef ");
533 if (SYMBOL_TYPE (symbol
))
535 /* Print details of types, except for enums where it's clutter. */
536 LA_PRINT_TYPE (SYMBOL_TYPE (symbol
), SYMBOL_PRINT_NAME (symbol
),
538 TYPE_CODE (SYMBOL_TYPE (symbol
)) != TYPE_CODE_ENUM
,
540 fprintf_filtered (outfile
, "; ");
543 fprintf_filtered (outfile
, "%s ", SYMBOL_PRINT_NAME (symbol
));
545 switch (SYMBOL_CLASS (symbol
))
548 fprintf_filtered (outfile
, "const %ld (0x%lx)",
549 SYMBOL_VALUE (symbol
),
550 SYMBOL_VALUE (symbol
));
553 case LOC_CONST_BYTES
:
556 struct type
*type
= check_typedef (SYMBOL_TYPE (symbol
));
558 fprintf_filtered (outfile
, "const %u hex bytes:",
560 for (i
= 0; i
< TYPE_LENGTH (type
); i
++)
561 fprintf_filtered (outfile
, " %02x",
562 (unsigned) SYMBOL_VALUE_BYTES (symbol
)[i
]);
567 fprintf_filtered (outfile
, "static at ");
568 fputs_filtered (paddress (gdbarch
, SYMBOL_VALUE_ADDRESS (symbol
)),
571 fprintf_filtered (outfile
, " section %s",
572 bfd_section_name (section
->the_bfd_section
->owner
,
573 section
->the_bfd_section
));
577 if (SYMBOL_IS_ARGUMENT (symbol
))
578 fprintf_filtered (outfile
, "parameter register %ld",
579 SYMBOL_VALUE (symbol
));
581 fprintf_filtered (outfile
, "register %ld", SYMBOL_VALUE (symbol
));
585 fprintf_filtered (outfile
, "arg at offset 0x%lx",
586 SYMBOL_VALUE (symbol
));
590 fprintf_filtered (outfile
, "reference arg at 0x%lx", SYMBOL_VALUE (symbol
));
593 case LOC_REGPARM_ADDR
:
594 fprintf_filtered (outfile
, "address parameter register %ld", SYMBOL_VALUE (symbol
));
598 fprintf_filtered (outfile
, "local at offset 0x%lx",
599 SYMBOL_VALUE (symbol
));
606 fprintf_filtered (outfile
, "label at ");
607 fputs_filtered (paddress (gdbarch
, SYMBOL_VALUE_ADDRESS (symbol
)),
610 fprintf_filtered (outfile
, " section %s",
611 bfd_section_name (section
->the_bfd_section
->owner
,
612 section
->the_bfd_section
));
616 fprintf_filtered (outfile
, "block object ");
617 gdb_print_host_address (SYMBOL_BLOCK_VALUE (symbol
), outfile
);
618 fprintf_filtered (outfile
, ", ");
619 fputs_filtered (paddress (gdbarch
,
620 BLOCK_START (SYMBOL_BLOCK_VALUE (symbol
))),
622 fprintf_filtered (outfile
, "..");
623 fputs_filtered (paddress (gdbarch
,
624 BLOCK_END (SYMBOL_BLOCK_VALUE (symbol
))),
627 fprintf_filtered (outfile
, " section %s",
628 bfd_section_name (section
->the_bfd_section
->owner
,
629 section
->the_bfd_section
));
633 fprintf_filtered (outfile
, "computed at runtime");
637 fprintf_filtered (outfile
, "unresolved");
640 case LOC_OPTIMIZED_OUT
:
641 fprintf_filtered (outfile
, "optimized out");
645 fprintf_filtered (outfile
, "botched symbol class %x",
646 SYMBOL_CLASS (symbol
));
650 fprintf_filtered (outfile
, "\n");
655 maintenance_print_msymbols (char *args
, int from_tty
)
658 struct ui_file
*outfile
;
659 struct cleanup
*cleanups
;
660 char *filename
= DEV_TTY
;
661 char *symname
= NULL
;
662 struct program_space
*pspace
;
663 struct objfile
*objfile
;
665 struct stat sym_st
, obj_st
;
671 error (_("print-msymbols takes an output file name and optional symbol file name"));
673 argv
= gdb_buildargv (args
);
674 cleanups
= make_cleanup_freeargv (argv
);
679 /* If a second arg is supplied, it is a source file name to match on */
682 symname
= xfullpath (argv
[1]);
683 make_cleanup (xfree
, symname
);
684 if (symname
&& stat (symname
, &sym_st
))
685 perror_with_name (symname
);
689 filename
= tilde_expand (filename
);
690 make_cleanup (xfree
, filename
);
692 outfile
= gdb_fopen (filename
, FOPEN_WT
);
694 perror_with_name (filename
);
695 make_cleanup_ui_file_delete (outfile
);
699 ALL_PSPACE_OBJFILES (pspace
, objfile
)
701 || (!stat (objfile
->name
, &obj_st
) && sym_st
.st_ino
== obj_st
.st_ino
))
702 dump_msymbols (objfile
, outfile
);
704 fprintf_filtered (outfile
, "\n\n");
705 do_cleanups (cleanups
);
709 maintenance_print_objfiles (char *ignore
, int from_tty
)
711 struct program_space
*pspace
;
712 struct objfile
*objfile
;
718 ALL_PSPACE_OBJFILES (pspace
, objfile
)
719 dump_objfile (objfile
);
724 /* List all the symbol tables whose names match REGEXP (optional). */
726 maintenance_info_symtabs (char *regexp
, int from_tty
)
728 struct program_space
*pspace
;
729 struct objfile
*objfile
;
735 ALL_PSPACE_OBJFILES (pspace
, objfile
)
737 struct symtab
*symtab
;
739 /* We don't want to print anything for this objfile until we
740 actually find a symtab whose name matches. */
741 int printed_objfile_start
= 0;
743 ALL_OBJFILE_SYMTABS (objfile
, symtab
)
748 || re_exec (symtab
->filename
))
750 if (! printed_objfile_start
)
752 printf_filtered ("{ objfile %s ", objfile
->name
);
754 printf_filtered ("((struct objfile *) %s)\n",
755 host_address_to_string (objfile
));
756 printed_objfile_start
= 1;
759 printf_filtered (" { symtab %s ", symtab
->filename
);
761 printf_filtered ("((struct symtab *) %s)\n",
762 host_address_to_string (symtab
));
763 printf_filtered (" dirname %s\n",
764 symtab
->dirname
? symtab
->dirname
: "(null)");
765 printf_filtered (" fullname %s\n",
766 symtab
->fullname
? symtab
->fullname
: "(null)");
767 printf_filtered (" blockvector ((struct blockvector *) %s)%s\n",
768 host_address_to_string (symtab
->blockvector
),
769 symtab
->primary
? " (primary)" : "");
770 printf_filtered (" linetable ((struct linetable *) %s)\n",
771 host_address_to_string (symtab
->linetable
));
772 printf_filtered (" debugformat %s\n", symtab
->debugformat
);
773 printf_filtered (" }\n");
777 if (printed_objfile_start
)
778 printf_filtered ("}\n");
783 /* Return the nexting depth of a block within other blocks in its symtab. */
786 block_depth (struct block
*block
)
790 while ((block
= BLOCK_SUPERBLOCK (block
)) != NULL
)
798 /* Do early runtime initializations. */
800 _initialize_symmisc (void)