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 : 45else 46 echo ' !!! Verification error' $litmus 47 if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out 48 then 49 echo ' !!! Verification error' >> $LKMM_DESTDIR/$litmus.out 2>&1 50 fi 51 exit 255 52fi 53if test "$outcome" = DEADLOCK 54then 55 if grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q 'Never 0 0$' 56 then 57 ret=0 58 else 59 echo " !!! Unexpected non-$outcome verification" $litmus 60 if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out 61 then 62 echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1 63 fi 64 ret=1 65 fi 66elif grep '^Observation' $LKMM_DESTDIR/$litmus.out | grep -q $outcome || test "$outcome" = Maybe 67then 68 ret=0 69else 70 echo " !!! Unexpected non-$outcome verification" $litmus 71 if ! grep -q '!!!' $LKMM_DESTDIR/$litmus.out 72 then 73 echo " !!! Unexpected non-$outcome verification" >> $LKMM_DESTDIR/$litmus.out 2>&1 74 fi 75 ret=1 76fi 77tail -2 $LKMM_DESTDIR/$litmus.out | head -1 78exit $ret 79