diff options
author | Tom Tromey <tom@tromey.com> | 2019-10-22 17:28:37 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2020-01-26 16:40:21 -0700 |
commit | 891813beaab0029c88c9eeec9c1847d68a4d6050 (patch) | |
tree | b8f7d6ed3f2dc760bab54a5f641c044ca104cc98 /gdb/xcoffread.c | |
parent | c3693a1d9466bc9d3abe004e66f1b56fed22ba61 (diff) | |
download | gdb-891813beaab0029c88c9eeec9c1847d68a4d6050.zip gdb-891813beaab0029c88c9eeec9c1847d68a4d6050.tar.gz gdb-891813beaab0029c88c9eeec9c1847d68a4d6050.tar.bz2 |
Introduce partial_symtab::read_symtab method
This introduces a new partial_symtab::read_symtab method, and updates
the symbol readers to subclass partial_symtab and implement this
method. The old read_symtab and read_symtab_private members are
removed.
In practice, only DWARF and CTF are truly updated to take advantage of
the new setup. The other symbol readers are less actively maintained,
and so this patch also introduces a "legacy_psymtab", which
essentially works the same way as the old partial_symtab.
(Note that, without more knowledge of the interaction between these
symbol readers, fixing this to remove the new (small) overhead is not
trivial, because these readers copy the read_symtab pointer between
partial symtabs.)
gdb/ChangeLog
2020-01-26 Tom Tromey <tom@tromey.com>
* xcoffread.c (this_symtab_psymtab, read_xcoff_symtab)
(xcoff_psymtab_to_symtab_1, xcoff_read_symtab)
(xcoff_start_psymtab, xcoff_end_psymtab, scan_xcoff_symtab): Use
legacy_symtab.
* stabsread.h (dbx_end_psymtab): Use legacy_symtab.
* psymtab.c (psymtab_to_symtab): Call method.
(dump_psymtab): Update.
* psympriv.h (struct partial_symtab): Add virtual destructor.
<read_symtab>: New method.
(struct legacy_symtab): New.
* mdebugread.c (mdebug_read_symtab): Use legacy_psymtab.
(struct pst_map) <pst>: Now a legacy_psymtab.
(parse_procedure, parse_partial_symbols, psymtab_to_symtab_1)
(new_psymtab): Use legacy_psymtab.
* dwarf2read.h (struct dwarf2_psymtab): New.
(struct dwarf2_per_cu_data) <psymtab>: Use it.
* dwarf2read.c (dwarf2_create_include_psymtab)
(dwarf2_build_include_psymtabs, create_type_unit_group)
(create_partial_symtab, process_psymtab_comp_unit_reader)
(build_type_psymtabs_reader, build_type_psymtab_dependencies)
(set_partial_user): Use dwarf2_psymtab.
(dwarf2_psymtab::read_symtab): Rename from dwarf2_read_symtab.
(psymtab_to_symtab_1, process_full_comp_unit)
(process_full_type_unit, dwarf2_ranges_read)
(dwarf2_get_pc_bounds, psymtab_include_file_name)
(dwarf_decode_lines): Use dwarf2_psymtab.
* dwarf-index-write.c (psym_index_map): Use dwarf2_psymtab.
(add_address_entry_worker, write_one_signatured_type)
(recursively_count_psymbols, recursively_write_psymbols)
(write_one_signatured_type, psyms_seen_size, write_gdbindex)
(write_debug_names): Likewise.
* dbxread.c (struct header_file_location): Take a legacy_psymtab.
<pst>: Now a legacy_psymtab.
(find_corresponding_bincl_psymtab): Return a legacy_psymtab.
(read_dbx_symtab, start_psymtab, dbx_end_psymtab)
(dbx_psymtab_to_symtab_1, read_ofile_symtab): Use legacy_psymtab.
* ctfread.c (struct ctf_psymtab): New.
(ctf_start_symtab, ctf_end_symtab, psymtab_to_symtab): Take a
ctf_psymtab.
(ctf_psymtab::read_symtab): Rename from ctf_read_symtab.
(create_partial_symtab): Return a ctf_psymtab.
(scan_partial_symbols): Update.
Change-Id: Ia57a828786867d6ad03200af8f996f48ed15285e
Diffstat (limited to 'gdb/xcoffread.c')
-rw-r--r-- | gdb/xcoffread.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 901c134..69731a4 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -230,7 +230,7 @@ static CORE_ADDR read_symbol_nvalue (int); static struct symbol *process_xcoff_symbol (struct coff_symbol *, struct objfile *); -static void read_xcoff_symtab (struct objfile *, struct partial_symtab *); +static void read_xcoff_symtab (struct objfile *, legacy_psymtab *); #if 0 static void add_stab_to_list (char *, struct pending_stabs **); @@ -592,7 +592,7 @@ allocate_include_entry (void) /* Global variable to pass the psymtab down to all the routines involved in psymtab to symtab processing. */ -static struct partial_symtab *this_symtab_psymtab; +static legacy_psymtab *this_symtab_psymtab; /* Objfile related to this_symtab_psymtab; set at the same time. */ static struct objfile *this_symtab_objfile; @@ -990,7 +990,7 @@ xcoff_next_symbol_text (struct objfile *objfile) /* Read symbols for a given partial symbol table. */ static void -read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) +read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst) { bfd *abfd = objfile->obfd; char *raw_auxptr; /* Pointer to first raw aux entry for sym. */ @@ -1817,7 +1817,7 @@ find_linenos (struct bfd *abfd, struct bfd_section *asect, void *vpinfo) } static void -xcoff_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) +xcoff_psymtab_to_symtab_1 (struct objfile *objfile, legacy_psymtab *pst) { int i; @@ -1847,7 +1847,8 @@ xcoff_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) wrap_here (""); /* Flush output */ gdb_flush (gdb_stdout); } - xcoff_psymtab_to_symtab_1 (objfile, pst->dependencies[i]); + xcoff_psymtab_to_symtab_1 (objfile, + (legacy_psymtab *) pst->dependencies[i]); } if (((struct symloc *) pst->read_symtab_private)->numsyms != 0) @@ -1866,7 +1867,7 @@ xcoff_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) Be verbose about it if the user wants that. SELF is not NULL. */ static void -xcoff_read_symtab (struct partial_symtab *self, struct objfile *objfile) +xcoff_read_symtab (legacy_psymtab *self, struct objfile *objfile) { if (self->readin) { @@ -2003,17 +2004,17 @@ static unsigned int first_fun_line_offset; is the address relative to which its symbols are (incremental) or 0 (normal). */ -static struct partial_symtab * +static legacy_psymtab * xcoff_start_psymtab (struct objfile *objfile, const char *filename, int first_symnum) { /* We fill in textlow later. */ - struct partial_symtab *result = new partial_symtab (filename, objfile, 0); + legacy_psymtab *result = new legacy_psymtab (filename, objfile, 0); result->read_symtab_private = XOBNEW (&objfile->objfile_obstack, struct symloc); ((struct symloc *) result->read_symtab_private)->first_symnum = first_symnum; - result->read_symtab = xcoff_read_symtab; + result->legacy_read_symtab = xcoff_read_symtab; /* Deduce the source language from the filename for this psymtab. */ psymtab_language = deduce_language_from_filename (filename); @@ -2029,11 +2030,11 @@ xcoff_start_psymtab (struct objfile *objfile, INCLUDE_LIST, NUM_INCLUDES, DEPENDENCY_LIST, and NUMBER_DEPENDENCIES are the information for includes and dependencies. */ -static struct partial_symtab * -xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, +static legacy_psymtab * +xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, const char **include_list, int num_includes, int capping_symbol_number, - struct partial_symtab **dependency_list, + legacy_psymtab **dependency_list, int number_dependencies, int textlow_not_set) { int i; @@ -2054,15 +2055,15 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, pst->dependencies = objfile->partial_symtabs->allocate_dependencies (number_dependencies); memcpy (pst->dependencies, dependency_list, - number_dependencies * sizeof (struct partial_symtab *)); + number_dependencies * sizeof (legacy_psymtab *)); } else pst->dependencies = 0; for (i = 0; i < num_includes; i++) { - struct partial_symtab *subpst = - new partial_symtab (include_list[i], objfile); + legacy_psymtab *subpst = + new legacy_psymtab (include_list[i], objfile); subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc); ((struct symloc *) subpst->read_symtab_private)->first_symnum = 0; @@ -2075,7 +2076,7 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, subpst->dependencies[0] = pst; subpst->number_of_dependencies = 1; - subpst->read_symtab = pst->read_symtab; + subpst->legacy_read_symtab = pst->legacy_read_symtab; } if (num_includes == 0 @@ -2169,7 +2170,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, unsigned int nsyms; /* Current partial symtab */ - struct partial_symtab *pst; + legacy_psymtab *pst; /* List of current psymtab's include files. */ const char **psymtab_include_list; @@ -2177,7 +2178,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, int includes_used; /* Index within current psymtab dependency list. */ - struct partial_symtab **dependency_list; + legacy_psymtab **dependency_list; int dependencies_used, dependencies_allocated; char *sraw_symbol; @@ -2191,7 +2192,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, int misc_func_recorded = 0; /* true if any misc. function. */ int textlow_not_set = 1; - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_allocated = 30; includes_used = 0; @@ -2201,8 +2202,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, dependencies_allocated = 30; dependencies_used = 0; dependency_list = - (struct partial_symtab **) alloca (dependencies_allocated * - sizeof (struct partial_symtab *)); + (legacy_psymtab **) alloca (dependencies_allocated * + sizeof (legacy_psymtab *)); set_last_source_file (NULL); |