[gdb/testsuite] Add target board cc-with-gnu-debuglink.exp
authorTom de Vries <tdevries@suse.de>
Fri, 21 May 2021 16:11:12 +0000 (18:11 +0200)
committerTom de Vries <tdevries@suse.de>
Fri, 21 May 2021 16:11:12 +0000 (18:11 +0200)
Add target board cc-with-gnu-debuglink.exp that splits off debuginfo into a
seperate .debug file and links to it using .gnu_debuglink.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-05-21  Tom de Vries  <tdevries@suse.de>

PR testsuite/25047
* contrib/cc-with-tweaks.sh: Handle -l.

gdb/testsuite/ChangeLog:

2021-05-21  Tom de Vries  <tdevries@suse.de>

PR testsuite/25047
* boards/cc-with-gnu-debuglink.exp: New file.

gdb/ChangeLog
gdb/contrib/cc-with-tweaks.sh
gdb/testsuite/ChangeLog
gdb/testsuite/boards/cc-with-gnu-debuglink.exp [new file with mode: 0644]

index f579a1561ca177d01a963e77be80f7c4f98c0fa5..f15bd050a174e666cdac8a1be2fa859f19428d82 100644 (file)
@@ -1,3 +1,8 @@
+2021-05-21  Tom de Vries  <tdevries@suse.de>
+
+       PR testsuite/25047
+       * contrib/cc-with-tweaks.sh: Handle -l.
+
 2021-05-21  Tom de Vries  <tdevries@suse.de>
 
        PR breakpoint/27889
index 2eda76a89c2f8ccf35cc0353e05c6f523933660a..8653dfb260e6da0f68afe51eb9ea3b4672264131 100755 (executable)
@@ -45,6 +45,7 @@
 # -i make an index (.gdb_index)
 # -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
 # If nothing is given, no changes are made
 
 myname=cc-with-tweaks.sh
@@ -83,6 +84,7 @@ want_dwz=false
 want_multi=false
 want_dwp=false
 want_objcopy_compress=false
+want_gnu_debuglink=false
 
 while [ $# -gt 0 ]; do
     case "$1" in
@@ -92,6 +94,7 @@ while [ $# -gt 0 ]; do
        -n) want_index=true; index_options=-dwarf-5;;
        -m) want_multi=true ;;
        -p) want_dwp=true ;;
+       -l) want_gnu_debuglink=true ;;
        *) break ;;
     esac
     shift
@@ -158,7 +161,12 @@ fi
 
 get_tmpdir ()
 {
-    tmpdir=$(dirname "$output_file")/.tmp
+    subdir="$1"
+    if [ "$subdir" = "" ]; then
+       subdir=.tmp
+    fi
+
+    tmpdir=$(dirname "$output_file")/"$subdir"
     mkdir -p "$tmpdir"
 }
 
@@ -234,4 +242,40 @@ if [ "$want_dwp" = true ]; then
     fi
 fi
 
+if [ "$want_gnu_debuglink" = true ]; then
+    # Based on gdb_gnu_strip_debug.
+
+    # Gdb looks for the .gnu_debuglink file in the .debug subdirectory
+    # of the directory of the executable.
+    get_tmpdir .debug
+
+    stripped_file="$tmpdir"/$(basename "$output_file").stripped
+    debug_file="$tmpdir"/$(basename "$output_file").debug
+
+    # Create stripped and debug versions of output_file.
+    strip --strip-debug "${output_file}" \
+         -o "${stripped_file}"
+    rc=$?
+    [ $rc != 0 ] && exit $rc
+    strip --only-keep-debug "${output_file}" \
+         -o "${debug_file}"
+    rc=$?
+    [ $rc != 0 ] && exit $rc
+
+    # The .gnu_debuglink is supposed to contain no leading directories.
+    link=$(basename "${debug_file}")
+
+    (
+       # Temporarily cd to tmpdir to allow objcopy to find $link
+       cd "$tmpdir" || exit 1
+
+       # Overwrite output_file with stripped version containing
+       # .gnu_debuglink to debug_file.
+       objcopy --add-gnu-debuglink="$link" "${stripped_file}" \
+               "${output_file}"
+       rc=$?
+       [ $rc != 0 ] && exit $rc
+    )
+fi
+
 exit $rc
index 4a3f53ba33af4a433de0d6636de0b0a6e2ee10cf..df1ba09d502fe820e8cda715532a38ad3ed07f5d 100644 (file)
@@ -1,3 +1,8 @@
+2021-05-21  Tom de Vries  <tdevries@suse.de>
+
+       PR testsuite/25047
+       * boards/cc-with-gnu-debuglink.exp: New file.
+
 2021-05-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
        * gdb.dwarf2/dw2-inline-with-lexical-scope.c (func): Replace
diff --git a/gdb/testsuite/boards/cc-with-gnu-debuglink.exp b/gdb/testsuite/boards/cc-with-gnu-debuglink.exp
new file mode 100644 (file)
index 0000000..ca977d9
--- /dev/null
@@ -0,0 +1,26 @@
+# Copyright 2021 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 -l.
+#
+# Example usage:
+# bash$ cd $objdir
+# bash$ make check-gdb \
+#   RUNTESTFLAGS='--target_board=cc-with-gnu-debuglink'
+#
+
+set CC_WITH_TWEAKS_FLAGS "-l"
+load_board_description "cc-with-tweaks"