Create a suppressions file for valgrind with JIT.

This commit is contained in:
Philip.Hazel 2015-09-11 16:56:47 +00:00
parent 7f12be426c
commit 297024d65b
4 changed files with 120 additions and 76 deletions

View File

@ -179,6 +179,11 @@ this work, the new command was added to several test files and the testing
scripts were modified. The pcre2grep tests can now also be run when there is no
LF in the default newline convention.
51. The RunTest script has been modified so that, when JIT is used and valgrind
is specified, a valgrind suppressions file is set up to ignore "Invalid read of
size 16" errors because these are false positives when the hardware supports
the SSE2 instruction set.
Version 10.20 30-June-2015
--------------------------

30
RunTest
View File

@ -157,7 +157,7 @@ checkresult()
checkspecial()
{
$valgrind ./pcre2test $1 >>testtry
$valgrind $vjs ./pcre2test $1 >>testtry
if [ $? -ne 0 ] ; then
echo "** pcre2test $1 failed - check testtry"
exit 1
@ -194,6 +194,7 @@ bigstack=
sim=
skip=
valgrind=
vjs=
# This is in case the caller has set aliases (as I do - PH)
unset cp ls mv rm
@ -377,11 +378,18 @@ fi
$sim ./pcre2test -C unicode >/dev/null
utf=$?
# When JIT is used with valgrind, we need to set up valgrind suppressions as
# otherwise there are a lot of false positive valgrind reports when the
# the hardware supports SSE2.
jitopt=
$sim ./pcre2test -C jit >/dev/null
jit=$?
if [ $jit -ne 0 -a "$nojit" != "yes" ] ; then
jitopt=-jit
if [ "$valgrind" != "" ] ; then
vjs="--suppressions=$testdata/valgrind-jit.supp"
fi
fi
# If no specific tests were requested, select all. Those that are not
@ -459,7 +467,7 @@ for bmode in "$test8" "$test16" "$test32"; do
if [ $do1 = yes ] ; then
echo $title1
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput1 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput1 testtry
checkresult $? 1 "$opt"
done
fi
@ -469,7 +477,7 @@ for bmode in "$test8" "$test16" "$test32"; do
if [ $do2 = yes ] ; then
echo $title2 "(excluding UTF-$bits)"
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $test2stack $bmode $opt $testdata/testinput2 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $test2stack $bmode $opt $testdata/testinput2 testtry
if [ $? = 0 ] ; then
checkresult $? 2 "$opt"
else
@ -529,7 +537,7 @@ for bmode in "$test8" "$test16" "$test32"; do
if [ "$locale" != "" ] ; then
echo $title3 "(using '$locale' locale)"
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $infile testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $infile testtry
if [ $? = 0 ] ; then
case "$opt" in
-jit) with=" with JIT";;
@ -566,7 +574,7 @@ for bmode in "$test8" "$test16" "$test32"; do
echo " Skipped because UTF-$bits support is not available"
else
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput4 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput4 testtry
checkresult $? 4 "$opt"
done
fi
@ -578,7 +586,7 @@ for bmode in "$test8" "$test16" "$test32"; do
echo " Skipped because UTF-$bits support is not available"
else
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput5 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput5 testtry
checkresult $? 5 "$opt"
done
fi
@ -630,7 +638,7 @@ for bmode in "$test8" "$test16" "$test32"; do
echo " Skipped when running 16/32-bit tests"
else
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput9 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput9 testtry
checkresult $? 9 "$opt"
done
fi
@ -646,7 +654,7 @@ for bmode in "$test8" "$test16" "$test32"; do
echo " Skipped because UTF-$bits support is not available"
else
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput10 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput10 testtry
checkresult $? 10 "$opt"
done
fi
@ -660,7 +668,7 @@ for bmode in "$test8" "$test16" "$test32"; do
echo " Skipped when running 8-bit tests"
else
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput11 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput11 testtry
checkresult $? 11-$bits "$opt"
done
fi
@ -677,7 +685,7 @@ for bmode in "$test8" "$test16" "$test32"; do
echo " Skipped because UTF-$bits support is not available"
else
for opt in "" $jitopt; do
$sim $valgrind ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput12 testtry
$sim $valgrind ${opt:+$vjs} ./pcre2test -q $defaultstack $bmode $opt $testdata/testinput12 testtry
checkresult $? 12-$bits "$opt"
done
fi
@ -734,7 +742,7 @@ for bmode in "$test8" "$test16" "$test32"; do
if [ $jit -eq 0 -o "$nojit" = "yes" ] ; then
echo " Skipped because JIT is not available or nojit was specified"
else
$sim $valgrind ./pcre2test -q $defaultstack $bmode $testdata/testinput17 testtry
$sim $valgrind $vjs ./pcre2test -q $defaultstack $bmode $testdata/testinput17 testtry
checkresult $? 17 ""
fi
fi

