2016-10-21 Tom Tromey <tom@tromey.com>
+ * xcoffread.c (xcoff_initial_scan): Update.
+ * mipsread.c (mipscoff_symfile_read): Update.
+ * minsyms.c (minimal_symbol_reader): Add obj argument.
+ Initialize member.
+ (install): Remove objfile argument. Update.
+ * mdebugread.c (elfmdebug_build_psymtabs): Update.
+ * machoread.c (macho_symfile_read): Update.
+ * elfread.c (elf_read_minimal_symbols): Update.
+ * dbxread.c (dbx_symfile_read): Update.
+ * coffread.c (coff_symfile_read): Update.
+ * minsyms.h (minimal_symbol_reader): Add m_objfile member.
+ (constructor): Add objfile argument.
+ (minimal_symbol_reader::install): Remove objfile argument.
+
+2016-10-21 Tom Tromey <tom@tromey.com>
+
* xcoffread.c (xcoff_initial_scan): Use
minimal_symbol_reader.
* mipsread.c (mipscoff_symfile_read): Use
if (val < 0)
error (_("\"%s\": can't get string table"), name);
- minimal_symbol_reader reader;
+ minimal_symbol_reader reader (objfile);
/* Now that the executable file is positioned at symbol table,
process it and define symbols accordingly. */
/* Install any minimal symbols that have been collected as the
current minimal symbols for this objfile. */
- reader.install (objfile);
+ reader.install ();
if (pe_file)
{
free_pending_blocks ();
back_to = make_cleanup (really_free_pendings, 0);
- minimal_symbol_reader reader;
+ minimal_symbol_reader reader (objfile);
/* Read stabs data from executable file and define symbols. */
/* Install any minimal symbols that have been collected as the current
minimal symbols for this objfile. */
- reader.install (objfile);
+ reader.install ();
do_cleanups (back_to);
}
return;
}
- minimal_symbol_reader reader;
+ minimal_symbol_reader reader (objfile);
back_to = make_cleanup (null_cleanup, NULL);
/* Allocate struct to keep track of the symfile. */
responsibility to install them. "mdebug" appears to be the only one
which will do this. */
- reader.install (objfile);
+ reader.install ();
do_cleanups (back_to);
if (symtab_create_debug)
symbol_table = (asymbol **) xmalloc (storage_needed);
make_cleanup (xfree, symbol_table);
- minimal_symbol_reader reader;
+ minimal_symbol_reader reader (objfile);
symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
macho_symtab_read (objfile, symcount, symbol_table, &oso_vector);
- reader.install (objfile);
+ reader.install ();
}
/* Try to read .eh_frame / .debug_frame. */
information from .mdebug in an ELF file, or whether we will.
Re-initialize the minimal symbol reader in case we do. */
- minimal_symbol_reader reader;
+ minimal_symbol_reader reader (objfile);
info = ((struct ecoff_debug_info *)
obstack_alloc (&objfile->objfile_obstack,
mdebug_build_psymtabs (objfile, swap, info);
- reader.install (objfile);
+ reader.install ();
}
void
/* See minsyms.h. */
-minimal_symbol_reader::minimal_symbol_reader ()
+minimal_symbol_reader::minimal_symbol_reader (struct objfile *obj)
+: m_objfile (obj)
{
msym_count = 0;
msym_bunch = NULL;
attempts to demangle them if we later add more minimal symbols. */
void
-minimal_symbol_reader::install (struct objfile *objfile)
+minimal_symbol_reader::install ()
{
int bindex;
int mcount;
struct minimal_symbol *msymbols;
int alloc_count;
- if (objfile->per_bfd->minsyms_read)
+ if (m_objfile->per_bfd->minsyms_read)
return;
if (msym_count > 0)
{
fprintf_unfiltered (gdb_stdlog,
"Installing %d minimal symbols of objfile %s.\n",
- msym_count, objfile_name (objfile));
+ msym_count, objfile_name (m_objfile));
}
/* Allocate enough space in the obstack, into which we will gather the
compact out the duplicate entries. Once we have a final table,
we will give back the excess space. */
- alloc_count = msym_count + objfile->per_bfd->minimal_symbol_count + 1;
- obstack_blank (&objfile->per_bfd->storage_obstack,
+ alloc_count = msym_count + m_objfile->per_bfd->minimal_symbol_count + 1;
+ obstack_blank (&m_objfile->per_bfd->storage_obstack,
alloc_count * sizeof (struct minimal_symbol));
msymbols = (struct minimal_symbol *)
- obstack_base (&objfile->per_bfd->storage_obstack);
+ obstack_base (&m_objfile->per_bfd->storage_obstack);
/* Copy in the existing minimal symbols, if there are any. */
- if (objfile->per_bfd->minimal_symbol_count)
- memcpy ((char *) msymbols, (char *) objfile->per_bfd->msymbols,
- objfile->per_bfd->minimal_symbol_count * sizeof (struct minimal_symbol));
+ if (m_objfile->per_bfd->minimal_symbol_count)
+ memcpy ((char *) msymbols, (char *) m_objfile->per_bfd->msymbols,
+ m_objfile->per_bfd->minimal_symbol_count * sizeof (struct minimal_symbol));
/* Walk through the list of minimal symbol bunches, adding each symbol
to the new contiguous array of symbols. Note that we start with the
msym_bunch_index for the first bunch we copy over), and thereafter
each bunch is full. */
- mcount = objfile->per_bfd->minimal_symbol_count;
+ mcount = m_objfile->per_bfd->minimal_symbol_count;
for (bunch = msym_bunch; bunch != NULL; bunch = bunch->next)
{
/* Compact out any duplicates, and free up whatever space we are
no longer using. */
- mcount = compact_minimal_symbols (msymbols, mcount, objfile);
+ mcount = compact_minimal_symbols (msymbols, mcount, m_objfile);
- obstack_blank_fast (&objfile->per_bfd->storage_obstack,
+ obstack_blank_fast (&m_objfile->per_bfd->storage_obstack,
(mcount + 1 - alloc_count) * sizeof (struct minimal_symbol));
msymbols = (struct minimal_symbol *)
- obstack_finish (&objfile->per_bfd->storage_obstack);
+ obstack_finish (&m_objfile->per_bfd->storage_obstack);
/* We also terminate the minimal symbol table with a "null symbol",
which is *not* included in the size of the table. This makes it
The strings themselves are also located in the storage_obstack
of this objfile. */
- objfile->per_bfd->minimal_symbol_count = mcount;
- objfile->per_bfd->msymbols = msymbols;
+ m_objfile->per_bfd->minimal_symbol_count = mcount;
+ m_objfile->per_bfd->msymbols = msymbols;
/* Now build the hash tables; we can't do this incrementally
at an earlier point since we weren't finished with the obstack
yet. (And if the msymbol obstack gets moved, all the internal
pointers to other msymbols need to be adjusted.) */
- build_minimal_symbol_hash_tables (objfile);
+ build_minimal_symbol_hash_tables (m_objfile);
}
}
Currently, minimal symbol table creation is not reentrant; it
relies on global (static) variables in minsyms.c. */
- explicit minimal_symbol_reader ();
+ explicit minimal_symbol_reader (struct objfile *);
~minimal_symbol_reader ();
/* Install the minimal symbols that have been collected into the
given objfile. */
- void install (struct objfile *);
+ void install ();
private:
minimal_symbol_reader &operator=
(const minimal_symbol_reader &);
minimal_symbol_reader (const minimal_symbol_reader &);
+
+ struct objfile *m_objfile;
};
/* Record a new minimal symbol. This is the "full" entry point;
{
bfd *abfd = objfile->obfd;
- minimal_symbol_reader reader;
+ minimal_symbol_reader reader (objfile);
/* Now that the executable file is positioned at symbol table,
process it and define symbols accordingly. */
/* Install any minimal symbols that have been collected as the current
minimal symbols for this objfile. */
- reader.install (objfile);
+ reader.install ();
}
/* Perform any local cleanups required when we are done with a
free_pending_blocks ();
back_to = make_cleanup (really_free_pendings, 0);
- minimal_symbol_reader reader;
+ minimal_symbol_reader reader (objfile);
/* Now that the symbol table data of the executable file are all in core,
process them and define symbols accordingly. */
/* Install any minimal symbols that have been collected as the current
minimal symbols for this objfile. */
- reader.install (objfile);
+ reader.install ();
/* DWARF2 sections. */