Change target_bfd_reopen to take a gdb_bfd_ref_ptr
authorTom Tromey <tromey@adacore.com>
Mon, 22 Feb 2021 16:47:37 +0000 (09:47 -0700)
committerTom Tromey <tromey@adacore.com>
Mon, 22 Feb 2021 16:47:37 +0000 (09:47 -0700)
While looking at Andrew's recent target sections series, I saw that
target_bfd_reopen took a "bfd *", leading to a call to new_reference.
However, because the only caller of target_bfd_reopen is already using
gdb_bfd_ref_ptr, this code can be simplified and the explicit call to
new_reference can be removed.

gdb/ChangeLog
2021-02-22  Tom Tromey  <tromey@adacore.com>

* solib-svr4.c (enable_break): Update.
* bfd-target.c (class target_bfd) <target_bfd>: Change parameter
type.
(target_bfd_reopen): Change parameter type.
* bfd-target.h (target_bfd_reopen): Change parameter type.

gdb/ChangeLog
gdb/bfd-target.c
gdb/bfd-target.h
gdb/solib-svr4.c

index 9de0e235dc0cd089115936a5ef5330c69ca644b0..00ac68ae325fb29ac69c51d3399c1d1927ff1c23 100644 (file)
@@ -1,3 +1,11 @@
+2021-02-22  Tom Tromey  <tromey@adacore.com>
+
+       * solib-svr4.c (enable_break): Update.
+       * bfd-target.c (class target_bfd) <target_bfd>: Change parameter
+       type.
+       (target_bfd_reopen): Change parameter type.
+       * bfd-target.h (target_bfd_reopen): Change parameter type.
+
 2021-02-22  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * thread.c (add_thread_silent): Add assert.
index 90d247a981a28b13b1328ba75fed896145fc1dd6..689dbb19e2592c6278bbe9ff1d776d9209ebfc6a 100644 (file)
@@ -34,7 +34,7 @@ static const target_info target_bfd_target_info = {
 class target_bfd : public target_ops
 {
 public:
-  explicit target_bfd (struct bfd *bfd);
+  explicit target_bfd (const gdb_bfd_ref_ptr &bfd);
 
   const target_info &info () const override
   { return target_bfd_target_info; }
@@ -88,14 +88,14 @@ target_bfd::get_section_table ()
   return &m_table;
 }
 
-target_bfd::target_bfd (struct bfd *abfd)
-  : m_bfd (gdb_bfd_ref_ptr::new_reference (abfd)),
-    m_table (build_section_table (abfd))
+target_bfd::target_bfd (const gdb_bfd_ref_ptr &abfd)
+  : m_bfd (abfd),
+    m_table (build_section_table (abfd.get ()))
 {
 }
 
 target_ops *
-target_bfd_reopen (struct bfd *abfd)
+target_bfd_reopen (const gdb_bfd_ref_ptr &abfd)
 {
   return new target_bfd (abfd);
 }
index 199ada8c73f8ef77d5543b0be4222073ee6eb02c..3d37b5fca9f9096bcdbc7ed7f1798f516ddd05d3 100644 (file)
 #ifndef BFD_TARGET_H
 #define BFD_TARGET_H
 
-struct bfd;
+#include "gdb_bfd.h"
+
 struct target_ops;
 
-/* Given an existing BFD, re-open it as a "struct target_ops".  This
-   acquires a new reference to the BFD.  This reference will be
-   released when the target is closed.  */
-struct target_ops *target_bfd_reopen (struct bfd *bfd);
+/* Given an existing BFD, re-open it as a "struct target_ops".  */
+struct target_ops *target_bfd_reopen (const gdb_bfd_ref_ptr &bfd);
 
 #endif
index 0416faa17c34b0ac15aa64e6e224f9d42db1e989..5d0d3803086a704117395eef59d4b00c14cb941c 100644 (file)
@@ -2333,9 +2333,8 @@ enable_break (struct svr4_info *info, int from_tty)
        goto bkpt_at_symbol;
 
       /* Now convert the TMP_BFD into a target.  That way target, as
-        well as BFD operations can be used.  target_bfd_reopen
-        acquires its own reference.  */
-      tmp_bfd_target = target_bfd_reopen (tmp_bfd.get ());
+        well as BFD operations can be used.  */
+      tmp_bfd_target = target_bfd_reopen (tmp_bfd);
 
       /* On a running target, we can get the dynamic linker's base
         address from the shared library table.  */