diff options
author | Oxore <oxore@protonmail.com> | 2023-04-20 00:33:16 +0300 |
---|---|---|
committer | Oxore <oxore@protonmail.com> | 2023-04-20 00:33:16 +0300 |
commit | b8ef5e29962f052a392a7f9c491bd3f1819b9d35 (patch) | |
tree | 2da34b6ec298dc195cf65de92087a45b3afae3f0 /test.bash | |
parent | c8b90b4c016738d7cb084e3e38284febd0c46018 (diff) |
Impl tests against GNU AS in bash
Diffstat (limited to 'test.bash')
-rw-r--r-- | test.bash | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test.bash b/test.bash new file mode 100644 index 0000000..d258bbb --- /dev/null +++ b/test.bash @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +# +# SPDX-License-Identifier: Unlicense +# +# Tests against m68k-none-elf-as. + +AS=m68k-none-elf-as +OBJCOPY=m68k-none-elf-objcopy +TEST_DIR=/tmp/m68k-disasm-tests +TRACE_FILE=${TEST_DIR}/trace.txt + +set -e + +rm -rf ${TEST_DIR} +mkdir -p ${TEST_DIR} +echo "0" >${TRACE_FILE} + +run_test() { + test_name=$1 + prefix=$2 + offset=$3 + count=$4 + suffix=$5 + file_orig_bin=${TEST_DIR}/${test_name}.orig.bin + file_asm=${TEST_DIR}/${test_name}.S + file_as_o=${TEST_DIR}/${test_name}.as.o + file_as_bin=${TEST_DIR}/${test_name}.as.bin + for i in $(seq 0 $(( count-1 )) ); do + echo -ne "Test ${test_name}:$i... " + value=$(printf "%02x\n" $(( offset+i ))) + echo -ne "${prefix}\x${value}${suffix}" >${file_orig_bin} + ./cmake-build/m68k-disasm -t ${TRACE_FILE} -o ${file_asm} ${file_orig_bin} + ${AS} -o ${file_as_o} ${file_asm} + ${OBJCOPY} ${file_as_o} -O binary ${file_as_bin} + if ! cmp ${file_orig_bin} ${file_as_bin}; then + echo "" + echo ${file_orig_bin} + hexdump -Cv ${file_orig_bin} | head -n1 + echo ${file_as_bin} + hexdump -Cv ${file_as_bin} | head -n1 + break; + else + echo "OK" + fi + done +} + +jsr_m2() { + # 4e90..4e97 + # + run_test ${FUNCNAME} "\x4e" 0x90 8 "" +} + +jsr_m6() { + # (4ea8..4eaf) 0000 + # + # XXX this test fails with suffix "\x00\x00", because GNU AS makes + # optimization and inserts jsr M2/"(An)" (0x4e90) version instead. Hence the + # disassembler must generate ".short" alternative in such cases. But it may be + # irrelevant in practice if this variant simply does not exist in the wild. + # + # Positive value + run_test ${FUNCNAME} "\x4e" 0xa8 8 "\x00\x0a" + # Negative value + run_test ${FUNCNAME} "\x4e" 0xa8 8 "\x80\x0f" +} + +jsr_m2 +jsr_m6 |