When running test-case with.exp with target board cc-with-gdb-index, we have: ... (gdb) PASS: gdb.base/with.exp: basics: show language with language ada -- print g_s^M 'g_s' has unknown type; cast it to its declared type^M (gdb) FAIL: gdb.base/with.exp: basics: with language ada -- print g_s ... This scenario hits this case: ... static void dw2_map_matching_symbols (struct objfile *objfile, const lookup_name_info &name, domain_enum domain, int global, gdb::function_view<symbol_found_callback_ftype> callback, symbol_compare_ftype *ordered_compare) { /* Used for Ada. */ struct dwarf2_per_objfile *dwarf2_per_objfile = get_dwarf2_per_objfile (objfile); if (dwarf2_per_objfile->index_table != nullptr) { /* Ada currently doesn't support .gdb_index (see PR24713). We can get here though if the current language is Ada for a non-Ada objfile using GNU index. As Ada does not look for non-Ada symbols this function should just return. */ return; } ... The reasoning for do nothing here is from a language perspective. But the problem is that it makes gdb behaviour inconsistent between: - having a .gdb_index section, and - having a .gdb_names section, or a partial symtab, or -readnow. I think it's better to have consistent behaviour, and we should fix this.
Created attachment 12528 [details] Tentative patch
Posted patch: https://sourceware.org/pipermail/gdb-patches/2020-May/168433.html
The master branch has been updated by Tom de Vries <vries@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9a0bacfb08eb87938919023915ecc0ca2ba21223 commit 9a0bacfb08eb87938919023915ecc0ca2ba21223 Author: Tom de Vries <tdevries@suse.de> Date: Wed May 20 11:48:39 2020 +0200 [gdb/symtab] Handle .gdb_index in ada language mode When running test-case gdb.base/with.exp with target board cc-with-gdb-index, we have: ... (gdb) PASS: gdb.base/with.exp: basics: show language with language ada -- print g_s^M 'g_s' has unknown type; cast it to its declared type^M (gdb) FAIL: gdb.base/with.exp: basics: with language ada -- print g_s ... This is due to this bit in dw2_map_matching_symbols: ... if (dwarf2_per_objfile->index_table != nullptr) { /* Ada currently doesn't support .gdb_index (see PR24713). We can get here though if the current language is Ada for a non-Ada objfile using GNU index. As Ada does not look for non-Ada symbols this function should just return. */ return; } ... While the reasoning in the comment may be sound from language perspective, it does introduce an inconsistency in gdb behaviour between: - having a .gdb_index section, and - having a .gdb_names section, or a partial symtab, or -readnow. Fix the inconsistency by completing implementation of dw2_map_matching_symbols. Tested on x86_64-linux, both with native and target board cc-with-debug-index. gdb/ChangeLog: 2020-05-20 Tom de Vries <tdevries@suse.de> PR symtab/25833 * dwarf2/read.c (dw2_map_matching_symbols): Handle .gdb_index. gdb/testsuite/ChangeLog: 2020-05-20 Tom de Vries <tdevries@suse.de> PR symtab/25833 * gdb.base/with-mf-inc.c: New test. * gdb.base/with-mf-main.c: New test. * gdb.base/with-mf.exp: New file.
Patch with test-case committed, marking resolved-fixed.
.