From: Simon Marchi <simon.marchi@efficios.com>
To: gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@polymtl.ca>, Tom Tromey <tom@tromey.com>
Subject: [PATCH v3 6/7] gdb/dwarf: add more context to complaints in mapped_debug_names_reader::scan_one_entry
Date: Mon, 11 May 2026 11:40:32 -0400 [thread overview]
Message-ID: <20260511154053.142576-7-simon.marchi@efficios.com> (raw)
In-Reply-To: <20260511154053.142576-1-simon.marchi@efficios.com>
From: Simon Marchi <simon.marchi@polymtl.ca>
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 <tom@tromey.com>
---
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 6ac65d101b16..487e2ea87edb 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;
}
--
2.54.0
next prev parent reply other threads:[~2026-05-11 15:41 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 15:40 [PATCH v3 0/7] Handle foreign type units in .debug_names Simon Marchi
2026-05-11 15:40 ` [PATCH v3 1/7] gdb/dwarf: move dwo_unit and dwo_file to dwo.h Simon Marchi
2026-05-13 15:18 ` Tom Tromey
2026-05-13 17:30 ` Simon Marchi
2026-05-11 15:40 ` [PATCH v3 2/7] gdb/dwarf: move dwarf2_cu::section to cu.c Simon Marchi
2026-05-11 15:40 ` [PATCH v3 3/7] gdb/dwarf: add dwo_file::find_tus Simon Marchi
2026-05-11 15:40 ` [PATCH v3 4/7] gdb/dwarf: generate foreign type units in .debug_names Simon Marchi
2026-05-11 15:40 ` [PATCH v3 5/7] gdb/dwarf: add debug output in read-debug-names.c Simon Marchi
2026-05-11 15:40 ` Simon Marchi [this message]
2026-05-11 15:40 ` [PATCH v3 7/7] gdb/dwarf: read foreign type units Simon Marchi
2026-05-19 19:42 ` Guinevere Larsen
2026-05-19 20:10 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260511154053.142576-7-simon.marchi@efficios.com \
--to=simon.marchi@efficios.com \
--cc=gdb-patches@sourceware.org \
--cc=simon.marchi@polymtl.ca \
--cc=tom@tromey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox