From 354b7dc7411769250cf50abc7c52a27b891cc0c7 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Wed, 28 Apr 2010 00:06:02 +0200 Subject: [PATCH] codea: offizielle testumgebung --- codea/Makefile | 6 +- codea/testit/callingconvention.c | 33 ------- codea/testit/test | 142 ------------------------------- codea/testit/testmain.c | 30 ------- 4 files changed, 1 insertion(+), 210 deletions(-) delete mode 100644 codea/testit/callingconvention.c delete mode 100755 codea/testit/test delete mode 100644 codea/testit/testmain.c diff --git a/codea/Makefile b/codea/Makefile index a7c5036..7439d1c 100644 --- a/codea/Makefile +++ b/codea/Makefile @@ -36,11 +36,7 @@ oxout.y oxout.l: parser.y scanner.lex clean: rm -f $(NAME) $(OBJS) scanner.c parser.{h,c,output} oxout.{y,l,h} code.c -1test: - @echo " CC callingconvention.c" - @gcc -c -fomit-frame-pointer -fno-defer-pop testit/callingconvention.c -o testit/callingconvention.o - @./testit/test - @rm testcodeaout*.s a.out +1test: 2test 2test: /usr/ftp/pub/ublu/test/$(NAME)/test 2>&1 diff --git a/codea/testit/callingconvention.c b/codea/testit/callingconvention.c deleted file mode 100644 index 018b1d1..0000000 --- a/codea/testit/callingconvention.c +++ /dev/null @@ -1,33 +0,0 @@ -/* gcc -c -fomit-frame-pointer -fno-defer-pop callingconvention.c */ - -#include - -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; -} diff --git a/codea/testit/test b/codea/testit/test deleted file mode 100755 index dc5e893..0000000 --- a/codea/testit/test +++ /dev/null @@ -1,142 +0,0 @@ -#! /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" diff --git a/codea/testit/testmain.c b/codea/testit/testmain.c deleted file mode 100644 index 6756a64..0000000 --- a/codea/testit/testmain.c +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include - -extern long callchecking(); - -#define RET return - -int call(void) -{ -#include CALL -} - -long labs(long); - -#ifdef DEFINE_G -long g(long x, long y) -{ - return h(x*2, y*3)+1; -} -#endif - -int main(int argc, char *argv[]) -{ - long r; - r=callchecking(); - if(r==0 || r==1) - return !r; - return r; -} - -- 2.25.1