1#! /bin/sh 2# Copyright (C) 2005-2015, 2017 Red Hat, Inc. 3# This file is part of elfutils. 4# 5# This file is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 3 of the License, or 8# (at your option) any later version. 9# 10# elfutils is distributed in the hope that it will be useful, but 11# WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 19# This file is sourced by ". $srcdir/test-subr.sh" at the start of 20# each test script. It defines some functions they use and sets up 21# canonical sh state for test runs. 22 23set -e 24 25# Each test runs in its own directory to make sure they can run in parallel. 26test_dir="test-$$" 27mkdir -p "$test_dir" 28cd "$test_dir" 29 30#LC_ALL=C 31#export LC_ALL 32 33remove_files= 34 35# Tests that trap EXIT (0) themselves should call this explicitly. 36exit_cleanup() 37{ 38 rm -f $remove_files; cd ..; rmdir $test_dir 39} 40trap exit_cleanup 0 41 42tempfiles() 43{ 44 remove_files="$remove_files $*" 45} 46 47testfiles() 48{ 49 for file; do 50 bunzip2 -c ${abs_srcdir}/${file}.bz2 > ${file} || exit 77 51 remove_files="$remove_files $file" 52 done 53} 54 55testrun_out() 56{ 57 outfile="$1" 58 shift 59 remove_files="$remove_files $outfile" 60 testrun "$@" > $outfile 2>&1 || : 61} 62 63testrun_compare() 64{ 65 outfile="${1##*/}.out" 66 testrun_out $outfile "$@" 67 diff -u $outfile - 68 # diff's exit status will kill the script. 69} 70 71test_cleanup() 72{ 73 rm -f $remove_files 74 remove_files= 75} 76 77# See test-wrapper.sh, which sets the environment for this. 78testrun() 79{ 80 ${elfutils_testrun}_testrun "$@" 81} 82 83built_testrun() 84{ 85 LD_LIBRARY_PATH="${built_library_path}${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"\ 86 $VALGRIND_CMD "$@" 87} 88 89installed_testrun() 90{ 91 program="$1" 92 shift 93 case "$program" in 94 ${abs_builddir}/*) 95 if [ "x$elfutils_tests_rpath" != xno ]; then 96 echo >&2 installcheck not possible with --enable-tests-rpath 97 exit 77 98 fi 99 ;; 100 ${abs_top_builddir}/src/*) 101 program=${bindir}/`program_transform ${program##*/}` 102 ;; 103 esac 104 if [ "${libdir}" != /usr/lib ] && [ "${libdir}" != /usr/lib64 ]; then 105 LD_LIBRARY_PATH="${libdir}:${libdir}/elfutils\ 106${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" \ 107 $VALGRIND_CMD $program ${1+"$@"} 108 else 109 $VALGRIND_CMD $program ${1+"$@"} 110 fi 111} 112 113program_transform() 114{ 115 echo "$*" | sed "${program_transform_name}" 116} 117 118self_test_files_exe=`echo ${abs_top_builddir}/src/addr2line \ 119${abs_top_builddir}/src/elfclassify \ 120${abs_top_builddir}/src/stack \ 121${abs_top_builddir}/src/unstrip` 122 123self_test_files_lib=`echo ${abs_top_builddir}/libelf/libelf.so \ 124${abs_top_builddir}/libasm/libasm.so` 125 126self_test_files_obj=`echo ${abs_top_builddir}/src/size.o \ 127${abs_top_builddir}/src/strip.o` 128 129self_test_files="$self_test_files_exe $self_test_files_lib $self_test_files_obj" 130 131# Provide a command to run on all self-test files with testrun. 132testrun_on_self() 133{ 134 exit_status=0 135 136 for file in $self_test_files; do 137 testrun $* $file \ 138 || { echo "*** failure in $* $file"; exit_status=1; } 139 done 140 141 # Only exit if something failed 142 if test $exit_status != 0; then exit $exit_status; fi 143} 144 145testrun_on_self_exe() 146{ 147 exit_status=0 148 149 for file in $self_test_files_exe; do 150 testrun $* $file \ 151 || { echo "*** failure in $* $file"; exit_status=1; } 152 done 153 154 # Only exit if something failed 155 if test $exit_status != 0; then exit $exit_status; fi 156} 157 158testrun_on_self_lib() 159{ 160 exit_status=0 161 162 for file in $self_test_files_lib; do 163 testrun $* $file \ 164 || { echo "*** failure in $* $file"; exit_status=1; } 165 done 166 167 # Only exit if something failed 168 if test $exit_status != 0; then exit $exit_status; fi 169} 170 171testrun_on_self_obj() 172{ 173 exit_status=0 174 175 for file in $self_test_files_obj; do 176 testrun $* $file \ 177 || { echo "*** failure in $* $file"; exit_status=1; } 178 done 179 180 # Only exit if something failed 181 if test $exit_status != 0; then exit $exit_status; fi 182} 183 184# Compress the files first. Compress both debug sections and symtab. 185testrun_on_self_compressed() 186{ 187 exit_status=0 188 189 for file in $self_test_files; do 190 tempfiles ${file}z 191 testrun ${abs_top_builddir}/src/elfcompress -f -q -o ${file}z ${file} 192 testrun ${abs_top_builddir}/src/elfcompress -f -q --name='.s??tab' ${file}z 193 194 testrun $* ${file}z \ 195 || { echo "*** failure in $* ${file}z"; exit_status=1; } 196 done 197 198 # Only exit if something failed 199 if test $exit_status != 0; then exit $exit_status; fi 200} 201 202# Same as above, but redirects stdout to /dev/null 203testrun_on_self_quiet() 204{ 205 exit_status=0 206 207 for file in $self_test_files; do 208 testrun $* $file > /dev/null \ 209 || { echo "*** failure in $* $file"; exit_status=1; } 210 done 211 212 # Only exit if something failed 213 if test $exit_status != 0; then exit $exit_status; fi 214} 215