5 if [ "$1" == "" ]; then
6 echo "Verwendung: $0 <abgabe>"
11 TESTMAIN="$CURDIR/testmain.c"
12 DUMPINSTR="$CURDIR/dumpinstr.sh"
13 TRACEDIR="$CURDIR/traces"
14 RESULT="$TRACEDIR/result.txt"
15 CALLCONV="$CURDIR/callingconvention.o"
20 if [ ! -d $ABG ]; then
21 echo "Abgabeverzeichnis $ABG nicht gefunden!"
24 if [ ! -d $TEST ]; then
25 echo "Testverzeichnis $TEST nicht gefunden!"
33 if [ ! -d $TRACEDIR ]; then
34 echo "creating $TRACEDIR"
42 for i in $TEST/*.0; do
46 # generate .s file and ignore output on stderr
47 ./$1 < $i > $TMPNAME.s 2> /dev/null
49 gcc -DCALL=\"${i%.0}.call\" -o $TMPNAME $TMPNAME.s $TESTMAIN $CALLCONV
52 # extract the exported symbols from the .s file
53 #LABEL=`grep '.globl' $TMPNAME.s | sed 's/^.*\\.globl *\\([a-zA-Z0-9_]\\+\\).*$/\1/g'`
55 # this won't work, we need all actual labels
56 grep '[a-zA-Z0-9_.$]\+:' $TMPNAME.s | sed 's/^\(.*[^a-zA-Z0-9_.$]\)\?\([a-zA-Z0-9_.$]\+\):.*$/\2/g' > $TMPNAME.uniq
58 LABEL_ASM=`cat $TMPNAME.uniq`
60 # functionidentifiers from CALL-file
61 grep '[a-zA-Z_][a-zA-Z0-9_]*(.*)' ${i%.0}.call | sed 's/.*[^a-zA-Z_]\([a-zA-Z_][a-zA-Z0-9_]*\)(.*)\;/\1/g' | sort | uniq >> $TMPNAME.uniq
63 LABEL=`sort $TMPNAME.uniq | uniq -d`
69 $DUMPINSTR $TMPNAME $j > /dev/null
71 echo "$bi FEHLGESCHLAGEN"
77 for j in $LABEL_ASM; do
78 MATCHES="$MATCHES\\|$j"
82 grep "<\\($MATCHES\\)\\(+[0-9]*\\)\\?>:" $TMPNAME.trace > $TRACEDIR/$bi.trace
84 ni=`cat $TRACEDIR/$bi.trace | wc -l`
85 if [ -f $TEST/${bi}.instr ]; then
86 ti=`cat $TEST/$bi.instr`
88 echo "err: fuer den testfall \"$bi\" existiert noch keine referenzdatei. instruktionen werden verworfen."
92 if [ $ni -gt $ti ]; then
96 if [ $ni -eq $ti ]; then
105 echo -e "$bcolor $bi: $ni (referenz: $ti) \033[0m"
106 echo "$bi $ni" >> $RESULT
108 if [ -f $TEST/${bi}.instr ]; then
114 rm -f $TMPNAME $TMPNAME.s $TMPNAME.trace
120 echo " $gni Instruktionen"
121 echo " $gti Referenzinstruktionen"