1#! /bin/sh 2# Copyright (C) 2015 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. $srcdir/test-subr.sh 19 20# uncompress -> gnucompress -> uncompress -> elfcompress -> uncompress 21testrun_elfcompress_file() 22{ 23 infile="$1" 24 uncompressedfile="${infile}.uncompressed" 25 tempfiles "$uncompressedfile" 26 27 echo "uncompress $infile -> $uncompressedfile" 28 testrun ${abs_top_builddir}/src/elfcompress -v -t none -o ${uncompressedfile} ${infile} 29 testrun ${abs_top_builddir}/src/elflint --gnu-ld ${uncompressedfile} 30 31 SIZE_uncompressed=$(stat -c%s $uncompressedfile) 32 33 gnucompressedfile="${infile}.gnu" 34 tempfiles "$gnucompressedfile" 35 echo "compress gnu $uncompressedfile -> $gnucompressedfile" 36 testrun ${abs_top_builddir}/src/elfcompress -v -t gnu -o ${gnucompressedfile} ${uncompressedfile} 37 testrun ${abs_top_builddir}/src/elflint --gnu-ld ${gnucompressedfile} 38 39 SIZE_gnucompressed=$(stat -c%s $gnucompressedfile) 40 test $SIZE_gnucompressed -lt $SIZE_uncompressed || 41 { echo "*** failure $gnucompressedfile not smaller"; exit -1; } 42 43 gnuuncompressedfile="${infile}.gnu.uncompressed" 44 tempfiles "$gnuuncompressedfile" 45 echo "uncompress $gnucompressedfile -> $gnuuncompressedfile" 46 testrun ${abs_top_builddir}/src/elfcompress -v -t none -o ${gnuuncompressedfile} ${gnucompressedfile} 47 testrun ${abs_top_builddir}/src/elfcmp ${uncompressedfile} ${gnuuncompressedfile} 48 49 elfcompressedfile="${infile}.gabi" 50 tempfiles "$elfcompressedfile" 51 echo "compress gabi $uncompressedfile -> $elfcompressedfile" 52 testrun ${abs_top_builddir}/src/elfcompress -v -t zlib -o ${elfcompressedfile} ${uncompressedfile} 53 testrun ${abs_top_builddir}/src/elflint --gnu-ld ${elfcompressedfile} 54 55 SIZE_elfcompressed=$(stat -c%s $elfcompressedfile) 56 test $SIZE_elfcompressed -lt $SIZE_uncompressed || 57 { echo "*** failure $elfcompressedfile not smaller"; exit -1; } 58 59 elfuncompressedfile="${infile}.gabi.uncompressed" 60 tempfiles "$elfuncompressedfile" 61 echo "uncompress $elfcompressedfile -> $elfuncompressedfile" 62 testrun ${abs_top_builddir}/src/elfcompress -v -t none -o ${elfuncompressedfile} ${elfcompressedfile} 63 testrun ${abs_top_builddir}/src/elfcmp ${uncompressedfile} ${elfuncompressedfile} 64 65 if test -z "$ELFUTILS_ZSTD"; then 66 return; 67 fi 68 69 outputfile="${infile}.gabi.zstd" 70 tempfiles "$outputfile" 71 echo "zstd compress $elfcompressedfile -> $outputfile" 72 testrun ${abs_top_builddir}/src/elfcompress -v -t zstd -o ${outputfile} ${elfcompressedfile} 73 testrun ${abs_top_builddir}/src/elfcmp ${uncompressedfile} ${outputfile} 74 echo "checking compressed section header" $outputfile 75 testrun ${abs_top_builddir}/src/readelf -Sz ${outputfile} | grep "ELF ZSTD" >/dev/null 76 77 zstdfile="${infile}.zstd" 78 tempfiles "$zstdfile" 79 echo "zstd compress $uncompressedfile -> $zstdfile" 80 testrun ${abs_top_builddir}/src/elfcompress -v -t zstd -o ${zstdfile} ${elfuncompressedfile} 81 testrun ${abs_top_builddir}/src/elfcmp ${uncompressedfile} ${zstdfile} 82 echo "checking compressed section header" $zstdfile 83 testrun ${abs_top_builddir}/src/readelf -Sz ${zstdfile} | grep "ELF ZSTD" >/dev/null 84 85 zstdgnufile="${infile}.zstd.gnu" 86 tempfiles "$zstdgnufile" 87 echo "zstd re-compress to GNU ZLIB $zstdfile -> $zstdgnufile" 88 testrun ${abs_top_builddir}/src/elfcompress -v -t zlib-gnu -o ${zstdgnufile} ${zstdfile} 89 testrun ${abs_top_builddir}/src/elfcmp ${uncompressedfile} ${zstdgnufile} 90 echo "checking .zdebug section name" $zstdgnufile 91 testrun ${abs_top_builddir}/src/readelf -S ${zstdgnufile} | grep ".zdebug" >/dev/null 92} 93 94testrun_elfcompress() 95{ 96 testfile="$1" 97 testfiles ${testfile} 98 testrun_elfcompress_file ${testfile} 99 100 # Merge the string tables to make things a little more interesting. 101 mergedfile="${testfile}.merged" 102 tempfiles ${mergedfile} 103 echo "merging string tables ${testfile} -> ${mergedfile}" 104 testrun ${abs_top_builddir}/tests/elfstrmerge -o ${mergedfile} ${testfile} 105 testrun_elfcompress_file ${mergedfile} 106} 107 108# Random ELF32 testfile 109testrun_elfcompress testfile4 110 111# Random ELF64 testfile 112testrun_elfcompress testfile12 113 114# Random ELF64BE testfile 115testrun_elfcompress testfileppc64 116 117# Random ELF32BE testfile 118testrun_elfcompress testfileppc32 119 120# Already compressed files 121testrun_elfcompress testfile-zgnu64 122testrun_elfcompress testfile-zgnu64be 123testrun_elfcompress testfile-zgabi64 124testrun_elfcompress testfile-zgabi64be 125testrun_elfcompress testfile-zgnu32 126testrun_elfcompress testfile-zgnu32be 127testrun_elfcompress testfile-zgabi32 128testrun_elfcompress testfile-zgabi32be 129 130exit 0 131