From: Tom Tromey <tromey@adacore.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tromey@adacore.com>
Subject: [PATCH] Fix Ada crash with .debug_names
Date: Tue, 21 Apr 2020 09:23:35 -0600 [thread overview]
Message-ID: <20200421152335.21282-1-tromey@adacore.com> (raw)
PR ada/25837 points out a crash in the gdb testsuite when .debug_names
is used. You can reproduce like:
runtest --target_board=cc-with-debug-names \
gdb.ada/big_packed_array.exp
The bug was introduced by commit e0802d599 ("Avoid copying in
lookup_name_info"). The problem is that the return type of
language_lookup_name changed, but in a way that didn't cause existing
callers to trigger a compilation error. So, the matcher cache in
dw2_expand_symtabs_matching_symbol, which stored a "const string &",
would end up with invalid data.
This patch fixes the problem by updating the callers to use the new
type.
Tested on x86-64 Fedora 30.
gdb/ChangeLog
2020-04-21 Tom Tromey <tromey@adacore.com>
PR ada/25837:
* dwarf2/read.c (dw2_expand_symtabs_matching_symbol): Store a
"const char *", not a "const std::string &".
<name_and_matcher::operator==>: Update.
* unittests/lookup_name_info-selftests.c: Change type of
"result".
---
gdb/ChangeLog | 9 +++++++++
gdb/dwarf2/read.c | 4 ++--
gdb/unittests/lookup_name_info-selftests.c | 6 +++---
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 41db511c851..2e21e801380 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -3911,11 +3911,11 @@ dw2_expand_symtabs_matching_symbol
struct name_and_matcher
{
symbol_name_matcher_ftype *matcher;
- const std::string &name;
+ const char *name;
bool operator== (const name_and_matcher &other) const
{
- return matcher == other.matcher && name == other.name;
+ return matcher == other.matcher && strcmp (name, other.name) == 0;
}
};
diff --git a/gdb/unittests/lookup_name_info-selftests.c b/gdb/unittests/lookup_name_info-selftests.c
index 002fc697955..6a617521cb4 100644
--- a/gdb/unittests/lookup_name_info-selftests.c
+++ b/gdb/unittests/lookup_name_info-selftests.c
@@ -37,14 +37,14 @@ check_make_paramless (const char *file, int line,
{
lookup_name_info lookup_name (name, symbol_name_match_type::FULL,
completion_mode, true /* ignore_parameters */);
- const std::string &result = lookup_name.language_lookup_name (lang);
+ const char *result = lookup_name.language_lookup_name (lang);
- if (result != expected)
+ if (strcmp (result, expected) != 0)
{
error (_("%s:%d: make-paramless self-test failed: (completion=%d, lang=%d) "
"\"%s\" -> \"%s\", expected \"%s\""),
file, line, completion_mode, lang, name,
- result.c_str (), expected);
+ result, expected);
}
}
--
2.21.1
next reply other threads:[~2020-04-21 15:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-21 15:23 Tom Tromey [this message]
2020-04-23 12:43 ` Tom de Vries
2020-04-23 13:16 ` Tom Tromey
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=20200421152335.21282-1-tromey@adacore.com \
--to=tromey@adacore.com \
--cc=gdb-patches@sourceware.org \
/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