dwarf2read: Get rid of VEC (dwarf2_section_info_def)

This patch removes uses of VEC (dwarf2_section_info_def) in favor of
std::vector<dwarf2_section_info>.  The conversion is relatively
straightforward, no function changes are intended.

gdb/ChangeLog:

	* dwarf2read.h (dwarf2_section_info_def): Remove.
	(DEF_VEC_O (dwarf2_section_info_def)): Remove.
	* dwarf2read.c (struct dwo_sections) <types>: Change type to
	std::vector<dwarf2_section_info>.
	(struct dwo_file) <~dwo_file>: Remove.
	(dwarf2_per_objfile::~dwarf2_per_objfile): Don't manually free
	types field.
	(dwarf2_per_objfile::locate_sections): Adjust to std::vector.
	(dwarf2_read_debug_names): Likewise.
	(create_debug_types_hash_table): Change parameter type to
	array_view, adjust code accordingly.
	(dwarf2_locate_dwo_sections): Adjust to std::vector.
	(partial_die_info::fixup): Likewise.
	(determine_prefix): Likewise.
	* dwarf-index-write.c (write_psymtabs_to_index): Adjust.
This commit is contained in:
Simon Marchi 2019-06-21 14:10:15 -04:00
parent fb1eb2f94a
commit fd5866f6aa
4 changed files with 32 additions and 39 deletions

View file

@ -1,3 +1,21 @@
2019-06-21 Simon Marchi <simon.marchi@efficios.com>
* dwarf2read.h (dwarf2_section_info_def): Remove.
(DEF_VEC_O (dwarf2_section_info_def)): Remove.
* dwarf2read.c (struct dwo_sections) <types>: Change type to
std::vector<dwarf2_section_info>.
(struct dwo_file) <~dwo_file>: Remove.
(dwarf2_per_objfile::~dwarf2_per_objfile): Don't manually free
types field.
(dwarf2_per_objfile::locate_sections): Adjust to std::vector.
(dwarf2_read_debug_names): Likewise.
(create_debug_types_hash_table): Change parameter type to
array_view, adjust code accordingly.
(dwarf2_locate_dwo_sections): Adjust to std::vector.
(partial_die_info::fixup): Likewise.
(determine_prefix): Likewise.
* dwarf-index-write.c (write_psymtabs_to_index): Adjust.
2019-06-21 Simon Marchi <simon.marchi@polymtl.ca> 2019-06-21 Simon Marchi <simon.marchi@polymtl.ca>
* dwarf2read.c (struct dwo_file) <dbfd>: Change type to * dwarf2read.c (struct dwo_file) <dbfd>: Change type to

View file

