dtc: Add valgrind support to testsuite

This patch adds some options to the run_tests.sh script allowing it to
run all the testcases under valgrind to check for pointer corruption
bugs and memory leaks.  Invoking "make checkm" will run the testsuite
with valgrind.

It include a mechanism for specifying valgrind errors to be suppressed
on a per-testcase basis, and adds a couple of such suppression files
for the mangle-layout and open_pack testcases which dump for use by
other testcases a buffer which may contain uninitialized sections.  We
use suppressions rather than initializing the buffer so that valgrind
will catch any internal access s to the uninitialized data, which
would be a bug.

The patch also fixes one genuine bug caught by valgrind -
_packblocks() in fdt_rw.c was using memcpy() where it should have been
using memmove().

At present the valgrinding won't do anything useful for testcases
invoked via a shell script - which includes all the dtc testcases.  I
plan to fix that later.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
David Gibson
2007-11-21 11:56:14 +11:00
committed by Jon Loeliger
parent 3ce5363387
commit 67b6b33b9b
5 changed files with 41 additions and 6 deletions

View File

@@ -2,16 +2,26 @@
export QUIET_TEST=1
export VALGRIND=
VGCODE=126
tot_tests=0
tot_pass=0
tot_fail=0
tot_config=0
tot_vg=0
tot_strange=0
run_test () {
tot_tests=$[tot_tests + 1]
echo -n "$@: "
if "./$@"; then
VGLOCAL="$VALGRIND"
if [ -n "$VALGRIND" ]; then
if [ -f $1.supp ]; then
VGLOCAL="$VGLOCAL --suppressions=$1.supp"
fi
fi
if $VGLOCAL "./$@"; then
tot_pass=$[tot_pass + 1]
else
ret="$?"
@@ -19,6 +29,8 @@ run_test () {
tot_config=$[tot_config + 1]
elif [ "$ret" == "2" ]; then
tot_fail=$[tot_fail + 1]
elif [ "$ret" == "$VGCODE" ]; then
tot_vg=$[tot_vg + 1]
else
tot_strange=$[tot_strange + 1]
fi
@@ -147,7 +159,7 @@ dtc_tests () {
run_test dtc-checkfails.sh -I dts -O dtb minusone-phandle.dts
}
while getopts "vdt:" ARG ; do
while getopts "vt:m" ARG ; do
case $ARG in
"v")
unset QUIET_TEST
@@ -155,6 +167,9 @@ while getopts "vdt:" ARG ; do
"t")
TESTSETS=$OPTARG
;;
"m")
VALGRIND="valgrind --tool=memcheck -q --error-exitcode=$VGCODE"
;;
esac
done
@@ -181,6 +196,9 @@ echo -e "* Total testcases: $tot_tests"
echo -e "* PASS: $tot_pass"
echo -e "* FAIL: $tot_fail"
echo -e "* Bad configuration: $tot_config"
if [ -n "$VALGRIND" ]; then
echo -e "* valgrind errors: $tot_vg"
fi
echo -e "* Strange test result: $tot_strange"
echo -e "**********"