test/cycles/run 2.2 KiB raw
1
#!/bin/sh
2
# Compile a dependency, controllers, and a worker loaded after dispatch starts.
3
set -eu
4
emulator=${RAD_EMULATOR:-emulator}
5
harts=${1:-1 2 8}
6
work=$(mktemp -d)
7
trap 'rm -rf "$work"' EXIT HUP INT TERM
8
for package in spin job; do
9
    mkdir "$work/$package"
10
    cp "test/cycles/$package.rad" "$work/$package.rad"
11
    cp kernel/kernel/abi.rad kernel/kernel/sys.rad "$work/$package/"
12
    set -- -pkg support -mod test/cycles/support.rad -pkg "$package" -mod "$work/$package.rad" \
13
        -mod "$work/$package/abi.rad" -mod "$work/$package/sys.rad"
14
    if [ "$package" = spin ]; then
15
        cp kernel/mmio.rad "$work/spin/"
16
        set -- "$@" -mod "$work/spin/mmio.rad"
17
    fi
18
    "$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/radiance.rv64.dev "$@" -entry "$package" -ril "$work"
19
done
20
mkdir "$work/kernel"
21
cp kernel/kernel.rad "$work/kernel.rad"
22
printf '\nexport mod dispatchcheck;\nexport mod dispatchinput;\nexport mod invariants;\n' >> "$work/kernel.rad"
23
cp kernel/kernel/*.rad "$work/kernel/"
24
cp test/cycles/kernel/dispatchcheck.rad test/smp/kernel/invariants.rad "$work/kernel/"
25
for package in support spin job; do
26
    length=$(wc -c < "$work/$package.ril")
27
    printf '/// Complete trusted %s package.\nexport static %s: [u8; %s] = [\n' "$package" "$package" "$length" >> "$work/kernel/dispatchinput.rad"
28
    od -An -v -tu1 "$work/$package.ril" | awk '{ for (i = 1; i <= NF; i++) printf "%s,", $i; print "" }' >> "$work/kernel/dispatchinput.rad"
29
    printf '];\n' >> "$work/kernel/dispatchinput.rad"
30
done
31
sh test/acceptance/compile "$emulator" "$work"
32
cat test/cycles/machine.ras kernel/kernel/*.ras > "$work/cycles.ras"
33
"$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/kernel.build.rv64 \
34
    -- "$work/std.ril" "$work/kernel.ril" "$work/cycles.ras" "$work/cycles.rv64"
35
for count in $harts; do
36
    if [ "${KERNEL_REPLAY:-0}" = 1 ]; then
37
        sh test/acceptance/replay cycles "$emulator" "$work/cycles.rv64" "$count" -max-steps=10000000000
38
    else
39
        "$emulator" -machine -harts="$count" -memory-size=262144 -max-steps=10000000000 -run "$work/cycles.rv64"
40
    fi
41
    printf 'cycles: %s-hart load, spawn, yield, fault, and recovery passed\n' "$count"
42
done