cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

run_test.sh (2742B)


      1#!/usr/bin/env bash
      2
      3# Copyright (c) 2013 Kevin Wolf <kwolf@redhat.com>
      4#
      5# Permission is hereby granted, free of charge, to any person obtaining a copy
      6# of this software and associated documentation files (the "Software"), to deal
      7# in the Software without restriction, including without limitation the rights
      8# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      9# copies of the Software, and to permit persons to whom the Software is
     10# furnished to do so, subject to the following conditions:
     11#
     12# The above copyright notice and this permission notice shall be included in
     13# all copies or substantial portions of the Software.
     14#
     15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     18# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     20# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     21# THE SOFTWARE.
     22
     23QEMU=${QEMU:-"../../qemu-system-x86_64"}
     24
     25run_qemu() {
     26    local kernel=$1
     27    shift
     28
     29    printf %b "\n\n=== Running test case: $kernel $* ===\n\n" >> test.log
     30
     31    $QEMU \
     32        -kernel $kernel \
     33        -display none \
     34        -device isa-debugcon,chardev=stdio \
     35        -chardev file,path=test.out,id=stdio \
     36        -device isa-debug-exit,iobase=0xf4,iosize=0x4 \
     37        "$@" >> test.log 2>&1
     38    ret=$?
     39
     40    cat test.out >> test.log
     41
     42    debugexit=$((ret & 0x1))
     43    ret=$((ret >> 1))
     44
     45    if [ $debugexit != 1 ]; then
     46        printf %b "\e[31m ?? \e[0m $kernel $* (no debugexit used, exit code $ret)\n"
     47        pass=0
     48    elif [ $ret != 0 ]; then
     49        printf %b "\e[31mFAIL\e[0m $kernel $* (exit code $ret)\n"
     50        pass=0
     51    fi
     52}
     53
     54mmap() {
     55    run_qemu mmap.elf
     56    run_qemu mmap.elf -m 1.1M
     57    run_qemu mmap.elf -m 2G
     58    run_qemu mmap.elf -m 4G
     59    run_qemu mmap.elf -m 8G
     60}
     61
     62modules() {
     63    run_qemu modules.elf
     64    run_qemu modules.elf -initrd module.txt
     65    run_qemu modules.elf -initrd "module.txt argument"
     66    run_qemu modules.elf -initrd "module.txt argument,,with,,commas"
     67    run_qemu modules.elf -initrd "module.txt,module.txt argument,module.txt"
     68}
     69
     70aout_kludge() {
     71    for i in $(seq 1 9); do
     72        run_qemu aout_kludge_$i.bin
     73    done
     74}
     75
     76make all
     77
     78for t in mmap modules aout_kludge; do
     79
     80    echo > test.log
     81    pass=1
     82    $t
     83
     84    if ! diff $t.out test.log > /dev/null 2>&1; then
     85        printf %b "\e[31mFAIL\e[0m $t (output difference)\n"
     86        diff -u $t.out test.log
     87        pass=0
     88    fi
     89
     90    if [ $pass == 1 ]; then
     91        printf %b "\e[32mPASS\e[0m $t\n"
     92    fi
     93
     94done