@ -1638,7 +1638,7 @@ write_psymtabs_to_index (struct dwarf2_per_objfile *dwarf2_per_objfile,
if (dwarf2_per_objfile->using_index) if (dwarf2_per_objfile->using_index)
error (_("Cannot use an index to create the index")); error (_("Cannot use an index to create the index"));
if (VEC_length (dwarf2_section_info_def, dwarf2_per_objfile->types) > 1) if (dwarf2_per_objfile->types.size () > 1)
error (_("Cannot make an index when the file has multiple .debug_types sections")); error (_("Cannot make an index when the file has multiple .debug_types sections"));
if (!objfile->partial_symtabs->psymtabs if (!objfile->partial_symtabs->psymtabs

View file

@ -655,7 +655,7 @@ struct dwo_sections
struct dwarf2_section_info str_offsets; struct dwarf2_section_info str_offsets;
/* In the case of a virtual DWO file, these two are unused. */ /* In the case of a virtual DWO file, these two are unused. */
struct dwarf2_section_info info; struct dwarf2_section_info info;
VEC (dwarf2_section_info_def) *types; std::vector<dwarf2_section_info> types;
}; };
/* CUs/TUs in DWP/DWO files. */ /* CUs/TUs in DWP/DWO files. */
@ -706,11 +706,6 @@ struct dwo_file
dwo_file () = default; dwo_file () = default;
DISABLE_COPY_AND_ASSIGN (dwo_file); DISABLE_COPY_AND_ASSIGN (dwo_file);
~dwo_file ()
{
VEC_free (dwarf2_section_info_def, sections.types);
}
/* The DW_AT_GNU_dwo_name attribute. /* The DW_AT_GNU_dwo_name attribute.
For virtual DWO files the name is constructed from the section offsets For virtual DWO files the name is constructed from the section offsets
of abbrev,line,loc,str_offsets so that we combine virtual DWO files of abbrev,line,loc,str_offsets so that we combine virtual DWO files
@ -2160,8 +2155,6 @@ dwarf2_per_objfile::~dwarf2_per_objfile ()
for (signatured_type *sig_type : all_type_units) for (signatured_type *sig_type : all_type_units)
VEC_free (dwarf2_per_cu_ptr, sig_type->per_cu.imported_symtabs); VEC_free (dwarf2_per_cu_ptr, sig_type->per_cu.imported_symtabs);
VEC_free (dwarf2_section_info_def, types);
/* Everything else should be on the objfile obstack. */ /* Everything else should be on the objfile obstack. */
} }
@ -2418,8 +2411,7 @@ dwarf2_per_objfile::locate_sections (bfd *abfd, asection *sectp,
type_section.s.section = sectp; type_section.s.section = sectp;
type_section.size = bfd_get_section_size (sectp); type_section.size = bfd_get_section_size (sectp);
VEC_safe_push (dwarf2_section_info_def, this->types, this->types.push_back (type_section);
&type_section);
} }
else if (section_is_p (sectp->name, &names.gdb_index)) else if (section_is_p (sectp->name, &names.gdb_index))
{ {
@ -3592,15 +3584,12 @@ dwarf2_read_gdb_index
if (types_list_elements) if (types_list_elements)
{ {
struct dwarf2_section_info *section;
/* We can only handle a single .debug_types when we have an /* We can only handle a single .debug_types when we have an
index. */ index. */
if (VEC_length (dwarf2_section_info_def, dwarf2_per_objfile->types) != 1) if (dwarf2_per_objfile->types.size () != 1)
return 0; return 0;
section = VEC_index (dwarf2_section_info_def, dwarf2_section_info *section = &dwarf2_per_objfile->types[0];
dwarf2_per_objfile->types, 0);
create_signatured_type_table_from_index (dwarf2_per_objfile, section, create_signatured_type_table_from_index (dwarf2_per_objfile, section,
types_list, types_list_elements); types_list, types_list_elements);
@ -5636,11 +5625,10 @@ dwarf2_read_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile)
{ {
/* We can only handle a single .debug_types when we have an /* We can only handle a single .debug_types when we have an
index. */ index. */
if (VEC_length (dwarf2_section_info_def, dwarf2_per_objfile->types) != 1) if (dwarf2_per_objfile->types.size () != 1)
return false; return false;
dwarf2_section_info *section = VEC_index (dwarf2_section_info_def, dwarf2_section_info *section = &dwarf2_per_objfile->types[0];
dwarf2_per_objfile->types, 0);
create_signatured_type_table_from_debug_names create_signatured_type_table_from_debug_names
(dwarf2_per_objfile, *map, section, &dwarf2_per_objfile->abbrev); (dwarf2_per_objfile, *map, section, &dwarf2_per_objfile->abbrev);
@ -6817,19 +6805,11 @@ create_debug_type_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
static void static void
create_debug_types_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile, create_debug_types_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile,
struct dwo_file *dwo_file, struct dwo_file *dwo_file,
VEC (dwarf2_section_info_def) *types, gdb::array_view<dwarf2_section_info> type_sections,
htab_t &types_htab) htab_t &types_htab)
{ {
int ix; for (dwarf2_section_info &section : type_sections)
struct dwarf2_section_info *section; create_debug_type_hash_table (dwarf2_per_objfile, dwo_file, &section,
if (VEC_empty (dwarf2_section_info_def, types))
return;
for (ix = 0;
VEC_iterate (dwarf2_section_info_def, types, ix, section);
++ix)
create_debug_type_hash_table (dwarf2_per_objfile, dwo_file, section,
types_htab, rcuh_kind::TYPE); types_htab, rcuh_kind::TYPE);
} }
@ -12943,8 +12923,7 @@ dwarf2_locate_dwo_sections (bfd *abfd, asection *sectp, void *dwo_sections_ptr)
memset (&type_section, 0, sizeof (type_section)); memset (&type_section, 0, sizeof (type_section));
type_section.s.section = sectp; type_section.s.section = sectp;
type_section.size = bfd_get_section_size (sectp); type_section.size = bfd_get_section_size (sectp);
VEC_safe_push (dwarf2_section_info_def, dwo_sections->types, dwo_sections->types.push_back (type_section);
&type_section);
} }
} }
@ -19030,8 +19009,7 @@ partial_die_info::fixup (struct dwarf2_cu *cu)
children, see if we can determine the namespace from their linkage children, see if we can determine the namespace from their linkage
name. */ name. */
if (cu->language == language_cplus if (cu->language == language_cplus
&& !VEC_empty (dwarf2_section_info_def, && !cu->per_cu->dwarf2_per_objfile->types.empty ()
cu->per_cu->dwarf2_per_objfile->types)
&& die_parent == NULL && die_parent == NULL
&& has_children && has_children
&& (tag == DW_TAG_class_type && (tag == DW_TAG_class_type
@ -22533,7 +22511,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
case DW_TAG_partial_unit: case DW_TAG_partial_unit:
/* gcc-4.5 -gdwarf-4 can drop the enclosing namespace. Cope. */ /* gcc-4.5 -gdwarf-4 can drop the enclosing namespace. Cope. */
if (cu->language == language_cplus if (cu->language == language_cplus
&& !VEC_empty (dwarf2_section_info_def, dwarf2_per_objfile->types) && !dwarf2_per_objfile->types.empty ()
&& die->child != NULL && die->child != NULL
&& (die->tag == DW_TAG_class_type && (die->tag == DW_TAG_class_type
|| die->tag == DW_TAG_structure_type || die->tag == DW_TAG_structure_type

View file

@ -73,9 +73,6 @@ struct dwarf2_section_info
bool is_virtual; bool is_virtual;
}; };
typedef struct dwarf2_section_info dwarf2_section_info_def;
DEF_VEC_O (dwarf2_section_info_def);
/* Read the contents of the section INFO. /* Read the contents of the section INFO.
OBJFILE is the main object file, but not necessarily the file where OBJFILE is the main object file, but not necessarily the file where
the section comes from. E.g., for DWO files the bfd of INFO is the bfd the section comes from. E.g., for DWO files the bfd of INFO is the bfd
@ -167,7 +164,7 @@ public:
dwarf2_section_info debug_names {}; dwarf2_section_info debug_names {};
dwarf2_section_info debug_aranges {}; dwarf2_section_info debug_aranges {};
VEC (dwarf2_section_info_def) *types = NULL; std::vector<dwarf2_section_info> types;
/* Back link. */ /* Back link. */
struct objfile *objfile = NULL; struct objfile *objfile = NULL;