summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 1ea48d0d9a..4c90a5b9dd 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-08 Samuel Thibault <samuel.thibault@ens-lyon.org>
* gdb/gnu-nat.c: Include <elf.h> and <link.h>.
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 26c91ec881..fded0d65e9 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 bb6e3cd7b6..2d362d09ba 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 54c61e3a8e..7787646c67 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.*"