From 399aaebd1a5e9e3971758396bd0c5c3ec5ae2386 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sun, 16 Jun 2019 09:07:16 -0400 Subject: [PATCH] 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. --- gdb/testsuite/ChangeLog | 8 +++++ gdb/testsuite/gdb.base/index-cache.exp | 49 +++++++++++++++----------- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 2efadd139b9..03303017c73 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-06-16 Simon Marchi + + 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 Andrew Burgess diff --git a/gdb/testsuite/gdb.base/index-cache.exp b/gdb/testsuite/gdb.base/index-cache.exp index b76a02b7365..075dffe3f5e 100644 --- a/gdb/testsuite/gdb.base/index-cache.exp +++ b/gdb/testsuite/gdb.base/index-cache.exp @@ -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 } } } -- 2.39.2