Use new to allocate mapped_index
This changes struct mapped_index to be allocated with new. This simplifies the creation a bit (see dwarf2_read_index) and also removes a somewhat ugly explicit destructor call from ~dwarf2_per_objfile. Tested by the buildbot. gdb/ChangeLog 2018-05-18 Tom Tromey <tom@tromey.com> * dwarf2read.c (dwarf2_per_objfile): Update. (struct mapped_index): Add initializers. (dwarf2_read_index): Use new. (dw2_symtab_iter_init): Update. * dwarf2read.h (struct dwarf2_per_objfile) <index_table>: Now a unique_ptr.
This commit is contained in:
parent
6487709f3f
commit
3063847f29
|
@ -1,3 +1,12 @@
|
||||||
|
2018-05-18 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* dwarf2read.c (dwarf2_per_objfile): Update.
|
||||||
|
(struct mapped_index): Add initializers.
|
||||||
|
(dwarf2_read_index): Use new.
|
||||||
|
(dw2_symtab_iter_init): Update.
|
||||||
|
* dwarf2read.h (struct dwarf2_per_objfile) <index_table>: Now a
|
||||||
|
unique_ptr.
|
||||||
|
|
||||||
2018-05-18 Simon Marchi <simon.marchi@ericsson.com>
|
2018-05-18 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
* dwarf2read.c (mapped_index) <total_size>: Remove.
|
* dwarf2read.c (mapped_index) <total_size>: Remove.
|
||||||
|
|
|
@ -195,7 +195,7 @@ struct mapped_index final : public mapped_index_base
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Index data format version. */
|
/* Index data format version. */
|
||||||
int version;
|
int version = 0;
|
||||||
|
|
||||||
/* The address table data. */
|
/* The address table data. */
|
||||||
gdb::array_view<const gdb_byte> address_table;
|
gdb::array_view<const gdb_byte> address_table;
|
||||||
|
@ -204,7 +204,7 @@ struct mapped_index final : public mapped_index_base
|
||||||
gdb::array_view<symbol_table_slot> symbol_table;
|
gdb::array_view<symbol_table_slot> symbol_table;
|
||||||
|
|
||||||
/* A pointer to the constant pool. */
|
/* A pointer to the constant pool. */
|
||||||
const char *constant_pool;
|
const char *constant_pool = nullptr;
|
||||||
|
|
||||||
bool symbol_name_slot_invalid (offset_type idx) const override
|
bool symbol_name_slot_invalid (offset_type idx) const override
|
||||||
{
|
{
|
||||||
|
@ -2150,9 +2150,6 @@ dwarf2_per_objfile::~dwarf2_per_objfile ()
|
||||||
if (dwz_file != NULL && dwz_file->dwz_bfd)
|
if (dwz_file != NULL && dwz_file->dwz_bfd)
|
||||||
gdb_bfd_unref (dwz_file->dwz_bfd);
|
gdb_bfd_unref (dwz_file->dwz_bfd);
|
||||||
|
|
||||||
if (index_table != NULL)
|
|
||||||
index_table->~mapped_index ();
|
|
||||||
|
|
||||||
/* Everything else should be on the objfile obstack. */
|
/* Everything else should be on the objfile obstack. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3537,21 +3534,21 @@ to use the section anyway."),
|
||||||
static int
|
static int
|
||||||
dwarf2_read_index (struct dwarf2_per_objfile *dwarf2_per_objfile)
|
dwarf2_read_index (struct dwarf2_per_objfile *dwarf2_per_objfile)
|
||||||
{
|
{
|
||||||
struct mapped_index local_map, *map;
|
|
||||||
const gdb_byte *cu_list, *types_list, *dwz_list = NULL;
|
const gdb_byte *cu_list, *types_list, *dwz_list = NULL;
|
||||||
offset_type cu_list_elements, types_list_elements, dwz_list_elements = 0;
|
offset_type cu_list_elements, types_list_elements, dwz_list_elements = 0;
|
||||||
struct dwz_file *dwz;
|
struct dwz_file *dwz;
|
||||||
struct objfile *objfile = dwarf2_per_objfile->objfile;
|
struct objfile *objfile = dwarf2_per_objfile->objfile;
|
||||||
|
|
||||||
|
std::unique_ptr<struct mapped_index> map (new struct mapped_index);
|
||||||
if (!read_index_from_section (objfile, objfile_name (objfile),
|
if (!read_index_from_section (objfile, objfile_name (objfile),
|
||||||
use_deprecated_index_sections,
|
use_deprecated_index_sections,
|
||||||
&dwarf2_per_objfile->gdb_index, &local_map,
|
&dwarf2_per_objfile->gdb_index, map.get (),
|
||||||
&cu_list, &cu_list_elements,
|
&cu_list, &cu_list_elements,
|
||||||
&types_list, &types_list_elements))
|
&types_list, &types_list_elements))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Don't use the index if it's empty. */
|
/* Don't use the index if it's empty. */
|
||||||
if (local_map.symbol_table.empty ())
|
if (map->symbol_table.empty ())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* If there is a .dwz file, read it so we can get its CU list as
|
/* If there is a .dwz file, read it so we can get its CU list as
|
||||||
|
@ -3595,13 +3592,9 @@ dwarf2_read_index (struct dwarf2_per_objfile *dwarf2_per_objfile)
|
||||||
types_list, types_list_elements);
|
types_list, types_list_elements);
|
||||||
}
|
}
|
||||||
|
|
||||||
create_addrmap_from_index (dwarf2_per_objfile, &local_map);
|
create_addrmap_from_index (dwarf2_per_objfile, map.get ());
|
||||||
|
|
||||||
map = XOBNEW (&objfile->objfile_obstack, struct mapped_index);
|
dwarf2_per_objfile->index_table = std::move (map);
|
||||||
map = new (map) mapped_index ();
|
|
||||||
*map = local_map;
|
|
||||||
|
|
||||||
dwarf2_per_objfile->index_table = map;
|
|
||||||
dwarf2_per_objfile->using_index = 1;
|
dwarf2_per_objfile->using_index = 1;
|
||||||
dwarf2_per_objfile->quick_file_names_table =
|
dwarf2_per_objfile->quick_file_names_table =
|
||||||
create_quick_file_names_table (dwarf2_per_objfile->all_comp_units.size ());
|
create_quick_file_names_table (dwarf2_per_objfile->all_comp_units.size ());
|
||||||
|
@ -3916,7 +3909,7 @@ dw2_symtab_iter_init (struct dw2_symtab_iterator *iter,
|
||||||
iter->next = 0;
|
iter->next = 0;
|
||||||
iter->global_seen = 0;
|
iter->global_seen = 0;
|
||||||
|
|
||||||
mapped_index *index = dwarf2_per_objfile->index_table;
|
mapped_index *index = dwarf2_per_objfile->index_table.get ();
|
||||||
|
|
||||||
/* index is NULL if OBJF_READNOW. */
|
/* index is NULL if OBJF_READNOW. */
|
||||||
if (index != NULL && find_slot_in_mapped_hash (index, name, &iter->vec))
|
if (index != NULL && find_slot_in_mapped_hash (index, name, &iter->vec))
|
||||||
|
|
|
@ -209,7 +209,7 @@ public:
|
||||||
bool using_index = false;
|
bool using_index = false;
|
||||||
|
|
||||||
/* The mapped index, or NULL if .gdb_index is missing or not being used. */
|
/* The mapped index, or NULL if .gdb_index is missing or not being used. */
|
||||||
mapped_index *index_table = NULL;
|
std::unique_ptr<mapped_index> index_table;
|
||||||
|
|
||||||
/* The mapped index, or NULL if .debug_names is missing or not being used. */
|
/* The mapped index, or NULL if .debug_names is missing or not being used. */
|
||||||
std::unique_ptr<mapped_debug_names> debug_names_table;
|
std::unique_ptr<mapped_debug_names> debug_names_table;
|
||||||
|
|
Loading…
Reference in New Issue