objfile_per_bfd_storage non-POD
A following patch will want to add a std::vector to objfile_per_bfd_storage. That makes it non-trivially constructible/destructible. Since objfile_per_bfd_storage objects are allocated on an obstack, we need to call their ctors/dtors manually. This is what this patch does. And then since we can now rely on ctors/dtors being run, make objfile_per_bfd_storage::storage_obstack be an auto_obstack. gdb/ChangeLog: 2017-06-27 Pedro Alves <palves@redhat.com> * objfiles.c (get_objfile_bfd_data): Call bfd_alloc instead of bfd_zalloc. Call objfile_per_bfd_storage's ctor. (free_objfile_per_bfd_storage): Call objfile_per_bfd_storage's dtor. * objfiles.h (objfile_per_bfd_storage): Add ctor. Make 'storage_obstack' field an auto_obstack. In-class initialize all non-bitfield fields. Make minsyms_read bool. * symfile.c (read_symbols): Adjust.
This commit is contained in:
parent
a4d1e79aaa
commit
23732b1e32
@ -1,3 +1,14 @@
|
||||
2017-06-27 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* objfiles.c (get_objfile_bfd_data): Call bfd_alloc instead of
|
||||
bfd_zalloc. Call objfile_per_bfd_storage's ctor.
|
||||
(free_objfile_per_bfd_storage): Call objfile_per_bfd_storage's
|
||||
dtor.
|
||||
* objfiles.h (objfile_per_bfd_storage): Add ctor. Make
|
||||
'storage_obstack' field an auto_obstack. In-class initialize all
|
||||
non-bitfield fields. Make minsyms_read bool.
|
||||
* symfile.c (read_symbols): Adjust.
|
||||
|
||||
2017-06-27 Alan Hayward <alan.hayward@arm.com>
|
||||
|
||||
* remote-sim.c (gdbsim_fetch_register): Use byte_vector.
|
||||
|
@ -142,12 +142,19 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
|
||||
{
|
||||
storage
|
||||
= ((struct objfile_per_bfd_storage *)
|
||||
bfd_zalloc (abfd, sizeof (struct objfile_per_bfd_storage)));
|
||||
bfd_alloc (abfd, sizeof (struct objfile_per_bfd_storage)));
|
||||
set_bfd_data (abfd, objfiles_bfd_data, storage);
|
||||
}
|
||||
else
|
||||
storage = OBSTACK_ZALLOC (&objfile->objfile_obstack,
|
||||
struct objfile_per_bfd_storage);
|
||||
{
|
||||
storage = (objfile_per_bfd_storage *)
|
||||
obstack_alloc (&objfile->objfile_obstack,
|
||||
sizeof (objfile_per_bfd_storage));
|
||||
}
|
||||
|
||||
/* objfile_per_bfd_storage is not trivially constructible, must
|
||||
call the ctor manually. */
|
||||
storage = new (storage) objfile_per_bfd_storage ();
|
||||
|
||||
/* Look up the gdbarch associated with the BFD. */
|
||||
if (abfd != NULL)
|
||||
@ -171,7 +178,7 @@ free_objfile_per_bfd_storage (struct objfile_per_bfd_storage *storage)
|
||||
bcache_xfree (storage->macro_cache);
|
||||
if (storage->demangled_names_hash)
|
||||
htab_delete (storage->demangled_names_hash);
|
||||
obstack_free (&storage->storage_obstack, 0);
|
||||
storage->~objfile_per_bfd_storage ();
|
||||
}
|
||||
|
||||
/* A wrapper for free_objfile_per_bfd_storage that can be passed as a
|
||||
|
@ -184,24 +184,28 @@ extern void print_symbol_bcache_statistics (void);
|
||||
|
||||
struct objfile_per_bfd_storage
|
||||
{
|
||||
objfile_per_bfd_storage ()
|
||||
: minsyms_read (false)
|
||||
{}
|
||||
|
||||
/* The storage has an obstack of its own. */
|
||||
|
||||
struct obstack storage_obstack;
|
||||
auto_obstack storage_obstack;
|
||||
|
||||
/* Byte cache for file names. */
|
||||
|
||||
struct bcache *filename_cache;
|
||||
bcache *filename_cache = NULL;
|
||||
|
||||
/* Byte cache for macros. */
|
||||
|
||||
struct bcache *macro_cache;
|
||||
bcache *macro_cache = NULL;
|
||||
|
||||
/* The gdbarch associated with the BFD. Note that this gdbarch is
|
||||
determined solely from BFD information, without looking at target
|
||||
information. The gdbarch determined from a running target may
|
||||
differ from this e.g. with respect to register types and names. */
|
||||
|
||||
struct gdbarch *gdbarch;
|
||||
struct gdbarch *gdbarch = NULL;
|
||||
|
||||
/* Hash table for mapping symbol names to demangled names. Each
|
||||
entry in the hash table is actually two consecutive strings,
|
||||
@ -209,19 +213,19 @@ struct objfile_per_bfd_storage
|
||||
name, and the second is the demangled name or just a zero byte
|
||||
if the name doesn't demangle. */
|
||||
|
||||
struct htab *demangled_names_hash;
|
||||
htab *demangled_names_hash = NULL;
|
||||
|
||||
/* The per-objfile information about the entry point, the scope (file/func)
|
||||
containing the entry point, and the scope of the user's main() func. */
|
||||
|
||||
struct entry_info ei;
|
||||
entry_info ei {};
|
||||
|
||||
/* The name and language of any "main" found in this objfile. The
|
||||
name can be NULL, which means that the information was not
|
||||
recorded. */
|
||||
|
||||
const char *name_of_main;
|
||||
enum language language_of_main;
|
||||
const char *name_of_main = NULL;
|
||||
enum language language_of_main = language_unknown;
|
||||
|
||||
/* Each file contains a pointer to an array of minimal symbols for all
|
||||
global symbols that are defined within the file. The array is
|
||||
@ -233,15 +237,15 @@ struct objfile_per_bfd_storage
|
||||
as all the data that it points to, should be allocated on the
|
||||
objfile_obstack for this file. */
|
||||
|
||||
struct minimal_symbol *msymbols;
|
||||
int minimal_symbol_count;
|
||||
minimal_symbol *msymbols = NULL;
|
||||
int minimal_symbol_count = 0;
|
||||
|
||||
/* The number of minimal symbols read, before any minimal symbol
|
||||
de-duplication is applied. Note in particular that this has only
|
||||
a passing relationship with the actual size of the table above;
|
||||
use minimal_symbol_count if you need the true size. */
|
||||
|
||||
int n_minsyms;
|
||||
int n_minsyms = 0;
|
||||
|
||||
/* This is true if minimal symbols have already been read. Symbol
|
||||
readers can use this to bypass minimal symbol reading. Also, the
|
||||
@ -251,16 +255,16 @@ struct objfile_per_bfd_storage
|
||||
for multiple readers to install minimal symbols into a given
|
||||
per-BFD. */
|
||||
|
||||
unsigned int minsyms_read : 1;
|
||||
bool minsyms_read : 1;
|
||||
|
||||
/* This is a hash table used to index the minimal symbols by name. */
|
||||
|
||||
struct minimal_symbol *msymbol_hash[MINIMAL_SYMBOL_HASH_SIZE];
|
||||
minimal_symbol *msymbol_hash[MINIMAL_SYMBOL_HASH_SIZE] {};
|
||||
|
||||
/* This hash table is used to index the minimal symbols by their
|
||||
demangled names. */
|
||||
|
||||
struct minimal_symbol *msymbol_demangled_hash[MINIMAL_SYMBOL_HASH_SIZE];
|
||||
minimal_symbol *msymbol_demangled_hash[MINIMAL_SYMBOL_HASH_SIZE] {};
|
||||
};
|
||||
|
||||
/* Master structure for keeping track of each file from which
|
||||
|
@ -859,7 +859,7 @@ static void
|
||||
read_symbols (struct objfile *objfile, symfile_add_flags add_flags)
|
||||
{
|
||||
(*objfile->sf->sym_read) (objfile, add_flags);
|
||||
objfile->per_bfd->minsyms_read = 1;
|
||||
objfile->per_bfd->minsyms_read = true;
|
||||
|
||||
/* find_separate_debug_file_in_section should be called only if there is
|
||||
single binary with no existing separate debug info file. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user