]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/testsuite] Add boards/cc-with-index-cache.exp
authorTom de Vries <tdevries@suse.de>
Mon, 27 Nov 2023 20:15:26 +0000 (21:15 +0100)
committerTom de Vries <tdevries@suse.de>
Mon, 27 Nov 2023 20:15:26 +0000 (21:15 +0100)
We have a target board cc-with-gdb-index that uses the gdb-add-index script to
add a .gdb_index index to an exec.

There is however an alternative way of adding a .gdb_index: the index-cache.

Add a new target board cc-with-index-cache.

This is not superfluous for two reasons:
- there is functionality that gdb-add-index doesn't support, but the
  index-cache does: the index-cache can add an index to an exec with a
  .gnu_debugaltlink (note that when using the cc-with-gdb-index board this
  case is quietly ignored), and
- using the index-cache is excercised in only a few test-cases, and having
  this target board extends the test coverage to the entire test suite.  This
  is for instance relevant because the index-cache is written by a worker
  thread in the background, so we can check more thoroughly for data races
  (see PR symtab/30837).

Tested on x86_64-linux.

Shell script changes checked with shellcheck.

Approved-By: Tom Tromey <tom@tromey.com>
gdb/contrib/cc-with-tweaks.sh
gdb/testsuite/boards/cc-with-index-cache.exp [new file with mode: 0644]
gdb/testsuite/make-check-all.sh

index 62d3bcf97079df6e1c6cb3ef501c0f545eee1cfc..abf22ca85198bf7b494a54d2632e813eab241059 100755 (executable)
@@ -43,6 +43,7 @@
 # -z compress using dwz
 # -m compress using dwz -m
 # -i make an index (.gdb_index)
+# -c make an index (currently .gdb_index) in a cache dir
 # -n make a dwarf5 index (.debug_names)
 # -p create .dwp files (Fission), you need to also use gcc option -gsplit-dwarf
 # -l creates separate debuginfo files linked to using .gnu_debuglink
@@ -85,6 +86,7 @@ output_file=a.out
 
 want_index=false
 index_options=""
+want_index_cache=false
 want_dwz=false
 want_multi=false
 want_dwp=false
@@ -97,6 +99,7 @@ while [ $# -gt 0 ]; do
        -z) want_dwz=true ;;
        -i) want_index=true ;;
        -n) want_index=true; index_options=-dwarf-5;;
+       -c) want_index_cache=true ;;
        -m) want_multi=true ;;
        -p) want_dwp=true ;;
        -l) want_gnu_debuglink=true ;;
@@ -209,6 +212,15 @@ if [ "$want_index" = true ]; then
     [ $rc != 0 ] && exit $rc
 fi
 
+if [ "$want_index_cache" = true ]; then
+    $GDB -q -batch \
+       -ex "set index-cache directory $INDEX_CACHE_DIR" \
+       -ex "set index-cache enabled on" \
+       -ex "file $output_file"
+    rc=$?
+    [ $rc != 0 ] && exit $rc
+fi
+
 if [ "$want_dwz" = true ] || [ "$want_multi" = true ]; then
     # Require dwz version with PR dwz/24468 fixed.
     dwz_version_major_required=0
diff --git a/gdb/testsuite/boards/cc-with-index-cache.exp b/gdb/testsuite/boards/cc-with-index-cache.exp
new file mode 100644 (file)
index 0000000..079c036
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This file is a dejagnu "board file" and is used to run the testsuite
+# with contrib/cc-with-tweaks.sh -c.
+#
+# Example usage:
+# bash$ cd $objdir
+# bash$ make check-gdb \
+#   RUNTESTFLAGS='--target_board=cc-with-index-cache'
+#
+
+# Choose location of index-cache directory.
+setenv INDEX_CACHE_DIR [pwd]/cc-with-index-cache
+
+# Start with empty index-cache directory.
+file delete -force $env(INDEX_CACHE_DIR)
+file mkdir $env(INDEX_CACHE_DIR)
+
+# Make sure index-cache entries are generated for each executable.
+set CC_WITH_TWEAKS_FLAGS "-c"
+load_board_description "cc-with-tweaks"
+
+# Make sure gdb knowns how to find the index-cache.
+append GDBFLAGS " -iex \"set index-cache directory $env(INDEX_CACHE_DIR)\""
+
+# Make sure gdb uses the index-cache.
+append GDBFLAGS " -iex \"set index-cache enabled on\""
index 7d8adb58e878ac65a3c3e8c758e3bf89dde5a1ed..947e6e32eaa501d5dff029f04993bf1ada206e51 100755 (executable)
@@ -66,6 +66,7 @@ host_target_boards=(
 # Boards that run everything on local target and local host.
 target_boards=(
     cc-with-gdb-index
+    cc-with-index-cache
     cc-with-debug-names
     cc-with-dwz
     cc-with-dwz-m