diff options
author | Pedro Alves <palves@redhat.com> | 2017-06-27 16:22:08 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-06-27 16:22:08 +0100 |
commit | 23732b1e32dd58f7c731d9aee56ff0b22a645d53 (patch) | |
tree | a6d65195915105e05e8dd4ee05b21b91f8cb1243 /gdb/objfiles.h | |
parent | a4d1e79aaa4b9d994cd9790fc3b756748dc5571c (diff) | |
download | gdb-23732b1e32dd58f7c731d9aee56ff0b22a645d53.zip gdb-23732b1e32dd58f7c731d9aee56ff0b22a645d53.tar.gz gdb-23732b1e32dd58f7c731d9aee56ff0b22a645d53.tar.bz2 |
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.
Diffstat (limited to 'gdb/objfiles.h')
-rw-r--r-- | gdb/objfiles.h | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 58db6c9..3260425 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -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 |