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.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 'Never 0 0$' 87then 88 echo " !!! Unexpected non-$outcome deadlock" $litmus 89 if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out 90 then 91 echo " !!! Unexpected non-$outcome deadlock" $litmus >> $LKMM_DESTDIR/$litmus.out 2>&1 92 fi 93 ret=1 94elif grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q $outcome || test "$outcome" = Maybe 95then 96 ret=0 97else 98 echo " !!! Unexpected non-$outcome verification" $litmus 99 if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out 100 then 101 echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1 102 fi 103 ret=1 104fi 105tail -2 $LKMM_DESTDIR/$litmus.out | head -1 106exit $ret 107