1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0+ 3# 4# Run herd7 tests on all .litmus files in the litmus-tests directory 5# and check each file's result against a "Result:" comment within that 6# litmus test. If the verification result does not match that specified 7# in the litmus test, this script prints an error message prefixed with 8# "^^^". It also outputs verification results to a file whose name is 9# that of the specified litmus test, but with ".out" appended. 10# 11# If the --hw argument is specified, this script translates the .litmus 12# C-language file to the specified type of assembly and verifies that. 13# But in this case, litmus tests using complex synchronization (such as 14# locking, RCU, and SRCU) are cheerfully ignored. 15# 16# Usage: 17# checkalllitmus.sh 18# 19# Run this in the directory containing the memory model. 20# 21# This script makes no attempt to run the litmus tests concurrently. 22# 23# Copyright IBM Corporation, 2018 24# 25# Author: Paul E. McKenney <paulmck@linux.ibm.com> 26 27. scripts/parseargs.sh 28 29litmusdir=litmus-tests 30if test -d "$litmusdir" -a -r "$litmusdir" -a -x "$litmusdir" 31then 32 : 33else 34 echo ' --- ' error: $litmusdir is not an accessible directory 35 exit 255 36fi 37 38# Create any new directories that have appeared in the litmus-tests 39# directory since the last run. 40if test "$LKMM_DESTDIR" != "." 41then 42 find $litmusdir -type d -print | 43 ( cd "$LKMM_DESTDIR"; sed -e 's/^/mkdir -p /' | sh ) 44fi 45 46# Run the script on all the litmus tests in the specified directory 47ret=0 48for i in $litmusdir/*.litmus 49do 50 if test -n "$LKMM_HW_MAP_FILE" && ! scripts/simpletest.sh $i 51 then 52 continue 53 fi 54 if ! scripts/checklitmus.sh $i 55 then 56 ret=1 57 fi 58done 59if test "$ret" -ne 0 60then 61 echo " ^^^ VERIFICATION MISMATCHES" 1>&2 62else 63 echo All litmus tests verified as was expected. 1>&2 64fi 65exit $ret 66