]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Remove 'read' call from dwz_file::read_string
authorTom Tromey <tom@tromey.com>
Sat, 22 Mar 2025 16:39:43 +0000 (10:39 -0600)
committerTom Tromey <tom@tromey.com>
Tue, 22 Apr 2025 21:34:01 +0000 (15:34 -0600)
dwz_file::read_string calls 'read' on the section, but this isn't
needed as the sections have all been pre-read.

This patch makes this change, and refactors dwz_file a bit to make
this more obvious -- by making it clear that only the "static
constructor" can create a dwz_file.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
Tested-By: Alexandra Petlanova Hajkova <ahajkova@redhat.com>
gdb/dwarf2/dwz.c
gdb/dwarf2/dwz.h
gdb/dwarf2/read.c

index e5e18a1189710c5ec1924035ea45b5d0caa22705..d5d5112ad4cee8c20d031bf5eeb136c97fbff837 100644 (file)
@@ -34,7 +34,9 @@
 const char *
 dwz_file::read_string (struct objfile *objfile, LONGEST str_offset)
 {
-  str.read (objfile);
+  /* This must be true because the sections are read in when the
+     dwz_file is created.  */
+  gdb_assert (str.readin);
 
   if (str.buffer == NULL)
     error (_("DW_FORM_GNU_strp_alt used without .debug_str "
@@ -177,7 +179,7 @@ dwz_search_other_debugdirs (std::string &filename, bfd_byte *buildid,
 /* See dwz.h.  */
 
 void
-dwarf2_read_dwz_file (dwarf2_per_objfile *per_objfile)
+dwz_file::read_dwz_file (dwarf2_per_objfile *per_objfile)
 {
   bfd_size_type buildid_len_arg;
   size_t buildid_len;
@@ -261,7 +263,7 @@ dwarf2_read_dwz_file (dwarf2_per_objfile *per_objfile)
     error (_("could not find '.gnu_debugaltlink' file for %s"),
           per_bfd->filename ());
 
-  auto result = std::make_unique<dwz_file> (std::move (dwz_bfd));
+  dwz_file_up result (new dwz_file (std::move (dwz_bfd)));
 
   for (asection *sec : gdb_bfd_sections (result->dwz_bfd))
     locate_dwz_sections (per_objfile->objfile, result->dwz_bfd.get (),
index 9f69123e7a8185e2087c399393a57fdb9459cdc8..06ce45045de42cf7aef39991a3d9b013dd8551ea 100644 (file)
@@ -31,10 +31,12 @@ struct dwarf2_per_objfile;
 
 struct dwz_file
 {
-  dwz_file (gdb_bfd_ref_ptr &&bfd)
-    : dwz_bfd (std::move (bfd))
-  {
-  }
+  /* Open the separate '.dwz' debug file, if needed.  This will set
+     the appropriate field in the per-BFD structure.  If the DWZ file
+     exists, the relevant sections are read in as well.  Throws an
+     error if the .gnu_debugaltlink section exists but the file cannot
+     be found.  */
+  static void read_dwz_file (dwarf2_per_objfile *per_objfile);
 
   const char *filename () const
   {
@@ -64,16 +66,15 @@ struct dwz_file
      return a pointer to the string.  */
 
   const char *read_string (struct objfile *objfile, LONGEST str_offset);
-};
 
-using dwz_file_up = std::unique_ptr<dwz_file>;
+private:
 
-/* Open the separate '.dwz' debug file, if needed.  This just sets the
-   appropriate field in the per-BFD structure.  If the DWZ file
-   exists, the relevant sections are read in as well.  Throws an error
-   if the .gnu_debugaltlink section exists but the file cannot be
-   found.  */
+  explicit dwz_file (gdb_bfd_ref_ptr &&bfd)
+    : dwz_bfd (std::move (bfd))
+  {
+  }
+};
 
-extern void dwarf2_read_dwz_file (dwarf2_per_objfile *per_objfile);
+using dwz_file_up = std::unique_ptr<dwz_file>;
 
 #endif /* GDB_DWARF2_DWZ_H */
index 55cf02f0931a39d89dfe359a0f745eaf37fe8e67..01b3a9024d8344ed16f8b58224a5e98967af6a9e 100644 (file)
@@ -1282,7 +1282,7 @@ dwarf2_has_info (struct objfile *objfile,
         BFD, to avoid races.  */
       try
        {
-         dwarf2_read_dwz_file (per_objfile);
+         dwz_file::read_dwz_file (per_objfile);
        }
       catch (const gdb_exception_error &err)
        {