#!/bin/sh
# DF-5171/DF-5172 guest-side prep (run INSIDE the DF QEMU guest as root,
# with vcd_trim_poc.c / vcd_race_poc.c pushed to /root/vk/src/).
set -eux
cd /root/vk

# --- static PoCs -------------------------------------------------------------
cc -static -O2 -o poc  src/vcd_trim_poc.c
cc -static -O2 -o race src/vcd_race_poc.c

# --- root.img: 128 MB UFS, /poc + /race + /dev -------------------------------
if [ ! -f root.img ]; then
	dd if=/dev/zero of=root.img bs=1m count=128
	vnconfig -c vn0 root.img
	disklabel -r -w vn0 auto
	disklabel -r vn0 > label.proto
	sed -e 's|^#a:          \*           \*    4.2BSD|a:          *           *    4.2BSD|' \
	    label.proto > label.new
	disklabel -r -R vn0 label.new
	newfs /dev/vn0s0a
	mount /dev/vn0s0a /mnt
	mkdir -p /mnt/dev /mnt/tmp
	cp poc race /mnt/
	umount /mnt
	vnconfig -u vn0
fi

# --- ffs.img: 64 MB UFS w/ junk/data.bin, passed to vkernel via -c -----------
dd if=/dev/zero of=ffs.img bs=1m count=64
vnconfig -c vn0 ffs.img
disklabel -r -w vn0 auto
disklabel -r vn0 > label.proto
sed -e 's|^#a:          \*           \*    4.2BSD|a:          *           *    4.2BSD|' \
    label.proto > label.new
disklabel -r -R vn0 label.new
newfs /dev/vn0s0a
mount /dev/vn0s0a /mnt
mkdir -p /mnt/junk
dd if=/dev/zero of=/mnt/junk/data.bin bs=1m count=4
umount /mnt
vnconfig -u vn0

sysctl vm.vkernel_enable=1
echo PREP-DONE
