diff --git a/gdb/ChangeLog b/gdb/ChangeLog index adb72ef846..f845705498 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-01-10 Pedro Alves + + PR gdb/22670 + * minsyms.c (linkage_name_str): New function. + (iterate_over_minimal_symbols): Use it. + 2018-01-09 John Baldwin * NEWS: Document that 'info proc' now works on FreeBSD. 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 71424a96d3..ec763fce92 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-10 Pedro Alves + + PR gdb/22670 + * gdb.ada/bp_c_mixed_case.exp: Remove setup_kfail calls. + 2018-01-08 Simon Marchi * 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 " \ "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.*"