Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Tom Tromey <tom@tromey.com>, gdb-patches@sourceware.org
Subject: Re: [RFA 2/8] Use class to manage BFD reference counts
Date: Fri, 02 Dec 2016 13:05:00 -0000	[thread overview]
Message-ID: <cce47d1e-b2e2-dcdf-5c36-b318ed1c77db@redhat.com> (raw)
In-Reply-To: <1480395946-10924-3-git-send-email-tom@tromey.com>


> @@ -10535,7 +10526,7 @@ open_dwo_file (const char *file_name, const char *comp_dir)
>       is a list of paths.  */
>  
>    if (*debug_file_directory == '\0')
> -    return NULL;
> +    return gdb_bfd_ref_ptr ();

This provides a good reason to have an implicit construction from nullptr_t.
You had it in the original gdbpy_reference submission, but I had asked
to remove it.  If we add it back, these cases could be more clearly
written as "return NULL/nullptr".  Could you do that, and then drop all
the hunks like:

 > -    return NULL;
 > +    return gdb_bfd_ref_ptr ();

?

> @@ -658,82 +654,70 @@ solib_aix_bfd_open (char *pathname)
>      }
>    filename_len = sep - pathname;
>  
> -  filename = xstrprintf ("%.*s", filename_len, pathname);
> -  cleanup = make_cleanup (xfree, filename);
> -  member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep + 1);
> -  make_cleanup (xfree, member_name);
> +  gdb::unique_xmalloc_ptr<char> filename
> +    (xstrprintf ("%.*s", filename_len, pathname));
> +  gdb::unique_xmalloc_ptr<char> member_name
> +    (xstrprintf ("%.*s", path_len - filename_len - 2, sep + 1));

I think these could be:

    std::string filename
      = string_printf ("%.*s", filename_len, pathname);
    std::string member_name
      = string_printf ("%.*s", path_len - filename_len - 2, sep + 1));

>  
>    /* Calling solib_find makes certain that sysroot path is set properly
>       if program has a dependency on .a archive and sysroot is set via
>       set sysroot command.  */
> -  found_pathname = solib_find (filename, &found_file);
> +  found_pathname = solib_find (filename.get (), &found_file);
>    if (found_pathname == NULL)
>        perror_with_name (pathname);
> -  archive_bfd = solib_bfd_fopen (found_pathname, found_file);
> +  gdb_bfd_ref_ptr archive_bfd (solib_bfd_fopen (found_pathname, found_file));
>    if (archive_bfd == NULL)
>      {
>        warning (_("Could not open `%s' as an executable file: %s"),
> -	       filename, bfd_errmsg (bfd_get_error ()));
> -      do_cleanups (cleanup);
> -      return NULL;
> +	       filename.get (), bfd_errmsg (bfd_get_error ()));
> +      return gdb_bfd_ref_ptr ();
>      }
>  
> -  if (bfd_check_format (archive_bfd, bfd_object))
> -    {
> -      do_cleanups (cleanup);
> -      return archive_bfd;
> -    }
> +  if (bfd_check_format (archive_bfd.get (), bfd_object))
> +    return archive_bfd;
>  
> -  if (! bfd_check_format (archive_bfd, bfd_archive))
> +  if (! bfd_check_format (archive_bfd.get (), bfd_archive))
>      {
>        warning (_("\"%s\": not in executable format: %s."),
> -	       filename, bfd_errmsg (bfd_get_error ()));
> -      gdb_bfd_unref (archive_bfd);
> -      do_cleanups (cleanup);
> -      return NULL;
> +	       filename.get (), bfd_errmsg (bfd_get_error ()));
> +      return gdb_bfd_ref_ptr ();
>      }
>  
> -  object_bfd = gdb_bfd_openr_next_archived_file (archive_bfd, NULL);
> +  gdb_bfd_ref_ptr object_bfd
> +    (gdb_bfd_openr_next_archived_file (archive_bfd.get (), NULL));
>    while (object_bfd != NULL)
>      {
> -      bfd *next;
> -
> -      if (strcmp (member_name, object_bfd->filename) == 0)
> +      if (strcmp (member_name.get (), object_bfd->filename) == 0)
>  	break;

Then here:

    member_name == object_bfd->filename

>  
> -      next = gdb_bfd_openr_next_archived_file (archive_bfd, object_bfd);
> -      gdb_bfd_unref (object_bfd);
> -      object_bfd = next;
> +      object_bfd = gdb_bfd_openr_next_archived_file (archive_bfd.get (),
> +						     object_bfd.get ());
>      }
>  

