diff options
Diffstat (limited to 'test/asm')
-rwxr-xr-x | test/asm/run-asm.sh | 59 | ||||
-rw-r--r-- | test/asm/should-fail/001-segfault-li-comma-end.asm | 2 | ||||
-rw-r--r-- | test/asm/should-fail/002-segfault-b-short.asm | 2 | ||||
-rw-r--r-- | test/asm/should-fail/003-segfault-j-short.asm | 2 | ||||
-rw-r--r-- | test/asm/should-fail/004-segfault-imm-short.asm | 2 |
5 files changed, 67 insertions, 0 deletions
diff --git a/test/asm/run-asm.sh b/test/asm/run-asm.sh new file mode 100755 index 0000000..7574abb --- /dev/null +++ b/test/asm/run-asm.sh @@ -0,0 +1,59 @@ +#!/bin/bash -e + +# +# Script for running all of the automated which will go from source to binary. +# + +fail() { + echo -e '[\e[1;31mFAIL\e[0m] '"$1:" "$2" + has_failure=1 +} + +pass() { + echo -e '[\e[1;32mPASS\e[0m] '"$1" +} + +clean() { + echo "Removing work dir $WORK" + rm -r "$WORK" +} + +if [ "$1" == "noclean" ]; then + NO_CLEAN=1 +else + NO_CLEAN=0 +fi +WORK=$(mktemp -d) +pushd $(dirname "$0") >/dev/null +source ../valgrind.sh +export ASM="$PWD/../../assembler" +export DISASM="$PWD/../../disassembler" +has_failure=0 + +for first_stage_asm in should-fail/*.asm ; do + t=$(basename "$first_stage_asm") + first_stage_bin="$WORK/${t}-first_stage.bin" + log="$WORK/${t}.log" + + # Assemble test code + set +e + $VALGRIND $VALGRIND_OPTS "$ASM" "$first_stage_asm" "$first_stage_bin" 2>"$log" + xc="$?" + set -e + if (( xc > 0 && xc < 128 )); then + pass "$t" "assembly xfailed" + elif (( xc == 0 )); then + fail "$t" "assembly didn't fail as expected" + else + fail "$t" "assembler was sent signal $(( xc - 128 ))" + fi +done +popd >/dev/null + +if [[ "$failure" != "0" && "$NO_CLEAN" == "1" ]] ; then + echo "Warning: Leaving work dir $WORK in place. Please remove this yourself" +else + clean +fi + +exit "$has_failure" diff --git a/test/asm/should-fail/001-segfault-li-comma-end.asm b/test/asm/should-fail/001-segfault-li-comma-end.asm new file mode 100644 index 0000000..bde586c --- /dev/null +++ b/test/asm/should-fail/001-segfault-li-comma-end.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +ldi $1,
\ No newline at end of file diff --git a/test/asm/should-fail/002-segfault-b-short.asm b/test/asm/should-fail/002-segfault-b-short.asm new file mode 100644 index 0000000..898a3b0 --- /dev/null +++ b/test/asm/should-fail/002-segfault-b-short.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +bnz
\ No newline at end of file diff --git a/test/asm/should-fail/003-segfault-j-short.asm b/test/asm/should-fail/003-segfault-j-short.asm new file mode 100644 index 0000000..0b1486b --- /dev/null +++ b/test/asm/should-fail/003-segfault-j-short.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +jmp
\ No newline at end of file diff --git a/test/asm/should-fail/004-segfault-imm-short.asm b/test/asm/should-fail/004-segfault-imm-short.asm new file mode 100644 index 0000000..42e8c4b --- /dev/null +++ b/test/asm/should-fail/004-segfault-imm-short.asm @@ -0,0 +1,2 @@ +; Test for bug previously found with scan-build. Important: no CR/LF at EOF +addi $0, $0,
\ No newline at end of file |