xref: /linux/tools/memory-model/scripts/judgelitmus.sh (revision 02484d826fda923f829fc47350ee99fd3cbd3414)
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0+
3#
4# Given a .litmus test and the corresponding .litmus.out file, check
5# the .litmus.out file against the "Result:" comment to judge whether
6# the test ran correctly.
7#
8# Usage:
9#	judgelitmus.sh file.litmus
10#
11# Run this in the directory containing the memory model, specifying the
12# pathname of the litmus test to check.
13#
14# Copyright IBM Corporation, 2018
15#
16# Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
17
18litmus=$1
19
20if test -f "$litmus" -a -r "$litmus"
21then
22	:
23else
24	echo ' --- ' error: \"$litmus\" is not a readable file
25	exit 255
26fi
27if test -f "$LKMM_DESTDIR/$litmus".out -a -r "$LKMM_DESTDIR/$litmus".out
28then
29	:
30else
31	echo ' --- ' error: \"$LKMM_DESTDIR/$litmus\".out is not a readable file
32	exit 255
33fi
34if grep -q '^ \* Result: ' $litmus
35then
36	outcome=`grep -m 1 '^ \* Result: ' $litmus | awk '{ print $3 }'`
37else
38	outcome=specified
39fi
40
41grep '^Observation' $LKMM_DESTDIR/$litmus.out
42if grep -q '^Observation' $LKMM_DESTDIR/$litmus.out
43then
44	:
45elif grep ': Unknown macro ' $LKMM_DESTDIR/$litmus.out
46then
47	badname=`grep ': Unknown macro ' $LKMM_DESTDIR/$litmus.out |
48		sed -e 's/^.*: Unknown macro //' |
49		sed -e 's/ (User error).*$//'`
50	badmsg=' !!! Current LKMM version does not know "'$badname'"'" $litmus"
51	echo $badmsg
52	if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
53	then
54		echo ' !!! '$badmsg >> $LKMM_DESTDIR/$litmus.out 2>&1
55	fi
56	exit 254
57elif grep '^Command exited with non-zero status 124' $LKMM_DESTDIR/$litmus.out
58then
59	echo ' !!! Timeout' $litmus
60	if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
61	then
62		echo ' !!! Timeout' >> $LKMM_DESTDIR/$litmus.out 2>&1
63	fi
64	exit 124
65else
66	echo ' !!! Verification error' $litmus
67	if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
68	then
69		echo ' !!! Verification error' >> $LKMM_DESTDIR/$litmus.out 2>&1
70	fi
71	exit 255
72fi
73if test "$outcome" = DEADLOCK
74then
75	if grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q 'Never 0 0$'
76	then
77		ret=0
78	else
79		echo " !!! Unexpected non-$outcome verification" $litmus
80		if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
81		then
82			echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1
83		fi
84		ret=1
85	fi
86elif grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q $outcome || test "$outcome" = Maybe
87then
88	ret=0
89else
90	echo " !!! Unexpected non-$outcome verification" $litmus
91	if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out
92	then
93		echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1
94	fi
95	ret=1
96fi
97tail -2 $LKMM_DESTDIR/$litmus.out | head -1
98exit $ret
99