This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Add end_psymtab_common
- From: Doug Evans <xdje42 at gmail dot com>
- To: gdb-patches at sourceware dot org
- Date: Wed, 22 Jul 2015 19:20:20 -0700
- Subject: [PATCH] Add end_psymtab_common
- Authentication-results: sourceware.org; auth=none
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 <xdje42@gmail.com>
* 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