X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fsymmisc.c;h=f4408999ee52b566b6466a55f7f5bedbe9a6da2f;hb=44b164c5140afff8f90bf9dd0a6606dda3b88c0d;hp=347eade1d2f30c99a40a049f9c5ba30a663d302d;hpb=aa1ee363bce1eac43bf9824069e231d7113f7453;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 347eade1d2..f4408999ee 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -1,7 +1,7 @@ /* Do various things to symbol tables (other than lookup), for GDB. Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, - 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003 Free Software + 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of GDB. @@ -30,14 +30,16 @@ #include "breakpoint.h" #include "command.h" #include "gdb_obstack.h" +#include "exceptions.h" #include "language.h" #include "bcache.h" #include "block.h" #include "gdb_regex.h" +#include "gdb_stat.h" #include "dictionary.h" #include "gdb_string.h" -#include +#include "readline/readline.h" #ifndef DEV_TTY #define DEV_TTY "/dev/tty" @@ -99,12 +101,12 @@ free_symtab_block (struct objfile *objfile, struct block *b) ALL_BLOCK_SYMBOLS (b, iter, sym) { - xmfree (objfile->md, DEPRECATED_SYMBOL_NAME (sym)); - xmfree (objfile->md, sym); + xfree (DEPRECATED_SYMBOL_NAME (sym)); + xfree (sym); } dict_free (BLOCK_DICT (b)); - xmfree (objfile->md, b); + xfree (b); } /* Free all the storage associated with the struct symtab <- S. @@ -138,7 +140,7 @@ free_symtab (struct symtab *s) for (i = 0; i < n; i++) free_symtab_block (s->objfile, BLOCKVECTOR_BLOCK (bv, i)); /* Free the blockvector itself. */ - xmfree (s->objfile->md, bv); + xfree (bv); /* Also free the linetable. */ case free_linetable: @@ -146,7 +148,7 @@ free_symtab (struct symtab *s) or by some other symtab, except for our linetable. Free that now. */ if (LINETABLE (s)) - xmfree (s->objfile->md, LINETABLE (s)); + xfree (LINETABLE (s)); break; } @@ -156,12 +158,12 @@ free_symtab (struct symtab *s) /* Free source-related stuff */ if (s->line_charpos != NULL) - xmfree (s->objfile->md, s->line_charpos); + xfree (s->line_charpos); if (s->fullname != NULL) - xmfree (s->objfile->md, s->fullname); + xfree (s->fullname); if (s->debugformat != NULL) - xmfree (s->objfile->md, s->debugformat); - xmfree (s->objfile->md, s); + xfree (s->debugformat); + xfree (s); } void @@ -172,7 +174,7 @@ print_symbol_bcache_statistics (void) immediate_quit++; ALL_OBJFILES (objfile) { - printf_filtered ("Byte cache statistics for '%s':\n", objfile->name); + printf_filtered (_("Byte cache statistics for '%s':\n"), objfile->name); print_bcache_statistics (objfile->psymbol_cache, "partial symbol cache"); } immediate_quit--; @@ -189,21 +191,21 @@ print_objfile_statistics (void) immediate_quit++; ALL_OBJFILES (objfile) { - printf_filtered ("Statistics for '%s':\n", objfile->name); + printf_filtered (_("Statistics for '%s':\n"), objfile->name); if (OBJSTAT (objfile, n_stabs) > 0) - printf_filtered (" Number of \"stab\" symbols read: %d\n", + printf_filtered (_(" Number of \"stab\" symbols read: %d\n"), OBJSTAT (objfile, n_stabs)); if (OBJSTAT (objfile, n_minsyms) > 0) - printf_filtered (" Number of \"minimal\" symbols read: %d\n", + printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"), OBJSTAT (objfile, n_minsyms)); if (OBJSTAT (objfile, n_psyms) > 0) - printf_filtered (" Number of \"partial\" symbols read: %d\n", + printf_filtered (_(" Number of \"partial\" symbols read: %d\n"), OBJSTAT (objfile, n_psyms)); if (OBJSTAT (objfile, n_syms) > 0) - printf_filtered (" Number of \"full\" symbols read: %d\n", + printf_filtered (_(" Number of \"full\" symbols read: %d\n"), OBJSTAT (objfile, n_syms)); if (OBJSTAT (objfile, n_types) > 0) - printf_filtered (" Number of \"types\" defined: %d\n", + printf_filtered (_(" Number of \"types\" defined: %d\n"), OBJSTAT (objfile, n_types)); i = 0; ALL_OBJFILE_PSYMTABS (objfile, ps) @@ -211,7 +213,7 @@ print_objfile_statistics (void) if (ps->readin == 0) i++; } - printf_filtered (" Number of psym tables (not yet expanded): %d\n", i); + printf_filtered (_(" Number of psym tables (not yet expanded): %d\n"), i); i = linetables = blockvectors = 0; ALL_OBJFILE_SYMTABS (objfile, s) { @@ -221,25 +223,21 @@ print_objfile_statistics (void) if (s->primary == 1) blockvectors++; } - printf_filtered (" Number of symbol tables: %d\n", i); - printf_filtered (" Number of symbol tables with line tables: %d\n", + printf_filtered (_(" Number of symbol tables: %d\n"), i); + printf_filtered (_(" Number of symbol tables with line tables: %d\n"), linetables); - printf_filtered (" Number of symbol tables with blockvectors: %d\n", + printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"), blockvectors); if (OBJSTAT (objfile, sz_strtab) > 0) - printf_filtered (" Space used by a.out string tables: %d\n", + printf_filtered (_(" Space used by a.out string tables: %d\n"), OBJSTAT (objfile, sz_strtab)); - printf_filtered (" Total memory used for psymbol obstack: %d\n", - obstack_memory_used (&objfile->psymbol_obstack)); - printf_filtered (" Total memory used for psymbol cache: %d\n", + printf_filtered (_(" Total memory used for objfile obstack: %d\n"), + obstack_memory_used (&objfile->objfile_obstack)); + printf_filtered (_(" Total memory used for psymbol cache: %d\n"), bcache_memory_used (objfile->psymbol_cache)); - printf_filtered (" Total memory used for macro cache: %d\n", + printf_filtered (_(" Total memory used for macro cache: %d\n"), bcache_memory_used (objfile->macro_cache)); - printf_filtered (" Total memory used for symbol obstack: %d\n", - obstack_memory_used (&objfile->symbol_obstack)); - printf_filtered (" Total memory used for type obstack: %d\n", - obstack_memory_used (&objfile->type_obstack)); } immediate_quit--; } @@ -350,7 +348,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile) break; } fprintf_filtered (outfile, "[%2d] %c ", index, ms_type); - print_address_numeric (SYMBOL_VALUE_ADDRESS (msymbol), 1, outfile); + deprecated_print_address_numeric (SYMBOL_VALUE_ADDRESS (msymbol), 1, outfile); fprintf_filtered (outfile, " %s", DEPRECATED_SYMBOL_NAME (msymbol)); if (SYMBOL_BFD_SECTION (msymbol)) fprintf_filtered (outfile, " section %s", @@ -368,7 +366,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile) } if (objfile->minimal_symbol_count != index) { - warning ("internal error: minimal symbol count %d != %d", + warning (_("internal error: minimal symbol count %d != %d"), objfile->minimal_symbol_count, index); } fprintf_filtered (outfile, "\n"); @@ -406,16 +404,16 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab, if (i != 0) fprintf_filtered (outfile, ", "); wrap_here (" "); - print_address_numeric (ANOFFSET (psymtab->section_offsets, i), + deprecated_print_address_numeric (ANOFFSET (psymtab->section_offsets, i), 1, outfile); } fprintf_filtered (outfile, "\n"); fprintf_filtered (outfile, " Symbols cover text addresses "); - print_address_numeric (psymtab->textlow, 1, outfile); + deprecated_print_address_numeric (psymtab->textlow, 1, outfile); fprintf_filtered (outfile, "-"); - print_address_numeric (psymtab->texthigh, 1, outfile); + deprecated_print_address_numeric (psymtab->texthigh, 1, outfile); fprintf_filtered (outfile, "\n"); fprintf_filtered (outfile, " Depends on %d other partial symtabs.\n", psymtab->number_of_dependencies); @@ -442,8 +440,8 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab, } static void -dump_symtab (struct objfile *objfile, struct symtab *symtab, - struct ui_file *outfile) +dump_symtab_1 (struct objfile *objfile, struct symtab *symtab, + struct ui_file *outfile) { int i; struct dict_iterator iter; @@ -472,7 +470,7 @@ dump_symtab (struct objfile *objfile, struct symtab *symtab, for (i = 0; i < len; i++) { fprintf_filtered (outfile, " line %d at ", l->item[i].line); - print_address_numeric (l->item[i].pc, 1, outfile); + deprecated_print_address_numeric (l->item[i].pc, 1, outfile); fprintf_filtered (outfile, "\n"); } } @@ -500,9 +498,9 @@ dump_symtab (struct objfile *objfile, struct symtab *symtab, wants it. */ fprintf_filtered (outfile, ", %d syms/buckets in ", dict_size (BLOCK_DICT (b))); - print_address_numeric (BLOCK_START (b), 1, outfile); + deprecated_print_address_numeric (BLOCK_START (b), 1, outfile); fprintf_filtered (outfile, ".."); - print_address_numeric (BLOCK_END (b), 1, outfile); + deprecated_print_address_numeric (BLOCK_END (b), 1, outfile); if (BLOCK_FUNCTION (b)) { fprintf_filtered (outfile, ", function %s", DEPRECATED_SYMBOL_NAME (BLOCK_FUNCTION (b))); @@ -535,6 +533,22 @@ dump_symtab (struct objfile *objfile, struct symtab *symtab, } } +static void +dump_symtab (struct objfile *objfile, struct symtab *symtab, + struct ui_file *outfile) +{ + enum language saved_lang; + + /* Set the current language to the language of the symtab we're dumping + because certain routines used during dump_symtab() use the current + language to print an image of the symbol. We'll restore it later. */ + saved_lang = set_language (symtab->language); + + dump_symtab_1 (objfile, symtab, outfile); + + set_language (saved_lang); +} + void maintenance_print_symbols (char *args, int from_tty) { @@ -550,8 +564,8 @@ maintenance_print_symbols (char *args, int from_tty) if (args == NULL) { - error ("\ -Arguments missing: an output file name and an optional symbol file name"); + error (_("\ +Arguments missing: an output file name and an optional symbol file name")); } else if ((argv = buildargv (args)) == NULL) { @@ -579,7 +593,7 @@ Arguments missing: an output file name and an optional symbol file name"); immediate_quit++; ALL_SYMTABS (objfile, s) - if (symname == NULL || (STREQ (symname, s->filename))) + if (symname == NULL || strcmp (symname, s->filename) == 0) dump_symtab (objfile, s, outfile); immediate_quit--; do_cleanups (cleanups); @@ -601,7 +615,7 @@ print_symbol (void *args) if (SYMBOL_DOMAIN (symbol) == LABEL_DOMAIN) { fprintf_filtered (outfile, "label %s at ", SYMBOL_PRINT_NAME (symbol)); - print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); + deprecated_print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); if (SYMBOL_BFD_SECTION (symbol)) fprintf_filtered (outfile, " section %s\n", bfd_section_name (SYMBOL_BFD_SECTION (symbol)->owner, @@ -666,7 +680,7 @@ print_symbol (void *args) case LOC_STATIC: fprintf_filtered (outfile, "static at "); - print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); + deprecated_print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); if (SYMBOL_BFD_SECTION (symbol)) fprintf_filtered (outfile, " section %s", bfd_section_name @@ -676,7 +690,7 @@ print_symbol (void *args) case LOC_INDIRECT: fprintf_filtered (outfile, "extern global at *("); - print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); + deprecated_print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); fprintf_filtered (outfile, "),"); break; @@ -726,7 +740,7 @@ print_symbol (void *args) case LOC_LABEL: fprintf_filtered (outfile, "label at "); - print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); + deprecated_print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile); if (SYMBOL_BFD_SECTION (symbol)) fprintf_filtered (outfile, " section %s", bfd_section_name @@ -738,11 +752,11 @@ print_symbol (void *args) fprintf_filtered (outfile, "block object "); gdb_print_host_address (SYMBOL_BLOCK_VALUE (symbol), outfile); fprintf_filtered (outfile, ", "); - print_address_numeric (BLOCK_START (SYMBOL_BLOCK_VALUE (symbol)), + deprecated_print_address_numeric (BLOCK_START (SYMBOL_BLOCK_VALUE (symbol)), 1, outfile); fprintf_filtered (outfile, ".."); - print_address_numeric (BLOCK_END (SYMBOL_BLOCK_VALUE (symbol)), + deprecated_print_address_numeric (BLOCK_END (SYMBOL_BLOCK_VALUE (symbol)), 1, outfile); if (SYMBOL_BFD_SECTION (symbol)) @@ -790,7 +804,7 @@ maintenance_print_psymbols (char *args, int from_tty) if (args == NULL) { - error ("print-psymbols takes an output file name and optional symbol file name"); + error (_("print-psymbols takes an output file name and optional symbol file name")); } else if ((argv = buildargv (args)) == NULL) { @@ -818,7 +832,7 @@ maintenance_print_psymbols (char *args, int from_tty) immediate_quit++; ALL_PSYMTABS (objfile, ps) - if (symname == NULL || (STREQ (symname, ps->filename))) + if (symname == NULL || strcmp (symname, ps->filename) == 0) dump_psymtab (objfile, ps, outfile); immediate_quit--; do_cleanups (cleanups); @@ -917,7 +931,7 @@ print_partial_symbols (struct partial_symbol **p, int count, char *what, break; } fputs_filtered (", ", outfile); - print_address_numeric (SYMBOL_VALUE_ADDRESS (*p), 1, outfile); + deprecated_print_address_numeric (SYMBOL_VALUE_ADDRESS (*p), 1, outfile); fprintf_filtered (outfile, "\n"); p++; } @@ -933,11 +947,13 @@ maintenance_print_msymbols (char *args, int from_tty) char *symname = NULL; struct objfile *objfile; + struct stat sym_st, obj_st; + dont_repeat (); if (args == NULL) { - error ("print-msymbols takes an output file name and optional symbol file name"); + error (_("print-msymbols takes an output file name and optional symbol file name")); } else if ((argv = buildargv (args)) == NULL) { @@ -951,7 +967,10 @@ maintenance_print_msymbols (char *args, int from_tty) /* If a second arg is supplied, it is a source file name to match on */ if (argv[1] != NULL) { - symname = argv[1]; + symname = xfullpath (argv[1]); + make_cleanup (xfree, symname); + if (symname && stat (symname, &sym_st)) + perror_with_name (symname); } } @@ -965,8 +984,9 @@ maintenance_print_msymbols (char *args, int from_tty) immediate_quit++; ALL_OBJFILES (objfile) - if (symname == NULL || (STREQ (symname, objfile->name))) - dump_msymbols (objfile, outfile); + if (symname == NULL + || (!stat (objfile->name, &obj_st) && sym_st.st_ino == obj_st.st_ino)) + dump_msymbols (objfile, outfile); immediate_quit--; fprintf_filtered (outfile, "\n\n"); do_cleanups (cleanups); @@ -1072,9 +1092,9 @@ maintenance_info_psymtabs (char *regexp, int from_tty) printf_filtered (" fullname %s\n", psymtab->fullname ? psymtab->fullname : "(null)"); printf_filtered (" text addresses "); - print_address_numeric (psymtab->textlow, 1, gdb_stdout); + deprecated_print_address_numeric (psymtab->textlow, 1, gdb_stdout); printf_filtered (" -- "); - print_address_numeric (psymtab->texthigh, 1, gdb_stdout); + deprecated_print_address_numeric (psymtab->texthigh, 1, gdb_stdout); printf_filtered ("\n"); printf_filtered (" globals "); if (psymtab->n_global_syms) @@ -1183,9 +1203,9 @@ maintenance_check_symtabs (char *ignore, int from_tty) printf_filtered ("Psymtab "); puts_filtered (ps->filename); printf_filtered (" covers bad range "); - print_address_numeric (ps->textlow, 1, gdb_stdout); + deprecated_print_address_numeric (ps->textlow, 1, gdb_stdout); printf_filtered (" - "); - print_address_numeric (ps->texthigh, 1, gdb_stdout); + deprecated_print_address_numeric (ps->texthigh, 1, gdb_stdout); printf_filtered ("\n"); continue; } @@ -1196,13 +1216,13 @@ maintenance_check_symtabs (char *ignore, int from_tty) printf_filtered ("Psymtab "); puts_filtered (ps->filename); printf_filtered (" covers "); - print_address_numeric (ps->textlow, 1, gdb_stdout); + deprecated_print_address_numeric (ps->textlow, 1, gdb_stdout); printf_filtered (" - "); - print_address_numeric (ps->texthigh, 1, gdb_stdout); + deprecated_print_address_numeric (ps->texthigh, 1, gdb_stdout); printf_filtered (" but symtab covers only "); - print_address_numeric (BLOCK_START (b), 1, gdb_stdout); + deprecated_print_address_numeric (BLOCK_START (b), 1, gdb_stdout); printf_filtered (" - "); - print_address_numeric (BLOCK_END (b), 1, gdb_stdout); + deprecated_print_address_numeric (BLOCK_END (b), 1, gdb_stdout); printf_filtered ("\n"); } } @@ -1236,14 +1256,14 @@ extend_psymbol_list (struct psymbol_allocation_list *listp, { new_size = 255; listp->list = (struct partial_symbol **) - xmmalloc (objfile->md, new_size * sizeof (struct partial_symbol *)); + xmalloc (new_size * sizeof (struct partial_symbol *)); } else { new_size = listp->size * 2; listp->list = (struct partial_symbol **) - xmrealloc (objfile->md, (char *) listp->list, - new_size * sizeof (struct partial_symbol *)); + xrealloc ((char *) listp->list, + new_size * sizeof (struct partial_symbol *)); } /* Next assumes we only went one over. Should be good if program works correctly */