compiler/
kernel/
lib/
scripts/
seed/
sublime/
test/
acceptance/
boot/
machine.ras
230 B
run
2.1 KiB
trap.ras
248 B
bootstrap/
cycles/
dispatch/
loader/
mmio/
modules/
native/
packages/
pages/
runtime/
scheduling/
shared/
slots/
smp/
sync/
termination/
tests/
trap/
run
2.7 KiB
runner.rad
10.3 KiB
vim/
.gitignore
336 B
.gitsigners
112 B
CONTRIBUTING
2.1 KiB
LICENSE
1.1 KiB
Makefile
10.2 KiB
README
2.5 KiB
STYLE
2.5 KiB
std.lib
1.5 KiB
std.lib.test
551 B
test/boot/run
raw
| 1 | #!/bin/sh |
| 2 | # Boot the kernel through its production initialization on each supported hart count. |
| 3 | set -eu |
| 4 | emulator=${RAD_EMULATOR:-emulator} |
| 5 | work=$(mktemp -d) |
| 6 | trap 'rm -rf "$work"' EXIT HUP INT TERM |
| 7 | cat test/boot/machine.ras kernel/kernel/*.ras > "$work/boot.ras" |
| 8 | "$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/kernel.build.rv64 -- bin/std.ril bin/kernel.ril "$work/boot.ras" "$work/boot.rv64" |
| 9 | for harts in 1 2 8; do |
| 10 | # The deterministic emulator shares its tick budget across all harts. |
| 11 | steps=$((10000000 * harts)) |
| 12 | if ! "$emulator" -machine -max-steps="$steps" -harts="$harts" -run "$work/boot.rv64" > "$work/log" 2>&1; then |
| 13 | cat "$work/log" >&2 |
| 14 | exit 1 |
| 15 | fi |
| 16 | if ! grep -q '^kernel: platform ready$' "$work/log"; then |
| 17 | cat "$work/log" >&2 |
| 18 | exit 1 |
| 19 | fi |
| 20 | if ! grep -q '^kernel: boot catalog ready$' "$work/log"; then |
| 21 | cat "$work/log" >&2 |
| 22 | exit 1 |
| 23 | fi |
| 24 | printf 'kernel boot: %s harts passed\n' "$harts" |
| 25 | done |
| 26 | cat kernel/kernel/*.ras > "$work/idle.ras" |
| 27 | "$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/kernel.build.rv64 -- bin/std.ril bin/kernel.ril "$work/idle.ras" "$work/idle.rv64" |
| 28 | status=0 |
| 29 | "$emulator" -machine -harts=8 -max-steps=80000000 -run "$work/idle.rv64" > "$work/log" 2>&1 || status=$? |
| 30 | if [ "$status" -ne 2 ] || [ "$(grep -c 'wfi=1 mcause=0x0' "$work/log")" -ne 8 ]; then |
| 31 | cat "$work/log" >&2 |
| 32 | exit 1 |
| 33 | fi |
| 34 | printf 'kernel startup: all eight harts reached machine idle without traps\n' |
| 35 | cat test/boot/trap.ras kernel/kernel/*.ras > "$work/trap.ras" |
| 36 | "$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/kernel.build.rv64 -- bin/std.ril bin/kernel.ril "$work/trap.ras" "$work/trap.rv64" |
| 37 | status=0 |
| 38 | "$emulator" -machine -harts=2 -max-steps=20000000 -run "$work/trap.rv64" > "$work/log" 2>&1 || status=$? |
| 39 | if [ "$status" -ne 2 ] || [ "$(grep -c '^kernel: unexpected trap$' "$work/log")" -ne 1 ] \ |
| 40 | || [ "$(grep -c 'wfi=1' "$work/log")" -ne 2 ]; then |
| 41 | cat "$work/log" >&2 |
| 42 | exit 1 |
| 43 | fi |
| 44 | printf 'kernel trap: shared kernel state restored from the hart anchor\n' |