Add end_psymtab_common, have all debug info readers call it.

gdb/ChangeLog:

	* 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.
This commit is contained in:
Doug Evans 2015-08-15 16:46:20 -07:00
parent 51cdc99310
commit 8763cedeec
9 changed files with 82 additions and 72 deletions

View File

@ -1,3 +1,16 @@
2015-08-15 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.
2015-08-15 Doug Evans <xdje42@gmail.com>
* defs.h (LANGUAGE_BITS): Define.

View File

@ -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

View File

@ -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. */

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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 *,

View File

@ -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. */

View File

@ -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