test/bootstrap/run 1.5 KiB raw
1
#!/bin/sh
2
# Construct root from a boot package and retain authority after root exits.
3
set -eu
4
emulator=${RAD_EMULATOR:-emulator}
5
work=$(mktemp -d)
6
trap 'rm -rf "$work"' EXIT HUP INT TERM
7
mkdir "$work/loaded"
8
cp test/bootstrap/root.rad "$work/loaded.rad"
9
cp kernel/kernel/abi.rad kernel/kernel/sys.rad "$work/loaded/"
10
"$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/radiance.rv64.dev \
11
    -pkg loaded -mod "$work/loaded.rad" -mod "$work/loaded/abi.rad" -mod "$work/loaded/sys.rad" -entry loaded -ril "$work"
12
"$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/radiance.rv64.dev \
13
    -pkg service -mod test/bootstrap/service.rad -entry service -ril "$work"
14
cp kernel/kernel.rad "$work/kernel.rad"
15
printf '\nexport mod dispatchcheck;\n' >> "$work/kernel.rad"
16
mkdir "$work/kernel"
17
cp kernel/kernel/*.rad "$work/kernel/"
18
cp test/bootstrap/kernel/dispatchcheck.rad "$work/kernel/"
19
sh test/acceptance/compile "$emulator" "$work"
20
cat test/bootstrap/machine.ras kernel/kernel/*.ras > "$work/bootstrap.ras"
21
"$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 -run bin/kernel.build.rv64 \
22
    -- "$work/std.ril" "$work/kernel.ril" "$work/bootstrap.ras" "$work/bootstrap.rv64" "$work/loaded.ril" "$work/service.ril"
23
if [ "${KERNEL_REPLAY:-0}" = 1 ]; then
24
    sh test/acceptance/replay bootstrap "$emulator" "$work/bootstrap.rv64" 1
25
else
26
    "$emulator" -machine -harts=1 -memory-size=262144 -max-steps=2000000000 -run "$work/bootstrap.rv64"
27
fi
28
printf 'bootstrap: root exit preserves allocation and creation authority\n'