From 3063847f29cb83bae0cdf018c2dca68b65a50780 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 17 May 2018 16:43:53 -0600 Subject: 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 * 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) : Now a unique_ptr. --- gdb/ChangeLog | 9 +++++++++ gdb/dwarf2read.c | 23 ++++++++--------------- gdb/dwarf2read.h | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cb7a306..94dd617 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2018-05-18 Tom Tromey + + * 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) : Now a + unique_ptr. + 2018-05-18 Simon Marchi * dwarf2read.c (mapped_index) : Remove. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index aec770b..94037b4 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -195,7 +195,7 @@ struct mapped_index final : public mapped_index_base }; /* Index data format version. */ - int version; + int version = 0; /* The address table data. */ gdb::array_view address_table; @@ -204,7 +204,7 @@ struct mapped_index final : public mapped_index_base gdb::array_view symbol_table; /* 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 { @@ -2150,9 +2150,6 @@ dwarf2_per_objfile::~dwarf2_per_objfile () if (dwz_file != NULL && 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. */ } @@ -3537,21 +3534,21 @@ to use the section anyway."), static int 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; offset_type cu_list_elements, types_list_elements, dwz_list_elements = 0; struct dwz_file *dwz; struct objfile *objfile = dwarf2_per_objfile->objfile; + std::unique_ptr map (new struct mapped_index); if (!read_index_from_section (objfile, objfile_name (objfile), use_deprecated_index_sections, - &dwarf2_per_objfile->gdb_index, &local_map, + &dwarf2_per_objfile->gdb_index, map.get (), &cu_list, &cu_list_elements, &types_list, &types_list_elements)) return 0; /* Don't use the index if it's empty. */ - if (local_map.symbol_table.empty ()) + if (map->symbol_table.empty ()) return 0; /* 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); } - create_addrmap_from_index (dwarf2_per_objfile, &local_map); - - map = XOBNEW (&objfile->objfile_obstack, struct mapped_index); - map = new (map) mapped_index (); - *map = local_map; + create_addrmap_from_index (dwarf2_per_objfile, map.get ()); - dwarf2_per_objfile->index_table = map; + dwarf2_per_objfile->index_table = std::move (map); dwarf2_per_objfile->using_index = 1; dwarf2_per_objfile->quick_file_names_table = 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->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. */ if (index != NULL && find_slot_in_mapped_hash (index, name, &iter->vec)) diff --git a/gdb/dwarf2read.h b/gdb/dwarf2read.h index 8e6c41d..f36d039 100644 --- a/gdb/dwarf2read.h +++ b/gdb/dwarf2read.h @@ -209,7 +209,7 @@ public: bool using_index = false; /* The mapped index, or NULL if .gdb_index is missing or not being used. */ - mapped_index *index_table = NULL; + std::unique_ptr index_table; /* The mapped index, or NULL if .debug_names is missing or not being used. */ std::unique_ptr debug_names_table; -- cgit v1.1