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:
parent
fb1eb2f94a
commit
fd5866f6aa
4 changed files with 32 additions and 39 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 §ion : type_sections)
|
||||||
struct dwarf2_section_info *section;
|
create_debug_type_hash_table (dwarf2_per_objfile, dwo_file, §ion,
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue