aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/rcutorture/bin/kvm-find-errors.sh
blob: 88983cba795636cc41b9c872f1ee4f7ba7ad2505 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0+
#
# Invoke a text editor on all console.log files for all runs with diagnostics,
# that is, on all such files having a console.log.diags counterpart.
# Note that both console.log.diags and console.log are passed to the
# editor (currently defaulting to "vi"), allowing the user to get an
# idea of what to search for in the console.log file.
#
# Usage: kvm-find-errors.sh directory
#
# The "directory" above should end with the date/time directory, for example,
# "tools/testing/selftests/rcutorture/res/2018.02.25-14:27:27".
# Returns error status reflecting the success (or not) of the specified run.
#
# Copyright (C) IBM Corporation, 2018
#
# Author: Paul E. McKenney <paulmck@linux.ibm.com>

rundir="${1}"
if test -z "$rundir" -o ! -d "$rundir"
then
	echo Directory "$rundir" not found.
	echo Usage: $0 directory
	exit 1
fi
editor=${EDITOR-vi}

# Find builds with errors
files=
for i in ${rundir}/*/Make.out
do
	scenariodir="`dirname $i`"
	scenariobasedir="`echo ${scenariodir} | sed -e 's/\.[0-9]*$//'`"
	if egrep -q "error:|warning:|^ld: .*undefined reference to" < $i
	then
		egrep "error:|warning:|^ld: .*undefined reference to" < $i > $i.diags
		files="$files $i.diags $i"
	elif ! test -f ${scenariobasedir}/vmlinux && ! test -f "${rundir}/re-run"
	then
		echo No ${scenariobasedir}/vmlinux file > $i.diags
		files="$files $i.diags $i"
	fi
done
if test -n "$files"
then
	$editor $files
	editorret=1
else
	echo No build errors.
fi
if grep -q -e "--build-\?only" < ${rundir}/log && ! test -f "${rundir}/remote-log"
then
	echo Build-only run, no console logs to check.
	exit $editorret
fi

# Find console logs with errors
files=
for i in ${rundir}/*/console.log
do
	if test -r $i.diags
	then
		files="$files $i.diags $i"
	fi
done
if test -n "$files"
then
	$editor $files
	exit 1
else
	echo No errors in console logs.
	if test -n "$editorret"
	then
		exit $editorret
	else
		exit 0
	fi
fi