[gdb/testsuite] Fix index-cache.exp with cc-with-{gdb-index,debug-names}
authorTom de Vries <tdevries@suse.de>
Mon, 6 May 2019 06:42:24 +0000 (08:42 +0200)
committerTom de Vries <tdevries@suse.de>
Mon, 6 May 2019 06:42:24 +0000 (08:42 +0200)
In gdb.base/index-cache.exp, handle the case that binfile contains either a
.gdb_index or .debug_names index section.

Tested on x86_64-linux with native, cc-with-gdb-index and cc-with-debug-names.

gdb/testsuite/ChangeLog:

2019-05-06  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (exec_has_index_section): New proc.
* gdb.base/index-cache.exp: Handle case that binfile contains an index
section.

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

index 729cc520d7d439eb1fb87e36031a9702ff8bad7e..c32d013b6a2293042092866e2af403c767159ef2 100644 (file)
@@ -1,3 +1,9 @@
+2019-05-06  Tom de Vries  <tdevries@suse.de>
+
+       * lib/gdb.exp (exec_has_index_section): New proc.
+       * gdb.base/index-cache.exp: Handle case that binfile contains an index
+       section.
+
 2019-05-04  Tom de Vries  <tdevries@suse.de>
 
        * boards/cc-with-debug-names.exp: New file.
index 4e583abf013fbad552757205951e816abeadf3ed..5baba843607bc648518d296239bec620f916b4b0 100644 (file)
@@ -22,6 +22,8 @@ if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
     return
 }
 
+set has_index_section [exec_has_index_section $binfile]
+
 # List the files in DIR on the host (where GDB-under-test runs).
 # Return a list of two elements:
 #   - 0 on success, -1 on failure
@@ -122,10 +124,12 @@ proc_with_prefix test_cache_disabled { cache_dir } {
     }
 }
 
-# Test with the cache enabled, we expect to have exactly one file created.
+# 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
 
 proc_with_prefix test_cache_enabled_miss { cache_dir } {
-    global testfile
+    global testfile has_index_section
 
     lassign [ls_host $cache_dir] ret files_before
 
@@ -133,7 +137,11 @@ 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]]
-       gdb_assert "$nfiles_created > 0" "at least one file was created"
+       if { $has_index_section } {
+           gdb_assert "$nfiles_created == 0" "no file was created"
+       } else {
+           gdb_assert "$nfiles_created > 0" "at least one file was created"
+       }
 
        set build_id [get_build_id  [standard_output_file ${testfile}]]
        if { $build_id == "" } {
@@ -143,19 +151,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]
-       gdb_assert "$found_idx >= 0" "expected file is there"
+       if { $has_index_section } {
+           gdb_assert "$found_idx == -1" "no index cache file generated"
+       } else {
+           gdb_assert "$found_idx >= 0" "expected file is there"
+       }
 
        remote_exec host rm "-f $cache_dir/$expected_created_file"
 
-       check_cache_stats 0 1
+       if { $has_index_section } {
+           check_cache_stats 0 0
+       } else {
+           check_cache_stats 0 1
+       }
     }
 }
 
 
-# Test with the cache enabled, this time we should have one file (the
-# same), but one cache read hit.
+# 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
 
 proc_with_prefix test_cache_enabled_hit { cache_dir } {
+    global has_index_section
+
     # Just to populate the cache.
     run_test_with_flags $cache_dir on {}
 
@@ -166,7 +185,11 @@ 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"
 
-       check_cache_stats 1 0
+       if { $has_index_section } {
+           check_cache_stats 0 0
+       } else {
+           check_cache_stats 1 0
+       }
     }
 }
 
index 57866daa11ffdd7a144dae58724b2d5b2ccb143d..8dea857d5ed390711cdb944ae81e5aee74b8a82a 100644 (file)
@@ -5107,6 +5107,18 @@ proc rerun_to_main {} {
   }
 }
 
+# Return true if EXECUTABLE contains a .gdb_index or .debug_names index section.
+
+proc exec_has_index_section { executable } {
+    set readelf_program [gdb_find_readelf]
+    set res [catch {exec $readelf_program -S $executable \
+                       | grep -E "\.gdb_index|\.debug_names" }]
+    if { $res == 0 } {
+       return 1
+    }
+    return 0
+}
+
 # Return true if a test should be skipped due to lack of floating
 # point support or GDB can't fetch the contents from floating point
 # registers.