33 lines
1.8 KiB
Bash
Executable file
33 lines
1.8 KiB
Bash
Executable file
#!/bin/sh
|
|
# program_stack.sh: JIT program threads run on program stacks (large lazily committed reservations
|
|
# with a guard; relax_base::stack::on_program_stack). stack/deep.rs recurses ~600 MiB deep, keeps a
|
|
# 256 MiB stack buffer and recurses on a spawned thread; stack/overflow.rs must end with a stack
|
|
# overflow report (MAKEPAD_RUN_STACK_GB=1), never hang or corrupt. Prints PROGRAM-STACK-OK or the
|
|
# failing case. Usage (workspace root, after cargo build --release -p makepad-run): TARGET=... program_stack.sh
|
|
here=$(cd "$(dirname "$0")" && pwd)
|
|
root=$(cd "$here/../../.." && pwd)
|
|
M=${TARGET:-$root/target/release}/makepad
|
|
export MAKEPAD_RUN_STD=${MAKEPAD_RUN_STD:-$root/libs/relax/compiler/std}
|
|
work=$(mktemp -d "${TMPDIR:-/tmp}/program_stack.XXXXXX") || exit 2
|
|
run() {
|
|
d=$work/$1; mkdir -p "$d/home" "$d/tmp"
|
|
shift
|
|
env MAKEPAD_HIDE_WINDOWS=1 MAKEPAD_MUTE=1 MAKEPAD_HOME="$d/home" TMPDIR="$d/tmp" MAKEPAD_RUN_HOME="$d/runhome" \
|
|
MAKEPAD_RUN_CACHE_DIR="$d/cache" "$@"
|
|
}
|
|
fail=0
|
|
for tier in "MAKEPAD_RUN_O1=always MAKEPAD_RUN_O3=0" "MAKEPAD_RUN_O3=1 MAKEPAD_RUN_O3_CALLS=1"; do
|
|
run deep env $tier "$M" test "$here/stack/deep.rs" > "$work/deep.out" 2> "$work/deep.err"
|
|
rc=$?
|
|
for want in "D deep 500000" "D buffer 8355840" "D thread 250000"; do
|
|
grep -q "^$want\$" "$work/deep.out" || { echo "program_stack: deep ($tier) rc $rc: missing '$want'"; tail -5 "$work/deep.err"; fail=1; }
|
|
done
|
|
done
|
|
run overflow env MAKEPAD_RUN_STACK_GB=1 "$M" test "$here/stack/overflow.rs" > "$work/ovf.out" 2> "$work/ovf.err"
|
|
rc=$?
|
|
if [ $rc = 0 ] || ! grep -q "stack overflow" "$work/ovf.err" "$work/ovf.out"; then
|
|
echo "program_stack: overflow rc $rc without a stack overflow report"; tail -5 "$work/ovf.err"; fail=1
|
|
fi
|
|
rm -r "$work"
|
|
[ $fail = 0 ] && echo PROGRAM-STACK-OK
|
|
exit $fail
|