diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 759f4ce0940..8f6ced97452 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2015-08-15 Doug Evans + + * dbxread.c (dbx_end_psymtab): Renamed from end_psymtab. All callers + updated. Call end_psymtab_common. + * dwarf2read.c (process_psymtab_comp_unit_reader): Call + end_psymtab_common. + (build_type_psymtabs_reader): Ditto. + * psympriv.h (sort_pst_symbols): Delete. + (end_psymtab_common): Declare. + * psymtab.c (sort_pst_symbols): Make static. + (end_psymtab_common): New function. + * xcoffread.c (xcoff_end_psymtab): Call end_psymtab_common. + 2015-08-15 Doug Evans * defs.h (LANGUAGE_BITS): Define. diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 6098b357c4a..dc2eda29ae5 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -158,7 +158,7 @@ static int block_address_function_relative = 0; static CORE_ADDR lowest_text_address; /* Non-zero if there is any line number info in the objfile. Prevents - end_psymtab from discarding an otherwise empty psymtab. */ + dbx_end_psymtab from discarding an otherwise empty psymtab. */ static int has_line_numbers; @@ -1358,12 +1358,12 @@ read_dbx_symtab (struct objfile *objfile) which are not the address. */ && nlist.n_value >= pst->textlow) { - end_psymtab (objfile, pst, psymtab_include_list, - includes_used, symnum * symbol_size, - nlist.n_value > pst->texthigh - ? nlist.n_value : pst->texthigh, - dependency_list, dependencies_used, - textlow_not_set); + dbx_end_psymtab (objfile, pst, psymtab_include_list, + includes_used, symnum * symbol_size, + nlist.n_value > pst->texthigh + ? nlist.n_value : pst->texthigh, + dependency_list, dependencies_used, + textlow_not_set); pst = (struct partial_symtab *) 0; includes_used = 0; dependencies_used = 0; @@ -1454,7 +1454,7 @@ read_dbx_symtab (struct objfile *objfile) prev_textlow_not_set = textlow_not_set; /* A zero value is probably an indication for the SunPRO 3.0 - compiler. end_psymtab explicitly tests for zero, so + compiler. dbx_end_psymtab explicitly tests for zero, so don't relocate it. */ if (nlist.n_value == 0 @@ -1474,11 +1474,12 @@ read_dbx_symtab (struct objfile *objfile) if (pst) { - end_psymtab (objfile, pst, psymtab_include_list, - includes_used, symnum * symbol_size, - valu > pst->texthigh ? valu : pst->texthigh, - dependency_list, dependencies_used, - prev_textlow_not_set); + dbx_end_psymtab (objfile, pst, psymtab_include_list, + includes_used, symnum * symbol_size, + valu > pst->texthigh + ? valu : pst->texthigh, + dependency_list, dependencies_used, + prev_textlow_not_set); pst = (struct partial_symtab *) 0; includes_used = 0; dependencies_used = 0; @@ -2080,15 +2081,16 @@ read_dbx_symtab (struct objfile *objfile) case N_ENDM: /* Solaris 2 end of module, finish current partial symbol table. - end_psymtab will set pst->texthigh to the proper value, which + dbx_end_psymtab will set pst->texthigh to the proper value, which is necessary if a module compiled without debugging info follows this module. */ if (pst && gdbarch_sofun_address_maybe_missing (gdbarch)) { - end_psymtab (objfile, pst, psymtab_include_list, includes_used, - symnum * symbol_size, - (CORE_ADDR) 0, dependency_list, - dependencies_used, textlow_not_set); + dbx_end_psymtab (objfile, pst, + psymtab_include_list, includes_used, + symnum * symbol_size, + (CORE_ADDR) 0, dependency_list, + dependencies_used, textlow_not_set); pst = (struct partial_symtab *) 0; includes_used = 0; dependencies_used = 0; @@ -2150,10 +2152,10 @@ read_dbx_symtab (struct objfile *objfile) : lowest_text_address) + text_size; - end_psymtab (objfile, pst, psymtab_include_list, includes_used, - symnum * symbol_size, - text_end > pst->texthigh ? text_end : pst->texthigh, - dependency_list, dependencies_used, textlow_not_set); + dbx_end_psymtab (objfile, pst, psymtab_include_list, includes_used, + symnum * symbol_size, + text_end > pst->texthigh ? text_end : pst->texthigh, + dependency_list, dependencies_used, textlow_not_set); } do_cleanups (back_to); @@ -2196,11 +2198,12 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow, FIXME: List variables and peculiarities of same. */ struct partial_symtab * -end_psymtab (struct objfile *objfile, struct partial_symtab *pst, - const char **include_list, int num_includes, - int capping_symbol_offset, CORE_ADDR capping_text, - struct partial_symtab **dependency_list, int number_dependencies, - int textlow_not_set) +dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, + const char **include_list, int num_includes, + int capping_symbol_offset, CORE_ADDR capping_text, + struct partial_symtab **dependency_list, + int number_dependencies, + int textlow_not_set) { int i; struct gdbarch *gdbarch = get_objfile_arch (objfile); @@ -2287,12 +2290,7 @@ end_psymtab (struct objfile *objfile, struct partial_symtab *pst, /* End of kludge for patching Solaris textlow and texthigh. */ - pst->n_global_syms = - objfile->global_psymbols.next - (objfile->global_psymbols.list - + pst->globals_offset); - pst->n_static_syms = - objfile->static_psymbols.next - (objfile->static_psymbols.list - + pst->statics_offset); + end_psymtab_common (objfile, pst); pst->number_of_dependencies = number_dependencies; if (number_dependencies) @@ -2336,8 +2334,6 @@ end_psymtab (struct objfile *objfile, struct partial_symtab *pst, subpst->read_symtab = pst->read_symtab; } - sort_pst_symbols (objfile, pst); - if (num_includes == 0 && number_dependencies == 0 && pst->n_global_syms == 0 diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 7ae50f7a5da..7a7fb93ebfb 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -6019,11 +6019,7 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, pst->textlow = gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr); pst->texthigh = gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr); - pst->n_global_syms = objfile->global_psymbols.next - - (objfile->global_psymbols.list + pst->globals_offset); - pst->n_static_syms = objfile->static_psymbols.next - - (objfile->static_psymbols.list + pst->statics_offset); - sort_pst_symbols (objfile, pst); + end_psymtab_common (objfile, pst); if (!VEC_empty (dwarf2_per_cu_ptr, cu->per_cu->imported_symtabs)) { @@ -6135,11 +6131,7 @@ build_type_psymtabs_reader (const struct die_reader_specs *reader, highpc = (CORE_ADDR) 0; scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu); - pst->n_global_syms = objfile->global_psymbols.next - - (objfile->global_psymbols.list + pst->globals_offset); - pst->n_static_syms = objfile->static_psymbols.next - - (objfile->static_psymbols.list + pst->statics_offset); - sort_pst_symbols (objfile, pst); + end_psymtab_common (objfile, pst); } /* Struct used to sort TUs by their abbreviation table offset. */ diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 3a81615f347..5344d2f887c 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -2936,7 +2936,7 @@ parse_partial_symbols (struct objfile *objfile) prev_textlow_not_set = textlow_not_set; /* A zero value is probably an indication for the - SunPRO 3.0 compiler. end_psymtab explicitly tests + SunPRO 3.0 compiler. dbx_end_psymtab explicitly tests for zero, so don't relocate it. */ if (sh.value == 0 @@ -3347,7 +3347,7 @@ parse_partial_symbols (struct objfile *objfile) case N_ENDM: /* Solaris 2 end of module, finish current partial - symbol table. END_PSYMTAB will set + symbol table. dbx_end_psymtab will set pst->texthigh to the proper value, which is necessary if a module compiled without debugging info follows this module. */ @@ -3731,12 +3731,14 @@ parse_partial_symbols (struct objfile *objfile) } } - /* Link pst to FDR. end_psymtab returns NULL if the psymtab was + /* 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 = end_psymtab (objfile, save_pst, - psymtab_include_list, includes_used, - -1, save_pst->texthigh, - dependency_list, dependencies_used, textlow_not_set); + fdr_to_pst[f_idx].pst + = dbx_end_psymtab (objfile, save_pst, + psymtab_include_list, includes_used, + -1, save_pst->texthigh, + dependency_list, dependencies_used, + textlow_not_set); includes_used = 0; dependencies_used = 0; diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 3efb01fe48a..2cf319099a7 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -201,8 +201,6 @@ struct partial_symtab void *read_symtab_private; }; -extern void sort_pst_symbols (struct objfile *, struct partial_symtab *); - /* Add any kind of symbol to a psymbol_allocation_list. */ extern void add_psymbol_to_list (const char *, int, @@ -219,6 +217,8 @@ extern struct partial_symtab *start_psymtab_common (struct objfile *, struct partial_symbol **, struct partial_symbol **); +extern void end_psymtab_common (struct objfile *, struct partial_symtab *); + extern struct partial_symtab *allocate_psymtab (const char *, struct objfile *) ATTRIBUTE_NONNULL (1); diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 9124b55c2d3..5d0aa1c61d5 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1496,7 +1496,7 @@ compare_psymbols (const void *s1p, const void *s2p) SYMBOL_SEARCH_NAME (*s2)); } -void +static void sort_pst_symbols (struct objfile *objfile, struct partial_symtab *pst) { /* Sort the global list; don't sort the static list. */ @@ -1527,6 +1527,21 @@ start_psymtab_common (struct objfile *objfile, return psymtab; } +/* Perform "finishing up" operations of a partial symtab. */ + +void +end_psymtab_common (struct objfile *objfile, struct partial_symtab *pst) +{ + pst->n_global_syms + = objfile->global_psymbols.next - (objfile->global_psymbols.list + + pst->globals_offset); + pst->n_static_syms + = objfile->static_psymbols.next - (objfile->static_psymbols.list + + pst->statics_offset); + + sort_pst_symbols (objfile, pst); +} + /* Calculate a hash code for the given partial symbol. The hash is calculated using the symbol's value, language, domain, class and name. These are the values which are set by diff --git a/gdb/stabsread.h b/gdb/stabsread.h index dbf5e1de864..65cccd20add 100644 --- a/gdb/stabsread.h +++ b/gdb/stabsread.h @@ -160,16 +160,12 @@ struct stab_section_list /* Functions exported by dbxread.c. These are not in stabsread.c because they are only used by some stabs readers. */ -extern struct partial_symtab *end_psymtab (struct objfile *objfile, - struct partial_symtab *pst, - const char **include_list, - int num_includes, - int capping_symbol_offset, - CORE_ADDR capping_text, - struct partial_symtab - **dependency_list, - int number_dependencies, - int textlow_not_set); +extern struct partial_symtab *dbx_end_psymtab + (struct objfile *objfile, struct partial_symtab *pst, + const char **include_list, int num_includes, + int capping_symbol_offset, CORE_ADDR capping_text, + struct partial_symtab **dependency_list, int number_dependencies, + int textlow_not_set); extern void process_one_symbol (int, int, CORE_ADDR, char *, const struct section_offsets *, diff --git a/gdb/symtab.h b/gdb/symtab.h index 0109b9678d7..e67151f739d 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -340,7 +340,7 @@ struct minimal_symbol struct general_symbol_info mginfo; - /* Size of this symbol. end_psymtab in dbxread.c uses this + /* Size of this symbol. dbx_end_psymtab in dbxread.c uses this information to calculate the end of the partial symtab based on the address of the last symbol plus the size of the last symbol. */ diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index b5b2a1d27d3..5940ec95fa3 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -2057,10 +2057,8 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, ((struct symloc *) pst->read_symtab_private)->lineno_off = first_fun_line_offset; first_fun_line_offset = 0; - pst->n_global_syms = objfile->global_psymbols.next - - (objfile->global_psymbols.list + pst->globals_offset); - pst->n_static_syms = objfile->static_psymbols.next - - (objfile->static_psymbols.list + pst->statics_offset); + + end_psymtab_common (objfile, pst); pst->number_of_dependencies = number_dependencies; if (number_dependencies) @@ -2104,8 +2102,6 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, subpst->read_symtab = pst->read_symtab; } - sort_pst_symbols (objfile, pst); - if (num_includes == 0 && number_dependencies == 0 && pst->n_global_syms == 0