Bug 25833 - [cc-with-gdb-index] FAIL: gdb.base/with.exp: basics: with language ada -- print g_s
Summary: [cc-with-gdb-index] FAIL: gdb.base/with.exp: basics: with language ada -- pri...
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: symtab (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-04-16 07:23 UTC by Tom de Vries
Modified: 2020-05-20 09:49 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
Tentative patch (1.05 KB, patch)
2020-05-13 06:20 UTC, Tom de Vries
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2020-04-16 07:23:18 UTC
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.
Comment 1 Tom de Vries 2020-05-13 06:20:53 UTC
Created attachment 12528 [details]
Tentative patch
Comment 2 Tom de Vries 2020-05-13 09:42:27 UTC
Posted patch: https://sourceware.org/pipermail/gdb-patches/2020-May/168433.html
Comment 3 Sourceware Commits 2020-05-20 09:48:43 UTC
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.
Comment 4 Tom de Vries 2020-05-20 09:49:46 UTC
Patch with test-case committed, marking resolved-fixed.
Comment 5 Tom de Vries 2020-05-20 09:49:59 UTC
.