Cache .gnu_debugdata BFD
authorTom Tromey <tom@tromey.com>
Fri, 14 Feb 2020 21:16:23 +0000 (14:16 -0700)
committerTom Tromey <tom@tromey.com>
Fri, 14 Feb 2020 21:16:24 +0000 (14:16 -0700)
While looking at the output of "maint info bfd" with multiple
inferiors, I noticed that there were duplicate entries for
.gnu_debugdata.

There is no reason to re-create this BFD each time it is needed.  This
patch arranges to share the data.

gdb/ChangeLog
2020-02-14  Tom Tromey  <tom@tromey.com>

* minidebug.c (gnu_debug_key): New global.
(find_separate_debug_file_in_section): Use it.

Change-Id: If139f89f0f07db33f399afdbcfbf5aaeffe4de46

gdb/ChangeLog
gdb/minidebug.c

index b71251c6a209210d9baf9beb402d86501853ab16..fd9b6a85ea14856211a33029e51c45b392791fe9 100644 (file)
@@ -1,3 +1,8 @@
+2020-02-14  Tom Tromey  <tom@tromey.com>
+
+       * minidebug.c (gnu_debug_key): New global.
+       (find_separate_debug_file_in_section): Use it.
+
 2020-02-14  Simon Marchi  <simon.marchi@efficios.com>
 
        * gdbarch.sh (displaced_step_copy_insn): Change return type to an
index a56a822628e3e297262794d4be9c030e3e9c653c..dbf14c79fb958f4357f06bdef617a2652c74184b 100644 (file)
 
 #ifdef HAVE_LIBLZMA
 
+/* We stash a reference to the .gnu_debugdata BFD on the enclosing
+   BFD.  */
+static const bfd_key<gdb_bfd_ref_ptr> gnu_debug_key;
+
 #include <lzma.h>
 
 /* Allocator function for LZMA.  */
@@ -269,6 +273,10 @@ find_separate_debug_file_in_section (struct objfile *objfile)
     return NULL;
 
 #ifdef HAVE_LIBLZMA
+  gdb_bfd_ref_ptr *shared = gnu_debug_key.get (objfile->obfd);
+  if (shared != nullptr)
+    return *shared;
+
   std::string filename = string_printf (_(".gnu_debugdata for %s"),
                                        objfile_name (objfile));
 
@@ -282,6 +290,9 @@ find_separate_debug_file_in_section (struct objfile *objfile)
       warning (_("Cannot parse .gnu_debugdata section; not a BFD object"));
       return NULL;
     }
+
+  gnu_debug_key.emplace (objfile->obfd, abfd);
+
 #else
   warning (_("Cannot parse .gnu_debugdata section; LZMA support was "
             "disabled at compile time"));