aboutsummaryrefslogtreecommitdiff
path: root/gdb/build-id.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/build-id.c')
-rw-r--r--gdb/build-id.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/gdb/build-id.c b/gdb/build-id.c
index ed66bc6..0f63223 100644
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
@@ -67,14 +67,14 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
/* See build-id.h. */
-bfd *
+gdb_bfd_ref_ptr
build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
{
char *link, *debugdir;
VEC (char_ptr) *debugdir_vec;
struct cleanup *back_to;
int ix;
- bfd *abfd = NULL;
+ gdb_bfd_ref_ptr abfd;
int alloc_len;
/* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
@@ -127,11 +127,10 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
if (abfd == NULL)
continue;
- if (build_id_verify (abfd, build_id_len, build_id))
+ if (build_id_verify (abfd.get(), build_id_len, build_id))
break;
- gdb_bfd_unref (abfd);
- abfd = NULL;
+ abfd.release ();
}
do_cleanups (back_to);
@@ -148,25 +147,16 @@ find_separate_debug_file_by_buildid (struct objfile *objfile)
build_id = build_id_bfd_get (objfile->obfd);
if (build_id != NULL)
{
- bfd *abfd;
-
- abfd = build_id_to_debug_bfd (build_id->size, build_id->data);
+ gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size,
+ build_id->data));
/* Prevent looping on a stripped .debug file. */
if (abfd != NULL
- && filename_cmp (bfd_get_filename (abfd),
+ && filename_cmp (bfd_get_filename (abfd.get ()),
objfile_name (objfile)) == 0)
- {
- warning (_("\"%s\": separate debug info file has no debug info"),
- bfd_get_filename (abfd));
- gdb_bfd_unref (abfd);
- }
+ warning (_("\"%s\": separate debug info file has no debug info"),
+ bfd_get_filename (abfd.get ()));
else if (abfd != NULL)
- {
- char *result = xstrdup (bfd_get_filename (abfd));
-
- gdb_bfd_unref (abfd);
- return result;
- }
+ return xstrdup (bfd_get_filename (abfd.get ()));
}
return NULL;
}