diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/minsyms.c | 21 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/bp_c_mixed_case.exp | 4 |
4 files changed, 32 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1ea48d0..4c90a5b 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 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 bb6e3cd..2d362d0 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.*" |