Make "cbfd" a gdb_bfd_ref_ptr

This changes program_space::cbfd to be a gdb_bfd_ref_ptr.  This makes
it somewhat less error-prone to use, because now it manages the
reference counting automatically.

Tested by the buildbot.

2018-05-16  Tom Tromey  <tom@tromey.com>

	* gdbcore.h (core_bfd): Redefine.
	* corelow.c (core_target::close): Update.
	(core_target_open): Update.
	* progspace.h (struct program_space) <cbfd>: Now a
	gdb_bfd_ref_ptr.
This commit is contained in:
Tom Tromey 2018-05-11 12:36:19 -06:00
parent 921222e2e8
commit 06333fea76
4 changed files with 13 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2018-05-16 Tom Tromey <tom@tromey.com>
* gdbcore.h (core_bfd): Redefine.
* corelow.c (core_target::close): Update.
(core_target_open): Update.
* progspace.h (struct program_space) <cbfd>: Now a
gdb_bfd_ref_ptr.
2018-05-16 Tom Tromey <tom@tromey.com> 2018-05-16 Tom Tromey <tom@tromey.com>
PR cli/19551: PR cli/19551:

View File

@ -270,8 +270,7 @@ core_target::close ()
comments in clear_solib in solib.c. */ comments in clear_solib in solib.c. */
clear_solib (); clear_solib ();
gdb_bfd_unref (core_bfd); current_program_space->cbfd.reset (nullptr);
core_bfd = NULL;
} }
/* Core targets are heap-allocated (see core_target_open), so here /* Core targets are heap-allocated (see core_target_open), so here
@ -406,7 +405,7 @@ core_target_open (const char *arg, int from_tty)
filename.get (), bfd_errmsg (bfd_get_error ())); filename.get (), bfd_errmsg (bfd_get_error ()));
} }
core_bfd = temp_bfd.release (); current_program_space->cbfd = std::move (temp_bfd);
core_target *target = new core_target (); core_target *target = new core_target ();

View File

@ -133,7 +133,7 @@ extern void specify_exec_file_hook (void (*hook) (const char *filename));
/* Binary File Diddler for the core file. */ /* Binary File Diddler for the core file. */
#define core_bfd (current_program_space->cbfd) #define core_bfd (current_program_space->cbfd.get ())
/* Whether to open exec and core files read-only or read-write. */ /* Whether to open exec and core files read-only or read-write. */

View File

@ -23,6 +23,7 @@
#include "target.h" #include "target.h"
#include "vec.h" #include "vec.h"
#include "gdb_bfd.h"
#include "gdb_vecs.h" #include "gdb_vecs.h"
#include "registry.h" #include "registry.h"
@ -158,7 +159,7 @@ struct program_space
char *pspace_exec_filename = NULL; char *pspace_exec_filename = NULL;
/* Binary file diddling handle for the core file. */ /* Binary file diddling handle for the core file. */
bfd *cbfd = NULL; gdb_bfd_ref_ptr cbfd;
/* The address space attached to this program space. More than one /* The address space attached to this program space. More than one
program space may be bound to the same address space. In the program space may be bound to the same address space. In the