mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
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:
parent
51cdc99310
commit
8763cedeec
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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 *,
|
||||
|
@ -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. */
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user