+++ /dev/null
-/* gcc -c -fomit-frame-pointer -fno-defer-pop callingconvention.c */
-
-#include <stdlib.h>
-
-extern int call(void);
-
-/* geprueft werden callee gesicherte Register: rbx,r12-r15,
- * rsp (stackptr), rbp (frameptr) */
-
-#define CHECKNUM 0x1234567812345678
-long callchecking()
-{
- long ret;
- register long x0 asm("%rbx")=CHECKNUM+0;
- register long x1 asm("%r12")=CHECKNUM+1;
- register long x2 asm("%r13")=CHECKNUM+2;
- register long x3 asm("%r14")=CHECKNUM+3;
- register long x4 asm("%r15")=CHECKNUM+4;
- register long x5 asm("%rbp")=CHECKNUM+5;
- static void* origsp;
- void*newsp;
- asm("movq %%rsp,%0":"=g"(origsp):);
- ret=call();
- if(x0!=CHECKNUM+0) exit(11);
- if(x1!=CHECKNUM+1) exit(12);
- if(x2!=CHECKNUM+2) exit(13);
- if(x3!=CHECKNUM+3) exit(14);
- if(x4!=CHECKNUM+4) exit(15);
- if(x5!=CHECKNUM+5) exit(16);
- asm("movq %%rsp,%0":"=g"(newsp):);
- if(origsp!=newsp) exit(30);
- return ret;
-}
+++ /dev/null
-#! /bin/bash
-
-beispiel=codea
-PROGRAM=./$beispiel
-
-errnum=0
-prgnum=0
-
-#LOC=.
-LOC=/usr/ftp/pub/ubvl/test/$beispiel
-LOC2=~/test/$beispiel
-
-/usr/ftp/pub/ublu/test/accounttest || exit 1
-allow_null_glob_expansion=1
-
-if [ ! -d ~/abgabe/$beispiel ]; then
- echo "Fehler: Verzeichnis ~/abgabe/$beispiel existiert nicht."
- exit 1
-else
- cd ~/abgabe/$beispiel
- echo 'Teste "make clean"'
- make clean
- /usr/ftp/pub/ubvl/test/cleantest
- echo 'Teste "make"'
- make
-fi
-
-if test ! -x $PROGRAM
-then
- echo "Fehler: Kein Programm $PROGRAM"
- exit 1
-fi
-let prgnum=0
-for i in $LOC2/*.0
-do
- if [ -f $i ]; then
- let prgnum=prgnum+1
- let errorfound=0
- echo "==========> Eingabe von $i:"
- cat $i
- echo
- RESFILE=test${beispiel}out$$
- $PROGRAM <$i >$RESFILE
- retval=$?
- echo -n "Übersetzung: "
- if test $retval -eq 0
- then
- echo "Status korrekt"
- else
- echo "[Errot] Status=$retval. Erwartet: 0"
- let errorfound=1
- fi
- echo
- echo "Ausgabe:"
- cat $RESFILE
- mv -f $RESFILE $RESFILE.s
- CALLFILE=${i%.*}.call
- echo
- if [ ! -f $CALLFILE ]; then
- echo "Fehler: Datei $CALLFILE existiert nicht, kann Code nicht ausführen..."
- exit 1
- else
- echo "Übersetze und linke das Testprogramm:"
- if cc -g -I. -DCALL=\"$CALLFILE\" ~/abgabe/codea/testit/testmain.c ~/abgabe/codea/testit/callingconvention.o $RESFILE.s; then
- echo
- echo "Rufe folgendes Codefragment auf:"
- cat $CALLFILE
- echo
- ./a.out
- retval=$?
- # test callee saved registers
- if [ "$retval" -ge 12 ] && [ "$retval" -le 15 ]; then
- echo "[Error] Callee-saved register %r$retval modified."
- let errorfound=1
- elif [ "$retval" -eq 11 ]; then
- echo "[Error] Callee-saved register %rbx modified."
- let errorfound=1
- elif [ "$retval" -eq 16 ]; then
- echo "[Error] Callee-saved register %rbp modified."
- let errorfound=1
- elif [ "$retval" -eq 30 ]; then
- echo "[Error] Stack pointer %rsp modified."
- let errorfound=1
- else
- # test signals
- test $retval -gt 127
- retsig=$?
- test ${i##*.} = xin
- expsig=$?
- if test $retsig -eq $expsig; then
- if test $retval -eq 1; then
- echo "[Error] Das Ergebnis des Aufrufs ist falsch."
- let errorfound=1
- elif test $retval -eq 0; then
- echo "Das Ergebnis des Ausdrucks ist korrekt."
- else
- echo "[Error] Erzeugter Code verhaelt sich bzgl. Signalerzeugung anders als erwartet."
- let errorfound=1
- fi
- else
- echo "[Error] Erzeugter Code verhaelt sich bezueglich Signalerzeugung anders als erwartet."
- let errorfound=1
- echo "Rueckgabewert = $retval";
- fi
- fi
- echo
- else
- echo "[Error] Erzeugter Code konnte nicht assembliert und gelinkt werden."
- let errorfound=1
- fi
- fi
- let errnum=errnum+errorfound
- #rm -f a.out $RESFILE $RESFILE.s
- fi
-done
-
-for i in $LOC2/*.[123]
-do
- if [ -f $i ]; then
- let prgnum=prgnum+1
- echo "==========> Eingabe von $i:"
- cat $i
- echo
- echo "Ausgabe:"
- $PROGRAM <$i
- retval=$?
- if test $retval -eq ${i#*.}
- then
- echo "Status: korrekt"
- else
- echo "[Error] Status: $retval. Erwartet: ${i#*.}"
- let errnum=errnum+1
- fi
- echo
-fi
-done
-let corrnum=prgnum-errnum
-echo "Statistics: "
-echo "==========="
-echo " $prgnum Tests total"
-echo " $corrnum Tests passed"
-echo " $errnum Tests failed"