aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2018-01-10 20:38:06 +0000
committerPedro Alves <palves@redhat.com>2018-01-10 20:38:06 +0000
commit8825213e97f0476068dc3b52b1b61df96b40708a (patch)
tree177efe10098282d88b703844c7e5370d6822abc1
parent7ec0cd50bf2c93854ef02b9c1f3b4edc4b70cd46 (diff)
downloadgdb-8825213e97f0476068dc3b52b1b61df96b40708a.zip
gdb-8825213e97f0476068dc3b52b1b61df96b40708a.tar.gz
gdb-8825213e97f0476068dc3b52b1b61df96b40708a.tar.bz2
Fix gdb.ada/bp_c_mixed_case.exp (PR gdb/22670)
The problem here is that we are using the user-provided lookup name literally for name comparisons. I.e., "<MixedCase>" with the "<>"s included. This commit fixes the minsym lookup case. psymbol/symbol lookup will be fixed in a follow up. In the minsym case, we're using using the user-provided lookup name literally for linkage name comparisons. That obviously can't work since the "<>" are not really part of the linkage name. The original idea was that we'd use the symbol's language to select the right symbol name matching algorithm, but that doesn't work for Ada because it's not really possible to unambiguously tell from the linkage name alone whether we're dealing with Ada symbols, so Ada minsyms end up with no language set, or sometimes C++ set. So fix this by treating Ada mode specially when determining the linkage name to match against. gdb/ChangeLog: 2018-01-10 Pedro Alves <palves@redhat.com> PR gdb/22670 * minsyms.c (linkage_name_str): New function. (iterate_over_minimal_symbols): Use it. gdb/testsuite/ChangeLog: 2018-01-10 Pedro Alves <palves@redhat.com> PR gdb/22670 * gdb.ada/bp_c_mixed_case.exp: Remove setup_kfail calls.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/minsyms.c21
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.ada/bp_c_mixed_case.exp4
4 files changed, 32 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index adb72ef..f845705 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-10 Pedro Alves <palves@redhat.com>
+
+ PR gdb/22670
+ * minsyms.c (linkage_name_str): New function.
+ (iterate_over_minimal_symbols): Use it.
+
2018-01-09 John Baldwin <jhb@FreeBSD.org>
* NEWS: Document that 'info proc' now works on FreeBSD.
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 26c91ec..fded0d6 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -447,6 +447,25 @@ find_minimal_symbol_address (const char *name, CORE_ADDR *addr,
return sym.minsym == NULL;
}
+/* Get the lookup name form best suitable for linkage name
+ matching. */
+
+static const char *
+linkage_name_str (const lookup_name_info &lookup_name)
+{
+ /* Unlike most languages (including C++), Ada uses the
+ encoded/linkage name as the search name recorded in symbols. So
+ if debugging in Ada mode, prefer the Ada-encoded name. This also
+ makes Ada's verbatim match syntax ("<...>") work, because
+ "lookup_name.name()" includes the "<>"s, while
+ "lookup_name.ada().lookup_name()" is the encoded name with "<>"s
+ stripped. */
+ if (current_language->la_language == language_ada)
+ return lookup_name.ada ().lookup_name ().c_str ();
+
+ return lookup_name.name ().c_str ();
+}
+
/* See minsyms.h. */
void
@@ -459,7 +478,7 @@ iterate_over_minimal_symbols (struct objfile *objf,
/* The first pass is over the ordinary hash table. */
{
- const char *name = lookup_name.name ().c_str ();
+ const char *name = linkage_name_str (lookup_name);
unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE;
auto *mangled_cmp
= (case_sensitivity == case_sensitive_on
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 71424a9..ec763fc 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-10 Pedro Alves <palves@redhat.com>
+
+ PR gdb/22670
+ * gdb.ada/bp_c_mixed_case.exp: Remove setup_kfail calls.
+
2018-01-08 Simon Marchi <simon.marchi@ericsson.com>
* gdb.server/unittest.exp: Match the output in non-development
diff --git a/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp b/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp
index 54c61e3..7787646 100644
--- a/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp
+++ b/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp
@@ -40,13 +40,11 @@ gdb_test "show lang" \
# Try inserting a breakpoint inside a C function. Because the function's
# name has some uppercase letters, we need to use the "<...>" notation.
# The purpose of this testcase is to verify that we can in fact do so
-# and that it inserts the breakpoint at the expected location.
-setup_kfail gdb/22670 "*-*-*"
+# and that it inserts the breakpoint at the expected location. See gdb/22670.
gdb_test "break <MixedCaseFunc>" \
"Breakpoint $decimal at $hex: file .*bar.c, line $decimal\\."
# Resume the program's execution, verifying that it lands at the expected
# location.
-setup_kfail gdb/22670 "*-*-*"
gdb_test "continue" \
"Breakpoint $decimal, MixedCaseFunc \\(\\) at .*bar\\.c:$decimal.*"