diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 14440e73c5..491ddd5e2b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2021-03-20 Tom Tromey + + * xcoffread.c (xcoff_end_psymtab): Add partial_symtabs parameter. + (xcoff_end_psymtab): Update. + (scan_xcoff_symtab): Add partial_symtabs parameter. + (xcoff_initial_scan): Update. + * stabsread.h (dbx_end_psymtab): Add partial_symtabs parameter. + * mdebugread.c (mdebug_build_psymtabs): Update. + (parse_partial_symbols): Add partial_symtabs parameter. + * dbxread.c (dbx_symfile_read): Update. + (read_dbx_symtab): Add partial_symtabs parameter. + (read_dbx_symtab): Update. + (dbx_end_psymtab): Add partial_symtabs parameter. + 2021-03-20 Tom Tromey * quick-symbol.h (struct quick_symbol_functions) diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 9003822a0f..9a470bf817 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -270,7 +270,8 @@ static void dbx_read_symtab (legacy_psymtab *self, static void dbx_expand_psymtab (legacy_psymtab *, struct objfile *); -static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *); +static void read_dbx_symtab (minimal_symbol_reader &, psymtab_storage *, + struct objfile *); static legacy_psymtab *find_corresponding_bincl_psymtab (const char *, int); @@ -544,7 +545,8 @@ dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) /* Read stabs data from executable file and define symbols. */ - read_dbx_symtab (reader, objfile); + psymtab_storage *partial_symtabs = objfile->partial_symtabs.get (); + read_dbx_symtab (reader, partial_symtabs, objfile); /* Install any minimal symbols that have been collected as the current minimal symbols for this objfile. */ @@ -946,7 +948,9 @@ function_outside_compilation_unit_complaint (const char *arg1) debugging information is available. */ static void -read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) +read_dbx_symtab (minimal_symbol_reader &reader, + psymtab_storage *partial_symtabs, + struct objfile *objfile) { struct gdbarch *gdbarch = objfile->arch (); struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */ @@ -1127,7 +1131,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) which are not the address. */ && nlist.n_value >= pst->raw_text_low ()) { - dbx_end_psymtab (objfile, pst, psymtab_include_list, + dbx_end_psymtab (objfile, partial_symtabs, + pst, psymtab_include_list, includes_used, symnum * symbol_size, nlist.n_value > pst->raw_text_high () ? nlist.n_value : pst->raw_text_high (), @@ -1242,7 +1247,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) if (pst) { - dbx_end_psymtab (objfile, pst, psymtab_include_list, + dbx_end_psymtab (objfile, partial_symtabs, + pst, psymtab_include_list, includes_used, symnum * symbol_size, (valu > pst->raw_text_high () ? valu : pst->raw_text_high ()), @@ -1813,7 +1819,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) compiled without debugging info follows this module. */ if (pst && gdbarch_sofun_address_maybe_missing (gdbarch)) { - dbx_end_psymtab (objfile, pst, + dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, (CORE_ADDR) 0, dependency_list, @@ -1879,7 +1885,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) : lowest_text_address) + text_size; - dbx_end_psymtab (objfile, pst, psymtab_include_list, includes_used, + dbx_end_psymtab (objfile, partial_symtabs, + pst, psymtab_include_list, includes_used, symnum * symbol_size, (text_end > pst->raw_text_high () ? text_end : pst->raw_text_high ()), @@ -1923,7 +1930,8 @@ start_psymtab (struct objfile *objfile, const char *filename, CORE_ADDR textlow, FIXME: List variables and peculiarities of same. */ legacy_psymtab * -dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, +dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, + legacy_psymtab *pst, const char **include_list, int num_includes, int capping_symbol_offset, CORE_ADDR capping_text, legacy_psymtab **dependency_list, @@ -1997,7 +2005,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, address, set it to our starting address. Take care to not set our own ending address to our starting address. */ - for (partial_symtab *p1 : objfile->psymtabs ()) + for (partial_symtab *p1 : partial_symtabs->range ()) if (!p1->text_high_valid && p1->text_low_valid && p1 != pst) p1->set_text_high (pst->raw_text_low ()); } @@ -2010,7 +2018,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, if (number_dependencies) { pst->dependencies - = objfile->partial_symtabs->allocate_dependencies (number_dependencies); + = partial_symtabs->allocate_dependencies (number_dependencies); memcpy (pst->dependencies, dependency_list, number_dependencies * sizeof (legacy_psymtab *)); } @@ -2030,7 +2038,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, /* We could save slight bits of space by only making one of these, shared by the entire set of include files. FIXME-someday. */ subpst->dependencies = - objfile->partial_symtabs->allocate_dependencies (1); + partial_symtabs->allocate_dependencies (1); subpst->dependencies[0] = pst; subpst->number_of_dependencies = 1; @@ -2050,7 +2058,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, is not empty, but we don't realize that. Fixing that without slowing things down might be tricky. */ - objfile->partial_symtabs->discard_psymtab (pst); + partial_symtabs->discard_psymtab (pst); /* Indicate that psymtab was thrown away. */ pst = NULL; diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 2fe4ae08d2..d178beef73 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -222,6 +222,7 @@ static int upgrade_type (int, struct type **, int, union aux_ext *, int, const char *); static void parse_partial_symbols (minimal_symbol_reader &, + psymtab_storage *, struct objfile *); static int has_opaque_xref (FDR *, SYMR *); @@ -357,7 +358,8 @@ mdebug_build_psymtabs (minimal_symbol_reader &reader, (*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr); } - parse_partial_symbols (reader, objfile); + psymtab_storage *partial_symtabs = objfile->partial_symtabs.get (); + parse_partial_symbols (reader, partial_symtabs, objfile); #if 0 /* Check to make sure file was compiled with -g. If not, warn the @@ -2281,6 +2283,7 @@ record_minimal_symbol (minimal_symbol_reader &reader, static void parse_partial_symbols (minimal_symbol_reader &reader, + psymtab_storage *partial_symtabs, struct objfile *objfile) { struct gdbarch *gdbarch = objfile->arch (); @@ -3642,7 +3645,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, /* Link pst to FDR. dbx_end_psymtab returns NULL if the psymtab was empty and put on the free list. */ fdr_to_pst[f_idx].pst - = dbx_end_psymtab (objfile, save_pst, + = dbx_end_psymtab (objfile, partial_symtabs, save_pst, psymtab_include_list, includes_used, -1, save_pst->raw_text_high (), dependency_list, dependencies_used, @@ -3666,7 +3669,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, && save_pst->text_low_valid && !(objfile->flags & OBJF_REORDERED)) { - for (partial_symtab *iter : objfile->psymtabs ()) + for (partial_symtab *iter : partial_symtabs->range ()) { if (save_pst != iter && save_pst->raw_text_low () >= iter->raw_text_low () @@ -3697,7 +3700,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, source files or a reverse .h -> .c dependency for header files. */ pst->number_of_dependencies = 0; pst->dependencies - = objfile->partial_symtabs->allocate_dependencies (fh->crfd - 1); + = partial_symtabs->allocate_dependencies (fh->crfd - 1); for (s_idx = 1; s_idx < fh->crfd; s_idx++) { RFDT rh; @@ -3726,11 +3729,11 @@ parse_partial_symbols (minimal_symbol_reader &reader, /* Remove the dummy psymtab created for -O3 images above, if it is still empty, to enable the detection of stripped executables. */ - partial_symtab *pst_del = objfile->partial_symtabs->psymtabs; + partial_symtab *pst_del = partial_symtabs->psymtabs; if (pst_del->next == NULL && pst_del->number_of_dependencies == 0 && pst_del->empty ()) - objfile->partial_symtabs->discard_psymtab (pst_del); + partial_symtabs->discard_psymtab (pst_del); } /* If the current psymbol has an enumerated type, we need to add diff --git a/gdb/stabsread.h b/gdb/stabsread.h index 8b5d70b72f..e9d5663cc9 100644 --- a/gdb/stabsread.h +++ b/gdb/stabsread.h @@ -172,7 +172,8 @@ extern void finish_global_stabs (struct objfile *objfile); they are only used by some stabs readers. */ extern legacy_psymtab *dbx_end_psymtab - (struct objfile *objfile, legacy_psymtab *pst, + (struct objfile *objfile, psymtab_storage *partial_symtabs, + legacy_psymtab *pst, const char **include_list, int num_includes, int capping_symbol_offset, CORE_ADDR capping_text, legacy_psymtab **dependency_list, int number_dependencies, diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index e0e7a8f0f5..711d893270 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -203,6 +203,7 @@ eb_complaint (int arg1) static void xcoff_initial_scan (struct objfile *, symfile_add_flags); static void scan_xcoff_symtab (minimal_symbol_reader &, + psymtab_storage *partial_symtabs, struct objfile *); static const char *xcoff_next_symbol_text (struct objfile *); @@ -1986,7 +1987,8 @@ xcoff_start_psymtab (struct objfile *objfile, are the information for includes and dependencies. */ static legacy_psymtab * -xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, +xcoff_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, + legacy_psymtab *pst, const char **include_list, int num_includes, int capping_symbol_number, legacy_psymtab **dependency_list, @@ -2008,7 +2010,7 @@ xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, if (number_dependencies) { pst->dependencies - = objfile->partial_symtabs->allocate_dependencies (number_dependencies); + = partial_symtabs->allocate_dependencies (number_dependencies); memcpy (pst->dependencies, dependency_list, number_dependencies * sizeof (legacy_psymtab *)); } @@ -2027,7 +2029,7 @@ xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, /* We could save slight bits of space by only making one of these, shared by the entire set of include files. FIXME-someday. */ subpst->dependencies = - objfile->partial_symtabs->allocate_dependencies (1); + partial_symtabs->allocate_dependencies (1); subpst->dependencies[0] = pst; subpst->number_of_dependencies = 1; @@ -2043,7 +2045,7 @@ xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, /* Empty psymtabs happen as a result of header files which don't have any symbols in them. There can be a lot of them. */ - objfile->partial_symtabs->discard_psymtab (pst); + partial_symtabs->discard_psymtab (pst); /* Indicate that psymtab was thrown away. */ pst = NULL; @@ -2112,6 +2114,7 @@ function_outside_compilation_unit_complaint (const char *arg1) static void scan_xcoff_symtab (minimal_symbol_reader &reader, + psymtab_storage *partial_symtabs, struct objfile *objfile) { CORE_ADDR toc_offset = 0; /* toc offset value in data section. */ @@ -2233,7 +2236,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, each program csect, because their text sections need not be adjacent. */ xcoff_end_psymtab - (objfile, pst, psymtab_include_list, + (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum_before, dependency_list, dependencies_used, textlow_not_set); includes_used = 0; @@ -2402,7 +2405,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, if (pst) { - xcoff_end_psymtab (objfile, pst, psymtab_include_list, + xcoff_end_psymtab (objfile, partial_symtabs, + pst, psymtab_include_list, includes_used, symnum_before, dependency_list, dependencies_used, textlow_not_set); @@ -2819,7 +2823,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, if (pst) { - xcoff_end_psymtab (objfile, pst, psymtab_include_list, includes_used, + xcoff_end_psymtab (objfile, partial_symtabs, + pst, psymtab_include_list, includes_used, ssymnum, dependency_list, dependencies_used, textlow_not_set); } @@ -2930,7 +2935,8 @@ xcoff_initial_scan (struct objfile *objfile, symfile_add_flags symfile_flags) /* Now that the symbol table data of the executable file are all in core, process them and define symbols accordingly. */ - scan_xcoff_symtab (reader, objfile); + psymtab_storage *partial_symtabs = objfile->partial_symtabs.get (); + scan_xcoff_symtab (reader, partial_symtabs, objfile); /* Install any minimal symbols that have been collected as the current minimal symbols for this objfile. */