xref: /aosp_15_r20/external/elfutils/tests/run-compress-test.sh (revision 7304104da70ce23c86437a01be71edd1a2d7f37e)
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