View File

@ -10,13 +10,16 @@
# tests, in order to run those that are giving errors. The following options
# do this:
#
# -noasan skip the test that uses -fsanitize=address
# -nousan skip the test that uses -fsanitize=undefined
# -nodebug skip the test that uses --enable-debug
# -nojit skip JIT tests
# -nomain skip the main set of tests
# -notmp skip the test in a temporary directory
# -novalgrind skip the valgrind tests
# -noasan skip the test that uses -fsanitize=address
# -nousan skip the test that uses -fsanitize=undefined
# -nodebug skip the test that uses --enable-debug
# -nojit skip all JIT tests
# -nojitmain skip non-valgrind JIT tests
# -nojitvalgrind skip JIT tests with valgrind
# -nomain skip the main set of tests
# -nomainvalgrind skip the non-JIT valgrind tests
# -notmp skip the test in a temporary directory
# -novalgrind skip the valgrind tests
# The -v option causes a call to 'pcre2test -C' to happen for each
# configuration.
@ -25,26 +28,35 @@ useasan=1
useusan=1
usedebug=1
usejit=1
usejitvalgrind=1
usemain=1
usemainvalgrind=1
usetmp=1
usevalgrind=1
verbose=0
while [ $# -gt 0 ] ; do
case $1 in
-noasan) useasan=0;;
-nousan) useusan=0;;
-nodebug) usedebug=0;;
-nojit) usejit=0;;
-nomain) usemain=0;;
-notmp) usetmp=0;;
-novalgrind) usevalgrind=0;;
-v) verbose=1;;
*) echo "Unknown option '$1'"; exit 1;;
-noasan) useasan=0;;
-nousan) useusan=0;;
-nodebug) usedebug=0;;
-nojit) usejit=0; usejitvalgrind=0;;
-nojitmain) usejit=0;;
-nojitvalgrind) usejitvalgrind=0;;
-nomain) usemain=0; usemainvalgrind=0;;
-nomainvalgrind) usemainvalgrind=0;;
-notmp) usetmp=0;;
-novalgrind) usevalgrind=0;;
-v) verbose=1;;
*) echo "Unknown option '$1'"; exit 1;;
esac
shift
done
if [ $usejitvalgrind -eq 0 -a $usemainvalgrind -eq 0 ] ; then
usevalgrind=0
fi
# This is in case the caller has set aliases (as I do - PH)
unset cp ls mv rm
@ -103,22 +115,21 @@ runtest()
fi
CFLAGS="$CFLAGS" \
$srcdir/configure $opts >/dev/null 2>teststderr
$srcdir/configure $opts >/dev/null 2>teststderrM
if [ $? -ne 0 ]; then
echo " "
echo "******** Error while configuring ********"
cat teststderr
cat teststderrM
exit 1
fi
echo "Making"
make -j >/dev/null 2>teststderr
if [ $? -ne 0 -o -s teststderr ]; then
make -j >/dev/null 2>teststderrM
if [ $? -ne 0 -o -s teststderrM ]; then
echo " "
echo "******** Errors or warnings while making ********"
echo " "
cat teststderr
cat teststderrM
exit 1
fi
@ -132,23 +143,27 @@ runtest()
pcre2_8=$?
echo "Running PCRE2 library tests $withvalgrind"
$srcdir/RunTest $valgrind >teststdout 2>teststderr
if [ $? -ne 0 -o -s teststderr ]; then
$srcdir/RunTest $valgrind >teststdoutM 2>teststderrM
if [ $? -ne 0 -o -s teststderrM ]; then
echo " "
echo "**** Test failed ****"
cat teststderr
if [ -s teststdout ] ; then cat teststdout; fi
if [ -s teststderrM ] ; then
cat teststderrM
else
cat teststdoutM
fi
exit 1
fi
if [ $pcre2_8 -gt 0 ]; then
echo "Running pcre2grep tests $withvalgrind"
$srcdir/RunGrepTest $valgrind >teststdout 2>teststderr
if [ $? -ne 0 -o -s teststderr ]; then
$srcdir/RunGrepTest $valgrind >teststdoutM 2>teststderrM
if [ $? -ne 0 -o -s teststderrM ]; then
echo " "
echo "**** Test failed ****"
cat teststderr
cat teststdout
cat teststderrM
cat teststdoutM
exit 1
fi
else
@ -157,12 +172,12 @@ runtest()
if [ "$jit" -gt 0 ]; then
echo "Running JIT regression tests $withvalgrind"
$cvalgrind $srcdir/pcre2_jit_test >teststdout 2>teststderr
if [ $? -ne 0 -o -s teststderr ]; then
$cvalgrind $srcdir/pcre2_jit_test >teststdoutM 2>teststderrM
if [ $? -ne 0 -o -s teststderrM ]; then
echo " "
echo "**** Test failed ****"
cat teststderr
cat teststdout
cat teststderrM
cat teststdoutM
exit 1
fi
else
@ -180,9 +195,16 @@ testtotal=`expr 20 \* $usemain + \
1 \* $ISGCC \* $usemain \* $useasan + \
1 \* $ISGCC \* $usemain \* $useusan + \
13 \* $usejit + \
\( 3 + 2 \* $usejit \) \* $usevalgrind`
3 \* $usemainvalgrind + \
2 \* $usejitvalgrind`
testcount=0
if [ $testtotal -eq 0 ] ; then
echo "** No tests selected"
exit 1
fi
valgrind=
cvalgrind=
withvalgrind=
@ -244,7 +266,7 @@ if [ $usemain -ne 0 ]; then
echo "---------- Maximally configured test with --enable-debug ----------"
opts="--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug"
runtest
fi
fi
echo "---------- Non-JIT tests in the current directory ----------"
for opts in \
@ -304,16 +326,18 @@ if [ $usevalgrind -ne 0 ]; then
cvalgrind="valgrind -q --smc-check=all"
withvalgrind="with valgrind"
for opts in \
"--disable-stack-for-recursion --disable-shared" \
"--with-link-size=3 --enable-pcre2-16 --enable-pcre2-32 --disable-shared" \
"--disable-unicode --disable-shared"
do
opts="--enable-valgrind $opts"
runtest
done
if [ $usemainvalgrind -ne 0 ]; then
for opts in \
"--disable-stack-for-recursion --disable-shared" \
"--with-link-size=3 --enable-pcre2-16 --enable-pcre2-32 --disable-shared" \
"--disable-unicode --disable-shared"
do
opts="--enable-valgrind $opts"
runtest
done
fi
if [ $usejit -ne 0 ]; then
if [ $usejitvalgrind -ne 0 ]; then
for opts in \
"--enable-jit --disable-shared" \
"--enable-jit --enable-pcre2-16 --enable-pcre2-32"
@ -341,26 +365,26 @@ if [ -f Makefile ]; then
fi
fi
echo "---------- Tests in the $tmp directory ----------"
srcdir=`pwd`
export srcdir
if [ ! -e $tmp ]; then
mkdir $tmp
fi
if [ ! -d $tmp ]; then
echo "** Failed to create $tmp or it is not a directory"
exit 1
fi
cd $tmp
if [ $? -ne 0 ]; then
echo "** Failed to cd to $tmp"
exit 1
fi
if [ $usetmp -ne 0 ]; then
echo "---------- Tests in the $tmp directory ----------"
srcdir=`pwd`
export srcdir
if [ ! -e $tmp ]; then
mkdir $tmp
fi
if [ ! -d $tmp ]; then
echo "** Failed to create $tmp or it is not a directory"
exit 1
fi
cd $tmp
if [ $? -ne 0 ]; then
echo "** Failed to cd to $tmp"
exit 1
fi
for opts in \
"--disable-shared"
do
@ -369,8 +393,8 @@ if [ $usetmp -ne 0 ]; then
fi
echo "Removing $tmp"
rm -rf $tmp
rm -rf teststdoutM teststderrM
echo "All done"

7
testdata/valgrind-jit.supp vendored Normal file
View File

@ -0,0 +1,7 @@
{
name
Memcheck:Addr16
obj:*
obj:*
obj:*
}