[binutils-gdb] gdb/dwarf: add more context to complaints in mapped_debug_names_reader::scan_one_entry

Simon Marchi via Gdb-cvs <[email protected]>
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=05b90df15cf3eafed0453db12fd114e9fd81c9b7

commit 05b90df15cf3eafed0453db12fd114e9fd81c9b7
Author: Simon Marchi <[email protected]>
Date:   Mon May 11 11:40:32 2026 -0400

    gdb/dwarf: add more context to complaints in mapped_debug_names_reader::scan_one_entry
    
    I realize that complaints are not often enabled and shown, but if we
    emit them, I think they should include enough context to help a user who
    wishes to dig in the problem to pinpoint where the problem happened
    exactly.  For this reason, change the complaints in
    mapped_debug_names_reader::scan_one_entry to include precisions
    regarding which index entry is problematic exactly.
    
    I am not attached to the particular format.  I thought that because this
    is extra contextual information, I would put it in the square brackets
    at the end (which only shows the module name currently).  However, it
    would be nice to converge towards a format that we could replicate
    elsewhere in the DWARF reader, so feel free to chime in.
    
    I factored out the formatting to a separate function, because I will be
    adding more of these in a subsequent patch, and it's easier to have the
    formatting centralized.
    
    I have not touched the "Unsupported .debug_names form" warning.  If that
    comes up, we probably don't care about the specific index entry, we just
    need to implement support for that form.
    
    Change-Id: Id68a0ae406a3ca620408576b81f893f05c7e3df2
    Approved-By: Tom Tromey <[email protected]>

Diff:
---
 gdb/dwarf2/read-debug-names.c | 43 ++++++++++++++++++++++++++++++++-----------
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/gdb/dwarf2/read-debug-names.c b/gdb/dwarf2/read-debug-names.c
index 6ac65d101b1..487e2ea87ed 100644
--- a/gdb/dwarf2/read-debug-names.c
+++ b/gdb/dwarf2/read-debug-names.c
@@ -155,6 +155,25 @@ struct mapped_debug_names_reader
   std::vector<std::vector<cooked_index_entry *>> all_entries;
 };
 
+/* Emit a complaint about a specific index entry.  */
+
+static void ATTRIBUTE_PRINTF (4, 5)
+complain_about_index_entry (bfd *abfd, const char *name,
+			    ptrdiff_t offset_in_entry_pool, const char *fmt,
+			    ...)
+{
+  va_list ap;
+  va_start (ap, fmt);
+  std::string msg = string_vprintf (fmt, ap);
+  va_end (ap);
+
+  msg += string_printf (_(" [in module %s, index entry for name %s,"
+			   " entry pool offset 0x%tx]"),
+			bfd_get_filename (abfd), name, offset_in_entry_pool);
+
+  complaint ("%s", msg.c_str ());
+}
+
 /* Scan a single entry from the entries table.  Set *RESULT and PARENT
    (if needed) and return the updated pointer on success, or return
    nullptr on error, or at the end of the table.  */
@@ -180,9 +199,11 @@ mapped_debug_names_reader::scan_one_entry (const char *name,
   const auto indexval_it = abbrev_map.find (abbrev);
   if (indexval_it == abbrev_map.cend ())
     {
-      complaint (_("Wrong .debug_names undefined abbrev code %s "
-		   "[in module %s]"),
-		 pulongest (abbrev), bfd_get_filename (abfd));
+      complain_about_index_entry (abfd, name, offset_in_entry_pool,
+				  _("Wrong .debug_names abbrev code %s"),
+				  pulongest (abbrev));
+      /* We can't go past this entry because we don't know its size, stop
+	 reading this entry chain.  */
       return nullptr;
     }
 
@@ -264,10 +285,10 @@ mapped_debug_names_reader::scan_one_entry (const char *name,
 	    /* Don't crash on bad data.  */
 	    if (ull >= this->comp_units.size ())
 	      {
-		complaint (_(".debug_names entry has bad CU index %s"
-			     " [in module %s]"),
-			   pulongest (ull),
-			   bfd_get_filename (abfd));
+		complain_about_index_entry
+		  (abfd, name, offset_in_entry_pool,
+		   _(".debug_names entry has bad CU index %s"),
+		   pulongest (ull));
 		continue;
 	      }
 
@@ -279,10 +300,10 @@ mapped_debug_names_reader::scan_one_entry (const char *name,
 	    /* Don't crash on bad data.  */
 	    if (ull >= this->type_units.size ())
 	      {
-		complaint (_(".debug_names entry has bad TU index %s"
-			     " [in module %s]"),
-			   pulongest (ull),
-			   bfd_get_filename (abfd));
+		complain_about_index_entry
+		  (abfd, name, offset_in_entry_pool,
+		   _(".debug_names entry has bad TU index %s"),
+		   pulongest (ull));
 		continue;
 	      }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.