From: Tom de Vries Date: Mon, 27 Nov 2023 20:15:26 +0000 (+0100) Subject: [gdb/testsuite] Add boards/cc-with-index-cache.exp X-Git-Tag: binutils-2_42~815 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f1b8ee6f2b4381bc46a0ad4c233b6eddc1e135b5;p=thirdparty%2Fbinutils-gdb.git [gdb/testsuite] Add boards/cc-with-index-cache.exp 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 --- diff --git a/gdb/contrib/cc-with-tweaks.sh b/gdb/contrib/cc-with-tweaks.sh index 62d3bcf9707..abf22ca8519 100755 --- a/gdb/contrib/cc-with-tweaks.sh +++ b/gdb/contrib/cc-with-tweaks.sh @@ -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 index 00000000000..079c0365de2 --- /dev/null +++ b/gdb/testsuite/boards/cc-with-index-cache.exp @@ -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 . + +# 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\"" diff --git a/gdb/testsuite/make-check-all.sh b/gdb/testsuite/make-check-all.sh index 7d8adb58e87..947e6e32eaa 100755 --- a/gdb/testsuite/make-check-all.sh +++ b/gdb/testsuite/make-check-all.sh @@ -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