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