1 #! /bin/sh 2 3 YASM_TEST_SUITE=1 4 export YASM_TEST_SUITE 5 6 case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in 7 *c*,-n*) ECHO_N= ECHO_C=' 8 ' ECHO_T=' ' ;; 9 *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; 10 *) ECHO_N= ECHO_C='\c' ECHO_T= ;; 11 esac 12 13 mkdir results >/dev/null 2>&1 14 15 # 16 # Verify that all test cases match 17 # 18 19 passedct=0 20 failedct=0 21 22 echo $ECHO_N "Test bin_multi_test: $ECHO_C" 23 for asm in ${srcdir}/modules/objfmts/bin/tests/multisect/*.asm 24 do 25 a=`echo ${asm} | sed 's,^.*/,,;s,.asm$,,'` 26 o=${a} 27 oh=${a}.hx 28 og=`echo ${asm} | sed 's,.asm$,.hex,'` 29 e=${a}.ew 30 eg=`echo ${asm} | sed 's,.asm$,.errwarn,'` 31 m=${a}.map 32 mg=`echo ${asm} | sed 's,.asm$,.map,'` 33 if test \! -f ${eg}; then 34 eg=/dev/null 35 fi 36 37 # Run within a subshell to prevent signal messages from displaying. 38 sh -c "cat ${asm} | ./yasm -f bin --mapfile=results/${m} -o results/${o} - 2>results/${e}" >/dev/null 2>/dev/null 39 status=$? 40 if test $status -gt 128; then 41 # We should never get a coredump! 42 echo $ECHO_N "C$ECHO_C" 43 eval "failed$failedct='C: ${a} crashed!'" 44 failedct=`expr $failedct + 1` 45 elif test $status -gt 0; then 46 echo ${asm} | grep err >/dev/null 47 if test $? -gt 0; then 48 # YASM detected errors but shouldn't have! 49 echo $ECHO_N "E$ECHO_C" 50 eval "failed$failedct='E: ${a} returned an error code!'" 51 failedct=`expr $failedct + 1` 52 else 53 # We got errors, check to see if they match: 54 if diff -w ${eg} results/${e} >/dev/null; then 55 # Error/warnings match, it passes! 56 echo $ECHO_N ".$ECHO_C" 57 passedct=`expr $passedct + 1` 58 else 59 # Error/warnings don't match. 60 echo $ECHO_N "W$ECHO_C" 61 eval "failed$failedct='W: ${a} did not match errors and warnings!'" 62 failedct=`expr $failedct + 1` 63 fi 64 fi 65 else 66 echo ${asm} | grep -v err >/dev/null 67 if test $? -gt 0; then 68 # YASM didn't detect errors but should have! 69 echo $ECHO_N "E$ECHO_C" 70 eval "failed$failedct='E: ${a} did not return an error code!'" 71 failedct=`expr $failedct + 1` 72 else 73 ./test_hd results/${o} > results/${oh} 74 if diff -w ${og} results/${oh} >/dev/null; then 75 if diff -w ${eg} results/${e} >/dev/null; then 76 if diff -w ${mg} results/${m} >/dev/null; then 77 # All match, it passes! 78 echo $ECHO_N ".$ECHO_C" 79 passedct=`expr $passedct + 1` 80 else 81 # Map file doesn't match. 82 echo $ECHO_N "M$ECHO_C" 83 eval "failed$failedct='M: ${a} did not match map file!'" 84 failedct=`expr $failedct + 1` 85 fi 86 else 87 # Error/warnings don't match. 88 echo $ECHO_N "W$ECHO_C" 89 eval "failed$failedct='W: ${a} did not match errors and warnings!'" 90 failedct=`expr $failedct + 1` 91 fi 92 else 93 # Object file doesn't match. 94 echo $ECHO_N "O$ECHO_C" 95 eval "failed$failedct='O: ${a} did not match object file!'" 96 failedct=`expr $failedct + 1` 97 fi 98 fi 99 fi 100 done 101 102 ct=`expr $failedct + $passedct` 103 per=`expr 100 \* $passedct / $ct` 104 105 echo " +$passedct-$failedct/$ct $per%" 106 i=0 107 while test $i -lt $failedct; do 108 eval "failure=\$failed$i" 109 echo " ** $failure" 110 i=`expr $i + 1` 111 done 112 113 exit $failedct 114