⬢ DragonFlyBSD Kernel Audit
DF-4806 / modbuild.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-4806 module build -- run as root on the DragonFly guest.
# Builds ppbus.ko (with PERIPH_1284), ppc.ko, and ppi.ko from /usr/src,
# out-of-tree (the audit's sys/ tree is never modified).
#
# $1 = ppi.c variant: "stock" | "armed" | "fixed"
#     stock  : /usr/src/sys/dev/misc/ppi/ppi.c as shipped
#     armed  : stock + arming.diff  (RF_SHAREABLE added at ppi.c:160 only)
#     fixed  : stock + fix.diff     (RF_SHAREABLE + correct handler arg)
set -e
V="${1:-stock}"
MOD=/root/ppimod

mkdir -p $MOD/{ppbus,ppc,ppi}

# --- PERIPH_1284 kernel option (in-tree only in LINT64) -------------------
# The kmod machinery auto-creates an empty opt_ppb_1284.h (satisfying the
# #include); the option itself comes from CFLAGS.
cat > $MOD/opt_ppc.h <<'EOF'
/* empty: default ppc configuration */
EOF

# --- ppbus ----------------------------------------------------------------
cat > $MOD/ppbus/Makefile <<'EOF'
.PATH:  /usr/src/sys/bus/ppbus
KMOD=   ppbus
SRCS=   bus_if.h device_if.h ppbus_if.h ppbus_if.c \
        opt_ppb_1284.h \
        ppb_1284.c ppb_base.c ppb_msq.c ppbconf.c
COPTS+= -DPERIPH_1284
.include <bsd.kmod.mk>
EOF

# --- ppc ------------------------------------------------------------------
cp $MOD/opt_ppc.h $MOD/ppc/opt_ppc.h 2>/dev/null || true
cat > $MOD/ppc/Makefile <<'EOF'
.PATH:  /usr/src/sys/dev/misc/ppc /usr/src/sys/bus/ppbus /usr/src/sys/bus/isa
KMOD=   ppc
SRCS=   bus_if.h device_if.h isa_if.h ppbus_if.h opt_ppb_1284.h opt_ppc.h ppc.c
COPTS+= -DPERIPH_1284
.include <bsd.kmod.mk>
EOF

# --- ppi ------------------------------------------------------------------
cat > $MOD/ppi/Makefile <<'EOF'
.PATH:  /usr/src/sys/dev/misc/ppi /usr/src/sys/bus/ppbus
KMOD=   ppi
SRCS=   bus_if.h device_if.h ppbus_if.h \
        opt_ppb_1284.h ppi.c
COPTS+= -DPERIPH_1284
.include <bsd.kmod.mk>
EOF

# --- ppi.c variant ---------------------------------------------------------
cp /root/ppimod/ppi.c.orig /usr/src/sys/dev/misc/ppi/ppi.c
case "$V" in
  armed) (cd /usr/src/sys/dev/misc/ppi && patch -s < $MOD/arming.diff) ;;
  fixed) (cd /usr/src/sys/dev/misc/ppi && patch -s < $MOD/fix.diff) ;;
  stock) ;;
esac

for m in ppbus ppc ppi; do
  (cd $MOD/$m && rm -f *.ko *.o *.h 2>/dev/null || true
   rm -f bus_if.h device_if.h ppbus_if.h ppbus_if.c opt_ppb_1284.h
   cp $MOD/opt_ppb_1284.h . 2>/dev/null || true
   make SYSDIR=/usr/src/sys clean >/dev/null 2>&1 || true
   make SYSDIR=/usr/src/sys)
done
echo "BUILD_OK variant=$V"