aboutsummaryrefslogtreecommitdiff
path: root/gdb/solib.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/solib.c')
-rw-r--r--gdb/solib.c48
1 files changed, 21 insertions, 27 deletions
diff --git a/gdb/solib.c b/gdb/solib.c
index ed684a2..fc45133 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -474,15 +474,15 @@ solib_find (const char *in_pathname, int *fd)
function. If unsuccessful, the FD will be closed (unless FD was
-1). */
-bfd *
+gdb_bfd_ref_ptr
solib_bfd_fopen (char *pathname, int fd)
{
- bfd *abfd = gdb_bfd_open (pathname, gnutarget, fd);
+ gdb_bfd_ref_ptr abfd (gdb_bfd_open (pathname, gnutarget, fd));
- if (abfd != NULL && !gdb_bfd_has_target_filename (abfd))
- bfd_set_cacheable (abfd, 1);
+ if (abfd != NULL && !gdb_bfd_has_target_filename (abfd.get ()))
+ bfd_set_cacheable (abfd.get (), 1);
- if (!abfd)
+ if (abfd == NULL)
{
make_cleanup (xfree, pathname);
error (_("Could not open `%s' as an executable file: %s"),
@@ -496,12 +496,11 @@ solib_bfd_fopen (char *pathname, int fd)
/* Find shared library PATHNAME and open a BFD for it. */
-bfd *
+gdb_bfd_ref_ptr
solib_bfd_open (char *pathname)
{
char *found_pathname;
int found_file;
- bfd *abfd;
const struct bfd_arch_info *b;
/* Search for shared library file. */
@@ -517,22 +516,20 @@ solib_bfd_open (char *pathname)
}
/* Open bfd for shared library. */
- abfd = solib_bfd_fopen (found_pathname, found_file);
+ gdb_bfd_ref_ptr abfd (solib_bfd_fopen (found_pathname, found_file));
/* Check bfd format. */
- if (!bfd_check_format (abfd, bfd_object))
- {
- make_cleanup_bfd_unref (abfd);
- error (_("`%s': not in executable format: %s"),
- bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
- }
+ if (!bfd_check_format (abfd.get (), bfd_object))
+ error (_("`%s': not in executable format: %s"),
+ bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
/* Check bfd arch. */
b = gdbarch_bfd_arch_info (target_gdbarch ());
- if (!b->compatible (b, bfd_get_arch_info (abfd)))
+ if (!b->compatible (b, bfd_get_arch_info (abfd.get ())))
warning (_("`%s': Shared library architecture %s is not compatible "
"with target architecture %s."), bfd_get_filename (abfd),
- bfd_get_arch_info (abfd)->printable_name, b->printable_name);
+ bfd_get_arch_info (abfd.get ())->printable_name,
+ b->printable_name);
return abfd;
}
@@ -556,18 +553,17 @@ solib_map_sections (struct so_list *so)
char *filename;
struct target_section *p;
struct cleanup *old_chain;
- bfd *abfd;
filename = tilde_expand (so->so_name);
old_chain = make_cleanup (xfree, filename);
- abfd = ops->bfd_open (filename);
+ gdb_bfd_ref_ptr abfd (ops->bfd_open (filename));
do_cleanups (old_chain);
if (abfd == NULL)
return 0;
/* Leave bfd open, core_xfer_memory and "info files" need it. */
- so->abfd = abfd;
+ so->abfd = abfd.release ();
/* Copy the full path name into so_name, allowing symbol_file_add
to find it later. This also affects the =library-loaded GDB/MI
@@ -575,14 +571,14 @@ solib_map_sections (struct so_list *so)
the library's host-side path. If we let the target dictate
that objfile's path, and the target is different from the host,
GDB/MI will not provide the correct host-side path. */
- if (strlen (bfd_get_filename (abfd)) >= SO_NAME_MAX_PATH_SIZE)
+ if (strlen (bfd_get_filename (so->abfd)) >= SO_NAME_MAX_PATH_SIZE)
error (_("Shared library file name is too long."));
- strcpy (so->so_name, bfd_get_filename (abfd));
+ strcpy (so->so_name, bfd_get_filename (so->abfd));
- if (build_section_table (abfd, &so->sections, &so->sections_end))
+ if (build_section_table (so->abfd, &so->sections, &so->sections_end))
{
error (_("Can't find the file sections in `%s': %s"),
- bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
+ bfd_get_filename (so->abfd), bfd_errmsg (bfd_get_error ()));
}
for (p = so->sections; p < so->sections_end; p++)
@@ -1346,7 +1342,6 @@ reload_shared_libraries_1 (int from_tty)
for (so = so_list_head; so != NULL; so = so->next)
{
char *filename, *found_pathname = NULL;
- bfd *abfd;
int was_loaded = so->symbols_loaded;
symfile_add_flags add_flags = SYMFILE_DEFER_BP_RESET;
@@ -1355,12 +1350,11 @@ reload_shared_libraries_1 (int from_tty)
filename = tilde_expand (so->so_original_name);
make_cleanup (xfree, filename);
- abfd = solib_bfd_open (filename);
+ gdb_bfd_ref_ptr abfd (solib_bfd_open (filename));
if (abfd != NULL)
{
- found_pathname = xstrdup (bfd_get_filename (abfd));
+ found_pathname = xstrdup (bfd_get_filename (abfd.get ()));
make_cleanup (xfree, found_pathname);
- gdb_bfd_unref (abfd);
}
/* If this shared library is no longer associated with its previous