Make gdb.base/index-cache.exp work with readnow board (PR 24669)
authorSimon Marchi <simon.marchi@polymtl.ca>
Sun, 16 Jun 2019 13:07:16 +0000 (09:07 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Sun, 16 Jun 2019 13:07:17 +0000 (09:07 -0400)
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.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/index-cache.exp

index 2efadd139b93950944c8ca74a39328cf242905dd..03303017c73947b248ba65f677e6e210ec3ab59b 100644 (file)
@@ -1,3 +1,11 @@
+2019-06-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       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.
+
 2019-06-16  Bernhard Heckel  <bernhard.heckel@intel.com>
            Andrew Burgess  <andrew.burgess@embecosm.com>
 
index b76a02b73659c58df3e79857fd47b4e72c8c7857..075dffe3f5eaf99f50875fc22abfcb4a66f6ef5c 100644 (file)
@@ -22,7 +22,14 @@ if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
     return
 }
 
+# The index cache won't be used in certain circumstances, for which we must
+# account in this test:
+#
+#  - the binary already has an index section
+#  - we use the -readnow switch
 set has_index_section [exec_has_index_section $binfile]
+set uses_readnow [expr [string first "-readnow" $GDBFLAGS] != -1]
+set expecting_index_cache_use [expr !$has_index_section && !$uses_readnow]
 
 # List the files in DIR on the host (where GDB-under-test runs).
 # Return a list of two elements:
@@ -124,12 +131,13 @@ proc_with_prefix test_cache_disabled { cache_dir } {
     }
 }
 
-# Test with the cache enabled, we expect to have:
-# - exactly one file created, in case of no index section
-# - no file created, in case of an index section
+# Test a cache miss.  We expect to have at least one file in the cache if the
+# index cache is going to be used (see expecting_index_cache_use) and a cache
+# miss in the stats.  If the cache is not going to be used, we expect to have
+# no files and no cache hits nor misses.
 
 proc_with_prefix test_cache_enabled_miss { cache_dir } {
-    global testfile has_index_section
+    global testfile expecting_index_cache_use
 
     lassign [ls_host $cache_dir] ret files_before
 
@@ -137,10 +145,10 @@ proc_with_prefix test_cache_enabled_miss { cache_dir } {
 
        lassign [ls_host $cache_dir] ret files_after
        set nfiles_created [expr [llength $files_after] - [llength $files_before]]
-       if { $has_index_section } {
-           gdb_assert "$nfiles_created == 0" "no file was created"
-       } else {
+       if { $expecting_index_cache_use } {
            gdb_assert "$nfiles_created > 0" "at least one file was created"
+       } else {
+           gdb_assert "$nfiles_created == 0" "no file was created"
        }
 
        set build_id [get_build_id  [standard_output_file ${testfile}]]
@@ -151,29 +159,30 @@ proc_with_prefix test_cache_enabled_miss { cache_dir } {
 
        set expected_created_file [list "${build_id}.gdb-index"]
        set found_idx [lsearch -exact $files_after $expected_created_file]
-       if { $has_index_section } {
-           gdb_assert "$found_idx == -1" "no index cache file generated"
-       } else {
+       if { $expecting_index_cache_use } {
            gdb_assert "$found_idx >= 0" "expected file is there"
+       } else {
+           gdb_assert "$found_idx == -1" "no index cache file generated"
        }
 
        remote_exec host rm "-f $cache_dir/$expected_created_file"
 
-       if { $has_index_section } {
-           check_cache_stats 0 0
-       } else {
+       if { $expecting_index_cache_use } {
            check_cache_stats 0 1
+       } else {
+           check_cache_stats 0 0
        }
     }
 }
 
 
-# Test with the cache enabled, this time we should have:
-# - one file (the same), but one cache read hit, in case of no index section
-# - no file, no cache hit, in case an an index section
+# Test a cache hit.  We should have at least one file in the cache if the index
+# cache is going to be used (see expecting_index_cache_use) and a cache hit in
+# the stats.  If the cache is not going to be used, we expect to have no files
+# and no cache hits nor misses.
 
 proc_with_prefix test_cache_enabled_hit { cache_dir } {
-    global has_index_section
+    global expecting_index_cache_use
 
     # Just to populate the cache.
     run_test_with_flags $cache_dir on {}
@@ -185,10 +194,10 @@ proc_with_prefix test_cache_enabled_hit { cache_dir } {
        set nfiles_created [expr [llength $files_after] - [llength $files_before]]
        gdb_assert "$nfiles_created == 0" "no files were created"
 
-       if { $has_index_section } {
-           check_cache_stats 0 0
-       } else {
+       if { $expecting_index_cache_use } {
            check_cache_stats 1 0
+       } else {
+           check_cache_stats 0 0
        }
     }
 }