Use symbol search name in expand_symtabs_matching_via_partial...

We are iterating over all symbols in a partial symtab that would
match a given name, so we should match the partial symbols
search name against the given name rather than using the natural
name.  In C++, that does not make a difference, but it does in
Ada, because Ada searches using the symbol encoded name...

We also update the generation of the .gdb_index file to match this
change in the search. Although technically an incompatible change,
we do not increment the gdb_index version number, because Ada is
the only language where it would make a difference - except that
this feature is not supported for Ada.

gdb/ChangeLog:

        * psymtab.c (expand_symtabs_matching_via_partial): Match
        the partial symbols using their SYMBOL_SEARCH_NAME.
        * symfile.h (struct quick_symbol_functions): Udate the
        documentation of expand_symtabs_matching.
        * dwarf2read.c (write_psymbols): Use SYMBOL_SEARCH_NAME instead
        of SYMBOL_NATURAL_NAME in index entry.
This commit is contained in:
Joel Brobecker 2011-12-21 07:34:09 +00:00
parent 53907c915d
commit bb2f58dc41
4 changed files with 14 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2011-12-21 Joel Brobecker <brobecker@adacore.com>
* psymtab.c (expand_symtabs_matching_via_partial): Match
the partial symbols using their SYMBOL_SEARCH_NAME.
* symfile.h (struct quick_symbol_functions): Udate the
documentation of expand_symtabs_matching.
* dwarf2read.c (write_psymbols): Use SYMBOL_SEARCH_NAME instead
of SYMBOL_NATURAL_NAME in index entry.
2011-12-21 Joel Brobecker <brobecker@adacore.com> 2011-12-21 Joel Brobecker <brobecker@adacore.com>
* linespec.c (locate_first_half): Add handling of Ada operators * linespec.c (locate_first_half): Add handling of Ada operators

View File

@ -16890,7 +16890,7 @@ write_psymbols (struct mapped_symtab *symtab,
if (!*slot) if (!*slot)
{ {
*slot = lookup; *slot = lookup;
add_index_entry (symtab, SYMBOL_NATURAL_NAME (*psymp), cu_index); add_index_entry (symtab, SYMBOL_SEARCH_NAME (*psymp), cu_index);
} }
} }
} }

View File

@ -1305,7 +1305,7 @@ expand_symtabs_matching_via_partial
|| (kind == TYPES_DOMAIN || (kind == TYPES_DOMAIN
&& SYMBOL_CLASS (*psym) == LOC_TYPEDEF)) && SYMBOL_CLASS (*psym) == LOC_TYPEDEF))
&& (*name_matcher) (current_language, && (*name_matcher) (current_language,
SYMBOL_NATURAL_NAME (*psym), data)) SYMBOL_SEARCH_NAME (*psym), data))
{ {
PSYMTAB_TO_SYMTAB (ps); PSYMTAB_TO_SYMTAB (ps);
keep_going = 0; keep_going = 0;

View File

@ -263,10 +263,9 @@ struct quick_symbol_functions
If even KIND matches, then NAME_MATCHER is called for each symbol If even KIND matches, then NAME_MATCHER is called for each symbol
defined in the file. The current language, the symbol name and defined in the file. The current language, the symbol name and
DATA are passed to NAME_MATCHER. The symbol "natural" name should DATA are passed to NAME_MATCHER. The symbol "search" name should
be passed to NAME_MATCHER for all languages except Ada, where be passed to NAME_MATCHER (see la_symbol_name_compare in struct
the encoded name is passed instead (see la_symbol_name_compare in language_defn for more details on this).
struct language_defn for more details on this).
If NAME_MATCHER returns zero, then this symbol is skipped. If NAME_MATCHER returns zero, then this symbol is skipped.