Otherwise LGTM.

Thanks,
Pedro Alves


  reply	other threads:[~2016-12-02 13:05 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-29  5:06 [RFA 0/8] C++-ification series #5 Tom Tromey
2016-11-29  5:06 ` [RFA 3/8] Introduce and use gdb::unlinker Tom Tromey
2016-12-02 13:17   ` Pedro Alves
2016-11-29  5:06 ` [RFA 4/8] Remove make_cleanup_discard_psymtabs Tom Tromey
2016-12-02 14:21   ` Pedro Alves
2016-11-29  5:06 ` [RFA 7/8] Use unique_xmalloc_ptr in execute_gdb_command Tom Tromey
2016-11-29  5:22   ` Tom Tromey
2016-12-15  3:49     ` Tom Tromey
2016-12-20 17:48       ` Pedro Alves
2016-12-20 18:13         ` Tom Tromey
2016-12-23 20:01           ` Tom Tromey
2017-01-10 17:59             ` Pedro Alves
2017-01-10 19:22               ` Tom Tromey
2016-12-20 23:31         ` Tom Tromey
2016-12-20 23:56           ` Pedro Alves
2016-12-22 14:50             ` Tom Tromey
2016-12-22 15:09               ` Pedro Alves
2016-12-22 15:29                 ` Tom Tromey
2016-12-22 15:40                   ` Pedro Alves
2016-12-02 14:49   ` Pedro Alves
2016-12-13 13:30     ` Tom Tromey
2016-11-29  5:06 ` [RFA 1/8] Add gdb_ref_ptr.h Tom Tromey
2016-12-02 13:08   ` Pedro Alves
2016-12-02 17:46     ` Tom Tromey
2016-12-02 18:11       ` Pedro Alves
2016-12-02 19:52         ` Tom Tromey
2016-12-02 23:45           ` Pedro Alves
2016-12-03  0:05   ` Pedro Alves
2016-12-13 13:13     ` Tom Tromey
2016-11-29  5:06 ` [RFA 8/8] Add constructor and destructor to demangle_parse_info Tom Tromey
2016-12-02 15:04   ` Pedro Alves
2016-12-13 13:50     ` Tom Tromey
2016-11-29  5:06 ` [RFA 2/8] Use class to manage BFD reference counts Tom Tromey
2016-12-02 13:05   ` Pedro Alves [this message]
2016-12-13 13:26     ` Tom Tromey
2016-12-15  4:12       ` Tom Tromey
2016-12-20 18:18         ` Pedro Alves
2016-12-20 17:19       ` [pushed] gdb: Constify solib_find (Re: [RFA 2/8] Use class to manage BFD reference counts) Pedro Alves
2016-12-20 18:05         ` Tom Tromey
2016-11-29  5:06 ` [RFA 6/8] Use value_freer in dwarf2_evaluate_loc_desc_full Tom Tromey
2016-12-02 14:45   ` Pedro Alves
2016-12-13 13:29     ` Tom Tromey
2016-12-20 14:49       ` Pedro Alves
2016-12-23 19:05         ` Tom Tromey
2016-12-23 19:59           ` Tom Tromey
2017-01-10 17:57             ` Pedro Alves
2016-12-23 19:59           ` Tom Tromey
2017-01-10 17:58             ` Pedro Alves
2016-11-29  5:06 ` [RFA 5/8] Add value_freer Tom Tromey
2016-12-02 14:24   ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cce47d1e-b2e2-dcdf-5c36-b318ed1c77db@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tom@tromey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox