Use gdb_bfd_ref_ptr in objfile

This changes struct objfile to use a gdb_bfd_ref_ptr.  In addition to
removing some manual memory management, this fixes a use-after-free
that was introduced by the registry rewrite series.  The issue there
was that, in some cases, registry shutdown could refer to memory that
had already been freed.  This help fix the bug by delaying the
destruction of the BFD reference (and thus the per-bfd object) until
after the registry has been shut down.
This commit is contained in:
Tom Tromey
2022-08-02 09:55:32 -06:00
parent 4d44946794
commit 98badbfdc2
40 changed files with 256 additions and 241 deletions

View File

@ -2170,7 +2170,7 @@ enable_break (struct svr4_info *info, int from_tty)
bfd *tmp_bfd;
CORE_ADDR load_addr;
tmp_bfd = os->objfile->obfd;
tmp_bfd = os->objfile->obfd.get ();
load_addr = os->objfile->text_section_offset ();
interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
@ -3149,7 +3149,7 @@ svr4_iterate_over_objfiles_in_search_order
if (current_objfile == current_program_space->symfile_object_file)
abfd = current_program_space->exec_bfd ();
else
abfd = current_objfile->obfd;
abfd = current_objfile->obfd.get ();
if (abfd != nullptr
&& gdb_bfd_scan_elf_dyntag (DT_SYMBOLIC, abfd, nullptr, nullptr) == 1)