From patchwork Thu Jul 23 02:20:20 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Evans X-Patchwork-Id: 7803 Received: (qmail 102440 invoked by alias); 23 Jul 2015 02:21:20 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 102405 invoked by uid 89); 23 Jul 2015 02:21:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL, BAYES_00, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, KAM_STOCKGEN, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-pd0-f173.google.com Received: from mail-pd0-f173.google.com (HELO mail-pd0-f173.google.com) (209.85.192.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 23 Jul 2015 02:21:12 +0000 Received: by pdjr16 with SMTP id r16so150789647pdj.3 for ; Wed, 22 Jul 2015 19:21:10 -0700 (PDT) X-Received: by 10.70.38.170 with SMTP id h10mr12882295pdk.34.1437618070385; Wed, 22 Jul 2015 19:21:10 -0700 (PDT) Received: from seba.sebabeach.org.gmail.com (173-13-178-53-sfba.hfc.comcastbusiness.net. [173.13.178.53]) by smtp.gmail.com with ESMTPSA id w3sm5644309pdl.45.2015.07.22.19.21.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Jul 2015 19:21:09 -0700 (PDT) From: Doug Evans To: gdb-patches@sourceware.org Subject: [PATCH] Add end_psymtab_common Date: Wed, 22 Jul 2015 19:20:20 -0700 Message-ID: MIME-Version: 1.0 X-IsSubscribed: yes Hi. This patch moves some common code into end_psymtab_common, and renamed end_psymtab to dbx_end_psymtab for consistency. Regression tested on amd64-linux. 2015-07-22 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. diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 6098b35..dc2eda2 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 f440956..2a34a9b 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -6013,11 +6013,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)) { @@ -6129,11 +6125,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 3a81615..5344d2f 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 ea2454c..545d9f3 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -204,8 +204,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, @@ -222,6 +220,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 ba677bc..c3e1621 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1497,7 +1497,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. */ @@ -1528,6 +1528,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 dbf5e1d..65cccd2 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 6a0b8da..1efb6f2 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -332,7 +332,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 b5b2a1d..5940ec9 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