--- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -503,15 +503,22 @@ lookup_symbol_aux_psymtabs (struct objfi struct partial_symtab *ps; const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0); struct symtab *stab_best = NULL; + int got_minimal_symbol = 0; +lookup: ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps) { - if (!ps->readin && lookup_partial_symbol (objfile, ps, name, - psymtab_index, domain)) + if (!ps->readin + && (got_minimal_symbol == 1 + || lookup_partial_symbol (objfile, ps, name, psymtab_index, + domain))) { struct symbol *sym = NULL; struct symtab *stab = psymtab_to_symtab (objfile, ps); + if (stab == NULL) + continue; + /* Some caution must be observed with overloaded functions and methods, since the psymtab will not contain any overload information (but NAME might contain it). */ @@ -535,6 +542,13 @@ lookup_symbol_aux_psymtabs (struct objfi } } + if (stab_best == NULL && got_minimal_symbol == 0 + && lookup_minimal_symbol (name, NULL, objfile) != NULL) + { + got_minimal_symbol = 1; + goto lookup; + } + return stab_best; }