You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pwndbg/tests/qemu-tests/test_qemu.sh

61 lines
1.4 KiB
Bash

#!/usr/bin/env bash
make -C binaries
ROOT_DIR="$(readlink -f ../../)"
GDB_INIT_PATH="$ROOT_DIR/gdbinit.py"
COVERAGERC_PATH="$ROOT_DIR/pyproject.toml"
handle_sigint() {
echo "Exiting..." >&2
pkill qemu-aarch64
pkill qemu-riscv64
exit 1
}
trap handle_sigint SIGINT
gdb_load_pwndbg=(--command "$GDB_INIT_PATH" -ex "set exception-verbose on")
run_gdb() {
COVERAGE_FILE=$ROOT_DIR/.cov/coverage \
COVERAGE_PROCESS_START=$COVERAGERC_PATH \
PWNDBG_DISABLE_COLORS=1 \
gdb-multiarch --silent --nx --nh "${gdb_load_pwndbg[@]}" "$@" -ex "quit" 2> /dev/null
return $?
}
test_arch() {
local arch="$1"
qemu-${arch} \
-g 1234 \
-L /usr/${arch}-linux-gnu/ \
./binaries/reference-binary.${arch}.out &
run_gdb \
-ex "set sysroot /usr/${arch}-linux-gnu/" \
-ex "file ./binaries/reference-binary.${arch}.out" \
-ex 'py import coverage;coverage.process_startup()' \
-ex "target remote :1234" \
-ex "source ./tests/user/test_${arch}.py"
local result=$?
pkill qemu-${arch}
return $result
}
ARCHS=("aarch64" "riscv64")
FAILED_TESTS=()
for arch in "${ARCHS[@]}"; do
test_arch "$arch"
if [ $? -ne 0 ]; then
FAILED_TESTS+=("$arch")
fi
done
if [ "${#FAILED_TESTS[@]}" -ne 0 ]; then
echo ""
echo "Failing tests: ${FAILED_TESTS[@]}"
echo ""
exit 1
fi