X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Fpsymtab.c;h=6c0c880a97ab6a5597bc70c802f69047c17de1ca;hb=cbda93a56a0af8d7787ff091caad64af1b2bd085;hp=acbdd6a8761bf6bf67086f9e4440da59780c3ef0;hpb=da51c3472290253124329257bffc2a40bf44c41a;p=platform%2Fupstream%2Fbinutils.git diff --git a/gdb/psymtab.c b/gdb/psymtab.c index acbdd6a..6c0c880 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1,6 +1,6 @@ /* Partial symbol tables. - Copyright (C) 2009-2013 Free Software Foundation, Inc. + Copyright (C) 2009-2014 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,6 @@ #include "symtab.h" #include "psympriv.h" #include "objfiles.h" -#include "gdb_assert.h" #include "block.h" #include "filenames.h" #include "source.h" @@ -58,7 +57,7 @@ static struct partial_symbol *lookup_partial_symbol (struct objfile *, const char *, int, domain_enum); -static char *psymtab_to_fullname (struct partial_symtab *ps); +static const char *psymtab_to_fullname (struct partial_symtab *ps); static struct partial_symbol *find_pc_sect_psymbol (struct objfile *, struct partial_symtab *, @@ -86,7 +85,7 @@ require_partial_symbols (struct objfile *objfile, int verbose) if (verbose) { printf_unfiltered (_("Reading symbols from %s..."), - objfile->name); + objfile_name (objfile)); gdb_flush (gdb_stdout); } (*objfile->sf->sym_read_psymbols) (objfile); @@ -131,7 +130,6 @@ require_partial_symbols (struct objfile *objfile, int verbose) static int partial_map_expand_apply (struct objfile *objfile, const char *name, - const char *full_path, const char *real_path, struct partial_symtab *pst, int (*callback) (struct symtab *, void *), @@ -151,7 +149,7 @@ partial_map_expand_apply (struct objfile *objfile, all of them. */ psymtab_to_symtab (objfile, pst); - return iterate_over_some_symtabs (name, full_path, real_path, callback, data, + return iterate_over_some_symtabs (name, real_path, callback, data, objfile->symtabs, last_made); } @@ -160,7 +158,6 @@ partial_map_expand_apply (struct objfile *objfile, static int partial_map_symtabs_matching_filename (struct objfile *objfile, const char *name, - const char *full_path, const char *real_path, int (*callback) (struct symtab *, void *), @@ -168,7 +165,6 @@ partial_map_symtabs_matching_filename (struct objfile *objfile, { struct partial_symtab *pst; const char *name_basename = lbasename (name); - int is_abs = IS_ABSOLUTE_PATH (name); ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst) { @@ -181,12 +177,12 @@ partial_map_symtabs_matching_filename (struct objfile *objfile, if (pst->anonymous) continue; - if (FILENAME_CMP (name, pst->filename) == 0 - || (!is_abs && compare_filenames_for_search (pst->filename, name))) + if (compare_filenames_for_search (pst->filename, name)) { - if (partial_map_expand_apply (objfile, name, full_path, real_path, + if (partial_map_expand_apply (objfile, name, real_path, pst, callback, data)) return 1; + continue; } /* Before we invoke realpath, which can get expensive when many @@ -195,38 +191,26 @@ partial_map_symtabs_matching_filename (struct objfile *objfile, && FILENAME_CMP (name_basename, lbasename (pst->filename)) != 0) continue; - /* If the user gave us an absolute path, try to find the file in - this symtab and use its absolute path. */ - if (full_path != NULL) + if (compare_filenames_for_search (psymtab_to_fullname (pst), name)) { - psymtab_to_fullname (pst); - if (pst->fullname != NULL - && (FILENAME_CMP (full_path, pst->fullname) == 0 - || (!is_abs && compare_filenames_for_search (pst->fullname, - name)))) - { - if (partial_map_expand_apply (objfile, name, full_path, real_path, - pst, callback, data)) - return 1; - } + if (partial_map_expand_apply (objfile, name, real_path, + pst, callback, data)) + return 1; + continue; } + /* If the user gave us an absolute path, try to find the file in + this symtab and use its absolute path. */ if (real_path != NULL) { - char *rp = NULL; - psymtab_to_fullname (pst); - if (pst->fullname != NULL) - { - rp = gdb_realpath (pst->fullname); - make_cleanup (xfree, rp); - } - if (rp != NULL - && (FILENAME_CMP (real_path, rp) == 0 - || (!is_abs && compare_filenames_for_search (real_path, name)))) + gdb_assert (IS_ABSOLUTE_PATH (real_path)); + gdb_assert (IS_ABSOLUTE_PATH (name)); + if (filename_cmp (psymtab_to_fullname (pst), real_path) == 0) { - if (partial_map_expand_apply (objfile, name, full_path, real_path, + if (partial_map_expand_apply (objfile, name, real_path, pst, callback, data)) return 1; + continue; } } } @@ -241,7 +225,7 @@ static struct partial_symtab * find_pc_sect_psymtab_closer (struct objfile *objfile, CORE_ADDR pc, struct obj_section *section, struct partial_symtab *pst, - struct minimal_symbol *msymbol) + struct bound_minimal_symbol msymbol) { struct partial_symtab *tpst; struct partial_symtab *best_pst = pst; @@ -257,7 +241,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile, section == 0) /* Can't validate section this way. */ return pst; - if (msymbol == NULL) + if (msymbol.minsym == NULL) return (pst); /* The code range of partial symtabs sometimes overlap, so, in @@ -281,7 +265,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile, p = find_pc_sect_psymbol (objfile, tpst, pc, section); if (p != NULL && SYMBOL_VALUE_ADDRESS (p) - == SYMBOL_VALUE_ADDRESS (msymbol)) + == BMSYMBOL_VALUE_ADDRESS (msymbol)) return tpst; /* Also accept the textlow value of a psymtab as a @@ -320,7 +304,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile, static struct partial_symtab * find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc, struct obj_section *section, - struct minimal_symbol *msymbol) + struct bound_minimal_symbol msymbol) { struct partial_symtab *pst; @@ -335,7 +319,7 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc, /* FIXME: addrmaps currently do not handle overlayed sections, so fall back to the non-addrmap case if we're debugging overlays and the addrmap returned the wrong section. */ - if (overlay_debugging && msymbol && section) + if (overlay_debugging && msymbol.minsym && section) { struct partial_symbol *p; @@ -346,7 +330,7 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc, p = find_pc_sect_psymbol (objfile, pst, pc, section); if (!p || SYMBOL_VALUE_ADDRESS (p) - != SYMBOL_VALUE_ADDRESS (msymbol)) + != BMSYMBOL_VALUE_ADDRESS (msymbol)) goto next; } @@ -388,7 +372,7 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc, static struct symtab * find_pc_sect_symtab_from_partial (struct objfile *objfile, - struct minimal_symbol *msymbol, + struct bound_minimal_symbol msymbol, CORE_ADDR pc, struct obj_section *section, int warn_if_readin) { @@ -435,7 +419,7 @@ find_pc_sect_psymbol (struct objfile *objfile, { p = *pp; if (SYMBOL_DOMAIN (p) == VAR_DOMAIN - && SYMBOL_CLASS (p) == LOC_BLOCK + && PSYMBOL_CLASS (p) == LOC_BLOCK && pc >= SYMBOL_VALUE_ADDRESS (p) && (SYMBOL_VALUE_ADDRESS (p) > best_pc || (psymtab->textlow == 0 @@ -444,7 +428,8 @@ find_pc_sect_psymbol (struct objfile *objfile, if (section) /* Match on a specific section. */ { fixup_psymbol_section (p, objfile); - if (!matching_obj_sections (SYMBOL_OBJ_SECTION (p), section)) + if (!matching_obj_sections (SYMBOL_OBJ_SECTION (objfile, p), + section)) continue; } best_pc = SYMBOL_VALUE_ADDRESS (p); @@ -459,7 +444,7 @@ find_pc_sect_psymbol (struct objfile *objfile, { p = *pp; if (SYMBOL_DOMAIN (p) == VAR_DOMAIN - && SYMBOL_CLASS (p) == LOC_BLOCK + && PSYMBOL_CLASS (p) == LOC_BLOCK && pc >= SYMBOL_VALUE_ADDRESS (p) && (SYMBOL_VALUE_ADDRESS (p) > best_pc || (psymtab->textlow == 0 @@ -468,7 +453,8 @@ find_pc_sect_psymbol (struct objfile *objfile, if (section) /* Match on a specific section. */ { fixup_psymbol_section (p, objfile); - if (!matching_obj_sections (SYMBOL_OBJ_SECTION (p), section)) + if (!matching_obj_sections (SYMBOL_OBJ_SECTION (objfile, p), + section)) continue; } best_pc = SYMBOL_VALUE_ADDRESS (p); @@ -484,12 +470,15 @@ fixup_psymbol_section (struct partial_symbol *psym, struct objfile *objfile) { CORE_ADDR addr; - if (psym == NULL || SYMBOL_OBJ_SECTION (psym) != NULL) + if (!psym) + return; + + if (SYMBOL_SECTION (psym) >= 0) return; gdb_assert (objfile); - switch (SYMBOL_CLASS (psym)) + switch (PSYMBOL_CLASS (psym)) { case LOC_STATIC: case LOC_LABEL: @@ -527,7 +516,7 @@ lookup_symbol_aux_psymtabs (struct objfile *objfile, information (but NAME might contain it). */ if (stab->primary) { - struct blockvector *bv = BLOCKVECTOR (stab); + const struct blockvector *bv = BLOCKVECTOR (stab); struct block *block = BLOCKVECTOR_BLOCK (bv, block_index); sym = lookup_block_symbol (block, name, domain); @@ -786,7 +775,7 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { struct cleanup *back_to = increment_reading_symtab (); - (*pst->read_symtab) (objfile, pst); + (*pst->read_symtab) (pst, objfile); do_cleanups (back_to); } @@ -795,8 +784,8 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) static void relocate_psymtabs (struct objfile *objfile, - struct section_offsets *new_offsets, - struct section_offsets *delta) + const struct section_offsets *new_offsets, + const struct section_offsets *delta) { struct partial_symbol **psym; struct partial_symtab *p; @@ -905,7 +894,7 @@ print_partial_symbols (struct gdbarch *gdbarch, fputs_filtered (", ", outfile); break; } - switch (SYMBOL_CLASS (*p)) + switch (PSYMBOL_CLASS (*p)) { case LOC_UNDEF: fputs_filtered ("undefined", outfile); @@ -984,7 +973,7 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab, gdb_print_host_address (psymtab, outfile); fprintf_filtered (outfile, ")\n\n"); fprintf_unfiltered (outfile, " Read from object file %s (", - objfile->name); + objfile_name (objfile)); gdb_print_host_address (objfile, outfile); fprintf_unfiltered (outfile, ")\n"); @@ -1119,7 +1108,7 @@ expand_partial_symbol_tables (struct objfile *objfile) } static void -read_psymtabs_with_filename (struct objfile *objfile, const char *filename) +read_psymtabs_with_fullname (struct objfile *objfile, const char *fullname) { struct partial_symtab *p; @@ -1129,7 +1118,11 @@ read_psymtabs_with_filename (struct objfile *objfile, const char *filename) if (p->anonymous) continue; - if (filename_cmp (filename, p->filename) == 0) + /* psymtab_to_fullname tries to open the file which is slow. + Don't call it if we know the basenames don't match. */ + if ((basenames_may_differ + || filename_cmp (lbasename (fullname), lbasename (p->filename)) == 0) + && filename_cmp (fullname, psymtab_to_fullname (p)) == 0) psymtab_to_symtab (objfile, p); } } @@ -1174,44 +1167,42 @@ map_symbol_filenames_psymtab (struct objfile *objfile, If this function fails to find the file that this partial_symtab represents, NULL will be returned and ps->fullname will be set to NULL. */ -static char * +static const char * psymtab_to_fullname (struct partial_symtab *ps) { - int r; - - if (!ps) - return NULL; - if (ps->anonymous) - return NULL; + gdb_assert (!ps->anonymous); /* Use cached copy if we have it. We rely on forget_cached_source_info being called appropriately to handle cases like the file being moved. */ - if (ps->fullname) - return ps->fullname; + if (ps->fullname == NULL) + { + int fd = find_and_open_source (ps->filename, ps->dirname, &ps->fullname); - r = find_and_open_source (ps->filename, ps->dirname, &ps->fullname); + if (fd >= 0) + close (fd); + else + { + char *fullname; + struct cleanup *back_to; - if (r >= 0) - { - close (r); - return ps->fullname; - } + /* rewrite_source_path would be applied by find_and_open_source, we + should report the pathname where GDB tried to find the file. */ - return NULL; -} + if (ps->dirname == NULL || IS_ABSOLUTE_PATH (ps->filename)) + fullname = xstrdup (ps->filename); + else + fullname = concat (ps->dirname, SLASH_STRING, ps->filename, NULL); -static const char * -find_symbol_file_from_partial (struct objfile *objfile, const char *name) -{ - struct partial_symtab *pst; + back_to = make_cleanup (xfree, fullname); + ps->fullname = rewrite_source_path (fullname); + if (ps->fullname == NULL) + ps->fullname = xstrdup (fullname); + do_cleanups (back_to); + } + } - ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst) - { - if (lookup_partial_symbol (objfile, pst, name, 1, VAR_DOMAIN)) - return pst->filename; - } - return NULL; + return ps->fullname; } /* For all symbols, s, in BLOCK that are in NAMESPACE and match NAME @@ -1246,8 +1237,9 @@ map_block (const char *name, domain_enum namespace, struct objfile *objfile, the definition of quick_symbol_functions in symfile.h. */ static void -map_matching_symbols_psymtab (const char *name, domain_enum namespace, - struct objfile *objfile, int global, +map_matching_symbols_psymtab (struct objfile *objfile, + const char *name, domain_enum namespace, + int global, int (*callback) (struct block *, struct symbol *, void *), void *data, @@ -1288,7 +1280,7 @@ static int recursively_search_psymtabs (struct partial_symtab *ps, struct objfile *objfile, enum search_domain kind, - int (*name_matcher) (const char *, void *), + expand_symtabs_symbol_matcher_ftype *sym_matcher, void *data) { struct partial_symbol **psym; @@ -1311,7 +1303,7 @@ recursively_search_psymtabs (struct partial_symtab *ps, continue; r = recursively_search_psymtabs (ps->dependencies[i], - objfile, kind, name_matcher, data); + objfile, kind, sym_matcher, data); if (r != 0) { ps->searched_flag = PST_SEARCHED_AND_FOUND; @@ -1347,13 +1339,13 @@ recursively_search_psymtabs (struct partial_symtab *ps, if ((kind == ALL_DOMAIN || (kind == VARIABLES_DOMAIN - && SYMBOL_CLASS (*psym) != LOC_TYPEDEF - && SYMBOL_CLASS (*psym) != LOC_BLOCK) + && PSYMBOL_CLASS (*psym) != LOC_TYPEDEF + && PSYMBOL_CLASS (*psym) != LOC_BLOCK) || (kind == FUNCTIONS_DOMAIN - && SYMBOL_CLASS (*psym) == LOC_BLOCK) + && PSYMBOL_CLASS (*psym) == LOC_BLOCK) || (kind == TYPES_DOMAIN - && SYMBOL_CLASS (*psym) == LOC_TYPEDEF)) - && (*name_matcher) (SYMBOL_SEARCH_NAME (*psym), data)) + && PSYMBOL_CLASS (*psym) == LOC_TYPEDEF)) + && (*sym_matcher) (SYMBOL_SEARCH_NAME (*psym), data)) { /* Found a match, so notify our caller. */ result = PST_SEARCHED_AND_FOUND; @@ -1370,8 +1362,8 @@ recursively_search_psymtabs (struct partial_symtab *ps, static void expand_symtabs_matching_via_partial (struct objfile *objfile, - int (*file_matcher) (const char *, void *), - int (*name_matcher) (const char *, void *), + expand_symtabs_file_matcher_ftype *file_matcher, + expand_symtabs_symbol_matcher_ftype *symbol_matcher, enum search_domain kind, void *data) { @@ -1395,13 +1387,25 @@ expand_symtabs_matching_via_partial if (file_matcher) { + int match; + if (ps->anonymous) continue; - if (! (*file_matcher) (ps->filename, data)) + + match = (*file_matcher) (ps->filename, data, 0); + if (!match) + { + /* Before we invoke realpath, which can get expensive when many + files are involved, do a quick comparison of the basenames. */ + if (basenames_may_differ + || (*file_matcher) (lbasename (ps->filename), data, 1)) + match = (*file_matcher) (psymtab_to_fullname (ps), data, 0); + } + if (!match) continue; } - if (recursively_search_psymtabs (ps, objfile, kind, name_matcher, data)) + if (recursively_search_psymtabs (ps, objfile, kind, symbol_matcher, data)) psymtab_to_symtab (objfile, ps); } } @@ -1424,8 +1428,7 @@ const struct quick_symbol_functions psym_functions = relocate_psymtabs, read_symtabs_for_function, expand_partial_symbol_tables, - read_psymtabs_with_filename, - find_symbol_file_from_partial, + read_psymtabs_with_fullname, map_matching_symbols_psymtab, expand_symtabs_matching_via_partial, find_pc_sect_symtab_from_partial, @@ -1526,7 +1529,7 @@ psymbol_compare (const void *addr1, const void *addr2, int length) struct psymbol_bcache * psymbol_bcache_init (void) { - struct psymbol_bcache *bcache = XCALLOC (1, struct psymbol_bcache); + struct psymbol_bcache *bcache = XCNEW (struct psymbol_bcache); bcache->bcache = bcache_xmalloc (psymbol_hash, psymbol_compare); return bcache; } @@ -1583,10 +1586,10 @@ add_psymbol_to_bcache (const char *name, int namelength, int copy_name, { struct partial_symbol psymbol; - /* We must ensure that the entire 'value' field has been zeroed - before assigning to it, because an assignment may not write the - entire field. */ - memset (&psymbol.ginfo.value, 0, sizeof (psymbol.ginfo.value)); + /* We must ensure that the entire struct has been zeroed before + assigning to it, because an assignment may not touch some of the + holes. */ + memset (&psymbol, 0, sizeof (psymbol)); /* val and coreaddr are mutually exclusive, one of them *will* be zero. */ if (val != 0) @@ -1597,9 +1600,8 @@ add_psymbol_to_bcache (const char *name, int namelength, int copy_name, { SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr; } - SYMBOL_SECTION (&psymbol) = 0; - SYMBOL_OBJ_SECTION (&psymbol) = NULL; - SYMBOL_SET_LANGUAGE (&psymbol, language); + SYMBOL_SECTION (&psymbol) = -1; + SYMBOL_SET_LANGUAGE (&psymbol, language, &objfile->objfile_obstack); PSYMBOL_DOMAIN (&psymbol) = domain; PSYMBOL_CLASS (&psymbol) = class; @@ -1702,7 +1704,7 @@ init_psymbol_list (struct objfile *objfile, int total_symbols) /* Current best guess is that approximately a twentieth of the total symbols (in a debugging file) are global or static - oriented symbols. */ + oriented symbols, then multiply that by slop factor of two. */ objfile->global_psymbols.size = total_symbols / 10; objfile->static_psymbols.size = total_symbols / 10; @@ -1739,8 +1741,8 @@ allocate_psymtab (const char *filename, struct objfile *objfile) sizeof (struct partial_symtab)); memset (psymtab, 0, sizeof (struct partial_symtab)); - psymtab->filename = obsavestring (filename, strlen (filename), - &objfile->objfile_obstack); + psymtab->filename = bcache (filename, strlen (filename) + 1, + objfile->per_bfd->filename_cache); psymtab->symtab = NULL; /* Prepend it to the psymtab list for the objfile it belongs to. @@ -1757,10 +1759,10 @@ allocate_psymtab (const char *filename, struct objfile *objfile) static char *last_objfile_name = NULL; if (last_objfile_name == NULL - || strcmp (last_objfile_name, objfile->name) != 0) + || strcmp (last_objfile_name, objfile_name (objfile)) != 0) { xfree (last_objfile_name); - last_objfile_name = xstrdup (objfile->name); + last_objfile_name = xstrdup (objfile_name (objfile)); fprintf_unfiltered (gdb_stdlog, "Creating one or more psymtabs for objfile %s ...\n", last_objfile_name); @@ -1798,6 +1800,44 @@ discard_psymtab (struct objfile *objfile, struct partial_symtab *pst) objfile->free_psymtabs = pst; } +/* An object of this type is passed to discard_psymtabs_upto. */ + +struct psymtab_state +{ + /* The objfile where psymtabs are discarded. */ + + struct objfile *objfile; + + /* The first psymtab to save. */ + + struct partial_symtab *save; +}; + +/* A cleanup function used by make_cleanup_discard_psymtabs. */ + +static void +discard_psymtabs_upto (void *arg) +{ + struct psymtab_state *state = arg; + + while (state->objfile->psymtabs != state->save) + discard_psymtab (state->objfile, state->objfile->psymtabs); +} + +/* Return a new cleanup that discards all psymtabs created in OBJFILE + after this function is called. */ + +struct cleanup * +make_cleanup_discard_psymtabs (struct objfile *objfile) +{ + struct psymtab_state *state = XNEW (struct psymtab_state); + + state->objfile = objfile; + state->save = objfile->psymtabs; + + return make_cleanup_dtor (discard_psymtabs_upto, state, xfree); +} + static void @@ -1877,7 +1917,7 @@ maintenance_info_psymtabs (char *regexp, int from_tty) { if (! printed_objfile_start) { - printf_filtered ("{ objfile %s ", objfile->name); + printf_filtered ("{ objfile %s ", objfile_name (objfile)); wrap_here (" "); printf_filtered ("((struct objfile *) %s)\n", host_address_to_string (objfile)); @@ -1953,16 +1993,16 @@ maintenance_info_psymtabs (char *regexp, int from_tty) } } -/* Check consistency of psymtabs and symtabs. */ +/* Check consistency of currently expanded psymtabs vs symtabs. */ static void -maintenance_check_symtabs (char *ignore, int from_tty) +maintenance_check_psymtabs (char *ignore, int from_tty) { struct symbol *sym; struct partial_symbol **psym; struct symtab *s = NULL; struct partial_symtab *ps; - struct blockvector *bv; + const struct blockvector *bv; struct objfile *objfile; struct block *b; int length; @@ -1971,7 +2011,25 @@ maintenance_check_symtabs (char *ignore, int from_tty) { struct gdbarch *gdbarch = get_objfile_arch (objfile); - s = psymtab_to_symtab (objfile, ps); + /* We don't call psymtab_to_symtab here because that may cause symtab + expansion. When debugging a problem it helps if checkers leave + things unchanged. */ + s = ps->symtab; + + /* First do some checks that don't require the associated symtab. */ + if (ps->texthigh < ps->textlow) + { + printf_filtered ("Psymtab "); + puts_filtered (ps->filename); + printf_filtered (" covers bad range "); + fputs_filtered (paddress (gdbarch, ps->textlow), gdb_stdout); + printf_filtered (" - "); + fputs_filtered (paddress (gdbarch, ps->texthigh), gdb_stdout); + printf_filtered ("\n"); + continue; + } + + /* Now do checks requiring the associated symtab. */ if (s == NULL) continue; bv = BLOCKVECTOR (s); @@ -2009,20 +2067,8 @@ maintenance_check_symtabs (char *ignore, int from_tty) } psym++; } - if (ps->texthigh < ps->textlow) - { - printf_filtered ("Psymtab "); - puts_filtered (ps->filename); - printf_filtered (" covers bad range "); - fputs_filtered (paddress (gdbarch, ps->textlow), gdb_stdout); - printf_filtered (" - "); - fputs_filtered (paddress (gdbarch, ps->texthigh), gdb_stdout); - printf_filtered ("\n"); - continue; - } - if (ps->texthigh == 0) - continue; - if (ps->textlow < BLOCK_START (b) || ps->texthigh > BLOCK_END (b)) + if (ps->texthigh != 0 + && (ps->textlow < BLOCK_START (b) || ps->texthigh > BLOCK_END (b))) { printf_filtered ("Psymtab "); puts_filtered (ps->filename); @@ -2041,34 +2087,6 @@ maintenance_check_symtabs (char *ignore, int from_tty) -void -expand_partial_symbol_names (int (*fun) (const char *, void *), - void *data) -{ - struct objfile *objfile; - - ALL_OBJFILES (objfile) - { - if (objfile->sf) - objfile->sf->qf->expand_symtabs_matching (objfile, NULL, fun, - ALL_DOMAIN, data); - } -} - -void -map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data, - int need_fullname) -{ - struct objfile *objfile; - - ALL_OBJFILES (objfile) - { - if (objfile->sf) - objfile->sf->qf->map_symbol_filenames (objfile, fun, data, - need_fullname); - } -} - extern initialize_file_ftype _initialize_psymtab; void @@ -2086,7 +2104,8 @@ This does not include information about individual partial symbols,\n\ just the symbol table structures themselves."), &maintenanceinfolist); - add_cmd ("check-symtabs", class_maintenance, maintenance_check_symtabs, - _("Check consistency of psymtabs and symtabs."), + add_cmd ("check-psymtabs", class_maintenance, maintenance_check_psymtabs, + _("\ +Check consistency of currently expanded psymtabs versus symtabs."), &maintenancelist); }