forked from Imagelibrary/binutils-gdb
Always use dwarf2_initialize_objfile
Internally we noticed that some tests would fail like so on Windows: warning: Section .debug_aranges in [...] has duplicate debug_info_offset 0x0, ignoring .debug_aranges. Debugging showed that, in fact, a second CU was being created at this offset. We tracked this down to the fact that, while the ELF reader is careful to re-use the per-BFD data, other readers are not, and could re-read the DWARF data multiple times. However, since the change to allow an objfile to have multiple "quick symbol" implementations, there's no reason for this approach -- it's safe and easy for all symbol readers to reuse the per-BFD data when reading DWARF. This patch implements this idea, simplifying dwarf2_build_psymtabs and making it private, and then switching to dwarf2_initialize_objfile as the sole way to start the DWARF reader. Note that, while I think the call to dwarf2_build_frame_info in machoread.c is also obsolete, I haven't attempted to remove it here.
This commit is contained in:
@@ -702,11 +702,9 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
|
||||
if (dwarf2_has_info (objfile, NULL))
|
||||
{
|
||||
/* DWARF2 sections. */
|
||||
dwarf2_build_psymtabs (objfile);
|
||||
dwarf2_initialize_objfile (objfile);
|
||||
}
|
||||
|
||||
dwarf2_build_frame_info (objfile);
|
||||
|
||||
/* Try to add separate debug file if no symbols table found. */
|
||||
if (!objfile->has_partial_symbols ())
|
||||
{
|
||||
|
||||
@@ -38,9 +38,6 @@ enum class dw_index_kind
|
||||
entry on the objfile's "qf" list. */
|
||||
extern void dwarf2_initialize_objfile (struct objfile *objfile);
|
||||
|
||||
struct psymbol_functions;
|
||||
extern void dwarf2_build_psymtabs (struct objfile *,
|
||||
bool already_attached = false);
|
||||
extern void dwarf2_build_frame_info (struct objfile *);
|
||||
|
||||
#endif /* DWARF2_PUBLIC_H */
|
||||
|
||||
@@ -5340,18 +5340,13 @@ dwarf2_initialize_objfile (struct objfile *objfile)
|
||||
|
||||
/* Build a partial symbol table. */
|
||||
|
||||
void
|
||||
dwarf2_build_psymtabs (struct objfile *objfile, bool already_attached)
|
||||
static void
|
||||
dwarf2_build_psymtabs (struct objfile *objfile)
|
||||
{
|
||||
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
|
||||
|
||||
if (already_attached)
|
||||
{
|
||||
if (per_objfile->per_bfd->index_table != nullptr)
|
||||
return;
|
||||
}
|
||||
else
|
||||
objfile->qf.push_front (make_cooked_index_funcs ());
|
||||
if (per_objfile->per_bfd->index_table != nullptr)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
@@ -18457,7 +18452,7 @@ struct cooked_index_functions : public dwarf2_base_index_functions
|
||||
void read_partial_symbols (struct objfile *objfile) override
|
||||
{
|
||||
if (dwarf2_has_info (objfile, nullptr))
|
||||
dwarf2_build_psymtabs (objfile, true);
|
||||
dwarf2_build_psymtabs (objfile);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -860,7 +860,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
|
||||
if (dwarf2_has_info (objfile, NULL))
|
||||
{
|
||||
/* DWARF 2 sections */
|
||||
dwarf2_build_psymtabs (objfile);
|
||||
dwarf2_initialize_objfile (objfile);
|
||||
}
|
||||
|
||||
/* Then the oso. */
|
||||
|
||||
@@ -2872,9 +2872,7 @@ xcoff_initial_scan (struct objfile *objfile, symfile_add_flags symfile_flags)
|
||||
/* DWARF2 sections. */
|
||||
|
||||
if (dwarf2_has_info (objfile, &dwarf2_xcoff_names))
|
||||
dwarf2_build_psymtabs (objfile);
|
||||
|
||||
dwarf2_build_frame_info (objfile);
|
||||
dwarf2_initialize_objfile (objfile);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user