Bug 24669

Summary: index-cache.exp FAILs with -readnow
Product: gdb Reporter: Tom de Vries <vries>
Component: gdbAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal CC: simark
Priority: P2    
Version: HEAD   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Tom de Vries 2019-06-11 12:36:24 UTC
With board readnow, I see these failures:
...
FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: at least one file was created
FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: expected file is there
FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: check index-cache stats
FAIL: gdb.base/index-cache.exp: test_cache_enabled_hit: check index-cache stats
...
Comment 1 Tom de Vries 2019-06-11 12:42:05 UTC
Simon, is this a test-case issue, or does gdb need to be fixed?

Just by reading the documentation, I didn't manage to understand what the expected behaviour is.

Readnow:
...
-readnow
    Read each symbol file's entire symbol table immediately, rather than the default, which is to read it incrementally as it is needed. This makes startup slower, but makes future operations faster. 
...

index-cache:
...
When GDB finds a symbol file, it scans the symbols in the file in order to construct an internal symbol table. This lets most GDB operations work quickly—at the cost of a delay early on. For large programs, this delay can be quite lengthy, so GDB provides a way to build an index, which speeds up startup. 
...
Comment 2 Simon Marchi 2019-06-15 01:27:58 UTC
I think it's by design, when using -readnow, we read the full symbols right away, we don't read any index, or build any partial symbols.  So I would say, the test needs to be adjusted to account for that.

See the comment here: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/dwarf2read.c;h=4cf9fcfa2189c5ecbe373a02fc2c37bedc4e400f;hb=HEAD#l6262
Comment 3 Sourceware Commits 2019-06-16 14:00:25 UTC
The master branch has been updated by Simon Marchi <simark@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=399aaebd1a5e9e3971758396bd0c5c3ec5ae2386

commit 399aaebd1a5e9e3971758396bd0c5c3ec5ae2386
Author: Simon Marchi <simon.marchi@polymtl.ca>
Date:   Sun Jun 16 09:07:16 2019 -0400

    Make gdb.base/index-cache.exp work with readnow board (PR 24669)
    
    The gdb.base/index-cache.exp test fails with the readnow board:
    
      $ make check TESTS="gdb.base/index-cache.exp" RUNTESTFLAGS="--target_board=readnow"
      FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: at least one file was created
      FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: expected file is there
      FAIL: gdb.base/index-cache.exp: test_cache_enabled_miss: check index-cache stats
      FAIL: gdb.base/index-cache.exp: test_cache_enabled_hit: check index-cache stats
    
    The problem is similar to what was fixed in
    
      5a56d6a65f84 ("[gdb/testsuite] Fix index-cache.exp with cc-with-{gdb-index,debug-names}")
    
    In that commit, gdb.base/index-cache.exp was modified to account for the
    fact that the index cache is not used when the binary already has an
    embedded index.
    
    The same situation happens when GDB is started with the -readnow flag:
    it bypasses indices and partial symbols.  So this patch updates the test
    to also expect the index cache not to be used if -readnow is present in
    $GDBFLAGS,
    
    gdb/testsuite/ChangeLog:
    
    	PR gdb/24669
    	* gdb.base/index-cache.exp (uses_readnow,
    	expecting_index_cache_use): Define global variable.
    	(test_cache_enabled_miss, test_cache_enabled_hit): Use
    	expecting_index_cache_use.
Comment 4 Simon Marchi 2019-06-16 14:06:24 UTC
Fixed by commit mentioned above.