diff options
author | Tom Tromey <tom@tromey.com> | 2022-08-02 09:55:32 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2022-08-03 13:26:58 -0600 |
commit | 98badbfdc222d1d7f346046f23a64522b88d22a0 (patch) | |
tree | a57a95b75f64a0e318e0b1bd31dd6b246e4797d8 /gdb/dwarf2/frame.c | |
parent | 4d44946794e68cf79cfba467fa414a958dba2185 (diff) |
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.
Diffstat (limited to 'gdb/dwarf2/frame.c')
-rw-r--r-- | gdb/dwarf2/frame.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c index d7a06395ac..387a2bc751 100644 --- a/gdb/dwarf2/frame.c +++ b/gdb/dwarf2/frame.c @@ -138,7 +138,7 @@ typedef std::vector<dwarf2_fde *> dwarf2_fde_table; struct comp_unit { comp_unit (struct objfile *objf) - : abfd (objf->obfd) + : abfd (objf->obfd.get ()) { } @@ -1534,7 +1534,7 @@ bsearch_fde_cmp (const dwarf2_fde *fde, CORE_ADDR seek_pc) static comp_unit * find_comp_unit (struct objfile *objfile) { - bfd *abfd = objfile->obfd; + bfd *abfd = objfile->obfd.get (); if (gdb_bfd_requires_relocations (abfd)) return dwarf2_frame_objfile_data.get (objfile); @@ -1547,7 +1547,7 @@ find_comp_unit (struct objfile *objfile) static void set_comp_unit (struct objfile *objfile, struct comp_unit *unit) { - bfd *abfd = objfile->obfd; + bfd *abfd = objfile->obfd.get (); if (gdb_bfd_requires_relocations (abfd)) return dwarf2_frame_objfile_data.set (objfile, unit); |