[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; }