aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/boot/ci-qemu-test.sh4
-rw-r--r--tools/boot/full-test.sh118
-rwxr-xr-xtools/boot/install-boot.sh52
-rwxr-xr-xtools/boot/lua-lint.sh2
-rw-r--r--tools/boot/smbios/Makefile1
-rwxr-xr-xtools/boot/universe.sh2
-rw-r--r--tools/bsdbox/Makefile6
-rw-r--r--tools/bsdbox/Makefile.base3
-rw-r--r--tools/bsdbox/Makefile.hostapd26
-rw-r--r--tools/bsdbox/Makefile.net1
-rw-r--r--tools/build/Makefile83
-rwxr-xr-xtools/build/absolute-symlink.sh49
-rwxr-xr-xtools/build/beinstall.sh2
-rw-r--r--tools/build/bootstrap-m4/Makefile1
-rwxr-xr-xtools/build/checkstyle9.pl42
-rw-r--r--tools/build/cross-build/Makefile1
-rw-r--r--tools/build/cross-build/fake_chflags/Makefile1
-rw-r--r--tools/build/cross-build/fake_sysctl.c1
-rw-r--r--tools/build/cross-build/include/common/ssp/ssp.h (renamed from tools/build/cross-build/fflags.c)40
-rw-r--r--tools/build/cross-build/include/common/sys/_types.h6
-rw-r--r--tools/build/cross-build/include/linux/fcntl.h7
-rw-r--r--tools/build/cross-build/include/linux/limits.h5
-rw-r--r--tools/build/cross-build/include/linux/string.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/param.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/stat.h28
-rw-r--r--tools/build/cross-build/include/linux/sys/types.h28
-rw-r--r--tools/build/cross-build/include/mac/string.h7
-rw-r--r--tools/build/cross-build/include/mac/sys/_types.h2
-rw-r--r--tools/build/cross-build/mkimg/Makefile1
-rw-r--r--tools/build/cross-build/progname.c2
-rwxr-xr-xtools/build/depend-cleanup.sh243
-rwxr-xr-xtools/build/make.py2
-rw-r--r--tools/build/make_check/Makefile1
-rw-r--r--tools/build/mk/Makefile.boot5
-rw-r--r--tools/build/mk/Makefile.boot.pre1
-rw-r--r--tools/build/mk/OptionalObsoleteFiles.inc4349
-rw-r--r--tools/build/options/WITHOUT_AUTOFS2
-rw-r--r--tools/build/options/WITHOUT_BRANCH_PROTECTION1
-rw-r--r--tools/build/options/WITHOUT_GH_BC5
-rw-r--r--tools/build/options/WITHOUT_GNU_DIFF5
-rw-r--r--tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE5
-rw-r--r--tools/build/options/WITHOUT_LLVM_BINUTILS17
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_SPARC4
-rw-r--r--tools/build/options/WITHOUT_LOADER_BIOS_TEXTONLY2
-rw-r--r--tools/build/options/WITHOUT_LOADER_IA321
-rw-r--r--tools/build/options/WITHOUT_LOADER_PXEBOOT10
-rw-r--r--tools/build/options/WITHOUT_MALLOC_PRODUCTION7
-rw-r--r--tools/build/options/WITHOUT_SSP3
-rw-r--r--tools/build/options/WITHOUT_UNDEFINED_VERSION2
-rw-r--r--tools/build/options/WITHOUT_ZEROREGS2
-rw-r--r--tools/build/options/WITHOUT_ZFS_TESTS1
-rw-r--r--tools/build/options/WITH_BEARSSL19
-rw-r--r--tools/build/options/WITH_BRANCH_PROTECTION4
-rw-r--r--tools/build/options/WITH_CCACHE_BUILD7
-rw-r--r--tools/build/options/WITH_CLEAN1
-rw-r--r--tools/build/options/WITH_GNU_DIFF2
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_SPARC4
-rw-r--r--tools/build/options/WITH_LOADER_BIOS_TEXTONLY3
-rw-r--r--tools/build/options/WITH_LOADER_IA321
-rw-r--r--tools/build/options/WITH_LOADER_PXEBOOT25
-rw-r--r--tools/build/options/WITH_LOADER_VERIEXEC2
-rw-r--r--tools/build/options/WITH_MALLOC_PRODUCTION7
-rw-r--r--tools/build/options/WITH_MITKRB51
-rw-r--r--tools/build/options/WITH_SSP3
-rw-r--r--tools/build/options/WITH_UNDEFINED_VERSION4
-rw-r--r--tools/build/options/WITH_ZEROREGS4
-rw-r--r--tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT5
-rwxr-xr-xtools/build/options/makeman6
-rw-r--r--tools/build/options/makeman.lua791
-rwxr-xr-xtools/build/stale-symlink-buildworld.sh64
-rw-r--r--tools/build/test-includes/Makefile3
-rw-r--r--tools/build/test-includes/badfiles.inc22
-rw-r--r--tools/bus_space/C/Makefile1
-rw-r--r--tools/bus_space/Makefile1
-rw-r--r--tools/bus_space/Makefile.inc1
-rw-r--r--tools/bus_space/Python/Makefile1
-rw-r--r--tools/diag/dumpvfscache/Makefile1
-rw-r--r--tools/diag/localeck/Makefile1
-rw-r--r--tools/diag/prtblknos/Makefile1
-rw-r--r--tools/diag/prtblknos/main.c7
-rw-r--r--tools/diag/prtblknos/prtblknos.c4
-rwxr-xr-xtools/ifnet/convert_ifapi.sh2
-rw-r--r--tools/kerneldoc/Makefile1
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_altera19
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_beri19
-rw-r--r--tools/regression/aio/aiop/Makefile1
-rw-r--r--tools/regression/bpf/Makefile1
-rw-r--r--tools/regression/bpf/bpf_filter/Makefile3
-rw-r--r--tools/regression/capsicum/syscalls/Makefile1
-rw-r--r--tools/regression/capsicum/syscalls/cap_fcntls_limit.c1
-rw-r--r--tools/regression/capsicum/syscalls/cap_getmode.c1
-rw-r--r--tools/regression/capsicum/syscalls/cap_ioctls_limit.c1
-rw-r--r--tools/regression/capsicum/syscalls/misc.c1
-rw-r--r--tools/regression/capsicum/syscalls/misc.h1
-rw-r--r--tools/regression/doat/Makefile1
-rw-r--r--tools/regression/ethernet/ethermulti/Makefile1
-rw-r--r--tools/regression/fsx/Makefile1
-rw-r--r--tools/regression/gaithrstress/Makefile1
-rw-r--r--tools/regression/geom/ConfCmp/Makefile1
-rw-r--r--tools/regression/geom/MdLoad/Makefile1
-rw-r--r--tools/regression/geom_gpt/Makefile1
-rw-r--r--tools/regression/include/stdatomic/Makefile1
-rw-r--r--tools/regression/include/tgmath/Makefile1
-rw-r--r--tools/regression/kgssapi/Makefile1
-rw-r--r--tools/regression/kthread/kld/Makefile1
-rw-r--r--tools/regression/lib/libc/regex/Makefile1
-rw-r--r--tools/regression/mlock/Makefile1
-rw-r--r--tools/regression/net80211/ccmp/Makefile1
-rw-r--r--tools/regression/net80211/tkip/Makefile1
-rw-r--r--tools/regression/net80211/wep/Makefile1
-rw-r--r--tools/regression/netinet/arphold/Makefile1
-rw-r--r--tools/regression/netinet/ipbroadcast/ipbroadcast.c29
-rw-r--r--tools/regression/netinet/msocket/Makefile1
-rw-r--r--tools/regression/netinet/msocket_ifnet_remove/Makefile1
-rw-r--r--tools/regression/netinet/tcpfullwindowrst/Makefile1
-rw-r--r--tools/regression/netinet/udpconnectjail/Makefile1
-rw-r--r--tools/regression/netinet/udpzerobyte/Makefile1
-rw-r--r--tools/regression/nfsmmap/Makefile1
-rw-r--r--tools/regression/nfsmmap/test1/Makefile1
-rw-r--r--tools/regression/nfsmmap/test2/Makefile1
-rw-r--r--tools/regression/p1003_1b/Makefile1
-rw-r--r--tools/regression/posixsem/Makefile1
-rw-r--r--tools/regression/posixsem2/Makefile1
-rw-r--r--tools/regression/pthread/cv_cancel1/Makefile1
-rw-r--r--tools/regression/pthread/mutex_isowned_np/Makefile1
-rw-r--r--tools/regression/redzone9/Makefile1
-rw-r--r--tools/regression/rpcsec_gss/Makefile1
-rw-r--r--tools/regression/security/access/Makefile1
-rw-r--r--tools/regression/security/cap_test/Makefile1
-rw-r--r--tools/regression/security/open_to_operation/Makefile1
-rw-r--r--tools/regression/security/proc_to_proc/Makefile1
-rw-r--r--tools/regression/sigqueue/Makefile1
-rw-r--r--tools/regression/sigqueue/sigqtest1/Makefile1
-rw-r--r--tools/regression/sigqueue/sigqtest2/Makefile1
-rw-r--r--tools/regression/sockets/listen_backlog/Makefile1
-rw-r--r--tools/regression/sockets/listen_kqueue/Makefile1
-rw-r--r--tools/regression/sockets/pr_atomic/Makefile1
-rw-r--r--tools/regression/sockets/rtsocket/Makefile1
-rw-r--r--tools/regression/sockets/so_setfib/Makefile1
-rw-r--r--tools/regression/sockets/udp_pingpong/Makefile1
-rw-r--r--tools/regression/sockets/unix_bindconnect/Makefile1
-rw-r--r--tools/regression/sockets/unix_close_race/Makefile1
-rw-r--r--tools/regression/sockets/unix_cmsg/Makefile1
-rw-r--r--tools/regression/sockets/unix_gc/Makefile1
-rw-r--r--tools/regression/sockets/unix_sendtorace/Makefile1
-rw-r--r--tools/regression/sockets/unix_socket/Makefile1
-rw-r--r--tools/regression/sockets/unix_sorflush/Makefile1
-rw-r--r--tools/regression/sockets/zerosend/Makefile1
-rw-r--r--tools/regression/tls/Makefile1
-rw-r--r--tools/regression/tls/libxx/Makefile1
-rw-r--r--tools/regression/tls/libyy/Makefile1
-rw-r--r--tools/regression/tls/ttls1/Makefile1
-rw-r--r--tools/regression/tls/ttls2/Makefile1
-rw-r--r--tools/regression/tls/ttls3/Makefile3
-rw-r--r--tools/regression/tls/ttls4/Makefile1
-rw-r--r--tools/regression/ufs/uprintf/Makefile1
-rw-r--r--tools/regression/usr.bin/cc/Makefile1
-rw-r--r--tools/regression/usr.bin/env/Makefile1
-rw-r--r--tools/test/README2
-rw-r--r--tools/test/arc4random/biastest.c216
-rw-r--r--tools/test/auxinfo/Makefile1
-rw-r--r--tools/test/bsnmp/Makefile2
-rw-r--r--tools/test/buf_ring/Makefile7
-rw-r--r--tools/test/buf_ring/buf_ring_test.c322
-rwxr-xr-xtools/test/buf_ring/run.sh16
-rw-r--r--tools/test/callout_free/Makefile1
-rw-r--r--tools/test/gpioevents/Makefile1
-rw-r--r--tools/test/iconv/Makefile1
-rw-r--r--tools/test/iconv/gnu/Makefile1
-rw-r--r--tools/test/iconv/posix/Makefile1
-rw-r--r--tools/test/iconv/refgen/Makefile1
-rw-r--r--tools/test/iconv/tablegen/Makefile1
-rw-r--r--tools/test/net/Makefile1
-rw-r--r--tools/test/netfibs/Makefile1
-rw-r--r--tools/test/popss/popss.c1
-rw-r--r--tools/test/ppsapi/Makefile1
-rw-r--r--tools/test/ptrace/Makefile1
-rw-r--r--tools/test/sort/regression/Makefile1
-rwxr-xr-xtools/test/stress2/misc/aesni.sh5
-rw-r--r--tools/test/stress2/misc/all.exclude13
-rwxr-xr-xtools/test/stress2/misc/buildkernel.sh1
-rwxr-xr-xtools/test/stress2/misc/buildworld.sh1
-rwxr-xr-xtools/test/stress2/misc/buildworld2.sh1
-rwxr-xr-xtools/test/stress2/misc/buildworld3.sh1
-rwxr-xr-xtools/test/stress2/misc/buildworld4.sh1
-rwxr-xr-xtools/test/stress2/misc/contigmalloc.sh10
-rwxr-xr-xtools/test/stress2/misc/contigmalloc2.sh11
-rwxr-xr-xtools/test/stress2/misc/contigmalloc3.sh10
-rwxr-xr-xtools/test/stress2/misc/creat.sh1
-rwxr-xr-xtools/test/stress2/misc/crossmp.sh3
-rwxr-xr-xtools/test/stress2/misc/crossmp2.sh3
-rwxr-xr-xtools/test/stress2/misc/crossmp3.sh1
-rwxr-xr-xtools/test/stress2/misc/crossmp4.sh1
-rwxr-xr-xtools/test/stress2/misc/crossmp5.sh6
-rwxr-xr-xtools/test/stress2/misc/crossmp6.sh3
-rwxr-xr-xtools/test/stress2/misc/crossmp7.sh3
-rwxr-xr-xtools/test/stress2/misc/crossmp8.sh1
-rwxr-xr-xtools/test/stress2/misc/datamove6.sh50
-rwxr-xr-xtools/test/stress2/misc/devfs5.sh2
-rwxr-xr-xtools/test/stress2/misc/exlock2.sh2
-rwxr-xr-xtools/test/stress2/misc/ext2fs.sh2
-rwxr-xr-xtools/test/stress2/misc/ext2fs2.sh2
-rwxr-xr-xtools/test/stress2/misc/ext2fs3.sh4
-rwxr-xr-xtools/test/stress2/misc/ext3fs.sh2
-rwxr-xr-xtools/test/stress2/misc/ext4fs.sh2
-rwxr-xr-xtools/test/stress2/misc/fifo4.sh2
-rwxr-xr-xtools/test/stress2/misc/flock_open_close.sh7
-rwxr-xr-xtools/test/stress2/misc/fsck10.sh1
-rwxr-xr-xtools/test/stress2/misc/fsck11.sh1
-rwxr-xr-xtools/test/stress2/misc/fsck13.sh1
-rwxr-xr-xtools/test/stress2/misc/ftruncate3.sh96
-rwxr-xr-xtools/test/stress2/misc/gbde.sh55
-rwxr-xr-xtools/test/stress2/misc/gnop2.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop4.sh3
-rwxr-xr-xtools/test/stress2/misc/growfs3.sh41
-rwxr-xr-xtools/test/stress2/misc/kcmp.sh67
-rwxr-xr-xtools/test/stress2/misc/marcus8.sh41
-rwxr-xr-xtools/test/stress2/misc/mkdir.sh1
-rwxr-xr-xtools/test/stress2/misc/mkfifo5.sh2
-rwxr-xr-xtools/test/stress2/misc/mkfifo6.sh2
-rwxr-xr-xtools/test/stress2/misc/mkfifo7.sh2
-rwxr-xr-xtools/test/stress2/misc/mlockall4.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap40.sh11
-rwxr-xr-xtools/test/stress2/misc/mmap44.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap45.sh230
-rwxr-xr-xtools/test/stress2/misc/mmap46.sh233
-rwxr-xr-xtools/test/stress2/misc/mmap47.sh237
-rwxr-xr-xtools/test/stress2/misc/mmap48.sh289
-rwxr-xr-xtools/test/stress2/misc/mmap5.sh14
-rwxr-xr-xtools/test/stress2/misc/mount7.sh8
-rwxr-xr-xtools/test/stress2/misc/mprotect3.sh70
-rwxr-xr-xtools/test/stress2/misc/mprotect4.sh109
-rwxr-xr-xtools/test/stress2/misc/mprotect5.sh118
-rwxr-xr-xtools/test/stress2/misc/mprotect6.sh146
-rwxr-xr-xtools/test/stress2/misc/msdos14.sh2
-rwxr-xr-xtools/test/stress2/misc/msdos17.sh144
-rwxr-xr-xtools/test/stress2/misc/msdos20.sh87
-rwxr-xr-xtools/test/stress2/misc/msdos21.sh25
-rwxr-xr-xtools/test/stress2/misc/namecache2.sh2
-rwxr-xr-xtools/test/stress2/misc/newfs8.sh69
-rwxr-xr-xtools/test/stress2/misc/nfsrename.sh4
-rwxr-xr-xtools/test/stress2/misc/nullfs18.sh3
-rwxr-xr-xtools/test/stress2/misc/nullfs31.sh75
-rwxr-xr-xtools/test/stress2/misc/nullfs32.sh43
-rwxr-xr-xtools/test/stress2/misc/pager_read_error.sh36
-rwxr-xr-xtools/test/stress2/misc/perf.sh1
-rwxr-xr-xtools/test/stress2/misc/pread.sh10
-rwxr-xr-xtools/test/stress2/misc/procfs.sh3
-rwxr-xr-xtools/test/stress2/misc/procfs3.sh2
-rwxr-xr-xtools/test/stress2/misc/pthread10.sh106
-rwxr-xr-xtools/test/stress2/misc/rangelocks.sh194
-rwxr-xr-xtools/test/stress2/misc/rangelocks2.sh178
-rwxr-xr-xtools/test/stress2/misc/readdir.sh8
-rwxr-xr-xtools/test/stress2/misc/rename16.sh261
-rwxr-xr-xtools/test/stress2/misc/rename3.sh3
-rwxr-xr-xtools/test/stress2/misc/rename7.sh6
-rwxr-xr-xtools/test/stress2/misc/rmdir.sh119
-rwxr-xr-xtools/test/stress2/misc/rsync.sh49
-rwxr-xr-xtools/test/stress2/misc/rsync2.sh17
-rwxr-xr-xtools/test/stress2/misc/rsync3.sh43
-rwxr-xr-xtools/test/stress2/misc/seekhole2.sh65
-rwxr-xr-xtools/test/stress2/misc/sendfile5.sh4
-rwxr-xr-xtools/test/stress2/misc/sigreturn3.sh5
-rwxr-xr-xtools/test/stress2/misc/sigreturn4.sh5
-rwxr-xr-xtools/test/stress2/misc/softupdate.sh1
-rwxr-xr-xtools/test/stress2/misc/swapoff6.sh42
-rwxr-xr-xtools/test/stress2/misc/symlink.sh1
-rwxr-xr-xtools/test/stress2/misc/symlink2.sh1
-rwxr-xr-xtools/test/stress2/misc/symlink5.sh1
-rwxr-xr-xtools/test/stress2/misc/syzkaller71.sh171
-rwxr-xr-xtools/test/stress2/misc/syzkaller72.sh70
-rwxr-xr-xtools/test/stress2/misc/syzkaller73.sh537
-rwxr-xr-xtools/test/stress2/misc/syzkaller74.sh469
-rwxr-xr-xtools/test/stress2/misc/syzkaller75.sh377
-rwxr-xr-xtools/test/stress2/misc/syzkaller76.sh235
-rwxr-xr-xtools/test/stress2/misc/syzkaller77.sh290
-rwxr-xr-xtools/test/stress2/misc/syzkaller78.sh282
-rwxr-xr-xtools/test/stress2/misc/syzkaller79.sh82
-rwxr-xr-xtools/test/stress2/misc/tmpfs10.sh2
-rwxr-xr-xtools/test/stress2/misc/tmpfs11.sh2
-rwxr-xr-xtools/test/stress2/misc/tmpfs13.sh1
-rwxr-xr-xtools/test/stress2/misc/tmpfs17.sh2
-rwxr-xr-xtools/test/stress2/misc/tmpfs2.sh6
-rwxr-xr-xtools/test/stress2/misc/tmpfs24.sh1
-rwxr-xr-xtools/test/stress2/misc/tmpfs26.sh179
-rwxr-xr-xtools/test/stress2/misc/tmpfs27.sh49
-rwxr-xr-xtools/test/stress2/misc/tmpfs28.sh61
-rwxr-xr-xtools/test/stress2/misc/tmpfs8.sh2
-rwxr-xr-xtools/test/stress2/misc/umountf4.sh6
-rwxr-xr-xtools/test/stress2/misc/umountf6.sh6
-rwxr-xr-xtools/test/stress2/misc/unionfs17.sh2
-rwxr-xr-xtools/test/stress2/misc/unionfs18.sh2
-rwxr-xr-xtools/test/stress2/misc/unionfs19.sh74
-rwxr-xr-xtools/test/stress2/misc/unionfs6.sh2
-rwxr-xr-xtools/test/stress2/misc/unionfs7.sh2
-rwxr-xr-xtools/test/stress2/misc/unionfs8.sh2
-rwxr-xr-xtools/test/stress2/misc/vfork.sh36
-rwxr-xr-xtools/test/stress2/misc/vunref.sh3
-rwxr-xr-xtools/test/stress2/misc/zfs15.sh88
-rwxr-xr-xtools/test/stress2/misc/zfs16.sh105
-rwxr-xr-xtools/test/stress2/misc/zfs17.sh74
-rwxr-xr-xtools/test/stress2/misc/zfs18.sh134
-rwxr-xr-xtools/test/stress2/misc/zfs19.sh72
-rwxr-xr-xtools/test/stress2/misc/zzbuildworld.sh1
-rw-r--r--tools/test/stress2/tools/flip.c13
-rw-r--r--tools/test/upsdl/Makefile1
-rw-r--r--tools/test/vm86/Makefile1
-rw-r--r--tools/test/vm86/vm86_test.c1
-rw-r--r--tools/test/vm86/vm86_test_asm.s1
-rw-r--r--tools/test/xregs_sig/Makefile1
-rw-r--r--tools/tools/README1
-rw-r--r--tools/tools/aac/Makefile1
-rw-r--r--tools/tools/ansify/Makefile1
-rw-r--r--tools/tools/ath/Makefile1
-rw-r--r--tools/tools/ath/Makefile.inc1
-rw-r--r--tools/tools/ath/arcode/Makefile1
-rw-r--r--tools/tools/ath/ath_ee_9287_print/Makefile1
-rw-r--r--tools/tools/ath/ath_ee_9300_print/Makefile1
-rw-r--r--tools/tools/ath/ath_ee_v14_print/Makefile1
-rw-r--r--tools/tools/ath/ath_ee_v4k_print/Makefile1
-rw-r--r--tools/tools/ath/ath_prom_read/Makefile1
-rw-r--r--tools/tools/ath/athaggrstats/Makefile1
-rw-r--r--tools/tools/ath/athalq/Makefile1
-rw-r--r--tools/tools/ath/athani/Makefile1
-rw-r--r--tools/tools/ath/athdebug/Makefile1
-rw-r--r--tools/tools/ath/athkey/Makefile1
-rw-r--r--tools/tools/ath/athpoke/Makefile1
-rw-r--r--tools/tools/ath/athpoke/athpoke.c6
-rw-r--r--tools/tools/ath/athpow/Makefile1
-rw-r--r--tools/tools/ath/athprom/Makefile1
-rw-r--r--tools/tools/ath/athradar/Makefile1
-rw-r--r--tools/tools/ath/athratestats/Makefile1
-rw-r--r--tools/tools/ath/athrd/Makefile1
-rw-r--r--tools/tools/ath/athregs/Makefile1
-rw-r--r--tools/tools/ath/athspectral/Makefile1
-rw-r--r--tools/tools/ath/athstats/Makefile1
-rw-r--r--tools/tools/ath/athsurvey/Makefile1
-rw-r--r--tools/tools/ath/common/ctrl.c2
-rw-r--r--tools/tools/bootparttest/Makefile1
-rw-r--r--tools/tools/build_option_survey/option_survey.sh2
-rw-r--r--tools/tools/cfi/Makefile1
-rw-r--r--tools/tools/crypto/cryptocheck.c326
-rw-r--r--tools/tools/cxgbtool/Makefile1
-rw-r--r--tools/tools/decioctl/Makefile1
-rw-r--r--tools/tools/dmardump/Makefile1
-rw-r--r--tools/tools/drm/radeon/mkregtable/Makefile1
-rw-r--r--tools/tools/ether_reflect/ether_reflect.12
-rw-r--r--tools/tools/fib_multibind/Makefile4
-rw-r--r--tools/tools/fib_multibind/sink.c237
-rw-r--r--tools/tools/find-sb/Makefile1
-rw-r--r--tools/tools/fixwhite/Makefile1
-rw-r--r--tools/tools/genericize/Makefile1
-rwxr-xr-xtools/tools/git/candidatematch.lua74
-rw-r--r--tools/tools/git/ghpr/README5
-rw-r--r--tools/tools/git/ghpr/ghpr-init.sh29
-rw-r--r--tools/tools/git/ghpr/ghpr-push.sh51
-rw-r--r--tools/tools/git/ghpr/ghpr-stage.sh72
-rw-r--r--tools/tools/git/git-arc.141
-rw-r--r--tools/tools/git/git-arc.sh214
-rwxr-xr-xtools/tools/git/hooks/prepare-commit-msg2
-rwxr-xr-xtools/tools/git/mfc-candidates.lua217
-rw-r--r--tools/tools/git/mfc-candidates.sh167
-rw-r--r--tools/tools/hcomp/Makefile1
-rw-r--r--tools/tools/ifinfo/Makefile1
-rw-r--r--tools/tools/ifpifa/Makefile1
-rw-r--r--tools/tools/intel-ucode-split/Makefile1
-rw-r--r--tools/tools/ioat/Makefile1
-rw-r--r--tools/tools/ipw/Makefile1
-rw-r--r--tools/tools/iwi/Makefile1
-rw-r--r--tools/tools/iwn/Makefile1
-rw-r--r--tools/tools/iwn/iwnstats/Makefile1
-rw-r--r--tools/tools/kgdb/tcplog.py267
-rw-r--r--tools/tools/kttcp/Makefile1
-rw-r--r--tools/tools/kttcp/sys/Makefile1
-rw-r--r--tools/tools/locale/Makefile2
-rw-r--r--tools/tools/locale/etc/final-maps/map.UTF-8631
-rw-r--r--tools/tools/locale/etc/final-maps/widths.txt789
-rw-r--r--tools/tools/locale/tools/getwidths.c18
-rw-r--r--tools/tools/makeroot/Makefile1
-rw-r--r--tools/tools/mcgrab/Makefile1
-rw-r--r--tools/tools/mctest/Makefile1
-rw-r--r--tools/tools/mfi/Makefile1
-rw-r--r--tools/tools/mwl/Makefile1
-rw-r--r--tools/tools/mwl/mwldebug/Makefile1
-rw-r--r--tools/tools/mwl/mwlstats/Makefile1
-rw-r--r--tools/tools/nanobsd/Files/root/save_cfg2
-rwxr-xr-xtools/tools/nanobsd/defaults.sh70
-rw-r--r--tools/tools/nanobsd/embedded/common9
-rw-r--r--tools/tools/nanobsd/embedded/rpi.cfg35
-rw-r--r--tools/tools/nanobsd/fill_pkg.sh34
-rw-r--r--tools/tools/nanobsd/legacy.sh18
-rwxr-xr-xtools/tools/nanobsd/mtree-dedup.awk2
-rwxr-xr-xtools/tools/nanobsd/nanobsd.sh4
-rw-r--r--tools/tools/nanobsd/pcengines/ALIX_DSK1
-rw-r--r--tools/tools/nanobsd/rescue/common34
-rw-r--r--tools/tools/ncpus/Makefile1
-rw-r--r--tools/tools/net80211/Makefile1
-rw-r--r--tools/tools/net80211/stumbler/Makefile1
-rw-r--r--tools/tools/net80211/w00t/Makefile1
-rw-r--r--tools/tools/net80211/w00t/Makefile.inc3
-rw-r--r--tools/tools/net80211/w00t/ap/Makefile1
-rw-r--r--tools/tools/net80211/w00t/assoc/Makefile1
-rw-r--r--tools/tools/net80211/w00t/expand/Makefile1
-rw-r--r--tools/tools/net80211/w00t/libw00t/Makefile1
-rw-r--r--tools/tools/net80211/w00t/prga/Makefile1
-rw-r--r--tools/tools/net80211/w00t/redir/Makefile1
-rw-r--r--tools/tools/net80211/wesside/Makefile1
-rw-r--r--tools/tools/net80211/wesside/dics/Makefile1
-rw-r--r--tools/tools/net80211/wesside/udps/Makefile1
-rw-r--r--tools/tools/net80211/wesside/wesside/Makefile1
-rw-r--r--tools/tools/net80211/wlaninject/Makefile1
-rw-r--r--tools/tools/net80211/wlanstats/Makefile14
-rw-r--r--tools/tools/net80211/wlanstats/main.c297
-rw-r--r--tools/tools/net80211/wlanstats/wlanstats.c1040
-rw-r--r--tools/tools/net80211/wlanstats/wlanstats.h54
-rw-r--r--tools/tools/net80211/wlantxtime/Makefile1
-rw-r--r--tools/tools/net80211/wlanwatch/Makefile1
-rw-r--r--tools/tools/net80211/wlanwatch/wlanwatch.c31
-rw-r--r--tools/tools/net80211/wlanwds/Makefile3
-rw-r--r--tools/tools/net80211/wlanwds/wlanwds.c26
-rw-r--r--tools/tools/netrate/Makefile.inc1
-rw-r--r--tools/tools/netrate/http/Makefile1
-rw-r--r--tools/tools/netrate/httpd/Makefile1
-rw-r--r--tools/tools/netrate/juggle/Makefile1
-rw-r--r--tools/tools/netrate/tcpconnect/Makefile1
-rw-r--r--tools/tools/netrate/tcpp/Makefile1
-rw-r--r--tools/tools/netrate/tcpreceive/Makefile1
-rw-r--r--tools/tools/notescheck/Makefile1
-rw-r--r--tools/tools/npe/Makefile1
-rw-r--r--tools/tools/npe/npestats/Makefile1
-rw-r--r--tools/tools/pirtool/Makefile1
-rw-r--r--tools/tools/shlib-compat/Makefile.sysfake1
-rw-r--r--tools/tools/shlib-compat/test/Makefile1
-rw-r--r--tools/tools/shlib-compat/test/Makefile.inc1
-rw-r--r--tools/tools/shlib-compat/test/libtest1/Makefile1
-rw-r--r--tools/tools/shlib-compat/test/libtest2/Makefile1
-rw-r--r--tools/tools/shlib-compat/test/libtest3/Makefile1
-rw-r--r--tools/tools/shlib-compat/test/libtestsys/Makefile1
-rw-r--r--tools/tools/so_splice/Makefile12
-rw-r--r--tools/tools/so_splice/pingpong.c197
-rw-r--r--tools/tools/so_splice/proxy.c451
-rw-r--r--tools/tools/sortbench/Makefile1
-rw-r--r--tools/tools/switch_tls/Makefile1
-rw-r--r--tools/tools/sysdoc/Makefile1
-rw-r--r--tools/tools/sysdoc/tunables.mdoc4
-rw-r--r--tools/tools/tionxcl/Makefile1
-rw-r--r--tools/tools/track/Makefile1
-rw-r--r--tools/tools/tscdrift/Makefile1
-rw-r--r--tools/tools/umastat/Makefile1
-rw-r--r--tools/tools/vhba/vhba.h2
-rw-r--r--tools/tools/vimage/Makefile1
-rw-r--r--tools/tools/vt/mkkfont/Makefile1
-rw-r--r--tools/tools/vt/mkkfont/mkkfont.c1
-rw-r--r--tools/tools/whereintheworld/Makefile1
-rw-r--r--tools/tools/wtap/Makefile1
-rw-r--r--tools/tools/wtap/vis_map/Makefile1
-rw-r--r--tools/tools/wtap/wtap/Makefile1
-rw-r--r--tools/tools/zfsboottest/Makefile1
-rw-r--r--tools/uma/smrstress/smrstress.c3
459 files changed, 16194 insertions, 3322 deletions
diff --git a/tools/boot/ci-qemu-test.sh b/tools/boot/ci-qemu-test.sh
index faa360db1a2c..63f0fc2c64b2 100755
--- a/tools/boot/ci-qemu-test.sh
+++ b/tools/boot/ci-qemu-test.sh
@@ -125,8 +125,8 @@ timeout 300 \
-snapshot -hda $hda 2>&1 | tee ${BOOTLOG}
# Check whether we succesfully booted...
-if grep -q 'Hello world.' ${BOOTLOG}; then
- echo "OK"
+if grep -q 'Hello world.' ${BOOTLOG} && egrep -q '^Uptime: ' ${BOOTLOG}; then
+ echo "Boot successful"
else
die "Did not boot successfully, see ${BOOTLOG}"
fi
diff --git a/tools/boot/full-test.sh b/tools/boot/full-test.sh
index 89d2ac3b7277..1160861316dc 100644
--- a/tools/boot/full-test.sh
+++ b/tools/boot/full-test.sh
@@ -19,8 +19,8 @@
# What version of FreeBSD to we snag the ISOs from to extract the binaries
# we are testing
-FREEBSD_VERSION=13.1
-# eg https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-amd64-bootonly.iso.xz
+FREEBSD_VERSION=14.2
+# eg https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-bootonly.iso.xz
URLBASE="https://download.freebsd.org/releases"
: ${STAND_ROOT:="${HOME}/stand-test-root"}
CACHE=${STAND_ROOT}/cache
@@ -30,23 +30,59 @@ BIOS=${STAND_ROOT}/bios
SCRIPTS=${STAND_ROOT}/scripts
OVERRIDE=${STAND_ROOT}/override
-# hack -- I have extra junk in my qemu, but it's not needed to recreate things
-if [ $(whoami) = imp ]; then
- qemu_bin=/home/imp/git/qemu/00-build
-else
- qemu_bin=/usr/local/bin
-fi
+# Find make
+case $(uname) in
+ Darwin)
+ t=$(realpath $(dirname $0)/../..)
+ # Use the python wrapper to find make
+ if [ -f ${t}/tools/build/make.py ]; then
+ MAKE="${t}/tools/build/make.py"
+ case $(uname -m) in
+ arm64)
+ DEFARCH="TARGET_ARCH=aarch64 TARGET=arm64"
+ ;;
+ x86_64)
+ DEFARCH="TARGET_ARCH=amd64 TARGET=amd64"
+ ;;
+ *)
+ die "Do not know about $(uanme -p)"
+ ;;
+ esac
+ else
+ die "Can't find the make wrapper"
+ fi
+ qemu_bin=/opt/homebrew/bin
+ ;;
+ FreeBSD)
+ MAKE=make
+ qemu_bin=/usr/local/bin
+ ;;
+ # linux) not yet
+ *)
+ die "Do not know about system $(uname)"
+ ;;
+esac
+
+SRCTOP=$(${MAKE} ${DEFARCH} -v SRCTOP)
+echo $SRCTOP
+
+# Find makefs and mkimg
+MAKEFS=$(SHELL="which makefs" ${MAKE} ${DEFARCH} buildenv | tail -1) || die "No makefs try WITH_DISK_IMAGE_TOOLS_BOOTSTRAP=y"
+MKIMG=$(SHELL="which mkimg" ${MAKE} ${DEFARCH} buildenv | tail -1) || die "No mkimg, try buildworld first"
+MTREE=$(SHELL="which mtree" ${MAKE} ${DEFARCH} buildenv | tail -1) || die "No mtree, try buildworld first"
+
+# MAKE=$(SHELL="which make" ${MAKE} ${DEFARCH} buildenv | tail -1) || die "No make, try buildworld first"
+
# All the architectures under test
# Note: we can't yet do armv7 because we don't have a good iso for it and would
# need root to extract the files.
-ARCHES="amd64:amd64 i386:i386 powerpc:powerpc powerpc:powerpc64 powerpc:powerpc64le powerpc:powerpcspe arm64:aarch64 riscv:riscv64"
+#ARCHES="amd64:amd64 i386:i386 powerpc:powerpc powerpc:powerpc64 powerpc:powerpc64le powerpc:powerpcspe arm64:aarch64 riscv:riscv64"
+ARCHES="amd64:amd64 arm64:aarch64"
# The smallest FAT32 filesystem is 33292 KB
espsize=33292
-SRCTOP=$(make -v SRCTOP)
-
mkdir -p ${CACHE} ${TREES} ${IMAGES} ${BIOS}
die()
@@ -123,9 +159,8 @@ make_minimal_freebsd_tree()
# Pretend we don't have a separate /usr
ln -s . ${dir}/usr
# snag the binaries for my simple /etc/rc file
- tar -C ${dir} -xf ${CACHE}/$file sbin/reboot sbin/halt sbin/init bin/sh sbin/sysctl \
- lib/libncursesw.so.9 lib/libc.so.7 lib/libedit.so.8 libexec/ld-elf.so.1
-
+ tar -C ${dir} -xf ${CACHE}/$file sbin/fastboot sbin/reboot sbin/halt sbin/init bin/sh sbin/sysctl \
+ lib/libtinfow.so.9 lib/libncursesw.so.9 lib/libc.so.7 lib/libedit.so.8 libexec/ld-elf.so.1
# My simple etc/rc
cat > ${dir}/etc/rc <<EOF
#!/bin/sh
@@ -173,6 +208,10 @@ autoboot_delay=2
zfs_load="YES"
boot_verbose=yes
kern.cfg.order="acpi,fdt"
+boot_serial="YES"
+hw.uart.console="io:1016,br:115200"
+vfs.root.mountfrom="ufs:/dev/ufs/root"
+vfs.root.mountfrom.options="rw"
EOF
}
@@ -196,14 +235,15 @@ make_freebsd_test_trees()
[ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
dir=${TREES}/${ma_combo}/test-stand
mkdir -p ${dir}
- mtree -deUW -f ${SRCTOP}/etc/mtree/BSD.root.dist -p ${dir}
+ ${MTREE} -deUW -f ${SRCTOP}/etc/mtree/BSD.root.dist -p ${dir}
echo "Creating tree for ${m}:${ma}"
- cd ${SRCTOP}/stand
+ cd ${SRCTOP}
# Indirection needed because our build system is too complex
-# SHELL="make clean" make buildenv TARGET=${m} TARGET_ARCH=${ma}
- SHELL="make -j 100 all" make buildenv TARGET=${m} TARGET_ARCH=${ma}
- SHELL="make install DESTDIR=${dir} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes" \
- make buildenv TARGET=${m} TARGET_ARCH=${ma}
+ # Also, bare make for 'inside' the buildenv ${MAKE} for outside
+# SHELL="make clean" ${MAKE} buildenv TARGET=${m} TARGET_ARCH=${ma}
+ SHELL="sh -c 'cd stand ; make -j 100 all'" ${MAKE} TARGET=${m} TARGET_ARCH=${ma} buildenv
+ DESTDIR=${dir} SHELL="sh -c 'cd stand ; make install MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes'" \
+ ${MAKE} buildenv TARGET=${m} TARGET_ARCH=${ma}
rm -rf ${dir}/bin ${dir}/[ac-z]* # Don't care about anything here
done
}
@@ -278,14 +318,14 @@ make_linuxboot_images()
img2=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}-zfs.img
pool="linuxboot"
mkdir -p ${IMAGES}/${ma_combo}
- makefs -t msdos -o fat_type=32 -o sectors_per_cluster=1 \
+ ${MAKEFS} -t msdos -o fat_type=32 -o sectors_per_cluster=1 \
-o volume_label=EFISYS -s80m ${esp} ${src}
- makefs -t ffs -B little -s 200m -o label=root ${ufs} ${dir} ${dir2}
- mkimg -s gpt -p efi:=${esp} -p freebsd-ufs:=${ufs} -o ${img}
- makefs -t zfs -s 200m \
+ ${MAKEFS} -t ffs -B little -s 200m -o label=root ${ufs} ${dir} ${dir2}
+ ${MKIMG} -s gpt -p efi:=${esp} -p freebsd-ufs:=${ufs} -o ${img}
+ ${MAKEFS} -t zfs -s 200m \
-o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
${zfs} ${dir} ${dir2}
- mkimg -s gpt \
+ ${MKIMG} -s gpt \
-p efi:=${esp} \
-p freebsd-zfs:=${zfs} -o ${img2}
rm -f ${esp} # Don't need to keep this around
@@ -325,7 +365,7 @@ make_linuxboot_scripts()
if [ ${bios_code} -ot /usr/local/share/qemu/edk2-x86_64-code.fd ]; then
cp /usr/local/share/qemu/edk2-x86_64-code.fd ${bios_code}
# vars file works on both 32 and 64 bit x86
- cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
+# cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
fi
;;
aarch64)
@@ -407,7 +447,8 @@ EOF
make_freebsd_esps()
{
# At the moment, we have just three (armv7 could also be here too, but we're not doing that)
- for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+# for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+ for a in amd64:amd64 arm64:aarch64; do
m=${a%%:*}
ma=${a##*:}
ma_combo="${m}"
@@ -429,7 +470,8 @@ make_freebsd_images()
{
# ESP variant: In this variant, riscv, amd64 and arm64 are created more or
# less the same way. UEFI + ACPI implementations
- for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+# for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+ for a in amd64:amd64 arm64:aarch64; do
m=${a%%:*}
ma=${a##*:}
ma_combo="${m}"
@@ -445,15 +487,16 @@ make_freebsd_images()
cat > ${dir2}/etc/fstab <<EOF
/dev/ufs/root / ufs rw 1 1
EOF
- makefs -t msdos -o fat_type=32 -o sectors_per_cluster=1 \
+ ${MAKEFS} -t msdos -o fat_type=32 -o sectors_per_cluster=1 \
-o volume_label=EFISYS -s100m ${esp} ${src}
- makefs -t ffs -B little -s 200m -o label=root ${ufs} ${dir} ${dir2}
- mkimg -s gpt -p efi:=${esp} -p freebsd-ufs:=${ufs} -o ${img}
+ ${MAKEFS} -t ffs -B little -s 200m -o label=root ${ufs} ${dir} ${dir2}
+ ${MKIMG} -s gpt -p efi:=${esp} -p freebsd-ufs:=${ufs} -o ${img}
# rm -f ${esp} ${ufs} # Don't need to keep this around
done
set -x
+if false; then
# BIOS i386
a=i386:i386
m=${a%%:*}
@@ -469,10 +512,10 @@ EOF
cat > ${dir2}/etc/fstab <<EOF
/dev/ufs/root / ufs rw 1 1
EOF
- makefs -t ffs -B little -s 200m \
+ ${MAKEFS} -t ffs -B little -s 200m \
-o label=root,version=2,bsize=32768,fsize=4096,density=16384 \
${ufs} ${dir} ${dir2}
- mkimg -s gpt -b ${dir2}/boot/pmbr \
+ ${MKIMG} -s gpt -b ${dir2}/boot/pmbr \
-p freebsd-boot:=${dir2}/boot/gptboot \
-p freebsd-ufs:=${ufs} \
-o ${img}
@@ -493,13 +536,14 @@ EOF
cat > ${dir2}/etc/fstab <<EOF
/dev/ufs/root / ufs rw 1 1
EOF
- makefs -t ffs -B big -s 200m \
+ ${MAKEFS} -t ffs -B big -s 200m \
-o label=root,version=2,bsize=32768,fsize=4096,density=16384 \
${ufs} ${dir} ${dir2}
- mkimg -a 1 -s apm \
+ ${MKIMG} -a 1 -s apm \
-p freebsd-boot:=${dir2}/boot/boot1.hfs \
-p freebsd-ufs:=${ufs} \
-o ${img}
+fi
set +x
}
@@ -521,7 +565,7 @@ make_freebsd_scripts()
if [ ${bios_code} -ot /usr/local/share/qemu/edk2-x86_64-code.fd ]; then
cp /usr/local/share/qemu/edk2-x86_64-code.fd ${bios_code}
# vars file works on both 32 and 64 bit x86
- cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
+# cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
fi
;;
aarch64)
@@ -568,6 +612,7 @@ EOF
esac
done
+if false; then
set -x
a=powerpc:powerpc
m=${a%%:*}
@@ -603,6 +648,7 @@ ${qemu_bin}/qemu-system-i386 -m 1g \\
-monitor telnet::4444,server,nowait \\
-serial stdio \$*
EOF
+fi
}
# The smallest FAT32 filesystem is 33292 KB
diff --git a/tools/boot/install-boot.sh b/tools/boot/install-boot.sh
index 332756582137..217bf0ff1457 100755
--- a/tools/boot/install-boot.sh
+++ b/tools/boot/install-boot.sh
@@ -42,11 +42,10 @@ get_uefi_bootname() {
}
make_esp_file() {
- local file sizekb loader device stagedir fatbits efibootname
+ local file sizekb device stagedir fatbits efibootname
file=$1
sizekb=$2
- loader=$3
if [ "$sizekb" -ge "$fat32min" ]; then
fatbits=32
@@ -58,8 +57,25 @@ make_esp_file() {
stagedir=$(mktemp -d /tmp/stand-test.XXXXXX)
mkdir -p "${stagedir}/EFI/BOOT"
- efibootname=$(get_uefi_bootname)
- cp "${loader}" "${stagedir}/EFI/BOOT/${efibootname}.efi"
+
+ # Allow multiple files to be copied.
+ # We do this in pairs, e.g:
+ # make_esp_file ... loader1.efi bootx64 loader2.efi bootia32
+ #
+ # If the second argument is left out,
+ # determine it automatically.
+ shift; shift # Skip $file and $sizekb
+ while [ ! -z $1 ]; do
+ if [ ! -z $2 ]; then
+ efibootname=$2
+ else
+ efibootname=$(get_uefi_bootname)
+ fi
+ cp "$1" "${stagedir}/EFI/BOOT/${efibootname}.efi"
+
+ shift; shift || : # Ignore failure to shift
+ done
+
makefs -t msdos \
-o fat_type=${fatbits} \
-o sectors_per_cluster=1 \
@@ -70,13 +86,20 @@ make_esp_file() {
}
make_esp_device() {
- local dev file mntpt fstype efibootname kbfree loadersize efibootfile
+ local dev file dst mntpt fstype efibootname kbfree loadersize efibootfile
local isboot1 existingbootentryloaderfile bootorder bootentry
# ESP device node
dev=$1
file=$2
+ # Allow caller to override the default
+ if [ ! -z $3 ]; then
+ efibootname=$3
+ else
+ efibootname=$(get_uefi_bootname)
+ fi
+ dst=$(basename ${file%.efi})
mntpt=$(mktemp -d /tmp/stand-test.XXXXXX)
# See if we're using an existing (formatted) ESP
@@ -93,7 +116,6 @@ make_esp_device() {
echo "Mounted ESP ${dev} on ${mntpt}"
- efibootname=$(get_uefi_bootname)
kbfree=$(df -k "${mntpt}" | tail -1 | cut -w -f 4)
loadersize=$(stat -f %z "${file}")
loadersize=$((loadersize / 1024))
@@ -114,7 +136,7 @@ make_esp_device() {
fi
fi
- if [ ! -f "${mntpt}/EFI/freebsd/loader.efi" ] && [ "$kbfree" -lt "$loadersize" ]; then
+ if [ ! -f "${mntpt}/EFI/freebsd/${dst}.efi" ] && [ "$kbfree" -lt "$loadersize" ]; then
umount "${mntpt}"
rmdir "${mntpt}"
echo "Failed to update the EFI System Partition ${dev}"
@@ -126,24 +148,26 @@ make_esp_device() {
mkdir -p "${mntpt}/EFI/freebsd"
# Keep a copy of the existing loader.efi in case there's a problem with the new one
- if [ -f "${mntpt}/EFI/freebsd/loader.efi" ] && [ "$kbfree" -gt "$((loadersize * 2))" ]; then
- cp "${mntpt}/EFI/freebsd/loader.efi" "${mntpt}/EFI/freebsd/loader-old.efi"
+ if [ -f "${mntpt}/EFI/freebsd/${dst}.efi" ] && [ "$kbfree" -gt "$((loadersize * 2))" ]; then
+ cp "${mntpt}/EFI/freebsd/${dst}.efi" "${mntpt}/EFI/freebsd/${dst}-old.efi"
fi
echo "Copying loader to /EFI/freebsd on ESP"
- cp "${file}" "${mntpt}/EFI/freebsd/loader.efi"
+ cp "${file}" "${mntpt}/EFI/freebsd/${dst}.efi"
- if [ -n "${updatesystem}" ]; then
- existingbootentryloaderfile=$(efibootmgr -v | grep "${mntpt}//EFI/freebsd/loader.efi")
+ # efibootmgr won't work on systems with ia32 UEFI firmware
+ # since we only use it to boot the 64-bit kernel
+ if [ -n "${updatesystem}" ] && [ ${efibootname} != "bootia32" ]; then
+ existingbootentryloaderfile=$(efibootmgr -v | grep "${mntpt}//EFI/freebsd/${dst}.efi")
if [ -z "$existingbootentryloaderfile" ]; then
# Try again without the double forward-slash in the path
- existingbootentryloaderfile=$(efibootmgr -v | grep "${mntpt}/EFI/freebsd/loader.efi")
+ existingbootentryloaderfile=$(efibootmgr -v | grep "${mntpt}/EFI/freebsd/${dst}.efi")
fi
if [ -z "$existingbootentryloaderfile" ]; then
echo "Creating UEFI boot entry for FreeBSD"
- efibootmgr --create --label FreeBSD --loader "${mntpt}/EFI/freebsd/loader.efi" > /dev/null
+ efibootmgr --create --label FreeBSD --loader "${mntpt}/EFI/freebsd/${dst}.efi" > /dev/null
if [ $? -ne 0 ]; then
die "Failed to create new boot entry"
fi
diff --git a/tools/boot/lua-lint.sh b/tools/boot/lua-lint.sh
index d771be090c6e..60d7c567dab4 100755
--- a/tools/boot/lua-lint.sh
+++ b/tools/boot/lua-lint.sh
@@ -17,4 +17,4 @@ cd $(make -V SRCTOP)/stand
${LUACHECK} . --globals loader --globals lfs --globals io.getchar \
--globals io.ischar --globals printc --globals cli_execute \
--globals cli_execute_unparsed --globals try_include \
- --globals pager --std lua53
+ --globals pager --globals gfx --globals hash --std lua53
diff --git a/tools/boot/smbios/Makefile b/tools/boot/smbios/Makefile
index 042b3aaee274..42a17aa54b5a 100644
--- a/tools/boot/smbios/Makefile
+++ b/tools/boot/smbios/Makefile
@@ -1,4 +1,3 @@
-
PROG= smbios
MAN=
.PATH: ${SRCTOP}/stand/libsa
diff --git a/tools/boot/universe.sh b/tools/boot/universe.sh
index 3e033ce26ae2..e97858ff2bcb 100755
--- a/tools/boot/universe.sh
+++ b/tools/boot/universe.sh
@@ -3,7 +3,7 @@
#
# Full list of all arches we don't build.
#
-# powerpc/powerpcspe arm/armv6
+# powerpc/powerpcspe
#
# This script is expected to be run in stand (though you could run it anywhere
# in the tree). It does a full clean build. For stand you can do all the archs in
diff --git a/tools/bsdbox/Makefile b/tools/bsdbox/Makefile
index 008b66647077..35e37b31ea2f 100644
--- a/tools/bsdbox/Makefile
+++ b/tools/bsdbox/Makefile
@@ -1,8 +1,8 @@
-
MAN=
.include <bsd.own.mk>
MK_SSP= no
+MK_PIE= no
PROG= bsdbox
BINDIR?=/sbin
@@ -53,7 +53,7 @@ CRUNCH_SRCDIRS+= bin
# setuid binaries - they use these libraries. PAM needs to be
# built dynamically or it tries to build _all_ of the modules
# statically - and that ends very badly.
-CRUNCH_SHLIBS+= -lc -lutil -lcrypt -lxo -lgpio
+CRUNCH_SHLIBS+= -lc -lsys -lutil -lcrypt -lxo -lgpio
CRUNCH_LIBS+= -lkvm -lmemstat -lnetgraph
CRUNCH_LIBS+= -lcrypt -ledit -ltermcapw
@@ -70,7 +70,7 @@ CRUNCH_SRCDIRS+= sbin
CRUNCH_LIBS+= -l80211 -lalias -lcam -lcursesw -ldevstat -lipsec
# Don't forget this - ifconfig, etc -adrian
-CRUNCH_LIBS+= ${LDADD_ifconfig}
+CRUNCH_LIBS+= ${OBJTOP}/lib/libifconfig/libifconfig.a
CRUNCH_LIBS+= -lgeom -lbsdxml -ljail -lkiconv -lmd -lsbuf -lufs
CRUNCH_BUILDOPTS+= CRUNCH_CFLAGS+=-I${OBJTOP}/lib/libifconfig
diff --git a/tools/bsdbox/Makefile.base b/tools/bsdbox/Makefile.base
index 49f31b421098..8dfc2c50c68c 100644
--- a/tools/bsdbox/Makefile.base
+++ b/tools/bsdbox/Makefile.base
@@ -9,6 +9,8 @@ CRUNCH_PROGS_bin+= ln rm kenv mv expr
CRUNCH_PROGS_usr.bin+= true false hexdump tail nc w head uname tset
CRUNCH_PROGS_usr.sbin+= gpioctl
CRUNCH_ALIAS_w= uptime
+
+CRUNCH_SRCDIR_tset= ${SRCTOP}/usr.bin/ncurses
CRUNCH_ALIAS_tset= reset
CRUNCH_PROGS_usr.bin+= vmstat
@@ -23,6 +25,7 @@ CRUNCH_LIBS+= -lprivatezstd -lthr
# Clear requires tput, and it's a shell script so it won't be crunched
CRUNCH_PROGS_usr.bin+= tput
+CRUNCH_SRCDIR_tput= ${SRCTOP}/usr.bin/ncurses
# sh
CRUNCH_PROGS_bin+= sh
diff --git a/tools/bsdbox/Makefile.hostapd b/tools/bsdbox/Makefile.hostapd
index 8c5d86d86704..4459de171242 100644
--- a/tools/bsdbox/Makefile.hostapd
+++ b/tools/bsdbox/Makefile.hostapd
@@ -3,13 +3,18 @@
#
#
.include <src.opts.mk>
+
+WPASRC?= ${SRCTOP}/usr.sbin/wpa
+
CRUNCH_PROGS_usr.sbin+= hostapd hostapd_cli
-CRUNCH_SRCDIR_hostapd= $(.CURDIR)/../../usr.sbin/wpa/hostapd
-CRUNCH_SRCDIR_hostapd_cli= $(.CURDIR)/../../usr.sbin/wpa/hostapd_cli
+CRUNCH_SRCDIR_hostapd= ${WPASRC}/hostapd
+CRUNCH_SRCDIR_hostapd_cli= ${WPASRC}/hostapd_cli
+
+CRUNCH_KEEP_hostapd+= wpa_driver_bsd_ops
-#CRUNCH_PROGS_usr.sbin+= wpa_supplicant wpa_cli
-#CRUNCH_SRCDIR_wpa_supplicant= $(.CURDIR)/../../usr.sbin/wpa/wpa_supplicant
-#CRUNCH_SRCDIR_wpa_cli= $(.CURDIR)/../../usr.sbin/wpa/wpa_cli
+CRUNCH_PROGS_usr.sbin+= wpa_supplicant wpa_cli
+CRUNCH_SRCDIR_wpa_supplicant= ${WPASRC}/wpa_supplicant
+CRUNCH_SRCDIR_wpa_cli= ${WPASRC}/wpa_cli
.if ${MK_OFED} != "no"
# libpcap dependencies if OFED is enabled
@@ -17,3 +22,14 @@ CRUNCH_LIBS+= -lmlx5 -libverbs
.endif
CRUNCH_LIBS+= -lpcap
+# hostapd
+wpalibs= drivers ap l2_packet eap_server
+wpalibs+= eapol_auth eap_common
+wpalibs+= radius tls wps common crypto utils
+
+# wpa_supplicant
+wpalibs+= eapol_supp eap_peer rsn_supp
+
+.for wpalib in ${wpalibs}
+CRUNCH_LIBS+= ${LIBWPA${wpalib:tu}}
+.endfor
diff --git a/tools/bsdbox/Makefile.net b/tools/bsdbox/Makefile.net
index 960bc8a25335..d0f7654c41d7 100644
--- a/tools/bsdbox/Makefile.net
+++ b/tools/bsdbox/Makefile.net
@@ -20,6 +20,7 @@ CRUNCH_LIBS+= -lmemstat -lnetgraph
# ifconfig
CRUNCH_PROGS_sbin+= ifconfig
+CRUNCH_LIBS_ifconfig+= ${LIBNV}
CRUNCH_SHLIBS+= -l80211
# wlan stuff
diff --git a/tools/build/Makefile b/tools/build/Makefile
index e60c8694d56d..83f589ce3864 100644
--- a/tools/build/Makefile
+++ b/tools/build/Makefile
@@ -1,10 +1,18 @@
-
.PATH: ${.CURDIR}/../../include
+# XXX We need to include this to avoid installing MIT KRB5 includes on
+# XXX Heimdal systems. Remove the following line when Heimdal is finally
+# XXX removed.
+.include <src.opts.mk>
+
LIB= egacy
SRC=
INCSGROUPS= INCS SYSINCS CASPERINC UFSINCS FFSINCS MSDOSFSINCS DISKINCS
INCSGROUPS+= MACHINESYSINCS RPCINCS
+.if ${MK_MITKRB5} != "no"
+INCSGROUPS+= EDITINC K5GSSRPCINC GSSAPIINC
+INCSGROUPS+= K5GSSAPIINC K52GSSAPIINC KRB5INC
+.endif
INCS=
SYSINCSDIR= ${INCLUDEDIR}/sys
@@ -16,6 +24,16 @@ MSDOSFSINCSDIR= ${INCLUDEDIR}/fs/msdosfs
DISKINCSDIR= ${INCLUDEDIR}/sys/disk
MACHINESYSINCSDIR= ${INCLUDEDIR}/machine
RPCINCSDIR= ${INCLUDEDIR}/rpc
+.if ${MK_MITKRB5} != "no"
+EDITINCDIR= ${INCLUDEDIR}/edit/readline
+K5GSSRPCINCDIR= ${INCLUDEDIR}/gssrpc
+GSSAPIINCDIR= ${INCLUDEDIR}/gssapi
+K5GSSAPIINCDIR= ${INCLUDEDIR}/gssapi_krb5
+K52GSSAPIINCDIR=${INCLUDEDIR}/gssapi_krb5/gssapi
+KRB5INCDIR= ${INCLUDEDIR}/krb5
+KDB5INCDIR= ${INCLUDEDIR}/kdb5
+KADM5INCDIR= ${INCLUDEDIR}/kadm5
+.endif
BOOTSTRAPPING?= 0
@@ -213,8 +231,11 @@ CFLAGS.closefrom.c+= -DSTDC_HEADERS -DHAVE_SYS_DIR_H -DHAVE_DIRENT_H \
-DHAVE_DIRFD -DHAVE_SYSCONF
# Provide getprogname/setprograme
SRCS+= progname.c
-# Stub implementations of fflagstostr/strtofflags
-SRCS+= fflags.c
+# Provide fflagstostr/strtofflags for mtree and makefs
+# On macOS we use the host's so conflate host and target flags, which ideally
+# we'd avoid, but in practice these align for many flags, including
+# SF_IMMUTABLE, the only flag we currently set during install.
+SRCS+= strtofflags.c
# macOS has a standalone cross-build implementation, but Linux can use the same
# ELF one as FreeBSD
@@ -249,11 +270,62 @@ subr_capability.c: ${SRCTOP}/sys/kern/subr_capability.c
cp ${.ALLSRC} ${.TARGET}
SRCS+= subr_capability.c
CLEANFILES+= subr_capability.c
+
+# Headers needed for msdosfs use in makefs
+SYSINCS+= ${SRCTOP}/sys/sys/_callout.h
+SYSINCS+= ${SRCTOP}/sys/sys/_lock.h
+SYSINCS+= ${SRCTOP}/sys/sys/_lockmgr.h
+SYSINCS+= ${SRCTOP}/sys/sys/_task.h
.endif # ${MAKE.OS} != "FreeBSD"
CASPERINC+= ${SRCTOP}/lib/libcasper/services/cap_fileargs/cap_fileargs.h
CASPERINC+= ${SRCTOP}/lib/libcasper/services/cap_net/cap_net.h
+.if ${MK_MITKRB5} != "no"
+EDITINC+= ${SRCTOP}/contrib/libedit/readline/readline.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth_gss.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth_gssapi.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth_unix.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/clnt.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/netdb.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/pmap_clnt.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/pmap_prot.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/pmap_rmt.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/rpc_msg.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/rpc.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/svc_auth.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/svc.h
+K5GSSRPCINC+= ${SRCTOP}/krb5/include/gssrpc/types.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/xdr.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/xdr.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/krb5/gssapi_krb5.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/generic/gssapi_alloc.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/generic/gssapi_generic.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/generic/gssapi_ext.h
+K5GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/include/gssapi.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/ccselect_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/certauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/clpreauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/hostrealm_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kadm5_auth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kadm5_hook_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kdcpolicy_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kdcpreauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/localauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/locate_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/preauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/pwqual_plugin.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/gssapi.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/kdb.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/krb5.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/krad.h
+INCS+= ${SRCTOP}/crypto/krb5/src/util/et/com_err.h
+INCS+= ${SRCTOP}/crypto/krb5/src/util/verto/verto-module.h
+INCS+= ${SRCTOP}/crypto/krb5/src/util/verto/verto.h
+.endif
+
.if empty(SRCS)
SRCS= dummy.c
.endif
@@ -276,6 +348,7 @@ MSDOSFSINCS+= ${SRCTOP}/sys/fs/msdosfs/msdosfsmount.h
DISKINCS+= ${SRCTOP}/sys/sys/disk/bsd.h
# Needed to build config (since it uses libnv)
+SYSINCS+= ${SRCTOP}/sys/sys/_nv.h
SYSINCS+= ${SRCTOP}/sys/sys/nv.h ${SRCTOP}/sys/sys/cnv.h \
${SRCTOP}/sys/sys/dnv.h ${SRCTOP}/sys/sys/nv_namespace.h
@@ -305,6 +378,10 @@ SYSINCS+= ${SRCTOP}/sys/sys/ctf.h
SYSINCS+= ${SRCTOP}/sys/sys/kbio.h
# for kldxref:
SYSINCS+= ${SRCTOP}/sys/sys/module.h
+.if ${.MAKE.OS} != "FreeBSD"
+# for libmd:
+SYSINCS+= ${SRCTOP}/sys/sys/md4.h
+.endif
# We want to run the build with only ${WORLDTMP} in $PATH to ensure we don't
# accidentally run tools that are incompatible but happen to be in $PATH.
diff --git a/tools/build/absolute-symlink.sh b/tools/build/absolute-symlink.sh
new file mode 100755
index 000000000000..9d5d636e2dfb
--- /dev/null
+++ b/tools/build/absolute-symlink.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Copyright (c) Oct 2024 Wolfram Schneider <wosch@FreeBSD.org>
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# absolute-symlink.sh - check for absolute symlinks on a FreeBSD system
+#
+# The purpose of this script is to detect absolute symlinks on
+# a machine, e.g.:
+#
+# /etc/localtime -> /usr/share/zoneinfo/UTC
+#
+# Some of these absolute symbolic links can be created intentionally,
+# but it is usually better to use relative symlinks.
+#
+# You can run the script after `make installworld', or any other
+# make targets thats installs files.
+#
+# You can also check your local ports with:
+#
+# env ABSOLUTE_SYMLINK_DIRS=/usr/local ./absolute-symlink.sh
+
+
+PATH="/bin:/usr/bin"; export PATH
+LANG="C"; export LANG
+
+# check other directories as well
+: ${ABSOLUTE_SYMLINK_DIRS=""}
+
+find -s -H \
+ /bin \
+ /boot \
+ /etc \
+ /lib \
+ /libexec \
+ /sbin \
+ /usr/bin \
+ /usr/include \
+ /usr/lib \
+ /usr/lib32 \
+ /usr/libdata \
+ /usr/libexec \
+ /usr/sbin \
+ /usr/src \
+ /usr/share \
+ $ABSOLUTE_SYMLINK_DIRS \
+ -type l \
+ -ls | grep -Ea -- ' -> /'
+
+#EOF
diff --git a/tools/build/beinstall.sh b/tools/build/beinstall.sh
index 7f7481b671f5..dcafd1030c91 100755
--- a/tools/build/beinstall.sh
+++ b/tools/build/beinstall.sh
@@ -48,7 +48,7 @@ NO_PKG_UPGRADE="${NO_PKG_UPGRADE:-""}"
# Config updater - 'etcupdate' is supported. Set to an empty string to skip.
CONFIG_UPDATER="${CONFIG_UPDATER:-"etcupdate"}"
# Flags for etcupdate if used.
-ETCUPDATE_FLAGS="${ETCUPDATE_FLAGS:-"-F"}"
+ETCUPDATE_FLAGS="${ETCUPDATE_FLAGS:-"-BF"}"
########################################################################
diff --git a/tools/build/bootstrap-m4/Makefile b/tools/build/bootstrap-m4/Makefile
index c0b82b307d5d..c12c82455958 100644
--- a/tools/build/bootstrap-m4/Makefile
+++ b/tools/build/bootstrap-m4/Makefile
@@ -1,4 +1,3 @@
-
# Build a bootstrap version of m4 (needed in order to build libelf and lex)
.PATH: ${SRCTOP}/usr.bin/m4 ${.CURDIR}
diff --git a/tools/build/checkstyle9.pl b/tools/build/checkstyle9.pl
index 24e33712ceda..b40c9810bc93 100755
--- a/tools/build/checkstyle9.pl
+++ b/tools/build/checkstyle9.pl
@@ -12,7 +12,7 @@ use Term::ANSIColor qw(:constants);
my $P = $0;
$P =~ s@.*/@@g;
-our $SrcFile = qr{\.(?:h|c|cpp|s|S|pl|py|sh)$};
+our $SrcFile = qr{\.(?:h|c|cpp|hpp|hh|cc|S|sh)$};
my $V = '0.31';
@@ -1253,7 +1253,6 @@ sub process {
my $in_header_lines = $file ? 0 : 1;
my $in_commit_log = 0; #Scanning lines before patch
- my $has_sob = 0;
my $non_utf8_charset = 0;
our @report = ();
@@ -1439,7 +1438,7 @@ sub process {
# Check for incorrect file permissions
if ($line =~ /^new (file )?mode.*[7531]\d{0,2}$/) {
my $permhere = $here . "FILE: $realfile\n";
- if ($realfile =~ /(\bMakefile(?:\.objs)?|\.c|\.cc|\.cpp|\.h|\.mak|\.[sS])$/) {
+ if ($realfile =~ /(\bMakefile(?:\.objs)?|\.c|\.cc|\.cpp|\.h|\.hpp|\.mak|\.[sS])$/) {
ERROR("do not set execute permissions for source files\n" . $permhere);
}
}
@@ -1449,29 +1448,6 @@ sub process {
$is_patch = 1;
}
-# Filter out bad email addresses.
- if ($line =~ /^(Author|From): .*noreply.*/) {
- ERROR("Real email adress is needed\n" . $herecurr);
- }
-
-#check the patch for a signoff:
- if ($line =~ /^\s*signed-off-by:/i) {
- # This is a signoff, if ugly, so do not double report.
- $in_commit_log = 0;
- $has_sob = 1;
-
- if (!($line =~ /^\s*Signed-off-by:/)) {
- ERROR("The correct form is \"Signed-off-by\"\n" .
- $herecurr);
- $has_sob = 0;
- }
- if ($line =~ /^\s*signed-off-by:\S/i) {
- ERROR("space required after Signed-off-by:\n" .
- $herecurr);
- $has_sob = 0;
- }
- }
-
# Check for wrappage within a valid hunk of the file
if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
ERROR("patch seems to be corrupt (line wrapped?)\n" .
@@ -1572,7 +1548,7 @@ sub process {
}
# check we are in a valid C source file if not then ignore this hunk
- next if ($realfile !~ /\.(h|c|cpp)$/);
+ next if ($realfile !~ /\.(h|hpp|c|cpp|cc|hh)$/);
# Block comment styles
@@ -1971,7 +1947,7 @@ sub process {
{
# Ignore 'catch (...)' in C++
- } elsif ($name =~ /^catch$/ && $realfile =~ /(\.cpp|\.h)$/) {
+ } elsif ($name =~ /^catch$/ && $realfile =~ /\.(cpp|h|hpp|hh|cc)$/) {
# cpp #define statements have non-optional spaces, ie
# if there is a space between the name and the open
@@ -2068,7 +2044,7 @@ sub process {
# Ignore : used in class declaration in C++
} elsif ($opv eq ':B' && $ctx =~ /Wx[WE]/ &&
- $line =~ /class/ && $realfile =~ /(\.cpp|\.h)$/) {
+ $line =~ /class/ && $realfile =~ /\.(cpp|h|hpp|hh|cc)$/) {
# No spaces for:
# ->
@@ -2096,7 +2072,7 @@ sub process {
} elsif ($op eq '!' || $op eq '~' ||
$opv eq '*U' || $opv eq '-U' ||
$opv eq '&U' || $opv eq '&&U') {
- if ($op eq '~' && $ca =~ /::$/ && $realfile =~ /(\.cpp|\.h)$/) {
+ if ($op eq '~' && $ca =~ /::$/ && $realfile =~ /\.(cpp|h|hpp|cc|hh)$/) {
# '~' used as a name of Destructor
} elsif ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) {
@@ -2133,7 +2109,7 @@ sub process {
} elsif ($ctx !~ /[EWC]x[CWE]/) {
my $ok = 0;
- if ($realfile =~ /\.cpp|\.h$/) {
+ if ($realfile =~ /\.(cpp|h|hpp|cc|hh)$/) {
# Ignore template arguments <...> in C++
if (($op eq '<' || $op eq '>') && $line =~ /<.*>/) {
$ok = 1;
@@ -2654,10 +2630,6 @@ sub process {
}
- if ($has_sob == 0) {
- WARN("Missing Signed-off-by: line");
- }
-
# If we have no input at all, then there is nothing to report on
# so just keep quiet.
if ($#rawlines == -1) {
diff --git a/tools/build/cross-build/Makefile b/tools/build/cross-build/Makefile
index 72d78d7b6588..3c51dae472ef 100644
--- a/tools/build/cross-build/Makefile
+++ b/tools/build/cross-build/Makefile
@@ -1,4 +1,3 @@
-
NO_OBJ=
SCRIPTS= date.sh hostname.sh
BINDIR= /usr/bin
diff --git a/tools/build/cross-build/fake_chflags/Makefile b/tools/build/cross-build/fake_chflags/Makefile
index 75c251a2b272..f5b867d50939 100644
--- a/tools/build/cross-build/fake_chflags/Makefile
+++ b/tools/build/cross-build/fake_chflags/Makefile
@@ -1,4 +1,3 @@
-
NO_OBJ=
SCRIPTS= chflags
BINDIR= /usr/bin
diff --git a/tools/build/cross-build/fake_sysctl.c b/tools/build/cross-build/fake_sysctl.c
index 4f1b271f3858..c4e40ebb9e72 100644
--- a/tools/build/cross-build/fake_sysctl.c
+++ b/tools/build/cross-build/fake_sysctl.c
@@ -53,6 +53,7 @@ __freebsd_sysctlbyname(const char *name, void *oldp, size_t *oldlenp,
errx(EX_USAGE, "kern.vm_guest is read-only");
strlcpy(oldp, "none", *oldlenp);
*oldlenp = strlen("none");
+ return (0);
}
errx(EX_USAGE, "fatal: unknown sysctl %s\n", name);
}
diff --git a/tools/build/cross-build/fflags.c b/tools/build/cross-build/include/common/ssp/ssp.h
index f1d23c3637b6..2d8b43235baf 100644
--- a/tools/build/cross-build/fflags.c
+++ b/tools/build/cross-build/include/common/ssp/ssp.h
@@ -1,19 +1,7 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright 2018-2020 Alex Richardson <arichardson@FreeBSD.org>
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory (Department of Computer Science and
- * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
- * DARPA SSITH research programme.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * This work was supported by Innovate UK project 105694, "Digital Security by
- * Design (DSbD) Technology Platform Prototype".
+ * Copyright (c) 2024 Jessica Clarke <jrtc27@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -37,26 +25,10 @@
* SUCH DAMAGE.
*/
-#include <string.h>
-#include <unistd.h>
+#ifndef _SSP_SSP_H_
+#define _SSP_SSP_H_
-char *
-fflagstostr(u_long flags __unused)
-{
- return strdup("");
-}
+#define __ssp_real_(fun) fun
+#define __ssp_real(fun) __ssp_real_(fun)
-int
-strtofflags(char **stringp __unused, u_long *setp, u_long *clrp)
-{
- /* On linux just ignore the file flags for now */
- /*
- * XXX: this will prevent makefs from setting noschg on libc, etc.
- * so we should really find a way to support flags in disk images.
- */
- if (setp)
- *setp = 0;
- if (clrp)
- *clrp = 0;
- return (0); /* success */
-}
+#endif
diff --git a/tools/build/cross-build/include/common/sys/_types.h b/tools/build/cross-build/include/common/sys/_types.h
index 650edc8080d0..dc1b76f25063 100644
--- a/tools/build/cross-build/include/common/sys/_types.h
+++ b/tools/build/cross-build/include/common/sys/_types.h
@@ -45,3 +45,9 @@
* Neither GLibc nor macOS define __va_list but many FreeBSD headers require it.
*/
typedef __builtin_va_list __va_list;
+
+/* Needed for opensolaris compat. */
+typedef __int64_t off64_t;
+
+/* Needed for sys/_callout.h */
+typedef __int64_t __sbintime_t;
diff --git a/tools/build/cross-build/include/linux/fcntl.h b/tools/build/cross-build/include/linux/fcntl.h
index aafcfe43a325..e5718ce5e3ed 100644
--- a/tools/build/cross-build/include/linux/fcntl.h
+++ b/tools/build/cross-build/include/linux/fcntl.h
@@ -44,3 +44,10 @@
#include "__unused_workaround_end.h"
#include <sys/file.h>
+
+/*
+ * On FreeBSD fcntl.h indirectly brings in cdefs.h. On Linux with musl, it does
+ * not. It's needed in our fcntl.h for the cross build since we use
+ * __BEGIN_DECLS and __END_DECLS from it there.
+ */
+#include <sys/cdefs.h>
diff --git a/tools/build/cross-build/include/linux/limits.h b/tools/build/cross-build/include/linux/limits.h
index 5eca34b1120c..4631cabb1104 100644
--- a/tools/build/cross-build/include/linux/limits.h
+++ b/tools/build/cross-build/include/linux/limits.h
@@ -45,13 +45,11 @@
#if !defined(_GNU_SOURCE)
#warning "Attempting to use limits.h with -std=c89/without _GNU_SOURCE, many macros will be missing"
#endif
+#endif /* C89 */
-#else /* Not C89 */
-/* Not C89 -> check that all macros that we expect are defined */
#ifndef IOV_MAX
#error IOV_MAX should be defined
#endif
-#endif /* C89 */
#ifndef MAXBSIZE
#define MAXBSIZE 65536 /* must be power of 2 */
@@ -83,7 +81,6 @@
#endif
#include <sys/types.h>
-#include <sys/uio.h> /* For IOV_MAX */
/* Sanity checks for glibc */
#ifndef _GNU_SOURCE
diff --git a/tools/build/cross-build/include/linux/string.h b/tools/build/cross-build/include/linux/string.h
index 8fac9e0fe083..b6d2fe488d40 100644
--- a/tools/build/cross-build/include/linux/string.h
+++ b/tools/build/cross-build/include/linux/string.h
@@ -44,7 +44,7 @@
*/
#include <stdlib.h>
-#include <sys/cdefs.h>
+#include <sys/types.h>
__BEGIN_DECLS
#if !defined(__GLIBC__) || \
diff --git a/tools/build/cross-build/include/linux/sys/param.h b/tools/build/cross-build/include/linux/sys/param.h
index 33679d39ed49..3b29b9ef8430 100644
--- a/tools/build/cross-build/include/linux/sys/param.h
+++ b/tools/build/cross-build/include/linux/sys/param.h
@@ -45,3 +45,5 @@
* let's use 32 since that will work across all systems
*/
#define MAXLOGNAME 33 /* max login name length (incl. NUL) */
+
+#include <sys/types.h>
diff --git a/tools/build/cross-build/include/linux/sys/stat.h b/tools/build/cross-build/include/linux/sys/stat.h
index fa40b7e747b6..1a69e127c2e1 100644
--- a/tools/build/cross-build/include/linux/sys/stat.h
+++ b/tools/build/cross-build/include/linux/sys/stat.h
@@ -58,5 +58,33 @@
#define S_ISTXT S_ISVTX
#endif
+#ifndef DEFFILEMODE
+#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
+#endif
+
+#ifndef ALLPERMS
+#define ALLPERMS (S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
+
+#define UF_SETTABLE 0x0000ffff
+#define UF_NODUMP 0x00000001
+#define UF_IMMUTABLE 0x00000002
+#define UF_APPEND 0x00000004
+#define UF_OPAQUE 0x00000008
+#define UF_NOUNLINK 0x00000010
+#define UF_SYSTEM 0x00000080
+#define UF_SPARSE 0x00000100
+#define UF_OFFLINE 0x00000200
+#define UF_REPARSE 0x00000400
+#define UF_ARCHIVE 0x00000800
+#define UF_READONLY 0x00001000
+#define UF_HIDDEN 0x00008000
+#define SF_SETTABLE 0xffff0000
+#define SF_ARCHIVED 0x00010000
+#define SF_IMMUTABLE 0x00020000
+#define SF_APPEND 0x00040000
+#define SF_NOUNLINK 0x00100000
+#define SF_SNAPSHOT 0x00200000
+
/* This include is needed for OpenZFS bootstrap */
#include <sys/mount.h>
diff --git a/tools/build/cross-build/include/linux/sys/types.h b/tools/build/cross-build/include/linux/sys/types.h
index 770b3057f8a8..2e09cbb62271 100644
--- a/tools/build/cross-build/include/linux/sys/types.h
+++ b/tools/build/cross-build/include/linux/sys/types.h
@@ -35,8 +35,36 @@
*/
#pragma once
+#include <sys/cdefs.h> /* FreeBSD source assumes sys/types.h includes this */
+/*
+ * MUSL doesn't define the __intXX_t that FreeBSD does, but many of our headers
+ * assume that will always be present. Define them here. We assume !defined
+ * __GLIBC__ is musl since musl doesn't have a define to key off of. Thesee
+ * typedefs look backwards, but it's not circular because MUSL never defines the
+ * __*int*_t. Also, we don't have to work in the kernel, so it's OK to include
+ * stdint.h here.
+ */
+#ifndef __GLIBC__
+#include <stdint.h>
+typedef int64_t __int64_t;
+typedef int32_t __int32_t;
+typedef int16_t __int16_t;
+typedef int8_t __int8_t;
+typedef uint64_t __uint64_t;
+typedef uint32_t __uint32_t;
+typedef uint16_t __uint16_t;
+typedef uint8_t __uint8_t;
+#endif
+
#include_next <sys/types.h>
+/*
+ * stddef.h for both gcc and clang will define __size_t when size_t has
+ * been defined (except on *BSD where it doesn't touch __size_t). So if
+ * we're building on Linux, we know that if that's not defined, we have
+ * to typedef __size_t for FreeBSD's use of __size_t in places to work
+ * during bootstrapping.
+ */
#ifndef __size_t
typedef __SIZE_TYPE__ __size_t;
#endif
diff --git a/tools/build/cross-build/include/mac/string.h b/tools/build/cross-build/include/mac/string.h
index d7db0d3023a4..58464f1f9834 100644
--- a/tools/build/cross-build/include/mac/string.h
+++ b/tools/build/cross-build/include/mac/string.h
@@ -38,9 +38,12 @@
#include_next <string.h>
/*
- * strchrnul is not provided by macOS and the strchrnul.c implementation
- * can not be compiled on macOS so just provide it inline here
+ * strchrnul is provided by macOS 15.4 and later. However, there is
+ * no good way to detect the current host version at compile time, so
+ * provide an inline definition under an alternate name.
*/
+#define strchrnul(p, ch) __freebsd_strchrnul(p, ch)
+
static inline char *
strchrnul(const char *p, int ch)
{
diff --git a/tools/build/cross-build/include/mac/sys/_types.h b/tools/build/cross-build/include/mac/sys/_types.h
index 5ca37580b85a..8d39fc39f087 100644
--- a/tools/build/cross-build/include/mac/sys/_types.h
+++ b/tools/build/cross-build/include/mac/sys/_types.h
@@ -41,5 +41,3 @@
* __darwin_ct_rune_t exists.
*/
typedef __darwin_ct_rune_t __ct_rune_t;
-/* Needed for opensolaris compat. */
-typedef __int64_t off64_t;
diff --git a/tools/build/cross-build/mkimg/Makefile b/tools/build/cross-build/mkimg/Makefile
index 405d579fb633..cbef4a9f36ea 100644
--- a/tools/build/cross-build/mkimg/Makefile
+++ b/tools/build/cross-build/mkimg/Makefile
@@ -1,4 +1,3 @@
-
# allow building mkimg as a host tool.
MKIMG_SRC = ${SRCTOP}/usr.bin/mkimg
diff --git a/tools/build/cross-build/progname.c b/tools/build/cross-build/progname.c
index 81467627f164..b7163f23fb2a 100644
--- a/tools/build/cross-build/progname.c
+++ b/tools/build/cross-build/progname.c
@@ -36,7 +36,6 @@
#include <sys/cdefs.h>
#include <stdlib.h>
-#ifdef __GLIBC__
extern const char *__progname;
const char *
getprogname(void)
@@ -48,4 +47,3 @@ setprogname(const char *progname)
{
__progname = progname;
}
-#endif /* __GLIBC__ */
diff --git a/tools/build/depend-cleanup.sh b/tools/build/depend-cleanup.sh
index 45f04c0ace73..33ca8ecb709f 100755
--- a/tools/build/depend-cleanup.sh
+++ b/tools/build/depend-cleanup.sh
@@ -3,9 +3,15 @@
#
# Our current make(1)-based approach to dependency tracking cannot cope with
# certain source tree changes, including:
+#
# - removing source files
# - replacing generated files with files committed to the tree
# - changing file extensions (e.g. a C source file rewritten in C++)
+# - moving a file from one directory to another
+#
+# Note that changing extensions or moving files may occur in effect as a result
+# of switching from a generic machine-independent (MI) implementation file to a
+# machine-dependent (MD) one.
#
# We handle those cases here in an ad-hoc fashion by looking for the known-
# bad case in the main .depend file, and if found deleting all of the related
@@ -15,6 +21,48 @@
# should be removed once enough time has passed and it is extremely unlikely
# anyone would try a NO_CLEAN build against an object tree from before the
# related change. One year should be sufficient.
+#
+# Groups of cleanup rules begin with a comment including the date and git hash
+# of the affected commit, and a description. The clean_dep function (below)
+# handles common dependency cleanup cases. See the comment above the function
+# for its arguments.
+#
+# Examples of each of the special cases:
+#
+# - Removing a source file (including changing a file's extension). The path,
+# file, and extension are passed to clean_dep.
+#
+# # 20231031 0527c9bdc718 Remove forward compat ino64 stuff
+# clean_dep lib/libc fstat c
+#
+# # 20221115 42d10b1b56f2 move from rs.c to rs.cc
+# clean_dep usr.bin/rs rs c
+#
+# - Moving a file from one directory to another. Note that a regex is passed to
+# clean_dep, as the default regex is derived from the file name (strncat.c in
+# this example) does not change. The regex matches the old location, does not
+# match the new location, and does not match any dependency shared between
+# them. The `/`s are replaced with `.` to avoid awkward escaping.
+#
+# # 20250110 3dc5429158cf add strncat SIMD implementation
+# clean_dep lib/libc strncat c "libc.string.strncat.c"
+#
+# - Replacing generated files with files committed to the tree. This is special
+# case of moving from one directory to another. The stale generated file also
+# needs to be deleted, so that it isn't found in make's .PATH. Note the
+# unconditional `rm -f`: there's no need for an extra call to first check for
+# the file's existence.
+#
+# # 20250110 3863fec1ce2d add strlen SIMD implementation
+# clean_dep lib/libc strlen S arm-optimized-routines
+# run rm -f "$OBJTOP"/lib/libc/strlen.S
+#
+# A rule may be required for only one architecture:
+#
+# # 20220326 fbc002cb72d2 move from bcmp.c to bcmp.S
+# if [ "$MACHINE_ARCH" = "amd64" ]; then
+# clean_dep lib/libc bcmp c
+# fi
set -e
set -u
@@ -89,11 +137,12 @@ run()
# $1 directory
# $2 source filename w/o extension
# $3 source extension
+# $4 optional regex for egrep -w
clean_dep()
{
for libcompat in "" $ALL_libcompats; do
dirprfx=${libcompat:+obj-lib${libcompat}/}
- if egrep -qw "$2\.$3" "$OBJTOP"/$dirprfx$1/.depend.$2.*o 2>/dev/null; then
+ if egrep -qw "${4:-$2\.$3}" "$OBJTOP"/$dirprfx$1/.depend.$2.*o 2>/dev/null; then
echo "Removing stale ${libcompat:+lib${libcompat} }dependencies and objects for $2.$3"
run rm -f \
"$OBJTOP"/$dirprfx$1/.depend.$2.* \
@@ -103,57 +152,6 @@ clean_dep()
}
# Date Rev Description
-# 20200310 r358851 rename of openmp's ittnotify_static.c to .cpp
-clean_dep lib/libomp ittnotify_static c
-# 20200414 r359930 closefrom
-clean_dep lib/libc closefrom S
-
-# 20200826 r364746 OpenZFS merge, apply a big hammer (remove whole tree)
-if [ -e "$OBJTOP"/cddl/lib/libzfs/.depend.libzfs_changelist.o ] && \
- egrep -qw "cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c" \
- "$OBJTOP"/cddl/lib/libzfs/.depend.libzfs_changelist.o; then
- echo "Removing old ZFS tree"
- for libcompat in "" $ALL_libcompats; do
- dirprfx=${libcompat:+obj-lib${libcompat}/}
- run rm -rf "$OBJTOP"/${dirprfx}cddl
- done
-fi
-
-# 20200916 WARNS bumped, need bootstrapped crunchgen stubs
-if [ -e "$OBJTOP"/rescue/rescue/rescue.c ] && \
- ! grep -q 'crunched_stub_t' "$OBJTOP"/rescue/rescue/rescue.c; then
- echo "Removing old rescue(8) tree"
- run rm -rf "$OBJTOP"/rescue/rescue
-fi
-
-# 20210105 fda7daf06301 pfctl gained its own version of pf_ruleset.c
-if [ -e "$OBJTOP"/sbin/pfctl/.depend.pf_ruleset.o ] && \
- egrep -qw "sys/netpfil/pf/pf_ruleset.c" \
- "$OBJTOP"/sbin/pfctl/.depend.pf_ruleset.o; then
- echo "Removing old pf_ruleset dependecy file"
- run rm -rf "$OBJTOP"/sbin/pfctl/.depend.pf_ruleset.o
-fi
-
-# 20210108 821aa63a0940 non-widechar version of ncurses removed
-if [ -e "$OBJTOP"/lib/ncurses/ncursesw ]; then
- echo "Removing stale ncurses objects"
- for libcompat in "" $ALL_libcompats; do
- dirprfx=${libcompat:+obj-lib${libcompat}/}
- run rm -rf "$OBJTOP"/${dirprfx}lib/ncurses
- done
-fi
-
-# 20210608 f20893853e8e move from atomic.S to atomic.c
-clean_dep cddl/lib/libspl atomic S
-# 20211207 cbdec8db18b5 switch to libthr-friendly pdfork
-clean_dep lib/libc pdfork S
-
-# 20211230 5e6a2d6eb220 libc++.so.1 path changed in ldscript
-if [ -e "$OBJTOP"/lib/libc++/libc++.ld ] && \
- fgrep -q "/usr/lib/libc++.so" "$OBJTOP"/lib/libc++/libc++.ld; then
- echo "Removing old libc++ linker script"
- run rm -f "$OBJTOP"/lib/libc++/libc++.ld
-fi
# 20220326 fbc002cb72d2 move from bcmp.c to bcmp.S
if [ "$MACHINE_ARCH" = "amd64" ]; then
@@ -222,16 +220,143 @@ clean_dep lib/libc statfs c
# 20240308 e6ffc7669a56 Remove pointless MD syscall(2)
# 20240308 0ee0ae237324 Remove pointless MD syscall(2)
# 20240308 7b3836c28188 Remove pointless MD syscall(2)
-if [ ${MACHINE} != i386 -a -f "$OBJTOP"/lib/libsys/.depend.syscall.o ] && \
- grep -q -e 'libsys/[^ /]*/syscall.S' "$OBJTOP"/lib/libsys/.depend.syscall.*; then
- echo "Removing stale <arch>/syscall.S depends"
- clean_dep lib/libsys syscall S
- clean_dep lib/libc syscall S
+if [ ${MACHINE} != i386 ]; then
+ libcompats=
+ for libcompat in $ALL_libcompats; do
+ if [ $MACHINE = amd64 ] && [ $libcompat = 32 ]; then
+ continue
+ fi
+ libcompats="${libcompats+$libcompats }$libcompat"
+ done
+ ALL_libcompats="$libcompats" clean_dep lib/libsys syscall S ".*/syscall\.S"
+ ALL_libcompats="$libcompats" clean_dep lib/libc syscall S ".*/syscall\.S"
fi
# 20240416 2fda3ab0ac19 WITH_NVME: Remove from broken
if [ -f "$OBJTOP"/rescue/rescue/rescue.mk ] && \
- grep -q -v 'nvme_util.o' "$OBJTOP"/rescue/rescue/rescue.mk; then
+ ! grep -q 'nvme_util.o' "$OBJTOP"/rescue/rescue/rescue.mk; then
echo "removing rescue.mk without nvme_util.o"
- rm -f "$OBJTOP"/rescue/rescue/rescue.mk
+ run rm -f "$OBJTOP"/rescue/rescue/rescue.mk
+fi
+
+# 20240910 e2df9bb44109
+clean_dep cddl/lib/libzpool abd_os c "linux/zfs/abd_os\.c"
+
+# 20241007
+clean_dep cddl/lib/libzpool zfs_debug c "linux/zfs/zfs_debug\.c"
+
+# 20241011
+clean_dep cddl/lib/libzpool arc_os c "linux/zfs/arc_os\.c"
+
+# 20241018 1363acbf25de libc/csu: Support IFUNCs on riscv
+if [ ${MACHINE} = riscv ]; then
+ for f in "$OBJTOP"/lib/libc/.depend.libc_start1.*o; do
+ if [ ! -f "$f" ]; then
+ continue
+ fi
+ if ! grep -q 'lib/libc/csu/riscv/reloc\.c' "$f"; then
+ echo "Removing stale dependencies and objects for libc_start1.c"
+ run rm -f \
+ "$OBJTOP"/lib/libc/.depend.libc_start1.* \
+ "$OBJTOP"/lib/libc/libc_start1.*o
+ break
+ fi
+ done
+fi
+
+# 20241018 5deeebd8c6ca Merge llvm-project release/19.x llvmorg-19.1.2-0-g7ba7d8e2f7b6
+p="$OBJTOP"/lib/clang/libclang/clang/Basic
+f="$p"/arm_mve_builtin_sema.inc
+if [ -e "$f" ]; then
+ if grep -q SemaBuiltinConstantArgRange "$f"; then
+ echo "Removing pre-llvm19 clang-tblgen output"
+ run rm -f "$p"/*.inc
+ fi
+fi
+
+# 20241025 cb5e41b16083 Unbundle hash functions fom lib/libcrypt
+clean_dep lib/libcrypt crypt-md5 c
+clean_dep lib/libcrypt crypt-nthash c
+clean_dep lib/libcrypt crypt-sha256 c
+clean_dep lib/libcrypt crypt-sha512 c
+
+# 20241213 b55f5e1c4ae3 jemalloc: Move generated jemalloc.3 into lib/libc tree
+if [ -h "$OBJTOP"/lib/libc/jemalloc.3 ]; then
+ # Have to cleanup the jemalloc.3 in the obj tree since make gets
+ # confused and won't use the one in lib/libc/malloc/jemalloc/jemalloc.3
+ echo "Removing stale jemalloc.3 object"
+ run rm -f "$OBJTOP"/lib/libc/jemalloc.3
+fi
+
+if [ $MACHINE_ARCH = aarch64 ]; then
+ # 20250110 5e7d93a60440 add strcmp SIMD implementation
+ ALL_libcompats= clean_dep lib/libc strcmp S arm-optimized-routines
+ run rm -f "$OBJTOP"/lib/libc/strcmp.S
+
+ # 20250110 b91003acffe7 add strspn optimized implementation
+ ALL_libcompats= clean_dep lib/libc strspn c
+
+ # 20250110 f2bd390a54f1 add strcspn optimized implementation
+ ALL_libcompats= clean_dep lib/libc strcspn c
+
+ # 20250110 89b3872376cb add optimized strpbrk & strsep implementations
+ ALL_libcompats= clean_dep lib/libc strpbrk c "libc.string.strpbrk.c"
+
+ # 20250110 79287d783c72 strcat enable use of SIMD
+ ALL_libcompats= clean_dep lib/libc strcat c "libc.string.strcat.c"
+
+ # 20250110 756b7fc80837 add strlcpy SIMD implementation
+ ALL_libcompats= clean_dep lib/libc strlcpy c
+
+ # 20250110 25c485e14769 add strncmp SIMD implementation
+ ALL_libcompats= clean_dep lib/libc strncmp S arm-optimized-routines
+ run rm -f "$OBJTOP"/lib/libc/strncmp.S
+
+ # 20250110 bad17991c06d add memccpy SIMD implementation
+ ALL_libcompats= clean_dep lib/libc memccpy c
+
+ # 20250110 3dc5429158cf add strncat SIMD implementation
+ ALL_libcompats= clean_dep lib/libc strncat c "libc.string.strncat.c"
+
+ # 20250110 bea89d038ac5 add strlcat SIMD implementation, and move memchr
+ ALL_libcompats= clean_dep lib/libc strlcat c "libc.string.strlcat.c"
+ ALL_libcompats= clean_dep lib/libc memchr S "[[:space:]]memchr.S"
+ run rm -f "$OBJTOP"/lib/libc/memchr.S
+
+ # 20250110 3863fec1ce2d add strlen SIMD implementation
+ ALL_libcompats= clean_dep lib/libc strlen S arm-optimized-routines
+ run rm -f "$OBJTOP"/lib/libc/strlen.S
+
+ # 20250110 79e01e7e643c add bcopy & bzero wrapper
+ ALL_libcompats= clean_dep lib/libc bcopy c "libc.string.bcopy.c"
+ ALL_libcompats= clean_dep lib/libc bzero c "libc.string.bzero.c"
+
+ # 20250110 f2c98669fc1b add ASIMD-enhanced timingsafe_bcmp implementation
+ ALL_libcompats= clean_dep lib/libc timingsafe_bcmp c
+
+ # 20250110 3f224333af16 add timingsafe_memcmp() assembly implementation
+ ALL_libcompats= clean_dep lib/libc timingsafe_memcmp c
+fi
+
+# 20250402 839d0755fea8 ctld converted to C++
+clean_dep usr.sbin/ctld ctld c
+clean_dep usr.sbin/ctld conf c
+clean_dep usr.sbin/ctld discovery c
+clean_dep usr.sbin/ctld isns c
+clean_dep usr.sbin/ctld kernel c
+clean_dep usr.sbin/ctld login c
+clean_dep usr.sbin/ctld uclparse c
+
+# 20250425 2e47f35be5dc libllvm, libclang and liblldb became shared libraries
+if [ -f "$OBJTOP"/lib/clang/libllvm/libllvm.a ]; then
+ echo "Removing old static libllvm library"
+ run rm -f "$OBJTOP"/lib/clang/libllvm/libllvm.a
+fi
+if [ -f "$OBJTOP"/lib/clang/libclang/libclang.a ]; then
+ echo "Removing old static libclang library"
+ run rm -f "$OBJTOP"/lib/clang/libclang/libclang.a
+fi
+if [ -f "$OBJTOP"/lib/clang/liblldb/liblldb.a ]; then
+ echo "Removing old static liblldb library"
+ run rm -f "$OBJTOP"/lib/clang/liblldb/liblldb.a
fi
diff --git a/tools/build/make.py b/tools/build/make.py
index 73788a8896c7..ec42cb70dd21 100755
--- a/tools/build/make.py
+++ b/tools/build/make.py
@@ -243,7 +243,7 @@ if __name__ == "__main__":
sys.exit("MAKEOBJDIRPREFIX is not set, cannot continue!")
if not Path(MAKEOBJDIRPREFIX).is_dir():
sys.exit(
- "Chosen MAKEOBJDIRPREFIX=" + MAKEOBJDIRPREFIX + " doesn't exit!")
+ "Chosen MAKEOBJDIRPREFIX=" + MAKEOBJDIRPREFIX + " doesn't exist!")
objdir_prefix = Path(MAKEOBJDIRPREFIX).absolute()
source_root = Path(__file__).absolute().parent.parent.parent
diff --git a/tools/build/make_check/Makefile b/tools/build/make_check/Makefile
index d9efa7e4f8ab..74e28ad1c9f5 100644
--- a/tools/build/make_check/Makefile
+++ b/tools/build/make_check/Makefile
@@ -1,4 +1,3 @@
-
.MAKE.MODE= normal
# Failure is handled by the invoker, don't kill other legs of a parallel build.
diff --git a/tools/build/mk/Makefile.boot b/tools/build/mk/Makefile.boot
index 9f63a7499592..43246f3ceebf 100644
--- a/tools/build/mk/Makefile.boot
+++ b/tools/build/mk/Makefile.boot
@@ -1,4 +1,3 @@
-
CFLAGS+= -I${WORLDTMP}/legacy/usr/include
DPADD+= ${WORLDTMP}/legacy/usr/lib/libegacy.a
LDADD+= -legacy
@@ -50,6 +49,10 @@ CFLAGS+= -I${SRCTOP}/tools/build/cross-build/include/linux
CFLAGS+= -D_GNU_SOURCE=1
# Needed for sem_init, etc. on Linux (used by usr.bin/sort)
LDADD+= -pthread
+.if exists(/usr/lib/libfts.so) || exists(/usr/lib/libfts.a) || exists(/lib/libfts.so) || exists(/lib/libfts.a)
+# Needed for fts_open, etc. on musl (used by usr.bin/grep)
+LDADD+= -lfts
+.endif
.elif ${.MAKE.OS} == "Darwin"
CFLAGS+= -D_DARWIN_C_SOURCE=1
diff --git a/tools/build/mk/Makefile.boot.pre b/tools/build/mk/Makefile.boot.pre
index afad8d17b922..4bd8b964f90c 100644
--- a/tools/build/mk/Makefile.boot.pre
+++ b/tools/build/mk/Makefile.boot.pre
@@ -1,4 +1,3 @@
-
# Various MK_* options need to be set before including bsd.prog.mk/bsd.lib.mk
.if ${.MAKE.OS} != "FreeBSD"
# Most Linux distributions don't ship the .a files for static linking.
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
index 8898a405ea49..eb2713bafac9 100644
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -55,10 +55,6 @@ OLD_FILES+=usr/share/man/man8/acpidump.8.gz
OLD_FILES+=usr/share/man/man8/iasl.8.gz
.endif
-.if ${MK_ACPI} == no && ${MK_APM} == no
-OLD_FILES+=etc/rc.d/powerd
-.endif
-
.if ${MK_APM} == no
OLD_FILES+=etc/rc.d/apm
OLD_FILES+=etc/rc.d/apmd
@@ -134,7 +130,7 @@ OLD_FILES+=etc/rc.d/autounmountd
OLD_FILES+=usr/sbin/automount
OLD_FILES+=usr/sbin/automountd
OLD_FILES+=usr/sbin/autounmountd
-OLD_FILES+=usr/share/man/man5/autofs.5.gz
+OLD_FILES+=usr/share/man/man4/autofs.4.gz
OLD_FILES+=usr/share/man/man5/auto_master.5.gz
OLD_FILES+=usr/share/man/man8/automount.8.gz
OLD_FILES+=usr/share/man/man8/automountd.8.gz
@@ -193,6 +189,7 @@ OLD_FILES+=etc/bluetooth/hosts
OLD_FILES+=etc/bluetooth/protocols
OLD_FILES+=etc/defaults/bluetooth.device.conf
OLD_FILES+=etc/devd/iwmbtfw.conf
+OLD_FILES+=etc/devd/rtlbtfw.conf
OLD_DIRS+=etc/bluetooth
OLD_FILES+=etc/rc.d/bluetooth
OLD_FILES+=etc/rc.d/bthidd
@@ -240,6 +237,7 @@ OLD_FILES+=usr/sbin/iwmbtfw
OLD_FILES+=usr/sbin/l2control
OLD_FILES+=usr/sbin/l2ping
OLD_FILES+=usr/sbin/rfcomm_pppd
+OLD_FILES+=usr/sbin/rtlbtfw
OLD_FILES+=usr/sbin/sdpcontrol
OLD_FILES+=usr/sbin/sdpd
OLD_FILES+=usr/share/examples/etc/defaults/bluetooth.device.conf
@@ -318,6 +316,7 @@ OLD_FILES+=usr/share/man/man8/iwmbtfw.8.gz
OLD_FILES+=usr/share/man/man8/l2control.8.gz
OLD_FILES+=usr/share/man/man8/l2ping.8.gz
OLD_FILES+=usr/share/man/man8/rfcomm_pppd.8.gz
+OLD_FILES+=usr/share/man/man8/rtlbtfw.8.gz
OLD_FILES+=usr/share/man/man8/sdpcontrol.8.gz
OLD_FILES+=usr/share/man/man8/sdpd.8.gz
.endif
@@ -410,6 +409,8 @@ OLD_FILES+=usr/libexec/bsdinstall/distfetch
OLD_FILES+=usr/libexec/bsdinstall/docsinstall
OLD_FILES+=usr/libexec/bsdinstall/entropy
OLD_FILES+=usr/libexec/bsdinstall/fetchmissingdists
+OLD_FILES+=usr/libexec/bsdinstall/finalconfig
+OLD_FILES+=usr/libexec/bsdinstall/firmware
OLD_FILES+=usr/libexec/bsdinstall/hardening
OLD_FILES+=usr/libexec/bsdinstall/hostname
OLD_FILES+=usr/libexec/bsdinstall/jail
@@ -420,6 +421,7 @@ OLD_FILES+=usr/libexec/bsdinstall/netconfig
OLD_FILES+=usr/libexec/bsdinstall/netconfig_ipv4
OLD_FILES+=usr/libexec/bsdinstall/netconfig_ipv6
OLD_FILES+=usr/libexec/bsdinstall/partedit
+OLD_FILES+=usr/libexec/bsdinstall/pkgbase
OLD_FILES+=usr/libexec/bsdinstall/rootpass
OLD_FILES+=usr/libexec/bsdinstall/runconsoles
OLD_FILES+=usr/libexec/bsdinstall/script
@@ -872,6 +874,15 @@ OLD_FILES+=usr/share/man/man4/ccd.4.gz
OLD_FILES+=usr/share/man/man8/ccdconfig.8.gz
.endif
+.if ${MK_CLANG} == no && ${MK_CLANG_FORMAT} == no && ${MK_LLDB} == no
+OLD_LIBS+=usr/lib/libprivateclang.so.19
+.endif
+
+.if ${MK_CLANG_EXTRAS} == no && ${MK_CLANG} == no && ${MK_LLDB} == no && \
+ ${MK_LLD} == no && ${MK_LLVM_BINUTILS} == no && ${MK_LLVM_COV} == no
+OLD_LIBS+=usr/lib/libprivatellvm.so.19
+.endif
+
.if ${MK_CLANG} == no && ${MK_LLVM_BINUTILS} == no
OLD_FILES+=usr/bin/llvm-addr2line
OLD_FILES+=usr/bin/llvm-ar
@@ -902,417 +913,420 @@ OLD_FILES+=usr/share/man/man1/objdump.1.gz
OLD_FILES+=usr/bin/clang
OLD_FILES+=usr/bin/clang++
OLD_FILES+=usr/bin/clang-cpp
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_builtin_vars.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_cmath.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_complex_builtins.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_device_functions.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_intrinsics.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_libdevice_declares.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_math.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_math_forward_declares.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_runtime_wrapper.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_texture_intrinsics.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_hip_cmath.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_hip_libdevice_declares.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_hip_math.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_hip_runtime_wrapper.h
-OLD_FILES+=usr/lib/clang/18/include/__clang_hip_stdlib.h
-OLD_FILES+=usr/lib/clang/18/include/__stdarg___gnuc_va_list.h
-OLD_FILES+=usr/lib/clang/18/include/__stdarg___va_copy.h
-OLD_FILES+=usr/lib/clang/18/include/__stdarg_va_arg.h
-OLD_FILES+=usr/lib/clang/18/include/__stdarg_va_copy.h
-OLD_FILES+=usr/lib/clang/18/include/__stdarg_va_list.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_max_align_t.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_null.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_nullptr_t.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_offsetof.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_ptrdiff_t.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_rsize_t.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_size_t.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_unreachable.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_wchar_t.h
-OLD_FILES+=usr/lib/clang/18/include/__stddef_wint_t.h
-OLD_FILES+=usr/lib/clang/18/include/__wmmintrin_aes.h
-OLD_FILES+=usr/lib/clang/18/include/__wmmintrin_pclmul.h
-OLD_FILES+=usr/lib/clang/18/include/adcintrin.h
-OLD_FILES+=usr/lib/clang/18/include/adxintrin.h
-OLD_FILES+=usr/lib/clang/18/include/altivec.h
-OLD_FILES+=usr/lib/clang/18/include/ammintrin.h
-OLD_FILES+=usr/lib/clang/18/include/amxcomplexintrin.h
-OLD_FILES+=usr/lib/clang/18/include/amxfp16intrin.h
-OLD_FILES+=usr/lib/clang/18/include/amxintrin.h
-OLD_FILES+=usr/lib/clang/18/include/arm64intr.h
-OLD_FILES+=usr/lib/clang/18/include/arm_acle.h
-OLD_FILES+=usr/lib/clang/18/include/arm_bf16.h
-OLD_FILES+=usr/lib/clang/18/include/arm_cde.h
-OLD_FILES+=usr/lib/clang/18/include/arm_cmse.h
-OLD_FILES+=usr/lib/clang/18/include/arm_fp16.h
-OLD_FILES+=usr/lib/clang/18/include/arm_mve.h
-OLD_FILES+=usr/lib/clang/18/include/arm_neon.h
-OLD_FILES+=usr/lib/clang/18/include/arm_neon_sve_bridge.h
-OLD_FILES+=usr/lib/clang/18/include/arm_sme_draft_spec_subject_to_change.h
-OLD_FILES+=usr/lib/clang/18/include/arm_sve.h
-OLD_FILES+=usr/lib/clang/18/include/arm_vector_types.h
-OLD_FILES+=usr/lib/clang/18/include/armintr.h
-OLD_FILES+=usr/lib/clang/18/include/avx2intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512bf16intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512bitalgintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512bwintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512cdintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512dqintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512erintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512fintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512fp16intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512ifmaintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512ifmavlintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512pfintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vbmi2intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vbmiintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vbmivlintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlbf16intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlbitalgintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlbwintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlcdintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vldqintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlfp16intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlvbmi2intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlvnniintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vlvp2intersectintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vnniintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vp2intersectintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vpopcntdqintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avx512vpopcntdqvlintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avxifmaintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avxintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avxneconvertintrin.h
-OLD_FILES+=usr/lib/clang/18/include/avxvnniint16intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avxvnniint8intrin.h
-OLD_FILES+=usr/lib/clang/18/include/avxvnniintrin.h
-OLD_FILES+=usr/lib/clang/18/include/bmi2intrin.h
-OLD_FILES+=usr/lib/clang/18/include/bmiintrin.h
-OLD_FILES+=usr/lib/clang/18/include/builtins.h
-OLD_FILES+=usr/lib/clang/18/include/cet.h
-OLD_FILES+=usr/lib/clang/18/include/cetintrin.h
-OLD_FILES+=usr/lib/clang/18/include/cldemoteintrin.h
-OLD_FILES+=usr/lib/clang/18/include/clflushoptintrin.h
-OLD_FILES+=usr/lib/clang/18/include/clwbintrin.h
-OLD_FILES+=usr/lib/clang/18/include/clzerointrin.h
-OLD_FILES+=usr/lib/clang/18/include/cmpccxaddintrin.h
-OLD_FILES+=usr/lib/clang/18/include/cpuid.h
-OLD_FILES+=usr/lib/clang/18/include/crc32intrin.h
-OLD_FILES+=usr/lib/clang/18/include/cuda_wrappers/algorithm
-OLD_FILES+=usr/lib/clang/18/include/cuda_wrappers/bits/basic_string.h
-OLD_FILES+=usr/lib/clang/18/include/cuda_wrappers/bits/basic_string.tcc
-OLD_FILES+=usr/lib/clang/18/include/cuda_wrappers/bits/shared_ptr_base.h
-OLD_DIRS+=usr/lib/clang/18/include/cuda_wrappers/bits
-OLD_FILES+=usr/lib/clang/18/include/cuda_wrappers/cmath
-OLD_FILES+=usr/lib/clang/18/include/cuda_wrappers/complex
-OLD_FILES+=usr/lib/clang/18/include/cuda_wrappers/new
-OLD_DIRS+=usr/lib/clang/18/include/cuda_wrappers
-OLD_FILES+=usr/lib/clang/18/include/emmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/enqcmdintrin.h
-OLD_FILES+=usr/lib/clang/18/include/f16cintrin.h
-OLD_FILES+=usr/lib/clang/18/include/float.h
-OLD_FILES+=usr/lib/clang/18/include/fma4intrin.h
-OLD_FILES+=usr/lib/clang/18/include/fmaintrin.h
-OLD_FILES+=usr/lib/clang/18/include/fuzzer/FuzzedDataProvider.h
-OLD_DIRS+=usr/lib/clang/18/include/fuzzer
-OLD_FILES+=usr/lib/clang/18/include/fxsrintrin.h
-OLD_FILES+=usr/lib/clang/18/include/gfniintrin.h
-OLD_FILES+=usr/lib/clang/18/include/hexagon_circ_brev_intrinsics.h
-OLD_FILES+=usr/lib/clang/18/include/hexagon_protos.h
-OLD_FILES+=usr/lib/clang/18/include/hexagon_types.h
-OLD_FILES+=usr/lib/clang/18/include/hlsl/hlsl_basic_types.h
-OLD_FILES+=usr/lib/clang/18/include/hlsl/hlsl_intrinsics.h
-OLD_DIRS+=usr/lib/clang/18/include/hlsl
-OLD_FILES+=usr/lib/clang/18/include/hlsl.h
-OLD_FILES+=usr/lib/clang/18/include/hresetintrin.h
-OLD_FILES+=usr/lib/clang/18/include/htmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/htmxlintrin.h
-OLD_FILES+=usr/lib/clang/18/include/hvx_hexagon_protos.h
-OLD_FILES+=usr/lib/clang/18/include/ia32intrin.h
-OLD_FILES+=usr/lib/clang/18/include/immintrin.h
-OLD_FILES+=usr/lib/clang/18/include/intrin.h
-OLD_FILES+=usr/lib/clang/18/include/inttypes.h
-OLD_FILES+=usr/lib/clang/18/include/invpcidintrin.h
-OLD_FILES+=usr/lib/clang/18/include/iso646.h
-OLD_FILES+=usr/lib/clang/18/include/keylockerintrin.h
-OLD_FILES+=usr/lib/clang/18/include/larchintrin.h
-OLD_FILES+=usr/lib/clang/18/include/lasxintrin.h
-OLD_FILES+=usr/lib/clang/18/include/limits.h
-OLD_FILES+=usr/lib/clang/18/include/lsxintrin.h
-OLD_FILES+=usr/lib/clang/18/include/lwpintrin.h
-OLD_FILES+=usr/lib/clang/18/include/lzcntintrin.h
-OLD_FILES+=usr/lib/clang/18/include/mm3dnow.h
-OLD_FILES+=usr/lib/clang/18/include/mm_malloc.h
-OLD_FILES+=usr/lib/clang/18/include/mmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/module.modulemap
-OLD_FILES+=usr/lib/clang/18/include/movdirintrin.h
-OLD_FILES+=usr/lib/clang/18/include/msa.h
-OLD_FILES+=usr/lib/clang/18/include/mwaitxintrin.h
-OLD_FILES+=usr/lib/clang/18/include/nmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/omp-tools.h
-OLD_FILES+=usr/lib/clang/18/include/omp.h
-OLD_FILES+=usr/lib/clang/18/include/ompt.h
-OLD_FILES+=usr/lib/clang/18/include/opencl-c-base.h
-OLD_FILES+=usr/lib/clang/18/include/opencl-c.h
-OLD_FILES+=usr/lib/clang/18/include/openmp_wrappers/__clang_openmp_device_functions.h
-OLD_FILES+=usr/lib/clang/18/include/openmp_wrappers/cmath
-OLD_FILES+=usr/lib/clang/18/include/openmp_wrappers/complex
-OLD_FILES+=usr/lib/clang/18/include/openmp_wrappers/complex.h
-OLD_FILES+=usr/lib/clang/18/include/openmp_wrappers/complex_cmath.h
-OLD_FILES+=usr/lib/clang/18/include/openmp_wrappers/math.h
-OLD_FILES+=usr/lib/clang/18/include/openmp_wrappers/new
-OLD_DIRS+=usr/lib/clang/18/include/openmp_wrappers
-OLD_FILES+=usr/lib/clang/18/include/orc_rt/c_api.h
-OLD_DIRS+=usr/lib/clang/18/include/orc_rt
-OLD_FILES+=usr/lib/clang/18/include/pconfigintrin.h
-OLD_FILES+=usr/lib/clang/18/include/pkuintrin.h
-OLD_FILES+=usr/lib/clang/18/include/pmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/popcntintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/bmi2intrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/bmiintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/emmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/immintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/mm_malloc.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/mmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/nmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/pmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/smmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/tmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/x86gprintrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/x86intrin.h
-OLD_FILES+=usr/lib/clang/18/include/ppc_wrappers/xmmintrin.h
-OLD_DIRS+=usr/lib/clang/18/include/ppc_wrappers
-OLD_FILES+=usr/lib/clang/18/include/prfchiintrin.h
-OLD_FILES+=usr/lib/clang/18/include/prfchwintrin.h
-OLD_FILES+=usr/lib/clang/18/include/profile/InstrProfData.inc
-OLD_FILES+=usr/lib/clang/18/include/profile/MemProfData.inc
-OLD_DIRS+=usr/lib/clang/18/include/profile
-OLD_FILES+=usr/lib/clang/18/include/ptwriteintrin.h
-OLD_FILES+=usr/lib/clang/18/include/raointintrin.h
-OLD_FILES+=usr/lib/clang/18/include/rdpruintrin.h
-OLD_FILES+=usr/lib/clang/18/include/rdseedintrin.h
-OLD_FILES+=usr/lib/clang/18/include/riscv_bitmanip.h
-OLD_FILES+=usr/lib/clang/18/include/riscv_crypto.h
-OLD_FILES+=usr/lib/clang/18/include/riscv_ntlh.h
-OLD_FILES+=usr/lib/clang/18/include/riscv_vector.h
-OLD_FILES+=usr/lib/clang/18/include/rtmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/s390intrin.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/allocator_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/asan_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/common_interface_defs.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/coverage_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/dfsan_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/hwasan_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/linux_syscall_hooks.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/lsan_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/memprof_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/msan_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/netbsd_syscall_hooks.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/scudo_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/tsan_interface.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/tsan_interface_atomic.h
-OLD_FILES+=usr/lib/clang/18/include/sanitizer/ubsan_interface.h
-OLD_DIRS+=usr/lib/clang/18/include/sanitizer
-OLD_FILES+=usr/lib/clang/18/include/serializeintrin.h
-OLD_FILES+=usr/lib/clang/18/include/sgxintrin.h
-OLD_FILES+=usr/lib/clang/18/include/sha512intrin.h
-OLD_FILES+=usr/lib/clang/18/include/shaintrin.h
-OLD_FILES+=usr/lib/clang/18/include/sifive_vector.h
-OLD_FILES+=usr/lib/clang/18/include/sm3intrin.h
-OLD_FILES+=usr/lib/clang/18/include/sm4intrin.h
-OLD_FILES+=usr/lib/clang/18/include/smmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/stdalign.h
-OLD_FILES+=usr/lib/clang/18/include/stdarg.h
-OLD_FILES+=usr/lib/clang/18/include/stdatomic.h
-OLD_FILES+=usr/lib/clang/18/include/stdbool.h
-OLD_FILES+=usr/lib/clang/18/include/stdckdint.h
-OLD_FILES+=usr/lib/clang/18/include/stddef.h
-OLD_FILES+=usr/lib/clang/18/include/stdint.h
-OLD_FILES+=usr/lib/clang/18/include/stdnoreturn.h
-OLD_FILES+=usr/lib/clang/18/include/tbmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/tgmath.h
-OLD_FILES+=usr/lib/clang/18/include/tmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/tsxldtrkintrin.h
-OLD_FILES+=usr/lib/clang/18/include/uintrintrin.h
-OLD_FILES+=usr/lib/clang/18/include/unwind.h
-OLD_FILES+=usr/lib/clang/18/include/usermsrintrin.h
-OLD_FILES+=usr/lib/clang/18/include/vadefs.h
-OLD_FILES+=usr/lib/clang/18/include/vaesintrin.h
-OLD_FILES+=usr/lib/clang/18/include/varargs.h
-OLD_FILES+=usr/lib/clang/18/include/vecintrin.h
-OLD_FILES+=usr/lib/clang/18/include/velintrin.h
-OLD_FILES+=usr/lib/clang/18/include/velintrin_approx.h
-OLD_FILES+=usr/lib/clang/18/include/velintrin_gen.h
-OLD_FILES+=usr/lib/clang/18/include/vpclmulqdqintrin.h
-OLD_FILES+=usr/lib/clang/18/include/waitpkgintrin.h
-OLD_FILES+=usr/lib/clang/18/include/wasm_simd128.h
-OLD_FILES+=usr/lib/clang/18/include/wbnoinvdintrin.h
-OLD_FILES+=usr/lib/clang/18/include/wmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/x86gprintrin.h
-OLD_FILES+=usr/lib/clang/18/include/x86intrin.h
-OLD_FILES+=usr/lib/clang/18/include/xmmintrin.h
-OLD_FILES+=usr/lib/clang/18/include/xopintrin.h
-OLD_FILES+=usr/lib/clang/18/include/xray/xray_interface.h
-OLD_FILES+=usr/lib/clang/18/include/xray/xray_log_interface.h
-OLD_FILES+=usr/lib/clang/18/include/xray/xray_records.h
-OLD_DIRS+=usr/lib/clang/18/include/xray
-OLD_FILES+=usr/lib/clang/18/include/xsavecintrin.h
-OLD_FILES+=usr/lib/clang/18/include/xsaveintrin.h
-OLD_FILES+=usr/lib/clang/18/include/xsaveoptintrin.h
-OLD_FILES+=usr/lib/clang/18/include/xsavesintrin.h
-OLD_FILES+=usr/lib/clang/18/include/xtestintrin.h
-OLD_DIRS+=usr/lib/clang/18/include
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-aarch64.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-arm.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-armhf.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-i386.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-powerpc64.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-powerpc64le.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-riscv64.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan-x86_64.so
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_static-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_static-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_static-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.asan_static-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi_diag-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi_diag-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi_diag-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.dd-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.dd-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.fuzzer-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.fuzzer-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.fuzzer_interceptors-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan_cxx-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan_cxx-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-powerpc.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.profile-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.safestack-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.safestack-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.safestack-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.stats_client-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan_cxx-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan_cxx-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-powerpc64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-riscv64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-basic-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-basic-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-basic-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-basic-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-basic-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-fdr-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-fdr-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-fdr-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-profiling-arm.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-profiling-armhf.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-profiling-powerpc64le.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
-OLD_FILES+=usr/lib/clang/18/lib/freebsd/libclang_rt.xray-x86_64.a
-OLD_DIRS+=usr/lib/clang/18/lib/freebsd
-OLD_DIRS+=usr/lib/clang/18/lib
-OLD_FILES+=usr/lib/clang/18/share/asan_ignorelist.txt
-OLD_FILES+=usr/lib/clang/18/share/cfi_ignorelist.txt
-OLD_FILES+=usr/lib/clang/18/share/msan_ignorelist.txt
-OLD_DIRS+=usr/lib/clang/18/share
-OLD_DIRS+=usr/lib/clang/18
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_builtin_vars.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_cmath.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_complex_builtins.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_device_functions.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_intrinsics.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_libdevice_declares.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_math.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_math_forward_declares.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_runtime_wrapper.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_cuda_texture_intrinsics.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_hip_cmath.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_hip_libdevice_declares.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_hip_math.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_hip_runtime_wrapper.h
+OLD_FILES+=usr/lib/clang/19/include/__clang_hip_stdlib.h
+OLD_FILES+=usr/lib/clang/19/include/__stdarg___gnuc_va_list.h
+OLD_FILES+=usr/lib/clang/19/include/__stdarg___va_copy.h
+OLD_FILES+=usr/lib/clang/19/include/__stdarg_header_macro.h
+OLD_FILES+=usr/lib/clang/19/include/__stdarg_va_arg.h
+OLD_FILES+=usr/lib/clang/19/include/__stdarg_va_copy.h
+OLD_FILES+=usr/lib/clang/19/include/__stdarg_va_list.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_header_macro.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_max_align_t.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_null.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_nullptr_t.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_offsetof.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_ptrdiff_t.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_rsize_t.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_size_t.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_unreachable.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_wchar_t.h
+OLD_FILES+=usr/lib/clang/19/include/__stddef_wint_t.h
+OLD_FILES+=usr/lib/clang/19/include/__wmmintrin_aes.h
+OLD_FILES+=usr/lib/clang/19/include/__wmmintrin_pclmul.h
+OLD_FILES+=usr/lib/clang/19/include/adcintrin.h
+OLD_FILES+=usr/lib/clang/19/include/adxintrin.h
+OLD_FILES+=usr/lib/clang/19/include/altivec.h
+OLD_FILES+=usr/lib/clang/19/include/ammintrin.h
+OLD_FILES+=usr/lib/clang/19/include/amxcomplexintrin.h
+OLD_FILES+=usr/lib/clang/19/include/amxfp16intrin.h
+OLD_FILES+=usr/lib/clang/19/include/amxintrin.h
+OLD_FILES+=usr/lib/clang/19/include/arm64intr.h
+OLD_FILES+=usr/lib/clang/19/include/arm_acle.h
+OLD_FILES+=usr/lib/clang/19/include/arm_bf16.h
+OLD_FILES+=usr/lib/clang/19/include/arm_cde.h
+OLD_FILES+=usr/lib/clang/19/include/arm_cmse.h
+OLD_FILES+=usr/lib/clang/19/include/arm_fp16.h
+OLD_FILES+=usr/lib/clang/19/include/arm_mve.h
+OLD_FILES+=usr/lib/clang/19/include/arm_neon.h
+OLD_FILES+=usr/lib/clang/19/include/arm_neon_sve_bridge.h
+OLD_FILES+=usr/lib/clang/19/include/arm_sme.h
+OLD_FILES+=usr/lib/clang/19/include/arm_sve.h
+OLD_FILES+=usr/lib/clang/19/include/arm_vector_types.h
+OLD_FILES+=usr/lib/clang/19/include/armintr.h
+OLD_FILES+=usr/lib/clang/19/include/avx2intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512bf16intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512bitalgintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512bwintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512cdintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512dqintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512fintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512fp16intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512ifmaintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512ifmavlintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vbmi2intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vbmiintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vbmivlintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlbf16intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlbitalgintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlbwintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlcdintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vldqintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlfp16intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlvbmi2intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlvnniintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vlvp2intersectintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vnniintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vp2intersectintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vpopcntdqintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avx512vpopcntdqvlintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avxifmaintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avxintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avxneconvertintrin.h
+OLD_FILES+=usr/lib/clang/19/include/avxvnniint16intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avxvnniint8intrin.h
+OLD_FILES+=usr/lib/clang/19/include/avxvnniintrin.h
+OLD_FILES+=usr/lib/clang/19/include/bmi2intrin.h
+OLD_FILES+=usr/lib/clang/19/include/bmiintrin.h
+OLD_FILES+=usr/lib/clang/19/include/builtins.h
+OLD_FILES+=usr/lib/clang/19/include/cet.h
+OLD_FILES+=usr/lib/clang/19/include/cetintrin.h
+OLD_FILES+=usr/lib/clang/19/include/cldemoteintrin.h
+OLD_FILES+=usr/lib/clang/19/include/clflushoptintrin.h
+OLD_FILES+=usr/lib/clang/19/include/clwbintrin.h
+OLD_FILES+=usr/lib/clang/19/include/clzerointrin.h
+OLD_FILES+=usr/lib/clang/19/include/cmpccxaddintrin.h
+OLD_FILES+=usr/lib/clang/19/include/cpuid.h
+OLD_FILES+=usr/lib/clang/19/include/crc32intrin.h
+OLD_FILES+=usr/lib/clang/19/include/cuda_wrappers/algorithm
+OLD_FILES+=usr/lib/clang/19/include/cuda_wrappers/bits/basic_string.h
+OLD_FILES+=usr/lib/clang/19/include/cuda_wrappers/bits/basic_string.tcc
+OLD_FILES+=usr/lib/clang/19/include/cuda_wrappers/bits/shared_ptr_base.h
+OLD_DIRS+=usr/lib/clang/19/include/cuda_wrappers/bits
+OLD_FILES+=usr/lib/clang/19/include/cuda_wrappers/cmath
+OLD_FILES+=usr/lib/clang/19/include/cuda_wrappers/complex
+OLD_FILES+=usr/lib/clang/19/include/cuda_wrappers/new
+OLD_DIRS+=usr/lib/clang/19/include/cuda_wrappers
+OLD_FILES+=usr/lib/clang/19/include/emmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/enqcmdintrin.h
+OLD_FILES+=usr/lib/clang/19/include/f16cintrin.h
+OLD_FILES+=usr/lib/clang/19/include/float.h
+OLD_FILES+=usr/lib/clang/19/include/fma4intrin.h
+OLD_FILES+=usr/lib/clang/19/include/fmaintrin.h
+OLD_FILES+=usr/lib/clang/19/include/fuzzer/FuzzedDataProvider.h
+OLD_DIRS+=usr/lib/clang/19/include/fuzzer
+OLD_FILES+=usr/lib/clang/19/include/fxsrintrin.h
+OLD_FILES+=usr/lib/clang/19/include/gfniintrin.h
+OLD_FILES+=usr/lib/clang/19/include/hexagon_circ_brev_intrinsics.h
+OLD_FILES+=usr/lib/clang/19/include/hexagon_protos.h
+OLD_FILES+=usr/lib/clang/19/include/hexagon_types.h
+OLD_FILES+=usr/lib/clang/19/include/hlsl/hlsl_basic_types.h
+OLD_FILES+=usr/lib/clang/19/include/hlsl/hlsl_intrinsics.h
+OLD_DIRS+=usr/lib/clang/19/include/hlsl
+OLD_FILES+=usr/lib/clang/19/include/hlsl.h
+OLD_FILES+=usr/lib/clang/19/include/hresetintrin.h
+OLD_FILES+=usr/lib/clang/19/include/htmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/htmxlintrin.h
+OLD_FILES+=usr/lib/clang/19/include/hvx_hexagon_protos.h
+OLD_FILES+=usr/lib/clang/19/include/ia32intrin.h
+OLD_FILES+=usr/lib/clang/19/include/immintrin.h
+OLD_FILES+=usr/lib/clang/19/include/intrin.h
+OLD_FILES+=usr/lib/clang/19/include/intrin0.h
+OLD_FILES+=usr/lib/clang/19/include/inttypes.h
+OLD_FILES+=usr/lib/clang/19/include/invpcidintrin.h
+OLD_FILES+=usr/lib/clang/19/include/iso646.h
+OLD_FILES+=usr/lib/clang/19/include/keylockerintrin.h
+OLD_FILES+=usr/lib/clang/19/include/larchintrin.h
+OLD_FILES+=usr/lib/clang/19/include/lasxintrin.h
+OLD_FILES+=usr/lib/clang/19/include/limits.h
+OLD_FILES+=usr/lib/clang/19/include/lsxintrin.h
+OLD_FILES+=usr/lib/clang/19/include/lwpintrin.h
+OLD_FILES+=usr/lib/clang/19/include/lzcntintrin.h
+OLD_FILES+=usr/lib/clang/19/include/mm3dnow.h
+OLD_FILES+=usr/lib/clang/19/include/mm_malloc.h
+OLD_FILES+=usr/lib/clang/19/include/mmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/module.modulemap
+OLD_FILES+=usr/lib/clang/19/include/movdirintrin.h
+OLD_FILES+=usr/lib/clang/19/include/msa.h
+OLD_FILES+=usr/lib/clang/19/include/mwaitxintrin.h
+OLD_FILES+=usr/lib/clang/19/include/nmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/omp-tools.h
+OLD_FILES+=usr/lib/clang/19/include/omp.h
+OLD_FILES+=usr/lib/clang/19/include/ompt.h
+OLD_FILES+=usr/lib/clang/19/include/opencl-c-base.h
+OLD_FILES+=usr/lib/clang/19/include/opencl-c.h
+OLD_FILES+=usr/lib/clang/19/include/openmp_wrappers/__clang_openmp_device_functions.h
+OLD_FILES+=usr/lib/clang/19/include/openmp_wrappers/cmath
+OLD_FILES+=usr/lib/clang/19/include/openmp_wrappers/complex
+OLD_FILES+=usr/lib/clang/19/include/openmp_wrappers/complex.h
+OLD_FILES+=usr/lib/clang/19/include/openmp_wrappers/complex_cmath.h
+OLD_FILES+=usr/lib/clang/19/include/openmp_wrappers/math.h
+OLD_FILES+=usr/lib/clang/19/include/openmp_wrappers/new
+OLD_DIRS+=usr/lib/clang/19/include/openmp_wrappers
+OLD_FILES+=usr/lib/clang/19/include/orc_rt/c_api.h
+OLD_DIRS+=usr/lib/clang/19/include/orc_rt
+OLD_FILES+=usr/lib/clang/19/include/pconfigintrin.h
+OLD_FILES+=usr/lib/clang/19/include/pkuintrin.h
+OLD_FILES+=usr/lib/clang/19/include/pmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/popcntintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/bmi2intrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/bmiintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/emmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/immintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/mm_malloc.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/mmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/nmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/pmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/smmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/tmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/x86gprintrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/x86intrin.h
+OLD_FILES+=usr/lib/clang/19/include/ppc_wrappers/xmmintrin.h
+OLD_DIRS+=usr/lib/clang/19/include/ppc_wrappers
+OLD_FILES+=usr/lib/clang/19/include/prfchiintrin.h
+OLD_FILES+=usr/lib/clang/19/include/prfchwintrin.h
+OLD_FILES+=usr/lib/clang/19/include/profile/InstrProfData.inc
+OLD_FILES+=usr/lib/clang/19/include/profile/MemProfData.inc
+OLD_DIRS+=usr/lib/clang/19/include/profile
+OLD_FILES+=usr/lib/clang/19/include/ptrauth.h
+OLD_FILES+=usr/lib/clang/19/include/ptwriteintrin.h
+OLD_FILES+=usr/lib/clang/19/include/raointintrin.h
+OLD_FILES+=usr/lib/clang/19/include/rdpruintrin.h
+OLD_FILES+=usr/lib/clang/19/include/rdseedintrin.h
+OLD_FILES+=usr/lib/clang/19/include/riscv_bitmanip.h
+OLD_FILES+=usr/lib/clang/19/include/riscv_crypto.h
+OLD_FILES+=usr/lib/clang/19/include/riscv_ntlh.h
+OLD_FILES+=usr/lib/clang/19/include/riscv_vector.h
+OLD_FILES+=usr/lib/clang/19/include/rtmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/s390intrin.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/allocator_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/asan_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/common_interface_defs.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/coverage_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/dfsan_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/hwasan_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/linux_syscall_hooks.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/lsan_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/memprof_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/msan_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/netbsd_syscall_hooks.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/scudo_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/tsan_interface.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/tsan_interface_atomic.h
+OLD_FILES+=usr/lib/clang/19/include/sanitizer/ubsan_interface.h
+OLD_DIRS+=usr/lib/clang/19/include/sanitizer
+OLD_FILES+=usr/lib/clang/19/include/serializeintrin.h
+OLD_FILES+=usr/lib/clang/19/include/sgxintrin.h
+OLD_FILES+=usr/lib/clang/19/include/sha512intrin.h
+OLD_FILES+=usr/lib/clang/19/include/shaintrin.h
+OLD_FILES+=usr/lib/clang/19/include/sifive_vector.h
+OLD_FILES+=usr/lib/clang/19/include/sm3intrin.h
+OLD_FILES+=usr/lib/clang/19/include/sm4intrin.h
+OLD_FILES+=usr/lib/clang/19/include/smmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/stdalign.h
+OLD_FILES+=usr/lib/clang/19/include/stdarg.h
+OLD_FILES+=usr/lib/clang/19/include/stdatomic.h
+OLD_FILES+=usr/lib/clang/19/include/stdbool.h
+OLD_FILES+=usr/lib/clang/19/include/stdckdint.h
+OLD_FILES+=usr/lib/clang/19/include/stddef.h
+OLD_FILES+=usr/lib/clang/19/include/stdint.h
+OLD_FILES+=usr/lib/clang/19/include/stdnoreturn.h
+OLD_FILES+=usr/lib/clang/19/include/tbmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/tgmath.h
+OLD_FILES+=usr/lib/clang/19/include/tmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/tsxldtrkintrin.h
+OLD_FILES+=usr/lib/clang/19/include/uintrintrin.h
+OLD_FILES+=usr/lib/clang/19/include/unwind.h
+OLD_FILES+=usr/lib/clang/19/include/usermsrintrin.h
+OLD_FILES+=usr/lib/clang/19/include/vadefs.h
+OLD_FILES+=usr/lib/clang/19/include/vaesintrin.h
+OLD_FILES+=usr/lib/clang/19/include/varargs.h
+OLD_FILES+=usr/lib/clang/19/include/vecintrin.h
+OLD_FILES+=usr/lib/clang/19/include/velintrin.h
+OLD_FILES+=usr/lib/clang/19/include/velintrin_approx.h
+OLD_FILES+=usr/lib/clang/19/include/velintrin_gen.h
+OLD_FILES+=usr/lib/clang/19/include/vpclmulqdqintrin.h
+OLD_FILES+=usr/lib/clang/19/include/waitpkgintrin.h
+OLD_FILES+=usr/lib/clang/19/include/wasm_simd128.h
+OLD_FILES+=usr/lib/clang/19/include/wbnoinvdintrin.h
+OLD_FILES+=usr/lib/clang/19/include/wmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/x86gprintrin.h
+OLD_FILES+=usr/lib/clang/19/include/x86intrin.h
+OLD_FILES+=usr/lib/clang/19/include/xmmintrin.h
+OLD_FILES+=usr/lib/clang/19/include/xopintrin.h
+OLD_FILES+=usr/lib/clang/19/include/xray/xray_interface.h
+OLD_FILES+=usr/lib/clang/19/include/xray/xray_log_interface.h
+OLD_FILES+=usr/lib/clang/19/include/xray/xray_records.h
+OLD_DIRS+=usr/lib/clang/19/include/xray
+OLD_FILES+=usr/lib/clang/19/include/xsavecintrin.h
+OLD_FILES+=usr/lib/clang/19/include/xsaveintrin.h
+OLD_FILES+=usr/lib/clang/19/include/xsaveoptintrin.h
+OLD_FILES+=usr/lib/clang/19/include/xsavesintrin.h
+OLD_FILES+=usr/lib/clang/19/include/xtestintrin.h
+OLD_FILES+=usr/lib/clang/19/include/yvals_core.h
+OLD_DIRS+=usr/lib/clang/19/include
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-aarch64.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-arm.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-armhf.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-i386.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-powerpc64.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-powerpc64le.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-riscv64.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan-x86_64.so
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_static-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_static-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_static-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.asan_static-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi_diag-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi_diag-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi_diag-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.dd-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.dd-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.fuzzer-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.fuzzer-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.fuzzer_interceptors-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan_cxx-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan_cxx-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-powerpc.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.profile-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.safestack-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.safestack-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.safestack-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.stats_client-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan_cxx-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan_cxx-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-powerpc64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-riscv64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-basic-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-basic-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-basic-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-basic-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-basic-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-fdr-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-fdr-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-fdr-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-profiling-arm.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-profiling-armhf.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-profiling-powerpc64le.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
+OLD_FILES+=usr/lib/clang/19/lib/freebsd/libclang_rt.xray-x86_64.a
+OLD_DIRS+=usr/lib/clang/19/lib/freebsd
+OLD_DIRS+=usr/lib/clang/19/lib
+OLD_FILES+=usr/lib/clang/19/share/asan_ignorelist.txt
+OLD_FILES+=usr/lib/clang/19/share/cfi_ignorelist.txt
+OLD_FILES+=usr/lib/clang/19/share/msan_ignorelist.txt
+OLD_DIRS+=usr/lib/clang/19/share
+OLD_DIRS+=usr/lib/clang/19
OLD_DIRS+=usr/lib/clang
OLD_FILES+=usr/share/doc/llvm/clang/LICENSE.TXT
OLD_DIRS+=usr/share/doc/llvm/clang
@@ -1978,6 +1992,32 @@ OLD_FILES+=usr/share/man/man8/fdcontrol.8.gz
.endif
.if ${MK_FORTH} == no
+OLD_FILES+=boot/beastie.4th
+OLD_FILES+=boot/brand-fbsd.4th
+OLD_FILES+=boot/brand.4th
+OLD_FILES+=boot/check-password.4th
+OLD_FILES+=boot/color.4th
+OLD_FILES+=boot/delay.4th
+OLD_FILES+=boot/efi.4th
+OLD_FILES+=boot/frames.4th
+OLD_FILES+=boot/loader_4th
+OLD_FILES+=boot/loader_4th.efi
+OLD_FILES+=boot/loader_4th.efi.old
+OLD_FILES+=boot/loader_4th.old
+OLD_FILES+=boot/loader.4th
+OLD_FILES+=boot/logo-beastie.4th
+OLD_FILES+=boot/logo-beastiebw.4th
+OLD_FILES+=boot/logo-fbsdbw.4th
+OLD_FILES+=boot/logo-orb.4th
+OLD_FILES+=boot/logo-orbbw.4th
+OLD_FILES+=boot/menu-commands.4th
+OLD_FILES+=boot/menu.4th
+OLD_FILES+=boot/menusets.4th
+OLD_FILES+=boot/screen.4th
+OLD_FILES+=boot/shortcuts.4th
+OLD_FILES+=boot/support.4th
+OLD_LIBS+=boot/userboot_4th.so
+OLD_FILES+=boot/version.4th
OLD_FILES+=usr/share/man/man8/beastie.4th.8.gz
OLD_FILES+=usr/share/man/man8/brand.4th.8.gz
OLD_FILES+=usr/share/man/man8/check-password.4th.8.gz
@@ -2065,19 +2105,6 @@ OLD_FILES+=usr/share/man/man8/strfile.8.gz
OLD_FILES+=usr/share/man/man8/unstr.8.gz
.endif
-.if ${MK_GH_BC} == no
-OLD_FILES+=usr/share/misc/bc.library
-OLD_FILES+=usr/tests/usr.bin/dc/Kyuafile
-OLD_FILES+=usr/tests/usr.bin/dc/bcode
-OLD_FILES+=usr/tests/usr.bin/dc/inout
-OLD_DIRS+=usr/tests/usr.bin/dc
-.endif
-
-.if ${MK_GNU_DIFF} == no
-OLD_FILES+=usr/bin/diff3
-OLD_FILES+=usr/share/man/man1/diff3.1.gz
-.endif
-
.if ${MK_GOOGLETEST} == no
OLD_FILES+=usr/include/private/gmock/gmock-actions.h
OLD_FILES+=usr/include/private/gmock/gmock-cardinalities.h
@@ -2661,6 +2688,7 @@ OLD_FILES+=usr/share/man/man8/ippool.8.gz
.if ${MK_IPFW} == no
OLD_FILES+=etc/rc.d/ipfw
+OLD_FILES+=etc/rc.d/natd
OLD_FILES+=etc/periodic/security/500.ipfwdenied
OLD_FILES+=etc/periodic/security/550.ipfwlimit
OLD_FILES+=sbin/ipfw
@@ -2703,6 +2731,8 @@ OLD_FILES+=usr/share/man/man1/truss.1.gz
.endif
.if ${MK_KERBEROS} == no
+.if ${MK_MITKRB5} == no
+# Remove Heimdal because we do not want Kerberos
OLD_FILES+=etc/rc.d/ipropd_master
OLD_FILES+=etc/rc.d/ipropd_slave
OLD_FILES+=usr/bin/asn1_compile
@@ -2727,12 +2757,16 @@ OLD_FILES+=usr/include/asn1-common.h
OLD_FILES+=usr/include/asn1_err.h
OLD_FILES+=usr/include/base64.h
OLD_FILES+=usr/include/cms_asn1.h
+OLD_FILES+=usr/include/common.h
OLD_FILES+=usr/include/crmf_asn1.h
OLD_FILES+=usr/include/der-private.h
OLD_FILES+=usr/include/der-protos.h
OLD_FILES+=usr/include/der.h
OLD_FILES+=usr/include/digest_asn1.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
OLD_FILES+=usr/include/getarg.h
+OLD_FILES+=usr/include/groups.h
OLD_FILES+=usr/include/gssapi/gssapi_krb5.h
OLD_FILES+=usr/include/hdb-protos.h
OLD_FILES+=usr/include/hdb.h
@@ -2749,6 +2783,7 @@ OLD_FILES+=usr/include/hx509-private.h
OLD_FILES+=usr/include/hx509-protos.h
OLD_FILES+=usr/include/hx509.h
OLD_FILES+=usr/include/hx509_err.h
+OLD_FILES+=usr/include/iana.h
OLD_FILES+=usr/include/k524_err.h
OLD_FILES+=usr/include/kadm5/admin.h
OLD_FILES+=usr/include/kadm5/kadm5-private.h
@@ -2787,6 +2822,8 @@ OLD_FILES+=usr/include/resolve.h
OLD_FILES+=usr/include/rfc2459_asn1.h
OLD_FILES+=usr/include/roken-common.h
OLD_FILES+=usr/include/rtbl.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
OLD_FILES+=usr/include/wind.h
OLD_FILES+=usr/include/wind_err.h
OLD_FILES+=usr/include/xdbm.h
@@ -2858,10 +2895,6 @@ OLD_FILES+=usr/lib/libwind.a
OLD_FILES+=usr/lib/libwind.so
OLD_LIBS+=usr/lib/libwind.so.11
OLD_FILES+=usr/lib/libwind_p.a
-OLD_FILES+=usr/lib/pam_krb5.so
-OLD_LIBS+=usr/lib/pam_krb5.so.6
-OLD_FILES+=usr/lib/pam_ksu.so
-OLD_LIBS+=usr/lib/pam_ksu.so.6
OLD_FILES+=usr/lib/libprivateheimipcc.a
OLD_FILES+=usr/lib/libprivateheimipcc.so
OLD_LIBS+=usr/lib/libprivateheimipcc.so.11
@@ -3597,13 +3630,3262 @@ OLD_FILES+=usr/share/man/man8/kimpersonate.8.gz
OLD_FILES+=usr/share/man/man8/kpasswdd.8.gz
OLD_FILES+=usr/share/man/man8/kstash.8.gz
OLD_FILES+=usr/share/man/man8/ktutil.8.gz
-OLD_FILES+=usr/share/man/man8/pam_krb5.8.gz
-OLD_FILES+=usr/share/man/man8/pam_ksu.8.gz
OLD_FILES+=usr/share/man/man8/string2key.8.gz
OLD_FILES+=usr/share/man/man8/verify_krb5_conf.8.gz
+.else
+# Remove MIT KRB5 because we do not want Kerberos
+OLD_FILES+=usr/bin/compile_et
+OLD_FILES+=usr/bin/gss-client
+OLD_FILES+=usr/bin/k5srvutil
+OLD_FILES+=usr/bin/kadmin
+OLD_FILES+=usr/bin/kdestroy
+OLD_FILES+=usr/bin/kinit
+OLD_FILES+=usr/bin/klist
+OLD_FILES+=usr/bin/kpasswd
+OLD_FILES+=usr/bin/krb5-config
+OLD_FILES+=usr/bin/ksu
+OLD_FILES+=usr/bin/kswitch
+OLD_FILES+=usr/bin/ktutil
+OLD_FILES+=usr/bin/kvno
+OLD_FILES+=usr/bin/sclient
+OLD_FILES+=usr/bin/sim_client
+OLD_FILES+=usr/bin/uuclient
+OLD_FILES+=etc/rc.d/kpropd
+OLD_FILES+=usr/include/com_err.h
+OLD_FILES+=usr/include/common.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
+OLD_FILES+=usr/include/groups.h
+OLD_FILES+=usr/include/gssapi.h
+OLD_FILES+=usr/include/gssapi/gssapi.h
+OLD_FILES+=usr/include/gssapi/gssapi_alloc.h
+OLD_FILES+=usr/include/gssapi/gssapi_ext.h
+OLD_FILES+=usr/include/gssapi/gssapi_generic.h
+OLD_FILES+=usr/include/gssapi/gssapi_krb5.h
+OLD_FILES+=usr/include/gssapi/mechglue.h
+OLD_FILES+=usr/include/gssrpc/auth.h
+OLD_FILES+=usr/include/gssrpc/auth_gss.h
+OLD_FILES+=usr/include/gssrpc/auth_gssapi.h
+OLD_FILES+=usr/include/gssrpc/auth_unix.h
+OLD_FILES+=usr/include/gssrpc/clnt.h
+OLD_FILES+=usr/include/gssrpc/netdb.h
+OLD_FILES+=usr/include/gssrpc/pmap_clnt.h
+OLD_FILES+=usr/include/gssrpc/pmap_prot.h
+OLD_FILES+=usr/include/gssrpc/pmap_rmt.h
+OLD_FILES+=usr/include/gssrpc/rename.h
+OLD_FILES+=usr/include/gssrpc/rpc.h
+OLD_FILES+=usr/include/gssrpc/rpc_msg.h
+OLD_FILES+=usr/include/gssrpc/svc.h
+OLD_FILES+=usr/include/gssrpc/svc_auth.h
+OLD_FILES+=usr/include/gssrpc/types.h
+OLD_FILES+=usr/include/gssrpc/xdr.h
+OLD_FILES+=usr/include/iana.h
+OLD_FILES+=usr/include/kadm5/admin.h
+OLD_FILES+=usr/include/kadm5/chpass_util_strings.h
+OLD_FILES+=usr/include/kadm5/kadm_err.h
+OLD_FILES+=usr/include/kdb.h
+OLD_FILES+=usr/include/krad.h
+OLD_FILES+=usr/include/krb5.h
+OLD_FILES+=usr/include/krb5/ccselect_plugin.h
+OLD_FILES+=usr/include/krb5/certauth_plugin.h
+OLD_FILES+=usr/include/krb5/clpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/hostrealm_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_auth_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_hook_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpolicy_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/krb5.h
+OLD_FILES+=usr/include/krb5/localauth_plugin.h
+OLD_FILES+=usr/include/krb5/locate_plugin.h
+OLD_FILES+=usr/include/krb5/plugin.h
+OLD_FILES+=usr/include/krb5/preauth_plugin.h
+OLD_FILES+=usr/include/krb5/pwqual_plugin.h
+OLD_FILES+=usr/include/profile.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
+OLD_FILES+=usr/include/verto-module.h
+OLD_FILES+=usr/include/verto.h
+OLD_FILES+=usr/lib/krb5/plugins/kdb/db2.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/otp.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/pkinit.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/spake.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/test.so
+OLD_FILES+=usr/lib/krb5/plugins/tls/k5tls.so
+OLD_FILES+=usr/lib/libcom_err.a
+OLD_LIBS+=usr/lib/libcom_err.so
+OLD_LIBS+=usr/lib/libcom_err.so.121
+OLD_FILES+=usr/lib/libgssapi_krb5.so
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.121
+OLD_FILES+=usr/lib/libgssrpc.so
+OLD_LIBS+=usr/lib/libgssrpc.so.121
+OLD_FILES+=usr/lib/libk5crypto.so
+OLD_LIBS+=usr/lib/libk5crypto.so.121
+OLD_FILES+=usr/lib/libkadm5clnt.so
+OLD_FILES+=usr/lib/libkadm5clnt_mit.so
+OLD_LIBS+=usr/lib/libkadm5clnt_mit.so.121
+OLD_FILES+=usr/lib/libkadm5srv.so
+OLD_FILES+=usr/lib/libkadm5srv_mit.so
+OLD_LIBS+=usr/lib/libkadm5srv_mit.so.121
+OLD_FILES+=usr/lib/libkdb5.so
+OLD_LIBS+=usr/lib/libkdb5.so.121
+OLD_FILES+=usr/lib/libkrad.so
+OLD_LIBS+=usr/lib/libkrad.so.121
+OLD_FILES+=usr/lib/libkrb5.so
+OLD_LIBS+=usr/lib/libkrb5.so.121
+OLD_FILES+=usr/lib/libkrb5profile.a
+OLD_FILES+=usr/lib/libkrb5profile.so
+OLD_LIBS+=usr/lib/libkrb5profile.so.121
+OLD_FILES+=usr/lib/libkrb5support.a
+OLD_FILES+=usr/lib/libkrb5support.so
+OLD_LIBS+=usr/lib/libkrb5support.so.121
+OLD_FILES+=usr/lib/libverto.so
+OLD_LIBS+=usr/lib/libverto.so.121
+OLD_FILES+=usr/libdata/pkgconfig/gssrpc.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-client.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-server.pc
+OLD_FILES+=usr/libdata/pkgconfig/kdb.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5.pc
+OLD_FILES+=usr/libexec/krb5kdc
+OLD_FILES+=usr/libexec/kadmind
+OLD_FILES+=usr/libexec/kprop
+OLD_FILES+=usr/libexec/kpropd
+OLD_FILES+=usr/sbin/gss-server
+OLD_FILES+=usr/sbin/kadmin.local
+OLD_FILES+=usr/sbin/kdb5_util
+OLD_FILES+=usr/sbin/kproplog
+OLD_FILES+=usr/sbin/krb5-send-pr
+OLD_FILES+=usr/sbin/sim_server
+OLD_FILES+=usr/sbin/sserver
+OLD_FILES+=usr/sbin/uuserver
+OLD_FILES+=usr/share/doc/krb5/doc/html/.buildinfo
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/agogo.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/basic.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgfooter.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgtop.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/doctools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/documentation_options.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/file.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/jquery.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/kerb.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/language_data.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/minus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/plus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/pygments.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/searchtools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/underscore.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/about.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/k5srvutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmin_local.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmind.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_ldap_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kprop.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kpropd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kproplog.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/krb5kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/ktutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/sserver.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/retiring-des.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/appl_servers.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/auth_indicator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/backup_host.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kadm5_acl.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kdc_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/krb5_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_ldap.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/database.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dbtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dictionary.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/env_variables.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/host_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/https.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_appl_srv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_clients.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/lockout.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/otp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/pkinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/princ_dns.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/realm_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/spake.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/troubleshoot.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/various_envs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/h5l_mit_apidiff.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/princ_handle.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_425_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_convert_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_order.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_allow_weak_crypto.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_aname_to_localname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_genaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_get_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getauthenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremoteseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremotesubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_initivector.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_req_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setports.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setuseruserkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_alloc_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_block_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_checksum_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_derive_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_enctype_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_free_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_fx_cf2_simple.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_init_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_coll_proof_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_keyed_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keyed_checksum_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keylengths.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_padding_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_add_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_make_octets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_os_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_seed.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key_with_params.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_calculate_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_cache_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_destroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_gen_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_full_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_initialize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_move.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_new_unique.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_next_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_remove_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_retrieve_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_select.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_store_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_support_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_next.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_change_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_check_clockskew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_checksum_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_chpw_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cksumtype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_clear_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_deltat_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_eblock_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_expand_hostname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_find_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cksumtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cred_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keytab_entry_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_unparsed_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_fwd_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_renew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_validate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_etype_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_fallback_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_skey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_alloc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_address_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_anonymous.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_etype_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_forwardable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pa.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pac_request.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_proxiable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_renew_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_responder.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_permitted_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_prompt_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_renewed_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_server_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_time_offsets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_validated_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_service.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_secure_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_config_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_referral_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_thread_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_create_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_free_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_reference_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_sign_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_verify_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_add_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_client_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_free_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_next_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_read_service_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_remove_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kuserok.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_make_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_marshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_merge_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_1cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_ncred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req_extended.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_os_localaddr.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_add_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_client_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_parse.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal2salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_any_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_process_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prompter_posix.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_read_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_realm_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth_version.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_list_questions.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_salttype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sendauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_server_decrypt_ticket_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_tgs_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_recv_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_send_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password_using_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_principal_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_real_time.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_filename.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_to_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_salttype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_sfstring.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unmarshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_us_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_use_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vprepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vset_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vwrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_wrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ADDRPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_CHAOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_DDP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET6.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IPPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ISO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IS_LOCAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_NETBIOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_XNS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_EXTERNAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_REGISTERED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SESSION_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_WIRE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CRC32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_DESCBC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_NIST_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_CRC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_MD5_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_NULL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RC2_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE_OK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_VALIDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_TKT_COMMON_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AND_OR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CYBERSAFE_SECUREID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_FAST_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CACHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_STORE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_USER_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_AUTHERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_HARDERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_MALFORMED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SOFTERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SUCCESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SMTP_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_HST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_INST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_XHST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_WELLKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_X500_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DELEGATION_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_LOGON_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_REQUESTOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AFS3_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FOR_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_FAST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PW_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REFERRAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_S4U_X509_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REALM_BRANCH_CHAR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REFERRAL_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_KTYPE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_NOTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_OPENCLOSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME_SIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MAX_KEYTAB_NAME_LEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_DIRBIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_VAL_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_AFS_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_NO_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/THREEPARAMOPEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_HW_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INVALID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_MAY_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PRE_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_INT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_UINT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_convert_creds_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_init_ets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_const.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_component.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_roundup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_x.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_xc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_address.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_addrtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_auth_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdatatype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cc_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cccol_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_crypto_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cryptotype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_kdc_rep_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_tkt_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_encrypt_block.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error_code.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_expire_callback_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_get_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_gic_opt_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_init_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int16.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyusage.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kt_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_last_req_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_magic.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_mk_req_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_msgtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_octet.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_pac_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_server_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_svr_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pac.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_post_recv_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pre_send_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_preauthtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompter_fct.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pwd_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_replay_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_tokeninfo.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_response.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_authent.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_transited.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_typed_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_verify_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/passwd_phrase_element.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/y2038.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/ccache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/date_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/keytab_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/rcache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/stash_file_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/directory_org.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/doing_build.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/options2configure.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/osconf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build_this.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/copyright.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/ccache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/cookie.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/freshness_token.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/keytab_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/rcache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-A.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-C.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-E.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-K.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-L.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-M.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-P.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-R.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-S.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-T.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-V.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-all.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5defaults.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5features.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5license.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/objects.inv
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/ccselect.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/certauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/clpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/general.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/hostrealm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/internal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_auth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpolicy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/localauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/locate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/pwqual.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/resources.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/searchindex.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/pwd_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/tkt_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kdestroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/klist.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kpasswd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/krb5-config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/ksu.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kswitch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/sclient.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5login.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/kerberos.html
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/GMakefile
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRcyr2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRlatin2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LatinRules.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkjarc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkrc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/make.bat
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/python.ist
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhighlight.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhowto.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexadmonitions.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexcontainers.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexgraphics.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexindbibtoc.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexlists.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexliterals.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexnumfig.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexobjects.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexshadowbox.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyleheadings.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstylepage.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyletext.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatextables.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmanual.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmessages.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionsgeometry.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionshyperref.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagecyrillic.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagefootnote.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.tex
+OLD_FILES+=usr/share/et/et_c.awk
+OLD_FILES+=usr/share/et/et_h.awk
+OLD_FILES+=usr/share/examples/krb5/kdc.conf
+OLD_FILES+=usr/share/examples/krb5/krb5.conf
+OLD_FILES+=usr/share/examples/krb5/services.append
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/LICENSE
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/MIT
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/catalog.mk
+OLD_FILES+=usr/share/locale/de/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/en_US/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/ka/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/man/man1/compile_et.1.gz
+OLD_FILES+=usr/share/man/man1/k5srvutil.1.gz
+OLD_FILES+=usr/share/man/man1/kadmin.1.gz
+OLD_FILES+=usr/share/man/man1/kdestroy.1.gz
+OLD_FILES+=usr/share/man/man1/kinit.1.gz
+OLD_FILES+=usr/share/man/man1/klist.1.gz
+OLD_FILES+=usr/share/man/man1/kpasswd.1.gz
+OLD_FILES+=usr/share/man/man1/krb5-config.1.gz
+OLD_FILES+=usr/share/man/man1/ksu.1.gz
+OLD_FILES+=usr/share/man/man1/kswitch.1.gz
+OLD_FILES+=usr/share/man/man1/ktutil.1.gz
+OLD_FILES+=usr/share/man/man1/kvno.1.gz
+OLD_FILES+=usr/share/man/man1/sclient.1.gz
+OLD_FILES+=usr/share/man/man5/.k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/.k5login.5.gz
+OLD_FILES+=usr/share/man/man5/k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/k5login.5.gz
+OLD_FILES+=usr/share/man/man5/kadm5.acl.5.gz
+OLD_FILES+=usr/share/man/man5/kdc.conf.5.gz
+OLD_FILES+=usr/share/man/man5/krb5.conf.5.gz
+OLD_FILES+=usr/share/man/man7/kerberos.7.gz
+OLD_FILES+=usr/share/man/man8/kadmin.local.8.gz
+OLD_FILES+=usr/share/man/man8/kadmind.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_ldap_util.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_util.8.gz
+OLD_FILES+=usr/share/man/man8/kprop.8.gz
+OLD_FILES+=usr/share/man/man8/kpropd.8.gz
+OLD_FILES+=usr/share/man/man8/kproplog.8.gz
+OLD_FILES+=usr/share/man/man8/krb5kdc.8.gz
+OLD_FILES+=usr/share/man/man8/sserver.8.gz
+.endif
+.else
+.if ${MK_MITKRB5} != "no"
+# Remove Heimdal because we want MIT KRB5 but not Heimdal
+OLD_FILES+=etc/rc.d/ipropd_master
+OLD_FILES+=etc/rc.d/ipropd_slave
+OLD_FILES+=usr/bin/asn1_compile
+OLD_FILES+=usr/bin/hxtool
+OLD_FILES+=usr/bin/kcc
+OLD_FILES+=usr/bin/kf
+OLD_FILES+=usr/bin/kgetcred
+OLD_FILES+=usr/bin/make-roken
+OLD_FILES+=usr/bin/slc
+OLD_FILES+=usr/bin/string2key
+OLD_FILES+=usr/bin/verify_krb5_conf
+OLD_FILES+=usr/include/asn1-common.h
+OLD_FILES+=usr/include/asn1_err.h
+OLD_FILES+=usr/include/base64.h
+OLD_FILES+=usr/include/cms_asn1.h
+OLD_FILES+=usr/include/common.h
+OLD_FILES+=usr/include/crmf_asn1.h
+OLD_FILES+=usr/include/der-private.h
+OLD_FILES+=usr/include/der-protos.h
+OLD_FILES+=usr/include/der.h
+OLD_FILES+=usr/include/digest_asn1.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
+OLD_FILES+=usr/include/getarg.h
+OLD_FILES+=usr/include/groups.h
+OLD_FILES+=usr/include/hdb-protos.h
+OLD_FILES+=usr/include/hdb.h
+OLD_FILES+=usr/include/hdb_asn1.h
+OLD_FILES+=usr/include/hdb_err.h
+OLD_FILES+=usr/include/heim_asn1.h
+OLD_FILES+=usr/include/heim_err.h
+OLD_FILES+=usr/include/heim_threads.h
+OLD_FILES+=usr/include/heimbase.h
+OLD_FILES+=usr/include/heimntlm-protos.h
+OLD_FILES+=usr/include/heimntlm.h
+OLD_FILES+=usr/include/hex.h
+OLD_FILES+=usr/include/hx509-private.h
+OLD_FILES+=usr/include/hx509-protos.h
+OLD_FILES+=usr/include/hx509.h
+OLD_FILES+=usr/include/hx509_err.h
+OLD_FILES+=usr/include/iana.h
+OLD_FILES+=usr/include/k524_err.h
+OLD_FILES+=usr/include/kadm5/kadm5-private.h
+OLD_FILES+=usr/include/kadm5/kadm5-protos.h
+OLD_FILES+=usr/include/kadm5/kadm5-pwcheck.h
+OLD_FILES+=usr/include/kadm5/kadm5_err.h
+OLD_FILES+=usr/include/kadm5/private.h
+OLD_FILES+=usr/include/kafs.h
+OLD_FILES+=usr/include/kdc-protos.h
+OLD_FILES+=usr/include/kdc.h
+OLD_FILES+=usr/include/krb5-private.h
+OLD_FILES+=usr/include/krb5-protos.h
+OLD_FILES+=usr/include/krb5-types.h
+OLD_FILES+=usr/include/krb5/ccache_plugin.h
+OLD_FILES+=usr/include/krb5/send_to_kdc_plugin.h
+OLD_FILES+=usr/include/krb5/windc_plugin.h
+OLD_FILES+=usr/include/krb5_asn1.h
+OLD_FILES+=usr/include/krb5_ccapi.h
+OLD_FILES+=usr/include/krb5_err.h
+OLD_FILES+=usr/include/kx509_asn1.h
+OLD_FILES+=usr/include/ntlm_err.h
+OLD_FILES+=usr/include/ocsp_asn1.h
+OLD_FILES+=usr/include/parse_bytes.h
+OLD_FILES+=usr/include/parse_time.h
+OLD_FILES+=usr/include/parse_units.h
+OLD_FILES+=usr/include/pkcs10_asn1.h
+OLD_FILES+=usr/include/pkcs12_asn1.h
+OLD_FILES+=usr/include/pkcs8_asn1.h
+OLD_FILES+=usr/include/pkcs9_asn1.h
+OLD_FILES+=usr/include/pkinit_asn1.h
+OLD_FILES+=usr/include/resolve.h
+OLD_FILES+=usr/include/rfc2459_asn1.h
+OLD_FILES+=usr/include/roken-common.h
+OLD_FILES+=usr/include/rtbl.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
+OLD_FILES+=usr/include/wind.h
+OLD_FILES+=usr/include/wind_err.h
+OLD_FILES+=usr/include/xdbm.h
+OLD_FILES+=usr/lib/libasn1.a
+OLD_FILES+=usr/lib/libasn1.so
+OLD_LIBS+=usr/lib/libasn1.so.11
+OLD_FILES+=usr/lib/libasn1_p.a
+OLD_LIBS+=usr/lib/libcom_err.so.5
+OLD_FILES+=usr/lib/libcom_err_p.a
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.10
+OLD_FILES+=usr/lib/libgssapi_krb5_p.a
+OLD_FILES+=usr/lib/libgssapi_ntlm.a
+OLD_FILES+=usr/lib/libgssapi_ntlm.so
+OLD_LIBS+=usr/lib/libgssapi_ntlm.so.10
+OLD_FILES+=usr/lib/libgssapi_ntlm_p.a
+OLD_FILES+=usr/lib/libgssapi_spnego.a
+OLD_FILES+=usr/lib/libgssapi_spnego.so
+OLD_LIBS+=usr/lib/libgssapi_spnego.so.10
+OLD_FILES+=usr/lib/libgssapi_spnego_p.a
+OLD_FILES+=usr/lib/libhdb.a
+OLD_FILES+=usr/lib/libhdb.so
+OLD_LIBS+=usr/lib/libhdb.so.11
+OLD_FILES+=usr/lib/libhdb_p.a
+OLD_FILES+=usr/lib/libheimbase.a
+OLD_FILES+=usr/lib/libheimbase.so
+OLD_LIBS+=usr/lib/libheimbase.so.11
+OLD_FILES+=usr/lib/libheimbase_p.a
+OLD_FILES+=usr/lib/libheimntlm.a
+OLD_FILES+=usr/lib/libheimntlm.so
+OLD_LIBS+=usr/lib/libheimntlm.so.11
+OLD_FILES+=usr/lib/libheimntlm_p.a
+OLD_FILES+=usr/lib/libheimsqlite.a
+OLD_FILES+=usr/lib/libheimsqlite.so
+OLD_LIBS+=usr/lib/libheimsqlite.so.11
+OLD_FILES+=usr/lib/libheimsqlite_p.a
+OLD_FILES+=usr/lib/libhx509.a
+OLD_FILES+=usr/lib/libhx509.so
+OLD_LIBS+=usr/lib/libhx509.so.11
+OLD_FILES+=usr/lib/libhx509_p.a
+OLD_FILES+=usr/lib/libkadm5clnt.a
+OLD_FILES+=usr/lib/libkadm5clnt.so
+OLD_LIBS+=usr/lib/libkadm5clnt.so.11
+OLD_FILES+=usr/lib/libkadm5clnt_p.a
+OLD_FILES+=usr/lib/libkadm5srv.a
+OLD_FILES+=usr/lib/libkadm5srv.so
+OLD_LIBS+=usr/lib/libkadm5srv.so.11
+OLD_FILES+=usr/lib/libkadm5srv_p.a
+OLD_FILES+=usr/lib/libkafs5.a
+OLD_FILES+=usr/lib/libkafs5.so
+OLD_LIBS+=usr/lib/libkafs5.so.11
+OLD_FILES+=usr/lib/libkafs5_p.a
+OLD_FILES+=usr/lib/libkdc.a
+OLD_FILES+=usr/lib/libkdc.so
+OLD_LIBS+=usr/lib/libkdc.so.11
+OLD_FILES+=usr/lib/libkdc_p.a
+OLD_LIBS+=usr/lib/libkrb5.so.11
+OLD_FILES+=usr/lib/libkrb5_p.a
+OLD_FILES+=usr/lib/libroken.a
+OLD_FILES+=usr/lib/libroken.so
+OLD_LIBS+=usr/lib/libroken.so.11
+OLD_FILES+=usr/lib/libroken_p.a
+OLD_FILES+=usr/lib/libwind.a
+OLD_FILES+=usr/lib/libwind.so
+OLD_LIBS+=usr/lib/libwind.so.11
+OLD_FILES+=usr/lib/libwind_p.a
+OLD_FILES+=usr/lib/libprivateheimipcc.a
+OLD_FILES+=usr/lib/libprivateheimipcc.so
+OLD_LIBS+=usr/lib/libprivateheimipcc.so.11
+OLD_FILES+=usr/lib/libprivateheimipcc_p.a
+OLD_FILES+=usr/lib/libprivateheimipcs.a
+OLD_FILES+=usr/lib/libprivateheimipcs.so
+OLD_LIBS+=usr/lib/libprivateheimipcs.so.11
+OLD_FILES+=usr/lib/libprivateheimipcs_p.a
+OLD_FILES+=usr/libexec/digest-service
+OLD_FILES+=usr/libexec/hprop
+OLD_FILES+=usr/libexec/hpropd
+OLD_FILES+=usr/libexec/ipropd-master
+OLD_FILES+=usr/libexec/ipropd-slave
+OLD_FILES+=usr/libexec/kcm
+OLD_FILES+=usr/libexec/kdc
+OLD_FILES+=usr/libexec/kdigest
+OLD_FILES+=usr/libexec/kfd
+OLD_FILES+=usr/libexec/kimpersonate
+OLD_FILES+=usr/libexec/kpasswdd
+OLD_FILES+=usr/sbin/kstash
+OLD_FILES+=usr/sbin/ktutil
+OLD_FILES+=usr/sbin/iprop-log
+OLD_FILES+=usr/share/man/man1/kf.1.gz
+OLD_FILES+=usr/share/man/man3/HDB.3.gz
+OLD_FILES+=usr/share/man/man3/hdb__del.3.gz
+OLD_FILES+=usr/share/man/man3/hdb__get.3.gz
+OLD_FILES+=usr/share/man/man3/hdb__put.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_auth_status.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_check_constrained_delegation.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_check_pkinit_ms_upn_match.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_check_s4u2self.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_close.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_entry_ex.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_fetch_kvno.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_firstkey.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_free.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_get_realms.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_lock.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_name.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_nextkey.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_open.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_password.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_remove.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_rename.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_store.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_unlock.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_build_ntlm1_master.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_build_ntlm2_master.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_calculate_lm2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_calculate_ntlm1.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_calculate_ntlm2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_decode_targetinfo.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_targetinfo.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_type1.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_type2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_type3.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_buf.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_targetinfo.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_type1.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_type2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_type3.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_keyex_unwrap.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_nt_key.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_ntlmv2_key.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_verify_ntlm2.3.gz
+OLD_FILES+=usr/share/man/man3/hx509.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_bitstring_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_sign.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_sign_self.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_crl_dp_uri.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_eku.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_jid.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_ms_upn.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_otherName.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_pkinit.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_rfc822name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_ca.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_domaincontroller.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_notAfter.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_notAfter_lifetime.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_notBefore.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_proxy.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_serialnumber.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_spki.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_subject.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_template.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_unique.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_subject_expand.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_template_units.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_binary.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_check_eku.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_find_subjectAltName_otherName.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_SPKI.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_SPKI_AlgorithmIdentifier.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_attribute.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_base_subject.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_issuer.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_issuer_unique_id.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_notAfter.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_notBefore.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_serialnumber.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_subject.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_subject_unique_id.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_init_data.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_keyusage_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_ref.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_set_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_add.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_append.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_end_seq.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_filter.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_find.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_info.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_iter_f.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_merge.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_next_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_start_seq.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_store.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ci_print_names.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_clear_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_create_signed_1.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_envelope_1.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_unenvelope.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_unwrap_ContentInfo.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_verify_signed.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_wrap_ContentInfo.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_context_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_context_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_context_set_missing_revoke.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_add_revoked_certs.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_lifetime.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_sign.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crypto.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_add.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_add_binding.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_find.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_find_binding.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_lfind.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_err.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_error.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_free_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_free_octet_string_list.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_general_name_unparse.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_get_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_get_one_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_keyset.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_lock.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_misc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_binary.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_copy.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_expand.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_is_null_p.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_to_Name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_to_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ocsp_request.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ocsp_verify.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_oid_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_oid_sprint.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_parse_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_add_cms_alg.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_set_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_set_cms_algs.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_print_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_print_stdout.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_cmp_func.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_eku.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_issuer_serial.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_option.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_statistic_file.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_unparse_stats.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_add_crl.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_add_ocsp.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_ocsp_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_verify.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_set_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_set_error_stringv.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_unparse_der_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_add_flags.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_set_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_attach_anchors.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_attach_revoke.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_ctx_f_allow_default_trustanchors.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_destroy_ctx.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_init_ctx.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_path.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_max_depth.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_proxy_certificate.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_strict_rfc3280_verification.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_time.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_signature.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_xfree.3.gz
+OLD_FILES+=usr/share/man/man3/k_afs_cell_of_file.3.gz
+OLD_FILES+=usr/share/man/man3/k_hasafs.3.gz
+OLD_FILES+=usr/share/man/man3/k_pioctl.3.gz
+OLD_FILES+=usr/share/man/man3/k_setpag.3.gz
+OLD_FILES+=usr/share/man/man3/k_unlog.3.gz
+OLD_FILES+=usr/share/man/man3/kadm5_pwcheck.3.gz
+OLD_FILES+=usr/share/man/man3/kafs.3.gz
+OLD_FILES+=usr/share/man/man3/kafs5.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_set_verbose.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_settoken.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_settoken5.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_settoken_rxkad.3.gz
+OLD_FILES+=usr/share/man/man3/krb5.3.gz
+OLD_FILES+=usr/share/man/man3/krb524_convert_creds_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb524_convert_creds_kdc_ccache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_425_conv_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_425_conv_principal_ext.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_524_conv_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_acc_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_acl_match_file.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_acl_match_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_add_et_list.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_add_extra_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_add_ignore_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_addlog_dest.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_addlog_func.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_addr2sockaddr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_order.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_prefixlen_boundary.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_search.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_afslog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_afslog_uid.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_allow_weak_crypto.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_aname_to_localname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_anyaddr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault_boolean.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_append_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_genaddrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getaddrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getflags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getlocalsubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getrcache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getremotesubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getuserkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_initivector.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setaddrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setaddrs_from_fd.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setflags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setivector.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setlocalsubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setrcache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setremotesubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setuserkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getauthenticator.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getcksumtype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getkeytype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getlocalseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getremoteseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setcksumtype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setkeytype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setlocalseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setremoteseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal_ext.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal_va.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal_va_ext.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_c_enctype_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_c_make_checksum.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_end_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_get_first.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_match.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_next.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_clear_mcred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_close.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_copy_cache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_copy_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_copy_match_f.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_default_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_end_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_gen_new.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_config.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_full_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_kdc_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_lifetime.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_prefix_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_version.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_initialize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_last_change_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_move.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_new_unique.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_next_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_register.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_remove_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_resolve.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_retrieve_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_config.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_default_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_kdc_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_start_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_store_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_support_switch.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_switch.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ccache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ccache_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_cursor_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_cursor_new.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_cursor_next.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_last_change_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_change_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_check_transited.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_checksum_is_collision_proof.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_checksum_is_keyed.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_checksumsize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cksumtype_to_enctype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_clear_error_message.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_clear_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_closelog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_compare_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_file_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_free_strings.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_bool.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_bool_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_list.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_string_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_strings.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_time_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_parse_file_multi.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_parse_string_multi.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_bool.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_bool_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_list.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_string_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_strings.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_time_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_creds_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_host_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_keyblock_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_ticket.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_create_checksum.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_create_checksum_iov.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_credential.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_creds_get_ticket_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_fx_cf2.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getblocksize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getconfoundersize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getenctype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getpadsize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_iov.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_copy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_ct_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_realloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_zero.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_decrypt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_decrypt_EncryptedData.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_decrypt_iov_ivec.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_deprecated.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_digest.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_digest_probe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_eai_to_heim_errno.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_encrypt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_encrypt_EncryptedData.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_encrypt_iov_ivec.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctype_disable.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctype_enable.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctype_valid.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctypes_compatible_keys.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_expand_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_expand_hostname_realms.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_fcc_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_fileformats.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_find_padata.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_config_files.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_cred_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_creds_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_data_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_host_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_keyblock_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_krbhst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_ticket.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_unparsed_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_fwd_tgt_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_generate_random_block.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_generate_subkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_generate_subkey_extended.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_all_client_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_all_server_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_cred_from_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_cred_from_kdc_opt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_credentials.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_config_files.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_in_tkt_etypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_realms.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_dns_canonicalize_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_extra_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_fcache_version.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_forwarded_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_host_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_ignore_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_tkt_with_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_tkt_with_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_tkt_with_skey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_get_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_kdc_sec_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krb524hst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krb_admin_hst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krb_changepw_hst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krbhst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_max_time_skew.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_use_admin_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_validated_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_getportbyname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_h_addr2addr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_h_addr2sockaddr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_h_errno_to_heim_errno.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_get_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_set_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_set_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_set_service.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_step.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_ets.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_initlog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_introduction.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_is_config_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_is_thread_safe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kerberos_enctypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keyblock_get_enctype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keyblock_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keyblock_zero.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytab_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytab_key_proc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytype_to_enctypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytype_to_enctypes_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytype_to_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_format_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_get_addrinfo.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_next.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_next_as_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_reset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_add_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_close.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_copy_entry_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_default_modify_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_default_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_end_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_free_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_full_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_have_content.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_next_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_read_service_key.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_register.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_remove_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_resolve.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_start_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kuserok.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_log.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_log_msg.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_make_addrport.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_make_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_max_sockaddr_size.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_mcc_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_mk_req.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_mk_safe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_openlog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_pac.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_pac_get_buffer.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_pac_verify.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_name_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_nametype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_password_key_proc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_plugin_register.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_prepend_config_files_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_princ_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_princ_set_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_compare_any_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_comp_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_num_comp.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_is_krbtgt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_match.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_set_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_set_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_print_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_random_to_key.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rcache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_ctx.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_in_ctx_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_in_set_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_in_set_pac_check.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_out_ctx_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_out_get_server.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_safe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_realm_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_authdata.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_creds_tag.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_int16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_int32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_int8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_stringz.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_times.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_uint16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_uint32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_uint8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_config_files.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_default_in_tkt_etypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_default_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_dns_canonicalize_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_error_message.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_extra_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_fcache_version.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_home_dir_access.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_ignore_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_kdc_sec_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_max_time_skew.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_real_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_use_admin_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sname_to_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sock_to_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sockaddr2address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sockaddr2port.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sockaddr_uninteresting.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_clear_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_emem.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_fd.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_mem.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_readonly_mem.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_get_byteorder.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_get_eof_code.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_is_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_read.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_seek.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_byteorder.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_eof_code.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_max_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_to_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_truncate.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_write.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_authdata.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_creds_tag.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_int16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_int32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_int8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_stringz.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_times.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_uint16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_uint32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_uint8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_string_to_key.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_string_to_keytype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_support.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_authorization_data_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_client.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_endtime.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_server.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_timeofday.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_fixed.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_fixed_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_fixed_short.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_short.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_us_timeofday.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_v4compat.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_checksum.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_checksum_iov.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_init_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_secure.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_service.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_user.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_user_lrealm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_user_opt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vlog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vlog_msg.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vset_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vwarn.3.gz
+OLD_FILES+=usr/share/man/man3/krb_afslog.3.gz
+OLD_FILES+=usr/share/man/man3/krb_afslog_uid.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_buf.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_core.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_type1.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_type2.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_type3.3.gz
+OLD_FILES+=usr/share/man/man8/hprop.8.gz
+OLD_FILES+=usr/share/man/man8/hpropd.8.gz
+OLD_FILES+=usr/share/man/man8/iprop-log.8.gz
+OLD_FILES+=usr/share/man/man8/iprop.8.gz
+OLD_FILES+=usr/share/man/man8/kadmin.8.gz
+OLD_FILES+=usr/share/man/man8/kcm.8.gz
+OLD_FILES+=usr/share/man/man8/kdc.8.gz
+OLD_FILES+=usr/share/man/man8/kdigest.8.gz
+OLD_FILES+=usr/share/man/man8/kerberos.8.gz
+OLD_FILES+=usr/share/man/man8/kimpersonate.8.gz
+OLD_FILES+=usr/share/man/man8/kpasswdd.8.gz
+OLD_FILES+=usr/share/man/man8/kstash.8.gz
+OLD_FILES+=usr/share/man/man8/ktutil.8.gz
+OLD_FILES+=usr/share/man/man8/string2key.8.gz
+OLD_FILES+=usr/share/man/man8/verify_krb5_conf.8.gz
+.else
+# Remove MIT KRB5 because we want Heimdal but not MIT
+OLD_FILES+=usr/bin/gss-client
+OLD_FILES+=usr/bin/k5srvutil
+OLD_FILES+=usr/bin/ktutil
+OLD_FILES+=usr/bin/kvno
+OLD_FILES+=usr/bin/sclient
+OLD_FILES+=usr/bin/sim_client
+OLD_FILES+=usr/bin/uuclient
+OLD_FILES+=etc/rc.d/kpropd
+OLD_FILES+=usr/include/common.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
+OLD_FILES+=usr/include/groups.h
+OLD_FILES+=usr/include/gssapi/gssapi_ext.h
+OLD_FILES+=usr/include/gssapi/gssapi_oid.h
+OLD_FILES+=usr/include/gssapi/gssapi_alloc.h
+OLD_FILES+=usr/include/gssapi/gssapi_generic.h
+OLD_FILES+=usr/include/gssapi/gssapi_spnego.h
+OLD_FILES+=usr/include/gssapi/gssapi_asn1-priv.h
+OLD_FILES+=usr/include/gssapi/spnego_asn1-priv.h
+OLD_FILES+=usr/include/gssapi/gssapi_asn1.h
+OLD_FILES+=usr/include/gssapi/gssapi_ntlm.h
+OLD_FILES+=usr/include/gssapi/spnego_asn1.h
+OLD_FILES+=usr/include/gssrpc/auth.h
+OLD_FILES+=usr/include/gssrpc/auth_gss.h
+OLD_FILES+=usr/include/gssrpc/auth_gssapi.h
+OLD_FILES+=usr/include/gssrpc/auth_unix.h
+OLD_FILES+=usr/include/gssrpc/clnt.h
+OLD_FILES+=usr/include/gssrpc/netdb.h
+OLD_FILES+=usr/include/gssrpc/pmap_clnt.h
+OLD_FILES+=usr/include/gssrpc/pmap_prot.h
+OLD_FILES+=usr/include/gssrpc/pmap_rmt.h
+OLD_FILES+=usr/include/gssrpc/rename.h
+OLD_FILES+=usr/include/gssrpc/rpc.h
+OLD_FILES+=usr/include/gssrpc/rpc_msg.h
+OLD_FILES+=usr/include/gssrpc/svc.h
+OLD_FILES+=usr/include/gssrpc/svc_auth.h
+OLD_FILES+=usr/include/gssrpc/types.h
+OLD_FILES+=usr/include/gssrpc/xdr.h
+OLD_FILES+=usr/include/iana.h
+OLD_FILES+=usr/include/kadm5/chpass_util_strings.h
+OLD_FILES+=usr/include/kadm5/kadm_err.h
+OLD_FILES+=usr/include/kdb.h
+OLD_FILES+=usr/include/krad.h
+OLD_FILES+=usr/include/krb5/ccselect_plugin.h
+OLD_FILES+=usr/include/krb5/certauth_plugin.h
+OLD_FILES+=usr/include/krb5/clpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/hostrealm_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_auth_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_hook_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpolicy_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/localauth_plugin.h
+OLD_FILES+=usr/include/krb5/plugin.h
+OLD_FILES+=usr/include/krb5/preauth_plugin.h
+OLD_FILES+=usr/include/krb5/pwqual_plugin.h
+OLD_FILES+=usr/include/profile.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
+OLD_FILES+=usr/include/verto-module.h
+OLD_FILES+=usr/include/verto.h
+OLD_FILES+=usr/lib/krb5/plugins/kdb/db2.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/otp.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/pkinit.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/spake.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/test.so
+OLD_FILES+=usr/lib/krb5/plugins/tls/k5tls.so
+OLD_LIBS+=usr/lib/libcom_err.so.121
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.121
+OLD_FILES+=usr/lib/libgssrpc.a
+OLD_FILES+=usr/lib/libgssrpc.so
+OLD_LIBS+=usr/lib/libgssrpc.so.121
+OLD_FILES+=usr/lib/libk5crypto.a
+OLD_FILES+=usr/lib/libk5crypto.so
+OLD_LIBS+=usr/lib/libk5crypto.so.121
+OLD_FILES+=usr/lib/libkadm5clnt_mit.a
+OLD_FILES+=usr/lib/libkadm5clnt_mit.so
+OLD_LIBS+=usr/lib/libkadm5clnt_mit.so.121
+OLD_FILES+=usr/lib/libkadm5srv_mit.a
+OLD_FILES+=usr/lib/libkadm5srv_mit.so
+OLD_LIBS+=usr/lib/libkadm5srv_mit.so.121
+OLD_FILES+=usr/lib/libkdb5.a
+OLD_FILES+=usr/lib/libkdb5.so
+OLD_LIBS+=usr/lib/libkdb5.so.121
+OLD_FILES+=usr/lib/libkrad.so
+OLD_FILES+=usr/lib/libkrad.a
+OLD_LIBS+=usr/lib/libkrad.so.121
+OLD_LIBS+=usr/lib/libkrb5.so.121
+OLD_FILES+=usr/lib/libkrb5profile.a
+OLD_FILES+=usr/lib/libkrb5profile.so
+OLD_LIBS+=usr/lib/libkrb5profile.so.121
+OLD_FILES+=usr/lib/libkrb5support.a
+OLD_FILES+=usr/lib/libkrb5support.so
+OLD_LIBS+=usr/lib/libkrb5support.so.121
+OLD_FILES+=usr/lib/libverto.a
+OLD_FILES+=usr/lib/libverto.so
+OLD_LIBS+=usr/lib/libverto.so.121
+OLD_FILES+=usr/libdata/pkgconfig/gssrpc.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-client.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-server.pc
+OLD_FILES+=usr/libdata/pkgconfig/kdb.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5.pc
+OLD_FILES+=usr/sbin/gss-server
+OLD_FILES+=usr/sbin/kadmin.local
+OLD_FILES+=usr/sbin/kadmind
+OLD_FILES+=usr/sbin/kdb5_util
+OLD_FILES+=usr/sbin/kprop
+OLD_FILES+=usr/sbin/kpropd
+OLD_FILES+=usr/sbin/kproplog
+OLD_FILES+=usr/sbin/krb5-send-pr
+OLD_FILES+=usr/sbin/krb5kdc
+OLD_FILES+=usr/sbin/sim_server
+OLD_FILES+=usr/sbin/sserver
+OLD_FILES+=usr/sbin/uuserver
+OLD_FILES+=usr/share/doc/krb5/doc/html/.buildinfo
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/agogo.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/basic.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgfooter.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgtop.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/doctools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/documentation_options.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/file.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/jquery.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/kerb.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/language_data.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/minus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/plus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/pygments.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/searchtools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/underscore.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/about.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/k5srvutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmin_local.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmind.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_ldap_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kprop.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kpropd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kproplog.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/krb5kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/ktutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/sserver.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/retiring-des.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/appl_servers.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/auth_indicator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/backup_host.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kadm5_acl.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kdc_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/krb5_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_ldap.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/database.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dbtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dictionary.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/env_variables.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/host_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/https.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_appl_srv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_clients.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/lockout.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/otp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/pkinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/princ_dns.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/realm_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/spake.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/troubleshoot.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/various_envs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/h5l_mit_apidiff.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/princ_handle.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_425_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_convert_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_order.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_allow_weak_crypto.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_aname_to_localname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_genaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_get_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getauthenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremoteseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremotesubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_initivector.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_req_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setports.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setuseruserkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_alloc_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_block_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_checksum_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_derive_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_enctype_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_free_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_fx_cf2_simple.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_init_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_coll_proof_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_keyed_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keyed_checksum_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keylengths.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_padding_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_add_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_make_octets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_os_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_seed.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key_with_params.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_calculate_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_cache_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_destroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_gen_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_full_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_initialize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_move.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_new_unique.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_next_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_remove_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_retrieve_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_select.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_store_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_support_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_next.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_change_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_check_clockskew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_checksum_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_chpw_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cksumtype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_clear_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_deltat_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_eblock_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_expand_hostname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_find_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cksumtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cred_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keytab_entry_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_unparsed_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_fwd_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_renew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_validate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_etype_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_fallback_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_skey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_alloc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_address_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_anonymous.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_etype_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_forwardable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pa.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pac_request.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_proxiable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_renew_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_responder.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_permitted_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_prompt_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_renewed_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_server_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_time_offsets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_validated_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_service.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_secure_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_config_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_referral_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_thread_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_create_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_free_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_reference_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_sign_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_verify_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_add_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_client_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_free_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_next_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_read_service_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_remove_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kuserok.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_make_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_marshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_merge_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_1cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_ncred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req_extended.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_os_localaddr.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_add_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_client_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_parse.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal2salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_any_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_process_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prompter_posix.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_read_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_realm_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth_version.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_list_questions.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_salttype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sendauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_server_decrypt_ticket_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_tgs_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_recv_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_send_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password_using_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_principal_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_real_time.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_filename.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_to_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_salttype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_sfstring.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unmarshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_us_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_use_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vprepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vset_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vwrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_wrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ADDRPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_CHAOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_DDP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET6.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IPPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ISO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IS_LOCAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_NETBIOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_XNS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_EXTERNAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_REGISTERED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SESSION_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_WIRE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CRC32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_DESCBC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_NIST_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_CRC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_MD5_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_NULL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RC2_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE_OK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_VALIDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_TKT_COMMON_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AND_OR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CYBERSAFE_SECUREID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_FAST_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CACHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_STORE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_USER_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_AUTHERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_HARDERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_MALFORMED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SOFTERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SUCCESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SMTP_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_HST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_INST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_XHST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_WELLKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_X500_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DELEGATION_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_LOGON_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_REQUESTOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AFS3_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FOR_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_FAST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PW_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REFERRAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_S4U_X509_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REALM_BRANCH_CHAR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REFERRAL_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_KTYPE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_NOTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_OPENCLOSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME_SIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MAX_KEYTAB_NAME_LEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_DIRBIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_VAL_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_AFS_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_NO_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/THREEPARAMOPEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_HW_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INVALID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_MAY_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PRE_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_INT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_UINT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_convert_creds_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_init_ets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_const.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_component.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_roundup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_x.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_xc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_address.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_addrtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_auth_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdatatype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cc_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cccol_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_crypto_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cryptotype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_kdc_rep_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_tkt_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_encrypt_block.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error_code.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_expire_callback_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_get_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_gic_opt_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_init_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int16.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyusage.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kt_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_last_req_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_magic.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_mk_req_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_msgtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_octet.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_pac_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_server_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_svr_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pac.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_post_recv_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pre_send_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_preauthtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompter_fct.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pwd_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_replay_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_tokeninfo.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_response.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_authent.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_transited.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_typed_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_verify_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/passwd_phrase_element.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/y2038.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/ccache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/date_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/keytab_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/rcache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/stash_file_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/directory_org.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/doing_build.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/options2configure.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/osconf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build_this.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/copyright.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/ccache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/cookie.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/freshness_token.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/keytab_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/rcache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-A.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-C.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-E.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-K.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-L.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-M.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-P.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-R.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-S.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-T.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-V.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-all.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5defaults.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5features.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5license.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/objects.inv
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/ccselect.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/certauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/clpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/general.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/hostrealm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/internal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_auth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpolicy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/localauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/locate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/pwqual.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/resources.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/searchindex.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/pwd_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/tkt_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kdestroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/klist.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kpasswd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/krb5-config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/ksu.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kswitch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/sclient.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5login.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/kerberos.html
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/GMakefile
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRcyr2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRlatin2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LatinRules.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkjarc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkrc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/make.bat
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/python.ist
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhighlight.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhowto.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexadmonitions.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexcontainers.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexgraphics.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexindbibtoc.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexlists.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexliterals.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexnumfig.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexobjects.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexshadowbox.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyleheadings.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstylepage.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyletext.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatextables.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmanual.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmessages.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionsgeometry.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionshyperref.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagecyrillic.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagefootnote.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.tex
+OLD_FILES+=usr/share/et/et_c.awk
+OLD_FILES+=usr/share/et/et_h.awk
+OLD_FILES+=usr/share/examples/krb5/kdc.conf
+OLD_FILES+=usr/share/examples/krb5/krb5.conf
+OLD_FILES+=usr/share/examples/krb5/services.append
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/LICENSE
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/MIT
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/catalog.mk
+OLD_FILES+=usr/share/locale/de/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/en_US/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/ka/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/man/man1/k5srvutil.1.gz
+OLD_FILES+=usr/share/man/man1/kadmin.1.gz
+OLD_FILES+=usr/share/man/man1/ktutil.1.gz
+OLD_FILES+=usr/share/man/man1/kvno.1.gz
+OLD_FILES+=usr/share/man/man1/sclient.1.gz
+OLD_FILES+=usr/share/man/man5/.k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/.k5login.5.gz
+OLD_FILES+=usr/share/man/man5/k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/k5login.5.gz
+OLD_FILES+=usr/share/man/man5/kadm5.acl.5.gz
+OLD_FILES+=usr/share/man/man5/kdc.conf.5.gz
+OLD_FILES+=usr/share/man/man7/kerberos.7.gz
+OLD_FILES+=usr/share/man/man8/kadmin.local.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_ldap_util.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_util.8.gz
+OLD_FILES+=usr/share/man/man8/kprop.8.gz
+OLD_FILES+=usr/share/man/man8/kpropd.8.gz
+OLD_FILES+=usr/share/man/man8/kproplog.8.gz
+OLD_FILES+=usr/share/man/man8/krb5kdc.8.gz
+OLD_FILES+=usr/share/man/man8/sserver.8.gz
+.endif
.endif
.if ${MK_KERBEROS_SUPPORT} == no
+.if ${MK_MITKRB5} == no
OLD_FILES+=usr/bin/compile_et
OLD_FILES+=usr/include/com_err.h
OLD_FILES+=usr/include/com_right.h
@@ -3614,6 +6896,7 @@ OLD_FILES+=usr/lib/libcom_err_p.a
OLD_FILES+=usr/share/man/man1/compile_et.1.gz
OLD_FILES+=usr/share/man/man3/com_err.3.gz
.endif
+.endif
.if ${MK_LDNS} == no
OLD_FILES+=usr/lib/libprivateldns.a
@@ -3684,6 +6967,7 @@ OLD_FILES+=usr/bin/ld.lld
.if ${MK_LLDB} == no
OLD_FILES+=usr/bin/lldb
OLD_FILES+=usr/bin/lldb-server
+OLD_LIBS+=usr/lib/libprivatelldb.so.19
OLD_FILES+=usr/share/man/man1/lldb-server.1.gz
OLD_FILES+=usr/share/man/man1/lldb.1.gz
.endif
@@ -5573,6 +8857,7 @@ OLD_FILES+=usr/share/man/man1/genl.1.gz
.endif
.if ${MK_NIS} == no
+OLD_FILES+=etc/rc.d/nisdomain
OLD_FILES+=etc/rc.d/ypbind
OLD_FILES+=etc/rc.d/ypldap
OLD_FILES+=etc/rc.d/yppasswdd
@@ -6542,6 +9827,7 @@ OLD_FILES+=usr/share/man/man8/ibstat.8.gz
.endif
.if ${MK_OFED_EXTRA} == no
+OLD_FILES+=etc/rc.d/opensm
OLD_FILES+=usr/bin/dump_fts
OLD_FILES+=usr/bin/ibaddr
OLD_FILES+=usr/bin/ibcacheedit
@@ -6651,6 +9937,9 @@ OLD_FILES+=etc/newsyslog.conf.d/pf.conf
OLD_FILES+=etc/periodic/security/520.pfdenied
OLD_FILES+=etc/pf.os
OLD_FILES+=etc/rc.d/ftp-proxy
+OLD_FILES+=etc/rc.d/pf
+OLD_FILES+=etc/rc.d/pflog
+OLD_FILES+=etc/rc.d/pfsync
OLD_FILES+=sbin/pfctl
OLD_FILES+=sbin/pflogd
OLD_FILES+=usr/include/netpfil/pf/pf.h
@@ -6840,6 +10129,7 @@ OLD_FILES+=usr/share/man/man8/pmcstudy.8.gz
.if ${MK_PPP} == no
OLD_FILES+=etc/newsyslog.conf.d/ppp.conf
OLD_FILES+=etc/ppp/ppp.conf
+OLD_FILES+=etc/rc.d/ppp
OLD_FILES+=etc/syslog.d/ppp.conf
OLD_DIRS+=etc/ppp
OLD_FILES+=usr/sbin/ppp
@@ -6848,190 +10138,6 @@ OLD_FILES+=usr/share/man/man8/ppp.8.gz
OLD_FILES+=usr/share/man/man8/pppctl.8.gz
.endif
-.if ${MK_PROFILE} == no
-OLD_FILES+=usr/lib/lib80211_p.a
-OLD_FILES+=usr/lib/lib9p_p.a
-OLD_FILES+=usr/lib/libBlocksRuntime_p.a
-OLD_FILES+=usr/lib/libalias_dummy_p.a
-OLD_FILES+=usr/lib/libalias_ftp_p.a
-OLD_FILES+=usr/lib/libalias_irc_p.a
-OLD_FILES+=usr/lib/libalias_nbt_p.a
-OLD_FILES+=usr/lib/libalias_p.a
-OLD_FILES+=usr/lib/libalias_pptp_p.a
-OLD_FILES+=usr/lib/libalias_skinny_p.a
-OLD_FILES+=usr/lib/libalias_smedia_p.a
-OLD_FILES+=usr/lib/libarchive_p.a
-OLD_FILES+=usr/lib/libasn1_p.a
-OLD_FILES+=usr/lib/libauditd_p.a
-OLD_FILES+=usr/lib/libavl_p.a
-OLD_FILES+=usr/lib/libbe_p.a
-OLD_FILES+=usr/lib/libbegemot_p.a
-OLD_FILES+=usr/lib/libblacklist_p.a
-OLD_FILES+=usr/lib/libbluetooth_p.a
-OLD_FILES+=usr/lib/libbsdxml_p.a
-OLD_FILES+=usr/lib/libbsm_p.a
-OLD_FILES+=usr/lib/libbsnmp_p.a
-OLD_FILES+=usr/lib/libbz2_p.a
-OLD_FILES+=usr/lib/libc++_p.a
-OLD_FILES+=usr/lib/libc_p.a
-OLD_FILES+=usr/lib/libcalendar_p.a
-OLD_FILES+=usr/lib/libcam_p.a
-OLD_FILES+=usr/lib/libcom_err_p.a
-OLD_FILES+=usr/lib/libcompat_p.a
-OLD_FILES+=usr/lib/libcompiler_rt_p.a
-OLD_FILES+=usr/lib/libcrypt_p.a
-OLD_FILES+=usr/lib/libcrypto_p.a
-OLD_FILES+=usr/lib/libctf_p.a
-OLD_FILES+=usr/lib/libcurses_p.a
-OLD_FILES+=usr/lib/libcursesw_p.a
-OLD_FILES+=usr/lib/libcuse_p.a
-OLD_FILES+=usr/lib/libcxxrt_p.a
-OLD_FILES+=usr/lib/libdevctl_p.a
-OLD_FILES+=usr/lib/libdevinfo_p.a
-OLD_FILES+=usr/lib/libdevstat_p.a
-OLD_FILES+=usr/lib/libdialog_p.a
-OLD_FILES+=usr/lib/libdl_p.a
-OLD_FILES+=usr/lib/libdpv_p.a
-OLD_FILES+=usr/lib/libdtrace_p.a
-OLD_FILES+=usr/lib/libdwarf_p.a
-OLD_FILES+=usr/lib/libedit_p.a
-OLD_FILES+=usr/lib/libefivar_p.a
-OLD_FILES+=usr/lib/libelf_p.a
-OLD_FILES+=usr/lib/libexecinfo_p.a
-OLD_FILES+=usr/lib/libfetch_p.a
-OLD_FILES+=usr/lib/libfigpar_p.a
-OLD_FILES+=usr/lib/libfl_p.a
-OLD_FILES+=usr/lib/libform_p.a
-OLD_FILES+=usr/lib/libformw_p.a
-OLD_FILES+=usr/lib/libgcc_eh_p.a
-OLD_FILES+=usr/lib/libgcc_p.a
-OLD_FILES+=usr/lib/libgeom_p.a
-OLD_FILES+=usr/lib/libgpio_p.a
-OLD_FILES+=usr/lib/libgssapi_krb5_p.a
-OLD_FILES+=usr/lib/libgssapi_ntlm_p.a
-OLD_FILES+=usr/lib/libgssapi_p.a
-OLD_FILES+=usr/lib/libgssapi_spnego_p.a
-OLD_FILES+=usr/lib/libhdb_p.a
-OLD_FILES+=usr/lib/libheimbase_p.a
-OLD_FILES+=usr/lib/libheimntlm_p.a
-OLD_FILES+=usr/lib/libheimsqlite_p.a
-OLD_FILES+=usr/lib/libhistory_p.a
-OLD_FILES+=usr/lib/libhx509_p.a
-OLD_FILES+=usr/lib/libicp_p.a
-OLD_FILES+=usr/lib/libicp_rescue_p.a
-OLD_FILES+=usr/lib/libipsec_p.a
-OLD_FILES+=usr/lib/libipt_p.a
-OLD_FILES+=usr/lib/libjail_p.a
-OLD_FILES+=usr/lib/libkadm5clnt_p.a
-OLD_FILES+=usr/lib/libkadm5srv_p.a
-OLD_FILES+=usr/lib/libkafs5_p.a
-OLD_FILES+=usr/lib/libkdc_p.a
-OLD_FILES+=usr/lib/libkiconv_p.a
-OLD_FILES+=usr/lib/libkrb5_p.a
-OLD_FILES+=usr/lib/libkvm_p.a
-OLD_FILES+=usr/lib/libl_p.a
-OLD_FILES+=usr/lib/libln_p.a
-OLD_FILES+=usr/lib/liblzma_p.a
-OLD_FILES+=usr/lib/libm_p.a
-OLD_FILES+=usr/lib/libmagic_p.a
-OLD_FILES+=usr/lib/libmd_p.a
-OLD_FILES+=usr/lib/libmemstat_p.a
-OLD_FILES+=usr/lib/libmenu_p.a
-OLD_FILES+=usr/lib/libmenuw_p.a
-OLD_FILES+=usr/lib/libmilter_p.a
-OLD_FILES+=usr/lib/libmp_p.a
-OLD_FILES+=usr/lib/libmt_p.a
-OLD_FILES+=usr/lib/libncurses_p.a
-OLD_FILES+=usr/lib/libncursesw_p.a
-OLD_FILES+=usr/lib/libnetgraph_p.a
-OLD_FILES+=usr/lib/libnetmap_p.a
-OLD_FILES+=usr/lib/libnss_tacplus_p.a
-OLD_FILES+=usr/lib/libnv_p.a
-OLD_FILES+=usr/lib/libnvpair_p.a
-OLD_FILES+=usr/lib/libopencsd_p.a
-OLD_FILES+=usr/lib/libopie_p.a
-OLD_FILES+=usr/lib/libpanel_p.a
-OLD_FILES+=usr/lib/libpanelw_p.a
-OLD_FILES+=usr/lib/libpathconv_p.a
-OLD_FILES+=usr/lib/libpcap_p.a
-OLD_FILES+=usr/lib/libpjdlog_p.a
-OLD_FILES+=usr/lib/libpmc_p.a
-OLD_FILES+=usr/lib/libprivateatf-c++_p.a
-OLD_FILES+=usr/lib/libprivateatf-c_p.a
-OLD_FILES+=usr/lib/libprivateauditd_p.a
-OLD_FILES+=usr/lib/libprivatebsdstat_p.a
-OLD_FILES+=usr/lib/libprivatecbor_p.a
-OLD_FILES+=usr/lib/libprivatedevdctl_p.a
-OLD_FILES+=usr/lib/libprivateevent_p.a
-OLD_FILES+=usr/lib/libprivateevent1_p.a
-OLD_FILES+=usr/lib/libprivatefido2_p.a
-OLD_FILES+=usr/lib/libprivategmock_main_p.a
-OLD_FILES+=usr/lib/libprivategmock_p.a
-OLD_FILES+=usr/lib/libprivategtest_main_p.a
-OLD_FILES+=usr/lib/libprivategtest_p.a
-OLD_FILES+=usr/lib/libprivateheimipcc_p.a
-OLD_FILES+=usr/lib/libprivateheimipcs_p.a
-OLD_FILES+=usr/lib/libprivateifconfig_p.a
-OLD_FILES+=usr/lib/libprivateldns_p.a
-OLD_FILES+=usr/lib/libprivatesqlite3_p.a
-OLD_FILES+=usr/lib/libprivatessh_p.a
-OLD_FILES+=usr/lib/libprivateucl_p.a
-OLD_FILES+=usr/lib/libprivateunbound_p.a
-OLD_FILES+=usr/lib/libprivatezstd_p.a
-OLD_FILES+=usr/lib/libproc_p.a
-OLD_FILES+=usr/lib/libprocstat_p.a
-OLD_FILES+=usr/lib/libpthread_p.a
-OLD_FILES+=usr/lib/libradius_p.a
-OLD_FILES+=usr/lib/libregex_p.a
-OLD_FILES+=usr/lib/libroken_p.a
-OLD_FILES+=usr/lib/librpcsvc_p.a
-OLD_FILES+=usr/lib/librss_p.a
-OLD_FILES+=usr/lib/librt_p.a
-OLD_FILES+=usr/lib/librtld_db_p.a
-OLD_FILES+=usr/lib/libsbuf_p.a
-OLD_FILES+=usr/lib/libsdp_p.a
-OLD_FILES+=usr/lib/libsmb_p.a
-OLD_FILES+=usr/lib/libspl_p.a
-OLD_FILES+=usr/lib/libssl_p.a
-OLD_FILES+=usr/lib/libstats_p.a
-OLD_FILES+=usr/lib/libstdbuf_p.a
-OLD_FILES+=usr/lib/libstdc++_p.a
-OLD_FILES+=usr/lib/libstdthreads_p.a
-OLD_FILES+=usr/lib/libsupc++_p.a
-OLD_FILES+=usr/lib/libsysdecode_p.a
-OLD_FILES+=usr/lib/libtacplus_p.a
-OLD_FILES+=usr/lib/libtermcap_p.a
-OLD_FILES+=usr/lib/libtermcapw_p.a
-OLD_FILES+=usr/lib/libtermlib_p.a
-OLD_FILES+=usr/lib/libtermlibw_p.a
-OLD_FILES+=usr/lib/libthr_p.a
-OLD_FILES+=usr/lib/libthread_db_p.a
-OLD_FILES+=usr/lib/libtinfo_p.a
-OLD_FILES+=usr/lib/libtinfow_p.a
-OLD_FILES+=usr/lib/libtpool_p.a
-OLD_FILES+=usr/lib/libufs_p.a
-OLD_FILES+=usr/lib/libugidfw_p.a
-OLD_FILES+=usr/lib/libulog_p.a
-OLD_FILES+=usr/lib/libumem_p.a
-OLD_FILES+=usr/lib/libusb_p.a
-OLD_FILES+=usr/lib/libusbhid_p.a
-OLD_FILES+=usr/lib/libutempter_p.a
-OLD_FILES+=usr/lib/libutil_p.a
-OLD_FILES+=usr/lib/libuutil_p.a
-OLD_FILES+=usr/lib/libvgl_p.a
-OLD_FILES+=usr/lib/libvmmapi_p.a
-OLD_FILES+=usr/lib/libwind_p.a
-OLD_FILES+=usr/lib/libwrap_p.a
-OLD_FILES+=usr/lib/libxo_p.a
-OLD_FILES+=usr/lib/liby_p.a
-OLD_FILES+=usr/lib/libypclnt_p.a
-OLD_FILES+=usr/lib/libz_p.a
-OLD_FILES+=usr/lib/libzfs_core_p.a
-OLD_FILES+=usr/lib/libzfs_p.a
-OLD_FILES+=usr/lib/libzfsbootenv_p.a
-OLD_FILES+=usr/lib/libzutil_p.a
-.endif
-
.if ${MK_QUOTAS} == no
OLD_FILES+=sbin/quotacheck
OLD_FILES+=usr/bin/quota
@@ -8315,6 +11421,7 @@ OLD_FILES+=usr/bin/cc
OLD_FILES+=usr/bin/c88
OLD_FILES+=usr/bin/c++
OLD_FILES+=usr/bin/c++filt
+OLD_FILES+=usr/bin/elfcopy
OLD_FILES+=usr/bin/ld
OLD_FILES+=usr/bin/ld.bfd
OLD_FILES+=usr/bin/nm
@@ -8325,6 +11432,7 @@ OLD_FILES+=usr/bin/strip
OLD_FILES+=usr/bin/yacc
OLD_FILES+=usr/share/man/man1/addr2line.1.gz
OLD_FILES+=usr/share/man/man1/c++filt.1.gz
+OLD_FILES+=usr/share/man/man1/elfcopy.1.gz
OLD_FILES+=usr/share/man/man1/nm.1.gz
OLD_FILES+=usr/share/man/man1/readelf.1.gz
OLD_FILES+=usr/share/man/man1/size.1.gz
@@ -9176,6 +12284,9 @@ OLD_FILES+=etc/rc.d/zfs
OLD_FILES+=etc/rc.d/zfsbe
OLD_FILES+=etc/rc.d/zfsd
OLD_FILES+=etc/rc.d/zfskeys
+OLD_FILES+=etc/rc.d/zpool
+OLD_FILES+=etc/rc.d/zpoolreguid
+OLD_FILES+=etc/rc.d/zpoolupgrade
OLD_FILES+=etc/rc.d/zvol
OLD_FILES+=etc/devd/zfs.conf
OLD_FILES+=etc/periodic/daily/404.status-zfs
diff --git a/tools/build/options/WITHOUT_AUTOFS b/tools/build/options/WITHOUT_AUTOFS
index fa8ff52d13e3..4e4047dda97f 100644
--- a/tools/build/options/WITHOUT_AUTOFS
+++ b/tools/build/options/WITHOUT_AUTOFS
@@ -1,3 +1,3 @@
Do not build
-.Xr autofs 5
+.Xr autofs 4
related programs, libraries, and kernel modules.
diff --git a/tools/build/options/WITHOUT_BRANCH_PROTECTION b/tools/build/options/WITHOUT_BRANCH_PROTECTION
new file mode 100644
index 000000000000..97b459b53c92
--- /dev/null
+++ b/tools/build/options/WITHOUT_BRANCH_PROTECTION
@@ -0,0 +1 @@
+Build with branch protection disabled.
diff --git a/tools/build/options/WITHOUT_GH_BC b/tools/build/options/WITHOUT_GH_BC
deleted file mode 100644
index 2618257ec71d..000000000000
--- a/tools/build/options/WITHOUT_GH_BC
+++ /dev/null
@@ -1,5 +0,0 @@
-Install the traditional FreeBSD
-.Xr bc 1
-and
-.Xr dc 1
-programs instead of the enhanced versions.
diff --git a/tools/build/options/WITHOUT_GNU_DIFF b/tools/build/options/WITHOUT_GNU_DIFF
index 889e878668f6..4ea9f6f4a363 100644
--- a/tools/build/options/WITHOUT_GNU_DIFF
+++ b/tools/build/options/WITHOUT_GNU_DIFF
@@ -1,2 +1,5 @@
Do not build GNU
-.Xr diff3 1 .
+.Xr diff3 1 ;
+build BSD
+.Xr diff3 1
+instead.
diff --git a/tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE b/tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE
new file mode 100644
index 000000000000..9efc4022e9cf
--- /dev/null
+++ b/tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE
@@ -0,0 +1,5 @@
+Disallow programs to use more than 48 address bits on amd64.
+Incompatible with LA57 mode.
+Enabling this option might result in a slight reduction in memory
+consumption for jemalloc metadata, but also requires disabling LA57
+(if hardware supports it).
diff --git a/tools/build/options/WITHOUT_LLVM_BINUTILS b/tools/build/options/WITHOUT_LLVM_BINUTILS
new file mode 100644
index 000000000000..35cc0c0e034f
--- /dev/null
+++ b/tools/build/options/WITHOUT_LLVM_BINUTILS
@@ -0,0 +1,17 @@
+Install ELF Tool Chain's binary utilities instead of LLVM's.
+This includes
+.Xr addr2line 1 ,
+.Xr ar 1 ,
+.Xr nm 1 ,
+.Xr objcopy 1 ,
+.Xr ranlib 1 ,
+.Xr readelf 1 ,
+.Xr size 1 ,
+and
+.Xr strip 1 .
+Regardless of this setting, LLVM tools are used for
+.Xr c++filt 1
+and
+.Xr objdump 1 .
+.Xr strings 1
+is always provided by ELF Tool Chain.
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_SPARC b/tools/build/options/WITHOUT_LLVM_TARGET_SPARC
deleted file mode 100644
index 4da802ad0312..000000000000
--- a/tools/build/options/WITHOUT_LLVM_TARGET_SPARC
+++ /dev/null
@@ -1,4 +0,0 @@
-Do not build LLVM target support for SPARC.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
diff --git a/tools/build/options/WITHOUT_LOADER_BIOS_TEXTONLY b/tools/build/options/WITHOUT_LOADER_BIOS_TEXTONLY
new file mode 100644
index 000000000000..0b243b4276c4
--- /dev/null
+++ b/tools/build/options/WITHOUT_LOADER_BIOS_TEXTONLY
@@ -0,0 +1,2 @@
+Include graphics, font and video mode support in the i386 and amd64 BIOS
+boot loader.
diff --git a/tools/build/options/WITHOUT_LOADER_IA32 b/tools/build/options/WITHOUT_LOADER_IA32
new file mode 100644
index 000000000000..2df947216b8f
--- /dev/null
+++ b/tools/build/options/WITHOUT_LOADER_IA32
@@ -0,0 +1 @@
+Do not build the 32-bit UEFI loader.
diff --git a/tools/build/options/WITHOUT_LOADER_PXEBOOT b/tools/build/options/WITHOUT_LOADER_PXEBOOT
new file mode 100644
index 000000000000..e6b09381884e
--- /dev/null
+++ b/tools/build/options/WITHOUT_LOADER_PXEBOOT
@@ -0,0 +1,10 @@
+Do not build pxeboot on i386/amd64.
+When the pxeboot is too large, or unneeded, it may be disabled with this option.
+See
+.Va WITH_LOADER_PXEBOOT
+for how to adjust the defaults when you need both a larger
+.Pa /boot/loader
+and
+.Pa /boot/pxeboot
+.Pp
+This option only has an effect on x86.
diff --git a/tools/build/options/WITHOUT_MALLOC_PRODUCTION b/tools/build/options/WITHOUT_MALLOC_PRODUCTION
index 57b8ab574f93..90efc200fd54 100644
--- a/tools/build/options/WITHOUT_MALLOC_PRODUCTION
+++ b/tools/build/options/WITHOUT_MALLOC_PRODUCTION
@@ -1,3 +1,8 @@
Enable assertions and statistics gathering in
.Xr malloc 3 .
-It also defaults the A and J runtime options to on.
+The run-time options
+.Dv opt.abort ,
+.Dv opt.abort_conf ,
+and
+.Dv opt.junk
+also default to true.
diff --git a/tools/build/options/WITHOUT_SSP b/tools/build/options/WITHOUT_SSP
index 88162cecf14a..160da71bf9c2 100644
--- a/tools/build/options/WITHOUT_SSP
+++ b/tools/build/options/WITHOUT_SSP
@@ -1 +1,4 @@
Do not build world with stack smashing protection.
+See
+.Xr mitigations 7
+for more information.
diff --git a/tools/build/options/WITHOUT_UNDEFINED_VERSION b/tools/build/options/WITHOUT_UNDEFINED_VERSION
deleted file mode 100644
index 0e58eb00f3c1..000000000000
--- a/tools/build/options/WITHOUT_UNDEFINED_VERSION
+++ /dev/null
@@ -1,2 +0,0 @@
-Link libraries with --no-undefined-version to ensure all symbols are
-provided.
diff --git a/tools/build/options/WITHOUT_ZEROREGS b/tools/build/options/WITHOUT_ZEROREGS
new file mode 100644
index 000000000000..edaf5fd8d6c9
--- /dev/null
+++ b/tools/build/options/WITHOUT_ZEROREGS
@@ -0,0 +1,2 @@
+Do not build build the basesystem with code to zero caller-used register
+contents on function return.
diff --git a/tools/build/options/WITHOUT_ZFS_TESTS b/tools/build/options/WITHOUT_ZFS_TESTS
new file mode 100644
index 000000000000..ae2ac45ca0f3
--- /dev/null
+++ b/tools/build/options/WITHOUT_ZFS_TESTS
@@ -0,0 +1 @@
+Do not build and install the legacy ZFS test suite.
diff --git a/tools/build/options/WITH_BEARSSL b/tools/build/options/WITH_BEARSSL
index 6a4447d723ed..ff443a20586a 100644
--- a/tools/build/options/WITH_BEARSSL
+++ b/tools/build/options/WITH_BEARSSL
@@ -8,3 +8,22 @@ This library is currently only used to perform
signature verification and related operations
for Verified Exec and
.Xr loader 8 .
+.Pp
+Due to size constraints in the BIOS environment on x86, one may need to set
+.Va LOADERSIZE
+larger than the
+default 500000, although often loader is under the 500k limit even with
+this option.
+Setting
+.Va LOADERSIZE
+larger than 500000 may cause
+.Xr pxeboot 8
+to be too large to work.
+Careful testing of the loader in the target environment when built with a larger
+limit to establish safe limits is critical because different BIOS environments
+reserve differing amounts of the low 640k space, making a precise limit for
+everybody impossible.
+.Pp
+See also
+.Va WITH_LOADER_PXEBOOT
+for other considerations.
diff --git a/tools/build/options/WITH_BRANCH_PROTECTION b/tools/build/options/WITH_BRANCH_PROTECTION
new file mode 100644
index 000000000000..3326aa5db965
--- /dev/null
+++ b/tools/build/options/WITH_BRANCH_PROTECTION
@@ -0,0 +1,4 @@
+Build with branch protection enabled.
+On arm64 enable the use of pointer authentication and
+branch target identification instructions on arm64.
+These can be used to help mitigate some exploit techniques.
diff --git a/tools/build/options/WITH_CCACHE_BUILD b/tools/build/options/WITH_CCACHE_BUILD
index 9e53769287e5..9a5c2ce1cb80 100644
--- a/tools/build/options/WITH_CCACHE_BUILD
+++ b/tools/build/options/WITH_CCACHE_BUILD
@@ -3,11 +3,18 @@ Use
for the build.
No configuration is required except to install the
.Sy devel/ccache
+or
+.Sy devel/sccache
package.
When using with
.Xr distcc 1 ,
set
.Sy CCACHE_PREFIX=/usr/local/bin/distcc .
+When using with sccache
+set
+.Sy CCACHE_NAME=sccache
+in
+.Xr src.conf 5 .
The default cache directory of
.Pa $HOME/.ccache
will be used, which can be overridden by setting
diff --git a/tools/build/options/WITH_CLEAN b/tools/build/options/WITH_CLEAN
new file mode 100644
index 000000000000..d5962258bcc0
--- /dev/null
+++ b/tools/build/options/WITH_CLEAN
@@ -0,0 +1 @@
+Clean before building world and/or kernel.
diff --git a/tools/build/options/WITH_GNU_DIFF b/tools/build/options/WITH_GNU_DIFF
index 6ccea1c7f28e..cc7fbf25119a 100644
--- a/tools/build/options/WITH_GNU_DIFF
+++ b/tools/build/options/WITH_GNU_DIFF
@@ -1,2 +1,4 @@
Build and install GNU
+.Xr diff3 1
+instead of BSD
.Xr diff3 1 .
diff --git a/tools/build/options/WITH_LLVM_TARGET_SPARC b/tools/build/options/WITH_LLVM_TARGET_SPARC
deleted file mode 100644
index 0d67602688de..000000000000
--- a/tools/build/options/WITH_LLVM_TARGET_SPARC
+++ /dev/null
@@ -1,4 +0,0 @@
-Build LLVM target support for SPARC.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
diff --git a/tools/build/options/WITH_LOADER_BIOS_TEXTONLY b/tools/build/options/WITH_LOADER_BIOS_TEXTONLY
deleted file mode 100644
index 08804c19c691..000000000000
--- a/tools/build/options/WITH_LOADER_BIOS_TEXTONLY
+++ /dev/null
@@ -1,3 +0,0 @@
-Use the old, FreeBSD 12 vidconsole.c.
-This only supports text mode without teken, without any graphics, font or video mode support.
-This setting only affects the i386 and amd64 BIOS boot loader.
diff --git a/tools/build/options/WITH_LOADER_IA32 b/tools/build/options/WITH_LOADER_IA32
new file mode 100644
index 000000000000..2030619dbb85
--- /dev/null
+++ b/tools/build/options/WITH_LOADER_IA32
@@ -0,0 +1 @@
+Build the 32-bit UEFI loader.
diff --git a/tools/build/options/WITH_LOADER_PXEBOOT b/tools/build/options/WITH_LOADER_PXEBOOT
new file mode 100644
index 000000000000..37cf1fa254ec
--- /dev/null
+++ b/tools/build/options/WITH_LOADER_PXEBOOT
@@ -0,0 +1,25 @@
+Build pxeboot on i386/amd64 for BIOS booting.
+The PXE Boot loader package needs more space than we may have in the boot loader.
+If you need to increase
+.Va LOADERSIZE
+beyond 500000, then building
+.Xr pxeboot 8
+will fail.
+To allow a larger
+.Va LOADERSIZE
+for some environments, it may be necessary to disable pxeboot builds or adjust
+its defaults.
+You can set the default loader for pxeboot to use independently of the system
+default by setting
+.Va PXEBOOT_DEFAULT_INTERP
+to one of
+.Dq lua ,
+.Dq 4th ,
+or
+.Dq simp .
+The limit on the size of the loader used for
+.Xr pxeboot 8
+can be set independently with
+.Va PXEBOOTSIZE .
+.Pp
+This option only has an effect on x86.
diff --git a/tools/build/options/WITH_LOADER_VERIEXEC b/tools/build/options/WITH_LOADER_VERIEXEC
index a50ff9a317e6..d784df968949 100644
--- a/tools/build/options/WITH_LOADER_VERIEXEC
+++ b/tools/build/options/WITH_LOADER_VERIEXEC
@@ -4,3 +4,5 @@ with support for verification similar to Verified Exec.
.Pp
Depends on
.Va WITH_BEARSSL .
+May require a larger
+.Va LOADERSIZE .
diff --git a/tools/build/options/WITH_MALLOC_PRODUCTION b/tools/build/options/WITH_MALLOC_PRODUCTION
index 1a214ff805be..ac267bdc48a6 100644
--- a/tools/build/options/WITH_MALLOC_PRODUCTION
+++ b/tools/build/options/WITH_MALLOC_PRODUCTION
@@ -1,3 +1,8 @@
Disable assertions and statistics gathering in
.Xr malloc 3 .
-It also defaults the A and J runtime options to off.
+The run-time options
+.Dv opt.abort ,
+.Dv opt.abort_conf ,
+and
+.Dv opt.junk
+also default to false.
diff --git a/tools/build/options/WITH_MITKRB5 b/tools/build/options/WITH_MITKRB5
new file mode 100644
index 000000000000..6e3683c351c5
--- /dev/null
+++ b/tools/build/options/WITH_MITKRB5
@@ -0,0 +1 @@
+Set this to build MIT Kerberos 5 instead of KTH Heimdal.
diff --git a/tools/build/options/WITH_SSP b/tools/build/options/WITH_SSP
index 0088dd133782..910fdc9b3b1a 100644
--- a/tools/build/options/WITH_SSP
+++ b/tools/build/options/WITH_SSP
@@ -1 +1,4 @@
Build world with stack smashing protection.
+See
+.Xr mitigations 7
+for more information.
diff --git a/tools/build/options/WITH_UNDEFINED_VERSION b/tools/build/options/WITH_UNDEFINED_VERSION
new file mode 100644
index 000000000000..99f687d37bcf
--- /dev/null
+++ b/tools/build/options/WITH_UNDEFINED_VERSION
@@ -0,0 +1,4 @@
+Link libraries with --undefined-version which permits version maps to
+contain symbols that are not present in the library.
+If this is necessary to build a particular configuration, a bug is
+present and the configuration should be reported.
diff --git a/tools/build/options/WITH_ZEROREGS b/tools/build/options/WITH_ZEROREGS
new file mode 100644
index 000000000000..1fc4b856bd50
--- /dev/null
+++ b/tools/build/options/WITH_ZEROREGS
@@ -0,0 +1,4 @@
+Build the basesystem with code to zero caller-used register contents
+on function return.
+This prevents leaking temporary values for side channel attacks.
+Additionally this reduces the number of usable ROP gadgets for attackers.
diff --git a/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT b/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
index f3d97df2fb89..32aadf6d46c9 100644
--- a/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
+++ b/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
@@ -1 +1,6 @@
Build leapsecond information in to the timezone database.
+This option violates
+.St -p1003.1
+and all other applicable standards, and is known to cause unexpected
+issues with date/time handling in many applications and programming
+languages.
diff --git a/tools/build/options/makeman b/tools/build/options/makeman
index 30416b03b983..e0980d3be607 100755
--- a/tools/build/options/makeman
+++ b/tools/build/options/makeman
@@ -379,12 +379,18 @@ EOF
The following options accept a single value from a list of valid values.
.Bl -tag -width indent
EOF
+ prev_opt=
show_group_options |
while read opt ; do
if [ ! -f ${opt} ] ; then
echo "no description found for ${opt}, skipping" >&2
continue
fi
+ if [ $opt = "$prev_opt" ]; then
+ echo "ignoring duplicate option $opt" >&2
+ continue
+ fi
+ prev_opt=$opt
echo ".It Va ${opt}"
cat ${opt}
diff --git a/tools/build/options/makeman.lua b/tools/build/options/makeman.lua
new file mode 100644
index 000000000000..e96e6f50174b
--- /dev/null
+++ b/tools/build/options/makeman.lua
@@ -0,0 +1,791 @@
+--
+-- Copyright (c) 2023 Kyle Evans <kevans@FreeBSD.org>
+--
+-- SPDX-License-Identifier: BSD-2-Clause
+--
+
+local libgen = require('posix.libgen')
+local lfs = require('lfs')
+local stdlib = require('posix.stdlib')
+local unistd = require('posix.unistd')
+local sys_wait = require('posix.sys.wait')
+
+local curdate = os.date("%B %e, %Y")
+
+local output_head <const> = ".\\\" DO NOT EDIT-- this file is @" .. [[generated by tools/build/options/makeman.
+.Dd ]] .. curdate .. [[
+
+.Dt SRC.CONF 5
+.Os
+.Sh NAME
+.Nm src.conf
+.Nd "source build options"
+.Sh DESCRIPTION
+The
+.Nm
+file contains variables that control what components will be generated during
+the build process of the
+.Fx
+source tree; see
+.Xr build 7 .
+.Pp
+The
+.Nm
+file uses the standard makefile syntax.
+However,
+.Nm
+should not specify any dependencies to
+.Xr make 1 .
+Instead,
+.Nm
+is to set
+.Xr make 1
+variables that control the aspects of how the system builds.
+.Pp
+The default location of
+.Nm
+is
+.Pa /etc/src.conf ,
+though an alternative location can be specified in the
+.Xr make 1
+variable
+.Va SRCCONF .
+Overriding the location of
+.Nm
+may be necessary if the system-wide settings are not suitable
+for a particular build.
+For instance, setting
+.Va SRCCONF
+to
+.Pa /dev/null
+effectively resets all build controls to their defaults.
+.Pp
+The only purpose of
+.Nm
+is to control the compilation of the
+.Fx
+source code, which is usually located in
+.Pa /usr/src .
+As a rule, the system administrator creates
+.Nm
+when the values of certain control variables need to be changed
+from their defaults.
+.Pp
+In addition, control variables can be specified
+for a particular build via the
+.Fl D
+option of
+.Xr make 1
+or in its environment; see
+.Xr environ 7 .
+.Pp
+The environment of
+.Xr make 1
+for the build can be controlled via the
+.Va SRC_ENV_CONF
+variable, which defaults to
+.Pa /etc/src-env.conf .
+Some examples that may only be set in this file are
+.Va WITH_DIRDEPS_BUILD ,
+and
+.Va WITH_META_MODE ,
+and
+.Va MAKEOBJDIRPREFIX
+as they are environment-only variables.
+.Pp
+The values of
+.Va WITH_
+and
+.Va WITHOUT_
+variables are ignored regardless of their setting;
+even if they would be set to
+.Dq Li FALSE
+or
+.Dq Li NO .
+The presence of an option causes
+it to be honored by
+.Xr make 1 .
+.Pp
+This list provides a name and short description for variables
+that can be used for source builds.
+.Bl -tag -width indent
+]]
+
+local output_tail <const> = [[.El
+.Sh FILES
+.Bl -tag -compact -width Pa
+.It Pa /etc/src.conf
+.It Pa /etc/src-env.conf
+.It Pa /usr/share/mk/bsd.own.mk
+.El
+.Sh SEE ALSO
+.Xr make 1 ,
+.Xr make.conf 5 ,
+.Xr build 7 ,
+.Xr ports 7
+.Sh HISTORY
+The
+.Nm
+file appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+This manual page was autogenerated by
+.An tools/build/options/makeman .
+]]
+
+local scriptdir <const> = libgen.dirname(stdlib.realpath(arg[0]))
+local srcdir <const> = stdlib.realpath(scriptdir .. "/../../../")
+local makesysdir <const> = srcdir .. "/share/mk"
+
+local make_envvar = os.getenv("MAKE")
+local make_cmd_override = {}
+if make_envvar then
+ for word in make_envvar:gmatch("[^%s]+") do
+ make_cmd_override[#make_cmd_override + 1] = word
+ end
+end
+
+-- Lifted from bsdinstall/scripts/pkgbase.in (read_all)
+local function read_pipe(pipe)
+ local ret = ""
+ repeat
+ local buffer = assert(unistd.read(pipe, 1024))
+ ret = ret .. buffer
+ until buffer == ""
+ return ret
+end
+local function run_make(args)
+ local cmd_args = {"env", "-i", "make", "-C", srcdir, "-m", makesysdir,
+ "__MAKE_CONF=/dev/null", "SRCCONF=/dev/null"}
+
+ if #make_cmd_override > 0 then
+ cmd_args[3] = make_cmd_override[1]
+ for k = 2, #make_cmd_override do
+ local val = make_cmd_override[k]
+
+ table.insert(cmd_args, 3 + (k - 1), val)
+ end
+ end
+ for k, v in ipairs(args) do
+ cmd_args[#cmd_args + 1] = v
+ end
+
+ local r, w = assert(unistd.pipe())
+ local pid = assert(unistd.fork())
+ if pid == 0 then
+ -- Child
+ assert(unistd.close(r))
+ assert(unistd.dup2(w, 1))
+ assert(unistd.dup2(w, 2))
+ assert(unistd.execp("env", cmd_args))
+ unistd._exit()
+ end
+
+ -- Parent
+ assert(unistd.close(w))
+
+ local output = read_pipe(r)
+ assert(unistd.close(r))
+
+ local _, exit_type, exit_code = assert(sys_wait.wait(pid))
+ assert(exit_type == "exited", "make exited with wrong status")
+ assert(exit_code == 0, "make exited unsuccessfully")
+ return output
+end
+
+local function native_target()
+ local output = run_make({"MK_AUTO_OBJ=NO", "-V", "MACHINE",
+ "-V", "MACHINE_ARCH"})
+
+ local arch, machine_arch
+ for x in output:gmatch("[^\n]+") do
+ if not arch then
+ arch = x
+ elseif not machine_arch then
+ machine_arch = x
+ end
+ end
+
+ return arch .. "/" .. machine_arch
+end
+
+local function src_targets()
+ local targets = {}
+ targets[native_target()] = true
+
+ local output = run_make({"MK_AUTO_OBJ=no", "targets"})
+ local curline = 0
+
+ for line in output:gmatch("[^\n]+") do
+ curline = curline + 1
+ if curline ~= 1 then
+ local arch = line:match("[^%s]+/[^%s]+")
+
+ -- Make sure we don't roll over our default arch
+ if arch and not targets[arch] then
+ targets[arch] = false
+ end
+ end
+ end
+
+ return targets
+end
+
+local function config_options(srcconf, env, take_dupes, linting)
+ srcconf = srcconf or "/dev/null"
+ env = env or {}
+
+ local option_args = {".MAKE.MODE=normal", "showconfig",
+ "SRC_ENV_CONF=" .. srcconf}
+
+ for _, val in ipairs(env) do
+ option_args[#option_args + 1] = val
+ end
+
+ local output = run_make(option_args)
+
+ local options = {}
+ local known_dupes = {}
+
+ local function warn_on_dupe(option, val)
+ if not linting or known_dupes[option] then
+ return false
+ end
+ if not option:match("^OPT_") then
+ val = val == "yes"
+ end
+
+ known_dupes[option] = true
+ return val ~= options[val]
+ end
+
+ for opt in output:gmatch("[^\n]+") do
+ if opt:match("^MK_[%a%d_]+%s+=%s+.+") then
+ local name = opt:match("MK_[%a%d_]+")
+ local val = opt:match("= .+"):sub(3)
+
+ -- Some settings, e.g., MK_INIT_ALL_ZERO, may end up
+ -- output twice for some reason that I haven't dug into;
+ -- take the first value. In some circumstances, though,
+ -- we do make an exception and actually want to take the
+ -- latest.
+ if take_dupes or options[name] == nil then
+ options[name] = val == "yes"
+ elseif warn_on_dupe(name, val) then
+ io.stderr:write("ignoring duplicate option " ..
+ name .. "\n")
+ end
+ elseif opt:match("^OPT_[%a%d_]+%s+=%s+.+") then
+ local name = opt:match("OPT_[%a%d_]+")
+ local val = opt:match("= .+"):sub(3)
+
+ -- Multi-value options will arbitrarily use a table here
+ -- to indicate the difference.
+ if take_dupes or options[name] == nil then
+ options[name] = val
+ elseif warn_on_dupe(name, val) then
+ io.stderr:write("ignoring duplicate option " ..
+ name .. "\n")
+ end
+ end
+ end
+
+ return options
+end
+
+local function env_only_options()
+ local output = run_make({"MK_AUTO_OBJ=no", "-V", "__ENV_ONLY_OPTIONS"})
+ local options = {}
+
+ for opt in output:gmatch("[^%s]+") do
+ options["MK_" .. opt] = true
+ end
+
+ return options
+end
+
+local function required_options()
+ local output = run_make({"-f", "share/mk/src.opts.mk", "-V",
+ "__REQUIRED_OPTIONS"})
+ local options = {}
+
+ for opt in output:gmatch("[^%s]+") do
+ options["MK_" .. opt] = true
+ end
+
+ return options
+end
+
+local function config_description(option_name)
+ local fh = io.open(scriptdir .. "/" .. option_name)
+ local desc
+
+ if fh then
+ desc = ""
+ for line in fh:lines() do
+ if not line:match("%$FreeBSD%$") then
+ desc = desc .. line .. "\n"
+ end
+ end
+
+ assert(fh:close())
+ end
+
+ return desc
+end
+
+local function config_descriptions(options)
+ local desc = {}
+ for name, _ in pairs(options) do
+ if name:match("^MK_") then
+ local basename = name:gsub("^MK_", "")
+ local with_name = "WITH_" .. basename
+ local without_name = "WITHOUT_" .. basename
+
+ desc[with_name] = config_description(with_name)
+ desc[without_name] = config_description(without_name)
+ elseif name:match("^OPT_") then
+ local basename = name:gsub("^OPT_", "")
+
+ desc[name] = config_description(basename)
+ end
+ end
+ return desc
+end
+
+local function dependent_options(tmpdir, option_name, all_opts, omit_others)
+ local opt_sense = not not option_name:match("^WITH_")
+ local base_option_name = option_name:gsub("^[^_]+_", "")
+ local prefix = (opt_sense and "WITHOUT_") or "WITH_"
+
+ local srcconf = tmpdir .. "/src-" ..prefix .. "ALL_" ..
+ option_name .. ".conf"
+ local fh = assert(io.open(srcconf, "w+"))
+
+ fh:write(option_name .. "=\"YES\"\n")
+ if not omit_others then
+ for opt, value in pairs(all_opts) do
+ local base_opt = opt:gsub("^MK_", "")
+
+ if base_opt ~= base_option_name then
+ local opt_prefix = (value and "WITH_") or "WITHOUT_"
+ fh:write(opt_prefix .. base_opt .. "=\"YES\"\n")
+ end
+ end
+ end
+ assert(fh:close())
+
+ local option_name_key = "MK_" .. base_option_name
+ local options = config_options(srcconf, nil, omit_others)
+ for name, value in pairs(options) do
+ if name == option_name_key or value == all_opts[name] then
+ options[name] = nil
+ elseif name:match("^OPT_") then
+ -- Strip out multi-option values at the moment, they do
+ -- not really make sense.
+ options[name] = nil
+ end
+ end
+
+ return options
+end
+
+local function export_option_table(fd, name, options)
+ unistd.write(fd, name .. " = {")
+ for k, v in pairs(options) do
+ v = (v and "true") or "false"
+ unistd.write(fd, "['" .. k .. "'] = " .. v .. ",")
+ end
+ unistd.write(fd, "}")
+end
+
+local function all_dependent_options(tmpdir, options, default_opts,
+ with_all_opts, without_all_opts)
+ local all_enforced_options = {}
+ local all_effect_options = {}
+ local children = {}
+
+ for _, name in ipairs(options) do
+ local rfd, wfd = assert(unistd.pipe())
+ local pid = assert(unistd.fork())
+
+ if pid == 0 then
+ -- We need to pcall() this so that errors bubble up to
+ -- our _exit() call rather than the main exit.
+ local ret, errobj = pcall(function()
+ unistd.close(rfd)
+
+ local compare_table
+ if name:match("^WITHOUT") then
+ compare_table = with_all_opts
+ else
+ compare_table = without_all_opts
+ end
+
+ -- List of knobs forced on by this one
+ local enforced_options = dependent_options(tmpdir, name,
+ compare_table)
+ -- List of knobs implied by this by one (once additionally
+ -- filtered based on enforced_options values)
+ local effect_options = dependent_options(tmpdir, name,
+ default_opts, true)
+
+ export_option_table(wfd, "enforced_options",
+ enforced_options)
+ export_option_table(wfd, "effect_options",
+ effect_options)
+ end)
+
+ io.stderr:write(".")
+
+ if ret then
+ unistd._exit(0)
+ else
+ unistd.write(wfd, errobj)
+ unistd._exit(1)
+ end
+ end
+
+ unistd.close(wfd)
+ children[pid] = {name, rfd}
+ end
+
+ while next(children) ~= nil do
+::again::
+ local pid, status, exitcode = sys_wait.wait(-1)
+
+ if status ~= "exited" then
+ goto again
+ end
+
+ local info = children[pid]
+ children[pid] = nil
+
+ local name = info[1]
+ local rfd = info[2]
+ local buf = ''
+ local rbuf, sz
+
+ -- Drain the pipe
+ rbuf = unistd.read(rfd, 512)
+ while #rbuf ~= 0 do
+ buf = buf .. rbuf
+ rbuf = unistd.read(rfd, 512)
+ end
+
+ unistd.close(rfd)
+
+ if exitcode ~= 0 then
+ error("Child " .. pid .. " failed, buf: " .. buf)
+ end
+
+ -- The child has written a pair of tables named enforced_options
+ -- and effect_options to the pipe. We'll load the pipe buffer
+ -- as a string and then yank these out of the clean environment
+ -- that we execute the chunk in.
+ local child_env = {}
+ local res, err = pcall(load(buf, "child", "t", child_env))
+
+ all_enforced_options[name] = child_env["enforced_options"]
+ all_effect_options[name] = child_env["effect_options"]
+ end
+
+ io.stderr:write("\n")
+ return all_enforced_options, all_effect_options
+end
+
+local function get_defaults(target_archs, native_default_opts)
+ local target_defaults = {}
+ -- Set of options with differing defaults in some archs
+ local different_defaults = {}
+
+ for tgt, dflt in pairs(target_archs) do
+ if dflt then
+ local native_copy = {}
+ for opt, val in pairs(native_default_opts) do
+ native_copy[opt] = val
+ end
+ target_defaults[tgt] = native_copy
+ goto skip
+ end
+
+ local target = tgt:gsub("/.+$", "")
+ local target_arch = tgt:gsub("^.+/", "")
+
+ local target_opts = config_options(nil, {"TARGET=" .. target,
+ "TARGET_ARCH=" .. target_arch})
+
+ for opt, val in pairs(target_opts) do
+ if val ~= native_default_opts[opt] then
+ different_defaults[opt] = true
+ end
+ end
+
+ target_defaults[tgt] = target_opts
+::skip::
+ end
+
+ for opt in pairs(native_default_opts) do
+ if different_defaults[opt] == nil then
+ for _, opts in pairs(target_defaults) do
+ opts[opt] = nil
+ end
+ end
+ end
+
+ for tgt, opts in pairs(target_defaults) do
+ local val = opts["MK_ACPI"]
+
+ if val ~= nil then
+ print(" - " .. tgt .. ": " .. ((val and "yes") or "no"))
+ end
+ end
+
+ return target_defaults, different_defaults
+end
+
+local function option_comparator(lhs, rhs)
+ -- Convert both options to the base name, compare that instead unless
+ -- they're the same option. For the same option, we just want to get
+ -- ordering between WITH_/WITHOUT_ correct.
+ local base_lhs = lhs:gsub("^[^_]+_", "")
+ local base_rhs = rhs:gsub("^[^_]+_", "")
+
+ if base_lhs == base_rhs then
+ return lhs < rhs
+ else
+ return base_lhs < base_rhs
+ end
+end
+
+local function main(tmpdir)
+ io.stderr:write("building src.conf.5 man page from files in " ..
+ scriptdir .. "\n")
+
+ local env_only_opts <const> = env_only_options()
+ local default_opts = config_options(nil, nil, nil, true)
+ local opt_descriptions = config_descriptions(default_opts)
+ local srcconf_all <const> = tmpdir .. "/src-all-enabled.conf"
+ local fh = io.open(srcconf_all, "w+")
+ local all_targets = src_targets()
+ local target_defaults, different_defaults = get_defaults(all_targets,
+ default_opts)
+ local options = {}
+ local without_all_opts = {}
+
+ for name, value in pairs(default_opts) do
+ if name:match("^MK_") then
+ local base_name = name:gsub("^MK_", "")
+ local with_name = "WITH_" .. base_name
+ local without_name = "WITHOUT_" .. base_name
+ -- If it's differently defaulted on some architectures,
+ -- we'll split it into WITH_/WITHOUT_ just to simplify
+ -- some later bits.
+ if different_defaults[name] ~= nil then
+ options[#options + 1] = with_name
+ options[#options + 1] = without_name
+ elseif value then
+ options[#options + 1] = without_name
+ else
+ options[#options + 1] = with_name
+ end
+
+ without_all_opts[name] = false
+ assert(fh:write(with_name .. '="YES"\n'))
+ else
+ options[#options + 1] = name
+ end
+ end
+
+ assert(fh:close())
+
+ local with_all_opts = config_options(srcconf_all)
+ local all_enforced_options, all_effect_options
+ local all_required_options = required_options()
+
+ all_enforced_options, all_effect_options = all_dependent_options(tmpdir,
+ options, default_opts, with_all_opts, without_all_opts)
+
+ table.sort(options, option_comparator)
+ io.stdout:write(output_head)
+ for _, name in ipairs(options) do
+ local value
+
+ if name:match("^OPT_") then
+ goto skip
+ end
+ assert(name:match("^WITH"), "Name looks wrong: " .. name)
+ local describe_option = name
+
+ value = not not name:match("^WITHOUT")
+
+ -- Normalize name to MK_ for indexing into various other
+ -- arrays
+ name = "MK_" .. name:gsub("^[^_]+_", "")
+
+ print(".It Va " .. describe_option:gsub("^OPT_", ""))
+ if opt_descriptions[describe_option] then
+ io.stdout:write(opt_descriptions[describe_option])
+ else
+ io.stderr:write("Missing description for " ..
+ describe_option .. "\n")
+ end
+
+ local enforced_options = all_enforced_options[describe_option]
+ local effect_options = all_effect_options[describe_option]
+
+ if different_defaults[name] ~= nil then
+ print([[.Pp
+This is a default setting on]])
+
+ local which_targets = {}
+ for tgt, tgt_options in pairs(target_defaults) do
+ if tgt_options[name] ~= value then
+ which_targets[#which_targets + 1] = tgt
+ end
+ end
+
+ table.sort(which_targets)
+ for idx, tgt in ipairs(which_targets) do
+ io.stdout:write(tgt)
+ if idx < #which_targets - 1 then
+ io.stdout:write(", ")
+ elseif idx == #which_targets - 1 then
+ io.stdout:write(" and ")
+ end
+ end
+ print(".")
+ end
+
+ -- Unset any implied options that are actually required.
+ for dep_opt in pairs(enforced_options) do
+ if all_required_options[dep_opt] then
+ enforced_options[dep_opt] = nil
+ end
+ end
+ if next(enforced_options) ~= nil then
+ print([[When set, it enforces these options:
+.Pp
+.Bl -item -compact]])
+
+ local sorted_dep_opt = {}
+ for dep_opt in pairs(enforced_options) do
+ sorted_dep_opt[#sorted_dep_opt + 1] = dep_opt
+ end
+
+ table.sort(sorted_dep_opt)
+ for _, dep_opt in ipairs(sorted_dep_opt) do
+ local dep_val = enforced_options[dep_opt]
+ local dep_prefix = (dep_val and "WITH_") or
+ "WITHOUT_"
+ local dep_name = dep_opt:gsub("^MK_",
+ dep_prefix)
+ print(".It")
+ print(".Va " .. dep_name)
+ end
+
+ print(".El")
+ end
+
+ if next(effect_options) ~= nil then
+ if next(enforced_options) ~= nil then
+ -- Remove any options that were previously
+ -- noted as enforced...
+ for opt, val in pairs(effect_options) do
+ if enforced_options[opt] == val then
+ effect_options[opt] = nil
+ end
+ end
+
+ -- ... and this could leave us with an empty
+ -- set.
+ if next(effect_options) == nil then
+ goto noenforce
+ end
+
+ print(".Pp")
+ end
+
+ print([[When set, these options are also in effect:
+.Pp
+.Bl -inset -compact]])
+
+ local sorted_dep_opt = {}
+ for dep_opt in pairs(effect_options) do
+ sorted_dep_opt[#sorted_dep_opt + 1] = dep_opt
+ end
+
+ table.sort(sorted_dep_opt)
+ for _, dep_opt in ipairs(sorted_dep_opt) do
+ local dep_val = effect_options[dep_opt]
+ local dep_prefix = (dep_val and "WITH_") or
+ "WITHOUT_"
+ local not_dep_prefix = ((not dep_val) and "WITH_") or
+ "WITHOUT_"
+ local dep_name = dep_opt:gsub("^MK_",
+ dep_prefix)
+ local not_dep_name = dep_opt:gsub("^MK_",
+ not_dep_prefix)
+
+ print(".It Va " .. dep_name)
+ print("(unless")
+ print(".Va " .. not_dep_name)
+ print("is set explicitly)")
+ end
+
+ print(".El")
+::noenforce::
+ end
+
+ if env_only_opts[name] ~= nil then
+ print([[.Pp
+This must be set in the environment, make command line, or
+.Pa /etc/src-env.conf ,
+not
+.Pa /etc/src.conf .]])
+ end
+ ::skip::
+ end
+ print([[.El
+.Pp
+The following options accept a single value from a list of valid values.
+.Bl -tag -width indent]])
+ for _, name in ipairs(options) do
+ if name:match("^OPT_") then
+ local desc = opt_descriptions[name]
+
+ print(".It Va " .. name:gsub("^OPT_", ""))
+ if desc then
+ io.stdout:write(desc)
+ else
+ io.stderr:write("Missing description for " ..
+ name .. "\n")
+ end
+ end
+ end
+ io.stdout:write(output_tail)
+end
+
+local tmpdir = "/tmp/makeman." .. unistd.getpid()
+
+if not lfs.mkdir(tmpdir) then
+ error("Failed to create tempdir " .. tmpdir)
+end
+
+-- Catch any errors so that we can properly clean up, then re-throw it.
+local ret, errobj = pcall(main, tmpdir)
+
+for fname in lfs.dir(tmpdir) do
+ if fname ~= "." and fname ~= ".." then
+ assert(os.remove(tmpdir .. "/" .. fname))
+ end
+end
+
+if not lfs.rmdir(tmpdir) then
+ assert(io.stderr:write("Failed to clean up tmpdir: " .. tmpdir .. "\n"))
+end
+
+if not ret then
+ io.stderr:write(errobj .. "\n")
+ os.exit(1)
+end
diff --git a/tools/build/stale-symlink-buildworld.sh b/tools/build/stale-symlink-buildworld.sh
new file mode 100755
index 000000000000..acc3fb0baaf2
--- /dev/null
+++ b/tools/build/stale-symlink-buildworld.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+# Copyright (c) Feb 2024 Wolfram Schneider <wosch@FreeBSD.org>
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# stale-symlink-buildworld.sh - check for stale symlinks on a FreeBSD system
+#
+# The purpose of this script is to detect stale symlinks, report them to
+# stderr and exit with a non-zero status. All other cases are ignored,
+# such as no symlinks, missing directories, permission problems, etc.
+#
+# You can run the script before or after `make installworld', or any other
+# make targets thats installs files.
+#
+# You can also check your local ports with:
+#
+# env STALE_SYMLINK_BUILDWORLD_DIRS=/usr/local ./stale-symlink-buildworld.sh
+
+
+PATH="/bin:/usr/bin"; export PATH
+
+: ${ncpu=$(nproc)}
+
+obj_dir_prefix=${MAKEOBJDIRPREFIX:="/usr/obj"}
+
+# check other directories as well
+: ${STALE_SYMLINK_BUILDWORLD_DIRS=$obj_dir_prefix}
+
+trap 'rm -f $script' 0
+script=$(mktemp -t stale-symlink)
+chmod u+x $script
+
+# create a temporary shell script to check for stale symbolic links
+cat << 'EOF' > $script
+file="$1"
+
+if [ ! -e "$file" ]; then
+ echo "stale symlink detected: $(ls -ld $file)" >&2
+ exit 1
+else
+ exit 0
+fi
+EOF
+
+find -s -H \
+ /bin \
+ /boot \
+ /etc \
+ /lib \
+ /libexec \
+ /sbin \
+ /usr/bin \
+ /usr/include \
+ /usr/lib \
+ /usr/lib32 \
+ /usr/libdata \
+ /usr/libexec \
+ /usr/sbin \
+ /usr/src \
+ /usr/share \
+ $STALE_SYMLINK_BUILDWORLD_DIRS \
+ -type l \
+ -print0 | xargs -n1 -0 -P${ncpu} $script
+
+#EOF
diff --git a/tools/build/test-includes/Makefile b/tools/build/test-includes/Makefile
index 2c25e0fb32ce..5c45fd7daa4f 100644
--- a/tools/build/test-includes/Makefile
+++ b/tools/build/test-includes/Makefile
@@ -26,6 +26,9 @@ CFLAGS.event.c= -D_WANT_KEVENT32 -D_WANT_FREEBSD11_KEVENT
# details like __inline that the header files must follow to support C89.
CFLAGS+=-ansi
+# Make sure we're pulling in headers from the src tree.
+CFLAGS+=-I${SRCTOP}/sys
+
.include "badfiles.inc"
.for h c in ${HDRS:@x@$x ${x:S,/,_,g:R}.c@}
diff --git a/tools/build/test-includes/badfiles.inc b/tools/build/test-includes/badfiles.inc
index eb0cd05cb39f..9feb73edc5d0 100644
--- a/tools/build/test-includes/badfiles.inc
+++ b/tools/build/test-includes/badfiles.inc
@@ -65,20 +65,15 @@ BADHDRS= \
sys/kobj.h \
sys/ksem.h \
sys/ktls.h \
- sys/ktrace.h \
sys/libkern.h \
sys/link_aout.h \
- sys/linker.h \
- sys/linker_set.h \
sys/lock.h \
sys/lock_profile.h \
sys/lockf.h \
sys/lockmgr.h \
sys/loginclass.h \
- sys/mac.h \
sys/mbuf.h \
sys/md4.h \
- sys/md5.h \
sys/mdioctl.h \
sys/memdesc.h \
sys/memrange.h \
@@ -86,7 +81,6 @@ BADHDRS= \
sys/module_khelp.h \
sys/mpt_ioctl.h \
sys/msgbuf.h \
- sys/mutex.h \
sys/namei.h \
sys/osd.h \
sys/pciio.h \
@@ -100,7 +94,6 @@ BADHDRS= \
sys/prng.h \
sys/qmath.h \
sys/racct.h \
- sys/refcount.h \
sys/resourcevar.h \
sys/rman.h \
sys/rmlock.h \
@@ -108,7 +101,6 @@ BADHDRS= \
sys/runq.h \
sys/rwlock.h \
sys/sbuf.h \
- sys/sema.h \
sys/sf_buf.h \
sys/sglist.h \
sys/sigio.h \
@@ -119,10 +111,8 @@ BADHDRS= \
sys/sockopt.h \
sys/stack.h \
sys/stats.h \
- sys/sx.h \
sys/syscallsubr.h \
sys/syslimits.h \
- sys/systm.h \
sys/taskqueue.h \
sys/terminal.h \
sys/termios.h \
@@ -142,7 +132,6 @@ BADHDRS= \
sys/vdso.h \
sys/vmmeter.h \
sys/vnode.h \
- net/bpf.h \
net/bpf_buffer.h \
net/bpf_jitter.h \
net/bpf_zerocopy.h \
@@ -157,13 +146,11 @@ BADHDRS= \
net/if_llc.h \
net/if_media.h \
net/if_mib.h \
- net/if_pfsync.h \
net/if_tap.h \
net/if_tun.h \
net/if_var.h \
net/if_vlan_var.h \
net/iflib.h \
- net/iflib_private.h \
net/ifq.h \
net/mp_ring.h \
net/mppc.h \
@@ -174,9 +161,7 @@ BADHDRS= \
net/paravirt.h \
net/pfil.h \
net/pfkeyv2.h \
- net/pfvar.h \
net/radix.h \
- net/raw_cb.h \
net/rndis.h \
net/route.h \
net/rss_config.h \
@@ -258,9 +243,7 @@ BADHDRS= \
netinet/in_pcb.h \
netinet/in_pcb_var.h \
netinet/in_rss.h \
- netinet/in_systm.h \
netinet/in_var.h \
- netinet/ip.h \
netinet/ip6.h \
netinet/ip_carp.h \
netinet/ip_dummynet.h \
@@ -277,14 +260,11 @@ BADHDRS= \
netinet/sctp_pcb.h \
netinet/sctp_structs.h \
netinet/sctp_sysctl.h \
- netinet/tcp_debug.h \
netinet/tcp_hpts.h \
netinet/tcp_log_buf.h \
netinet/tcp_lro.h \
netinet/tcp_offload.h \
- netinet/tcp_pcap.h \
netinet/tcp_ratelimit.h \
- netinet/tcp_var.h \
netinet/tcpip.h \
netinet/toecore.h \
netinet/udplite.h \
@@ -296,7 +276,6 @@ BADHDRS= \
netinet6/ip6.h \
netinet6/ip6_mroute.h \
netinet6/ip6_var.h \
- netinet6/ip6protosw.h \
netinet6/ip_fw_nat64.h \
netinet6/ip_fw_nptv6.h \
netinet6/mld6.h \
@@ -316,7 +295,6 @@ BADHDRS= \
netipsec/ipsec6.h \
netipsec/key_debug.h \
netipsec/keysock.h \
- netipsec/xform.h \
netsmb/netbios.h \
netsmb/smb.h \
netsmb/smb_conn.h \
diff --git a/tools/bus_space/C/Makefile b/tools/bus_space/C/Makefile
index 050fa3730fd4..914441227318 100644
--- a/tools/bus_space/C/Makefile
+++ b/tools/bus_space/C/Makefile
@@ -1,4 +1,3 @@
-
LIB= bus
SHLIB_MAJOR= 0
SRCS= lang.c
diff --git a/tools/bus_space/Makefile b/tools/bus_space/Makefile
index 95ea368ffd70..5f75db0103a5 100644
--- a/tools/bus_space/Makefile
+++ b/tools/bus_space/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= \
C \
Python
diff --git a/tools/bus_space/Makefile.inc b/tools/bus_space/Makefile.inc
index af885574a3d3..06fc95199ab6 100644
--- a/tools/bus_space/Makefile.inc
+++ b/tools/bus_space/Makefile.inc
@@ -1,3 +1,2 @@
-
.PATH: ${.CURDIR}/..
SRCS+= bus.c busdma.c
diff --git a/tools/bus_space/Python/Makefile b/tools/bus_space/Python/Makefile
index e56b9d2b1c15..23e5b00c152d 100644
--- a/tools/bus_space/Python/Makefile
+++ b/tools/bus_space/Python/Makefile
@@ -1,4 +1,3 @@
-
SHLIB_NAME= bus.so
SRCS= lang.c
diff --git a/tools/diag/dumpvfscache/Makefile b/tools/diag/dumpvfscache/Makefile
index 3b3959c318e7..4ab0e2b59061 100644
--- a/tools/diag/dumpvfscache/Makefile
+++ b/tools/diag/dumpvfscache/Makefile
@@ -1,4 +1,3 @@
-
PROG= dumpvfscache
LIBADD= kvm
diff --git a/tools/diag/localeck/Makefile b/tools/diag/localeck/Makefile
index 24ca74c8489c..b8642a70af4e 100644
--- a/tools/diag/localeck/Makefile
+++ b/tools/diag/localeck/Makefile
@@ -1,4 +1,3 @@
-
PROG= localeck
MAN=
WARNS?= 4
diff --git a/tools/diag/prtblknos/Makefile b/tools/diag/prtblknos/Makefile
index c337eec72a79..9e4f8b4a55bc 100644
--- a/tools/diag/prtblknos/Makefile
+++ b/tools/diag/prtblknos/Makefile
@@ -1,4 +1,3 @@
-
BINDIR?= /usr/bin
PROG= prtblknos
diff --git a/tools/diag/prtblknos/main.c b/tools/diag/prtblknos/main.c
index c04b0812d6c6..bfd28206a555 100644
--- a/tools/diag/prtblknos/main.c
+++ b/tools/diag/prtblknos/main.c
@@ -32,11 +32,6 @@
#include <sys/stat.h>
#include <libufs.h>
-union dinode {
- struct ufs1_dinode *dp1;
- struct ufs2_dinode *dp2;
-};
-
void prtblknos(struct fs *fs, union dinode *dp);
struct uufsd disk;
@@ -81,7 +76,7 @@ main(int argc, char *argv[])
if (ufs_disk_fillout_blank(&disk, fsname) == -1 ||
sbfind(&disk, 0) == -1)
err(1, "Cannot access file system superblock on %s", fsname);
- fs = (struct fs *)&disk.d_sb;
+ fs = (struct fs *)&disk.d_sbunion.d_sb;
/* remaining arguments are inode numbers. */
while (*++argv) {
diff --git a/tools/diag/prtblknos/prtblknos.c b/tools/diag/prtblknos/prtblknos.c
index e0d7a7389b48..acd0c1e1a61d 100644
--- a/tools/diag/prtblknos/prtblknos.c
+++ b/tools/diag/prtblknos/prtblknos.c
@@ -33,10 +33,6 @@
#include <libufs.h>
#ifdef PRTBLKNOS
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
extern struct uufsd disk;
#else /* used by fsdb */
#include <fsck.h>
diff --git a/tools/ifnet/convert_ifapi.sh b/tools/ifnet/convert_ifapi.sh
index b226847c9595..13509cd7182c 100755
--- a/tools/ifnet/convert_ifapi.sh
+++ b/tools/ifnet/convert_ifapi.sh
@@ -157,7 +157,7 @@ handle_misc() {
old=`echo "$__ifp__->if_"${word}`
new=`echo "if_get"${word}"($__ifp__)"`
new=`echo $new | sed -e 's/&/\\\&/'`
- line=`echo $line| sed -e's/'$old'/'$new'/g'`
+ line=`echo $line| sed -e's/'$old'/'$new'/g' | sed -e 's/if_getxname/if_name/'`
return 0;
fi
return 1;
diff --git a/tools/kerneldoc/Makefile b/tools/kerneldoc/Makefile
index 6e9053aa22cf..36739c42ed15 100644
--- a/tools/kerneldoc/Makefile
+++ b/tools/kerneldoc/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../kern
SRCS+= kern
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_altera b/tools/kerneldoc/subsys/Doxyfile-dev_altera
deleted file mode 100644
index 4db65ac4eba4..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_altera
+++ /dev/null
@@ -1,19 +0,0 @@
-# Doxyfile 1.5.2
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = "FreeBSD kernel altera device code"
-OUTPUT_DIRECTORY = $(DOXYGEN_DEST_PATH)/dev_altera/
-EXTRACT_ALL = YES # for undocumented src, no warnings enabled
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = $(DOXYGEN_SRC_PATH)/dev/altera/ \
- $(NOTREVIEWED)
-
-GENERATE_TAGFILE = dev_altera/dev_altera.tag
-
-@INCLUDE_PATH = $(DOXYGEN_INCLUDE_PATH)
-@INCLUDE = common-Doxyfile
-
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_beri b/tools/kerneldoc/subsys/Doxyfile-dev_beri
deleted file mode 100644
index d66afaf4c947..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_beri
+++ /dev/null
@@ -1,19 +0,0 @@
-# Doxyfile 1.5.2
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = "FreeBSD kernel beri device code"
-OUTPUT_DIRECTORY = $(DOXYGEN_DEST_PATH)/dev_beri/
-EXTRACT_ALL = YES # for undocumented src, no warnings enabled
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = $(DOXYGEN_SRC_PATH)/dev/beri/ \
- $(NOTREVIEWED)
-
-GENERATE_TAGFILE = dev_beri/dev_beri.tag
-
-@INCLUDE_PATH = $(DOXYGEN_INCLUDE_PATH)
-@INCLUDE = common-Doxyfile
-
diff --git a/tools/regression/aio/aiop/Makefile b/tools/regression/aio/aiop/Makefile
index 4c6d3ac16fef..e5d835cb2763 100644
--- a/tools/regression/aio/aiop/Makefile
+++ b/tools/regression/aio/aiop/Makefile
@@ -1,4 +1,3 @@
-
PROG= aiop
MAN=
diff --git a/tools/regression/bpf/Makefile b/tools/regression/bpf/Makefile
index 154b61fa280c..7bb25728d9ff 100644
--- a/tools/regression/bpf/Makefile
+++ b/tools/regression/bpf/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= bpf_filter
.include <bsd.subdir.mk>
diff --git a/tools/regression/bpf/bpf_filter/Makefile b/tools/regression/bpf/bpf_filter/Makefile
index 0f88a27c4e8a..4daecb73ebcb 100644
--- a/tools/regression/bpf/bpf_filter/Makefile
+++ b/tools/regression/bpf/bpf_filter/Makefile
@@ -1,4 +1,3 @@
-
TEST_CASES?= test0001 test0002 test0003 test0004 \
test0005 test0006 test0007 test0008 \
test0009 test0010 test0011 test0012 \
@@ -64,7 +63,7 @@ all: ${TEST_CASES}
.if defined(BPF_BENCHMARK)
@-time ${.CURDIR}/${TEST}
.else
- @-env MALLOC_OPTIONS=J ${.CURDIR}/${TEST}
+ @-env MALLOC_CONF=junk:true ${.CURDIR}/${TEST}
.endif
@rm -f ${.CURDIR}/${TEST}
.endfor
diff --git a/tools/regression/capsicum/syscalls/Makefile b/tools/regression/capsicum/syscalls/Makefile
index 86a3c48ba150..7f5a40752136 100644
--- a/tools/regression/capsicum/syscalls/Makefile
+++ b/tools/regression/capsicum/syscalls/Makefile
@@ -1,4 +1,3 @@
-
SYSCALLS= cap_fcntls_limit cap_getmode cap_ioctls_limit
CFLAGS= -O2 -pipe -std=gnu99 -fstack-protector
diff --git a/tools/regression/capsicum/syscalls/cap_fcntls_limit.c b/tools/regression/capsicum/syscalls/cap_fcntls_limit.c
index d26f3e3b7c36..b76b120a1650 100644
--- a/tools/regression/capsicum/syscalls/cap_fcntls_limit.c
+++ b/tools/regression/capsicum/syscalls/cap_fcntls_limit.c
@@ -1,6 +1,5 @@
/*-
* Copyright (c) 2012 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
diff --git a/tools/regression/capsicum/syscalls/cap_getmode.c b/tools/regression/capsicum/syscalls/cap_getmode.c
index 72596b615877..8d72199ab5f6 100644
--- a/tools/regression/capsicum/syscalls/cap_getmode.c
+++ b/tools/regression/capsicum/syscalls/cap_getmode.c
@@ -1,6 +1,5 @@
/*-
* Copyright (c) 2012 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
diff --git a/tools/regression/capsicum/syscalls/cap_ioctls_limit.c b/tools/regression/capsicum/syscalls/cap_ioctls_limit.c
index 68bdefb417ce..c8cf03207e57 100644
--- a/tools/regression/capsicum/syscalls/cap_ioctls_limit.c
+++ b/tools/regression/capsicum/syscalls/cap_ioctls_limit.c
@@ -1,6 +1,5 @@
/*-
* Copyright (c) 2012 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
diff --git a/tools/regression/capsicum/syscalls/misc.c b/tools/regression/capsicum/syscalls/misc.c
index 704fd70b83ff..3549c1b3bf3c 100644
--- a/tools/regression/capsicum/syscalls/misc.c
+++ b/tools/regression/capsicum/syscalls/misc.c
@@ -1,6 +1,5 @@
/*-
* Copyright (c) 2012 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
diff --git a/tools/regression/capsicum/syscalls/misc.h b/tools/regression/capsicum/syscalls/misc.h
index 842500aff14d..22a0ab8094db 100644
--- a/tools/regression/capsicum/syscalls/misc.h
+++ b/tools/regression/capsicum/syscalls/misc.h
@@ -1,6 +1,5 @@
/*-
* Copyright (c) 2012 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
diff --git a/tools/regression/doat/Makefile b/tools/regression/doat/Makefile
index 96b1c6ebdff2..f102e7dd6437 100644
--- a/tools/regression/doat/Makefile
+++ b/tools/regression/doat/Makefile
@@ -1,4 +1,3 @@
-
PROG= doat
MAN=
diff --git a/tools/regression/ethernet/ethermulti/Makefile b/tools/regression/ethernet/ethermulti/Makefile
index ad0fa68320b8..a079cd6fcf4e 100644
--- a/tools/regression/ethernet/ethermulti/Makefile
+++ b/tools/regression/ethernet/ethermulti/Makefile
@@ -1,4 +1,3 @@
-
PROG= ethermulti
SRCS+= ethermulti.c
MAN=
diff --git a/tools/regression/fsx/Makefile b/tools/regression/fsx/Makefile
index 0f5e8e81d32f..78f6dd970cf5 100644
--- a/tools/regression/fsx/Makefile
+++ b/tools/regression/fsx/Makefile
@@ -1,4 +1,3 @@
-
PROG= fsx
MAN=
diff --git a/tools/regression/gaithrstress/Makefile b/tools/regression/gaithrstress/Makefile
index a9d9687c8119..fd1a7e821019 100644
--- a/tools/regression/gaithrstress/Makefile
+++ b/tools/regression/gaithrstress/Makefile
@@ -1,4 +1,3 @@
-
PROG= gaithrstress
LIBADD= pthread
diff --git a/tools/regression/geom/ConfCmp/Makefile b/tools/regression/geom/ConfCmp/Makefile
index bbb6a14819c1..a03de0e9bcd4 100644
--- a/tools/regression/geom/ConfCmp/Makefile
+++ b/tools/regression/geom/ConfCmp/Makefile
@@ -1,4 +1,3 @@
-
PROG= ConfCmp
SRCS+= ConfCmp.c
SRCS+= subr_sbuf.c
diff --git a/tools/regression/geom/MdLoad/Makefile b/tools/regression/geom/MdLoad/Makefile
index 4b998ee52580..0a5473ee9b91 100644
--- a/tools/regression/geom/MdLoad/Makefile
+++ b/tools/regression/geom/MdLoad/Makefile
@@ -1,4 +1,3 @@
-
PROG= MdLoad
LIBADD= sbuf bsdxml
NO_OBJ= t
diff --git a/tools/regression/geom_gpt/Makefile b/tools/regression/geom_gpt/Makefile
index ef7f98e03c8b..603ceb0d61b7 100644
--- a/tools/regression/geom_gpt/Makefile
+++ b/tools/regression/geom_gpt/Makefile
@@ -1,4 +1,3 @@
-
PROG= gctl_test_helper
MAN=
diff --git a/tools/regression/include/stdatomic/Makefile b/tools/regression/include/stdatomic/Makefile
index ea6d0c7fb864..d0bbc93a2a26 100644
--- a/tools/regression/include/stdatomic/Makefile
+++ b/tools/regression/include/stdatomic/Makefile
@@ -1,4 +1,3 @@
-
PROG= logic
MAN=
diff --git a/tools/regression/include/tgmath/Makefile b/tools/regression/include/tgmath/Makefile
index 0e843bcf4b0c..aebd7e1b81e2 100644
--- a/tools/regression/include/tgmath/Makefile
+++ b/tools/regression/include/tgmath/Makefile
@@ -1,4 +1,3 @@
-
PROG= tgmath
CSTD= c99
CFLAGS+= -fno-builtin
diff --git a/tools/regression/kgssapi/Makefile b/tools/regression/kgssapi/Makefile
index 8b3998599be6..582658663d3f 100644
--- a/tools/regression/kgssapi/Makefile
+++ b/tools/regression/kgssapi/Makefile
@@ -1,4 +1,3 @@
-
PROG= gsstest
MAN=
WARNS?= 2
diff --git a/tools/regression/kthread/kld/Makefile b/tools/regression/kthread/kld/Makefile
index 125fdcf1767d..8ed2dabb4230 100644
--- a/tools/regression/kthread/kld/Makefile
+++ b/tools/regression/kthread/kld/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}
KMOD= kthrdlk
diff --git a/tools/regression/lib/libc/regex/Makefile b/tools/regression/lib/libc/regex/Makefile
index 33f6d812d734..9b070b75cfb6 100644
--- a/tools/regression/lib/libc/regex/Makefile
+++ b/tools/regression/lib/libc/regex/Makefile
@@ -1,4 +1,3 @@
-
GROT= ../../../../../lib/libc/regex/grot
.PHONY: tests
diff --git a/tools/regression/mlock/Makefile b/tools/regression/mlock/Makefile
index ce523f2cdb73..77d295ceb7c7 100644
--- a/tools/regression/mlock/Makefile
+++ b/tools/regression/mlock/Makefile
@@ -1,4 +1,3 @@
-
PROG= mlock
MAN=
diff --git a/tools/regression/net80211/ccmp/Makefile b/tools/regression/net80211/ccmp/Makefile
index 3c309a81872a..298e41836f24 100644
--- a/tools/regression/net80211/ccmp/Makefile
+++ b/tools/regression/net80211/ccmp/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/net80211
KMOD= test_ccmp
diff --git a/tools/regression/net80211/tkip/Makefile b/tools/regression/net80211/tkip/Makefile
index 7873ffc17e7a..e6295bc1eea7 100644
--- a/tools/regression/net80211/tkip/Makefile
+++ b/tools/regression/net80211/tkip/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/net80211
KMOD= test_tkip
diff --git a/tools/regression/net80211/wep/Makefile b/tools/regression/net80211/wep/Makefile
index e16ccb434e20..dd742a45401b 100644
--- a/tools/regression/net80211/wep/Makefile
+++ b/tools/regression/net80211/wep/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/net80211
KMOD= test_wep
diff --git a/tools/regression/netinet/arphold/Makefile b/tools/regression/netinet/arphold/Makefile
index d8170303d42b..97cedfc3f9d1 100644
--- a/tools/regression/netinet/arphold/Makefile
+++ b/tools/regression/netinet/arphold/Makefile
@@ -1,4 +1,3 @@
-
PROG= arphold
MAN=
CFLAGS+= -Wall
diff --git a/tools/regression/netinet/ipbroadcast/ipbroadcast.c b/tools/regression/netinet/ipbroadcast/ipbroadcast.c
index 6177ce964749..9315ebe2b6ad 100644
--- a/tools/regression/netinet/ipbroadcast/ipbroadcast.c
+++ b/tools/regression/netinet/ipbroadcast/ipbroadcast.c
@@ -91,9 +91,6 @@ usage(void)
fprintf(stderr, "-p: Set local and remote port (default: %d)\n",
DEFAULT_PORT);
fprintf(stderr, "-R: Use raw IP (protocol %d)\n", IPPROTO_ZEROHOP);
-#if 0
- fprintf(stderr, "-r: Fill datagram with random bytes\n");
-#endif
fprintf(stderr, "-s: Set IP_SENDSRCADDR to <srcaddr>\n");
fprintf(stderr, "-t: Set IP_TTL to <ttl>\n");
@@ -109,10 +106,8 @@ main(int argc, char *argv[])
struct msghdr msg;
struct sockaddr_in dsin;
struct sockaddr_in laddr;
- struct sockaddr_dl *sdl;
struct cmsghdr *cmsgp;
struct in_addr dstaddr;
- struct in_addr *srcaddrp;
char *ifname;
char *laddr_s;
char *srcaddr_s;
@@ -121,7 +116,6 @@ main(int argc, char *argv[])
int dobroadcast;
int dontroute;
int doonesbcast;
- int dorandom;
int dorawip;
size_t buflen;
ssize_t nbytes;
@@ -136,7 +130,6 @@ main(int argc, char *argv[])
dobroadcast = 0;
dontroute = 0;
doonesbcast = 0;
- dorandom = 0;
dorawip = 0;
ifname = NULL;
@@ -150,7 +143,7 @@ main(int argc, char *argv[])
buflen = DEFAULT_PAYLOAD_SIZE;
progname = basename(argv[0]);
- while ((ch = getopt(argc, argv, "1A:bBdi:l:p:Rrs:t:")) != -1) {
+ while ((ch = getopt(argc, argv, "1A:bBdi:l:p:Rs:t:")) != -1) {
switch (ch) {
case '1':
doonesbcast = 1;
@@ -179,9 +172,6 @@ main(int argc, char *argv[])
case 'R':
dorawip = 1;
break;
- case 'r':
- dorandom = 1;
- break;
case 's':
srcaddr_s = optarg;
break;
@@ -311,8 +301,9 @@ main(int argc, char *argv[])
cmsgp->cmsg_len = CMSG_LEN(sizeof(struct in_addr));
cmsgp->cmsg_level = IPPROTO_IP;
cmsgp->cmsg_type = IP_SENDSRCADDR;
- srcaddrp = (struct in_addr *)CMSG_DATA(cmsgp);
- srcaddrp->s_addr = inet_addr(srcaddr_s);
+ memcpy(CMSG_DATA(cmsgp),
+ &(struct in_addr){ inet_addr(srcaddr_s) },
+ sizeof(struct in_addr));
}
if (ifname != NULL) {
@@ -327,13 +318,11 @@ main(int argc, char *argv[])
fprintf(stderr, "DEBUG: cmsgp->cmsg_len is %d\n",
cmsgp->cmsg_len);
#endif
-
- sdl = (struct sockaddr_dl *)CMSG_DATA(cmsgp);
- memset(sdl, 0, sizeof(struct sockaddr_dl));
- sdl->sdl_family = AF_LINK;
- sdl->sdl_len = sizeof(struct sockaddr_dl);
- sdl->sdl_index = if_nametoindex(ifname);
-
+ memcpy(CMSG_DATA(cmsgp), &(struct sockaddr_dl){
+ .sdl_family = AF_LINK,
+ .sdl_len = sizeof(struct sockaddr_dl),
+ .sdl_index = if_nametoindex(ifname) },
+ sizeof(struct sockaddr_dl));
#ifdef DIAGNOSTIC
fprintf(stderr, "DEBUG: sdl->sdl_family is %d\n",
sdl->sdl_family);
diff --git a/tools/regression/netinet/msocket/Makefile b/tools/regression/netinet/msocket/Makefile
index 64e10b153ec1..221b27d0dbf4 100644
--- a/tools/regression/netinet/msocket/Makefile
+++ b/tools/regression/netinet/msocket/Makefile
@@ -1,4 +1,3 @@
-
PROG= msocket
MAN=
CFLAGS+= -Wall
diff --git a/tools/regression/netinet/msocket_ifnet_remove/Makefile b/tools/regression/netinet/msocket_ifnet_remove/Makefile
index 50f602f243a5..08640d862ce4 100644
--- a/tools/regression/netinet/msocket_ifnet_remove/Makefile
+++ b/tools/regression/netinet/msocket_ifnet_remove/Makefile
@@ -1,4 +1,3 @@
-
PROG= msocket_ifnet_remove
WARNS?= 3
MAN=
diff --git a/tools/regression/netinet/tcpfullwindowrst/Makefile b/tools/regression/netinet/tcpfullwindowrst/Makefile
index d86a3029bd8a..ad401e9df1cd 100644
--- a/tools/regression/netinet/tcpfullwindowrst/Makefile
+++ b/tools/regression/netinet/tcpfullwindowrst/Makefile
@@ -1,4 +1,3 @@
-
PROG= tcpfullwindowrsttest
MAN=
diff --git a/tools/regression/netinet/udpconnectjail/Makefile b/tools/regression/netinet/udpconnectjail/Makefile
index 23480a3a2ca2..88a14afb91d8 100644
--- a/tools/regression/netinet/udpconnectjail/Makefile
+++ b/tools/regression/netinet/udpconnectjail/Makefile
@@ -1,4 +1,3 @@
-
PROG= udpconnectjail
MAN=
WARNS?= 2
diff --git a/tools/regression/netinet/udpzerobyte/Makefile b/tools/regression/netinet/udpzerobyte/Makefile
index 7ac697d75d32..3cba327d2bd3 100644
--- a/tools/regression/netinet/udpzerobyte/Makefile
+++ b/tools/regression/netinet/udpzerobyte/Makefile
@@ -1,4 +1,3 @@
-
PROG= udpzerobyte
MAN=
WARNS?= 2
diff --git a/tools/regression/nfsmmap/Makefile b/tools/regression/nfsmmap/Makefile
index 4c3c96ebccfd..c731d428f7c1 100644
--- a/tools/regression/nfsmmap/Makefile
+++ b/tools/regression/nfsmmap/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= test1 test2
.include <bsd.subdir.mk>
diff --git a/tools/regression/nfsmmap/test1/Makefile b/tools/regression/nfsmmap/test1/Makefile
index f42c89aa7653..97b2b6553211 100644
--- a/tools/regression/nfsmmap/test1/Makefile
+++ b/tools/regression/nfsmmap/test1/Makefile
@@ -1,4 +1,3 @@
-
PROG= test1
MAN=
NFSSERVER?= herring.nlsystems.com
diff --git a/tools/regression/nfsmmap/test2/Makefile b/tools/regression/nfsmmap/test2/Makefile
index c321daa3c8af..6d785a140dcb 100644
--- a/tools/regression/nfsmmap/test2/Makefile
+++ b/tools/regression/nfsmmap/test2/Makefile
@@ -1,4 +1,3 @@
-
PROG= test2
MAN=
NFSSERVER?= herring.nlsystems.com
diff --git a/tools/regression/p1003_1b/Makefile b/tools/regression/p1003_1b/Makefile
index 0c234ff29d6d..b5e7034792b4 100644
--- a/tools/regression/p1003_1b/Makefile
+++ b/tools/regression/p1003_1b/Makefile
@@ -1,4 +1,3 @@
-
PROG=p1003_1b
SRCS=\
diff --git a/tools/regression/posixsem/Makefile b/tools/regression/posixsem/Makefile
index 1de91196d13b..2054d64afa45 100644
--- a/tools/regression/posixsem/Makefile
+++ b/tools/regression/posixsem/Makefile
@@ -1,4 +1,3 @@
-
PROG= posixsem
SRCS= posixsem.c test.c
LIBADD= kvm
diff --git a/tools/regression/posixsem2/Makefile b/tools/regression/posixsem2/Makefile
index d5d87822a910..3e8227a1c952 100644
--- a/tools/regression/posixsem2/Makefile
+++ b/tools/regression/posixsem2/Makefile
@@ -1,4 +1,3 @@
-
PROG= semtest
SRCS= semtest.c
MAN=
diff --git a/tools/regression/pthread/cv_cancel1/Makefile b/tools/regression/pthread/cv_cancel1/Makefile
index 04b151a138fe..1a27b8adfe78 100644
--- a/tools/regression/pthread/cv_cancel1/Makefile
+++ b/tools/regression/pthread/cv_cancel1/Makefile
@@ -1,4 +1,3 @@
-
PROG= cv_cancel1
MAN=
LIBADD= pthread
diff --git a/tools/regression/pthread/mutex_isowned_np/Makefile b/tools/regression/pthread/mutex_isowned_np/Makefile
index 650baa65563c..31dbd470d7d5 100644
--- a/tools/regression/pthread/mutex_isowned_np/Makefile
+++ b/tools/regression/pthread/mutex_isowned_np/Makefile
@@ -1,4 +1,3 @@
-
PROG= mutex_isowned_np
MAN=
LIBADD= pthread
diff --git a/tools/regression/redzone9/Makefile b/tools/regression/redzone9/Makefile
index fe2d71ecd776..a7e56e1bd506 100644
--- a/tools/regression/redzone9/Makefile
+++ b/tools/regression/redzone9/Makefile
@@ -1,4 +1,3 @@
-
KMOD= redzone
SRCS= redzone.c
diff --git a/tools/regression/rpcsec_gss/Makefile b/tools/regression/rpcsec_gss/Makefile
index 60ece71252a4..6697fd9eaf99 100644
--- a/tools/regression/rpcsec_gss/Makefile
+++ b/tools/regression/rpcsec_gss/Makefile
@@ -1,4 +1,3 @@
-
PROG= rpctest
MAN=
LIBADD= rpcsec_gss
diff --git a/tools/regression/security/access/Makefile b/tools/regression/security/access/Makefile
index 4f1b9a5fb2dd..59f52230e0e5 100644
--- a/tools/regression/security/access/Makefile
+++ b/tools/regression/security/access/Makefile
@@ -1,4 +1,3 @@
-
PROG= testaccess
MAN=
diff --git a/tools/regression/security/cap_test/Makefile b/tools/regression/security/cap_test/Makefile
index 05c7724af825..0fdc274edbed 100644
--- a/tools/regression/security/cap_test/Makefile
+++ b/tools/regression/security/cap_test/Makefile
@@ -1,4 +1,3 @@
-
PROG= cap_test
SRCS= cap_test.c \
cap_test_capmode.c \
diff --git a/tools/regression/security/open_to_operation/Makefile b/tools/regression/security/open_to_operation/Makefile
index 87f46c1f3032..e319e4f78675 100644
--- a/tools/regression/security/open_to_operation/Makefile
+++ b/tools/regression/security/open_to_operation/Makefile
@@ -1,4 +1,3 @@
-
PROG= open_to_operation
MAN=
WARNS?= 3
diff --git a/tools/regression/security/proc_to_proc/Makefile b/tools/regression/security/proc_to_proc/Makefile
index 041aea2000e6..984791c299b6 100644
--- a/tools/regression/security/proc_to_proc/Makefile
+++ b/tools/regression/security/proc_to_proc/Makefile
@@ -1,4 +1,3 @@
-
PROG= testuid
MAN=
diff --git a/tools/regression/sigqueue/Makefile b/tools/regression/sigqueue/Makefile
index 2913e8870e8e..a35b2305815c 100644
--- a/tools/regression/sigqueue/Makefile
+++ b/tools/regression/sigqueue/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR=sigqtest1 sigqtest2
.include <bsd.subdir.mk>
diff --git a/tools/regression/sigqueue/sigqtest1/Makefile b/tools/regression/sigqueue/sigqtest1/Makefile
index 28e458537055..9efd0c2eec2a 100644
--- a/tools/regression/sigqueue/sigqtest1/Makefile
+++ b/tools/regression/sigqueue/sigqtest1/Makefile
@@ -1,4 +1,3 @@
-
PROG=sigqtest1
MAN=
DEBUG_FLAGS=-g
diff --git a/tools/regression/sigqueue/sigqtest2/Makefile b/tools/regression/sigqueue/sigqtest2/Makefile
index 6f278fab171e..9eea81bb59e8 100644
--- a/tools/regression/sigqueue/sigqtest2/Makefile
+++ b/tools/regression/sigqueue/sigqtest2/Makefile
@@ -1,4 +1,3 @@
-
PROG=sigqtest2
MAN=
DEBUG_FLAGS=-g
diff --git a/tools/regression/sockets/listen_backlog/Makefile b/tools/regression/sockets/listen_backlog/Makefile
index 24efd15aebd2..c7414442582e 100644
--- a/tools/regression/sockets/listen_backlog/Makefile
+++ b/tools/regression/sockets/listen_backlog/Makefile
@@ -1,4 +1,3 @@
-
PROG= listen_backlog
MAN=
diff --git a/tools/regression/sockets/listen_kqueue/Makefile b/tools/regression/sockets/listen_kqueue/Makefile
index 3ebdb1c4fac0..e67350d9ff14 100644
--- a/tools/regression/sockets/listen_kqueue/Makefile
+++ b/tools/regression/sockets/listen_kqueue/Makefile
@@ -1,4 +1,3 @@
-
PROG= listen_kqueue
MAN=
diff --git a/tools/regression/sockets/pr_atomic/Makefile b/tools/regression/sockets/pr_atomic/Makefile
index 3c13ea53d068..e9e5a2fa2e55 100644
--- a/tools/regression/sockets/pr_atomic/Makefile
+++ b/tools/regression/sockets/pr_atomic/Makefile
@@ -1,4 +1,3 @@
-
PROG= pr_atomic
MAN=
diff --git a/tools/regression/sockets/rtsocket/Makefile b/tools/regression/sockets/rtsocket/Makefile
index 666f6c1ab8d0..31120210ee2a 100644
--- a/tools/regression/sockets/rtsocket/Makefile
+++ b/tools/regression/sockets/rtsocket/Makefile
@@ -1,4 +1,3 @@
-
PROG= rtsocket
MAN=
diff --git a/tools/regression/sockets/so_setfib/Makefile b/tools/regression/sockets/so_setfib/Makefile
index c7c8e69fef6e..3670514e6c42 100644
--- a/tools/regression/sockets/so_setfib/Makefile
+++ b/tools/regression/sockets/so_setfib/Makefile
@@ -1,4 +1,3 @@
-
.include <src.opts.mk>
PROG= so_setfib
diff --git a/tools/regression/sockets/udp_pingpong/Makefile b/tools/regression/sockets/udp_pingpong/Makefile
index 8ba9ee40826f..72090d725e75 100644
--- a/tools/regression/sockets/udp_pingpong/Makefile
+++ b/tools/regression/sockets/udp_pingpong/Makefile
@@ -1,4 +1,3 @@
-
PROG= udp_pingpong
MAN=
diff --git a/tools/regression/sockets/unix_bindconnect/Makefile b/tools/regression/sockets/unix_bindconnect/Makefile
index 776723eadada..0e5c32e67b92 100644
--- a/tools/regression/sockets/unix_bindconnect/Makefile
+++ b/tools/regression/sockets/unix_bindconnect/Makefile
@@ -1,4 +1,3 @@
-
PROG= unix_bindconnect
MAN=
diff --git a/tools/regression/sockets/unix_close_race/Makefile b/tools/regression/sockets/unix_close_race/Makefile
index b4fa340ed0df..ca151dc7af48 100644
--- a/tools/regression/sockets/unix_close_race/Makefile
+++ b/tools/regression/sockets/unix_close_race/Makefile
@@ -1,4 +1,3 @@
-
PROG= unix_close_race
MAN=
diff --git a/tools/regression/sockets/unix_cmsg/Makefile b/tools/regression/sockets/unix_cmsg/Makefile
index b3caf4996c46..24ca702e0a94 100644
--- a/tools/regression/sockets/unix_cmsg/Makefile
+++ b/tools/regression/sockets/unix_cmsg/Makefile
@@ -1,4 +1,3 @@
-
PROG= unix_cmsg
SRCS= ${AUTOSRCS} unix_cmsg.c uc_common.h uc_common.c \
t_generic.h t_generic.c t_peercred.h t_peercred.c \
diff --git a/tools/regression/sockets/unix_gc/Makefile b/tools/regression/sockets/unix_gc/Makefile
index 81791f4b5212..c9f98fca8710 100644
--- a/tools/regression/sockets/unix_gc/Makefile
+++ b/tools/regression/sockets/unix_gc/Makefile
@@ -1,4 +1,3 @@
-
PROG= unix_gc
MAN=
diff --git a/tools/regression/sockets/unix_sendtorace/Makefile b/tools/regression/sockets/unix_sendtorace/Makefile
index fb1a25429f82..1e7b53d40379 100644
--- a/tools/regression/sockets/unix_sendtorace/Makefile
+++ b/tools/regression/sockets/unix_sendtorace/Makefile
@@ -1,4 +1,3 @@
-
PROG= unix_sendtorace
MAN=
diff --git a/tools/regression/sockets/unix_socket/Makefile b/tools/regression/sockets/unix_socket/Makefile
index 0a62bf25a0dc..61612323e98e 100644
--- a/tools/regression/sockets/unix_socket/Makefile
+++ b/tools/regression/sockets/unix_socket/Makefile
@@ -1,4 +1,3 @@
-
PROG= unix_socket
MAN=
diff --git a/tools/regression/sockets/unix_sorflush/Makefile b/tools/regression/sockets/unix_sorflush/Makefile
index a7f52e47d1fb..b41cb474f94a 100644
--- a/tools/regression/sockets/unix_sorflush/Makefile
+++ b/tools/regression/sockets/unix_sorflush/Makefile
@@ -1,4 +1,3 @@
-
PROG= unix_sorflush
MAN=
diff --git a/tools/regression/sockets/zerosend/Makefile b/tools/regression/sockets/zerosend/Makefile
index 4ceb95dd16b5..2f270d05cfa2 100644
--- a/tools/regression/sockets/zerosend/Makefile
+++ b/tools/regression/sockets/zerosend/Makefile
@@ -1,4 +1,3 @@
-
PROG= zerosend
MAN=
diff --git a/tools/regression/tls/Makefile b/tools/regression/tls/Makefile
index 96cd680987c2..063e3dec7d8d 100644
--- a/tools/regression/tls/Makefile
+++ b/tools/regression/tls/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR=libxx libyy ttls1 ttls2 ttls4
.if ${MACHINE_ARCH} == "i386"
diff --git a/tools/regression/tls/libxx/Makefile b/tools/regression/tls/libxx/Makefile
index adf4da1cb6b7..18195384ad9c 100644
--- a/tools/regression/tls/libxx/Makefile
+++ b/tools/regression/tls/libxx/Makefile
@@ -1,4 +1,3 @@
-
SHLIB_NAME= libxx.so
SRCS= xx.c
diff --git a/tools/regression/tls/libyy/Makefile b/tools/regression/tls/libyy/Makefile
index 634be2ad58ea..05ecfc735c62 100644
--- a/tools/regression/tls/libyy/Makefile
+++ b/tools/regression/tls/libyy/Makefile
@@ -1,4 +1,3 @@
-
SHLIB_NAME= libyy.so
SRCS= yy.c
diff --git a/tools/regression/tls/ttls1/Makefile b/tools/regression/tls/ttls1/Makefile
index fd0f5edfd0b8..8560de58cc9a 100644
--- a/tools/regression/tls/ttls1/Makefile
+++ b/tools/regression/tls/ttls1/Makefile
@@ -1,4 +1,3 @@
-
PROG= ttls1
LDFLAGS+= -L../libxx -lxx -Wl,--rpath=${.OBJDIR}/../libxx
LDFLAGS+= -L../libyy -lyy -Wl,--rpath=${.OBJDIR}/../libyy
diff --git a/tools/regression/tls/ttls2/Makefile b/tools/regression/tls/ttls2/Makefile
index 044520a6b73e..782808823efe 100644
--- a/tools/regression/tls/ttls2/Makefile
+++ b/tools/regression/tls/ttls2/Makefile
@@ -1,4 +1,3 @@
-
PROG= ttls2
LIBADD= pthread
MAN=
diff --git a/tools/regression/tls/ttls3/Makefile b/tools/regression/tls/ttls3/Makefile
index 4695889067eb..03413ea8e1d6 100644
--- a/tools/regression/tls/ttls3/Makefile
+++ b/tools/regression/tls/ttls3/Makefile
@@ -1,7 +1,6 @@
-
all: ttls3
-LDFLAGS=-shared -Bsymbolic --allow-shlib-undefined
+LDFLAGS+=-shared -Bsymbolic --allow-shlib-undefined
CFLAGS+= -lpthread
CFLAGS+= -Wl,--rpath=${.OBJDIR}
diff --git a/tools/regression/tls/ttls4/Makefile b/tools/regression/tls/ttls4/Makefile
index f6f54d48f1b1..b87343ecdd00 100644
--- a/tools/regression/tls/ttls4/Makefile
+++ b/tools/regression/tls/ttls4/Makefile
@@ -1,4 +1,3 @@
-
PROG= ttls4
LIBADD= pthread
MAN=
diff --git a/tools/regression/ufs/uprintf/Makefile b/tools/regression/ufs/uprintf/Makefile
index a1de5f3cb9c4..c1a7c4de03ae 100644
--- a/tools/regression/ufs/uprintf/Makefile
+++ b/tools/regression/ufs/uprintf/Makefile
@@ -1,4 +1,3 @@
-
PROG= ufs_uprintf
WARNS?= 3
MAN=
diff --git a/tools/regression/usr.bin/cc/Makefile b/tools/regression/usr.bin/cc/Makefile
index 890875b1abba..1f8b5d8f03fd 100644
--- a/tools/regression/usr.bin/cc/Makefile
+++ b/tools/regression/usr.bin/cc/Makefile
@@ -1,4 +1,3 @@
-
TESTS= float
CFLAGS+=-lm
diff --git a/tools/regression/usr.bin/env/Makefile b/tools/regression/usr.bin/env/Makefile
index 2a4e6bd61cea..06f1fbe82e23 100644
--- a/tools/regression/usr.bin/env/Makefile
+++ b/tools/regression/usr.bin/env/Makefile
@@ -1,4 +1,3 @@
-
TESTPGM?=TestProgramNotSpecifed
all:
diff --git a/tools/test/README b/tools/test/README
index a54964621cd8..894aa051c6c1 100644
--- a/tools/test/README
+++ b/tools/test/README
@@ -1,4 +1,3 @@
-
This directory is for standalone test programs. For the FreeBSD
Test Suite, which uses Kyua, please see /usr/src/tests/
@@ -7,6 +6,7 @@ and either tries to break it or measures its performance.
Please make a subdir per program, and add a brief description to this file.
+arc4random Bias test for arc4random_uniform()
auxinfo Return information on page sizes, CPUs, and OS release date.
devrandom Programs to test /dev/*random.
gpioevents Test delivery of gpio pin-change events to userland.
diff --git a/tools/test/arc4random/biastest.c b/tools/test/arc4random/biastest.c
new file mode 100644
index 000000000000..2fd4363b7869
--- /dev/null
+++ b/tools/test/arc4random/biastest.c
@@ -0,0 +1,216 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Robert Clausecker <fuz@FreeBSD.org>
+ *
+ * biastest.c -- bias test for arc4random_uniform().
+ *
+ * The default configuration of this test has an upper bound of
+ * (3/4) * UINT32_MAX, which should give a high amount of bias in
+ * an incorrect implementation. If the range reduction is
+ * implemented correctly, the parameters of the statistic should
+ * closely match the expected values. If not, they'll differ.
+ *
+ * For memory usage reasons, we use an uchar to track the number of
+ * observations per bucket. If the number of tries is much larger
+ * than upper_bound, the buckets likely overflow. This is detected
+ * by the test, but will lead to incorrect results.
+ */
+
+#include <assert.h>
+#include <limits.h>
+#include <math.h>
+#include <signal.h>
+#include <stdatomic.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static void collect_sample(unsigned char *, long long, uint32_t);
+static void analyze_sample(const unsigned char *, long long, uint32_t);
+
+static atomic_bool complete = false;
+static long long tries = 5ULL << 32;
+static atomic_llong tries_done = 0;
+
+static void
+usage(const char *argv0)
+{
+ fprintf(stderr, "usage: %s [-n tries] [-t upper_bound]\n", argv0);
+ exit(EXIT_FAILURE);
+}
+
+int
+main(int argc, char *argv[])
+{
+ uint32_t threshold = 3UL << 30;
+ int ch;
+ unsigned char *sample;
+
+ while (ch = getopt(argc, argv, "n:t:"), ch != EOF)
+ switch (ch) {
+ case 'n':
+ tries = atoll(optarg);
+ break;
+
+ case 't':
+ threshold = (uint32_t)atoll(optarg);
+ break;
+
+ default:
+ usage(argv[0]);
+ }
+
+ if (optind != argc)
+ usage(argv[0]);
+
+ if (threshold == 0) {
+ fprintf(stderr, "threshold must be between 1 and %lu\n", (unsigned long)UINT32_MAX);
+ exit(EXIT_FAILURE);
+ }
+
+ sample = calloc(threshold, 1);
+ if (sample == NULL) {
+ perror("calloc(threshold, 1)");
+ return (EXIT_FAILURE);
+ }
+
+ collect_sample(sample, tries, threshold);
+ analyze_sample(sample, tries, threshold);
+}
+
+static void
+progress(int signo)
+{
+ (void)signo;
+
+ if (!complete) {
+ fprintf(stderr, "\r%10lld of %10lld samples taken (%5.2f%% done)",
+ tries_done, tries, (tries_done * 100.0) / tries);
+
+ signal(SIGALRM, progress);
+ alarm(1);
+ }
+}
+
+static void
+collect_sample(unsigned char *sample, long long tries, uint32_t threshold)
+{
+ long long i;
+ uint32_t x;
+ bool overflowed = false;
+
+ progress(SIGALRM);
+
+ for (i = 0; i < tries; i++) {
+ x = arc4random_uniform(threshold);
+ tries_done++;
+ assert(x < threshold);
+
+ if (sample[x] == UCHAR_MAX) {
+ if (!overflowed) {
+ printf("sample table overflow, results will be incorrect\n");
+ overflowed = true;
+ }
+ } else
+ sample[x]++;
+ }
+
+ progress(SIGALRM);
+ complete = true;
+ fputc('\n', stderr);
+}
+
+static void
+analyze_sample(const unsigned char *sample, long long tries, uint32_t threshold)
+{
+ double discrepancy, average, variance, total;
+ long long histogram[UCHAR_MAX + 1] = { 0 }, sum, n, median;
+ uint32_t i, i_min, i_max;
+ int min, max;
+
+ printf("distribution properties:\n");
+
+ /* find median, average, deviation, smallest, and largest bucket */
+ total = 0.0;
+ for (i = 0; i < threshold; i++) {
+ histogram[sample[i]]++;
+ total += (double)i * sample[i];
+ }
+
+ average = total / tries;
+
+ variance = 0.0;
+ median = threshold;
+ n = 0;
+ i_min = 0;
+ i_max = 0;
+ min = sample[i_min];
+ max = sample[i_max];
+
+ for (i = 0; i < threshold; i++) {
+ discrepancy = i - average;
+ variance += sample[i] * discrepancy * discrepancy;
+
+ n += sample[i];
+ if (median == threshold && n > tries / 2)
+ median = i;
+
+ if (sample[i] < min) {
+ i_min = i;
+ min = sample[i_min];
+ } else if (sample[i] > max) {
+ i_max = i;
+ max = sample[i_max];
+ }
+ }
+
+ variance /= tries;
+ assert(median < threshold);
+
+ printf("\tthreshold: %lu\n", (unsigned long)threshold);
+ printf("\tobservations: %lld\n", tries);
+ printf("\tleast common: %lu (%d observations)\n", (unsigned long)i_min, min);
+ printf("\tmost common: %lu (%d observations)\n", (unsigned long)i_max, max);
+ printf("\tmedian: %lld (expected %lu)\n", median, (unsigned long)threshold / 2);
+ printf("\taverage: %f (expected %f)\n", average, 0.5 * (threshold - 1));
+ printf("\tdeviation: %f (expected %f)\n\n", sqrt(variance),
+ sqrt(((double)threshold * threshold - 1.0) / 12));
+
+ /* build histogram and analyze it */
+ printf("sample properties:\n");
+
+ /* find median, average, and deviation */
+ average = (double)tries / threshold;
+
+ variance = 0.0;
+ for (i = 0; i < UCHAR_MAX; i++) {
+ discrepancy = i - average;
+ variance += histogram[i] * discrepancy * discrepancy;
+ }
+
+ variance /= threshold;
+
+ n = 0;
+ median = UCHAR_MAX + 1;
+ for (i = 0; i <= UCHAR_MAX; i++) {
+ n += histogram[i];
+ if (n >= threshold / 2) {
+ median = i;
+ break;
+ }
+ }
+
+ assert(median <= UCHAR_MAX); /* unreachable */
+
+ printf("\tmedian: %lld\n", median);
+ printf("\taverage: %f\n", average);
+ printf("\tdeviation: %f (expected %f)\n\n", sqrt(variance), sqrt(average * (1.0 - 1.0 / threshold)));
+
+ printf("histogram:\n");
+ for (i = 0; i < 256; i++)
+ if (histogram[i] != 0)
+ printf("\t%3d:\t%lld\n", (int)i, histogram[i]);
+}
diff --git a/tools/test/auxinfo/Makefile b/tools/test/auxinfo/Makefile
index f848a58f1446..e1edd843bd59 100644
--- a/tools/test/auxinfo/Makefile
+++ b/tools/test/auxinfo/Makefile
@@ -1,4 +1,3 @@
-
PROG= auxinfo
MAN=
diff --git a/tools/test/bsnmp/Makefile b/tools/test/bsnmp/Makefile
index 47f03ac48a1f..88bfcfd3c069 100644
--- a/tools/test/bsnmp/Makefile
+++ b/tools/test/bsnmp/Makefile
@@ -1,4 +1,3 @@
-
CONTRIB=${SRCTOP}/contrib/bsnmp
.PATH: ${CONTRIB}/tests
@@ -6,6 +5,7 @@ PROG_CXX=ctest
SRCS= main.cc asn1.cc snmp_parse_server.cc
CFLAGS += -I/${CONTRIB}/lib
CXXFLAGS+= -std=c++2a
+CXXWARNFLAGS += -Wno-missing-variable-declarations
LIBADD= bsnmp
CFLAGS += -DBOGUS_CVE_2019_5610_FIX
diff --git a/tools/test/buf_ring/Makefile b/tools/test/buf_ring/Makefile
new file mode 100644
index 000000000000..a94a1044f04e
--- /dev/null
+++ b/tools/test/buf_ring/Makefile
@@ -0,0 +1,7 @@
+PROG= buf_ring_test
+WARNS= 6
+MAN=
+
+LDFLAGS+=-pthread
+
+.include <bsd.prog.mk>
diff --git a/tools/test/buf_ring/buf_ring_test.c b/tools/test/buf_ring/buf_ring_test.c
new file mode 100644
index 000000000000..6f12aa9dfea1
--- /dev/null
+++ b/tools/test/buf_ring/buf_ring_test.c
@@ -0,0 +1,322 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Arm Ltd.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <sys/types.h>
+#include <sys/errno.h>
+
+#include <machine/atomic.h>
+#include <machine/cpu.h>
+#include <machine/cpufunc.h>
+
+#include <assert.h>
+#include <err.h>
+#include <getopt.h>
+#include <pthread.h>
+#include <stdarg.h>
+#include <stdatomic.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/* #define DEBUG_BUFRING */
+
+#ifdef DEBUG_BUFRING
+static void
+panic(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+ exit(1);
+}
+#endif
+
+static void
+critical_enter(void)
+{
+}
+
+static void
+critical_exit(void)
+{
+}
+
+#include "../../../sys/sys/buf_ring.h"
+
+#define PROD_ITERATIONS 100000000
+
+static enum {
+ CT_UNKNOWN,
+ CT_MC,
+ CT_MC_MT,
+ CT_SC,
+ CT_PEEK,
+ CT_PEEK_CLEAR,
+} cons_type = CT_UNKNOWN;
+
+static unsigned int prod_count;
+
+static struct buf_ring *br;
+static _Atomic bool prod_done = false;
+static _Atomic int prod_done_count = 0;
+static _Atomic size_t total_cons_count = 0;
+
+static uint64_t *mt_seen;
+
+static void *
+producer(void *arg)
+{
+ int id, rv;
+
+ id = (int)(uintptr_t)arg;
+
+ for (size_t i = 0; i < PROD_ITERATIONS;) {
+ rv = buf_ring_enqueue(br, (void *)(i * prod_count + 1 + id));
+ if (rv == 0) {
+ i++;
+ }
+ }
+ if ((unsigned int)atomic_fetch_add(&prod_done_count, 1) ==
+ (prod_count - 1))
+ atomic_store(&prod_done, true);
+
+ return (NULL);
+}
+
+static void *
+consumer(void *arg)
+{
+ void *val;
+ size_t *max_vals;
+ size_t consume_count, curr;
+ int id;
+
+ (void)arg;
+
+ max_vals = calloc(prod_count, sizeof(*max_vals));
+ assert(max_vals != NULL);
+
+ /* Set the initial value to be the expected value */
+ for (unsigned int i = 1; i < prod_count; i++) {
+ max_vals[i] = (int)(i - prod_count);
+ }
+
+ consume_count = 0;
+ while (!atomic_load(&prod_done) || !buf_ring_empty(br)) {
+ switch(cons_type) {
+ case CT_MC:
+ case CT_MC_MT:
+ val = buf_ring_dequeue_mc(br);
+ break;
+ case CT_SC:
+ val = buf_ring_dequeue_sc(br);
+ break;
+ case CT_PEEK:
+ val = buf_ring_peek(br);
+ if (val != NULL)
+ buf_ring_advance_sc(br);
+ break;
+ case CT_PEEK_CLEAR:
+ val = buf_ring_peek_clear_sc(br);
+ if (val != NULL)
+ buf_ring_advance_sc(br);
+ break;
+ case CT_UNKNOWN:
+ __unreachable();
+ }
+ if (val != NULL) {
+ consume_count++;
+ curr = (size_t)(uintptr_t)val;
+ id = curr % prod_count;
+ if (cons_type != CT_MC_MT) {
+ if (curr != max_vals[id] + prod_count)
+ printf("Incorrect val: %zu Expect: %zu "
+ "Difference: %zd\n", curr,
+ max_vals[id] + prod_count,
+ curr - max_vals[id] - prod_count);
+ } else {
+ size_t idx, bit;
+
+ idx = ((size_t)(uintptr_t)val - 1) /
+ (sizeof(*mt_seen) * NBBY);
+ bit = ((size_t)(uintptr_t)val - 1) %
+ (sizeof(*mt_seen) * NBBY);
+
+ if (atomic_testandset_64(&mt_seen[idx], bit))
+ printf("Repeat ID: %zx\n", (size_t)(uintptr_t)val);
+ }
+
+ max_vals[id] = (uintptr_t)val;
+ }
+ }
+
+ atomic_fetch_add(&total_cons_count, consume_count);
+
+ for (unsigned int i = 0; i < prod_count; i++)
+ printf("max[%d] = %zu\n", i, max_vals[i]);
+
+ return (NULL);
+}
+
+static struct option longopts[] = {
+ { "buf-size", required_argument, NULL, 'b' },
+ { "cons-type", required_argument, NULL, 'c' },
+ { "prod-count", required_argument, NULL, 'p' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 },
+};
+
+static void
+usage(void)
+{
+ errx(1, "test --cons-type=<mc|mc-mt|sc|peek|peek-clear> --prod-count=<prod thread count> [--buf-size=<buf_ring size>]");
+}
+
+static uint32_t
+next_power_of_2(uint32_t x)
+{
+ x--;
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+ x++;
+ return (x);
+}
+
+int
+main(int argc, char *argv[])
+{
+ pthread_t *prod;
+ pthread_t cons[2];
+ const char *errstr;
+ uint32_t size;
+ int ch, ret;
+
+ size = 0;
+ while ((ch = getopt_long(argc, argv, "bf:", longopts, NULL)) != -1) {
+ switch(ch) {
+ case 'b':
+ errstr = NULL;
+ size = strtonum(optarg, 1, UINT_MAX, &errstr);
+ if (errstr != NULL) {
+ errx(1, "--bufsize=%s: %s", optarg, errstr);
+ }
+ if (!powerof2(size)) {
+ errx(1, "--bufsize needs a power of 2 size");
+ }
+ break;
+ case 'c':
+ if (strcmp(optarg, "mc") == 0) {
+ cons_type = CT_MC;
+ } else if (strcmp(optarg, "mc-mt") == 0) {
+ cons_type = CT_MC_MT;
+ } else if (strcmp(optarg, "sc") == 0) {
+ cons_type = CT_SC;
+ } else if (strcmp(optarg, "peek") == 0) {
+ cons_type = CT_PEEK;
+ } else if (strcmp(optarg, "peek-clear") == 0) {
+ cons_type = CT_PEEK_CLEAR;
+ } else {
+ errx(1, "Unknown --cons-type: %s", optarg);
+ }
+ break;
+ case 'p':
+ errstr = NULL;
+ prod_count = strtonum(optarg, 1, UINT_MAX, &errstr);
+ if (errstr != NULL) {
+ errx(1, "--prod-count=%s: %s", optarg, errstr);
+ }
+ break;
+ case 'h':
+ default:
+ usage();
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (cons_type == CT_UNKNOWN)
+ errx(1, "No cons-type set");
+
+ if (prod_count == 0)
+ errx(1, "prod-count is not set");
+
+ if (size == 0)
+ size = next_power_of_2(prod_count);
+
+ if (cons_type == CT_MC_MT) {
+ size_t entries;
+
+ entries = (size_t)PROD_ITERATIONS * prod_count;
+ entries = roundup2(entries, sizeof(*mt_seen));
+ mt_seen = calloc(entries / (sizeof(*mt_seen) * NBBY),
+ sizeof(*mt_seen));
+ }
+
+ br = buf_ring_alloc(size);
+
+ ret = pthread_create(&cons[0], NULL, consumer, NULL);
+ assert(ret == 0);
+ if (cons_type == CT_MC_MT) {
+ ret = pthread_create(&cons[1], NULL, consumer, NULL);
+ assert(ret == 0);
+ }
+
+ prod = calloc(prod_count, sizeof(*prod));
+ assert(prod != NULL);
+ for (unsigned i = 0; i < prod_count; i++) {
+ ret = pthread_create(&prod[i], NULL, producer,
+ (void *)(uintptr_t)i);
+ assert(ret == 0);
+ }
+
+ for (unsigned int i = 0; i < prod_count; i++) {
+ ret = pthread_join(prod[i], NULL);
+ assert(ret == 0);
+ }
+ ret = pthread_join(cons[0], NULL);
+ assert(ret == 0);
+ if (cons_type == CT_MC_MT) {
+ ret = pthread_join(cons[1], NULL);
+ assert(ret == 0);
+ }
+
+ printf("Expected: %zu\n", (size_t)PROD_ITERATIONS * prod_count);
+ printf("Received: %zu\n", total_cons_count);
+
+ buf_ring_free(br);
+
+ return (0);
+}
diff --git a/tools/test/buf_ring/run.sh b/tools/test/buf_ring/run.sh
new file mode 100755
index 000000000000..5bd033150362
--- /dev/null
+++ b/tools/test/buf_ring/run.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+run() {
+ kind=$1
+ echo Testing ${kind}
+ buf_ring_test --cons-type=${kind} --prod-count=2 --buf-size=4
+}
+
+OBJDIR=$(make -V.OBJDIR)
+export PATH=${OBJDIR}:${PATH}
+
+run mc
+run sc
+run peek
+run peek-clear
+run mc-mt
diff --git a/tools/test/callout_free/Makefile b/tools/test/callout_free/Makefile
index cc1583aa7a23..6421c072c5b9 100644
--- a/tools/test/callout_free/Makefile
+++ b/tools/test/callout_free/Makefile
@@ -1,4 +1,3 @@
-
KMOD= callout_free
SRCS= callout_free.c
diff --git a/tools/test/gpioevents/Makefile b/tools/test/gpioevents/Makefile
index 4bc4422ae333..8d256534447b 100644
--- a/tools/test/gpioevents/Makefile
+++ b/tools/test/gpioevents/Makefile
@@ -1,4 +1,3 @@
-
PROG= gpioevents
SRCS= gpioevents.c
diff --git a/tools/test/iconv/Makefile b/tools/test/iconv/Makefile
index 5452b20686f9..0d152df97c94 100644
--- a/tools/test/iconv/Makefile
+++ b/tools/test/iconv/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= tablegen refgen posix gnu
ENCODING= ASCII ISO8859-1 ISO8859-2 ISO8859-3 ISO8859-4 ISO8859-5 ISO8859-6 \
diff --git a/tools/test/iconv/gnu/Makefile b/tools/test/iconv/gnu/Makefile
index 3feb4845cee9..a90b2fea6918 100644
--- a/tools/test/iconv/gnu/Makefile
+++ b/tools/test/iconv/gnu/Makefile
@@ -1,4 +1,3 @@
-
PROG= gnu
MAN=
diff --git a/tools/test/iconv/posix/Makefile b/tools/test/iconv/posix/Makefile
index 55c939a32e84..6e15a6fa74e4 100644
--- a/tools/test/iconv/posix/Makefile
+++ b/tools/test/iconv/posix/Makefile
@@ -1,4 +1,3 @@
-
PROG= posix
MAN=
diff --git a/tools/test/iconv/refgen/Makefile b/tools/test/iconv/refgen/Makefile
index 5dc332c9d0e3..6052bd3604f8 100644
--- a/tools/test/iconv/refgen/Makefile
+++ b/tools/test/iconv/refgen/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../tablegen
PROG= refgen
diff --git a/tools/test/iconv/tablegen/Makefile b/tools/test/iconv/tablegen/Makefile
index ab79bacdb9c1..66362a70c12e 100644
--- a/tools/test/iconv/tablegen/Makefile
+++ b/tools/test/iconv/tablegen/Makefile
@@ -1,4 +1,3 @@
-
PROG= tablegen
MAN=
diff --git a/tools/test/net/Makefile b/tools/test/net/Makefile
index bdbc46c5ad57..b07506d9838b 100644
--- a/tools/test/net/Makefile
+++ b/tools/test/net/Makefile
@@ -1,4 +1,3 @@
-
PROGS= listen connect
MAN=
diff --git a/tools/test/netfibs/Makefile b/tools/test/netfibs/Makefile
index 02db4c8d82de..5e870a0d19d2 100644
--- a/tools/test/netfibs/Makefile
+++ b/tools/test/netfibs/Makefile
@@ -1,4 +1,3 @@
-
PROG= reflect
MAN=
diff --git a/tools/test/popss/popss.c b/tools/test/popss/popss.c
index 004ccb29c546..bb66f050beb1 100644
--- a/tools/test/popss/popss.c
+++ b/tools/test/popss/popss.c
@@ -2,7 +2,6 @@
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2018 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Konstantin Belousov <kib@FreeBSD.org>
* under sponsorship from the FreeBSD Foundation.
diff --git a/tools/test/ppsapi/Makefile b/tools/test/ppsapi/Makefile
index 91a017f393ba..056a1fc31d6c 100644
--- a/tools/test/ppsapi/Makefile
+++ b/tools/test/ppsapi/Makefile
@@ -1,4 +1,3 @@
-
PROG= ppsapitest
MAN=
diff --git a/tools/test/ptrace/Makefile b/tools/test/ptrace/Makefile
index b2c9c7a91c37..ebc329a343bb 100644
--- a/tools/test/ptrace/Makefile
+++ b/tools/test/ptrace/Makefile
@@ -1,4 +1,3 @@
-
PROG= scescx
MAN=
diff --git a/tools/test/sort/regression/Makefile b/tools/test/sort/regression/Makefile
index e8f78e2e7f71..81dc44d8ef70 100644
--- a/tools/test/sort/regression/Makefile
+++ b/tools/test/sort/regression/Makefile
@@ -1,4 +1,3 @@
-
TESTFILE= test01 test02 test03 test04 test05 test06 test07 test08 \
test09 test10 test11 test12 test13 test14 test15 test16 test17 \
test_nums
diff --git a/tools/test/stress2/misc/aesni.sh b/tools/test/stress2/misc/aesni.sh
index a5160d82dd57..0fe7390d2fbd 100755
--- a/tools/test/stress2/misc/aesni.sh
+++ b/tools/test/stress2/misc/aesni.sh
@@ -29,6 +29,11 @@
# Simple AESNI(4) test.
+if [ $(uname -m) != "amd64" -a $(uname -m) != "i386" ]; then
+ echo "This test requires an x86 system."
+ exit 0
+fi
+
kldstat -v | grep -qw aesni || { kldload aesni.ko; loaded=1; }
../misc/geli.sh
diff --git a/tools/test/stress2/misc/all.exclude b/tools/test/stress2/misc/all.exclude
index f7b1a9613670..f8a5ea4a91f1 100644
--- a/tools/test/stress2/misc/all.exclude
+++ b/tools/test/stress2/misc/all.exclude
@@ -1,4 +1,4 @@
-# List of tests not to run, unless the '-a' option is used with run.sh
+# List of tests not to run, unless the '-a' option is used with all.sh
# Exclude names must start in column 1
backingstore.sh g_vfs_done():md6a[WRITE(offset=...)]error = 28 20111220
@@ -14,9 +14,8 @@ fsck10.sh Waiting for fix 20230319
fsck11.sh Waiting for fix 20230319
fsck12.sh Waiting for fix 20230319
fsync.sh panic: Journal overflow 20190208
-fuse.sh Memory corruption seen in log file kostik734.txt 20141114
-fuse2.sh Deadlock seen 20121129
-fuse3.sh Deadlock seen 20141120
+fuse.sh https://people.freebsd.org/~pho/stress/log/log0546.txt 20240828
+fuse2.sh https://people.freebsd.org/~pho/stress/log/log0547.txt 20240828
getrandom.sh Known DoS issue 20201107
getrandom2.sh Known DoS issue 20200302
gjournal.sh panic: Journal overflow 20190626
@@ -39,7 +38,7 @@ mlockall2.sh Unrecoverable OOM killing seen 20190203
mlockall6.sh https://people.freebsd.org/~pho/stress/log/log0430.txt 20230403
mlockall7.sh Needs further investigation 20210123
msetdomain.sh May change policy for random threads to domainset_fixed 20210104
-newfs4.sh watchdog fired. newbuf 20190225
+newfs4.sh watchdog fired. newbuf (still seen 20240729) 20190225
nfs10.sh Double fault 20151013
nfs13.sh mount_nfs hangs in mntref 20191007
nfs15lockd.sh panic: Assertion td->td_realucred == td->td_ucred failed ... 20210211
@@ -57,18 +56,22 @@ suj12.sh Waiting for fix 20230319
suj19.sh https://people.freebsd.org/~pho/stress/log/log0378.txt 20221113
suj27.sh https://people.freebsd.org/~pho/stress/log/log0387.txt 20221113
suj36.sh https://people.freebsd.org/~pho/stress/log/log0392.txt 20221114
+swap3.sh https://people.freebsd.org/~pho/stress/log/log0543.txt 20240719
swapoff2.sh swap_pager_force_pagein: read from swap failed 20171223
swapoff3.sh Excessive OOM killing 20220403
swapoff5.sh log0005.txt, known issue 20210111
+swapoff6.sh https://people.freebsd.org/~pho/stress/log/log0540.txt 20240716
systrace.sh WiP 20200227
systrace2.sh WiP 20200227
syzkaller16.sh zonelimit issue 20210722
syzkaller28.sh panic: About to free ctl:0x... so:0x... and its in 1 20201120
syzkaller31.sh panic: Bad tailq NEXT(0xfffffe01a0899430->tqh_last) != NULL 20220420
+syzkaller55.sh https://people.freebsd.org/~pho/stress/log/log0533.txt 20240702
syzkaller59.sh Page fault 20220625
syzkaller65.sh panic: in_pcblookup_hash_locked: invalid local address 20230318
syzkaller66.sh panic: in_pcbconnect: inp is already connected 20230621
syzkaller67.sh panic: ASan: Invalid access, 8-byte read at ... 20230621
+quota6.sh https://people.freebsd.org/~pho/stress/log/log0456.txt 20240707
truss3.sh WiP 20200915
# Test not to run for other reasons:
diff --git a/tools/test/stress2/misc/buildkernel.sh b/tools/test/stress2/misc/buildkernel.sh
index 849a09b81439..e0aa85617f9b 100755
--- a/tools/test/stress2/misc/buildkernel.sh
+++ b/tools/test/stress2/misc/buildkernel.sh
@@ -49,6 +49,7 @@ chmod 0777 $TMPDIR
log=$mntpoint/log
p=$((`sysctl -n hw.ncpu`+ 1))
+[ $p -gt 32 ] && p=32 # Arbitrary cap
p=`jot -r 1 1 $p`
echo "make -j $p buildkernel KERNCONF=GENERIC DESTDIR=$mntpoint" \
"TARGET=amd64 TARGET_ARCH=amd64"
diff --git a/tools/test/stress2/misc/buildworld.sh b/tools/test/stress2/misc/buildworld.sh
index 595b387c90ae..3b362ec7041a 100755
--- a/tools/test/stress2/misc/buildworld.sh
+++ b/tools/test/stress2/misc/buildworld.sh
@@ -55,6 +55,7 @@ mkdir $TMPDIR
chmod 0777 $TMPDIR
p=$((`sysctl -n hw.ncpu`+ 1))
+[ $p -gt 32 ] && p=32 # Arbitrary cap
timeout 20m make -i -j $p buildworld DESTDIR=$mntpoint TARGET=amd64 \
TARGET_ARCH=amd64 > /dev/null
diff --git a/tools/test/stress2/misc/buildworld2.sh b/tools/test/stress2/misc/buildworld2.sh
index 9c1eed97b7ea..3653cb1db5b4 100755
--- a/tools/test/stress2/misc/buildworld2.sh
+++ b/tools/test/stress2/misc/buildworld2.sh
@@ -46,6 +46,7 @@ mkdir $TMPDIR
chmod 0777 $TMPDIR
p=$((`sysctl -n hw.ncpu`+ 1))
+[ $p -gt 32 ] && p=32 # Arbitrary cap
make -j $p buildworld DESTDIR=$mntpoint TARGET=amd64 TARGET_ARCH=amd64 \
> /dev/null &
sleep $((20 * 60))
diff --git a/tools/test/stress2/misc/buildworld3.sh b/tools/test/stress2/misc/buildworld3.sh
index 0c660cae8eae..e3bce2764c0c 100755
--- a/tools/test/stress2/misc/buildworld3.sh
+++ b/tools/test/stress2/misc/buildworld3.sh
@@ -62,6 +62,7 @@ mkdir $TMPDIR $MAKEOBJDIRPREFIX
chmod 0777 $TMPDIR $MAKEOBJDIRPREFIX
p=$((`sysctl -n hw.ncpu`+ 1))
+[ $p -gt 32 ] && p=32 # Arbitrary cap
su $testuser -c \
"make -i -j $p buildworld DESTDIR=$mntpoint TARGET=amd64 \
TARGET_ARCH=amd64 > /dev/null" &
diff --git a/tools/test/stress2/misc/buildworld4.sh b/tools/test/stress2/misc/buildworld4.sh
index 6c15a72a9dcb..d1d162120952 100755
--- a/tools/test/stress2/misc/buildworld4.sh
+++ b/tools/test/stress2/misc/buildworld4.sh
@@ -50,6 +50,7 @@ mkdir $TMPDIR
chmod 0777 $TMPDIR
p=$((`sysctl -n hw.ncpu`+ 1))
+[ $p -gt 16 ] && p=16 # Arbitrary cap
[ `sysctl -n vm.swap_total` -gt 0 ] && p=$((p * 4))
p=`jot -r 1 1 $p`
echo "make -i -j $p buildworld DESTDIR=$mntpoint TARGET=amd64 "\
diff --git a/tools/test/stress2/misc/contigmalloc.sh b/tools/test/stress2/misc/contigmalloc.sh
index 92bf6ff40905..abaa2c3cad53 100755
--- a/tools/test/stress2/misc/contigmalloc.sh
+++ b/tools/test/stress2/misc/contigmalloc.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# contigmalloc(9) / contigfree(9) test scenario.
+# contigmalloc(9) / free(9) test scenario.
# malloc() a random number of buffers with random size and then free them.
# A malloc pattern might look like this:
@@ -116,7 +116,7 @@ test(int argc, char *argv[])
if (p[i] != NULL) {
res = syscall(no, TFREE, &p[i], &size[i]);
#if defined(TEST)
- fprintf(stderr, "contigfree(%lu pages)\n",
+ fprintf(stderr, "free(%lu pages)\n",
size[i] / ps);
#endif
p[i] = NULL;
@@ -197,10 +197,8 @@ cmalloc(struct thread *td, struct cmalloc_args *uap)
switch (uap->a_op) {
case TFREE:
error = copyin(uap->a_ptr, &p, sizeof(p));
- if (error == 0) {
- if (p != NULL)
- contigfree(p, size, M_TEMP);
- }
+ if (error == 0)
+ free(p, M_TEMP);
return (error);
case TALLOC:
diff --git a/tools/test/stress2/misc/contigmalloc2.sh b/tools/test/stress2/misc/contigmalloc2.sh
index e3ec5bf3a358..dd4bbd751fd4 100755
--- a/tools/test/stress2/misc/contigmalloc2.sh
+++ b/tools/test/stress2/misc/contigmalloc2.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# contigmalloc(9) / contigfree(9) test scenario.
+# contigmalloc(9) / free(9) test scenario.
# Regression test for allocations >= 2 GiB.
# "panic: vm_page_insert_after: mpred doesn't precede pindex" seen.
# Fixed by r284207.
@@ -87,8 +87,7 @@ test(int argc, char *argv[])
#endif
res = syscall(no, TFREE, &p, &size);
#if defined(TEST)
- fprintf(stderr, "contigfree(%lu pages)\n",
- size);
+ fprintf(stderr, "free(%lu pages)\n", size);
#endif
}
size /= 2;
@@ -165,10 +164,8 @@ cmalloc(struct thread *td, struct cmalloc_args *uap)
switch (uap->a_op) {
case TFREE:
error = copyin(uap->a_ptr, &p, sizeof(p));
- if (error == 0) {
- if (p != NULL)
- contigfree(p, size, M_TEMP);
- }
+ if (error == 0)
+ free(p, M_TEMP);
return (error);
case TALLOC:
diff --git a/tools/test/stress2/misc/contigmalloc3.sh b/tools/test/stress2/misc/contigmalloc3.sh
index 9baf7c129688..28d5c17e0566 100755
--- a/tools/test/stress2/misc/contigmalloc3.sh
+++ b/tools/test/stress2/misc/contigmalloc3.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# contigmalloc(9) / contigfree(9) test scenario.
+# contigmalloc(9) / free(9) test scenario.
# Test allocation with 1GB
# "panic: Bad link elm 0x6766fbc next->prev != elm" seen:
@@ -91,7 +91,7 @@ test(int argc, char *argv[])
res = syscall(no, TFREE, &cp, &size);
#if defined(TEST)
- fprintf(stderr, "contigfree(%lu pages) %luMB\n",
+ fprintf(stderr, "free(%lu pages) %luMB\n",
size / ps, size / 1024 / 1024);
#endif
}
@@ -166,10 +166,8 @@ cmalloc(struct thread *td, struct cmalloc_args *uap)
switch (uap->a_op) {
case TFREE:
error = copyin(uap->a_ptr, &p, sizeof(p));
- if (error == 0) {
- if (p != NULL)
- contigfree(p, size, M_TEMP);
- }
+ if (error == 0)
+ free(p, M_TEMP);
return (error);
case TALLOC:
diff --git a/tools/test/stress2/misc/creat.sh b/tools/test/stress2/misc/creat.sh
index 45f6b0f87301..1abab774ed7f 100755
--- a/tools/test/stress2/misc/creat.sh
+++ b/tools/test/stress2/misc/creat.sh
@@ -44,6 +44,7 @@ mdconfig -a -t swap -s 100m -u $mdstart
[ $# -eq 1 ] && flags="$@" || flags="-Un"
echo "newfs $flags /dev/md$mdstart"
newfs $flags /dev/md$mdstart > /dev/null
+[ "$flags" = "" ] && tunefs -n disable md$mdstart
mount /dev/md$mdstart $mntpoint
set +e
diff --git a/tools/test/stress2/misc/crossmp.sh b/tools/test/stress2/misc/crossmp.sh
index 0bd07cea2aaf..b61506dcc477 100755
--- a/tools/test/stress2/misc/crossmp.sh
+++ b/tools/test/stress2/misc/crossmp.sh
@@ -74,7 +74,8 @@ else
else
# The test: Parallel mount and unmounts
- for i in `jot 1024`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
m=$1
mount /dev/md${m} ${mntpoint}$m
while mount | grep -q "on ${mntpoint}$m "; do
diff --git a/tools/test/stress2/misc/crossmp2.sh b/tools/test/stress2/misc/crossmp2.sh
index 03cd04e077c1..1f2f1a921e10 100755
--- a/tools/test/stress2/misc/crossmp2.sh
+++ b/tools/test/stress2/misc/crossmp2.sh
@@ -67,7 +67,8 @@ else
else
# The test: Parallel mount and unmounts
- for i in `jot 128`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
m=$1
mount -t nfs -o tcp -o nfsv3 -o retrycnt=3 \
-o intr,soft -o rw $nfs_export ${mntpoint}$m
diff --git a/tools/test/stress2/misc/crossmp3.sh b/tools/test/stress2/misc/crossmp3.sh
index 5eecb936e900..32c625a1e4ad 100755
--- a/tools/test/stress2/misc/crossmp3.sh
+++ b/tools/test/stress2/misc/crossmp3.sh
@@ -41,6 +41,7 @@
CONT=/tmp/crossmp3.continue
if [ $# -eq 0 ]; then
N=`sysctl -n hw.ncpu`
+ [ $N -gt 32 ] && N=32 # Arbitrary cap
usermem=`sysctl -n hw.usermem`
[ `sysctl -n vm.swap_total` -eq 0 ] && usermem=$((usermem / 2))
size=$((usermem / 1024 / 1024 / N))
diff --git a/tools/test/stress2/misc/crossmp4.sh b/tools/test/stress2/misc/crossmp4.sh
index e22f969b72bb..21d22bee69e5 100755
--- a/tools/test/stress2/misc/crossmp4.sh
+++ b/tools/test/stress2/misc/crossmp4.sh
@@ -40,6 +40,7 @@
. ../default.cfg
N=`sysctl -n hw.ncpu`
+[ $N -gt 32 ] && N=32 # Arbitrary cap
usermem=`sysctl -n hw.usermem`
[ `swapinfo | wc -l` -eq 1 ] && usermem=$((usermem/100*80))
size=$((usermem / 1024 / 1024 - 2))
diff --git a/tools/test/stress2/misc/crossmp5.sh b/tools/test/stress2/misc/crossmp5.sh
index b5a8304f2dcb..6e504d9f20ad 100755
--- a/tools/test/stress2/misc/crossmp5.sh
+++ b/tools/test/stress2/misc/crossmp5.sh
@@ -33,6 +33,7 @@
. ../default.cfg
N=`sysctl -n hw.ncpu`
+[ $N -gt 32 ] && N=32 # Arbitrary cap
usermem=`sysctl -n hw.usermem`
[ `swapinfo | wc -l` -eq 1 ] && usermem=$((usermem/100*80))
size=$((usermem / 1024 / 1024 / N))
@@ -74,8 +75,10 @@ else
done
else
# The test: Parallel mount and unmount
+ i=0
m=$1
- for i in `jot 200`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
mount /dev/md${m} ${mntpoint}$m
chmod 777 ${mntpoint}$m
l=`jot -r 1 65535`
@@ -88,6 +91,7 @@ else
echo "-f")
umount $opt ${mntpoint}$m > /dev/null 2>&1
done
+ i=$((i + 1))
done
rm -f /tmp/crossmp.continue
fi
diff --git a/tools/test/stress2/misc/crossmp6.sh b/tools/test/stress2/misc/crossmp6.sh
index 92ca0abcba27..d5abd27f99f1 100755
--- a/tools/test/stress2/misc/crossmp6.sh
+++ b/tools/test/stress2/misc/crossmp6.sh
@@ -72,7 +72,8 @@ if [ $# -eq 0 ]; then
exit 0
else
if [ $1 = find ]; then
- for i in `jot 128`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
find ${mntpoint}* -maxdepth 1 -type f > \
/dev/null 2>&1
(lockf -t 10 ${mntpoint}$2/$0.$$.$i sleep 1 &) > \
diff --git a/tools/test/stress2/misc/crossmp7.sh b/tools/test/stress2/misc/crossmp7.sh
index c2c2752f38e7..f4f12e64c35f 100755
--- a/tools/test/stress2/misc/crossmp7.sh
+++ b/tools/test/stress2/misc/crossmp7.sh
@@ -91,7 +91,8 @@ else
else
# The test: Parallel mount and unmounts
m=$1
- for i in `jot 1024`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
zfs mount stress2_tank/test$m
zfs umount -f stress2_tank/test$m
done 2>/dev/null
diff --git a/tools/test/stress2/misc/crossmp8.sh b/tools/test/stress2/misc/crossmp8.sh
index e877dfaf6d1c..eec5ba9bc7c1 100755
--- a/tools/test/stress2/misc/crossmp8.sh
+++ b/tools/test/stress2/misc/crossmp8.sh
@@ -41,6 +41,7 @@
CONT=/tmp/crossmp8.continue
N=`sysctl -n hw.ncpu`
+[ $N -gt 32 ] && N=32 # Arbitrary cap
usermem=`sysctl -n hw.usermem`
[ `swapinfo | wc -l` -eq 1 ] && usermem=$((usermem/100*80))
size=$((usermem / 1024 / 1024 / N))
diff --git a/tools/test/stress2/misc/datamove6.sh b/tools/test/stress2/misc/datamove6.sh
new file mode 100755
index 000000000000..88bfea425bdc
--- /dev/null
+++ b/tools/test/stress2/misc/datamove6.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Variation of the datamove.sh, using MSDOSFS
+
+# No problems seen
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+here=`pwd`
+prog=$(basename "$0" .sh)
+cd /tmp
+sed '1,/^EOF/d' < $here/datamove.sh > $prog.c
+mycc -o $prog -Wall -Wextra -O2 -g $prog.c
+rm -f $prog.c
+
+set -eu
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 2g -u $mdstart
+newfs_msdos -F 32 -b 8192 /dev/md$mdstart 2> /dev/null
+#mount -t msdosfs /dev/md$mdstart $mntpoint
+mount_msdosfs -m 777 /dev/md$mdstart $mntpoint
+set +e
+
+$here/../testcases/swap/swap -t 5m -i 100 -h &
+for i in `jot 5`; do
+ su $testuser -c "cd $mntpoint; /tmp/$prog"
+done
+mv /tmp/$prog $mntpoint
+for i in `jot 5`; do
+ mkdir -p $mntpoint/datamove.dir.$i
+ cd $mntpoint/datamove.dir.$i
+ $mntpoint/$prog &
+done
+pkill swap
+wait
+while mount | grep -q $mntpoint; do
+ umount -f $mntpoint > /dev/null 2>&1
+done
+mdconfig -d -u $mdstart
+
+exit 0
diff --git a/tools/test/stress2/misc/devfs5.sh b/tools/test/stress2/misc/devfs5.sh
index ab96b37bfa2b..5a72d7db9efb 100755
--- a/tools/test/stress2/misc/devfs5.sh
+++ b/tools/test/stress2/misc/devfs5.sh
@@ -30,7 +30,7 @@
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
# Test scenario for https://reviews.freebsd.org/D20411
-# Add devfs(5) support for VOP_MKDIR(9) and VOP_RMDIR(9)
+# Add devfs(4) support for VOP_MKDIR(9) and VOP_RMDIR(9)
. ../default.cfg
diff --git a/tools/test/stress2/misc/exlock2.sh b/tools/test/stress2/misc/exlock2.sh
index e1760cc52a4d..811fd96f502c 100755
--- a/tools/test/stress2/misc/exlock2.sh
+++ b/tools/test/stress2/misc/exlock2.sh
@@ -150,7 +150,7 @@ out:
usleep(100);
}
if (debug != 0 && e != 0)
- system("ps -Uroot | grep -v grep | grep /tmp/exlock2 | "\
+ system("ps -x | grep -v grep | grep /tmp/exlock2 | "\
"awk '{print $1}' | xargs procstat -f");
share[SYNC] = 0;
diff --git a/tools/test/stress2/misc/ext2fs.sh b/tools/test/stress2/misc/ext2fs.sh
index f4d33116faed..e93da12419b0 100755
--- a/tools/test/stress2/misc/ext2fs.sh
+++ b/tools/test/stress2/misc/ext2fs.sh
@@ -32,7 +32,7 @@
. ../default.cfg
-# Uses mke2fs from sysutils/e2fsprogs
+# Uses mke2fs from filesystems/e2fsprogs
[ -z "`type mke2fs 2>/dev/null`" ] &&
echo "Skipping test as mke2fs not installed" && exit 0
diff --git a/tools/test/stress2/misc/ext2fs2.sh b/tools/test/stress2/misc/ext2fs2.sh
index 748e45a33ffa..07ff5d5058fb 100755
--- a/tools/test/stress2/misc/ext2fs2.sh
+++ b/tools/test/stress2/misc/ext2fs2.sh
@@ -33,7 +33,7 @@
. ../default.cfg
-# Uses mke2fs from sysutils/e2fsprogs
+# Uses mke2fs from filesystems/e2fsprogs
[ -x /usr/local/sbin/mke2fs ] || exit 0
mount | grep "$mntpoint" | grep -q md$mdstart && umount -f $mntpoint
mdconfig -l | grep -q $mdstart && mdconfig -d -u $mdstart
diff --git a/tools/test/stress2/misc/ext2fs3.sh b/tools/test/stress2/misc/ext2fs3.sh
index f33b4cc73547..5c904d218a5f 100755
--- a/tools/test/stress2/misc/ext2fs3.sh
+++ b/tools/test/stress2/misc/ext2fs3.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# ext2fs(5) test scenario with a 1k block size
+# ext2fs(4) test scenario with a 1k block size
# "panic: ext2_reallocblks: alloc mismatch" seen.
# "Fatal trap 12: page fault while in kernel mode" seen.
@@ -35,7 +35,7 @@
. ../default.cfg
-# Uses mke2fs from sysutils/e2fsprogs
+# Uses mke2fs from filesystems/e2fsprogs
[ -z "`type mke2fs 2>/dev/null`" ] &&
echo "Skipping test as mke2fs not installed" && exit 0
diff --git a/tools/test/stress2/misc/ext3fs.sh b/tools/test/stress2/misc/ext3fs.sh
index e5a0d9a09481..210008ce3942 100755
--- a/tools/test/stress2/misc/ext3fs.sh
+++ b/tools/test/stress2/misc/ext3fs.sh
@@ -33,7 +33,7 @@
. ../default.cfg
-# Uses mke2fs from sysutils/e2fsprogs
+# Uses mke2fs from filesystems/e2fsprogs
[ -z "`type mke2fs 2>/dev/null`" ] &&
echo "Skipping test as mke2fs not installed" && exit 0
diff --git a/tools/test/stress2/misc/ext4fs.sh b/tools/test/stress2/misc/ext4fs.sh
index ac5656ed7be0..2e2ac8d77440 100755
--- a/tools/test/stress2/misc/ext4fs.sh
+++ b/tools/test/stress2/misc/ext4fs.sh
@@ -36,7 +36,7 @@
. ../default.cfg
-# Uses mke2fs from sysutils/e2fsprogs
+# Uses mke2fs from filesystems/e2fsprogs
[ -z "`type mke2fs 2>/dev/null`" ] &&
echo "Skipping test as mke2fs not installed" && exit 0
diff --git a/tools/test/stress2/misc/fifo4.sh b/tools/test/stress2/misc/fifo4.sh
index 2a8a149e3105..1578b8786d43 100755
--- a/tools/test/stress2/misc/fifo4.sh
+++ b/tools/test/stress2/misc/fifo4.sh
@@ -27,7 +27,7 @@
# SUCH DAMAGE.
#
-# tmpfs(5) version of fifo2.sh
+# tmpfs(4) version of fifo2.sh
# No problems seen on HEAD.
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/flock_open_close.sh b/tools/test/stress2/misc/flock_open_close.sh
index 01e376319abe..39b894da8a63 100755
--- a/tools/test/stress2/misc/flock_open_close.sh
+++ b/tools/test/stress2/misc/flock_open_close.sh
@@ -87,6 +87,7 @@ EOF
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
+#include <time.h>
#include <unistd.h>
static void
@@ -135,7 +136,8 @@ main(int ac, char **av)
{
struct stat sb;
pid_t pid;
- int e, i, status;
+ time_t start;
+ int e, status;
if (ac < 2)
usage();
@@ -150,7 +152,8 @@ main(int ac, char **av)
if (pid == 0)
child(av[1]);
e = 0;
- for (i = 0; i < 200000; i++) {
+ start = time(NULL);
+ while (time(NULL) - start < 150) {
pid = fork();
if (pid < 0)
err(1, "vfork");
diff --git a/tools/test/stress2/misc/fsck10.sh b/tools/test/stress2/misc/fsck10.sh
index 30479e0dfebb..33ad35f65f11 100755
--- a/tools/test/stress2/misc/fsck10.sh
+++ b/tools/test/stress2/misc/fsck10.sh
@@ -67,6 +67,7 @@ backups=`newfs -N $newfs_flags md$u2 | grep -A1 "super-block backups" | \
tail -1 | sed 's/,//g'`
echo "newfs $newfs_flags -n md$u2"
newfs $newfs_flags -n md$u2 > /dev/null
+[ "$newfs_flags" = "" ] && tunefs -n disable md$u2
set +e
chk() {
diff --git a/tools/test/stress2/misc/fsck11.sh b/tools/test/stress2/misc/fsck11.sh
index 8019cc1f2656..de4cf2536dad 100755
--- a/tools/test/stress2/misc/fsck11.sh
+++ b/tools/test/stress2/misc/fsck11.sh
@@ -71,6 +71,7 @@ backups=`newfs -N $newfs_flags md$u2 | grep -A1 "super-block backups" | \
tail -1 | sed 's/,//g'`
echo "newfs $newfs_flags -n md$u2"
newfs $newfs_flags -n md$u2 > /dev/null
+[ "$newfs_flags" = "" ] && tunefs -n disable md$u2
set +e
chk() {
diff --git a/tools/test/stress2/misc/fsck13.sh b/tools/test/stress2/misc/fsck13.sh
index f279e0bae066..3b8dc64d12b9 100755
--- a/tools/test/stress2/misc/fsck13.sh
+++ b/tools/test/stress2/misc/fsck13.sh
@@ -78,6 +78,7 @@ backups=`newfs -N $flags md$u2 | grep -A1 "super-block backups" | \
tail -1 | sed 's/,//g'`
echo "newfs $flags /dev/md$u2"
newfs $flags md$u2 > /dev/null
+[ "$newfs_flags" = "" ] && tunefs -n disable md$u2
mdconfig -d -u $u2
chk() {
diff --git a/tools/test/stress2/misc/ftruncate3.sh b/tools/test/stress2/misc/ftruncate3.sh
new file mode 100755
index 000000000000..7373ae8d22a8
--- /dev/null
+++ b/tools/test/stress2/misc/ftruncate3.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+# Test scenario from Bug 64816: [nfs] [patch] mmap and/or ftruncate does not work correctly on nfs mounted file systems
+
+. ../default.cfg
+
+set -u
+grep -q $mntpoint /etc/exports ||
+ { echo "$mntpoint missing from /etc/exports"; exit 0; }
+rpcinfo 2>/dev/null | grep -q mountd || exit 0
+
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+void error(char *msg)
+{
+ fprintf(stderr, "Error: %s\nSystem error %d: %s\n", msg, errno, strerror(errno));
+ exit(-1);
+}
+
+#define SZ 1024 // Less than page size
+
+int main(int argn, char *argv[])
+{
+ int fd, s;
+ char buffer[SZ];
+ char *map;
+
+ if (argn!=2)
+ {
+ fprintf(stderr, "Usage:\n %s [filename]\n", argv[0]);
+ _exit(-1);
+ }
+
+ memset(buffer, 0, SZ);
+ s = 0;
+
+ fd=open(argv[1], O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
+ if (fd==-1)
+ error("Could not create file");
+
+ if (write(fd, buffer, SZ)!=SZ)
+ error("Could not write buffer");
+
+ map=mmap(NULL, SZ, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+ if (map==MAP_FAILED)
+ error("Map failed");
+ map[SZ-1]=1;
+
+ if (ftruncate(fd, SZ+1)!=0)
+ error("Could not truncate file");
+
+ if (map[SZ-1]==1)
+ printf("Test passed\n");
+ else {
+ printf("Test failed\n");
+ s = 1;
+ }
+
+ exit(s);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 -g /tmp/$prog.c || exit 1
+
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 1g -u $mdstart
+newfs -n $newfs_flags /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+mp2=${mntpoint}2
+mkdir -p $mp2
+mount | grep -q "on $mp2 " && umount -f $mp2
+mount -t nfs -o retrycnt=3 127.0.0.1:$mntpoint $mp2 || exit 1
+sleep .2
+mount | grep $mntpoint
+
+cd $mp2
+/tmp/$prog $prog.data; s=$?
+ls -ls $mp2/$prog.data
+cd -
+
+umount $mp2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/gbde.sh b/tools/test/stress2/misc/gbde.sh
deleted file mode 100755
index f47d8e9e15bf..000000000000
--- a/tools/test/stress2/misc/gbde.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2012 Peter Holm <pho@FreeBSD.org>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-
-# "panic: bio_driver1 used by the consumer (geom ffs.md5.bde)" seen
-# http://people.freebsd.org/~pho/stress/log/gbde.txt
-
-[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
-
-. ../default.cfg
-
-mdconfig -l | grep -q $mdstart && mdconfig -d -u $mdstart
-mdconfig -a -t swap -s 1g -u $mdstart
-
-gbde init /dev/md$mdstart -P pass-phrase || exit
-gbde attach md$mdstart -p pass-phrase || exit
-
-newfs $newfs_flags /dev/md$mdstart.bde > /dev/null
-mount /dev/md$mdstart.bde $mntpoint
-chmod 777 $mntpoint
-
-export runRUNTIME=20m
-export RUNDIR=$mntpoint/stressX
-
-su $testuser -c 'cd ..; ./run.sh marcus.cfg'
-
-while mount | grep $mntpoint | grep -q bde; do
- umount $mntpoint || sleep 1
-done
-gbde detach md$mdstart
-mdconfig -d -u $mdstart
diff --git a/tools/test/stress2/misc/gnop2.sh b/tools/test/stress2/misc/gnop2.sh
index d38754d58456..0a6b830ce749 100755
--- a/tools/test/stress2/misc/gnop2.sh
+++ b/tools/test/stress2/misc/gnop2.sh
@@ -71,8 +71,10 @@ test() {
gnop status || exit 1
+start=`date +%s`
for i in 1k 2k 4k 8k; do
test $i
+ [ $((`date +%s` - start)) -gt 1200 ] && break
done
[ $notloaded ] && gnop unload
diff --git a/tools/test/stress2/misc/gnop4.sh b/tools/test/stress2/misc/gnop4.sh
index f938dd3b790b..1b4da74266f6 100755
--- a/tools/test/stress2/misc/gnop4.sh
+++ b/tools/test/stress2/misc/gnop4.sh
@@ -34,6 +34,8 @@
# https://people.freebsd.org/~pho/stress/log/kostik1017.txt
# Fixed by r322175
+# Seen with p=513: Threads stuck in "ffsrca"
+
. ../default.cfg
gigs=9
@@ -62,6 +64,7 @@ cd $mntpoint/src
export MAKEOBJDIRPREFIX=$mntpoint/obj
p=$((`sysctl -n hw.ncpu`+ 1))
+[ $p -gt 32 ] && p=32 # Temporary work around
timeout 10m \
make -i -j $p buildworld DESTDIR=$mntpoint TARGET=amd64 \
TARGET_ARCH=amd64 > /dev/null
diff --git a/tools/test/stress2/misc/growfs3.sh b/tools/test/stress2/misc/growfs3.sh
new file mode 100755
index 000000000000..33e8327cdbbc
--- /dev/null
+++ b/tools/test/stress2/misc/growfs3.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 32g -u $mdstart
+/sbin/gpart create -s GPT md$mdstart > /dev/null
+/sbin/gpart add -t freebsd-ufs -s 2g -a 4k md$mdstart > /dev/null
+set +e
+
+newfs_flags=$(echo "-O1" "-O2" "-U" "-j" | awk -v N=`jot -r 1 1 4` '{print $N}')
+echo "newfs $newfs_flags md${mdstart}p1"
+newfs $newfs_flags md${mdstart}p1 > /dev/null
+[ "$newfs_flags" = "-O2" ] &&
+ tunefs -n disable md${mdstart}p1 > /dev/null 2>&1
+mount /dev/md${mdstart}p1 $mntpoint
+cp -r /usr/include $mntpoint/inc1
+umount $mntpoint
+
+gpart resize -i 1 -s 31g -a 4k md$mdstart
+growfs -y md${mdstart}p1 > /dev/null
+
+mount /dev/md${mdstart}p1 $mntpoint
+cp -r /usr/include $mntpoint/inc2
+umount $mntpoint
+fsck -fy /dev/md${mdstart}p1 > $log 2>&1; s=$?
+grep -q "WAS MODIFIED" $log && { cat $log; s=1; }
+rm -f $log
+mdconfig -d -u $mdstart
+exit $s
diff --git a/tools/test/stress2/misc/kcmp.sh b/tools/test/stress2/misc/kcmp.sh
new file mode 100755
index 000000000000..7c571dd8e8a1
--- /dev/null
+++ b/tools/test/stress2/misc/kcmp.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Seen:
+# UID PID PPID C PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND
+# 0 3730 3668 11 20 0 13596 2904 exithold DE+ 0 1:59.68 ./kcmp
+
+# Fixed by: 5b3e5c6ce3e5
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+static void *
+t1(void *data __unused)
+{
+ for (;;)
+ pause();
+
+ return (NULL);
+}
+
+int
+main(void)
+{
+ pid_t p1, p2;
+ pthread_t tid[2];
+ time_t start;
+ uintptr_t idx1, idx2;
+ int r;
+
+ if ((r = pthread_create(&tid[0], NULL, t1, NULL)) != 0)
+ errc(1, r, "pthread_create");
+ if ((r = pthread_create(&tid[1], NULL, t1, NULL)) != 0)
+ errc(1, r, "pthread_create");
+
+ start = time(NULL);
+ while (time(NULL) - start < 60) {
+ idx1 = idx2 = 0;
+ p1 = arc4random() % 1000000;
+ p2 = arc4random() % 1000000;
+ kcmp(p1, p2, KCMP_VM, idx1, idx2);
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+/tmp/$prog
+
+rm /tmp/$prog.c /tmp/$prog
+exit 0
diff --git a/tools/test/stress2/misc/marcus8.sh b/tools/test/stress2/misc/marcus8.sh
new file mode 100755
index 000000000000..0c6110c8ec4c
--- /dev/null
+++ b/tools/test/stress2/misc/marcus8.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+# Run with marcus.cfg on a 5g swap backed MD with UFS non SU fs.
+# Check for non empty file system after test.
+
+. ../default.cfg
+
+set -u
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 4g -u $mdstart
+newfs_flags="" # With SU this test runs out of disk space
+newfs $newfs_flags md$mdstart > /dev/null
+tunefs -n disable md$mdstart # Remove the default SU flag
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+
+export runRUNTIME=5m
+export CTRLDIR=$mntpoint/stressX.control
+export RUNDIR=$mntpoint/stressX
+
+su $testuser -c 'cd ..; ./run.sh marcus.cfg'
+
+nb=`find $RUNDIR | wc -l`
+[ $nb -gt 1 ] && { find $RUNDIR -ls | head -12; s=1; } || s=0
+n=0
+while mount | grep $mntpoint | grep -q /dev/md; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
+done
+checkfs /dev/md$mdstart; s2=$?
+mdconfig -d -u $mdstart
+exit $((s + s2))
diff --git a/tools/test/stress2/misc/mkdir.sh b/tools/test/stress2/misc/mkdir.sh
index 39cc828f0303..734b8994ad4e 100755
--- a/tools/test/stress2/misc/mkdir.sh
+++ b/tools/test/stress2/misc/mkdir.sh
@@ -44,6 +44,7 @@ mdconfig -a -t swap -s 100m -u $mdstart
[ $# -eq 1 ] && flags="$@" || flags="-Un"
echo "newfs $flags /dev/md$mdstart"
newfs $flags /dev/md$mdstart > /dev/null
+[ "$flags" = "" ] && tunefs -n disable md$mdstart
mount /dev/md$mdstart $mntpoint
set +e
diff --git a/tools/test/stress2/misc/mkfifo5.sh b/tools/test/stress2/misc/mkfifo5.sh
index c0355cef2db0..96d30e5fe024 100755
--- a/tools/test/stress2/misc/mkfifo5.sh
+++ b/tools/test/stress2/misc/mkfifo5.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# mkfifo(2), select(2) with tmpfs(5) scenario.
+# mkfifo(2), select(2) with tmpfs(4) scenario.
. ../default.cfg
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/mkfifo6.sh b/tools/test/stress2/misc/mkfifo6.sh
index 5647bf9493d6..13a62b5e0286 100755
--- a/tools/test/stress2/misc/mkfifo6.sh
+++ b/tools/test/stress2/misc/mkfifo6.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# mkfifo(2), select(2) with tmpfs(5) scenario.
+# mkfifo(2), select(2) with tmpfs(4) scenario.
. ../default.cfg
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/mkfifo7.sh b/tools/test/stress2/misc/mkfifo7.sh
index b17e84536bed..c1af3374526e 100755
--- a/tools/test/stress2/misc/mkfifo7.sh
+++ b/tools/test/stress2/misc/mkfifo7.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# mkfifo(2), poll(2) with tmpfs(5) scenario.
+# mkfifo(2), poll(2) with tmpfs(4) scenario.
. ../default.cfg
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/mlockall4.sh b/tools/test/stress2/misc/mlockall4.sh
index 778256fa8976..66ae05fa4ae1 100755
--- a/tools/test/stress2/misc/mlockall4.sh
+++ b/tools/test/stress2/misc/mlockall4.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# mlockall(2) / nullfs(5) scenario causes:
+# mlockall(2) / nullfs(4) scenario causes:
# http://people.freebsd.org/~pho/stress/log/kostik619.txt
# kern/182661, fixed in r256211.
diff --git a/tools/test/stress2/misc/mmap40.sh b/tools/test/stress2/misc/mmap40.sh
index 7f4d07885e05..2314596e2f5d 100755
--- a/tools/test/stress2/misc/mmap40.sh
+++ b/tools/test/stress2/misc/mmap40.sh
@@ -53,13 +53,14 @@ mount /dev/md$mdstart $mntpoint
set +e
u1=`swapinfo | tail -1 | awk '{print $3}'`
-(nice $odir/../testcases/swap/swap -t 10m -i 30 -h -l 100) &
-while [ $((`swapinfo | tail -1 | awk '{print $3}'` - $u1)) -le 100 ]; do
+(nice $odir/../testcases/swap/swap -t 10m -i 30 -h -l 100) > /dev/null &
+for i in `jot 120`; do
+ u2=`swapinfo | tail -1 | awk '{print $3}'`
+ [ $u2 -lt $u1 ] && u1=$u2
+ [ $((u2 - $u1)) -gt 100 ] && break
sleep 1
done
-
-$dir/mmap40
-s=0
+/usr/bin/timeout 10m $dir/mmap40; s=$?
while pkill swap; do :; done
wait
[ -f mmap40.core -a $s -eq 0 ] &&
diff --git a/tools/test/stress2/misc/mmap44.sh b/tools/test/stress2/misc/mmap44.sh
index 5865491e1dea..f5999ac62536 100755
--- a/tools/test/stress2/misc/mmap44.sh
+++ b/tools/test/stress2/misc/mmap44.sh
@@ -219,7 +219,7 @@ mount /dev/md$mdstart $mntpoint
mp2=${mntpoint}2
mkdir -p $mp2
mount | grep -q "on $mp2 " && umount -f $mp2
-mount -t nfs 127.0.0.1:$mntpoint $mp2; s=$?
+mount -t nfs -o retrycnt=3 127.0.0.1:$mntpoint $mp2 || exit 1
sleep .2
here=`pwd`
diff --git a/tools/test/stress2/misc/mmap45.sh b/tools/test/stress2/misc/mmap45.sh
new file mode 100755
index 000000000000..59450b41bb5e
--- /dev/null
+++ b/tools/test/stress2/misc/mmap45.sh
@@ -0,0 +1,230 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Demonstrate issue described in:
+# [Bug 276002] nfscl: data corruption using both copy_file_range and mmap'd I/O
+
+# Issue seen:
+#
+# 8994c8994
+# < 0431020 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
+# ---
+# > 0431020 10 11 ee 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
+# 256 -rw------- 1 root wheel 262144 Feb 28 19:44 file
+# 256 -rw------- 1 root wheel 262144 Feb 28 19:43 file.orig
+# 19:44:34, elapsed 0 days, 00:13.59
+# Failed with exit code 2 after 13 loops.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+serial=/tmp/$prog.serial
+grep -q $mntpoint /etc/exports ||
+ { echo "$mntpoint missing from /etc/exports"; exit 0; }
+rpcinfo 2>/dev/null | grep -q mountd || exit 0
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static off_t siz;
+static pthread_mutex_t write_mutex;
+static int fd, go;
+static char *cp;
+
+static void *
+memread(void *arg __unused)
+{
+ int i;
+ char c;
+
+ while (go == 1) {
+ i = arc4random() % siz;
+ c = cp[i];
+ if (c != 0x77) /* No unused vars here */
+ usleep(arc4random() % 400);
+ }
+ return (0);
+}
+
+static void *
+memwrite(void *arg __unused)
+{
+ int i;
+ char c;
+
+ while (go == 1) {
+ i = arc4random() % siz;
+ pthread_mutex_lock(&write_mutex);
+ c = cp[i];
+ cp[i] = 0xee; /* This value seems to linger with NFS */
+ cp[i] = c;
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 400);
+ }
+ return (0);
+}
+
+static void *
+wr(void *arg __unused)
+{
+ off_t pos;
+ int r, s;
+ char buf[1024];
+
+ while (go == 1) {
+ s = arc4random() % sizeof(buf) + 1;
+ pos = arc4random() % (siz - s);
+ pthread_mutex_lock(&write_mutex);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if ((r = read(fd, buf, s)) != s) {
+ fprintf(stderr, "r = %d, s = %d, pos = %d\n", r, s, (int)pos);
+ err(1, "read():2");
+ }
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if (write(fd, buf, s) != s)
+ err(1, "write()");
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 400);
+ }
+ return (0);
+}
+
+static void *
+s1(void *arg __unused)
+{
+
+ while (go == 1) {
+ if (fdatasync(fd) == -1)
+ err(1, "fdatasync()");
+ usleep(arc4random() % 1000);
+ }
+ return (0);
+}
+
+static void *
+s2(void *arg __unused)
+{
+
+ while (go == 1) {
+ if (fsync(fd) == -1)
+ err(1, "fdatasync()");
+ usleep(arc4random() % 1000);
+ }
+ return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ pthread_t tp[10];
+ int e, i;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <file>\n", argv[0]);
+ exit(1);
+ }
+ if ((fd = open(argv[1], O_RDWR)) == -1)
+ err(1, "open(%s)", argv[1]);
+ if (fstat(fd, &st) == -1)
+ err(1, "stat(%s)", argv[1]);
+ siz = st.st_size;
+ cp = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ if (cp == MAP_FAILED)
+ err(1, "mmap()");
+
+ go = 1;
+ pthread_mutex_init(&write_mutex, NULL);
+ if ((e = pthread_create(&tp[0], NULL, memwrite, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[1], NULL, memwrite, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[2], NULL, memread, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[3], NULL, memread, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[4], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[5], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[6], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[7], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[8], NULL, s1, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[9], NULL, s2, NULL)) != 0)
+ errc(1, e, "pthread_create");
+
+ sleep(60);
+ go = 0;
+ for (i = 0; i < (int)(sizeof(tp) / sizeof(tp[0])); i++)
+ pthread_join(tp[i], NULL);
+ if (munmap(cp, siz) == -1)
+ err(1, "munmap()");
+ close(fd);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+mycc -o $serial -Wall -Wextra -O2 ../tools/serial.c || exit 1
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 5g -u $mdstart
+newfs -n $newfs_flags /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+mp2=${mntpoint}2
+mkdir -p $mp2
+mount | grep -q "on $mp2 " && umount -f $mp2
+mount -t nfs -o retrycnt=3 127.0.0.1:$mntpoint $mp2 || exit 1
+sleep .2
+
+here=`pwd`
+cd $mp2
+$here/../testcases/swap/swap -t 5m -i 20 > /dev/null &
+sleep 2
+
+size=262144
+$serial file $size
+cp file file.orig
+
+s=0
+/tmp/$prog file || s=1
+
+while pgrep -q swap; do pkill swap; done
+wait
+if ! cmp -s file.orig file; then
+ od -t x1 file.orig > /var/tmp/$prog.file1
+ od -t x1 file > /var/tmp/$prog.file2
+ diff /var/tmp/$prog.file1 /var/tmp/$prog.file2 > $log
+ head -20 $log
+ rm /var/tmp/$prog.file1 /var/tmp/$prog.file2
+ ls -ls file.orig file
+ s=2
+fi
+
+cd $here
+umount $mp2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f $serial /tmp/$prog /tmp/$prog.c $log
+exit $s
diff --git a/tools/test/stress2/misc/mmap46.sh b/tools/test/stress2/misc/mmap46.sh
new file mode 100755
index 000000000000..a739f36f3f9e
--- /dev/null
+++ b/tools/test/stress2/misc/mmap46.sh
@@ -0,0 +1,233 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Demonstrate issue described in:
+# [Bug 276002] nfscl: data corruption using both copy_file_range and mmap'd I/O
+
+# Issue seen:
+#
+# 8994c8994
+# < 0431020 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
+# ---
+# > 0431020 10 11 ee 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
+# 256 -rw------- 1 root wheel 262144 Feb 28 19:44 file
+# 256 -rw------- 1 root wheel 262144 Feb 28 19:43 file.orig
+# 19:44:34, elapsed 0 days, 00:13.59
+# Failed with exit code 2 after 13 loops.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+serial=/tmp/$prog.serial
+grep -q $mntpoint /etc/exports ||
+ { echo "$mntpoint missing from /etc/exports"; exit 0; }
+rpcinfo 2>/dev/null | grep -q mountd || exit 0
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static off_t siz;
+static pthread_mutex_t write_mutex;
+static int fd, go;
+static char *cp;
+
+static void *
+memread(void *arg __unused)
+{
+ int i;
+ char c;
+
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ i = arc4random() % siz;
+ c = cp[i];
+ if (c != 0x77) /* No unused vars here */
+ usleep(arc4random() % 200);
+ }
+ return (0);
+}
+
+static void *
+memwrite(void *arg __unused)
+{
+ int i;
+ char c;
+
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ i = arc4random() % siz;
+ pthread_mutex_lock(&write_mutex);
+ c = cp[i];
+ cp[i] = 0xee; /* This value seems to linger with NFS */
+ cp[i] = c;
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 200);
+ }
+ return (0);
+}
+
+static void *
+wr(void *arg __unused)
+{
+ off_t pos;
+ int r, s;
+ char buf[1024];
+
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ s = arc4random() % sizeof(buf) + 1;
+ pos = arc4random() % (siz - s);
+ pthread_mutex_lock(&write_mutex);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if ((r = read(fd, buf, s)) != s) {
+ fprintf(stderr, "r = %d, s = %d, pos = %d\n", r, s, (int)pos);
+ err(1, "read():2");
+ }
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if (write(fd, buf, s) != s)
+ err(1, "write()");
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 200);
+ }
+ return (0);
+}
+
+static void *
+tr(void *arg __unused)
+{
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ if (ftruncate(fd, siz) == -1) /* No size change */
+ err(1, "truncate)");
+ usleep(arc4random() % 1000);
+ }
+ return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ pthread_t tp[13];
+ int e, i;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <file>\n", argv[0]);
+ exit(1);
+ }
+ if ((fd = open(argv[1], O_RDWR)) == -1)
+ err(1, "open(%s)", argv[1]);
+ if (fstat(fd, &st) == -1)
+ err(1, "stat(%s)", argv[1]);
+ siz = st.st_size;
+ cp = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ if (cp == MAP_FAILED)
+ err(1, "mmap()");
+
+ go = -1;
+ pthread_mutex_init(&write_mutex, NULL);
+ if ((e = pthread_create(&tp[0], NULL, memwrite, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[1], NULL, memwrite, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[2], NULL, memread, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[3], NULL, memread, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[4], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[5], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[6], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[7], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[8], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[9], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[10], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[11], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[12], NULL, tr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+
+ sleep(1);
+ go = 1;
+ sleep(60);
+ go = 0;
+ for (i = 0; i < (int)(sizeof(tp) / sizeof(tp[0])); i++)
+ pthread_join(tp[i], NULL);
+ if (munmap(cp, siz) == -1)
+ err(1, "munmap()");
+ close(fd);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+mycc -o $serial -Wall -Wextra -O2 ../tools/serial.c || exit 1
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 5g -u $mdstart
+newfs -n $newfs_flags /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+mp2=${mntpoint}2
+mkdir -p $mp2
+mount | grep -q "on $mp2 " && umount -f $mp2
+mount -t nfs -o retrycnt=3 127.0.0.1:$mntpoint $mp2 || exit 1
+sleep .2
+
+here=`pwd`
+cd $mp2
+$here/../testcases/swap/swap -t 5m -i 20 > /dev/null &
+sleep 2
+
+size=262144
+$serial file $size
+cp file file.orig
+
+s=0
+/tmp/$prog file || s=1
+
+while pgrep -q swap; do pkill swap; done
+wait
+if ! cmp -s file.orig file; then
+ od -t x1 file.orig > /var/tmp/$prog.file1
+ od -t x1 file > /var/tmp/$prog.file2
+ diff /var/tmp/$prog.file1 /var/tmp/$prog.file2 > $log
+ head -20 $log
+ rm /var/tmp/$prog.file1 /var/tmp/$prog.file2
+ ls -ls file.orig file
+ s=2
+fi
+
+cd $here
+umount $mp2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f $serial /tmp/$prog /tmp/$prog.c $log
+exit $s
diff --git a/tools/test/stress2/misc/mmap47.sh b/tools/test/stress2/misc/mmap47.sh
new file mode 100755
index 000000000000..43778a193202
--- /dev/null
+++ b/tools/test/stress2/misc/mmap47.sh
@@ -0,0 +1,237 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Demonstrate issue described in:
+# [Bug 276002] nfscl: data corruption using both copy_file_range and mmap'd I/O
+
+# This version only uses mapped read/write, read(2)/write(2) and ftruncate(2)
+
+# Issue seen:
+
+# 19:50:53 Start test of mmap47.sh
+# 19:51:56, elapsed 0 days, 00:01.03
+# 19:53:01, elapsed 0 days, 00:02.08
+# 19:54:06, elapsed 0 days, 00:03.13
+# 19:55:40, elapsed 0 days, 00:04.47
+# 617c617
+# < 0023200 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f
+# ---
+# > 0023200 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e ee
+# 256 -rw------- 1 root wheel 262144 Mar 1 19:56 file
+# 256 -rw------- 1 root wheel 262144 Mar 1 19:55 file.orig
+# 19:56:44, elapsed 0 days, 00:05.51
+# Failed with exit code 2 after 5 loops of mmap47.sh.
+# 19:56 /usr/src/tools/test/stress2/misc $
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+serial=/tmp/$prog.serial
+grep -q $mntpoint /etc/exports ||
+ { echo "$mntpoint missing from /etc/exports"; exit 0; }
+rpcinfo 2>/dev/null | grep -q mountd || exit 0
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static off_t siz;
+static pthread_mutex_t write_mutex;
+static int fd, go;
+static char *cp;
+
+static void *
+memread(void *arg __unused)
+{
+ int i;
+ char c;
+
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ i = arc4random() % siz;
+ c = cp[i];
+ if (c != 0x77) /* No unused vars here */
+ usleep(arc4random() % 200);
+ }
+ return (0);
+}
+
+static void *
+memwrite(void *arg __unused)
+{
+ int i;
+ char c;
+
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ i = arc4random() % siz;
+ pthread_mutex_lock(&write_mutex);
+ c = cp[i];
+ cp[i] = 0xee; /* This value seems to linger with NFS */
+ cp[i] = c;
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 200);
+ }
+ return (0);
+}
+
+static void *
+wr(void *arg __unused)
+{
+ off_t pos;
+ int r, s;
+ char buf[1024];
+
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ s = arc4random() % sizeof(buf) + 1;
+ pos = arc4random() % (siz - s);
+ pthread_mutex_lock(&write_mutex);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if ((r = read(fd, buf, s)) != s) {
+ fprintf(stderr, "r = %d, s = %d, pos = %d\n", r, s, (int)pos);
+ err(1, "read():2");
+ }
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if (write(fd, buf, s) != s)
+ err(1, "write()");
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 200);
+ }
+ return (0);
+}
+
+/* Both ftruncate() and fdatasync() triggers the problem */
+
+static void *
+tr(void *arg __unused)
+{
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+#if 0
+ if (ftruncate(fd, siz) == -1) /* No size change */
+ err(1, "truncate)");
+#else
+ if (fdatasync(fd) == -1)
+ err(1, "fdatasync()");
+#endif
+ usleep(arc4random() % 1000);
+ }
+ return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ pthread_t tp[31];
+ int e, i, idx;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <file>\n", argv[0]);
+ exit(1);
+ }
+ if ((fd = open(argv[1], O_RDWR)) == -1)
+ err(1, "open(%s)", argv[1]);
+ if (fstat(fd, &st) == -1)
+ err(1, "stat(%s)", argv[1]);
+ siz = st.st_size;
+ cp = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ if (cp == MAP_FAILED)
+ err(1, "mmap()");
+
+ go = -1;
+ pthread_mutex_init(&write_mutex, NULL);
+ idx = 0;
+ for (i = 0; i < (int)(arc4random() % 10 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, memread, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ for (i = 0; i < (int)(arc4random() % 10 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, memwrite, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ for (i = 0; i < (int)(arc4random() % 10 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ if ((e = pthread_create(&tp[idx++], NULL, tr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+
+ sleep(1);
+ go = 1;
+ sleep(60);
+ go = 0;
+ for (i = 0; i < idx; i++)
+ pthread_join(tp[i], NULL);
+ if (munmap(cp, siz) == -1)
+ err(1, "munmap()");
+ close(fd);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+mycc -o $serial -Wall -Wextra -O2 ../tools/serial.c || exit 1
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 5g -u $mdstart
+newfs -n $newfs_flags /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+mp2=${mntpoint}2
+mkdir -p $mp2
+mount | grep -q "on $mp2 " && umount -f $mp2
+mount -t nfs -o retrycnt=3 127.0.0.1:$mntpoint $mp2 || exit 1
+sleep .2
+
+here=`pwd`
+cd $mp2
+$here/../testcases/swap/swap -t 5m -i 20 > /dev/null &
+sleep 2
+
+size=262144
+$serial file $size
+cp file file.orig
+
+s=0
+/tmp/$prog file || s=1
+
+while pgrep -q swap; do pkill swap; done
+wait
+if ! cmp -s file.orig file; then
+ od -t x1 file.orig > /var/tmp/$prog.file1
+ od -t x1 file > /var/tmp/$prog.file2
+ diff /var/tmp/$prog.file1 /var/tmp/$prog.file2 > $log
+ head -20 $log
+ rm /var/tmp/$prog.file1 /var/tmp/$prog.file2
+ ls -ls file.orig file
+ s=2
+fi
+
+cd $here
+umount $mp2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f $serial /tmp/$prog /tmp/$prog.c $log
+exit $s
diff --git a/tools/test/stress2/misc/mmap48.sh b/tools/test/stress2/misc/mmap48.sh
new file mode 100755
index 000000000000..35da78a98c26
--- /dev/null
+++ b/tools/test/stress2/misc/mmap48.sh
@@ -0,0 +1,289 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Demonstrate issue described in:
+# [Bug 276002] nfscl: data corruption using both copy_file_range and mmap'd I/O
+
+# This version only uses mapped read/write, read(2)/write(2), fstat(2) and ftruncate(2)
+
+# Issue seen:
+# 20241003 10:04:24 all: mmap48.sh
+# 5257c5257
+# < 0244200 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f
+# ---
+# > 0244200 80 81 82 83 84 85 86 87 88 ee 8a 8b 8c 8d 8e 8f
+# 256 -rw------- 1 root wheel 262144 Oct 3 10:05 file
+# 256 -rw------- 1 root wheel 262144 Oct 3 10:04 file.orig
+# FAIL mmap48.sh exit code 2
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+serial=/tmp/$prog.serial
+grep -q $mntpoint /etc/exports ||
+ { echo "$mntpoint missing from /etc/exports"; exit 0; }
+rpcinfo 2>/dev/null | grep -q mountd || exit 0
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+#include <assert.h>
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <pthread_np.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static off_t siz;
+static pthread_mutex_t write_mutex;
+static int fd, go;
+static char *cp;
+
+#define THREADS 100
+
+static void *
+memread(void *arg __unused)
+{
+ int i;
+ char c;
+
+ if (arc4random() % 100 < 10)
+ return (0);
+ pthread_set_name_np(pthread_self(), __func__);
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ i = arc4random() % siz;
+ c = cp[i];
+ if (c != 0x77) /* No unused vars here */
+ usleep(arc4random() % 400);
+ }
+ return (NULL);
+}
+
+static void *
+memwrite(void *arg __unused)
+{
+ int i;
+ char c;
+
+ if (arc4random() % 100 < 10)
+ return (0);
+ pthread_set_name_np(pthread_self(), __func__);
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ i = arc4random() % siz;
+ pthread_mutex_lock(&write_mutex);
+ c = cp[i];
+ cp[i] = 0xee; /* This value seems to linger with NFS */
+ cp[i] = c;
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 400);
+ }
+ return (NULL);
+}
+
+static void *
+wr(void *arg __unused)
+{
+ off_t pos;
+ int r, s;
+ char buf[1024];
+
+ if (arc4random() % 100 < 10)
+ return (0);
+ pthread_set_name_np(pthread_self(), __func__);
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ s = arc4random() % sizeof(buf) + 1;
+ pos = arc4random() % (siz - s);
+ pthread_mutex_lock(&write_mutex);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if ((r = read(fd, buf, s)) != s) {
+ fprintf(stderr, "r = %d, s = %d, pos = %d\n", r, s, (int)pos);
+ err(1, "read():2");
+ }
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek(%d)", (int)pos);
+ if (write(fd, buf, s) != s)
+ err(1, "write()");
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 200);
+ }
+ return (NULL);
+}
+
+/* Both ftruncate() and fdatasync() triggers the problem */
+
+static void *
+sy(void *arg __unused)
+{
+
+ if (arc4random() % 100 < 10)
+ return (0);
+ pthread_set_name_np(pthread_self(), __func__);
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ if (fdatasync(fd) == -1)
+ err(1, "fdatasync()");
+ usleep(arc4random() % 1000);
+ }
+ return (NULL);
+}
+
+static void *
+tr(void *arg __unused)
+{
+
+ if (arc4random() % 100 < 10)
+ return (0);
+ pthread_set_name_np(pthread_self(), __func__);
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ if (ftruncate(fd, siz) == -1) /* No size change */
+ err(1, "truncate)");
+ usleep(arc4random() % 1000);
+ }
+ return (NULL);
+}
+
+static void *
+fs(void *arg __unused)
+{
+ struct stat st;
+
+ if (arc4random() % 100 < 10)
+ return (0);
+ pthread_set_name_np(pthread_self(), __func__);
+ while (go == -1)
+ usleep(50);
+ while (go == 1) {
+ if (fstat(fd, &st) == -1)
+ err(1, "stat()");
+ usleep(arc4random() % 1000);
+ }
+ return (NULL);
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ pthread_t tp[THREADS];
+ int e, i, idx;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <file>\n", argv[0]);
+ exit(1);
+ }
+ if ((fd = open(argv[1], O_RDWR)) == -1)
+ err(1, "open(%s)", argv[1]);
+ if (fstat(fd, &st) == -1)
+ err(1, "stat(%s)", argv[1]);
+ siz = st.st_size;
+ cp = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ if (cp == MAP_FAILED)
+ err(1, "mmap()");
+
+ go = -1;
+ pthread_mutex_init(&write_mutex, NULL);
+ idx = 0;
+ for (i = 0; i < (int)(arc4random() % 3 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, memread, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ for (i = 0; i < (int)(arc4random() % 3 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, memwrite, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ for (i = 0; i < (int)(arc4random() % 3 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ for (i = 0; i < (int)(arc4random() % 3 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, fs, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ for (i = 0; i < (int)(arc4random() % 3 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, tr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ for (i = 0; i < (int)(arc4random() % 3 + 1); i++) {
+ if ((e = pthread_create(&tp[idx++], NULL, sy, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ }
+ assert(idx <= THREADS);
+
+ sleep(1);
+ go = 1;
+ sleep(60);
+ go = 0;
+ for (i = 0; i < idx; i++)
+ pthread_join(tp[i], NULL);
+ if (munmap(cp, siz) == -1)
+ err(1, "munmap()");
+ close(fd);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+mycc -o $serial -Wall -Wextra -O2 ../tools/serial.c || exit 1
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 5g -u $mdstart
+newfs -n $newfs_flags /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+mp2=${mntpoint}2
+mkdir -p $mp2
+mount | grep -q "on $mp2 " && umount -f $mp2
+mount -t nfs -o retrycnt=3 127.0.0.1:$mntpoint $mp2 || exit 1
+sleep .2
+
+here=`pwd`
+cd $mp2
+#$here/../testcases/swap/swap -t 5m -i 20 > /dev/null &
+sleep 2
+
+size=262144
+$serial file $size
+cp file file.orig
+
+s=0
+#ktrace -id -f $here/ktrace.out /tmp/$prog file || s=1
+/tmp/$prog file || s=1
+
+while pgrep -q swap; do pkill swap; done
+wait
+if ! cmp -s file.orig file; then
+ od -t x1 file.orig > /var/tmp/$prog.file1
+ od -t x1 file > /var/tmp/$prog.file2
+ diff /var/tmp/$prog.file1 /var/tmp/$prog.file2 > $log
+ head -20 $log
+ rm /var/tmp/$prog.file1 /var/tmp/$prog.file2
+ ls -ls file.orig file
+ s=2
+fi
+
+cd $here
+umount $mp2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f $serial /tmp/$prog /tmp/$prog.c $log
+exit $s
diff --git a/tools/test/stress2/misc/mmap5.sh b/tools/test/stress2/misc/mmap5.sh
index e6dee6d551de..c7369118e0e2 100755
--- a/tools/test/stress2/misc/mmap5.sh
+++ b/tools/test/stress2/misc/mmap5.sh
@@ -52,15 +52,16 @@ rm -f /tmp/mmap5 /tmp/mmap5.inputfile
exit
EOF
-#include <err.h>
-#include <errno.h>
-#include <stdlib.h>
+#include <sys/param.h>
#include <sys/fcntl.h>
#include <sys/mman.h>
-#include <sys/param.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <err.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <time.h>
#include <unistd.h>
const char *file;
@@ -113,13 +114,14 @@ test(void)
int
main(int argc, char *argv[])
{
- int i;
+ time_t start;
if (argc != 2)
errx(1, "Usage: %s <file>", argv[0]);
file = argv[1];
- for (i = 0; i < 30000; i++) {
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
if (fork() == 0)
test();
wait(NULL);
diff --git a/tools/test/stress2/misc/mount7.sh b/tools/test/stress2/misc/mount7.sh
index d85c91529e83..2489421c544d 100755
--- a/tools/test/stress2/misc/mount7.sh
+++ b/tools/test/stress2/misc/mount7.sh
@@ -28,6 +28,14 @@
# Another parallel mount(8) test scenario
+# Seen:
+# UID PID PPID C PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND
+# 0 37225 99871 1 32 0 13280 3116 sdstart D+ 0 0:00.04 mount /dev/md21 /mnt21
+# 0 37236 99550 9 68 0 13280 3112 sdstart D+ 0 0:00.04 mount /dev/md19 /mnt19
+
+# https://people.freebsd.org/~pho/stress/log/log0549.txt
+# Fixed by kib@ in 4b273a7fb9e6
+
. ../default.cfg
mounts=15
diff --git a/tools/test/stress2/misc/mprotect3.sh b/tools/test/stress2/misc/mprotect3.sh
new file mode 100755
index 000000000000..9bd4a6f9be79
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect3.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+# Test scenario from:
+# Bug 272585 - calling mprotect in an mmap-ed stack can affect non-target pages
+# Test scenario by: John F. Carr <jfc mit edu>
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+/* Test program from:
+ Bug 272585 - calling mprotect in an mmap-ed stack can affect non-target pages
+ */
+#include <err.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#ifndef MAP_GROWSDOWN
+#define MAP_GROWSDOWN 0
+#endif
+#ifndef MAP_STACK
+#define MAP_STACK 0
+#endif
+
+int main(void)
+{
+ long pagesize;
+ char *addr, *guard;
+ size_t alloc_size;
+
+ pagesize = sysconf(_SC_PAGESIZE);
+ if (pagesize < 0)
+ err(EX_OSERR, "getPAGESIZE");
+
+ alloc_size = 0x200000 + pagesize;
+
+ addr = mmap(0, alloc_size, PROT_READ|PROT_WRITE,
+ MAP_GROWSDOWN|MAP_STACK|MAP_PRIVATE|MAP_ANONYMOUS,
+ -1, 0);
+ if (addr == MAP_FAILED) {
+ err(EX_OSERR, "mmap");
+ }
+
+ /* Only 0x20 causes a failure. */
+ guard = addr + alloc_size - 0x20 * pagesize;
+
+ if (mprotect(guard, pagesize, PROT_NONE)) {
+ err(EX_OSERR, "mprotect");
+ }
+
+ printf("mapped %p..%p, guard at %p\n", addr, addr + alloc_size, guard);
+ fflush(stdout);
+
+ ((volatile char *)guard)[-1];
+
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 0
+
+cd /tmp
+./$prog; s=$?
+cd -
+
+rm -f /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit $s
diff --git a/tools/test/stress2/misc/mprotect4.sh b/tools/test/stress2/misc/mprotect4.sh
new file mode 100755
index 000000000000..c233d20852a2
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect4.sh
@@ -0,0 +1,109 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+/* N readers and 1 writer threaded test scenario */
+
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <assert.h>
+#include <err.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+static int go, n, ps;
+static char *cp;
+static volatile char v;
+
+void *
+rd(void *arg __unused)
+{
+ int i;
+
+ while (go == 0)
+ usleep(100);
+ while (go == 1) {
+ for (i = 0; i < n; i += ps) {
+ v = cp[i];
+ }
+ pthread_yield();
+ }
+ return(NULL);
+}
+
+void
+usage(char *prog) {
+ fprintf(stderr, "Usage: %s <number of threads>\n", prog);
+ _exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ pthread_t *tid;
+ time_t start;
+ int e, i, nb;
+
+ if (argc != 2)
+ usage(argv[0]);
+ if (sscanf(argv[1], "%d", &n) != 1)
+ usage(argv[0]);
+ if (n > 1)
+ n--;
+ if ((tid = calloc(n, sizeof(pthread_t *))) == NULL)
+ err(1, "calloc()");
+
+ ps = getpagesize();
+ cp = mmap(NULL, n * ps, PROT_READ, MAP_PRIVATE | MAP_ANON, -1, 0);
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_create(&tid[i], NULL, rd, NULL)) != 0)
+ errc(1, e, "pthread_create()");
+ }
+ go = 1;
+
+ nb = 0;
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ for (i = 0; i < n; i += ps) {
+ if (mprotect(&cp[i], ps, PROT_READ|PROT_WRITE) == -1)
+ err(1, "mprotect(PROT_READ)");
+ cp[i] = 1;
+ if (mprotect(&cp[i], ps, PROT_READ) == -1)
+ err(1, "mprotect(PROT_READ)");
+ nb++;
+ }
+ }
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_join(tid[i], NULL)) != 0)
+ errc(1, e, "pthread_join() in loop %d", i);
+ }
+ if (nb >= 0) {
+#if defined(DEBUG)
+ fprintf(stderr, "%d loops\n", nb);
+#endif
+ ;
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+/tmp/$prog `sysctl -n hw.ncpu`; s=$?
+
+rm -d /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/mprotect5.sh b/tools/test/stress2/misc/mprotect5.sh
new file mode 100755
index 000000000000..ab4d2eeee118
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect5.sh
@@ -0,0 +1,118 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+/* N writers threaded test scenario */
+
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <assert.h>
+#include <err.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+static pthread_mutex_t write_mutex;
+static int go, n, ps;
+static char *cp, *wp;
+
+void *
+wr(void *arg __unused)
+{
+ while (go == 0)
+ usleep(100);
+ while (go == 1) {
+ pthread_mutex_lock(&write_mutex);
+ if (wp != NULL)
+ *wp += 1;
+ pthread_mutex_unlock(&write_mutex);
+ }
+ return(NULL);
+}
+
+void
+usage(char *prog) {
+ fprintf(stderr, "Usage: %s <number of threads>\n", prog);
+ _exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ pthread_t *tid;
+ time_t start;
+ int e, i, nb;
+
+ if (argc != 2)
+ usage(argv[0]);
+ if (sscanf(argv[1], "%d", &n) != 1)
+ usage(argv[0]);
+ if (n > 1)
+ n--;
+ if ((tid = calloc(n, sizeof(pthread_t *))) == NULL)
+ err(1, "calloc()");
+
+ ps = getpagesize();
+ cp = mmap(NULL, n * ps, PROT_READ, MAP_PRIVATE | MAP_ANON, -1, 0);
+ pthread_mutex_init(&write_mutex, NULL);
+ pthread_mutex_lock(&write_mutex);
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_create(&tid[i], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create()");
+ }
+ go = 1;
+
+ nb = 0;
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ for (i = 0; i < n; i += ps) {
+ pthread_mutex_lock(&write_mutex);
+ if (mprotect(&cp[i], ps, PROT_READ|PROT_WRITE) == -1)
+ err(1, "mprotect(PROT_READ)");
+ cp[i] = 0;
+ wp = &cp[i];
+ pthread_mutex_unlock(&write_mutex);
+
+ usleep(100);
+
+ pthread_mutex_lock(&write_mutex);
+ if (mprotect(&cp[i], ps, PROT_READ) == -1)
+ err(1, "mprotect(PROT_READ)");
+ wp = NULL;
+ pthread_mutex_unlock(&write_mutex);
+ nb++;
+ }
+ }
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_join(tid[i], NULL)) != 0)
+ errc(1, e, "pthread_join() in loop %d", i);
+ }
+ if (nb >= 0) {
+#if defined(DEBUG)
+ fprintf(stderr, "%d loops\n", nb);
+#endif
+ ;
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+/tmp/$prog `sysctl -n hw.ncpu`; s=$?
+
+rm -d /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/mprotect6.sh b/tools/test/stress2/misc/mprotect6.sh
new file mode 100755
index 000000000000..ef1443c216d3
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect6.sh
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <assert.h>
+#include <err.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+static pthread_mutex_t write_mutex;
+static volatile int done;
+static int go, n, *once, *p, ps;
+
+static void *
+wr(void *arg)
+{
+ int idx;
+
+ alarm(180);
+ idx = *(int *)arg;
+ while (go == 0)
+ usleep(100);
+ while (go == 1) {
+ while (go == 1 && once[idx] == 0)
+ usleep(100);
+ if (go == 0)
+ break;
+ p[idx]++;
+ once[idx] = 0;
+ pthread_mutex_lock(&write_mutex);
+ done++;
+ pthread_mutex_unlock(&write_mutex);
+ }
+ return(NULL);
+}
+
+static void
+setonce(int val)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ once[i] = val;
+}
+
+static void
+usage(char *prog) {
+ fprintf(stderr, "Usage: %s <number of threads>\n", prog);
+ _exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ pthread_t *tid;
+ time_t start;
+ int *arg;
+ int e, i, nb, r;
+
+ if (argc != 2)
+ usage(argv[0]);
+ if (sscanf(argv[1], "%d", &n) != 1)
+ usage(argv[0]);
+ if (n > 1)
+ n--;
+ if ((tid = calloc(n, sizeof(pthread_t *))) == NULL)
+ err(1, "calloc()");
+ if ((once = calloc(n, sizeof(int *))) == NULL)
+ err(1, "calloc()");
+ setonce(0);
+
+ ps = getpagesize();
+ p = mmap(NULL, n * ps, PROT_READ, MAP_PRIVATE | MAP_ANON, -1, 0);
+ go = 0;
+ pthread_mutex_init(&write_mutex, NULL);
+ for (i = 0; i < n; i++) {
+ arg = malloc(sizeof(int));
+ *arg = i;
+ if ((e = pthread_create(&tid[i], NULL, wr, (void *)arg)) != 0)
+ errc(1, e, "pthread_create()");
+ }
+ go = 1;
+
+ nb = 0;
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ if (mprotect(p, n * ps, PROT_READ|PROT_WRITE) == -1)
+ err(1, "mprotect(PROT_READ)");
+ done = 0;
+ setonce(1);
+ while (done != n)
+ usleep(100);
+ if (mprotect(p, n * ps, PROT_READ) == -1)
+ err(1, "mprotect(PROT_READ)");
+ nb++;
+ usleep(100);
+ }
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_join(tid[i], NULL)) != 0)
+ errc(1, e, "pthread_join() in loop %d", i);
+ }
+ r = 0;
+ for (i = 1; i < n; i++) {
+ if (p[0] != p[i])
+ r++;
+ }
+ if (r != 0) {
+ fprintf(stderr, "%d loops.\n", nb);
+ for (i = 0; i < n; i++)
+ fprintf(stderr, "p[%3d] = %d\n", i, p[i]);
+ }
+
+ return (r);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 -g /tmp/$prog.c -lpthread || exit 1
+
+n=`sysctl -n hw.ncpu`
+if [ $# -eq 1 ]; then
+ echo $1 | grep -Eq '^[0-9]+$' && n=$1
+fi
+../testcases/swap/swap -t 2m > /dev/null &
+sleep 10
+/tmp/$prog $n; s=$?
+pkill -9 swap
+wait
+
+rm -d /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/msdos14.sh b/tools/test/stress2/misc/msdos14.sh
index 9c7a636f5f59..aaa95144c14e 100755
--- a/tools/test/stress2/misc/msdos14.sh
+++ b/tools/test/stress2/misc/msdos14.sh
@@ -27,7 +27,7 @@
# SUCH DAMAGE.
#
-# Rename(2) test with msdosfs(5)
+# Rename(2) test with msdosfs(4)
# Test scenario by kib@
. ../default.cfg
diff --git a/tools/test/stress2/misc/msdos17.sh b/tools/test/stress2/misc/msdos17.sh
new file mode 100755
index 000000000000..392a9a622b9a
--- /dev/null
+++ b/tools/test/stress2/misc/msdos17.sh
@@ -0,0 +1,144 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# No problems observed
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+mount | grep -q "on $mntpoint " && umount $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 1g -u $mdstart
+gpart create -s bsd md$mdstart > /dev/null
+gpart add -t freebsd-ufs md$mdstart > /dev/null
+part=a
+newfs_msdos -F 32 -b 8192 /dev/md${mdstart}$part > /dev/null || exit 1
+mount -t msdosfs /dev/md${mdstart}$part $mntpoint
+
+here=`pwd`
+cd /tmp
+cat > $prog.c <<EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <machine/atomic.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static volatile u_int *share;
+static char file1[80], file2[80];
+
+#define SYNC 0
+#define STOP 1
+
+static void
+test0(void)
+{
+ struct stat sb;
+
+ while (share[STOP] == 0) {
+ while (share[SYNC] != 0)
+ usleep(100);
+ if (rename(file1, file2) == -1)
+ err(1, "rename(%s, %s)", file1, file2);
+ if (stat(file1, &sb) == 0)
+ err(1, "stat(%s)", file1);
+ atomic_add_int(&share[SYNC], 1);
+ }
+
+ _exit(0);
+}
+
+static void
+test1(void)
+{
+ struct stat sb;
+
+ while (share[STOP] == 0) {
+ while (share[SYNC] != 1)
+ usleep(100);
+ if (rename(file2, file1) == -1)
+ err(1, "rename(%s, %s)", file2, file1);
+ if (stat(file2, &sb) == 0)
+ err(1, "stat(%s)", file2);
+ atomic_add_int(&share[SYNC], -1);
+ }
+
+ _exit(0);
+}
+
+int
+main(void)
+{
+ pid_t pids[2];
+ size_t len;
+ int fd;
+ char cwd[80];
+
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ if (getcwd(cwd, sizeof(cwd)) == NULL)
+ err(1, "getcwd()");
+ snprintf(file1, sizeof(file1), "%s/a.%06d", cwd, getpid());
+ snprintf(file2, sizeof(file2), "%s/b.%06d", cwd, getpid());
+ if ((fd = open(file1, O_CREAT, 0640)) == -1)
+ err(1, "open(%s)", file1);
+ close(fd);
+
+ if ((pids[0] = fork()) == 0)
+ test0();
+ if ((pids[1] = fork()) == 0)
+ test1();
+
+ sleep(120);
+ share[STOP] = 1;
+
+ if (waitpid(pids[0], NULL, 0) == -1)
+ err(1, "waitpid(%d)", pids[0]);
+ if (waitpid(pids[1], NULL, 0) == -1)
+ err(1, "waitpid(%d)", pids[1]);
+ unlink(file1);
+ unlink(file2);
+}
+EOF
+mycc -o $prog -Wall $prog.c || exit 1
+rm -f $prog.c
+cd $here
+
+(cd ../testcases/swap; ./swap -t 5m -i 20 -l 100) &
+cd $mntpoint
+pids=""
+for i in `jot 30`; do
+ /tmp/$prog &
+ pids="$pids $!"
+done
+for pid in $pids; do
+ wait $pid
+done
+cd $here
+while pkill swap; do :; done
+wait
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog
+exit 0
diff --git a/tools/test/stress2/misc/msdos20.sh b/tools/test/stress2/misc/msdos20.sh
new file mode 100755
index 000000000000..96c224a629f3
--- /dev/null
+++ b/tools/test/stress2/misc/msdos20.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# msdosfs disk image fuzz test.
+# No problems seen
+
+. ../default.cfg
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+cc -o /tmp/flip -Wall -Wextra -O2 ../tools/flip.c || exit 1
+
+set -eu
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+mp2=${mntpoint}$u2
+mkdir -p $mp1 $mp2
+prog=$(basename "$0" .sh)
+backup=/tmp/$prog.sh.diskimage.`date +%Y%m%dT%H%M%S`
+cap=$((32 * 1024)) # Only fuzz the first 32k
+log=$mp1/$prog.sh.log
+diskimage=$mp1/msdos20.sh.diskimage
+
+set +e
+mount | grep "on $mp2 " | grep -q /dev/md && umount -f $mp2
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 2g -u $u1
+newfs -U /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+size=32m
+type=`jot -r 1 1 3`
+[ $type -eq 3 ] && size=260m
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$size count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+[ $type -eq 1 ] && newfs_msdos -F 12 /dev/md$u2 > /dev/null 2>&1
+[ $type -eq 2 ] && newfs_msdos -F 16 /dev/md$u2 > /dev/null 2>&1
+[ $type -eq 3 ] && newfs_msdos -F 32 -b 4096 /dev/md$u2 > /dev/null 2>&1
+
+mount -t msdosfs /dev/md$u2 $mp2 || { echo "Initial mount of type $type failed"; exit 1; }
+if [ -d /usr/include/sys ]; then
+ mkdir $mp2/sys
+ cp /usr/include/sys/elf_common.h $mp2/sys
+ cp /usr/include/sys/soundcard.h $mp2/sys
+ cp /usr/include/sys/sysproto.h $mp2/sys
+fi
+umount $mp2
+
+cd $mp1
+start=`date +%s`
+nn=0
+s=0
+while [ $((`date +%s` - start)) -lt 240 ]; do
+ mount -t msdosfs /dev/md$u2 $mp2 2>/dev/null || { s=1; break; }
+ ls -lR $mp2 > /dev/null 2>&1 || { s=2; break; }
+ rm -rf $mp2/* > /dev/null 2>&1 || { s=3; break; }
+ touch $mp2/`jot -rc 8 a z | tr -d '\n'` || { s=4; break; }
+ while mount | grep -q "on $mp2 "; do umount $mp2; done
+ echo * | grep -q core && { s=5; break; }
+ sync
+ mdconfig -d -u $u2
+ /tmp/flip -n 10 -s $cap $diskimage
+ cp $diskimage $backup
+ fsync $backup
+ sync
+ mdconfig -a -t vnode -f $diskimage -u $u2
+ nn=$((nn + 1))
+done
+#echo "Exit after $nn loops on a type $type MSDOS FS with code $s"
+mount | grep -q "on $mp2 " && umount $mp2
+mdconfig -d -u $u2 || exit 1
+
+echo * | grep -q core && { ls -l *.core; cp $log /tmp; exit 106; } ||
+cd /tmp
+umount $mp1
+mdconfig -d -u $u1
+rm -f /tmp/flip $backup
+exit 0
diff --git a/tools/test/stress2/misc/msdos21.sh b/tools/test/stress2/misc/msdos21.sh
new file mode 100755
index 000000000000..68ea94eab105
--- /dev/null
+++ b/tools/test/stress2/misc/msdos21.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Test scenario from https://reviews.freebsd.org/D43951 "Fix MSDOSFS rename (in case target exists)"
+# Test scenario by se@
+
+# Triggered a panic with a WiP kernel patch.
+
+set -u
+[ -f "`which rsync`" ] || exit 0
+[ -d /usr/src/lib ] || exit 0
+
+MDUNIT=10
+FS=/mnt/test
+mdconfig -u $MDUNIT -t malloc -s 512m
+newfs_msdos -c 8 -F 32 /dev/md$MDUNIT > /dev/null 2>&1
+mkdir -p $FS
+mount -t msdos /dev/md$MDUNIT $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+umount $FS
+fsck_msdosfs -y /dev/md$MDUNIT; s=$?
+mdconfig -d -u $MDUNIT
+
+exit $s
diff --git a/tools/test/stress2/misc/namecache2.sh b/tools/test/stress2/misc/namecache2.sh
index 9fcfe5e0226c..b32d41974468 100755
--- a/tools/test/stress2/misc/namecache2.sh
+++ b/tools/test/stress2/misc/namecache2.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# UFS cache inconsistancy for rename(2) demonstrated
+# UFS cache inconsistency for rename(2) demonstrated
# Fails with:
# ls -ali /mnt
# ls: tfa1022: No such file or directory
diff --git a/tools/test/stress2/misc/newfs8.sh b/tools/test/stress2/misc/newfs8.sh
new file mode 100755
index 000000000000..56ee07cba9b1
--- /dev/null
+++ b/tools/test/stress2/misc/newfs8.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Variation of newfs.sh with VM pressure added
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+mount | grep "$mntpoint" | grep md$mdstart > /dev/null &&
+ umount $mntpoint
+mdconfig -l | grep md$mdstart > /dev/null && mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 20g -u $mdstart
+
+log=/tmp/newfs.sh.log
+s=0
+export RUNDIR=$mntpoint/stressX
+export runRUNTIME=2m
+export RUNTIME=$runRUNTIME
+export CTRLDIR=$mntpoint/stressX.control
+start=`date '+%s'`
+for opt in -O2 -U -j; do
+ blocksize=4096
+ while [ $blocksize -le 65536 ]; do
+ for i in 8 4 2 1; do
+ fragsize=$((blocksize / i))
+ echo "`date +%T` newfs $opt -b $blocksize -f $fragsize"\
+ "md$mdstart"
+ newfs $opt -b $blocksize -f $fragsize \
+ md$mdstart > /dev/null || { s=1; continue; }
+ [ "$opt" = "-O2" ] && tunefs -n disable md$mdstart > /dev/null 2>&1
+ mount /dev/md$mdstart $mntpoint || { s=2; continue; }
+ chmod 777 $mntpoint
+ su $testuser -c \
+ "(cd ..; ./run.sh io.cfg > /dev/null 2>&1)" &
+ sleep 30
+ while pkill swap; do :; done
+ while pkill -U $testuser; do :; done
+ ../tools/killall.sh || { echo "Failed at $opt -b $blocksize -f $fragsize$"; \
+ exit 3; }
+ wait
+ while mount | grep "$mntpoint" | \
+ grep -q md$mdstart; do
+ umount $mntpoint > /dev/null 2>&1 || sleep 1
+ done
+ fsck -fy /dev/md$mdstart > $log 2>&1
+ grep -q "WAS MODIFIED" $log && {
+ s=4
+ cat $log
+ }
+ done
+ blocksize=$((blocksize * 2))
+ done
+ if [ $((`date '+%s'` - start)) -gt 3600 ]; then
+ echo "Timed out in $opt -b $blocksize -f $fragsize$"
+ s=5
+ break
+ fi
+done
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/nfsrename.sh b/tools/test/stress2/misc/nfsrename.sh
index b6513fba1553..864c64aed8ac 100755
--- a/tools/test/stress2/misc/nfsrename.sh
+++ b/tools/test/stress2/misc/nfsrename.sh
@@ -137,7 +137,7 @@ write_file(void)
unlink(path);
}
- fprintf(fp, "blah blah blah garbage %ld\n", random());
+ fprintf(fp, "blah blah blah garbage %ld\n", (long)arc4random());
fclose(fp);
if (rename(path, filename) < 0) {
warn("rename");
@@ -150,7 +150,7 @@ random_sleep(int base, int slop)
{
long val;
- val = random() % slop;
+ val = arc4random() % slop;
usleep(base + val);
}
diff --git a/tools/test/stress2/misc/nullfs18.sh b/tools/test/stress2/misc/nullfs18.sh
index 0ee0a1c2ef6b..3936ea64c6a3 100755
--- a/tools/test/stress2/misc/nullfs18.sh
+++ b/tools/test/stress2/misc/nullfs18.sh
@@ -28,7 +28,7 @@
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
-# Demonstate nullfs(5) inode leak.
+# Demonstate nullfs(4) inode leak.
# Fixed by r295717.
. ../default.cfg
@@ -41,6 +41,7 @@ mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
mdconfig -a -t swap -s 2g -u $mdstart || exit 1
newfs -n md$mdstart > /dev/null
+tunefs -n disable md$mdstart 2>/dev/null
mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
diff --git a/tools/test/stress2/misc/nullfs31.sh b/tools/test/stress2/misc/nullfs31.sh
new file mode 100755
index 000000000000..381ec6bf041c
--- /dev/null
+++ b/tools/test/stress2/misc/nullfs31.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Variation of nullfs25.sh, using cp(1) (copy_file_range())
+
+# Page fault in vn_copy_file_range() seen:
+# https://people.freebsd.org/~pho/stress/log/log0497.txt
+# Fixed by: 23210f538a00
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+mounts=4 # Number of parallel scripts
+: ${nullfs_srcdir:=$mntpoint}
+: ${nullfs_dstdir:=$mntpoint}
+prog=$(basename "$0" .sh)
+CONT=/tmp/$prog.continue
+
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 1g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+(cd $mntpoint; jot 500 | xargs touch)
+(cd ../testcases/swap; ./swap -t 5m -i 20 > /dev/null) &
+
+for i in `jot $mounts $mdstart`; do
+ [ ! -d ${nullfs_dstdir}$i ] && mkdir ${nullfs_dstdir}$i
+ mount | grep -q " ${nullfs_dstdir}$i " &&
+ umount ${nullfs_dstdir}$i
+done
+
+# Start the parallel tests
+touch $CONT
+for i in `jot $mounts $mdstart`; do
+ while [ -f $CONT ]; do
+ cp /etc/group ${nullfs_dstdir}$i > \
+ /dev/null 2>&1
+ done &
+ # The test: Parallel mount and unmount
+ start=`date +%s`
+ (
+ while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount_nullfs $nullfs_srcdir ${nullfs_dstdir}$i > \
+ /dev/null 2>&1
+ opt=$([ `jot -r 1 0 1` -eq 0 ] && echo "-f")
+ while mount | grep -q ${nullfs_dstdir}$i; do
+ umount $opt ${nullfs_dstdir}$i > \
+ /dev/null 2>&1
+ done
+ done
+ rm -f $CONT
+ ) &
+done
+while [ -f $CONT ] ; do sleep 1; done
+while pgrep -q swap; do pkill swap; done
+wait
+
+for i in `jot $mounts`; do
+ umount ${nullfs_dstdir}$i > /dev/null 2>&1
+done
+n=0
+while mount | grep $mntpoint | grep -q /dev/md; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
+done
+mdconfig -d -u $mdstart
+exit 0
diff --git a/tools/test/stress2/misc/nullfs32.sh b/tools/test/stress2/misc/nullfs32.sh
new file mode 100755
index 000000000000..567a40d4d373
--- /dev/null
+++ b/tools/test/stress2/misc/nullfs32.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Test scenario from:
+# Bug 254210 - jail: nullfs: deleted files does not free up space
+# Fixed by: 1a0cb938f7b4
+
+# Test scenario idea by: ronald@FreeBSD.org
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+df -h | grep "$mntpoint"
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 2g -u $mdstart
+newfs $newfs_flags -n md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+cd $mntpoint
+mkdir storage test1 test2
+mount_nullfs -o rw,noatime ./storage ./test1
+mount_nullfs -o rw,noatime ./storage ./test2
+
+dd if=/dev/random of=./test1/random.dd bs=1M count=1024 status=none
+
+rm ./test2/random.dd
+df -h | grep "$mntpoint" > $log
+grep -E "${mntpoint}$" $log | grep -q '16K 1.8G 0%' && s=0 || s=1
+if [ $s -eq 1 ]; then
+ echo "Leaking:"
+ cat $log
+ find $mntpoint -type f -ls
+fi
+cd -
+umount $mntpoint/test1
+umount $mntpoint/test2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/pager_read_error.sh b/tools/test/stress2/misc/pager_read_error.sh
new file mode 100755
index 000000000000..9a2f3c7cc380
--- /dev/null
+++ b/tools/test/stress2/misc/pager_read_error.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Hunt for "vm_fault: pager read error, pid 32939 (mmap)"
+
+# "panic: namei: unexpected flags: 0x10000000" seen:
+# https://people.freebsd.org/~pho/stress/log/log0585.txt
+# Fixed by: 58b2bd33aff7
+
+. ../default.cfg
+
+md=$mdstart
+mp=$mntpoint
+mdconfig -l | grep -q md$md && mdconfig -d -u $md
+mount | grep -q "on $mp " && umount -f $mp
+
+mdconfig -a -t swap -s 1g -u $md
+newfs -U /dev/md$md > /dev/null
+mount /dev/md$md $mp
+
+export RUNDIR=$mp/stressX
+../testcases/swap/swap -t 5m -i 20 -l 100 > /dev/null &
+sleep 5
+../testcases/mmap/mmap -t 5m -i 20 -l 100 > /dev/null 2>&1 &
+sleep 5
+umount -f $mp
+pkill swap mmap
+wait
+
+mdconfig -d -u $md
+exit 0
diff --git a/tools/test/stress2/misc/perf.sh b/tools/test/stress2/misc/perf.sh
index 58f5bd67b756..de6c20028c59 100755
--- a/tools/test/stress2/misc/perf.sh
+++ b/tools/test/stress2/misc/perf.sh
@@ -84,6 +84,7 @@ tst() {
s=0
for i in "" "-U" "-j"; do
newfs $i /dev/md$mdstart > /dev/null 2>&1
+ [ "$i" = "" ] && tunefs -n disable md$mdstart
mount /dev/md$mdstart $mntpoint
t1=`date +%s`
diff --git a/tools/test/stress2/misc/pread.sh b/tools/test/stress2/misc/pread.sh
index 1bf3b874e6af..24ee2efb696a 100755
--- a/tools/test/stress2/misc/pread.sh
+++ b/tools/test/stress2/misc/pread.sh
@@ -46,13 +46,13 @@ mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
mount -t tmpfs tmpfs $mntpoint
cp -a /usr/include $mntpoint
-echo "Testing tmpfs(5)"
+echo "Testing tmpfs(4)"
/tmp/pread $mntpoint
while mount | grep -q "on $mntpoint "; do
umount $mntpoint || sleep 1
done
-echo "Testing fdescfs(5)"
+echo "Testing fdescfs(4)"
mount -t fdescfs null /dev/fd
for i in `jot 100`; do
/tmp/pread /dev/fd
@@ -62,7 +62,7 @@ while mount | grep -q "on /dev/fd "; do
umount /dev/fd || sleep 1
done
-echo "Testing procfs(5)"
+echo "Testing procfs(4)"
mount -t procfs procfs $mntpoint
/tmp/pread $mntpoint
while mount | grep -q "on $mntpoint "; do
@@ -81,13 +81,13 @@ done
mdconfig -d -u $mdstart
mount -t nullfs /bin $mntpoint
-echo "Testing nullfs(5)"
+echo "Testing nullfs(4)"
/tmp/pread $mntpoint
while mount | grep -q "on $mntpoint "; do
umount $mntpoint || sleep 1
done
-echo "Testing procfs(5)"
+echo "Testing procfs(4)"
mount -t procfs procfs $mntpoint
/tmp/pread $mntpoint
while mount | grep -q "on $mntpoint "; do
diff --git a/tools/test/stress2/misc/procfs.sh b/tools/test/stress2/misc/procfs.sh
index 6b445b0d7e48..a59235c6d521 100755
--- a/tools/test/stress2/misc/procfs.sh
+++ b/tools/test/stress2/misc/procfs.sh
@@ -56,7 +56,8 @@ else
else
# The test: Parallel mount and unmounts
- for i in `jot 128`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
m=$1
mount -t procfs proc ${mntpoint}$m
while mount | grep -qw $mntpoint$m; do
diff --git a/tools/test/stress2/misc/procfs3.sh b/tools/test/stress2/misc/procfs3.sh
index c9c4820adbff..30bcc8b3cd62 100755
--- a/tools/test/stress2/misc/procfs3.sh
+++ b/tools/test/stress2/misc/procfs3.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# procfs(5) test scenario.
+# procfs(4) test scenario.
# "panic: wchan 0xc10a4f68 has no wmesg" seen
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/pthread10.sh b/tools/test/stress2/misc/pthread10.sh
new file mode 100755
index 000000000000..ddeab0f9bb57
--- /dev/null
+++ b/tools/test/stress2/misc/pthread10.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+
+# Original test scenario by nabijaczleweli@nabijaczleweli.xyz:
+# Bug 283101 - pthread_cancel() doesn't cancel a thread that's currently in pause()
+# Fixed by: 9f78c837d94f check_cancel: when in_sigsuspend, send SIGCANCEL unconditionally
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static void *
+thread(void *arg __unused)
+{
+ for(;;) {
+ pause();
+ printf("woke up from pause\n");
+ }
+}
+
+static void
+thread_cancel_and_join(pthread_t ptid)
+{
+ void *status = NULL;
+
+ if (pthread_cancel(ptid)) {
+ printf("pthread_cancel() failed\n");
+ exit(1);
+ }
+
+ (void) pthread_join(ptid, &status);
+ int error = (int)(uintptr_t)status;
+
+ if (error) {
+ if (status == PTHREAD_CANCELED) {
+ printf("pthread_cancel() succeeded\n");
+ } else {
+ printf("pthread_join() error (not PTHREAD_CANCELED)\n");
+ exit(1);
+ }
+ }
+}
+
+int
+main(void)
+{
+ // Empirically, I've noticed that either the hang occurs somewhere between
+ // 10 and 500 iterations, or it runs infinitely without ever hanging.
+ // Therefore, stopping at 500th iteration, and looping from a shell script.
+
+ // For quick results (usually under 10 minutes), invoke "./run" from a dozen
+ // consoles or GNU screen windows in parallel.
+
+ pid_t pid = getpid();
+
+ for (uint64_t iteration = 1; iteration <= 500; ++iteration) {
+ printf("PID %d, iteration %lu...", pid, iteration);
+
+ pthread_t ptid;
+ int err;
+
+ err = pthread_create(&ptid, NULL, thread, NULL);
+
+ if (err) {
+ printf("pthread_create() failed with error: %d\n", err);
+ return 1;
+ }
+
+ thread_cancel_and_join(ptid);
+
+ printf("OK\n");
+
+ // Tiny sleep
+ usleep(20000);
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O2 /tmp/$prog.c -lpthread || exit 1
+(cd ../testcases/swap; ./swap -t 3m -i 20 > /dev/null) &
+sleep 5
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 180 ]; do
+ /tmp/$prog > /dev/null & pid=$!
+ t1=`date +%s`
+ while kill -0 $pid 2> /dev/null; do
+ if [ $((`date +%s` - t1)) -gt 180 ]; then
+ ps -lH $pid
+# exit 1 # For DEBUG
+ kill -9 $pid; s=1
+ echo fail
+ break 2
+ else
+ sleep 1
+ fi
+ done
+ wait $pid; s=$?
+ [ $s -ne 0 ] && break
+done
+while pkill swap; do :; done
+wait
+rm -f /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/rangelocks.sh b/tools/test/stress2/misc/rangelocks.sh
new file mode 100755
index 000000000000..fa855359d72b
--- /dev/null
+++ b/tools/test/stress2/misc/rangelocks.sh
@@ -0,0 +1,194 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Range lock test scenario suggestion by kib@
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+dir=/tmp
+odir=`pwd`
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/$prog.c
+mycc -o $prog -Wall -Wextra -O2 -g $prog.c || exit 1
+rm -f $prog.c
+cd $odir
+
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+set -e
+mdconfig -a -t swap -s 6g -u $mdstart
+newfs $newfs_flags -n /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+wd="$mntpoint/$prog.dir"
+mkdir -p $wd
+dd if=/dev/zero of=$wd/file bs=1m count=5k status=none
+
+[ `jot -r 1 1 100` -le 25 ] &&
+ ../testcases/swap/swap -t 10m -i 20 > /dev/null 2>&1 &
+cd $wd
+/tmp/$prog $wd/file; s=$?
+cd $odir
+while pkill swap; do :; done
+wait
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -rf /tmp/$prog $wd
+exit $s
+
+EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <machine/atomic.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sched.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+#define DONE 1
+#define MAXBLK 10240
+//#define MAXPROC 32
+#define MAXPROC 1024
+#define MAXSIZ (5LL * 1024 * 1024 *1024)
+#define RUNTIME (5 * 60)
+#define SYNC 0
+
+static volatile u_int *share;
+static int parallel;
+
+static char *file;
+
+static off_t
+newpos(int lng)
+{
+ off_t p;
+
+ do {
+ arc4random_buf(&p, sizeof(p));
+ p = p & 0xfffffff;
+ } while (p + lng > MAXSIZ);
+ return (p);
+}
+
+static void
+test(int indx, int num)
+{
+ off_t pos;
+ ssize_t i, l, r;
+ time_t start;
+ int fd, n;
+ char *buf;
+
+ atomic_add_int(&share[SYNC], 1);
+ while (share[SYNC] != (unsigned int)parallel)
+ sched_yield();
+
+ if ((buf = malloc(MAXBLK)) == NULL)
+ err(1, "malloc");
+ n = 0;
+ start = time(NULL);
+ while (share[DONE] != (unsigned int)parallel) {
+ setproctitle("test(%d) num %d, n %d", indx, num, n);
+ if ((fd = open(file, O_RDWR)) == -1)
+ err(1, "open(%s)", file);
+
+ for (i = 0; i < arc4random() % 512; i++) {
+ if (arc4random() % 100 < 50) {
+ l = arc4random() % MAXBLK + 1;
+ pos = newpos(l);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek");
+ if ((r = read(fd, buf, l)) != l) {
+ warn("read %jd @ %jd returned %zd\n", (intmax_t)l, (intmax_t)pos, r);
+ goto done;
+ }
+ }
+
+ l = arc4random() % MAXBLK + 1;
+ pos = newpos(l);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek");
+ if ((r = write(fd, buf, l)) != l) {
+ warn("write returned %zd\n", r);
+ goto done;
+ }
+ }
+
+ close(fd);
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+ if (time(NULL) - start >= RUNTIME * 4) {
+ fprintf(stderr, "test(%d), %d Timed out\n", indx, num);
+ break;
+ }
+ }
+done:
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+
+ _exit(0);
+}
+
+void
+setup(void)
+{
+
+ parallel = arc4random() % MAXPROC + 1;
+}
+
+int
+main(int argc, char *argv[])
+{
+ size_t len;
+ time_t start;
+ int e, i, n, *pids, status;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <file>\n", argv[0]);
+ _exit(1);
+ }
+ e = 0;
+ file = argv[1];
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ n = 0;
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME && e == 0) {
+ setup();
+
+ pids = malloc(sizeof(pid_t) * parallel);
+ share[SYNC] = share[DONE] = 0;
+ for (i = 0; i < parallel; i++) {
+ if ((pids[i] = fork()) == 0)
+ test(i, n);
+ }
+ for (i = 0; i < parallel; i++) {
+ if (waitpid(pids[i], &status, 0) != pids[i])
+ err(1, "waitpid %d", pids[i]);
+ e += status == 0 ? 0 : 1;
+ }
+ n++;
+ n = n % 10;
+ free(pids);
+ }
+
+ return (e);
+}
diff --git a/tools/test/stress2/misc/rangelocks2.sh b/tools/test/stress2/misc/rangelocks2.sh
new file mode 100755
index 000000000000..2df4cf346bc8
--- /dev/null
+++ b/tools/test/stress2/misc/rangelocks2.sh
@@ -0,0 +1,178 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+dir=/tmp
+odir=`pwd`
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/$prog.c
+mycc -o $prog -Wall -Wextra -O2 -g $prog.c || exit 1
+rm -f $prog.c
+cd $odir
+
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+set -e
+mdconfig -a -t swap -s 6g -u $mdstart
+newfs $newfs_flags -n /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+wd="$mntpoint/$prog.dir"
+mkdir -p $wd
+dd if=/dev/zero of=$wd/file bs=1m count=5k status=none
+
+[ `jot -r 1 1 100` -le 25 ] &&
+ ../testcases/swap/swap -t 10m -i 20 > /dev/null 2>&1 &
+cd $wd
+touch $wd/out
+/tmp/$prog $wd/file $wd/out; s=$?
+cd $odir
+while pkill swap; do :; done
+wait
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -rf /tmp/$prog $wd
+exit $s
+
+EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <machine/atomic.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sched.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+#define DONE 1
+#define MAXBLK (100 * 1024 * 1024)
+#define MAXPROC 32
+#define MAXSIZ (5LL * 1024 * 1024 *1024)
+#define RUNTIME (5 * 60)
+#define SYNC 0
+
+static volatile u_int *share;
+static int parallel;
+
+static char *file, *file2;
+
+static off_t
+newpos(int lng)
+{
+ off_t p;
+
+ do {
+ arc4random_buf(&p, sizeof(p));
+ p = p & 0xfffffff;
+ } while (p + lng > MAXSIZ);
+ return (p);
+}
+
+static void
+test(int indx, int num)
+{
+ off_t pos, pos2;
+ ssize_t i, l;
+ time_t start;
+ int fd, fd2, n;
+
+ atomic_add_int(&share[SYNC], 1);
+ while (share[SYNC] != (unsigned int)parallel)
+ sched_yield();
+
+ n = 0;
+ start = time(NULL);
+ while (share[DONE] != (unsigned int)parallel) {
+ setproctitle("test(%d) num %d, n %d", indx, num, n);
+ if ((fd = open(file, O_RDWR)) == -1)
+ err(1, "open(%s)", file);
+ if ((fd2 = open(file2, O_RDWR)) == -1)
+ err(1, "open(%s)", file2);
+
+ for (i = 0; i < arc4random() % 512; i++) {
+ l = arc4random() % MAXBLK + 1;
+ pos = newpos(l);
+ pos2 = newpos(l);
+ if (copy_file_range(fd, &pos, fd2, &pos2, l, 0) == -1)
+ err(1, "copy_file_range()");
+ }
+
+ close(fd2);
+ close(fd);
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+ if (time(NULL) - start >= RUNTIME * 4) {
+ fprintf(stderr, "test(%d), %d Timed out\n", indx, num);
+ break;
+ }
+ }
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+
+ _exit(0);
+}
+
+void
+setup(void)
+{
+
+ parallel = arc4random() % MAXPROC + 1;
+}
+
+int
+main(int argc, char *argv[])
+{
+ size_t len;
+ time_t start;
+ int e, i, n, *pids, status;
+
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <in file> <out file>\n", argv[0]);
+ _exit(1);
+ }
+ e = 0;
+ file = argv[1];
+ file2 = argv[2];
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ n = 0;
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME && e == 0) {
+ setup();
+
+ pids = malloc(sizeof(pid_t) * parallel);
+ share[SYNC] = share[DONE] = 0;
+ for (i = 0; i < parallel; i++) {
+ if ((pids[i] = fork()) == 0)
+ test(i, n);
+ }
+ for (i = 0; i < parallel; i++) {
+ if (waitpid(pids[i], &status, 0) != pids[i])
+ err(1, "waitpid %d", pids[i]);
+ e += status == 0 ? 0 : 1;
+ }
+ n++;
+ n = n % 10;
+ free(pids);
+ }
+
+ return (e);
+}
diff --git a/tools/test/stress2/misc/readdir.sh b/tools/test/stress2/misc/readdir.sh
index 8616a8a40206..425295631181 100755
--- a/tools/test/stress2/misc/readdir.sh
+++ b/tools/test/stress2/misc/readdir.sh
@@ -45,19 +45,19 @@ mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
mount -t tmpfs tmpfs $mntpoint
-echo "Testing tmpfs(5)"
+echo "Testing tmpfs(4)"
cp -a /usr/include $mntpoint
/tmp/readdir $mntpoint
umount $mntpoint
-echo "Testing fdescfs(5)"
+echo "Testing fdescfs(4)"
kldstat -v | grep -q fdescfs || { kldload fdescfs.ko; loaded=1; }
mount -t fdescfs null /dev/fd
/tmp/readdir /dev/fd
umount /dev/fd
[ $unload ] && kldunload fdescfs.ko
-echo "Testing procfs(5)"
+echo "Testing procfs(4)"
mount -t procfs procfs $mntpoint
/tmp/readdir $mntpoint
umount $mntpoint
@@ -89,7 +89,7 @@ umount $mntpoint
mdconfig -d -u $mdstart
mount -t nullfs /bin $mntpoint
-echo "Testing nullfs(5)"
+echo "Testing nullfs(4)"
/tmp/readdir $mntpoint
umount $mntpoint
diff --git a/tools/test/stress2/misc/rename16.sh b/tools/test/stress2/misc/rename16.sh
new file mode 100755
index 000000000000..09e796299794
--- /dev/null
+++ b/tools/test/stress2/misc/rename16.sh
@@ -0,0 +1,261 @@
+#!/bin/sh
+
+# Copy of suj30.sh but with SU instead of SUJ
+
+# Rename test scenario by Andrey Zonov <zont@FreeBSD.org>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+here=`pwd`
+log=/tmp/$prog.sh.log
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > $prog.c
+mycc -o $prog -Wall -Wextra -O2 $prog.c -lpthread
+rm -f $prog.c
+
+mount | grep "on $mntpoint " | grep -q md$mdstart && umount $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 8g -u $mdstart
+newfs -U md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+
+t=`date +%s`
+/tmp/$prog $mntpoint/test-0 100000
+t=$((`date +%s` - t))
+[ $t -gt 60 ] && n=20000 || n=100000
+
+for i in `jot 10`; do
+ /tmp/$prog $mntpoint/test-$i $n &
+done
+wait
+
+while mount | grep -q $mntpoint; do
+ umount $mntpoint || sleep 1
+done
+fsck -fy /dev/md$mdstart > $log
+grep -q "WAS MODIFIED" $log && s=1 || s=0
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog $log
+exit $s
+EOF
+/*
+ * Andrey Zonov (c) 2012
+ *
+ * compile as `cc -o rename rename.c -lpthread'
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/queue.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#ifdef __FreeBSD__
+#include <pthread_np.h>
+#define __NP__
+#endif
+#include <sched.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#define LOCK(x) pthread_mutex_lock(&x.mtx)
+#define UNLOCK(x) pthread_mutex_unlock(&x.mtx)
+#define SIGNAL(x) pthread_cond_signal(&x.wait)
+#define WAIT(x) pthread_cond_wait(&x.wait, &x.mtx)
+
+int max;
+int exited;
+char *dirname1;
+char *dirname2;
+
+struct file {
+ char *name;
+ STAILQ_ENTRY(file) next;
+};
+
+struct files {
+ pthread_mutex_t mtx;
+ pthread_cond_t wait;
+ STAILQ_HEAD(, file) list;
+};
+
+static struct files newfiles;
+static struct files renamedfiles;
+
+void *loop_create(void *arg __unused);
+void *loop_rename(void *arg __unused);
+void *loop_unlink(void *arg __unused);
+
+int
+main(int argc, char **argv)
+{
+ int i;
+ int rc;
+ pthread_t tid[3];
+
+ if (argc != 3)
+ errx(1, "usage: pthread_count <dirname> <max>");
+
+ asprintf(&dirname1, "%s.1", argv[1]);
+ asprintf(&dirname2, "%s.2", argv[1]);
+ if (mkdir(dirname1, 0755) == -1)
+ err(1, "mkdir(%s)", dirname1);
+ if (mkdir(dirname2, 0755) == -1)
+ err(1, "mkdir(%s)", dirname2);
+ max = atoi(argv[2]);
+
+ STAILQ_INIT(&newfiles.list);
+ STAILQ_INIT(&renamedfiles.list);
+
+ rc = pthread_mutex_init(&newfiles.mtx, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_init()");
+ rc = pthread_cond_init(&newfiles.wait, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_init()");
+ rc = pthread_mutex_init(&renamedfiles.mtx, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_init()");
+ rc = pthread_cond_init(&renamedfiles.wait, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_init()");
+
+ rc = pthread_create(&tid[0], NULL, loop_create, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_create()");
+ rc = pthread_create(&tid[1], NULL, loop_rename, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_create()");
+ rc = pthread_create(&tid[2], NULL, loop_unlink, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_create()");
+
+ for (i = 0; i < 3; i++) {
+ rc = pthread_join(tid[i], NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_join(%d)", i);
+ }
+
+ rc = pthread_mutex_destroy(&newfiles.mtx);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_destroy(newfiles)");
+ rc = pthread_cond_destroy(&newfiles.wait);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_destroy(newfiles)");
+ rc = pthread_mutex_destroy(&renamedfiles.mtx);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_destroy(renamedfiles)");
+ rc = pthread_cond_destroy(&renamedfiles.wait);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_destroy(renamedfiles)");
+ rmdir(dirname1);
+ rmdir(dirname2);
+ free(dirname1);
+ free(dirname2);
+
+ exit(0);
+}
+
+void *
+loop_create(void *arg __unused)
+{
+ int i;
+ struct file *file;
+
+#ifdef __NP__
+ pthread_set_name_np(pthread_self(), __func__);
+#endif
+
+ for (i = 0; i < max; i++) {
+ file = malloc(sizeof(*file));
+ asprintf(&file->name, "%s/filename_too-long:%d", dirname1, i);
+ if (mkdir(file->name, 0666) == -1) {
+ warn("mkdir(%s)", file->name);
+ free(file->name);
+ free(file);
+ break;
+ }
+ LOCK(newfiles);
+ STAILQ_INSERT_TAIL(&newfiles.list, file, next);
+ UNLOCK(newfiles);
+ SIGNAL(newfiles);
+ }
+ exited = 1;
+ SIGNAL(newfiles);
+ pthread_exit(NULL);
+}
+
+void *
+loop_rename(void *arg __unused)
+{
+ char *filename, *newname;
+ struct file *file;
+
+#ifdef __NP__
+ pthread_set_name_np(pthread_self(), __func__);
+#endif
+
+ for ( ;; ) {
+ LOCK(newfiles);
+ while (STAILQ_EMPTY(&newfiles.list) && exited < 1)
+ WAIT(newfiles);
+ if (STAILQ_EMPTY(&newfiles.list) && exited == 1) {
+ UNLOCK(newfiles);
+ break;
+ }
+ file = STAILQ_FIRST(&newfiles.list);
+ STAILQ_REMOVE_HEAD(&newfiles.list, next);
+ UNLOCK(newfiles);
+ filename = strrchr(file->name, '/');
+ asprintf(&newname, "%s/%s", dirname2, filename);
+ if (rename(file->name, newname) == -1)
+ err(1, "rename(%s, %s)", file->name, newname);
+ free(file->name);
+ file->name = newname;
+ LOCK(renamedfiles);
+ STAILQ_INSERT_TAIL(&renamedfiles.list, file, next);
+ UNLOCK(renamedfiles);
+ SIGNAL(renamedfiles);
+ }
+ exited = 2;
+ SIGNAL(renamedfiles);
+ pthread_exit(NULL);
+}
+
+void *
+loop_unlink(void *arg __unused)
+{
+ struct file *file;
+
+#ifdef __NP__
+ pthread_set_name_np(pthread_self(), __func__);
+#endif
+
+ for ( ;; ) {
+ LOCK(renamedfiles);
+ while (STAILQ_EMPTY(&renamedfiles.list) && exited < 2)
+ WAIT(renamedfiles);
+ if (STAILQ_EMPTY(&renamedfiles.list) && exited == 2) {
+ UNLOCK(renamedfiles);
+ break;
+ }
+ file = STAILQ_FIRST(&renamedfiles.list);
+ STAILQ_REMOVE_HEAD(&renamedfiles.list, next);
+ UNLOCK(renamedfiles);
+ rmdir(file->name);
+ free(file->name);
+ free(file);
+ }
+ pthread_exit(NULL);
+}
diff --git a/tools/test/stress2/misc/rename3.sh b/tools/test/stress2/misc/rename3.sh
index c7ce91f0d359..aa4a3754bfab 100755
--- a/tools/test/stress2/misc/rename3.sh
+++ b/tools/test/stress2/misc/rename3.sh
@@ -36,7 +36,8 @@
# Test scenario by Tor Egge
root=/tmp
-for i in `jot 10000`; do
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 60 ]; do
rm -rf $root/a
mkdir -p $root/a/b/c/d/e/f/g
mkdir -p $root/a/b/c/d/e/f/z
diff --git a/tools/test/stress2/misc/rename7.sh b/tools/test/stress2/misc/rename7.sh
index 9f6954916411..fdaa8f575117 100755
--- a/tools/test/stress2/misc/rename7.sh
+++ b/tools/test/stress2/misc/rename7.sh
@@ -122,7 +122,8 @@ int
main(void)
{
pid_t wpid, spid;
- int e, fd, i, status;
+ time_t start;
+ int e, fd, status;
if ((wpid = fork()) == 0)
r1();
@@ -132,7 +133,8 @@ main(void)
setproctitle("main");
e = 0;
- for (i = 0; i < 800000; i++) {
+ start = time(NULL);
+ while (time(NULL) - start < 60) {
if ((fd = open(logfile, O_RDWR | O_CREAT | O_TRUNC, 0644)) == -1)
warn("creat(%s)", logfile);
close(fd);
diff --git a/tools/test/stress2/misc/rmdir.sh b/tools/test/stress2/misc/rmdir.sh
new file mode 100755
index 000000000000..2df62a5576a8
--- /dev/null
+++ b/tools/test/stress2/misc/rmdir.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Based on msdos11.sh
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdatomic.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+static _Atomic(int) *share;
+
+#define PARALLEL 3
+#define RUNTIME (2 * 60)
+#define SYNC 0
+
+static void
+test(void)
+{
+ time_t start;
+
+ atomic_fetch_add(&share[SYNC], 1);
+ while (share[SYNC] != PARALLEL)
+ ;
+ start = time(NULL);
+ while ((time(NULL) - start) < 30) {
+ mkdir("a", 0755);
+ rename("a", "b");
+ rmdir("b");
+ }
+
+ _exit(0);
+}
+
+int
+main(void)
+{
+ pid_t pids[PARALLEL];
+ size_t len;
+ time_t start;
+ int e, i, status;
+
+ e = 0;
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME && e == 0) {
+ share[SYNC] = 0;
+ for (i = 0; i < PARALLEL; i++) {
+ if ((pids[i] = fork()) == 0)
+ test();
+ if (pids[i] == -1)
+ err(1, "fork()");
+ }
+ for (i = 0; i < PARALLEL; i++) {
+ if (waitpid(pids[i], &status, 0) == -1)
+ err(1, "waitpid(%d)", pids[i]);
+ if (status != 0) {
+ if (WIFSIGNALED(status))
+ fprintf(stderr,
+ "pid %d exit signal %d\n",
+ pids[i], WTERMSIG(status));
+ }
+ e += status == 0 ? 0 : 1;
+ }
+ }
+
+ return (e);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+set -e
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 512m -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+here=`pwd`
+(cd $here/../testcases/swap; ./swap -t 2m -i 20 -l 100 > /dev/null) &
+sleep .5
+
+cd $mntpoint
+/tmp/$prog; s=$?
+cd -
+wait
+umount $mntpoint
+fsck_ffs /dev/md$mdstart > $log 2>&1
+grep -Eq "WAS MODIFIED" $log && { cat $log; s=32; }
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog /tmp/$prog.c $log
+exit $s
diff --git a/tools/test/stress2/misc/rsync.sh b/tools/test/stress2/misc/rsync.sh
new file mode 100755
index 000000000000..fa52f98c6f02
--- /dev/null
+++ b/tools/test/stress2/misc/rsync.sh
@@ -0,0 +1,49 @@
+#/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+[ -f "`which rsync`" ] || exit 0
+[ -d /usr/src/sys ] || exit 0
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 15g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+mkdir -p $mntpoint/usr/src
+rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+if [ $s -eq 0 ]; then
+ (cd $mntpoint; umount $mntpoint > /dev/null 2>&1) # sync
+ rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+fi
+
+if [ $s -eq 0 ]; then
+ diff -rq /usr/src/sys $mntpoint/usr/src/sys > $log; s=$?
+ [ $s -ne 0 ] &&
+ { echo "/usr/src $mntpoint/usr/src differ!"; head -10 $log; }
+fi
+
+while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint || break
+ sleep 1
+done
+if [ $s -eq 0 ]; then
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep -Eq "WAS MODIFIED" $log && { cat $log; s=1; }
+fi
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/rsync2.sh b/tools/test/stress2/misc/rsync2.sh
new file mode 100755
index 000000000000..882753fe596f
--- /dev/null
+++ b/tools/test/stress2/misc/rsync2.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Test scenario by se@ from https://reviews.freebsd.org/D43951
+
+set -u
+MDUNIT=10
+FS=/mnt/test
+mdconfig -u $MDUNIT -t malloc -s 512m
+newfs_msdos -c 8 -F 32 /dev/md$MDUNIT
+mkdir -p $FS
+mount -t msdos /dev/md$MDUNIT $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+umount $FS
+fsck_msdosfs -y /dev/md$MDUNIT; s=$?
+exit $s
diff --git a/tools/test/stress2/misc/rsync3.sh b/tools/test/stress2/misc/rsync3.sh
new file mode 100755
index 000000000000..1d77bdfbcaa5
--- /dev/null
+++ b/tools/test/stress2/misc/rsync3.sh
@@ -0,0 +1,43 @@
+#/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# tmpfs version of rsync.sh
+
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+[ -f "`which rsync`" ] || exit 0
+[ -d /usr/src/sys ] || exit 0
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mount -t tmpfs dummy $mntpoint
+set +e
+
+mkdir -p $mntpoint/usr/src
+rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+if [ $s -eq 0 ]; then
+ rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+fi
+
+if [ $s -eq 0 ]; then
+ diff -rq /usr/src/sys $mntpoint/usr/src/sys > $log; s=$?
+ [ $s -ne 0 ] &&
+ { echo "/usr/src $mntpoint/usr/src differ!"; head -10 $log; }
+fi
+
+while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint || break
+ sleep 1
+done
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/seekhole2.sh b/tools/test/stress2/misc/seekhole2.sh
new file mode 100755
index 000000000000..e3f08779061d
--- /dev/null
+++ b/tools/test/stress2/misc/seekhole2.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# A SEEK_HOLE / SEEK_DATA test scenario, FFS version
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+exp=/tmp/$prog.exp
+here=`pwd`
+log=/tmp/$prog.log
+
+cc -o /tmp/lsholes -Wall -Wextra -O2 $here/../tools/lsholes.c | exit 1
+cat > $exp <<EXP
+Min hole size is 32768, file size is 524288000.
+data #1 @ 0, size=32768)
+hole #2 @ 32768, size=32768
+data #3 @ 65536, size=32768)
+hole #4 @ 98304, size=32768
+data #5 @ 131072, size=32768)
+hole #6 @ 163840, size=524091392
+data #7 @ 524255232, size=32768)
+hole #8 @ 524288000, size=0
+EXP
+
+set -eu
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 2g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+file=$mntpoint/file
+copy=$mntpoint/copy
+truncate -s 500m $file
+bs=`getconf MIN_HOLE_SIZE $file`
+printf "\001" | dd of=$file seek=$((0*bs)) bs=1 count=1 conv=notrunc status=none
+printf "\002" | dd of=$file seek=$((2*bs)) bs=1 count=1 conv=notrunc status=none
+printf "\003" | dd of=$file seek=$((4*bs)) bs=1 count=1 conv=notrunc status=none
+s1=0
+s2=0
+s3=0
+/tmp/lsholes $file > $log 2>&1; s1=$?
+
+sdiff -s $exp $log || s2=1
+
+$here/../testcases/swap/swap -t 2m -i 20 -h > /dev/null &
+sleep 10
+cp $file $copy
+while pkill swap; do :; done
+wait
+cmp $file $copy || { echo "copy error"; s3=1; }
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/lsholes $exp $log
+exit $((s1 + s2 + s3))
diff --git a/tools/test/stress2/misc/sendfile5.sh b/tools/test/stress2/misc/sendfile5.sh
index c81515003a13..933e4f94a73c 100755
--- a/tools/test/stress2/misc/sendfile5.sh
+++ b/tools/test/stress2/misc/sendfile5.sh
@@ -52,7 +52,7 @@ mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
kldstat | grep -q tmpfs.ko || loaded=1
mount -t tmpfs tmpfs $mntpoint
-echo "Testing tmpfs(5)"
+echo "Testing tmpfs(4)"
cp $diskimage $mntpoint
/tmp/sendfile5 $mntpoint/$file
umount $mntpoint
@@ -68,7 +68,7 @@ umount $mntpoint
mdconfig -d -u $mdstart
mount -t nullfs $dir $mntpoint
-echo "Testing nullfs(5)"
+echo "Testing nullfs(4)"
/tmp/sendfile5 $mntpoint/$file
umount $mntpoint
diff --git a/tools/test/stress2/misc/sigreturn3.sh b/tools/test/stress2/misc/sigreturn3.sh
index fbb19d87cb6e..271ade287e9a 100755
--- a/tools/test/stress2/misc/sigreturn3.sh
+++ b/tools/test/stress2/misc/sigreturn3.sh
@@ -56,6 +56,7 @@ cat > /tmp/$prog.c <<EOF
#include <fcntl.h>
#include <libutil.h>
#include <pthread.h>
+#include <pthread_np.h>
#include <pwd.h>
#include <signal.h>
#include <stdio.h>
@@ -92,10 +93,9 @@ static void *
calls(void *arg __unused)
{
time_t start;
- int i;
start = time(NULL);
- for (i = 0; time(NULL) - start < 10; i++) {
+ while (time(NULL) - start < 10) {
arc4random_buf(r, sizeof(r));
alarm(1);
syscall(SYS_sigreturn, r);
@@ -176,7 +176,6 @@ cc -o $prog -Wall -Wextra -O0 $prog.c -lpthread || exit 1
start=`date +%s`
while [ $((`date +%s` - start)) -lt 300 ]; do
./$prog > /dev/null 2>&1
- date +%T
done
rm -f /tmp/$prog /tmp/$ptog.c /tmp/$prog.core
exit 0
diff --git a/tools/test/stress2/misc/sigreturn4.sh b/tools/test/stress2/misc/sigreturn4.sh
index f7916dc3b1ee..9e2a6a32715c 100755
--- a/tools/test/stress2/misc/sigreturn4.sh
+++ b/tools/test/stress2/misc/sigreturn4.sh
@@ -110,10 +110,10 @@ calls(void *arg __unused)
{
time_t start;
ucontext_t uc;
- int i, n;
+ int n;
start = time(NULL);
- for (i = 0; time(NULL) - start < 10; i++) {
+ while (time(NULL) - start < 10) {
n = 0;
if (getcontext(&uc) == -1)
err(1, "getcontext");
@@ -202,7 +202,6 @@ cc -o $prog -Wall -Wextra -O0 $prog.c -lpthread || exit 1
start=`date +%s`
while [ $((`date +%s` - start)) -lt 300 ]; do
./$prog > /dev/null 2>&1
- date +%T
done
rm -f /tmp/$prog /tmp/$ptog.c /tmp/$prog.core
exit 0
diff --git a/tools/test/stress2/misc/softupdate.sh b/tools/test/stress2/misc/softupdate.sh
index ecf7c5d04e9c..37f819579f83 100755
--- a/tools/test/stress2/misc/softupdate.sh
+++ b/tools/test/stress2/misc/softupdate.sh
@@ -47,6 +47,7 @@ mdconfig -a -t vnode -f $D -u $mdstart
for mode in "" "-U"; do
printf "newfs -O2 $mode /dev/md${mdstart}\n\n"
newfs -O2 $mode /dev/md$mdstart > /dev/null 2>&1
+ [ "$mode" = "" ] && tunefs -n disable md$mdstart
mount /dev/md$mdstart $mntpoint
for i in `jot 5`; do
diff --git a/tools/test/stress2/misc/swapoff6.sh b/tools/test/stress2/misc/swapoff6.sh
new file mode 100755
index 000000000000..b6ab08784f87
--- /dev/null
+++ b/tools/test/stress2/misc/swapoff6.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# A swap test scenario, using swapoff(8) and sort(1) for VM pressure
+
+# Out of free pages seen:://people.freebsd.org/~pho/stress/log/log0540.txt
+
+. ../default.cfg
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+[ `swapinfo | wc -l` -eq 1 ] && exit 0
+set -u
+nmax=`sysctl -n hw.ncpu`
+[ $nmax -gt 4 ] && nmax=4
+
+for i in `jot $nmax`; do
+ timeout -k 2m 1m sort /dev/zero &
+ sleep .`jot -r 1 1 9`
+done
+while [ `swapinfo | tail -1 | awk '{sub("%","");print $NF}'` -lt 2 ]; do sleep 1; done
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ while ! swapoff -a > /dev/null 2>&1; do sleep .1; done
+ swapon -a > /dev/null
+ ncur=`pgrep sort | wc -l`
+ if [ $ncur -lt $nmax ]; then
+ echo "Starting $((nmax - ncur)) sort"
+ for i in `jot $((nmax - ncur))`; do
+ timeout -k 2m 1m sort /dev/zero &
+ sleep .`jot -r 1 1 9`
+ done
+ fi
+done
+pkill -9 sort
+wait
+exit 0
diff --git a/tools/test/stress2/misc/symlink.sh b/tools/test/stress2/misc/symlink.sh
index 47257aa92a24..1d30636d6b25 100755
--- a/tools/test/stress2/misc/symlink.sh
+++ b/tools/test/stress2/misc/symlink.sh
@@ -71,6 +71,7 @@ tst() {
s=0
for i in "" "-U" "-j"; do
newfs $i /dev/md$mdstart > /dev/null 2>&1
+ [ "$i" = "" ] && tunefs -n disable md$mdstart
mount /dev/md$mdstart $mntpoint
t1=`date +%s`
diff --git a/tools/test/stress2/misc/symlink2.sh b/tools/test/stress2/misc/symlink2.sh
index f13065badb4a..210702defe4a 100755
--- a/tools/test/stress2/misc/symlink2.sh
+++ b/tools/test/stress2/misc/symlink2.sh
@@ -53,6 +53,7 @@ for i in "" "-U"; do
[ "$i" = "-U" -a "$newfs_flags" != "-U" ] && continue
echo "newfs $i /dev/md$mdstart"
newfs $i /dev/md$mdstart > /dev/null 2>&1
+ [ "$i" = "" ] && tunefs -n disable md$mdstart
mount /dev/md$mdstart $mntpoint
mkdir $mntpoint/dir
diff --git a/tools/test/stress2/misc/symlink5.sh b/tools/test/stress2/misc/symlink5.sh
index 55f71e209791..9332f906a3e0 100755
--- a/tools/test/stress2/misc/symlink5.sh
+++ b/tools/test/stress2/misc/symlink5.sh
@@ -79,6 +79,7 @@ for i in "" "-U"; do
t1=`date +%s`
echo "newfs $i /dev/md$mdstart"
newfs $i /dev/md$mdstart > /dev/null 2>&1
+ [ "$i" = "" ] && tunefs -n disable md$mdstart
mount /dev/md$mdstart $mntpoint
tst; s=$?
diff --git a/tools/test/stress2/misc/syzkaller71.sh b/tools/test/stress2/misc/syzkaller71.sh
new file mode 100755
index 000000000000..58cf7eeb5825
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller71.sh
@@ -0,0 +1,171 @@
+#!/bin/sh
+
+# panic: Counter goes negative
+# cpuid = 4
+# time = 1694583637
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01bac2a960
+# vpanic() at vpanic+0x132/frame 0xfffffe01bac2aa90
+# panic() at panic+0x43/frame 0xfffffe01bac2aaf0
+# sctp_inpcb_free() at sctp_inpcb_free+0xf28/frame 0xfffffe01bac2ab60
+# sctp_close() at sctp_close+0xc0/frame 0xfffffe01bac2abb0
+# soclose() at soclose+0x154/frame 0xfffffe01bac2ac10
+# _fdrop() at _fdrop+0x1b/frame 0xfffffe01bac2ac30
+# closef() at closef+0x1e3/frame 0xfffffe01bac2acc0
+# fdescfree() at fdescfree+0x41a/frame 0xfffffe01bac2ad80
+# exit1() at exit1+0x4a1/frame 0xfffffe01bac2adf0
+# sys_exit() at sys_exit+0xd/frame 0xfffffe01bac2ae00
+# amd64_syscall() at amd64_syscall+0x14f/frame 0xfffffe01bac2af30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01bac2af30
+# --- syscall (1, FreeBSD ELF64, exit), rip = 0x824db2f4a, rsp = 0x8211862b8, rbp = 0x8211862d0 ---
+# KDB: enter: pani[ thread pid 9676 tid 346853 ]
+# Stopped at kdb_enter+0x32: movq $0,0xe27583(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n265298-10db91ecec98b1: Tue Sep 12 12:16:45 CEST 2023
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+uname -p | grep -Eq "amd64" || exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=d8a54d453b8e643b807a5c3c56728561f01c0fde
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+d4e1d30d578891245f59@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static unsigned long long procid;
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter __unused = 0;
+ for (;; iter++) {
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ sleep_ms(1);
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ }
+}
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+void execute_one(void)
+{
+ intptr_t res = 0;
+ res = syscall(SYS_socket, 0x1cul, 1ul, 0x84);
+ if (res != -1)
+ r[0] = res;
+ *(uint8_t*)0x20000040 = 0x1c;
+ *(uint8_t*)0x20000041 = 0x1c;
+ *(uint16_t*)0x20000042 = htobe16(0x4e22 + procid * 4);
+ *(uint32_t*)0x20000044 = 0;
+ *(uint64_t*)0x20000048 = htobe64(0);
+ *(uint64_t*)0x20000050 = htobe64(1);
+ *(uint32_t*)0x20000058 = 0;
+ syscall(SYS_bind, r[0], 0x20000040ul, 0x1cul);
+ *(uint8_t*)0x20000180 = 0x1c;
+ *(uint8_t*)0x20000181 = 0x1c;
+ *(uint16_t*)0x20000182 = htobe16(0x4e22 + procid * 4);
+ *(uint32_t*)0x20000184 = 0;
+ *(uint64_t*)0x20000188 = htobe64(0);
+ *(uint64_t*)0x20000190 = htobe64(1);
+ *(uint32_t*)0x20000198 = 0;
+ syscall(SYS_connect, r[0], 0x20000180ul, 0x1cul);
+ *(uint32_t*)0x20000300 = 0x80000021;
+ syscall(SYS_setsockopt, r[0], 0x84, 0x1b, 0x20000300ul, 4ul);
+ memset((void*)0x20000480, 163, 1);
+ syscall(SYS_sendto, r[0], 0x20000480ul, 0xfffffe5cul, 0x188ul, 0ul, 0ul);
+ *(uint16_t*)0x200000c0 = 0;
+ *(uint16_t*)0x200000c2 = 0x200;
+ *(uint32_t*)0x200000c4 = 0;
+ *(uint32_t*)0x200000c8 = 0;
+ *(uint32_t*)0x200000cc = 0;
+ syscall(SYS_setsockopt, r[0], 0x84, 0x21, 0x200000c0ul, 0x10ul);
+ syscall(SYS_shutdown, r[0], 0ul);
+ syscall(SYS_writev, r[0], 0ul, 0ul);
+}
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ for (procid = 0; procid < 4; procid++) {
+ if (fork() == 0) {
+ loop();
+ }
+ }
+ sleep(1000000);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+mount | grep -q "on $mntpoint " && umount $mntpoint
+mount -o size=10m -t tmpfs dummy $mntpoint
+
+cd $mntpoint
+for i in `jot 20`; do
+ timeout 3m /tmp/$prog &
+done
+wait
+cd -
+
+umount $mntpoint
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller72.sh b/tools/test/stress2/misc/syzkaller72.sh
new file mode 100755
index 000000000000..6dd69987a913
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller72.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+# panic: sbflush_internal: ccc 0 mb 0xfffff8004eee95f0 mbcnt 0
+# cpuid = 9
+# time = 1704448830
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe016a2ccb70
+# vpanic() at vpanic+0x131/frame 0xfffffe016a2ccca0
+# panic() at panic+0x43/frame 0xfffffe016a2ccd00
+# sbrelease_internal() at sbrelease_internal+0x7c/frame 0xfffffe016a2ccd20
+# sbrelease() at sbrelease+0x5e/frame 0xfffffe016a2ccd50
+# sorflush() at sorflush+0x66/frame 0xfffffe016a2ccd70
+# soshutdown() at soshutdown+0x105/frame 0xfffffe016a2ccdb0
+# kern_shutdown() at kern_shutdown+0x60/frame 0xfffffe016a2ccdf0
+# ia32_syscall() at ia32_syscall+0x154/frame 0xfffffe016a2ccf30
+# int0x80_syscall_common() at int0x80_syscall_common+0x9c/frame 0xffffdb44
+# KDB: enter: panic
+# [ thread pid 4927 tid 100275 ]
+# Stopped at : movq $0,0xe37212(%rip)
+# db> x/s version
+# FreeBSD 15.0-CURRENT #0 main-n267418-24cd5c26fe3e: Fri Jan 5 08:21:43 CET 2024
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=a9e90e96743f3e20b4a66d9d0d4c08c57ea8cc7f
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+a58e1615881c01a51653@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x10000000, /*len=*/0x1000000, /*prot=*/7,
+ /*flags=*/0x1012, /*fd=*/-1, /*offset=*/0);
+ intptr_t res = 0;
+ res = syscall(SYS_socket, /*domain=*/0x26, /*type=*/2, /*proto=*/0);
+ if (res != -1)
+ r[0] = res;
+ syscall(SYS_shutdown, /*fd=*/(intptr_t)r[0], /*how=*/0);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -m32 -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ timeout 3m /tmp/$prog
+done
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller73.sh b/tools/test/stress2/misc/syzkaller73.sh
new file mode 100755
index 000000000000..776ace385f21
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller73.sh
@@ -0,0 +1,537 @@
+#!/bin/sh
+
+# No issues seen (Looks a bit like syzkaller43.sh)
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=cf4c0a08d26692dc8f22b0fcc50db08fd17dd709
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <dirent.h>
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+#ifndef SYS_aio_writev
+#define SYS_aio_writev 578
+#endif
+
+static __thread int clone_ongoing;
+static __thread int skip_segv;
+static __thread jmp_buf segv_env;
+
+static void segv_handler(int sig, siginfo_t* info, void* ctx __unused)
+{
+ if (__atomic_load_n(&clone_ongoing, __ATOMIC_RELAXED) != 0) {
+ exit(sig);
+ }
+ uintptr_t addr = (uintptr_t)info->si_addr;
+ const uintptr_t prog_start = 1 << 20;
+ const uintptr_t prog_end = 100 << 20;
+ int skip = __atomic_load_n(&skip_segv, __ATOMIC_RELAXED) != 0;
+ int valid = addr < prog_start || addr > prog_end;
+ if (sig == SIGBUS)
+ valid = 1;
+ if (skip && valid) {
+ _longjmp(segv_env, 1);
+ }
+ exit(sig);
+}
+
+static void install_segv_handler(void)
+{
+ struct sigaction sa;
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_sigaction = segv_handler;
+ sa.sa_flags = SA_NODEFER | SA_SIGINFO;
+ sigaction(SIGSEGV, &sa, NULL);
+ sigaction(SIGBUS, &sa, NULL);
+}
+
+#define NONFAILING(...) \
+ ({ \
+ int ok = 1; \
+ __atomic_fetch_add(&skip_segv, 1, __ATOMIC_SEQ_CST); \
+ if (_setjmp(segv_env) == 0) { \
+ __VA_ARGS__; \
+ } else \
+ ok = 0; \
+ __atomic_fetch_sub(&skip_segv, 1, __ATOMIC_SEQ_CST); \
+ ok; \
+ })
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void use_temporary_dir(void)
+{
+ char tmpdir_template[] = "./syzkaller.XXXXXX";
+ char* tmpdir = mkdtemp(tmpdir_template);
+ if (!tmpdir)
+ exit(1);
+ if (chmod(tmpdir, 0777))
+ exit(1);
+ if (chdir(tmpdir))
+ exit(1);
+}
+
+static void reset_flags(const char* filename)
+{
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ st.st_flags &= ~(SF_NOUNLINK | UF_NOUNLINK | SF_IMMUTABLE | UF_IMMUTABLE |
+ SF_APPEND | UF_APPEND);
+ if (lchflags(filename, st.st_flags))
+ exit(1);
+}
+static void __attribute__((noinline)) remove_dir(const char* dir)
+{
+ DIR* dp = opendir(dir);
+ if (dp == NULL) {
+ if (errno == EACCES) {
+ if (rmdir(dir))
+ exit(1);
+ return;
+ }
+ exit(1);
+ }
+ struct dirent* ep = 0;
+ while ((ep = readdir(dp))) {
+ if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
+ continue;
+ char filename[FILENAME_MAX];
+ snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name);
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ if (S_ISDIR(st.st_mode)) {
+ remove_dir(filename);
+ continue;
+ }
+ if (unlink(filename)) {
+ if (errno == EPERM) {
+ reset_flags(filename);
+ reset_flags(dir);
+ if (unlink(filename) == 0)
+ continue;
+ }
+ exit(1);
+ }
+ }
+ closedir(dp);
+ while (rmdir(dir)) {
+ if (errno == EPERM) {
+ reset_flags(dir);
+ if (rmdir(dir) == 0)
+ break;
+ }
+ exit(1);
+ }
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static void sandbox_common()
+{
+ struct rlimit rlim;
+ rlim.rlim_cur = rlim.rlim_max = 128 << 20;
+ setrlimit(RLIMIT_AS, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 8 << 20;
+ setrlimit(RLIMIT_MEMLOCK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_FSIZE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_STACK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 0;
+ setrlimit(RLIMIT_CORE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 256;
+ setrlimit(RLIMIT_NOFILE, &rlim);
+}
+
+static void loop();
+
+static int do_sandbox_none(void)
+{
+ sandbox_common();
+ loop();
+ return 0;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void execute_one(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 24; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter = 0;
+ for (;; iter++) {
+ char cwdbuf[32];
+ sprintf(cwdbuf, "./%d", iter);
+ if (mkdir(cwdbuf, 0777))
+ exit(1);
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ if (chdir(cwdbuf))
+ exit(1);
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ remove_dir(cwdbuf);
+ }
+}
+
+uint64_t r[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ res = syscall(SYS_socket, /*domain=AF_INET6*/ 0x1cul,
+ /*type=SOCK_STREAM*/ 1ul, /*proto=*/0);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ NONFAILING(*(uint32_t*)0x200000c0 = 0x101);
+ syscall(SYS_setsockopt, /*fd=*/r[0], /*level=*/0xffff,
+ /*optname=SO_SNDBUF*/ 0x1001, /*optval=*/0x200000c0ul,
+ /*optlen=*/4ul);
+ break;
+ case 2:
+ NONFAILING(*(uint8_t*)0x20000140 = 0x1c);
+ NONFAILING(*(uint8_t*)0x20000141 = 0x1c);
+ NONFAILING(*(uint16_t*)0x20000142 = htobe16(0x4e23));
+ NONFAILING(*(uint32_t*)0x20000144 = 0);
+ NONFAILING(memset((void*)0x20000148, 0, 16));
+ NONFAILING(*(uint32_t*)0x20000158 = 0);
+ syscall(SYS_bind, /*fd=*/r[0], /*addr=*/0x20000140ul, /*addrlen=*/0x1cul);
+ break;
+ case 3:
+ NONFAILING(*(uint32_t*)0x20000500 = r[0]);
+ NONFAILING(*(uint64_t*)0x20000508 = 0);
+ NONFAILING(*(uint64_t*)0x20000510 = 0);
+ NONFAILING(*(uint64_t*)0x20000518 = 0);
+ NONFAILING(*(uint32_t*)0x20000520 = 4);
+ NONFAILING(*(uint32_t*)0x20000524 = 0);
+ NONFAILING(*(uint64_t*)0x20000528 = 0);
+ NONFAILING(*(uint32_t*)0x20000530 = 0);
+ NONFAILING(*(uint32_t*)0x20000534 = 4);
+ NONFAILING(*(uint64_t*)0x20000538 = 0x822e);
+ NONFAILING(*(uint64_t*)0x20000540 = 0);
+ NONFAILING(*(uint64_t*)0x20000548 = 0x20000340);
+ NONFAILING(*(uint32_t*)0x20000550 = 0);
+ NONFAILING(*(uint32_t*)0x20000554 = 0);
+ NONFAILING(*(uint64_t*)0x20000558 = 0xfffffffffffffffe);
+ NONFAILING(*(uint64_t*)0x20000560 = 0);
+ NONFAILING(*(uint64_t*)0x20000568 = 0x20000380);
+ NONFAILING(memcpy((void*)0x20000380, "\x3c\x88\x80", 3));
+ syscall(SYS_aio_writev, /*iocb=*/0x20000500ul);
+ break;
+ case 4:
+ NONFAILING(*(uint8_t*)0x20000180 = 0x1c);
+ NONFAILING(*(uint8_t*)0x20000181 = 0x1c);
+ NONFAILING(*(uint16_t*)0x20000182 = htobe16(0x4e23));
+ NONFAILING(*(uint32_t*)0x20000184 = 0);
+ NONFAILING(memset((void*)0x20000188, 0, 16));
+ NONFAILING(*(uint32_t*)0x20000198 = 0);
+ syscall(SYS_connect, /*fd=*/r[0], /*addr=*/0x20000180ul,
+ /*addrlen=*/0x1cul);
+ break;
+ case 5:
+ NONFAILING(memset((void*)0x20000200, 14, 1));
+ syscall(SYS_sendto, /*fd=*/r[0], /*buf=*/0x20000200ul, /*len=*/0xff66ul,
+ /*f=*/0ul, /*addr=*/0ul, /*addrlen=*/0ul);
+ break;
+ case 6:
+ syscall(SYS_sendmsg, /*fd=*/r[0], /*msg=*/0ul, /*f=*/0ul);
+ break;
+ case 7:
+ syscall(SYS_socket, /*domain=AF_INET*/ 2ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0);
+ break;
+ case 8:
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=SOCK_SEQPACKET*/ 5ul,
+ /*proto=*/0x84);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 9:
+ syscall(SYS_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0ul,
+ /*flags=O_RDWR*/ 2ul, /*mode=*/0ul);
+ break;
+ case 10:
+ syscall(SYS_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0ul,
+ /*flags=O_RDWR*/ 2ul, /*mode=*/0ul);
+ break;
+ case 11:
+ syscall(SYS_socket, /*domain=*/2ul, /*type=SOCK_SEQPACKET*/ 5ul,
+ /*proto=*/0x84);
+ break;
+ case 12:
+ syscall(SYS_socket, /*domain=*/0x1cul, /*type=*/1ul, /*proto=*/0);
+ break;
+ case 13:
+ syscall(SYS_shutdown, /*fd=*/-1, /*how=*/0ul);
+ break;
+ case 14:
+ syscall(SYS_shutdown, /*fd=*/-1, /*how=*/0ul);
+ break;
+ case 15:
+ syscall(SYS_sendto, /*fd=*/-1, /*buf=*/0ul, /*len=*/0ul, /*f=*/0ul,
+ /*addr=*/0ul, /*addrlen=*/0ul);
+ break;
+ case 16:
+ syscall(SYS_sendmsg, /*fd=*/-1, /*msg=*/0ul, /*f=*/0ul);
+ break;
+ case 17:
+ syscall(SYS_rfork, /*flags=RFMEM|RFTHREAD|RFCFDG|RFNOWAIT*/ 0x3060ul);
+ break;
+ case 18:
+ syscall(SYS_rfork, /*flags=RFMEM|RFTHREAD|RFCFDG|RFNOWAIT*/ 0x3060ul);
+ break;
+ case 19:
+ syscall(SYS_openat, /*fd=*/0xffffff9cul, /*file=*/0ul,
+ /*flags=O_APPEND*/ 8ul, /*mode=*/0ul);
+ break;
+ case 20:
+ syscall(SYS_openat, /*fd=*/0xffffff9cul, /*file=*/0ul,
+ /*flags=O_APPEND*/ 8ul, /*mode=*/0ul);
+ break;
+ case 21:
+ syscall(SYS_connect, /*fd=*/r[1], /*addr=*/0ul, /*addrlen=*/0ul);
+ break;
+ case 22:
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0x84);
+ if (res != -1)
+ r[2] = res;
+ break;
+ case 23:
+ NONFAILING(*(uint32_t*)0x200001c0 = 0);
+ syscall(SYS_getsockopt, /*fd=*/r[2], /*level=*/0x84, /*opt=*/0xc,
+ /*val=*/0ul, /*len=*/0x200001c0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x20000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul, /*fd=*/-1,
+ /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ install_segv_handler();
+ use_temporary_dir();
+ do_sandbox_none();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -m32 -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 2m -i 10 -l 100 > /dev/null 2>&1) &
+sleep 1
+cd /tmp
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ timeout 3m /tmp/$prog > /dev/null 2>&1
+done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller74.sh b/tools/test/stress2/misc/syzkaller74.sh
new file mode 100755
index 000000000000..886c6047585b
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller74.sh
@@ -0,0 +1,469 @@
+#!/bin/sh
+
+# panic: _pctrie_lookup_node: freed node in iter path
+# cpuid = 0
+# time = 1745029155
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01085d2a30
+# vpanic() at vpanic+0x136/frame 0xfffffe01085d2b60
+# panic() at panic+0x43/frame 0xfffffe01085d2bc0
+# pctrie_iter_lookup_ge() at pctrie_iter_lookup_ge+0x166/frame 0xfffffe01085d2bd0
+# vm_object_page_clean() at vm_object_page_clean+0x22e/frame 0xfffffe01085d2c50
+# vnode_pager_clean_async() at vnode_pager_clean_async+0x48/frame 0xfffffe01085d2c70
+# vinactivef() at vinactivef+0x75/frame 0xfffffe01085d2cb0
+# vput_final() at vput_final+0x29c/frame 0xfffffe01085d2d00
+# vm_map_process_deferred() at vm_map_process_deferred+0xa9/frame 0xfffffe01085d2d20
+# vm_map_remove() at vm_map_remove+0xcb/frame 0xfffffe01085d2d50
+# vmspace_exit() at vmspace_exit+0xa8/frame 0xfffffe01085d2d80
+# exit1() at exit1+0x533/frame 0xfffffe01085d2df0
+# sys_exit() at sys_exit+0xd/frame 0xfffffe01085d2e00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe01085d2f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01085d2f30
+# --- syscall (1, FreeBSD ELF64, exit), rip = 0x822a9b7fa, rsp = 0x8202b4de8, rbp = 0x8202b4e00 ---
+# KDB: enter: panic
+# [ thread pid 21141 tid 100328 ]
+# Stopped at kdb_enter+0x33: movq $0,0x104d862(%rip)
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=8658267170f7f61f4317bb04c1fe9add379ffaf4
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+b5f9ebf4c2c63a5db681@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <dirent.h>
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void use_temporary_dir(void)
+{
+ char tmpdir_template[] = "./syzkaller.XXXXXX";
+ char* tmpdir = mkdtemp(tmpdir_template);
+ if (!tmpdir)
+ exit(1);
+ if (chmod(tmpdir, 0777))
+ exit(1);
+ if (chdir(tmpdir))
+ exit(1);
+}
+
+static void reset_flags(const char* filename)
+{
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ st.st_flags &= ~(SF_NOUNLINK | UF_NOUNLINK | SF_IMMUTABLE | UF_IMMUTABLE |
+ SF_APPEND | UF_APPEND);
+ if (lchflags(filename, st.st_flags))
+ exit(1);
+}
+static void __attribute__((noinline)) remove_dir(const char* dir)
+{
+ DIR* dp = opendir(dir);
+ if (dp == NULL) {
+ if (errno == EACCES) {
+ if (rmdir(dir))
+ exit(1);
+ return;
+ }
+ exit(1);
+ }
+ struct dirent* ep = 0;
+ while ((ep = readdir(dp))) {
+ if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
+ continue;
+ char filename[FILENAME_MAX];
+ snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name);
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ if (S_ISDIR(st.st_mode)) {
+ remove_dir(filename);
+ continue;
+ }
+ if (unlink(filename)) {
+ if (errno == EPERM) {
+ reset_flags(filename);
+ reset_flags(dir);
+ if (unlink(filename) == 0)
+ continue;
+ }
+ exit(1);
+ }
+ }
+ closedir(dp);
+ while (rmdir(dir)) {
+ if (errno == EPERM) {
+ reset_flags(dir);
+ if (rmdir(dir) == 0)
+ break;
+ }
+ exit(1);
+ }
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static void sandbox_common()
+{
+ struct rlimit rlim;
+ rlim.rlim_cur = rlim.rlim_max = 128 << 20;
+ setrlimit(RLIMIT_AS, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 8 << 20;
+ setrlimit(RLIMIT_MEMLOCK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_FSIZE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_STACK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 0;
+ setrlimit(RLIMIT_CORE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 256;
+ setrlimit(RLIMIT_NOFILE, &rlim);
+}
+
+static void loop();
+
+static int do_sandbox_none(void)
+{
+ sandbox_common();
+ loop();
+ return 0;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void execute_one(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 12; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter = 0;
+ for (;; iter++) {
+ char cwdbuf[32];
+ sprintf(cwdbuf, "./%d", iter);
+ if (mkdir(cwdbuf, 0777))
+ exit(1);
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ if (chdir(cwdbuf))
+ exit(1);
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ remove_dir(cwdbuf);
+ }
+}
+
+uint64_t r[5] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ memcpy((void*)0x200000000000, "./file0\000", 8);
+ res = syscall(SYS_openat, /*fd=*/0xffffff9c, /*file=*/0x200000000000ul,
+ /*flags=O_VERIFY|O_CREAT|O_WRONLY*/ 0x200201ul, /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ *(uint32_t*)0x200000000240 = r[0];
+ *(uint64_t*)0x200000000248 = 0x80000001;
+ *(uint64_t*)0x200000000250 = 0x2000000004c0;
+ memcpy((void*)0x2000000004c0, "\x45\x09\xee\x8f\xcd", 5);
+ *(uint64_t*)0x200000000258 = 5;
+ *(uint32_t*)0x200000000260 = 3;
+ *(uint32_t*)0x200000000264 = 0;
+ *(uint64_t*)0x200000000268 = 0x200000000000000;
+ *(uint32_t*)0x200000000270 = 8;
+ *(uint32_t*)0x200000000274 = 0;
+ *(uint64_t*)0x200000000278 = 1;
+ *(uint64_t*)0x200000000280 = 7;
+ *(uint64_t*)0x200000000288 = 0;
+ *(uint32_t*)0x200000000290 = 0;
+ *(uint32_t*)0x200000000294 = 0x20000005;
+ *(uint32_t*)0x200000000298 = 0x2e5562f1;
+ *(uint16_t*)0x2000000002a0 = 0xc088;
+ syscall(SYS_aio_write, /*iocb=*/0x200000000240ul);
+ break;
+ case 2:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_VERIFY*/ 0x200000ul,
+ /*mode=S_IWOTH|S_IWGRP|S_IXUSR|S_IWUSR*/ 0xd2ul);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 3:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_PRIVATE*/ 0x12ul, /*fd=*/r[1],
+ /*offset=*/0ul);
+ break;
+ case 4:
+ memcpy((void*)0x200000000100, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000100ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[2] = res;
+ break;
+ case 5:
+ memcpy((void*)0x2000000016c0, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x2000000016c0ul, /*flags=O_WRONLY*/ 1ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[3] = res;
+ break;
+ case 6:
+ *(uint64_t*)0x200000000080 = 0x2000000006c0;
+ *(uint64_t*)0x200000000088 = 0x100000;
+ syscall(SYS_pwritev, /*fd=*/r[3], /*vec=*/0x200000000080ul, /*vlen=*/1ul,
+ /*off=*/0ul);
+ break;
+ case 7:
+ *(uint64_t*)0x200000001780 = 0x200000000180;
+ *(uint64_t*)0x200000001788 = 0x1b133353141e377d;
+ syscall(SYS_preadv, /*fd=*/r[2], /*vec=*/0x200000001780ul,
+ /*vlen=*/0x10000000000000d1ul, /*off=*/0ul);
+ break;
+ case 8:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80400000000000*/ 0x80400000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[4] = res;
+ break;
+ case 9:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_SHARED|0x20000*/ 0x20011ul, /*fd=*/r[4],
+ /*offset=*/0ul);
+ break;
+ case 10:
+ syscall(SYS_setsockopt, /*fd=*/(intptr_t)-1, /*level=*/6,
+ /*optname=TCP_LOGID*/ 0x24, /*optval=*/0ul, /*optlen=*/0ul);
+ break;
+ case 11:
+ syscall(SYS_setsockopt, /*fd=*/(intptr_t)-1, /*level=*/6,
+ /*optname=TCP_LOGID*/ 0x24, /*optval=*/0ul, /*optlen=*/0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ use_temporary_dir();
+ do_sandbox_none();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+cd /tmp
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.??????
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller75.sh b/tools/test/stress2/misc/syzkaller75.sh
new file mode 100755
index 000000000000..05e1e56bc44d
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller75.sh
@@ -0,0 +1,377 @@
+#!/bin/sh
+
+# panic: vm_pager_assert_in: page 0xfffffe001987bcc0 is mapped
+# cpuid = 10
+# time = 1745335200
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0108807700
+# vpanic() at vpanic+0x136/frame 0xfffffe0108807830
+# panic() at panic+0x43/frame 0xfffffe0108807890
+# vm_pager_assert_in() at vm_pager_assert_in+0x1fa/frame 0xfffffe01088078d0
+# vm_pager_get_pages() at vm_pager_get_pages+0x3d/frame 0xfffffe0108807920
+# vm_fault_getpages() at vm_fault_getpages+0x22b/frame 0xfffffe0108807980
+# vm_fault_object() at vm_fault_object+0x2ab/frame 0xfffffe01088079e0
+# vm_fault() at vm_fault+0x2d1/frame 0xfffffe0108807b40
+# vm_map_wire_locked() at vm_map_wire_locked+0x385/frame 0xfffffe0108807bf0
+# vm_mmap_object() at vm_mmap_object+0x2fd/frame 0xfffffe0108807c50
+# vn_mmap() at vn_mmap+0x152/frame 0xfffffe0108807ce0
+# kern_mmap() at kern_mmap+0x621/frame 0xfffffe0108807dc0
+# sys_mmap() at sys_mmap+0x42/frame 0xfffffe0108807e00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe0108807f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe0108807f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x82438d7fa, rsp = 0x824847f68, rbp = 0x824847f90 ---
+# KDB: enter: panic
+# [ thread pid 43067 tid 146060 ]
+# Stopped at kdb_enter+0x33: movq $0,0x124d7e2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #2 main-n276647-a098111a28ed-dirty: Tue Apr 22 16:37:39 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=bab5b2c0d3e8f95d52a06ab501ddb3c11200a5c9
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+1cc9ede76727d2ea2e8d@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void execute_one(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 11; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+// int iter = 0;
+ for (;; /*iter++*/) {
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ }
+}
+
+uint64_t r[4] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ memcpy((void*)0x200000000200, "./file0\000", 8);
+ res = syscall(SYS_openat, /*fd=*/0xffffff9c, /*file=*/0x200000000200ul,
+ /*flags=O_VERIFY|O_CREAT|O_CLOEXEC|O_WRONLY*/ 0x300201ul,
+ /*mode=S_IWGRP|S_IXUSR|S_IWUSR*/ 0xd0ul);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ *(uint32_t*)0x200000000240 = r[0];
+ *(uint64_t*)0x200000000248 = 0x80000002;
+ *(uint64_t*)0x200000000250 = 0x200000000080;
+ memcpy((void*)0x200000000080, "\x1f\x9a\xc4", 3);
+ *(uint64_t*)0x200000000258 = 3;
+ *(uint32_t*)0x200000000260 = 0;
+ *(uint32_t*)0x200000000264 = 0;
+ *(uint64_t*)0x200000000268 = 0;
+ *(uint32_t*)0x200000000270 = 0;
+ *(uint32_t*)0x200000000274 = 0;
+ *(uint64_t*)0x200000000278 = 0;
+ *(uint64_t*)0x200000000280 = 7;
+ *(uint64_t*)0x200000000288 = 0;
+ *(uint32_t*)0x200000000290 = 0;
+ *(uint32_t*)0x200000000294 = 0;
+ *(uint64_t*)0x200000000298 = 0;
+ *(uint64_t*)0x2000000002a0 = 0;
+ *(uint64_t*)0x2000000002a8 = 0;
+ syscall(SYS_aio_write, /*iocb=*/0x200000000240ul);
+ break;
+ case 2:
+ syscall(SYS_mlockall, /*flags=MCL_FUTURE*/ 2ul);
+ break;
+ case 3:
+ memcpy((void*)0x200000000100, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000100ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 4:
+ *(uint64_t*)0x200000001780 = 0x200000000180;
+ *(uint64_t*)0x200000001788 = 0x1b133353141e377d;
+ syscall(SYS_preadv, /*fd=*/r[1], /*vec=*/0x200000001780ul,
+ /*vlen=*/0x10000000000000d1ul, /*off=*/0ul);
+ break;
+ case 5:
+ memcpy((void*)0x200000000040, "./file0\000", 8);
+ syscall(
+ SYS_open, /*file=*/0x200000000040ul,
+ /*flags=O_TRUNC|O_NONBLOCK|O_NOFOLLOW|O_CREAT|O_APPEND|0x2*/ 0x70eul,
+ /*mode=*/0ul);
+ break;
+ case 6:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80400000000000*/ 0x80400000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[2] = res;
+ break;
+ case 7:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_SHARED|0x20000*/ 0x20011ul, /*fd=*/r[2],
+ /*offset=*/0ul);
+ break;
+ case 8:
+ memcpy((void*)0x200000000040, "./file0\000", 8);
+ syscall(SYS_truncate, /*file=*/0x200000000040ul, /*len=*/0xaa480ul);
+ break;
+ case 9:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000480ul, /*flags=*/0ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[3] = res;
+ break;
+ case 10:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_PRIVATE*/ 0x12ul, /*fd=*/r[3],
+ /*offset=*/0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 30 -l 100 > /dev/null 2>&1) &
+sleep 5
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+for i in `jot 30`; do
+ (
+ mkdir d$i
+ cd d$i
+ timeout 3m /tmp/$prog > /dev/null 2>&1 &
+ )
+done
+while pgrep -q $prog; do sleep 2; done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller76.sh b/tools/test/stress2/misc/syzkaller76.sh
new file mode 100755
index 000000000000..67a566cbfa00
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller76.sh
@@ -0,0 +1,235 @@
+#!/bin/sh
+
+# panic: aio_process_rw: opcode 70
+# cpuid = 7
+# time = 1746175480
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe010844ccb0
+# vpanic() at vpanic+0x136/frame 0xfffffe010844cde0
+# panic() at panic+0x43/frame 0xfffffe010844ce40
+# aio_process_rw() at aio_process_rw+0x28e/frame 0xfffffe010844cea0
+# aio_daemon() at aio_daemon+0x286/frame 0xfffffe010844cef0
+# fork_exit() at fork_exit+0x82/frame 0xfffffe010844cf30
+# fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe010844cf30
+# --- trap 0xc, rip = 0x2020f02a472a, rsp = 0x2020ec9bb8d8, rbp = 0x2020ec9bb9d0 ---
+# KDB: enter: panic
+# [ thread pid 71553 tid 100216 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f9c2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n276945-2735c20d114f-dirty: Fri May 2 07:17:00 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=0549d8c089382a2593078734cc8166a0fc9049f1
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+b6e15476c91852bb2264@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ res = syscall(SYS_freebsd10_pipe, /*pipefd=*/0x2000000005c0ul);
+ if (res != -1)
+ r[0] = *(uint32_t*)0x2000000005c4;
+ syscall(SYS_close, /*fd=*/r[0]);
+ memcpy((void*)0x200000000080, ".\000", 2);
+ syscall(SYS_open, /*file=*/0x200000000080ul, /*flags=*/0ul, /*mode=*/0ul);
+ *(uint32_t*)0x200000000080 = 0;
+ *(uint32_t*)0x200000000084 = 0;
+ *(uint32_t*)0x200000000088 = 4;
+ *(uint64_t*)0x200000000090 = 0;
+ *(uint64_t*)0x200000000098 = 0;
+ *(uint32_t*)0x2000000000a0 = 0;
+ *(uint32_t*)0x2000000000a4 = 8;
+ *(uint64_t*)0x2000000000a8 = 0x7fffffffffffffff;
+ *(uint32_t*)0x2000000000b0 = 0;
+ *(uint32_t*)0x2000000000b4 = 0x100;
+ *(uint64_t*)0x2000000000b8 = 0;
+ *(uint32_t*)0x2000000000c0 = 0;
+ *(uint32_t*)0x2000000000c4 = 0;
+ *(uint32_t*)0x2000000000c8 = 0;
+ *(uint32_t*)0x2000000000cc = 3;
+ *(uint32_t*)0x2000000000d0 = 0;
+ *(uint32_t*)0x2000000000d4 = 0;
+ *(uint32_t*)0x2000000000d8 = 0x400008;
+ *(uint32_t*)0x2000000000dc = 0x8e;
+ *(uint32_t*)0x2000000000e0 = 0xfffffffd;
+ *(uint32_t*)0x2000000000e4 = 0xf;
+ *(uint32_t*)0x2000000000e8 = 0xfffffffc;
+ *(uint32_t*)0x2000000000ec = 0;
+ *(uint32_t*)0x2000000000f0 = 0;
+ *(uint32_t*)0x2000000000f4 = 0;
+ *(uint32_t*)0x2000000000f8 = 0xff;
+ *(uint32_t*)0x2000000000fc = 0;
+ *(uint32_t*)0x200000000100 = 0;
+ *(uint32_t*)0x200000000104 = 2;
+ *(uint32_t*)0x200000000108 = 0;
+ *(uint32_t*)0x20000000010c = 2;
+ *(uint32_t*)0x200000000110 = 2;
+ *(uint32_t*)0x200000000114 = 0x5bee;
+ *(uint32_t*)0x200000000118 = 0;
+ *(uint32_t*)0x20000000011c = 0xc;
+ *(uint32_t*)0x200000000120 = 3;
+ *(uint32_t*)0x200000000124 = 2;
+ *(uint32_t*)0x200000000128 = 0;
+ *(uint32_t*)0x20000000012c = 0x10000000;
+ *(uint32_t*)0x200000000130 = 0;
+ *(uint32_t*)0x200000000134 = 1;
+ *(uint32_t*)0x200000000138 = 0;
+ *(uint32_t*)0x20000000013c = 0x83;
+ *(uint32_t*)0x200000000140 = 0;
+ *(uint32_t*)0x200000000144 = 0;
+ *(uint32_t*)0x200000000148 = 0;
+ *(uint32_t*)0x20000000014c = 0;
+ *(uint32_t*)0x200000000150 = 0;
+ *(uint32_t*)0x200000000154 = 0xfff;
+ *(uint32_t*)0x200000000158 = 1;
+ *(uint32_t*)0x20000000015c = 0x4c;
+ *(uint32_t*)0x200000000160 = 0x1fffffc;
+ *(uint32_t*)0x200000000164 = 4;
+ *(uint32_t*)0x200000000168 = 0x40000001;
+ *(uint32_t*)0x20000000016c = 0;
+ *(uint32_t*)0x200000000170 = 8;
+ *(uint32_t*)0x200000000174 = 0;
+ *(uint32_t*)0x200000000178 = 0;
+ *(uint32_t*)0x20000000017c = 0x100001;
+ *(uint32_t*)0x200000000180 = 0;
+ *(uint32_t*)0x200000000184 = 0x1ff;
+ *(uint32_t*)0x200000000188 = 0xe;
+ *(uint32_t*)0x20000000018c = 8;
+ *(uint32_t*)0x200000000190 = 0;
+ *(uint32_t*)0x200000000194 = 0;
+ *(uint32_t*)0x200000000198 = 0;
+ *(uint32_t*)0x20000000019c = 0xc;
+ *(uint32_t*)0x2000000001a0 = 9;
+ *(uint32_t*)0x2000000001a4 = 2;
+ *(uint32_t*)0x2000000001a8 = 0x10000002;
+ *(uint32_t*)0x2000000001ac = 0x100000;
+ *(uint32_t*)0x2000000001b0 = 0x46;
+ *(uint32_t*)0x2000000001b4 = 6;
+ *(uint32_t*)0x2000000001b8 = 0x3ff;
+ *(uint32_t*)0x2000000001bc = 2;
+ *(uint32_t*)0x2000000001c0 = 0;
+ *(uint32_t*)0x2000000001c4 = 0xfffffffa;
+ *(uint32_t*)0x2000000001c8 = 0x200;
+ *(uint32_t*)0x2000000001cc = 0;
+ *(uint32_t*)0x2000000001d0 = 1;
+ *(uint32_t*)0x2000000001d4 = 3;
+ *(uint32_t*)0x2000000001d8 = 0;
+ *(uint32_t*)0x2000000001dc = 0x100;
+ *(uint32_t*)0x2000000001e0 = 0;
+ *(uint32_t*)0x2000000001e4 = 8;
+ *(uint32_t*)0x2000000001e8 = 0x108c6b2;
+ *(uint32_t*)0x2000000001ec = 0xfffffffa;
+ *(uint32_t*)0x2000000001f0 = 0;
+ *(uint32_t*)0x2000000001f4 = 5;
+ *(uint32_t*)0x2000000001f8 = 0;
+ *(uint32_t*)0x2000000001fc = 0;
+ *(uint32_t*)0x200000000200 = 0;
+ *(uint32_t*)0x200000000204 = 0;
+ *(uint32_t*)0x200000000208 = 0;
+ *(uint32_t*)0x20000000020c = 0x80;
+ *(uint32_t*)0x200000000210 = 0;
+ *(uint32_t*)0x200000000214 = 1;
+ *(uint32_t*)0x200000000218 = 0;
+ *(uint32_t*)0x20000000021c = 6;
+ *(uint32_t*)0x200000000220 = 0;
+ *(uint32_t*)0x200000000224 = 0;
+ *(uint32_t*)0x200000000228 = 0;
+ *(uint32_t*)0x20000000022c = 6;
+ *(uint32_t*)0x200000000230 = 0;
+ *(uint32_t*)0x200000000234 = 0;
+ *(uint32_t*)0x200000000238 = 0;
+ *(uint32_t*)0x20000000023c = 0xa9f;
+ syscall(SYS_ioctl, /*fd=*/(intptr_t)-1, /*cmd=*/0xc1c06d02ul,
+ /*arg=*/0x200000000080ul);
+ *(uint32_t*)0x200000000580 = -1;
+ *(uint64_t*)0x200000000588 = 0;
+ *(uint64_t*)0x200000000590 = 0x200000000180;
+ *(uint64_t*)0x200000000598 = 0;
+ *(uint32_t*)0x2000000005a0 = 0xfffff000;
+ *(uint32_t*)0x2000000005a4 = 3;
+ *(uint64_t*)0x2000000005a8 = 0;
+ *(uint32_t*)0x2000000005b0 = 0;
+ *(uint32_t*)0x2000000005b4 = 0;
+ *(uint64_t*)0x2000000005b8 = 0;
+ *(uint64_t*)0x2000000005c0 = 0;
+ *(uint64_t*)0x2000000005c8 = 0;
+ *(uint32_t*)0x2000000005d0 = 0;
+ *(uint32_t*)0x2000000005d4 = 0;
+ *(uint64_t*)0x2000000005d8 = 0;
+ *(uint16_t*)0x2000000005e0 = 0x4043;
+ *(uint32_t*)0x200000000620 = -1;
+ *(uint64_t*)0x200000000628 = 0;
+ *(uint64_t*)0x200000000630 = 0;
+ *(uint64_t*)0x200000000638 = 0;
+ *(uint32_t*)0x200000000640 = 0x10;
+ *(uint32_t*)0x200000000644 = 0;
+ *(uint64_t*)0x200000000648 = 0;
+ *(uint32_t*)0x200000000650 = 0;
+ *(uint32_t*)0x200000000654 = 0;
+ *(uint64_t*)0x200000000658 = 8;
+ *(uint64_t*)0x200000000660 = 0x3ff;
+ *(uint64_t*)0x200000000668 = 0;
+ *(uint32_t*)0x200000000670 = 1;
+ *(uint32_t*)0x200000000674 = 0;
+ *(uint32_t*)0x200000000678 = 3;
+ *(uint16_t*)0x200000000680 = 0;
+ *(uint32_t*)0x2000000006c0 = -1;
+ *(uint64_t*)0x2000000006c8 = 0;
+ *(uint64_t*)0x2000000006d0 = 0;
+ *(uint64_t*)0x2000000006d8 = 0;
+ *(uint32_t*)0x2000000006e0 = 0;
+ *(uint32_t*)0x2000000006e4 = 0;
+ *(uint64_t*)0x2000000006e8 = 2;
+ *(uint32_t*)0x2000000006f0 = 0;
+ *(uint32_t*)0x2000000006f4 = 0;
+ *(uint64_t*)0x2000000006f8 = 0x101;
+ *(uint64_t*)0x200000000700 = 0xb3;
+ *(uint64_t*)0x200000000708 = 0;
+ *(uint32_t*)0x200000000710 = 0;
+ *(uint32_t*)0x200000000714 = 0xa;
+ *(uint64_t*)0x200000000718 = 3;
+ *(uint32_t*)0x200000000720 = 0;
+ syscall(SYS_lio_listio, /*mode=*/0ul, /*list=*/0x200000000580ul, /*nent=*/3ul,
+ /*sig=*/0ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller77.sh b/tools/test/stress2/misc/syzkaller77.sh
new file mode 100755
index 000000000000..c77a3fd2dd22
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller77.sh
@@ -0,0 +1,290 @@
+#!/bin/sh
+
+# panic: sofree:1883 curvnet is NULL, so=0xfffff8017ca59000
+# cpuid = 8
+# time = 1746559098
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0182b5c8d0
+# vpanic() at vpanic+0x136/frame 0xfffffe0182b5ca00
+# panic() at panic+0x43/frame 0xfffffe0182b5ca60
+# sorele_locked() at sorele_locked+0x25f/frame 0xfffffe0182b5ca90
+# uipc_sendfile_wait() at uipc_sendfile_wait+0x1df/frame 0xfffffe0182b5caf0
+# vn_sendfile() at vn_sendfile+0x59b/frame 0xfffffe0182b5cd70
+# sendfile() at sendfile+0x129/frame 0xfffffe0182b5ce00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe0182b5cf30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe0182b5cf30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x8223fb72a, rsp = 0x824baaf58, rbp = 0x824baaf90 ---
+# KDB: enter: panic
+# [ thread pid 6382 tid 103296 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f202(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n277057-794e792121ba-dirty: Tue May 6 18:34:20 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=f04b36c4f2b84533225a1bd695a0aed2efa559e5
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+7b0b20cf2c672c181d98@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <time.h>
+#include <unistd.h>
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void loop(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 8; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+uint64_t r[5] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80000000000000*/ 0x80000000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ syscall(SYS_ftruncate, /*fd=*/r[0], /*len=*/0x3862ul);
+ break;
+ case 2:
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=*/2ul, /*proto=*/0x88);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 3:
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0, /*fds=*/0x200000000180ul);
+ if (res != -1) {
+ r[2] = *(uint32_t*)0x200000000180;
+ r[3] = *(uint32_t*)0x200000000184;
+ }
+ break;
+ case 4:
+ syscall(SYS_dup2, /*oldfd=*/r[2], /*newfd=*/r[1]);
+ break;
+ case 5:
+ memcpy((void*)0x200000000140, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000140ul, /*flags=*/0ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[4] = res;
+ break;
+ case 6:
+ syscall(SYS_sendfile, /*fd=*/r[4], /*s=*/r[1], /*offset=*/0ul,
+ /*nbytes=*/0ul, /*hdtr=*/0ul, /*sbytes=*/0ul,
+ /*flags=SF_SYNC|SF_NOCACHE*/ 0x14ul);
+ break;
+ case 7:
+ syscall(SYS_dup2, /*oldfd=*/r[4], /*newfd=*/r[3]);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 30 -l 100 > /dev/null 2>&1) &
+sleep 5
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+for i in `jot 30`; do
+ (
+ mkdir d$i
+ cd d$i
+ timeout 3m /tmp/$prog > /dev/null 2>&1 &
+ )
+done
+while pgrep -q $prog; do sleep 2; done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller78.sh b/tools/test/stress2/misc/syzkaller78.sh
new file mode 100755
index 000000000000..1858129d4c81
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller78.sh
@@ -0,0 +1,282 @@
+#!/bin/sh
+
+# Fatal trap 12: page fault while in kernel mode
+# cpuid = 10; apic id = 07
+# fault virtual address = 0x0
+# fault code = supervisor read data, page not present
+# instruction pointer = 0x20:0xffffffff80c3c276
+# stack pointer = 0x28:0xfffffe017273eb00
+# frame pointer = 0x28:0xfffffe017273eb30
+# code segment = base 0x0, limit 0xfffff, type 0x1b
+# = DPL 0, pres 1, long 1, def32 0, gran 1
+# processor eflags = interrupt enabled, resume, IOPL = 0
+# current process = 43905 (syzkaller78)
+# rdi: fffff8005b5d55e0 rsi: 0000000000000008 rdx: ffffffff81249e88
+# rcx: fffff8001b9aed00 r8: 0000000000000000 r9: fffff80003396000
+# rax: 0000000000000000 rbx: fffff8005b5d5400 rbp: fffffe017273eb30
+# r10: 0000000000000000 r11: fffff804d84e9c60 r12: fffff8005b5d55f8
+# r13: 0000000000000000 r14: fffff80497171700 r15: fffff8005b5d55c0
+# trap number = 12
+# panic: page fault
+# cpuid = 7
+# time = 1746555157
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe017273e830
+# vpanic() at vpanic+0x136/frame 0xfffffe017273e960
+# panic() at panic+0x43/frame 0xfffffe017273e9c0
+# trap_pfault() at trap_pfault+0x48d/frame 0xfffffe017273ea30
+# calltrap() at calltrap+0x8/frame 0xfffffe017273ea30
+# --- trap 0xc, rip = 0xffffffff80c3c276, rsp = 0xfffffe017273eb00, rbp = 0xfffffe017273eb30 ---
+# unp_dispose() at unp_dispose+0x3b6/frame 0xfffffe017273eb30
+# uipc_detach() at uipc_detach+0x35/frame 0xfffffe017273eb80
+# sorele_locked() at sorele_locked+0x107/frame 0xfffffe017273ebb0
+# soclose() at soclose+0x17d/frame 0xfffffe017273ec10
+# _fdrop() at _fdrop+0x1b/frame 0xfffffe017273ec30
+# closef() at closef+0x1e3/frame 0xfffffe017273ecc0
+# fdescfree() at fdescfree+0x41e/frame 0xfffffe017273ed80
+# exit1() at exit1+0x4a4/frame 0xfffffe017273edf0
+# sys_exit() at sys_exit+0xd/frameamd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe017273ef30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe017273ef30
+# --- syscall (1, FreeBSD ELF64, exit), rip = 0x823ab472a, rsp = 0x8208e3ea8, rbp = 0x8208e3ec0 ---
+# KDB: enter: panic
+# [ thread pid 43905 tid 103344 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f202(%rip)
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=46eb92ee6e2f6acbd4250d0f2065b1f93296bd82
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+0e99ffc200638909ca1c@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <dirent.h>
+#include <errno.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static unsigned long long procid;
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void use_temporary_dir(void)
+{
+ char tmpdir_template[] = "./syzkaller.XXXXXX";
+ char* tmpdir = mkdtemp(tmpdir_template);
+ if (!tmpdir)
+ exit(1);
+ if (chmod(tmpdir, 0777))
+ exit(1);
+ if (chdir(tmpdir))
+ exit(1);
+}
+
+static void reset_flags(const char* filename)
+{
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ st.st_flags &= ~(SF_NOUNLINK | UF_NOUNLINK | SF_IMMUTABLE | UF_IMMUTABLE |
+ SF_APPEND | UF_APPEND);
+ if (lchflags(filename, st.st_flags))
+ exit(1);
+}
+static void __attribute__((noinline)) remove_dir(const char* dir)
+{
+ DIR* dp = opendir(dir);
+ if (dp == NULL) {
+ if (errno == EACCES) {
+ if (rmdir(dir))
+ exit(1);
+ return;
+ }
+ exit(1);
+ }
+ struct dirent* ep = 0;
+ while ((ep = readdir(dp))) {
+ if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
+ continue;
+ char filename[FILENAME_MAX];
+ snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name);
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ if (S_ISDIR(st.st_mode)) {
+ remove_dir(filename);
+ continue;
+ }
+ if (unlink(filename)) {
+ if (errno == EPERM) {
+ reset_flags(filename);
+ reset_flags(dir);
+ if (unlink(filename) == 0)
+ continue;
+ }
+ exit(1);
+ }
+ }
+ closedir(dp);
+ while (rmdir(dir)) {
+ if (errno == EPERM) {
+ reset_flags(dir);
+ if (rmdir(dir) == 0)
+ break;
+ }
+ exit(1);
+ }
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter = 0;
+ for (;; iter++) {
+ char cwdbuf[32];
+ sprintf(cwdbuf, "./%d", iter);
+ if (mkdir(cwdbuf, 0777))
+ exit(1);
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ if (chdir(cwdbuf))
+ exit(1);
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ remove_dir(cwdbuf);
+ }
+}
+
+uint64_t r[5] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_one(void)
+{
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80000000000000*/ 0x80000000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ syscall(SYS_ftruncate, /*fd=*/r[0], /*len=*/0x3862ul);
+ memcpy((void*)0x200000000100, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000100ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[1] = res;
+ *(uint64_t*)0x2000000000c0 = 0x200000000340;
+ *(uint64_t*)0x2000000000c8 = 0x41;
+ syscall(SYS_readv, /*fd=*/r[1], /*vec=*/0x2000000000c0ul, /*vlen=*/1ul);
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=*/2ul, /*proto=*/0x88);
+ if (res != -1)
+ r[2] = res;
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0, /*fds=*/0x200000000180ul);
+ if (res != -1)
+ r[3] = *(uint32_t*)0x200000000180;
+ syscall(SYS_dup2, /*oldfd=*/r[3], /*newfd=*/r[2]);
+ memcpy((void*)0x200000000140, "./file0\000", 8);
+ res =
+ syscall(SYS_open, /*file=*/0x200000000140ul, /*flags=*/0ul, /*mode=*/0ul);
+ if (res != -1)
+ r[4] = res;
+ syscall(SYS_sendfile, /*fd=*/r[4], /*s=*/r[2], /*offset=*/0xcbul,
+ /*nbytes=*/0x2000ul, /*hdtr=*/0ul, /*sbytes=*/0ul,
+ /*flags=SF_USER_READAHEAD|SF_NODISKIO|0x2*/ 0xbul);
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ for (procid = 0; procid < 4; procid++) {
+ if (fork() == 0) {
+ use_temporary_dir();
+ loop();
+ }
+ }
+ sleep(1000000);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 30 -l 100 > /dev/null 2>&1) &
+sleep 5
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+for i in `jot 30`; do
+ (
+ mkdir d$i
+ cd d$i
+ timeout 3m /tmp/$prog > /dev/null 2>&1 &
+ )
+done
+while pgrep -q $prog; do sleep 2; done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller79.sh b/tools/test/stress2/misc/syzkaller79.sh
new file mode 100755
index 000000000000..7413a2034a3d
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller79.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+# panic: mutex so_rcv not owned at ../../../kern/uipc_usrreq.c:1750
+# cpuid = 5
+# time = 1746938647
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01e75c5b40
+# vpanic() at vpanic+0x136/frame 0xfffffe01e75c5c70
+# panic() at panic+0x43/frame 0xfffffe01e75c5cd0
+# __mtx_assert() at __mtx_assert+0xa9/frame 0xfffffe01e75c5ce0
+# knote() at knote+0x45/frame 0xfffffe01e75c5d30
+# sowwakeup_locked() at sowwakeup_locked+0xc8/frame 0xfffffe01e75c5d50
+# socantsendmore() at socantsendmore+0x4f/frame 0xfffffe01e75c5d70
+# uipc_shutdown() at uipc_shutdown+0x113/frame 0xfffffe01e75c5db0
+# soshutdown() at soshutdown+0x3e/frame 0xfffffe01e75c5dd0
+# kern_shutdown() at kern_shutdown+0x5e/frame 0xfffffe01e75c5e00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe01e75c5f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01e75c5f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x82281772a, rsp = 0x82092efd8, rbp = 0x82092f000 ---
+# KDB: enter: panic
+# [ thread pid 54792 tid 1014483 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f192(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n277201-48578dcb6b7e-dirty: Sat May 10 13:10:42 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=ac94349a29f2efc40e9274239e4ca9b2c473a4e7
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzkaller.appspot.com/x/repro.c?x=16c074d4580000
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_SEQPACKET*/ 5ul,
+ /*proto=*/0, /*fds=*/0x200000000040ul);
+ if (res != -1)
+ r[0] = *(uint32_t*)0x200000000044;
+ syscall(SYS_fcntl, /*fd=*/r[0], /*cmd=*/4ul, /*flags=FASYNC*/ 0x40ul);
+ syscall(SYS_shutdown, /*fd=*/r[0], /*how=*/2ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/tmpfs10.sh b/tools/test/stress2/misc/tmpfs10.sh
index 870530c57ea7..6388f59959a4 100755
--- a/tools/test/stress2/misc/tmpfs10.sh
+++ b/tools/test/stress2/misc/tmpfs10.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# tmpfs(5) name lookup problem seen:
+# tmpfs(4) name lookup problem seen:
# $ ./tmpfs10.sh
# tmpfs10: unlink(p01193.14729) at loop #2: No such file or directory
diff --git a/tools/test/stress2/misc/tmpfs11.sh b/tools/test/stress2/misc/tmpfs11.sh
index efb535b8ea94..629ca8ae3d31 100755
--- a/tools/test/stress2/misc/tmpfs11.sh
+++ b/tools/test/stress2/misc/tmpfs11.sh
@@ -28,7 +28,7 @@
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
-# Test with two tmpfs(5) file systems mounted.
+# Test with two tmpfs(4) file systems mounted.
. ../default.cfg
diff --git a/tools/test/stress2/misc/tmpfs13.sh b/tools/test/stress2/misc/tmpfs13.sh
index 29b44cbc9ad4..231c42033f9d 100755
--- a/tools/test/stress2/misc/tmpfs13.sh
+++ b/tools/test/stress2/misc/tmpfs13.sh
@@ -40,6 +40,7 @@
. ../default.cfg
N=`sysctl -n hw.ncpu`
+[ $N -gt 32 ] && N=32 # Arbitrary cap
usermem=`sysctl -n hw.usermem`
[ `swapinfo | wc -l` -eq 1 ] && usermem=$((usermem/100*80))
size=$((usermem / 1024 / 1024 / 2))
diff --git a/tools/test/stress2/misc/tmpfs17.sh b/tools/test/stress2/misc/tmpfs17.sh
index 878fcf6c95d1..d5f6c50d2e48 100755
--- a/tools/test/stress2/misc/tmpfs17.sh
+++ b/tools/test/stress2/misc/tmpfs17.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# tmpfs(5) option nonc test scenario
+# tmpfs(4) option nonc test scenario
. ../default.cfg
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/tmpfs2.sh b/tools/test/stress2/misc/tmpfs2.sh
index 80885c331e14..09a2cfd68266 100755
--- a/tools/test/stress2/misc/tmpfs2.sh
+++ b/tools/test/stress2/misc/tmpfs2.sh
@@ -45,13 +45,15 @@ if [ $# -eq 0 ]; then
else
if [ $1 = find ]; then
- for i in `jot 1024`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
find ${mntpoint}* -type f > /dev/null 2>&1
done
else
# The test: Parallel mount and unmounts
- for i in `jot 1024`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
m=$1
opt=`[ $(( m % 2 )) -eq 0 ] && echo -f`
mount -t tmpfs tmpfs ${mntpoint}$m
diff --git a/tools/test/stress2/misc/tmpfs24.sh b/tools/test/stress2/misc/tmpfs24.sh
index 5e086269cd25..eb366cddc127 100755
--- a/tools/test/stress2/misc/tmpfs24.sh
+++ b/tools/test/stress2/misc/tmpfs24.sh
@@ -47,7 +47,6 @@ data #3 @ 8192, size=4096)
hole #4 @ 12288, size=4096
data #5 @ 16384, size=4096)
hole #6 @ 20480, size=524267520
-<<Missing EOF hole>>
EXP
set -eu
diff --git a/tools/test/stress2/misc/tmpfs26.sh b/tools/test/stress2/misc/tmpfs26.sh
new file mode 100755
index 000000000000..25fa59ff37c3
--- /dev/null
+++ b/tools/test/stress2/misc/tmpfs26.sh
@@ -0,0 +1,179 @@
+#!/bin/sh
+
+# Bug 272678 - VFS: Incorrect data in read from concurrent write
+
+# Test scenario by: Kristian Nielsen <knielsen@knielsen-hq.org>
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <stdio.h>
+#include <pthread.h>
+#include <sys/select.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAGIC 0x42
+
+const char *filename = "testfile.bin";
+
+static FILE *write_file;
+static FILE *read_file;
+static pthread_mutex_t write_mutex;
+static pthread_cond_t write_cond;
+static pthread_mutex_t read_mutex;
+static pthread_cond_t read_cond;
+static pthread_mutex_t state_mutex;
+static pthread_cond_t state_cond;
+static int write_state;
+static int read_state;
+
+void *
+writer_routine(void *arg __unused)
+{
+ unsigned char data[44];
+
+ memset(data, MAGIC, sizeof(data));
+ pthread_mutex_lock(&write_mutex);
+
+ for (;;) {
+
+ while (write_state != 1)
+ pthread_cond_wait(&write_cond, &write_mutex);
+
+ fwrite(data, 1, sizeof(data), write_file);
+ fflush(write_file);
+
+ pthread_mutex_lock(&state_mutex);
+ write_state = 2;
+ pthread_cond_signal(&state_cond);
+ pthread_mutex_unlock(&state_mutex);
+ }
+}
+
+void *
+reader_routine(void *arg __unused)
+{
+
+ for (;;) {
+ unsigned char buf[387];
+ int len;
+
+ while (read_state != 1)
+ pthread_cond_wait(&read_cond, &read_mutex);
+
+ len = fread(buf, 1, sizeof(buf), read_file);
+ if (len < (int)sizeof(buf) && ferror(read_file)) {
+ perror(" read file");
+ exit(1);
+ }
+ for (int i = 0; i < len; ++i) {
+ if (buf[i] != MAGIC) {
+ fprintf(stderr, "ERROR! invalid value read 0x%2x at %d of %d, pos %ld\n",
+ buf[i], i, len, ftell(read_file));
+ exit(126);
+ }
+ }
+
+ pthread_mutex_lock(&state_mutex);
+ read_state = 2;
+ pthread_cond_signal(&state_cond);
+ pthread_mutex_unlock(&state_mutex);
+ }
+}
+
+void
+create_threads(void)
+{
+ pthread_t write_thread_id, read_thread_id;
+ pthread_attr_t attr;
+
+ pthread_mutex_init(&write_mutex, NULL);
+ pthread_mutex_init(&read_mutex, NULL);
+ pthread_mutex_init(&state_mutex, NULL);
+ pthread_cond_init(&write_cond, NULL);
+ pthread_cond_init(&read_cond, NULL);
+ pthread_cond_init(&state_cond, NULL);
+
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ pthread_create(&write_thread_id, &attr, writer_routine, NULL);
+ pthread_create(&read_thread_id, &attr, reader_routine, NULL);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int num_iter = 1000;
+ int i;
+ unsigned char buf[343];
+
+ if (argc >= 2)
+ num_iter = atoi(argv[1]);
+
+ write_state = 0;
+ read_state = 0;
+
+ create_threads();
+ memset(buf, MAGIC, sizeof(buf));
+
+ for (i = 0; i < num_iter; ++i) {
+ /* Write the first part of the file. */
+ pthread_mutex_lock(&write_mutex);
+ write_file = fopen(filename, "wb");
+ if (!write_file) {
+ perror(" open file");
+ exit(1);
+ }
+ fwrite(buf, 1, sizeof(buf), write_file);
+ fflush(write_file);
+
+ /* Open a read handle on the file. */
+ pthread_mutex_lock(&read_mutex);
+ read_file = fopen(filename, "rb");
+ if (!read_file) {
+ perror(" open read file");
+ exit(1);
+ }
+
+ write_state = 1;
+ read_state = 1;
+ pthread_cond_signal(&write_cond);
+ pthread_mutex_unlock(&write_mutex);
+ pthread_cond_signal(&read_cond);
+ pthread_mutex_unlock(&read_mutex);
+
+ pthread_mutex_lock(&state_mutex);
+ while (write_state != 2 || read_state != 2)
+ pthread_cond_wait(&state_cond, &state_mutex);
+ pthread_mutex_unlock(&state_mutex);
+
+ /* Close and remove the file, ready for another iteration. */
+ pthread_mutex_lock(&write_mutex);
+ fclose(write_file);
+ write_state = 0;
+ pthread_mutex_unlock(&write_mutex);
+
+ pthread_mutex_lock(&read_mutex);
+ fclose(read_file);
+ read_state = 0;
+ pthread_mutex_unlock(&read_mutex);
+
+ unlink(filename);
+ }
+
+ return (0);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O2 /tmp/$prog.c -lpthread || exit 1
+
+mount -t tmpfs dummy $mntpoint
+cd $mntpoint
+/tmp/$prog; s=$?
+cd -
+umount $mntpoint
+
+rm /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/tmpfs27.sh b/tools/test/stress2/misc/tmpfs27.sh
new file mode 100755
index 000000000000..5479dcd9188a
--- /dev/null
+++ b/tools/test/stress2/misc/tmpfs27.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# umount FS with memory mapped file. tmpfs version.
+
+# "panic: object with writable mappings does not have a reference" seen:
+# https://people.freebsd.org/~pho/stress/log/log0518.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -eu
+prog=$(basename "$0" .sh)
+here=`pwd`
+mp1=$mntpoint
+
+mount -t tmpfs dummy $mp1
+
+export RUNDIR=$mp1/stressX
+export runRUNTIME=2m
+export LOAD=70
+export mmapLOAD=100
+export TESTPROGS="testcases/mmap/mmap testcases/swap/swap"
+set +e
+
+(cd ..; ./testcases/run/run $TESTPROGS > /dev/null 2>&1) & rpid=$!
+sleep 5
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ umount -f $mp1 &&
+ mount -t tmpfs dummy $mp1
+ mount | grep -q "on $mp1 " || break
+ pgrep -q mmap || break
+done
+pkill run swap mmap
+while pgrep -q swap; do pkill swap; done
+wait $rpid
+
+while mount | grep -q "on $mp1 "; do
+ umount $mp1
+done
+exit 0
diff --git a/tools/test/stress2/misc/tmpfs28.sh b/tools/test/stress2/misc/tmpfs28.sh
new file mode 100755
index 000000000000..d73e957b7f28
--- /dev/null
+++ b/tools/test/stress2/misc/tmpfs28.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# A SEEK_HOLE / SEEK_DATA test scenario, variation of tmpfs24.sh
+
+# A regression test for "40c1672e886b - main - swap_pager: fix
+# seek_data with invalid first page"
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+exp=/tmp/$prog.exp
+here=`pwd`
+log=/tmp/$prog.log
+
+cc -o /tmp/lsholes -Wall -Wextra -O2 $here/../tools/lsholes.c | exit 1
+cat > $exp <<EXP
+Min hole size is 4096, file size is 524288000.
+data #1 @ 0, size=4096)
+hole #2 @ 4096, size=4096
+data #3 @ 8192, size=4096)
+hole #4 @ 12288, size=4096
+data #5 @ 16384, size=4096)
+hole #6 @ 20480, size=524267520
+EXP
+
+set -eu
+mount -t tmpfs dummy $mntpoint
+set +e
+
+file=$mntpoint/file
+copy=$mntpoint/copy
+truncate -s 500m $file
+bs=`getconf MIN_HOLE_SIZE $file`
+printf "\001" | dd of=$file seek=$((0*bs)) bs=1 count=1 conv=notrunc status=none
+printf "\002" | dd of=$file seek=$((2*bs)) bs=1 count=1 conv=notrunc status=none
+printf "\003" | dd of=$file seek=$((4*bs)) bs=1 count=1 conv=notrunc status=none
+s1=0
+s2=0
+s3=0
+/tmp/lsholes $file > $log 2>&1 || s1=1
+
+cmp -s $exp $log || { s2=2; sdiff $exp $log; }
+
+$here/../testcases/swap/swap -t 2m -i 20 -h > /dev/null &
+sleep 10
+cp $file $copy
+while pkill swap; do :; done
+wait
+cmp $file $copy || { echo "copy error"; s3=4; }
+
+umount $mntpoint
+rm -f /tmp/lsholes $exp $log
+exit $((s1 + s2 + s3))
diff --git a/tools/test/stress2/misc/tmpfs8.sh b/tools/test/stress2/misc/tmpfs8.sh
index b17a329f69e7..b78f0e74562b 100755
--- a/tools/test/stress2/misc/tmpfs8.sh
+++ b/tools/test/stress2/misc/tmpfs8.sh
@@ -28,7 +28,7 @@
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
-# Demonstrate rename(2) cache problem for tmpfs(5). Fixed in r226987.
+# Demonstrate rename(2) cache problem for tmpfs(4). Fixed in r226987.
# Variation of rename6.sh
. ../default.cfg
diff --git a/tools/test/stress2/misc/umountf4.sh b/tools/test/stress2/misc/umountf4.sh
index 4f5ea0fff660..e26555e7c6f3 100755
--- a/tools/test/stress2/misc/umountf4.sh
+++ b/tools/test/stress2/misc/umountf4.sh
@@ -65,13 +65,15 @@ if [ $# -eq 0 ]; then
else
if [ $1 = find ]; then
- for i in `jot 100`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
find ${mntpoint}* -type f > /dev/null 2>&1
done
else
# The test: Parallel mount and unmounts
- for i in `jot 100`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
m=$1
opt=`[ $(( m % 2 )) -eq 0 ] && echo -f`
mount $opt /dev/md${m} ${mntpoint}$m
diff --git a/tools/test/stress2/misc/umountf6.sh b/tools/test/stress2/misc/umountf6.sh
index aeb4454ea69c..628342689b38 100755
--- a/tools/test/stress2/misc/umountf6.sh
+++ b/tools/test/stress2/misc/umountf6.sh
@@ -65,13 +65,15 @@ if [ $# -eq 0 ]; then
else
if [ $1 = find ]; then
- for i in `jot 100`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
find ${mntpoint}* -type f > /dev/null 2>&1
done
else
# The test: Parallel mount and unmounts
- for i in `jot 100`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
m=$1
opt=`[ $(( m % 2 )) -eq 0 ] && echo -f`
mount $opt /dev/md${m} ${mntpoint}$m
diff --git a/tools/test/stress2/misc/unionfs17.sh b/tools/test/stress2/misc/unionfs17.sh
index bcb6d242187b..9ddbd1cab8cb 100755
--- a/tools/test/stress2/misc/unionfs17.sh
+++ b/tools/test/stress2/misc/unionfs17.sh
@@ -6,7 +6,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
-# unionfs(8) test
+# unionfs(4) test
# Variation of unionfs7.sh, but with tmpfs
# "mkdir: rmdir(d17) Directory not empty" seen.
diff --git a/tools/test/stress2/misc/unionfs18.sh b/tools/test/stress2/misc/unionfs18.sh
index e772a67a07fb..a7840db263e1 100755
--- a/tools/test/stress2/misc/unionfs18.sh
+++ b/tools/test/stress2/misc/unionfs18.sh
@@ -6,7 +6,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
-# Simple unionfs(8) + tmpfs test
+# Simple unionfs(4) + tmpfs(4) test
# "rmdir: d2: Directory not empty" seen.
diff --git a/tools/test/stress2/misc/unionfs19.sh b/tools/test/stress2/misc/unionfs19.sh
new file mode 100755
index 000000000000..a4e31ad0857e
--- /dev/null
+++ b/tools/test/stress2/misc/unionfs19.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# umount FS with memory mapped file
+# "panic: general protection fault" seen:
+# https://people.freebsd.org/~pho/stress/log/log0519.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+here=`pwd`
+log=/tmp/$prog.log
+md1=$mdstart
+md2=$((md1 + 1))
+mp1=/mnt$md1
+mp2=/mnt$md2
+
+set -e
+mdconfig -l | grep -q md$md && mdconfig -d -u $md1
+mdconfig -l | grep -q md$u2 && mdconfig -d -u $md2
+
+mdconfig -s 2g -u $md1
+newfs $newfs_flags /dev/md$md1 > /dev/null
+mdconfig -s 2g -u $md2
+newfs $newfs_flags /dev/md$md2 > /dev/null
+
+mkdir -p $mp1 $mp2
+mount /dev/md$md1 $mp1
+mount /dev/md$md2 $mp2
+mount -t unionfs -o noatime $mp1 $mp2
+mount | grep -E "$mp1|$mp2"
+set +e
+
+export RUNDIR=$mp2/stressX
+export runRUNTIME=2m
+export LOAD=70
+export mmapLOAD=100
+export TESTPROGS="testcases/mmap/mmap testcases/swap/swap"
+
+(cd ..; ./testcases/run/run $TESTPROGS > /dev/null 2>&1) & rpid=$!
+sleep 5
+
+tail -F -n 0 /var/log/messages > $log & lpid=$!
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ umount -f $mp2 &&
+ mount -t unionfs -o noatime $mp1 $mp2
+ sleep 5
+ mount | grep -q unionfs || break
+ pgrep -q mmap || break
+done
+pkill run swap mmap
+while pgrep -q swap; do pkill swap; done
+wait $rpid
+
+umount $mp2 # The unionfs mount
+umount $mp2
+umount $mp1
+
+mdconfig -d -u $md1
+mdconfig -d -u $md2
+
+kill $lpid && wait $lpid
+grep -m 1 "pager read error" $log && s=1 || s=0
+rm $log
+exit $s
diff --git a/tools/test/stress2/misc/unionfs6.sh b/tools/test/stress2/misc/unionfs6.sh
index 54e688b0a111..cae1995a2e0d 100755
--- a/tools/test/stress2/misc/unionfs6.sh
+++ b/tools/test/stress2/misc/unionfs6.sh
@@ -27,7 +27,7 @@
# SUCH DAMAGE.
#
-# unionfs(8) test
+# unionfs(4) test
# "panic: ufs dir vp 0xfffffe0157351068 ip 0xfffffe016a63d488 flags 0x3c06" seen
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/unionfs7.sh b/tools/test/stress2/misc/unionfs7.sh
index 1684a960d142..6adcd01a5f83 100755
--- a/tools/test/stress2/misc/unionfs7.sh
+++ b/tools/test/stress2/misc/unionfs7.sh
@@ -27,7 +27,7 @@
# SUCH DAMAGE.
#
-# unionfs(8) test
+# unionfs(4) test
# "unionfs_get_node_status: 0xfffffe018f356770 is not exclusive locked but
# should be" seen.
diff --git a/tools/test/stress2/misc/unionfs8.sh b/tools/test/stress2/misc/unionfs8.sh
index 9ddf5a990b82..fdc37b16ff03 100755
--- a/tools/test/stress2/misc/unionfs8.sh
+++ b/tools/test/stress2/misc/unionfs8.sh
@@ -27,7 +27,7 @@
# SUCH DAMAGE.
#
-# unionfs(8) test with a cd9660 file system
+# unionfs(4) test with a cd9660(4) file system
# "panic: unionfs_noderem: vnode 0xfffffe014f9259c8 locked recursively" seen
# https://people.freebsd.org/~pho/stress/log/log0233.txt
diff --git a/tools/test/stress2/misc/vfork.sh b/tools/test/stress2/misc/vfork.sh
index 20db95c2b9be..cabc30ebaa6c 100755
--- a/tools/test/stress2/misc/vfork.sh
+++ b/tools/test/stress2/misc/vfork.sh
@@ -31,6 +31,9 @@
# "panic: failed to set signal flags for ast p ... fl 4" seen.
# Fixed in r302999.
+# Test scenario updated after commit:
+# ecc662c749b1 - main - PT_ATTACH: do not interrupt interruptible sleeps
+
. ../default.cfg
cd /tmp
@@ -46,38 +49,32 @@ main(void)
fprintf(stderr, "%d\n", getpid());
if ((pid = vfork()) == 0) {
-#if 0
- if (ptrace(PT_TRACE_ME, 0, 0, 0) == -1)
- err(1, "PT_TRACEME");
-#endif
sleep(30);
_exit(0);
}
if (pid == -1)
err(1, "vfork");
-
- return (0);
}
EOF
-mycc -o vfork1 -Wall -Wextra -g vfork1.c
-rm vfork1.c
+mycc -o vfork1 -Wall -Wextra -g vfork1.c || exit 1
+rm vfork1.c
cat > vfork2.c <<- EOF
#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/wait.h>
#include <err.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
-#include <sys/ptrace.h>
-#include <sys/resource.h>
-#include <sys/time.h>
-#include <sys/wait.h>
#include <unistd.h>
int
-main(int argc, char **argv)
+main(int argc, char *argv[])
{
pid_t pid, rpid;
struct rusage ru;
@@ -86,6 +83,7 @@ main(int argc, char **argv)
if (argc != 2)
errx(1, "Usage: %s <pid>", argv[0]);
pid = atoi(argv[1]);
+ status = 0;
if (pid == -1)
err(1, "fork()");
@@ -99,24 +97,17 @@ main(int argc, char **argv)
err(0, "OK wait4");
}
if (rpid == 0) {
-// fprintf(stderr, "No rusage info.\n");
if (ptrace(PT_DETACH, pid, NULL, 0) == -1)
err(1, "ptrace(%d) detach", pid);
- if (wait(&status) == -1)
- err(1, "wait");
} else {
fprintf(stderr, "FAIL Got unexpected rusage.\n");
if (ru.ru_utime.tv_sec != 0)
fprintf(stderr, "FAIL tv_sec\n");
}
- if (status != 0x4000)
- fprintf(stderr, "FAIL Child exit status 0x%x\n", status);
-
- return (0);
}
EOF
-mycc -o vfork2 -Wall -Wextra -g vfork2.c
-rm vfork2.c
+mycc -o vfork2 -Wall -Wextra -g vfork2.c || exit 1
+rm vfork2.c
./vfork1 &
sleep .2
@@ -127,5 +118,6 @@ childpid=`ps -lx | grep -v grep | grep vfork1 |
./vfork2 $childpid
s=$?
+pkill vfork1
rm -f vfork1 vfork2
exit $s
diff --git a/tools/test/stress2/misc/vunref.sh b/tools/test/stress2/misc/vunref.sh
index f844a0dd3625..f08035a95694 100755
--- a/tools/test/stress2/misc/vunref.sh
+++ b/tools/test/stress2/misc/vunref.sh
@@ -82,7 +82,8 @@ if [ $# -eq 0 ]; then
else
if [ $1 = mmap ]; then
touch $RUNDIR/active.$2
- for i in `jot 500`; do
+ start=`date +%s`
+ while [ $((`date +%s`- start)) -lt 300 ]; do
cd ${mntpoint}$2
/tmp/vunref > /dev/null 2>&1
cd /
diff --git a/tools/test/stress2/misc/zfs15.sh b/tools/test/stress2/misc/zfs15.sh
new file mode 100755
index 000000000000..b40474507517
--- /dev/null
+++ b/tools/test/stress2/misc/zfs15.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+# Test scenario suggestion by: markj@
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+kldstat -v | grep -q zfs.ko || { kldload zfs.ko; loaded=1; } ||
+ exit 0
+
+. ../default.cfg
+
+here=`pwd`
+level=`jot -r 1 1 3` # Redundancy levels
+mp1=/stress2_tank/test
+s=0
+u1=$mdstart
+u2=$((u1 + 1))
+u3=$((u1 + 2))
+u4=$((u1 + 3))
+u5=$((u1 + 4))
+
+set -e
+mdconfig -l | grep -q md$u1 && mdconfig -d -u $u1
+mdconfig -l | grep -q md$u2 && mdconfig -d -u $u2
+mdconfig -l | grep -q md$u3 && mdconfig -d -u $u3
+mdconfig -l | grep -q md$u4 && mdconfig -d -u $u4
+mdconfig -l | grep -q md$u5 && mdconfig -d -u $u5
+
+mdconfig -s 512m -u $u1
+mdconfig -s 512m -u $u2
+mdconfig -s 512m -u $u3
+mdconfig -s 512m -u $u4
+mdconfig -s 512m -u $u5
+
+zpool list | egrep -q "^stress2_tank" && zpool destroy stress2_tank
+[ -d /stress2_tank ] && rm -rf /stress2_tank
+zpool create stress2_tank raidz$level md$u1 md$u2 md$u3 md$u4
+zfs create stress2_tank/test
+set +e
+
+export RUNDIR=/stress2_tank/test/stressX
+export runRUNTIME=5m
+export LOAD=80
+export symlinkLOAD=80
+export rwLOAD=80
+export TESTPROGS="
+testcases/lockf2/lockf2
+testcases/symlink/symlink
+testcases/openat/openat
+testcases/rw/rw
+testcases/fts/fts
+testcases/link/link
+testcases/lockf/lockf
+testcases/creat/creat
+testcases/mkdir/mkdir
+testcases/rename/rename
+testcases/mkfifo/mkfifo
+testcases/dirnprename/dirnprename
+testcases/dirrename/dirrename
+testcases/swap/swap
+"
+
+(cd ..; ./testcases/run/run $TESTPROGS > /dev/null 2>&1) &
+
+sleep 60
+echo "zpool attach stress2_tank raidz$level-0 md$u5"
+zpool attach stress2_tank raidz$level-0 md$u5
+sleep 30
+zfs snapshot stress2_tank/test@1
+wait
+
+while zpool status | grep -q "in progress"; do
+ sleep 5
+done
+zpool scrub stress2_tank
+zpool status | grep -q "errors: No known data errors" ||
+ { zpool status; s=1; }
+
+zfs umount stress2_tank/test
+zfs destroy -r stress2_tank
+zpool destroy stress2_tank
+
+mdconfig -d -u $u1
+mdconfig -d -u $u2
+mdconfig -d -u $u3
+mdconfig -d -u $u4
+mdconfig -d -u $u5
+[ -n "$loaded" ] && kldunload zfs.ko
+exit $s
diff --git a/tools/test/stress2/misc/zfs16.sh b/tools/test/stress2/misc/zfs16.sh
new file mode 100755
index 000000000000..258bf9ea4799
--- /dev/null
+++ b/tools/test/stress2/misc/zfs16.sh
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+# No problems seen
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+kldstat -v | grep -q zfs.ko || { kldload zfs.ko; loaded=1; } ||
+ exit 0
+
+. ../default.cfg
+
+here=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $here/datamove.sh > zfs16.c
+mycc -o zfs16 -Wall -O0 -g zfs16.c || exit 1
+rm -f zfs16.c
+
+mp1=/stress2_tank/test
+u1=$mdstart
+u2=$((u1 + 1))
+
+set -eu
+mdconfig -l | grep -q md$u1 && mdconfig -d -u $u1
+mdconfig -l | grep -q md$u2 && mdconfig -d -u $u2
+
+mdconfig -s 2g -u $u1
+mdconfig -s 2g -u $u2
+
+zpool list | egrep -q "^stress2_tank" && zpool destroy stress2_tank
+[ -d /stress2_tank ] && rm -rf /stress2_tank
+zpool create stress2_tank md$u1 md$u2
+zfs create stress2_tank/test
+set +e
+
+(cd $here/../testcases/swap; ./swap -t 2m -i 20 -l 100 -h > /dev/null) &
+sleep 2
+cd $mp1
+while pgrep -q swap; do
+ /tmp/zfs16; s=$?
+ rm -f /stress2_tank/test/*
+done
+cd $here
+while pkill swap; do sleep 1; done
+wait
+
+zfs umount stress2_tank/test
+zfs destroy -r stress2_tank
+zpool destroy stress2_tank
+mdconfig -d -u $u1
+mdconfig -d -u $u2
+rm -f /tmp/zfs16
+set +u
+[ $loaded ] && kldunload zfs.ko
+exit $s
+EOF
+#include <sys/types.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/param.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#define SIZ (500UL * 1024 * 1024)
+
+int
+main(int argc __unused, char *argv[])
+{
+ off_t hole;
+ size_t len;
+ int fd;
+ char *p, *path;
+
+ len = SIZ;
+
+ path = argv[1];
+ if ((fd = open(path, O_CREAT | O_TRUNC | O_RDWR, 0622)) == -1)
+ err(1,"open()");
+ if (ftruncate(fd, len) == -1)
+ err(1, "ftruncate");
+ if ((p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) ==
+ MAP_FAILED) {
+ if (errno == ENOMEM)
+ return (1);
+ err(1, "mmap(1)");
+ }
+ p[1 * 1024] = 1;
+ p[2 * 1024] = 1;
+ p[4 * 1024] = 1;
+
+ if (msync(p, len, MS_SYNC | MS_INVALIDATE) == -1)
+ err(1, "msync()");
+
+ if ((hole = lseek(fd, 0, SEEK_HOLE)) == -1)
+ err(1, "lseek(SEEK_HOLE)");
+ if (hole != SIZ)
+ printf("--> hole = %jd, file size=%jd\n",
+ (intmax_t)hole, (intmax_t)SIZ);
+ close(fd);
+
+ return (hole == SIZ ? 0 : 1);
+}
diff --git a/tools/test/stress2/misc/zfs17.sh b/tools/test/stress2/misc/zfs17.sh
new file mode 100755
index 000000000000..d20e39765afa
--- /dev/null
+++ b/tools/test/stress2/misc/zfs17.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Copy from nullfs over zfs to nullfs over ufs
+# Test scenario description by: mjguzik
+
+# Page fault seen:
+# https://people.freebsd.org/~pho/stress/log/log0498.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+[ `sysctl -n kern.kstack_pages` -lt 4 ] && exit 0
+
+. ../default.cfg
+
+set -u
+kldstat -v | grep -q zfs.ko || { kldload zfs.ko ||
+ exit 0; loaded=1; }
+
+u1=$mdstart
+u2=$((u1 + 1))
+u3=$((u2 + 1))
+mp0=/stress2_tank/test # zfs mount
+mp1=$mntpoint # nullfs of zfs
+mp2=$mntpoint$mdstart # ufs
+mp3=$mntpoint$((mdstart + 1)) # nullfs of ufs
+mkdir -p $mp2 $mp3
+
+mdconfig -l | grep -q md$u1 && mdconfig -d -u $u1
+mdconfig -l | grep -q md$u2 && mdconfig -d -u $u2
+
+mdconfig -s 2g -u $u1
+mdconfig -s 2g -u $u2
+
+zpool list | egrep -q "^stress2_tank" && zpool destroy stress2_tank
+[ -d /stress2_tank ] && rm -rf /stress2_tank
+zpool create stress2_tank raidz md$u1 md$u2
+zfs create ${mp0#/}
+
+mount | grep -q $mp1 && umount -f $mp1
+mount -t nullfs $mp0 $mp1
+
+mdconfig -a -t swap -s 1g -u $u3
+newfs $newfs_flags /dev/md$u3 > /dev/null
+mount /dev/md$u3 $mp2
+mount -t nullfs $mp2 $mp3
+
+dd if=/dev/zero of=$diskimage bs=1m count=50 status=none
+cp $diskimage $mp1
+cp $mp1/diskimage $mp3
+rm -f $diskimage
+
+umount $mp3
+umount $mp2
+mdconfig -d -u $u3
+
+while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint && break
+ sleep 1
+done
+
+zfs umount ${mp0#/}
+zfs destroy -r stress2_tank
+zpool destroy stress2_tank
+
+mdconfig -d -u $u2
+mdconfig -d -u $u1
+set +u
+[ -n "$loaded" ] && kldunload zfs.ko
+exit 0
diff --git a/tools/test/stress2/misc/zfs18.sh b/tools/test/stress2/misc/zfs18.sh
new file mode 100755
index 000000000000..fb4f301f43c9
--- /dev/null
+++ b/tools/test/stress2/misc/zfs18.sh
@@ -0,0 +1,134 @@
+#!/bin/sh
+
+# File corruption scenario.
+# Test program obtained from Kyle Evans <kevans@FreeBSD.org>
+
+# "panic: VERIFY3(rc->rc_count == number) failed (4849664 == 0)" seen.
+
+# Page fault seen:
+# https://people.freebsd.org/~pho/stress/log/log0560.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+[ `sysctl -n kern.kstack_pages` -lt 4 ] && exit 0
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/mman.h>
+#include <sys/stat.h>
+
+#include <assert.h>
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+
+//#define FILE "2"
+#define FILE "file"
+
+int
+main(void)
+{
+ struct stat sb;
+ ssize_t wsz;
+ size_t bufsz;
+ void *buf, *obuf;
+ int mfd, fd;
+ int done = 0;
+
+ mfd = open(FILE, O_RDONLY);
+ assert(mfd >= 0);
+
+ assert(fstat(mfd, &sb) == 0);
+ bufsz = sb.st_size;
+ buf = obuf = mmap(NULL, bufsz, PROT_READ, MAP_SHARED, mfd, 0);
+ assert(buf != MAP_FAILED);
+
+ /* O_RDWR */
+ fd = open(FILE, O_RDWR);
+ if (fd < 0)
+ err(1, "open");
+ assert(fd >= 0);
+
+again:
+ while (bufsz > 0) {
+ wsz = write(fd, buf, bufsz);
+ if (wsz < 0)
+ err(1, "write");
+ else if (wsz == 0)
+ fprintf(stderr, "Huh?\n");
+ bufsz -= wsz;
+ buf += wsz;
+ }
+
+ bufsz = sb.st_size;
+ buf = obuf;
+
+ if (++done < 2)
+ goto again;
+
+ close(fd);
+ munmap(obuf, sb.st_size);
+ close(mfd);
+ return (0);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+set -u
+kldstat -v | grep -q zfs.ko || { kldload zfs.ko ||
+ exit 0; loaded=1; }
+
+u1=$mdstart
+u2=$((u1 + 1))
+mp0=/stress2_tank/test # zfs mount
+
+mdconfig -l | grep -q md$u1 && mdconfig -d -u $u1
+mdconfig -l | grep -q md$u2 && mdconfig -d -u $u2
+
+mdconfig -s 4g -u $u1
+mdconfig -s 4g -u $u2
+
+zpool list | egrep -q "^stress2_tank" && zpool destroy stress2_tank
+[ -d /stress2_tank ] && rm -rf /stress2_tank
+zpool create stress2_tank raidz md$u1 md$u2
+zfs create ${mp0#/}
+
+here=`pwd`
+cd /stress2_tank
+# Optimized file creation:
+#jot -b 'A' -s '' 875998989 > file
+dd if=/dev/random of=file bs=1m count=$(((875998990/1024/1024)+1)) status=none
+truncate -s 875998990 file
+cat file file > file.post
+mv file file.orig
+
+counter=1
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ cp file.orig file
+ /tmp/$prog
+ if ! cmp file file.post; then
+ echo "Iteration #$counter"
+ od -t x8 file | head -1000 > /tmp/$prog.file1
+ od -t x8 file.post | head -1000 > /tmp/$prog.file2
+ diff /tmp/$prog.file1 /tmp/$prog.file2 | head -15
+ rm /tmp/$prog.file1 /tmp/$prog.file2
+ s=1
+ break
+ fi
+ counter=$((counter + 1))
+done
+cd $here
+
+zfs umount ${mp0#/}
+zfs destroy -r stress2_tank
+zpool destroy stress2_tank
+
+mdconfig -d -u $u2
+mdconfig -d -u $u1
+set +u
+[ $loaded ] && kldunload zfs.ko
+rm /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/zfs19.sh b/tools/test/stress2/misc/zfs19.sh
new file mode 100755
index 000000000000..a3bb19c8be07
--- /dev/null
+++ b/tools/test/stress2/misc/zfs19.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Hunt for "vm_fault: pager read error, pid 99058 (mmap)"
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+kldstat -v | grep -q zfs.ko || { kldload zfs.ko; loaded=1; } ||
+ exit 0
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+here=`pwd`
+log=/tmp/$prog.log
+mp1=/stress2_tank/test
+u1=$mdstart
+u2=$((u1 + 1))
+
+set -e
+mdconfig -l | grep -q md$u1 && mdconfig -d -u $u1
+mdconfig -l | grep -q md$u2 && mdconfig -d -u $u2
+
+mdconfig -s 2g -u $u1
+mdconfig -s 2g -u $u2
+
+zpool list | egrep -q "^stress2_tank" && zpool destroy stress2_tank
+[ -d /stress2_tank ] && rm -rf /stress2_tank
+zpool create stress2_tank md$u1 md$u2
+zfs create stress2_tank/test
+set +e
+
+export RUNDIR=/stress2_tank/test/stressX
+export runRUNTIME=2m
+export LOAD=70
+export mmapLOAD=100
+export TESTPROGS="testcases/mmap/mmap testcases/swap/swap"
+
+(cd ..; ./testcases/run/run $TESTPROGS > /dev/null 2>&1) & rpid=$!
+sleep 5
+
+tail -F -n 0 /var/log/messages > $log & lpid=$!
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ zfs umount -f stress2_tank/test &&
+ zfs mount stress2_tank/test
+ sleep 5
+ zfs list | grep -q /stress2_tank/test || break
+ pgrep -q mmap || break
+done
+pkill run swap mmap
+while pgrep -q swap; do pkill swap; done
+wait $rpid
+
+zfs umount stress2_tank/test
+zfs destroy -r stress2_tank
+zpool destroy stress2_tank
+
+mdconfig -d -u $u1
+mdconfig -d -u $u2
+[ -n "$loaded" ] && kldunload zfs.ko
+
+kill $lpid && wait $lpid
+grep -m 1 "pager read error" $log && s=1 || s=0
+rm $log
+s=0 # This is an expected behavior for zfs
+exit $s
diff --git a/tools/test/stress2/misc/zzbuildworld.sh b/tools/test/stress2/misc/zzbuildworld.sh
index 2104eb156c86..e1bf867d8d5f 100755
--- a/tools/test/stress2/misc/zzbuildworld.sh
+++ b/tools/test/stress2/misc/zzbuildworld.sh
@@ -44,6 +44,7 @@ top=$mntpoint
export MAKEOBJDIRPREFIX=$top/obj
export log=$top/buildworld.`date +%Y%m%dT%H%M`
n=$((`sysctl -n hw.ncpu` + 1))
+[ $n -gt 32 ] && n=32 # Arbitrary cap
cd $src
make -j$n buildworld > $log 2>&1 && s=0 ||s=1
grep '\*\*\*' $log && s=2
diff --git a/tools/test/stress2/tools/flip.c b/tools/test/stress2/tools/flip.c
index cdc2742de59f..f2a4d86e115b 100644
--- a/tools/test/stress2/tools/flip.c
+++ b/tools/test/stress2/tools/flip.c
@@ -85,8 +85,7 @@ main(int argc, char *argv[])
struct stat st;
off_t pos;
size_t size;
- int fd, i, times;
- char c;
+ int c, fd, i, times;
times = 1;
size = 0;
@@ -126,18 +125,20 @@ main(int argc, char *argv[])
}
for (i = 0; i < times; i++) {
+ char ch;
+
pos = arc4random() % size;
if (lseek(fd, pos, SEEK_SET) == -1)
err(1, "lseek()");
- if (read(fd, &c, 1) != 1)
+ if (read(fd, &ch, 1) != 1)
err(1, "read()");
if (arc4random() % 100 < 98)
- flip(&c, 1);
+ flip(&ch, 1);
else
- trash(&c);
+ trash(&ch);
if (lseek(fd, pos, SEEK_SET) == -1)
err(1, "lseek()");
- if (write(fd, &c, 1) != 1)
+ if (write(fd, &ch, 1) != 1)
err(1, "write()");
}
diff --git a/tools/test/upsdl/Makefile b/tools/test/upsdl/Makefile
index 2e58b42c0945..e134d92ea665 100644
--- a/tools/test/upsdl/Makefile
+++ b/tools/test/upsdl/Makefile
@@ -1,4 +1,3 @@
-
PROG= upsdl
MAN=
diff --git a/tools/test/vm86/Makefile b/tools/test/vm86/Makefile
index a275cc638b66..4fd25a7f4ad3 100644
--- a/tools/test/vm86/Makefile
+++ b/tools/test/vm86/Makefile
@@ -1,4 +1,3 @@
-
all: vm86_test
vm86_test: vm86_test_asm.s vm86_test.c
diff --git a/tools/test/vm86/vm86_test.c b/tools/test/vm86/vm86_test.c
index 1057fc5c83d6..cbdb2c68a6df 100644
--- a/tools/test/vm86/vm86_test.c
+++ b/tools/test/vm86/vm86_test.c
@@ -2,7 +2,6 @@
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2018 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Konstantin Belousov <kib@FreeBSD.org>
* under sponsorship from the FreeBSD Foundation.
diff --git a/tools/test/vm86/vm86_test_asm.s b/tools/test/vm86/vm86_test_asm.s
index 22e5cf70b7f7..0d76d2e77b1e 100644
--- a/tools/test/vm86/vm86_test_asm.s
+++ b/tools/test/vm86/vm86_test_asm.s
@@ -2,7 +2,6 @@
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2018 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Konstantin Belousov <kib@FreeBSD.org>
* under sponsorship from the FreeBSD Foundation.
diff --git a/tools/test/xregs_sig/Makefile b/tools/test/xregs_sig/Makefile
index a8817c372840..fe0de78b40a0 100644
--- a/tools/test/xregs_sig/Makefile
+++ b/tools/test/xregs_sig/Makefile
@@ -1,4 +1,3 @@
-
.include <src.opts.mk>
PROG= xregs_sig
diff --git a/tools/tools/README b/tools/tools/README
index 45f1d09f2d21..c5b42d08ff0d 100644
--- a/tools/tools/README
+++ b/tools/tools/README
@@ -52,6 +52,7 @@ pciid Generate src/share/misc/pci_vendors.
pciroms A tool for dumping PCI ROM images. WARNING: alpha quality.
pirtool A tool for dumping the $PIR table on i386 machines at runtime.
scsi-defects Get at the primary or grown defect list of a SCSI disk.
+so_splice Utilities relating to the SO_SPLICE socket option.
sysdoc Build a manual page with available sysctls for a specific
kernel configuration.
track Track the progress of a world / kernel build
diff --git a/tools/tools/aac/Makefile b/tools/tools/aac/Makefile
index b55c90e832ba..2967029e7925 100644
--- a/tools/tools/aac/Makefile
+++ b/tools/tools/aac/Makefile
@@ -1,4 +1,3 @@
-
PROG= aac_checkq
MAN=
BINDIR?=/usr/local/bin
diff --git a/tools/tools/ansify/Makefile b/tools/tools/ansify/Makefile
index 9acbb961830f..b1dc9ec037d9 100644
--- a/tools/tools/ansify/Makefile
+++ b/tools/tools/ansify/Makefile
@@ -1,4 +1,3 @@
-
SCRIPTS= ansify.pl
BINDIR?= /usr/local/bin
diff --git a/tools/tools/ath/Makefile b/tools/tools/ath/Makefile
index 33dd5b0fe3ba..dd4526d7ab46 100644
--- a/tools/tools/ath/Makefile
+++ b/tools/tools/ath/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= arcode athdebug athdecode athkey athpoke athprom athrd athregs athalq
SUBDIR+= athstats ath_prom_read athradar athaggrstats
SUBDIR+= ath_ee_v14_print ath_ee_v4k_print ath_ee_9287_print ath_ee_9300_print
diff --git a/tools/tools/ath/Makefile.inc b/tools/tools/ath/Makefile.inc
index 19fde77051c5..705d318948b0 100644
--- a/tools/tools/ath/Makefile.inc
+++ b/tools/tools/ath/Makefile.inc
@@ -1,4 +1,3 @@
-
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/ath/arcode/Makefile b/tools/tools/ath/arcode/Makefile
index 9073e1dc2c86..1c4aa6558f43 100644
--- a/tools/tools/ath/arcode/Makefile
+++ b/tools/tools/ath/arcode/Makefile
@@ -1,4 +1,3 @@
-
PROG= arcode
MAN=
diff --git a/tools/tools/ath/ath_ee_9287_print/Makefile b/tools/tools/ath/ath_ee_9287_print/Makefile
index 200dbba6052f..7948141c0e00 100644
--- a/tools/tools/ath/ath_ee_9287_print/Makefile
+++ b/tools/tools/ath/ath_ee_9287_print/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_9287_print
diff --git a/tools/tools/ath/ath_ee_9300_print/Makefile b/tools/tools/ath/ath_ee_9300_print/Makefile
index 3df47a96efa8..c57f7e8c83bf 100644
--- a/tools/tools/ath/ath_ee_9300_print/Makefile
+++ b/tools/tools/ath/ath_ee_9300_print/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_9300_print
diff --git a/tools/tools/ath/ath_ee_v14_print/Makefile b/tools/tools/ath/ath_ee_v14_print/Makefile
index ebb126388cfc..c85903d423bd 100644
--- a/tools/tools/ath/ath_ee_v14_print/Makefile
+++ b/tools/tools/ath/ath_ee_v14_print/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_v14_print
diff --git a/tools/tools/ath/ath_ee_v4k_print/Makefile b/tools/tools/ath/ath_ee_v4k_print/Makefile
index 2bf0d969b1ca..a75e7fba8786 100644
--- a/tools/tools/ath/ath_ee_v4k_print/Makefile
+++ b/tools/tools/ath/ath_ee_v4k_print/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_v4k_print
diff --git a/tools/tools/ath/ath_prom_read/Makefile b/tools/tools/ath/ath_prom_read/Makefile
index bc6fdd7dd246..7338a6b8a220 100644
--- a/tools/tools/ath/ath_prom_read/Makefile
+++ b/tools/tools/ath/ath_prom_read/Makefile
@@ -1,4 +1,3 @@
-
PROG= ath_prom_read
.include <bsd.prog.mk>
diff --git a/tools/tools/ath/athaggrstats/Makefile b/tools/tools/ath/athaggrstats/Makefile
index a615a3c3f1ec..ea79e5734b29 100644
--- a/tools/tools/ath/athaggrstats/Makefile
+++ b/tools/tools/ath/athaggrstats/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= athaggrstats
diff --git a/tools/tools/ath/athalq/Makefile b/tools/tools/ath/athalq/Makefile
index e8f27327e706..c8bb2f4446e7 100644
--- a/tools/tools/ath/athalq/Makefile
+++ b/tools/tools/ath/athalq/Makefile
@@ -1,4 +1,3 @@
-
PROG= athalq
MAN=
diff --git a/tools/tools/ath/athani/Makefile b/tools/tools/ath/athani/Makefile
index ba233de9aafa..af1325af55f9 100644
--- a/tools/tools/ath/athani/Makefile
+++ b/tools/tools/ath/athani/Makefile
@@ -1,4 +1,3 @@
-
PROG= athani
MAN=
diff --git a/tools/tools/ath/athdebug/Makefile b/tools/tools/ath/athdebug/Makefile
index b50c63891e20..f05e11fc5d0b 100644
--- a/tools/tools/ath/athdebug/Makefile
+++ b/tools/tools/ath/athdebug/Makefile
@@ -1,4 +1,3 @@
-
PROG= athdebug
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athkey/Makefile b/tools/tools/ath/athkey/Makefile
index ef129fa5ecf8..f03223cfc437 100644
--- a/tools/tools/ath/athkey/Makefile
+++ b/tools/tools/ath/athkey/Makefile
@@ -1,4 +1,3 @@
-
PROG= athkey
SRCS= athkey.c
diff --git a/tools/tools/ath/athpoke/Makefile b/tools/tools/ath/athpoke/Makefile
index aede5d191135..e82c3f81fcc8 100644
--- a/tools/tools/ath/athpoke/Makefile
+++ b/tools/tools/ath/athpoke/Makefile
@@ -1,4 +1,3 @@
-
PROG= athpoke
LINKS= ${BINDIR}/${PROG} ${BINDIR}/athpeek
diff --git a/tools/tools/ath/athpoke/athpoke.c b/tools/tools/ath/athpoke/athpoke.c
index e54388587ca8..02a21676e91f 100644
--- a/tools/tools/ath/athpoke/athpoke.c
+++ b/tools/tools/ath/athpoke/athpoke.c
@@ -89,7 +89,7 @@ main(int argc, char *argv[])
atd.ad_out_data = (caddr_t) &state.revs;
atd.ad_out_size = sizeof(state.revs);
if (ioctl(s, SIOCGATHDIAG, &atd) < 0)
- err(1, atd.ad_name);
+ err(1, "%s", atd.ad_name);
argc -= optind;
argv += optind;
@@ -132,7 +132,7 @@ regread(int s, struct ath_diag *atd, uint32_t r)
atd->ad_out_size = sizeof(v);
atd->ad_id = HAL_DIAG_REGS | ATH_DIAG_IN | ATH_DIAG_DYN;
if (ioctl(s, SIOCGATHDIAG, atd) < 0)
- err(1, atd->ad_name);
+ err(1, "%s", atd->ad_name);
return v[2];
}
@@ -147,7 +147,7 @@ regwrite(int s, struct ath_diag *atd, uint32_t r, uint32_t v)
atd->ad_in_size = sizeof(rw);
atd->ad_id = HAL_DIAG_SETREGS | ATH_DIAG_IN;
if (ioctl(s, SIOCGATHDIAG, atd) < 0)
- err(1, atd->ad_name);
+ err(1, "%s", atd->ad_name);
}
static int
diff --git a/tools/tools/ath/athpow/Makefile b/tools/tools/ath/athpow/Makefile
index 6ed6f9d455f4..cfa6c8d5a3df 100644
--- a/tools/tools/ath/athpow/Makefile
+++ b/tools/tools/ath/athpow/Makefile
@@ -1,4 +1,3 @@
-
PROG= athpow
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athprom/Makefile b/tools/tools/ath/athprom/Makefile
index 6af0225d5f3c..dc273a35a79a 100644
--- a/tools/tools/ath/athprom/Makefile
+++ b/tools/tools/ath/athprom/Makefile
@@ -1,4 +1,3 @@
-
PROG= athprom
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athradar/Makefile b/tools/tools/ath/athradar/Makefile
index 0b1604a0239a..542a1401e13a 100644
--- a/tools/tools/ath/athradar/Makefile
+++ b/tools/tools/ath/athradar/Makefile
@@ -1,4 +1,3 @@
-
PROG= athradar
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athratestats/Makefile b/tools/tools/ath/athratestats/Makefile
index 96a49433a698..cd2eb507326b 100644
--- a/tools/tools/ath/athratestats/Makefile
+++ b/tools/tools/ath/athratestats/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
.PATH: ${.CURDIR}/../../../../sys/dev/ath/
diff --git a/tools/tools/ath/athrd/Makefile b/tools/tools/ath/athrd/Makefile
index eb8d42c84028..07e48492dfc2 100644
--- a/tools/tools/ath/athrd/Makefile
+++ b/tools/tools/ath/athrd/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= athrd
diff --git a/tools/tools/ath/athregs/Makefile b/tools/tools/ath/athregs/Makefile
index 8248b193f36e..3bc6d38a5945 100644
--- a/tools/tools/ath/athregs/Makefile
+++ b/tools/tools/ath/athregs/Makefile
@@ -1,4 +1,3 @@
-
PROG= athregs
CFLAGS+= -I${.CURDIR}/../common/
diff --git a/tools/tools/ath/athspectral/Makefile b/tools/tools/ath/athspectral/Makefile
index 0311d4a673f5..ef683994335b 100644
--- a/tools/tools/ath/athspectral/Makefile
+++ b/tools/tools/ath/athspectral/Makefile
@@ -1,4 +1,3 @@
-
PROG= athspectral
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athstats/Makefile b/tools/tools/ath/athstats/Makefile
index 0c2b74967b9f..0c90fe355793 100644
--- a/tools/tools/ath/athstats/Makefile
+++ b/tools/tools/ath/athstats/Makefile
@@ -1,4 +1,3 @@
-
MAN=
.include <bsd.own.mk>
diff --git a/tools/tools/ath/athsurvey/Makefile b/tools/tools/ath/athsurvey/Makefile
index 125fa6a839e2..68fd0881fd65 100644
--- a/tools/tools/ath/athsurvey/Makefile
+++ b/tools/tools/ath/athsurvey/Makefile
@@ -1,4 +1,3 @@
-
PROG= athsurvey
.include <../Makefile.inc>
diff --git a/tools/tools/ath/common/ctrl.c b/tools/tools/ath/common/ctrl.c
index 419e6fe8277e..ccea1b13401a 100644
--- a/tools/tools/ath/common/ctrl.c
+++ b/tools/tools/ath/common/ctrl.c
@@ -87,7 +87,7 @@ ath_driver_req_open(struct ath_driver_req *req, const char *ifname)
{
int s;
- if (s != -1)
+ if (req->s != -1)
ath_driver_req_close(req);
/* For now, netif socket, not /dev/ filedescriptor */
diff --git a/tools/tools/bootparttest/Makefile b/tools/tools/bootparttest/Makefile
index dcf5cddfd84b..296a178bda3f 100644
--- a/tools/tools/bootparttest/Makefile
+++ b/tools/tools/bootparttest/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${SRCTOP}/stand/common
BINDIR?= /usr/bin
diff --git a/tools/tools/build_option_survey/option_survey.sh b/tools/tools/build_option_survey/option_survey.sh
index 46ce167c49d9..c787125c9acd 100644
--- a/tools/tools/build_option_survey/option_survey.sh
+++ b/tools/tools/build_option_survey/option_survey.sh
@@ -117,7 +117,7 @@ trap "umount ${MNT} || true; mdconfig -d -u $MDUNIT" 1 2 15 EXIT
umount $MNT || true
mdconfig -d -u $MDUNIT || true
-dd if=/dev/zero of=${ODIR}/imgfile bs=1m count=4096
+dd if=/dev/zero of=${ODIR}/imgfile bs=1m count=5120
mdconfig -a -t vnode -f ${ODIR}/imgfile -u $MDUNIT
# Build & install the reference world
diff --git a/tools/tools/cfi/Makefile b/tools/tools/cfi/Makefile
index 967a5850ccfd..5c6f5eee36e3 100644
--- a/tools/tools/cfi/Makefile
+++ b/tools/tools/cfi/Makefile
@@ -1,4 +1,3 @@
-
PROG= cfi
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/crypto/cryptocheck.c b/tools/tools/crypto/cryptocheck.c
index 2db283e4f65b..6506671455ac 100644
--- a/tools/tools/crypto/cryptocheck.c
+++ b/tools/tools/crypto/cryptocheck.c
@@ -136,7 +136,7 @@
* aes-ccm128 128-bit AES-CCM
* aes-ccm192 192-bit AES-CCM
* aes-ccm256 256-bit AES-CCM
- * chacha20-poly1305 Chacha20 with Poly1305 per RFC 8439
+ * chacha20-poly1305 Chacha20 (96 bit nonce) with Poly1305 per RFC 8439
*/
#include <sys/param.h>
@@ -253,7 +253,7 @@ static const struct alg {
.evp_cipher = EVP_aes_256_ccm },
{ .name = "chacha20-poly1305", .cipher = CRYPTO_CHACHA20_POLY1305,
.type = T_AEAD, .tag_len = POLY1305_HASH_LEN,
- .iv_sizes = { CHACHA20_POLY1305_IV_LEN, 8 },
+ .iv_sizes = { CHACHA20_POLY1305_IV_LEN },
.evp_cipher = EVP_chacha20_poly1305 },
};
@@ -537,7 +537,7 @@ ocf_hash(const struct alg *alg, const char *buffer, size_t size, char *digest,
return (true);
}
-static void
+static bool
openssl_hash(const struct alg *alg, const EVP_MD *md, const void *buffer,
size_t size, void *digest_out, unsigned *digest_sz_out)
{
@@ -564,11 +564,12 @@ openssl_hash(const struct alg *alg, const EVP_MD *md, const void *buffer,
goto err_out;
EVP_MD_CTX_destroy(mdctx);
- return;
+ return (true);
err_out:
- errx(1, "OpenSSL %s HASH failed%s: %s", alg->name, errs,
+ warnx("OpenSSL %s HASH failed%s: %s", alg->name, errs,
ERR_error_string(ERR_get_error(), NULL));
+ return (false);
}
static void
@@ -590,7 +591,8 @@ run_hash_test(const struct alg *alg, size_t size)
/* OpenSSL HASH. */
digest_len = sizeof(control_digest);
- openssl_hash(alg, md, buffer, size, control_digest, &digest_len);
+ if (!openssl_hash(alg, md, buffer, size, control_digest, &digest_len))
+ goto out;
/* cryptodev HASH. */
if (!ocf_hash(alg, buffer, size, test_digest, &crid))
@@ -671,9 +673,11 @@ run_hmac_test(const struct alg *alg, size_t size)
/* OpenSSL HMAC. */
digest_len = sizeof(control_digest);
if (HMAC(md, key, key_len, (u_char *)buffer, size,
- (u_char *)control_digest, &digest_len) == NULL)
- errx(1, "OpenSSL %s (%zu) HMAC failed: %s", alg->name,
+ (u_char *)control_digest, &digest_len) == NULL) {
+ warnx("OpenSSL %s (%zu) HMAC failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto out;
+ }
/* cryptodev HMAC. */
if (!ocf_hmac(alg, buffer, size, key, key_len, test_digest, &crid))
@@ -700,7 +704,7 @@ out:
free(key);
}
-static void
+static bool
openssl_cipher(const struct alg *alg, const EVP_CIPHER *cipher, const char *key,
const char *iv, const char *input, char *output, size_t size, int enc)
{
@@ -708,27 +712,42 @@ openssl_cipher(const struct alg *alg, const EVP_CIPHER *cipher, const char *key,
int outl, total;
ctx = EVP_CIPHER_CTX_new();
- if (ctx == NULL)
- errx(1, "OpenSSL %s (%zu) ctx new failed: %s", alg->name,
+ if (ctx == NULL) {
+ warnx("OpenSSL %s (%zu) ctx new failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ return (false);
+ }
if (EVP_CipherInit_ex(ctx, cipher, NULL, (const u_char *)key,
- (const u_char *)iv, enc) != 1)
- errx(1, "OpenSSL %s (%zu) ctx init failed: %s", alg->name,
+ (const u_char *)iv, enc) != 1) {
+ warnx("OpenSSL %s (%zu) ctx init failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (EVP_CipherUpdate(ctx, (u_char *)output, &outl,
- (const u_char *)input, size) != 1)
- errx(1, "OpenSSL %s (%zu) cipher update failed: %s", alg->name,
+ (const u_char *)input, size) != 1) {
+ warnx("OpenSSL %s (%zu) cipher update failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
total = outl;
- if (EVP_CipherFinal_ex(ctx, (u_char *)output + outl, &outl) != 1)
- errx(1, "OpenSSL %s (%zu) cipher final failed: %s", alg->name,
+ if (EVP_CipherFinal_ex(ctx, (u_char *)output + outl, &outl) != 1) {
+ warnx("OpenSSL %s (%zu) cipher final failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
total += outl;
- if ((size_t)total != size)
- errx(1, "OpenSSL %s (%zu) cipher size mismatch: %d", alg->name,
+ if ((size_t)total != size) {
+ warnx("OpenSSL %s (%zu) cipher size mismatch: %d", alg->name,
size, total);
+ goto error;
+ }
+ EVP_CIPHER_CTX_free(ctx);
+ return (true);
+
+error:
EVP_CIPHER_CTX_free(ctx);
+ return (false);
}
static bool
@@ -808,22 +827,27 @@ run_cipher_test(const struct alg *alg, size_t size)
ciphertext = malloc(size);
/* OpenSSL cipher. */
- openssl_cipher(alg, cipher, key, iv, cleartext, ciphertext, size, 1);
- if (size > 0 && memcmp(cleartext, ciphertext, size) == 0)
+ if (!openssl_cipher(alg, cipher, key, iv, cleartext, ciphertext, size,
+ 1))
+ goto out_noocf;
+ if (size > 0 && memcmp(cleartext, ciphertext, size) == 0) {
warnx("OpenSSL %s (%zu): cipher text unchanged", alg->name,
size);
- openssl_cipher(alg, cipher, key, iv, ciphertext, buffer, size, 0);
+ goto out_noocf;
+ }
+ if (!openssl_cipher(alg, cipher, key, iv, ciphertext, buffer, size, 0))
+ goto out_noocf;
if (memcmp(cleartext, buffer, size) != 0) {
printf("OpenSSL %s (%zu): cipher mismatch:", alg->name, size);
printf("original:\n");
hexdump(cleartext, size, NULL, 0);
printf("decrypted:\n");
hexdump(buffer, size, NULL, 0);
- exit(1);
+ goto out_noocf;
}
if (!ocf_init_cipher_session(alg, key, key_len, &ses))
- goto out;
+ goto out_noocf;
/* OCF encrypt. */
if (!ocf_cipher(&ses, alg, iv, cleartext, buffer, size, COP_ENCRYPT))
@@ -855,6 +879,7 @@ run_cipher_test(const struct alg *alg, size_t size)
out:
ocf_destroy_session(&ses);
+out_noocf:
free(ciphertext);
free(buffer);
free(cleartext);
@@ -970,21 +995,26 @@ run_eta_test(const struct alg *alg, size_t aad_len, size_t size)
/* OpenSSL encrypt + HMAC. */
if (aad_len != 0)
memcpy(ciphertext, cleartext, aad_len);
- openssl_cipher(alg, cipher, cipher_key, iv, cleartext + aad_len,
- ciphertext + aad_len, size, 1);
+ if (!openssl_cipher(alg, cipher, cipher_key, iv, cleartext + aad_len,
+ ciphertext + aad_len, size, 1))
+ goto out_noocf;
if (size > 0 && memcmp(cleartext + aad_len, ciphertext + aad_len,
- size) == 0)
+ size) == 0) {
warnx("OpenSSL %s (%zu, %zu): cipher text unchanged",
alg->name, aad_len, size);
+ goto out_noocf;
+ }
digest_len = sizeof(control_digest);
if (HMAC(md, auth_key, auth_key_len, (u_char *)ciphertext,
- aad_len + size, (u_char *)control_digest, &digest_len) == NULL)
- errx(1, "OpenSSL %s (%zu, %zu) HMAC failed: %s", alg->name,
+ aad_len + size, (u_char *)control_digest, &digest_len) == NULL) {
+ warnx("OpenSSL %s (%zu, %zu) HMAC failed: %s", alg->name,
aad_len, size, ERR_error_string(ERR_get_error(), NULL));
+ goto out_noocf;
+ }
if (!ocf_init_eta_session(alg, cipher_key, cipher_key_len, auth_key,
auth_key_len, &ses))
- goto out;
+ goto out_noocf;
/* OCF encrypt + HMAC. */
error = ocf_eta(&ses, iv, iv_len, aad_len != 0 ? cleartext : NULL,
@@ -1060,6 +1090,7 @@ run_eta_test(const struct alg *alg, size_t aad_len, size_t size)
out:
ocf_destroy_session(&ses);
+out_noocf:
free(ciphertext);
free(buffer);
free(cleartext);
@@ -1068,7 +1099,7 @@ out:
free(cipher_key);
}
-static void
+static bool
openssl_gmac(const struct alg *alg, const EVP_CIPHER *cipher, const char *key,
const char *iv, const char *input, size_t size, char *tag)
{
@@ -1076,26 +1107,41 @@ openssl_gmac(const struct alg *alg, const EVP_CIPHER *cipher, const char *key,
int outl;
ctx = EVP_CIPHER_CTX_new();
- if (ctx == NULL)
- errx(1, "OpenSSL %s (%zu) ctx new failed: %s", alg->name,
+ if (ctx == NULL) {
+ warnx("OpenSSL %s (%zu) ctx new failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ return (false);
+ }
if (EVP_EncryptInit_ex(ctx, cipher, NULL, (const u_char *)key,
- (const u_char *)iv) != 1)
- errx(1, "OpenSSL %s (%zu) ctx init failed: %s", alg->name,
+ (const u_char *)iv) != 1) {
+ warnx("OpenSSL %s (%zu) ctx init failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (EVP_EncryptUpdate(ctx, NULL, &outl, (const u_char *)input,
- size) != 1)
- errx(1, "OpenSSL %s (%zu) update failed: %s",
+ size) != 1) {
+ warnx("OpenSSL %s (%zu) update failed: %s",
alg->name, size, ERR_error_string(ERR_get_error(), NULL));
- if (EVP_EncryptFinal_ex(ctx, NULL, &outl) != 1)
- errx(1, "OpenSSL %s (%zu) final failed: %s", alg->name,
+ goto error;
+ }
+ if (EVP_EncryptFinal_ex(ctx, NULL, &outl) != 1) {
+ warnx("OpenSSL %s (%zu) final failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, alg->tag_len,
- tag) != 1)
- errx(1, "OpenSSL %s (%zu) get tag failed: %s", alg->name,
+ tag) != 1) {
+ warnx("OpenSSL %s (%zu) get tag failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
EVP_CIPHER_CTX_free(ctx);
+ return (true);
+
+error:
+ EVP_CIPHER_CTX_free(ctx);
+ return (false);
}
static bool
@@ -1154,7 +1200,8 @@ run_gmac_test(const struct alg *alg, size_t size)
buffer = alloc_buffer(size);
/* OpenSSL GMAC. */
- openssl_gmac(alg, cipher, key, iv, buffer, size, control_tag);
+ if (!openssl_gmac(alg, cipher, key, iv, buffer, size, control_tag))
+ goto out;
/* OCF GMAC. */
if (!ocf_mac(alg, buffer, size, key, key_len, iv, test_tag, &crid))
@@ -1178,7 +1225,7 @@ out:
free(key);
}
-static void
+static bool
openssl_digest(const struct alg *alg, const char *key, u_int key_len,
const char *input, size_t size, char *tag, u_int tag_len)
{
@@ -1187,25 +1234,42 @@ openssl_digest(const struct alg *alg, const char *key, u_int key_len,
size_t len;
pkey = EVP_PKEY_new_raw_private_key(alg->pkey, NULL, key, key_len);
- if (pkey == NULL)
- errx(1, "OpenSSL %s (%zu) pkey new failed: %s", alg->name,
+ if (pkey == NULL) {
+ warnx("OpenSSL %s (%zu) pkey new failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ return (false);
+ }
mdctx = EVP_MD_CTX_new();
- if (mdctx == NULL)
- errx(1, "OpenSSL %s (%zu) ctx new failed: %s", alg->name,
+ if (mdctx == NULL) {
+ warnx("OpenSSL %s (%zu) ctx new failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
- if (EVP_DigestSignInit(mdctx, NULL, NULL, NULL, pkey) != 1)
- errx(1, "OpenSSL %s (%zu) digest sign init failed: %s",
+ EVP_PKEY_free(pkey);
+ return (false);
+ }
+ if (EVP_DigestSignInit(mdctx, NULL, NULL, NULL, pkey) != 1) {
+ warnx("OpenSSL %s (%zu) digest sign init failed: %s",
alg->name, size, ERR_error_string(ERR_get_error(), NULL));
- if (EVP_DigestSignUpdate(mdctx, input, size) != 1)
- errx(1, "OpenSSL %s (%zu) digest update failed: %s", alg->name,
+ goto error;
+ }
+ if (EVP_DigestSignUpdate(mdctx, input, size) != 1) {
+ warnx("OpenSSL %s (%zu) digest update failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
len = tag_len;
- if (EVP_DigestSignFinal(mdctx, tag, &len) != 1)
- errx(1, "OpenSSL %s (%zu) digest final failed: %s", alg->name,
+ if (EVP_DigestSignFinal(mdctx, tag, &len) != 1) {
+ warnx("OpenSSL %s (%zu) digest final failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
EVP_MD_CTX_free(mdctx);
EVP_PKEY_free(pkey);
+ return (true);
+
+error:
+ EVP_MD_CTX_free(mdctx);
+ EVP_PKEY_free(pkey);
+ return (false);
}
static void
@@ -1225,8 +1289,9 @@ run_digest_test(const struct alg *alg, size_t size)
buffer = alloc_buffer(size);
/* OpenSSL Poly1305. */
- openssl_digest(alg, key, key_len, buffer, size, control_tag,
- sizeof(control_tag));
+ if (!openssl_digest(alg, key, key_len, buffer, size, control_tag,
+ sizeof(control_tag)))
+ goto out;
/* OCF Poly1305. */
if (!ocf_mac(alg, buffer, size, key, key_len, NULL, test_tag, &crid))
@@ -1249,7 +1314,7 @@ out:
free(key);
}
-static void
+static bool
openssl_aead_encrypt(const struct alg *alg, const EVP_CIPHER *cipher,
const char *key, const char *iv, size_t iv_len, const char *aad,
size_t aad_len, const char *input, char *output, size_t size, char *tag)
@@ -1258,44 +1323,68 @@ openssl_aead_encrypt(const struct alg *alg, const EVP_CIPHER *cipher,
int outl, total;
ctx = EVP_CIPHER_CTX_new();
- if (ctx == NULL)
- errx(1, "OpenSSL %s (%zu) ctx new failed: %s", alg->name,
+ if (ctx == NULL) {
+ warnx("OpenSSL %s (%zu) ctx new failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
- if (EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1)
- errx(1, "OpenSSL %s (%zu) ctx init failed: %s", alg->name,
+ return (false);
+ }
+ if (EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1) {
+ warnx("OpenSSL %s (%zu) ctx init failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
- if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv_len, NULL) != 1)
- errx(1, "OpenSSL %s (%zu) setting iv length failed: %s", alg->name,
+ goto error;
+ }
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv_len, NULL) !=
+ 1) {
+ warnx("OpenSSL %s (%zu) setting iv length failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
if (EVP_EncryptInit_ex(ctx, NULL, NULL, (const u_char *)key,
- (const u_char *)iv) != 1)
- errx(1, "OpenSSL %s (%zu) ctx init failed: %s", alg->name,
+ (const u_char *)iv) != 1) {
+ warnx("OpenSSL %s (%zu) ctx init failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (aad != NULL) {
if (EVP_EncryptUpdate(ctx, NULL, &outl, (const u_char *)aad,
- aad_len) != 1)
- errx(1, "OpenSSL %s (%zu) aad update failed: %s",
+ aad_len) != 1) {
+ warnx("OpenSSL %s (%zu) aad update failed: %s",
alg->name, size,
ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
}
if (EVP_EncryptUpdate(ctx, (u_char *)output, &outl,
- (const u_char *)input, size) != 1)
- errx(1, "OpenSSL %s (%zu) encrypt update failed: %s", alg->name,
+ (const u_char *)input, size) != 1) {
+ warnx("OpenSSL %s (%zu) encrypt update failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
total = outl;
- if (EVP_EncryptFinal_ex(ctx, (u_char *)output + outl, &outl) != 1)
- errx(1, "OpenSSL %s (%zu) encrypt final failed: %s", alg->name,
+ if (EVP_EncryptFinal_ex(ctx, (u_char *)output + outl, &outl) != 1) {
+ warnx("OpenSSL %s (%zu) encrypt final failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
total += outl;
- if ((size_t)total != size)
- errx(1, "OpenSSL %s (%zu) encrypt size mismatch: %d", alg->name,
+ if ((size_t)total != size) {
+ warnx("OpenSSL %s (%zu) encrypt size mismatch: %d", alg->name,
size, total);
+ goto error;
+ }
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, alg->tag_len,
- tag) != 1)
- errx(1, "OpenSSL %s (%zu) get tag failed: %s", alg->name,
+ tag) != 1) {
+ warnx("OpenSSL %s (%zu) get tag failed: %s", alg->name,
size, ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
+ EVP_CIPHER_CTX_free(ctx);
+ return (true);
+
+error:
EVP_CIPHER_CTX_free(ctx);
+ return (false);
}
#ifdef notused
@@ -1343,7 +1432,7 @@ openssl_aead_decrypt(const struct alg *alg, const EVP_CIPHER *cipher,
}
#endif
-static void
+static bool
openssl_ccm_encrypt(const struct alg *alg, const EVP_CIPHER *cipher,
const char *key, const char *iv, size_t iv_len, const char *aad,
size_t aad_len, const char *input, char *output, size_t size, char *tag)
@@ -1352,63 +1441,88 @@ openssl_ccm_encrypt(const struct alg *alg, const EVP_CIPHER *cipher,
int outl, total;
ctx = EVP_CIPHER_CTX_new();
- if (ctx == NULL)
- errx(1, "OpenSSL %s/%zu (%zu, %zu) ctx new failed: %s",
+ if (ctx == NULL) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) ctx new failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
- if (EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1)
- errx(1, "OpenSSL %s/%zu (%zu, %zu) ctx init failed: %s",
+ return (false);
+ }
+ if (EVP_EncryptInit_ex(ctx, cipher, NULL, NULL, NULL) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) ctx init failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
- if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv_len, NULL) != 1)
- errx(1,
- "OpenSSL %s/%zu (%zu, %zu) setting iv length failed: %s",
+ goto error;
+ }
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, iv_len, NULL) !=
+ 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) setting iv length failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
- if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, AES_CBC_MAC_HASH_LEN, NULL) != 1)
- errx(1,
- "OpenSSL %s/%zu (%zu, %zu) setting tag length failed: %s",
+ goto error;
+ }
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, AES_CBC_MAC_HASH_LEN,
+ NULL) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) setting tag length failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
if (EVP_EncryptInit_ex(ctx, NULL, NULL, (const u_char *)key,
- (const u_char *)iv) != 1)
- errx(1, "OpenSSL %s/%zu (%zu, %zu) ctx init failed: %s",
+ (const u_char *)iv) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) ctx init failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
- if (EVP_EncryptUpdate(ctx, NULL, &outl, NULL, size) != 1)
- errx(1,
- "OpenSSL %s/%zu (%zu, %zu) unable to set data length: %s",
+ goto error;
+ }
+ if (EVP_EncryptUpdate(ctx, NULL, &outl, NULL, size) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) unable to set data length: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
if (aad != NULL) {
if (EVP_EncryptUpdate(ctx, NULL, &outl, (const u_char *)aad,
- aad_len) != 1)
- errx(1,
- "OpenSSL %s/%zu (%zu, %zu) aad update failed: %s",
+ aad_len) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) aad update failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
}
if (EVP_EncryptUpdate(ctx, (u_char *)output, &outl,
- (const u_char *)input, size) != 1)
- errx(1, "OpenSSL %s/%zu (%zu, %zu) encrypt update failed: %s",
+ (const u_char *)input, size) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) encrypt update failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
total = outl;
- if (EVP_EncryptFinal_ex(ctx, (u_char *)output + outl, &outl) != 1)
- errx(1, "OpenSSL %s/%zu (%zu, %zu) encrypt final failed: %s",
+ if (EVP_EncryptFinal_ex(ctx, (u_char *)output + outl, &outl) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) encrypt final failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
total += outl;
- if ((size_t)total != size)
- errx(1, "OpenSSL %s/%zu (%zu, %zu) encrypt size mismatch: %d",
+ if ((size_t)total != size) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) encrypt size mismatch: %d",
alg->name, iv_len, aad_len, size, total);
+ goto error;
+ }
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, AES_CBC_MAC_HASH_LEN,
- tag) != 1)
- errx(1, "OpenSSL %s/%zu (%zu, %zu) get tag failed: %s",
+ tag) != 1) {
+ warnx("OpenSSL %s/%zu (%zu, %zu) get tag failed: %s",
alg->name, iv_len, aad_len, size,
ERR_error_string(ERR_get_error(), NULL));
+ goto error;
+ }
+ EVP_CIPHER_CTX_free(ctx);
+ return (true);
+
+error:
EVP_CIPHER_CTX_free(ctx);
+ return (false);
}
static bool
@@ -1490,6 +1604,7 @@ run_aead_test(const struct alg *alg, size_t aad_len, size_t size,
u_int key_len;
int error;
char control_tag[AEAD_MAX_TAG_LEN], test_tag[AEAD_MAX_TAG_LEN];
+ bool ok;
cipher = alg->evp_cipher();
if (size % EVP_CIPHER_block_size(cipher) != 0) {
@@ -1526,14 +1641,16 @@ run_aead_test(const struct alg *alg, size_t aad_len, size_t size,
/* OpenSSL encrypt */
if (EVP_CIPHER_mode(cipher) == EVP_CIPH_CCM_MODE)
- openssl_ccm_encrypt(alg, cipher, key, iv, iv_len, aad,
+ ok = openssl_ccm_encrypt(alg, cipher, key, iv, iv_len, aad,
aad_len, cleartext, ciphertext, size, control_tag);
else
- openssl_aead_encrypt(alg, cipher, key, iv, iv_len, aad,
+ ok = openssl_aead_encrypt(alg, cipher, key, iv, iv_len, aad,
aad_len, cleartext, ciphertext, size, control_tag);
+ if (!ok)
+ goto out_noocf;
if (!ocf_init_aead_session(alg, key, key_len, iv_len, &ses))
- goto out;
+ goto out_noocf;
/* OCF encrypt */
error = ocf_aead(&ses, iv, iv_len, aad, aad_len, cleartext, buffer,
@@ -1602,6 +1719,7 @@ run_aead_test(const struct alg *alg, size_t aad_len, size_t size,
out:
ocf_destroy_session(&ses);
+out_noocf:
free(aad);
free(ciphertext);
free(buffer);
diff --git a/tools/tools/cxgbtool/Makefile b/tools/tools/cxgbtool/Makefile
index ce21555fedcf..b8f8348cc708 100644
--- a/tools/tools/cxgbtool/Makefile
+++ b/tools/tools/cxgbtool/Makefile
@@ -1,4 +1,3 @@
-
PROG= cxgbtool
SRCS= cxgbtool.c
MAN=
diff --git a/tools/tools/decioctl/Makefile b/tools/tools/decioctl/Makefile
index ffbc4b49f736..0b54c9c6d792 100644
--- a/tools/tools/decioctl/Makefile
+++ b/tools/tools/decioctl/Makefile
@@ -1,4 +1,3 @@
-
PROG= decioctl
SRCS= decioctl.c
MAN=
diff --git a/tools/tools/dmardump/Makefile b/tools/tools/dmardump/Makefile
index 2181072927b7..9ef73583bcbe 100644
--- a/tools/tools/dmardump/Makefile
+++ b/tools/tools/dmardump/Makefile
@@ -1,4 +1,3 @@
-
PROG= dmardump
SRCS= dmardump.c
MAN=
diff --git a/tools/tools/drm/radeon/mkregtable/Makefile b/tools/tools/drm/radeon/mkregtable/Makefile
index 0d346eb6eb2e..e6fadef710a9 100644
--- a/tools/tools/drm/radeon/mkregtable/Makefile
+++ b/tools/tools/drm/radeon/mkregtable/Makefile
@@ -1,4 +1,3 @@
-
all: regtables
PROG= mkregtable
diff --git a/tools/tools/ether_reflect/ether_reflect.1 b/tools/tools/ether_reflect/ether_reflect.1
index 617ee0b78378..9e94661211aa 100644
--- a/tools/tools/ether_reflect/ether_reflect.1
+++ b/tools/tools/ether_reflect/ether_reflect.1
@@ -94,8 +94,8 @@ Rewrite the destination address in each packet to 00:00:00:aa:bb:cc
before reflecting the packet.
.Sh SEE ALSO
.Xr tcpdump 1 ,
-.Xr bpf 4 ,
.Xr pcap 3 ,
+.Xr bpf 4 ,
.Xr ifconfig 8
.Sh HISTORY
The
diff --git a/tools/tools/fib_multibind/Makefile b/tools/tools/fib_multibind/Makefile
new file mode 100644
index 000000000000..1d447e788a4f
--- /dev/null
+++ b/tools/tools/fib_multibind/Makefile
@@ -0,0 +1,4 @@
+PROG= sink
+MAN=
+
+.include <bsd.prog.mk>
diff --git a/tools/tools/fib_multibind/sink.c b/tools/tools/fib_multibind/sink.c
new file mode 100644
index 000000000000..8f8c31f0c8ea
--- /dev/null
+++ b/tools/tools/fib_multibind/sink.c
@@ -0,0 +1,237 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2025 Klara, Inc.
+ */
+
+/*
+ * A program to demonstrate the effects of the net.inet.tcp.bind_all_fibs and
+ * net.inet.udp.bind_all_fibs sysctls when they are set to 0.
+ *
+ * The program accepts TCP connections (default) or UDP datagrams (-u flag) and
+ * prints the FIB on which they were received, then discards them. If -a is
+ * specific, the program accepts data from all FIBs, otherwise it only accepts
+ * data from the FIB specified by the -f option.
+ */
+
+#include <sys/event.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+
+#include <netinet/in.h>
+
+#include <err.h>
+#include <netdb.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+struct sink_softc {
+ struct sockaddr_storage ss;
+ enum { SINK_TCP, SINK_UDP } type;
+ int nfibs;
+ int kq;
+ int *fds;
+};
+
+static void _Noreturn
+usage(void)
+{
+ fprintf(stderr,
+ "usage: sink [-au] [-f <fib>] [<listen addr>] <listen port>\n");
+ exit(1);
+}
+
+static void
+check_multibind(struct sink_softc *sc)
+{
+ const char *sysctl;
+ size_t len;
+ int error, val;
+
+ sysctl = sc->type == SINK_TCP ? "net.inet.tcp.bind_all_fibs" :
+ "net.inet.udp.bind_all_fibs";
+ len = sizeof(val);
+ error = sysctlbyname(sysctl, &val, &len, NULL, 0);
+ if (error != 0)
+ err(1, "sysctlbyname(%s)", sysctl);
+ if (val != 0)
+ errx(1, "multibind is disabled, set %s=0 to enable", sysctl);
+}
+
+static void
+addrinfo(struct sink_softc *sc, const char *addr, int port)
+{
+ struct addrinfo hints, *res, *res1;
+ char portstr[8];
+ int error;
+
+ memset(&sc->ss, 0, sizeof(sc->ss));
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_socktype = sc->type == SINK_TCP ? SOCK_STREAM : SOCK_DGRAM;
+ snprintf(portstr, sizeof(portstr), "%d", port);
+ error = getaddrinfo(addr, portstr, &hints, &res);
+ if (error != 0)
+ errx(1, "%s", gai_strerror(error));
+ for (res1 = res; res != NULL; res = res->ai_next) {
+ if ((res->ai_protocol == IPPROTO_TCP && sc->type == SINK_TCP) ||
+ (res->ai_protocol == IPPROTO_UDP && sc->type == SINK_UDP)) {
+ memcpy(&sc->ss, res->ai_addr, res->ai_addrlen);
+ break;
+ }
+ }
+ if (res == NULL) {
+ errx(1, "no %s address found for '%s'",
+ sc->type == SINK_TCP ? "TCP" : "UDP", addr);
+ }
+ freeaddrinfo(res1);
+}
+
+int
+main(int argc, char **argv)
+{
+ struct sink_softc sc;
+ const char *laddr;
+ int ch, error, fib, lport;
+ bool all;
+
+ all = false;
+ sc.type = SINK_TCP;
+ fib = -1;
+ while ((ch = getopt(argc, argv, "af:u")) != -1) {
+ switch (ch) {
+ case 'a':
+ all = true;
+ break;
+ case 'f':
+ fib = atoi(optarg);
+ break;
+ case 'u':
+ sc.type = SINK_UDP;
+ break;
+ default:
+ usage();
+ break;
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (all && fib != -1)
+ errx(1, "-a and -f are mutually exclusive");
+ if (fib == -1) {
+ size_t len;
+
+ error = sysctlbyname("net.my_fibnum", &fib, &len, NULL, 0);
+ if (error != 0)
+ err(1, "sysctlbyname(net.my_fibnum)");
+ }
+
+ if (argc == 2) {
+ laddr = argv[0];
+ lport = atoi(argv[1]);
+ } else if (argc == 1) {
+ laddr = NULL;
+ lport = atoi(argv[0]);
+ } else {
+ usage();
+ }
+ addrinfo(&sc, laddr, lport);
+
+ check_multibind(&sc);
+
+ sc.kq = kqueue();
+ if (sc.kq == -1)
+ err(1, "kqueue");
+
+ if (all) {
+ size_t len;
+
+ len = sizeof(sc.nfibs);
+ error = sysctlbyname("net.fibs", &sc.nfibs, &len, NULL, 0);
+ if (error != 0)
+ err(1, "sysctlbyname(net.fibs)");
+ } else {
+ sc.nfibs = 1;
+ }
+
+ sc.fds = calloc(sc.nfibs, sizeof(int));
+ if (sc.fds == NULL)
+ err(1, "calloc");
+ for (int i = 0; i < sc.nfibs; i++) {
+ struct kevent kev;
+ int s;
+
+ if (sc.type == SINK_TCP)
+ s = socket(sc.ss.ss_family, SOCK_STREAM, 0);
+ else
+ s = socket(sc.ss.ss_family, SOCK_DGRAM, 0);
+ if (s == -1)
+ err(1, "socket");
+ error = setsockopt(s, SOL_SOCKET, SO_SETFIB,
+ all ? &i : &fib, sizeof(int));
+ if (error != 0)
+ err(1, "setsockopt(SO_SETFIB)");
+
+ error = bind(s, (struct sockaddr *)&sc.ss, sc.ss.ss_len);
+ if (error != 0)
+ err(1, "bind");
+
+ if (sc.type == SINK_TCP) {
+ error = listen(s, 5);
+ if (error != 0)
+ err(1, "listen");
+ }
+
+ EV_SET(&kev, s, EVFILT_READ, EV_ADD, 0, 0, NULL);
+ error = kevent(sc.kq, &kev, 1, NULL, 0, NULL);
+ if (error != 0)
+ err(1, "kevent");
+
+ sc.fds[i] = s;
+ }
+
+ for (;;) {
+ struct kevent kev;
+ socklen_t optlen;
+ int n;
+
+ n = kevent(sc.kq, NULL, 0, &kev, 1, NULL);
+ if (n == -1)
+ err(1, "kevent");
+ if (n == 0)
+ continue;
+
+ optlen = sizeof(fib);
+ error = getsockopt((int)kev.ident, SOL_SOCKET, SO_FIB,
+ &fib, &optlen);
+ if (error == -1)
+ err(1, "getsockopt(SO_FIB)");
+
+ if (sc.type == SINK_TCP) {
+ int cs;
+
+ printf("accepting connection from FIB %d\n", fib);
+
+ cs = accept((int)kev.ident, NULL, NULL);
+ if (cs == -1)
+ err(1, "accept");
+ close(cs);
+ } else {
+ char buf[1024];
+ ssize_t nb;
+
+ printf("receiving datagram from FIB %d\n", fib);
+
+ nb = recvfrom((int)kev.ident, buf, sizeof(buf), 0,
+ NULL, NULL);
+ if (nb == -1)
+ err(1, "recvfrom");
+ }
+ }
+
+ return (0);
+}
diff --git a/tools/tools/find-sb/Makefile b/tools/tools/find-sb/Makefile
index 413ac2a3c1cb..0642ccf2d945 100644
--- a/tools/tools/find-sb/Makefile
+++ b/tools/tools/find-sb/Makefile
@@ -1,4 +1,3 @@
-
PROG= find-sb
MAN=
diff --git a/tools/tools/fixwhite/Makefile b/tools/tools/fixwhite/Makefile
index f8932cfb77de..299bf4704717 100644
--- a/tools/tools/fixwhite/Makefile
+++ b/tools/tools/fixwhite/Makefile
@@ -1,4 +1,3 @@
-
PROG= fixwhite
BINDIR= /usr/bin
diff --git a/tools/tools/genericize/Makefile b/tools/tools/genericize/Makefile
index 25fe89a51668..15374b3558a6 100644
--- a/tools/tools/genericize/Makefile
+++ b/tools/tools/genericize/Makefile
@@ -1,4 +1,3 @@
-
SCRIPTS= genericize.pl
BINDIR?= /usr/local/bin
diff --git a/tools/tools/git/candidatematch.lua b/tools/tools/git/candidatematch.lua
deleted file mode 100755
index 481c1f38fea1..000000000000
--- a/tools/tools/git/candidatematch.lua
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/libexec/flua
-
--- MFC candidate script utility - $0 from-file to-file
---
--- from-file specifies hashes that exist only in the "MFC from" branch and
--- to-file specifies the original hashes of commits already merged to the
--- "MFC to" branch.
-
--- SPDX-License-Identifier: BSD-2-Clause
--- Copyright 2024 The FreeBSD Foundation
-
--- Read a file and return its content as a table
-local function read_file(filename)
- local file = assert(io.open(filename, "r"))
- local content = {}
- for line in file:lines() do
- table.insert(content, line)
- end
- file:close()
- return content
-end
-
--- Remove hashes from 'set1' list that are present in 'set2' list
-local function set_difference(set1, set2)
- local set2_values = {}
- for _, value in ipairs(set2) do
- set2_values[value] = true
- end
-
- local result = {}
- for _, value in ipairs(set1) do
- if not set2_values[value] then
- table.insert(result, value)
- end
- end
- return result
-end
-
--- Execute a command and print to stdout
-local function exec_command(command)
- local handle = io.popen(command)
- local output = handle:read("a")
- handle:close()
- io.write(output)
-end
-
--- Main function
-local function main()
- local from_file = arg[1]
- local to_file = arg[2]
- local exclude_file = arg[3]
-
- if not from_file or not to_file then
- print("Usage: flua $0 from-file to-file")
- return
- end
-
- local from_hashes = read_file(from_file)
- local to_hashes = read_file(to_file)
-
- local result_hashes = set_difference(from_hashes, to_hashes)
-
- if exclude_file then
- exclude_hashes = read_file(exclude_file)
- result_hashes = set_difference(result_hashes, exclude_hashes)
- end
-
- -- Print the result
- for _, hash in ipairs(result_hashes) do
- exec_command("git show --pretty='%h %s' --no-patch " .. hash)
- end
-end
-
-main()
diff --git a/tools/tools/git/ghpr/README b/tools/tools/git/ghpr/README
new file mode 100644
index 000000000000..e07d56b1e09b
--- /dev/null
+++ b/tools/tools/git/ghpr/README
@@ -0,0 +1,5 @@
+These are totally experimental
+
+Shared for collaboration on writing them, if you aren't
+in touch with Warner about them, you may find it's super
+tough sledding to use them.
diff --git a/tools/tools/git/ghpr/ghpr-init.sh b/tools/tools/git/ghpr/ghpr-init.sh
new file mode 100644
index 000000000000..567148b14716
--- /dev/null
+++ b/tools/tools/git/ghpr/ghpr-init.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+set -e
+
+die() {
+ echo $*
+ exit 1
+}
+
+# Create a fresh branch for the staging tree.
+BRANCH=${1:-staging}
+base=main
+
+if [ "$(git config branch.${BRANCH}.opabinia)" = "true" ]; then
+ echo "Branch ${BRANCH} has already been initialized"
+ # Bail if the branch already exists
+else
+ if git rev-parse --verify ${BRANCH} > /dev/null 2>&1; then
+ echo "Branch ${BRANCH} already exists, skipping creation, but rebasing to ${base}"
+ git rebase ${base} ${BRANCH}
+ else
+ # Create the branch and tag it as the one we're using for opabinia merging.
+ echo "Creating ${BRANCH} from ${base} to land changes"
+ git checkout -b ${BRANCH} ${base} || die "Can't create ${BRANCH}"
+ fi
+fi
+
+git config set --type bool --all branch.${BRANCH}.opabinia true || die "Can't annotate"
+git config set --all branch.${BRANCH}.opabinia.base "${base}" || die "Can't annotate"
diff --git a/tools/tools/git/ghpr/ghpr-push.sh b/tools/tools/git/ghpr/ghpr-push.sh
new file mode 100644
index 000000000000..1d11f31cc52a
--- /dev/null
+++ b/tools/tools/git/ghpr/ghpr-push.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+set -e
+
+die() {
+ echo $*
+ exit 1
+}
+
+staging=staging
+do_pr_branch_push=false
+
+
+# Iteratively try to push all the branches, then push upstream. Repeat until the upstream
+# push works...
+while true; do
+ # We'll likely drop pushing to the pull request branches, but that's not
+ # final, so keep the code, but if false'd out. We'll make it a proper option
+ # or remove it once the discussion settles down. Only Warner can use it at
+ # the moment anyway.
+ if $do_pr_branch_push; then
+ for pr in $(git config --get-all branch.${staging}.opabinia.prs); do
+ upstream=$(git config --get branch.${staging}.opabinia.${pr}.upstream)
+ upstream_branch=$(git config --get branch.${staging}.opabinia.${pr}.upstream-branch)
+ git push $upstream HEAD:$upstream_branch --force || true # bare git push gives cut and paste line
+ done
+ fi
+
+ if ! git push --push-option=confirm-author freebsd HEAD:main; then
+ git fetch freebsd
+ git rebase freebsd/main ${staging}
+ continue
+ fi
+ break
+done
+
+# OK, pull and rebase to catchup to these changes...
+git checkout main;
+git pull --rebase
+
+# try to cleanup
+for pr in $(git config --get-all branch.${staging}.opabinia.prs); do
+ if ! $do_pr_branch_push; then
+ gh pr edit $pr --add-label merged
+ gh pr close $pr --comment "Automated message from ghpr: Thank you for your submission. This PR has been merged to FreeBSD's `main` branch. These changes will appear shortly on our GitHub mirror."
+ fi
+ git branch -D PR-${pr}
+ git config --remove-section branch.${staging}.opabinia.${pr}
+done
+git config --remove-section branch.${staging}.opabinia
+git branch -D ${staging}
diff --git a/tools/tools/git/ghpr/ghpr-stage.sh b/tools/tools/git/ghpr/ghpr-stage.sh
new file mode 100644
index 000000000000..df9eeeeea5a3
--- /dev/null
+++ b/tools/tools/git/ghpr/ghpr-stage.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+set -e
+
+die() {
+ echo $*
+ exit 1
+}
+
+update_to_upstream() (
+ local staging=$1
+ local base=$2
+
+ git checkout ${base}
+ git pull --rebase
+ git rebase -i ${base} ${staging}
+)
+
+PR=$1
+staging=staging
+
+[ -n "${PR}" ] || die "Need a pr"
+
+if [ "$(git config branch.${staging}.opabinia)" != "true" ]; then
+ die "Branch ${staging} has not been initialized"
+fi
+
+base=$(git config branch.${staging}.opabinia.base)
+[ -n "${base}" ] || die "No base set on ${staging}"
+
+if [ -z "$(git config --get-all branch.${staging}.opabinia.prs)" ]; then
+ # Update ${base} if prs list is empty
+ update_to_upstream ${staging} ${base}
+else
+ # Otherwise checkout staging as is
+ git checkout ${staging}
+fi
+
+# OK. We always have to create a new branch for the PR. We do this into
+# ${base} first (since that's what gh pr checkout does). We then then rebase
+# this branch onto the staging branch, doing the rebase rewriting along the
+# way. This rather convoluted setup was selected over cherry-picking and/or
+# pulling a formatted patch to apply because it always applies it correctly
+# and then we use git's tools to merge, pushing the problems there rather than
+# trying to deal with them ourselves here.
+
+# In the future, PR may be a list
+# Also, error handling is annoying at best.
+
+git branch -D PR-$PR || true
+gh pr checkout $PR -b PR-$PR
+
+upstream=$(git config branch.PR-$PR.pushRemote)
+upstream_branch=$(git config branch.PR-$PR.merge | sed -e s=refs/heads/==)
+
+git rebase -i ${base} --onto ${staging} --exec 'env EDITOR=$HOME/bin/git-fixup-editor git commit --amend --trailer "Reviewed-by: imp" --trailer "Pull-Request: https://github.com/freebsd/freebsd-src/pull/'"$PR"'"'
+# Save the upstream data
+git config --add branch.${staging}.opabinia.prs ${PR}
+git config --add branch.${staging}.opabinia.${PR}.upstream ${upstream}
+git config --add branch.${staging}.opabinia.${PR}.upstream-branch ${upstream_branch}
+# Move the staging branch to the new tip of the tree.
+git checkout -B ${staging} HEAD
+
+# XXX need to somehow scrape the PR for approvals, translate that to FreeBSD's name
+# and add that in the Reviewed-by stuff... that's done by hand...
+
+# Sanity check things... not 100% right, since it checks everything we're queued up so far...
+tools/build/checkstyle9.pl ${base}..${staging}
+
+# Bump .Dd dates?
+# run before/after igor?
+# Anything else?
diff --git a/tools/tools/git/git-arc.1 b/tools/tools/git/git-arc.1
index e449875c5043..a056a2223e0e 100644
--- a/tools/tools/git/git-arc.1
+++ b/tools/tools/git/git-arc.1
@@ -24,11 +24,11 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd May 5, 2023
+.Dd Janurary 15, 2025
.Dt GIT-ARC 1
.Os
.Sh NAME
-.Nm git arc
+.Nm "git arc"
.Nd a wrapper to improve integration between git and arcanist
.Sh SYNOPSIS
.Nm
@@ -50,6 +50,7 @@
.Op Ar commit ... Ns | Ns Ar commit-range
.Nm
.Cm update
+.Op Fl l
.Op Fl m Ar message
.Op Ar commit ... Ns | Ns Ar commit-range
.Sh DESCRIPTION
@@ -58,8 +59,11 @@ The
utility creates and manages
.Fx
Phabricator reviews based on git commits.
+It requires the
+.Pa devel/arcanist
+port or package.
.Pp
-Git
+.Nm
assumes a one-to-one relationship between git commits and
Differential Revisions, and the Differential Revision title must match
the summary line of the corresponding commit.
@@ -72,19 +76,21 @@ The available verbs are:
.It Cm create
Create new Differential Revisions from the specified commits.
Accepts options:
-.Bl -tag -width subscriber
+.Bl -tag -width "-s subscriber"
.It Fl l
Before processing commit(s) display list of commits to be processed
and wait for confirmation.
.It Fl r Ar reviewer
Add one or more reviewers, separated by commas, to revision(s) being created.
-Argument(s) must be existing Phabricator user or group.
+Each argument must be an existing Phabricator user or group.
+Note that group reviewers must be specified using their
+hashtag (e.g. #jails for the "Jails" group).
.It Fl s Ar subscriber
Add one or more subscribers, separated by commas, to revision(s) being created.
Each argument must be an existing Phabricator user or group.
.It Fl p Ar parent
Specify the parent of the first commit in the list.
-This is useful when adding more commits on top of the already existing
+This is useful when adding more commits on top of an already existing
stack in Phabricator.
.El
.It Cm list
@@ -117,6 +123,11 @@ each revision.
If an empty message is supplied via
.Fl m ,
then no notes will be added when updating Differential Revisions.
+.Pp
+If
+.Fl l
+is used, display list of commits to be updated and wait for confirmation
+of the list rather than prompting for each commit.
.El
.Sh CONFIGURATION
These are manipulated by
@@ -138,9 +149,9 @@ Defaults to false.
Always use
.Dq list mode
.Pq Fl l
-with create.
-In this mode, the list of git revisions to create reviews for
-is listed with a single prompt before creating reviews.
+with create and update.
+In this mode, the list of git revisions to use
+is listed with a single prompt before creating or updating reviews.
The diffs for individual commits are not shown.
Defaults to false.
.It Va arc.verbose
@@ -176,13 +187,16 @@ $ git push freebsd HEAD:main
Create a Phabricator review using the contents of the most recent
commit in your git checkout:
.Bd -literal -offset indent
-$ git arc create -r markj HEAD
+$ git arc create -r markj,#jails HEAD
.Ed
.Pp
The commit title is used as the review title, the commit log
message is used as the review description, and
.Aq Mt markj@FreeBSD.org
is added as a reviewer.
+Also, the
+.Dq Jails
+reviewer group is added using its hashtag.
.Pp
Create a series of Phabricator reviews for each of HEAD~2, HEAD~ and
HEAD:
@@ -227,6 +241,13 @@ List the status of reviews for all the commits in the branch
.Bd -literal -offset indent
$ git arc list main..feature
.Ed
+.Pp
+Update reviews for all commits in the branch
+.Dq feature
+after rebasing:
+.Bd -literal -offset indent
+$ git arc update -lm "Rebase" main..feature
+.Ed
.Sh SEE ALSO
.Xr build 7 ,
.Xr development 7
diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh
index 1c828f3194af..b49721159799 100644
--- a/tools/tools/git/git-arc.sh
+++ b/tools/tools/git/git-arc.sh
@@ -43,6 +43,14 @@ err()
exit 1
}
+cleanup()
+{
+ rc=$?
+ rm -fr "$GITARC_TMPDIR"
+ trap - EXIT
+ exit $rc
+}
+
err_usage()
{
cat >&2 <<__EOF__
@@ -53,7 +61,7 @@ Commands:
list <commit>|<commit range>
patch [-c] <diff1> [<diff2> ...]
stage [-b branch] [<commit>|<commit range>]
- update [-m message] [<commit>|<commit range>]
+ update [-l] [-m message] [<commit>|<commit range>]
Description:
Create or manage FreeBSD Phabricator reviews based on git commits. There
@@ -100,11 +108,11 @@ Config Variables:
arc.browse [bool] -- Try to open newly created reviews in a browser tab.
Defaults to false.
- arc.list [bool] -- Always use "list mode" (-l) with create. In this
- mode, the list of git revisions to create reviews for
- is listed with a single prompt before creating
- reviews. The diffs for individual commits are not
- shown.
+ arc.list [bool] -- Always use "list mode" (-l) with create and update.
+ In this mode, the list of git revisions to use
+ is listed with a single prompt before creating or
+ updating reviews. The diffs for individual commits
+ are not shown.
arc.verbose [bool] -- Verbose output. Equivalent to the -v flag.
@@ -112,9 +120,9 @@ Examples:
Create a Phabricator review using the contents of the most recent commit in
your git checkout. The commit title is used as the review title, the commit
log message is used as the review description, markj@FreeBSD.org is added as
- a reviewer.
+ a reviewer. Also, the "Jails" reviewer group is added using its hashtag.
- $ git arc create -r markj HEAD
+ $ git arc create -r markj,#jails HEAD
Create a series of Phabricator reviews for each of HEAD~2, HEAD~ and HEAD.
Pairs of consecutive commits are linked into a patch stack. Note that the
@@ -147,6 +155,22 @@ __EOF__
exit 1
}
+# Use xmktemp instead of mktemp when creating temporary files.
+xmktemp()
+{
+ mktemp "${GITARC_TMPDIR:?}/tmp.XXXXXXXXXX" || exit 1
+}
+
+#
+# Fetch the value of a boolean config variable ($1) and return true
+# (0) if the variable is true. The default value to use if the
+# variable is not set is passed in $2.
+#
+get_bool_config()
+{
+ test "$(git config --bool --get $1 2>/dev/null || echo $2)" != "false"
+}
+
#
# Filter the output of call-conduit to remove the warnings that are generated
# for some installations where openssl module is mysteriously installed twice so
@@ -190,12 +214,12 @@ diff2status()
err "invalid diff ID $diff"
fi
- tmp=$(mktemp)
+ tmp=$(xmktemp)
echo '{"names":["'"$diff"'"]}' |
arc_call_conduit -- phid.lookup > "$tmp"
status=$(jq -r "select(.response != []) | .response.${diff}.status" < "$tmp")
summary=$(jq -r "select(.response != []) |
- .response.${diff}.fullName" < "$tmp")
+ .response.${diff}.fullName" < "$tmp")
printf "%-14s %s\n" "${status}" "${summary}"
}
@@ -269,7 +293,7 @@ create_one_review()
return 1
fi
- msg=$(mktemp)
+ msg=$(xmktemp)
git show -s --format='%B' "$commit" > "$msg"
printf "\nTest Plan:\n" >> "$msg"
printf "\nReviewers:\n" >> "$msg"
@@ -295,10 +319,9 @@ create_one_review()
"type": "parents.add",
"value": ["'"${parentphid}"'"]
}
- ]}' |
+ ]}' |
arc_call_conduit -- differential.revision.edit >&3
fi
- rm -f "$msg"
return 0
}
@@ -311,17 +334,17 @@ diff2reviewers()
reviewid=$(diff2phid "$diff")
userids=$( \
echo '{
- "constraints": {"phids": ["'"$reviewid"'"]},
- "attachments": {"reviewers": true}
- }' |
+ "constraints": {"phids": ["'"$reviewid"'"]},
+ "attachments": {"reviewers": true}
+ }' |
arc_call_conduit -- differential.revision.search |
jq '.response.data[0].attachments.reviewers.reviewers[] | select(.status == "accepted").reviewerPHID')
if [ -n "$userids" ]; then
echo '{
- "constraints": {"phids": ['"$(echo -n "$userids" | tr '[:space:]' ',')"']}
- }' |
- arc_call_conduit -- user.search |
- jq -r '.response.data[].fields.username'
+ "constraints": {"phids": ['"$(echo $userids | tr '[:blank:]' ',')"']}
+ }' |
+ arc_call_conduit -- user.search |
+ jq -r '.response.data[].fields.username'
fi
}
@@ -378,7 +401,7 @@ gitarc__create()
list=
prev=""
- if [ "$(git config --bool --get arc.list 2>/dev/null || echo false)" != "false" ]; then
+ if get_bool_config arc.list false; then
list=1
fi
doprompt=1
@@ -417,7 +440,7 @@ gitarc__create()
for commit in ${commits}; do
if create_one_review "$commit" "$reviewers" "$subscribers" "$prev" \
- "$doprompt"; then
+ "$doprompt"; then
prev=$(commit2diff "$commit")
else
prev=""
@@ -434,12 +457,12 @@ gitarc__list()
for commit in $commits; do
chash=$(git show -s --format='%C(auto)%h' "$commit")
- echo -n "${chash} "
+ printf "%s" "${chash} "
diff=$(log2diff "$commit")
if [ -n "$diff" ]; then
- diff2status "$diff"
- continue
+ diff2status "$diff"
+ continue
fi
# This does not use commit2diff as it needs to handle errors
@@ -447,11 +470,11 @@ gitarc__list()
title=$(git show -s --format=%s "$commit")
diff=$(echo "$openrevs" | \
awk -F'D[1-9][0-9]*: ' \
- '{if ($2 == "'"$(echo $title | sed 's/"/\\"/g')"'") print $0}')
+ '{if ($2 == "'"$(echo $title | sed 's/"/\\"/g')"'") print $0}')
if [ -z "$diff" ]; then
echo "No Review : $title"
elif [ "$(echo "$diff" | wc -l)" -ne 1 ]; then
- echo -n "Ambiguous Reviews: "
+ printf "%s" "Ambiguous Reviews: "
echo "$diff" | grep -E -o 'D[1-9][0-9]*:' | tr -d ':' \
| paste -sd ',' - | sed 's/,/, /g'
else
@@ -481,18 +504,18 @@ find_author()
# freebsd.org (which isn't surprising for ports committers getting src
# commits reviewed).
case "${addr}" in
- *.*) ;; # external user
+ *.*) ;; # external user
*)
- echo "${name} <${addr}@FreeBSD.org>"
- return
- ;;
+ echo "${name} <${addr}@FreeBSD.org>"
+ return
+ ;;
esac
# Choice 2: author_addr and author_name were set in the bundle, so use
# that. We may need to filter some known bogus ones, should they crop up.
if [ -n "$author_name" -a -n "$author_addr" ]; then
- echo "${author_name} <${author_addr}>"
- return
+ echo "${author_name} <${author_addr}>"
+ return
fi
# Choice 3: We can find this user in the FreeBSD repo. They've submited
@@ -500,8 +523,8 @@ find_author()
# similar to their phab username.
email=$(git log -1 --author "$(echo ${addr} | tr _ .)" --pretty="%aN <%aE>")
if [ -n "${email}" ]; then
- echo "${email}"
- return
+ echo "${email}"
+ return
fi
# Choice 4: We know this user. They've committed before, and they happened
@@ -509,11 +532,11 @@ find_author()
# might not be a good idea, since names can be somewhat common (there
# are two Andrew Turners that have contributed to FreeBSD, for example).
if ! (echo "${name}" | grep -w "[Uu]ser" -q); then
- email=$(git log -1 --author "${name}" --pretty="%aN <%aE>")
- if [ -n "$email" ]; then
- echo "$email"
- return
- fi
+ email=$(git log -1 --author "${name}" --pretty="%aN <%aE>")
+ if [ -n "$email" ]; then
+ echo "$email"
+ return
+ fi
fi
# Choice 5: Wing it as best we can. In this scenario, we replace the last _
@@ -522,60 +545,68 @@ find_author()
# don't know if the prior _ are _ or + or any number of other characters.
# Since there's issues here, prompt
a=$(printf "%s <%s>\n" "${name}" $(echo "$addr" | sed -e 's/\(.*\)_/\1@/'))
- echo "Making best guess: Truning ${addr} to ${a}"
+ echo "Making best guess: Turning ${addr} to ${a}"
if ! prompt; then
- echo "ABORT"
- return
+ echo "ABORT"
+ return
fi
echo "${a}"
}
patch_commit()
{
- local diff reviewid review_data authorid user_data user_addr user_name author
- local tmp author_addr author_name
+ local diff reviewid review_data authorid user_data user_addr user_name
+ local diff_data author_addr author_name author tmp
diff=$1
reviewid=$(diff2phid "$diff")
# Get the author phid for this patch
- review_data=$(echo '{
- "constraints": {"phids": ["'"$reviewid"'"]}
- }' |
- arc_call_conduit -- differential.revision.search)
- authorid=$(echo "$review_data" | jq -r '.response.data[].fields.authorPHID' )
+ review_data=$(xmktemp)
+ echo '{"constraints": {"phids": ["'"$reviewid"'"]}}' | \
+ arc_call_conduit -- differential.revision.search > "$review_data"
+ authorid=$(jq -r '.response.data[].fields.authorPHID' "$review_data")
# Get metadata about the user that submitted this patch
- user_data=$(echo '{
- "constraints": {"phids": ["'"$authorid"'"]}
- }' |
- arc call-conduit -- user.search | grep -v ^Warning: |
- jq -r '.response.data[].fields')
- user_addr=$(echo "$user_data" | jq -r '.username')
- user_name=$(echo "$user_data" | jq -r '.realName')
+ user_data=$(xmktemp)
+ echo '{"constraints": {"phids": ["'"$authorid"'"]}}' | \
+ arc_call_conduit -- user.search | \
+ jq -r '.response.data[].fields' > "$user_data"
+ user_addr=$(jq -r '.username' "$user_data")
+ user_name=$(jq -r '.realName' "$user_data")
# Dig the data out of querydiffs api endpoint, although it's deprecated,
# since it's one of the few places we can get email addresses. It's unclear
# if we can expect multiple difference ones of these. Some records don't
# have this data, so we remove all the 'null's. We sort the results and
# remove duplicates 'just to be sure' since we've not seen multiple
# records that match.
- diff_data=$(echo '{
- "revisionIDs": [ '"${diff#D}"' ]
- }' | arc_call_conduit -- differential.querydiffs |
- jq -r '.response | flatten | .[]')
- author_addr=$(echo "$diff_data" | jq -r ".authorEmail?" | sort -u)
- author_name=$(echo "$diff_data" | jq -r ".authorName?" | sort -u)
+ diff_data=$(xmktemp)
+ echo '{"revisionIDs": [ '"${diff#D}"' ]}' | \
+ arc_call_conduit -- differential.querydiffs |
+ jq -r '.response | flatten | .[]' > "$diff_data"
+ author_addr=$(jq -r ".authorEmail?" "$diff_data" | sort -u)
+ author_name=$(jq -r ".authorName?" "$diff_data" | sort -u)
+
+ # JSON will return "null" when a field is not populated.
+ # Turn this string into an empty one.
+ if [ "$author_addr" = "null" ]; then
+ author_addr=""
+ fi
+ if [ "$author_name" = "null" ]; then
+ author_name=""
+ fi
+
author=$(find_author "$user_addr" "$user_name" "$author_addr" "$author_name")
# If we had to guess, and the user didn't want to guess, abort
if [ "${author}" = "ABORT" ]; then
- warn "Not committing due to uncertainty over author name"
- exit 1
+ warn "Not committing due to uncertainty over author name"
+ exit 1
fi
- tmp=$(mktemp)
- echo "$review_data" | jq -r '.response.data[].fields.title' > $tmp
- echo >> $tmp
- echo "$review_data" | jq -r '.response.data[].fields.summary' >> $tmp
- echo >> $tmp
+ tmp=$(xmktemp)
+ jq -r '.response.data[].fields.title' "$review_data" > "$tmp"
+ echo >> "$tmp"
+ jq -r '.response.data[].fields.summary' "$review_data" >> "$tmp"
+ echo >> "$tmp"
# XXX this leaves an extra newline in some cases.
reviewers=$(diff2reviewers "$diff" | sed '/^$/d' | paste -sd ',' - | sed 's/,/, /g')
if [ -n "$reviewers" ]; then
@@ -584,7 +615,6 @@ patch_commit()
# XXX TODO refactor with gitarc__stage maybe?
printf "Differential Revision:\thttps://reviews.freebsd.org/%s\n" "${diff}" >> "$tmp"
git commit --author "${author}" --file "$tmp"
- rm "$tmp"
}
gitarc__patch()
@@ -599,7 +629,7 @@ gitarc__patch()
while getopts c o; do
case "$o" in
c)
- require_clean_work_tree "patch -c"
+ require_clean_work_tree "patch -c"
commit=true
;;
*)
@@ -613,9 +643,9 @@ gitarc__patch()
arc patch --skip-dependencies --nocommit --nobranch --force "$rev"
echo "Applying ${rev}..."
[ $? -eq 0 ] || break
- if ${commit}; then
- patch_commit $rev
- fi
+ if ${commit}; then
+ patch_commit $rev
+ fi
done
}
@@ -644,7 +674,7 @@ gitarc__stage()
git checkout -q -b "${branch}" main
fi
- tmp=$(mktemp)
+ tmp=$(xmktemp)
for commit in $commits; do
git show -s --format=%B "$commit" > "$tmp"
title=$(git show -s --format=%s "$commit")
@@ -669,10 +699,18 @@ gitarc__stage()
gitarc__update()
{
- local commit commits diff have_msg msg
+ local commit commits diff doprompt have_msg list o msg
- while getopts m: o; do
+ list=
+ if get_bool_config arc.list false; then
+ list=1
+ fi
+ doprompt=1
+ while getopts lm: o; do
case "$o" in
+ l)
+ list=1
+ ;;
m)
msg="$OPTARG"
have_msg=1
@@ -685,10 +723,21 @@ gitarc__update()
shift $((OPTIND-1))
commits=$(build_commit_list "$@")
+
+ if [ "$list" ]; then
+ for commit in ${commits}; do
+ git --no-pager show --oneline --no-patch "$commit"
+ done | git_pager
+ if ! prompt; then
+ return
+ fi
+ doprompt=
+ fi
+
for commit in ${commits}; do
diff=$(commit2diff "$commit")
- if ! show_and_prompt "$commit"; then
+ if [ "$doprompt" ] && ! show_and_prompt "$commit"; then
break
fi
@@ -708,7 +757,7 @@ gitarc__update()
set -e
ASSUME_YES=
-if [ "$(git config --bool --get arc.assume-yes 2>/dev/null || echo false)" != "false" ]; then
+if get_bool_config arc.assume-yes false; then
ASSUME_YES=1
fi
@@ -782,8 +831,11 @@ list|patch)
;;
esac
-if [ "$(git config --bool --get arc.browse 2>/dev/null || echo false)" != "false" ]; then
+if get_bool_config arc.browse false; then
BROWSE=--browse
fi
+GITARC_TMPDIR=$(mktemp -d) || exit 1
+trap cleanup EXIT HUP INT QUIT TRAP USR1 TERM
+
gitarc__"${verb}" "$@"
diff --git a/tools/tools/git/hooks/prepare-commit-msg b/tools/tools/git/hooks/prepare-commit-msg
index ac3844accec2..e8e0e2887c3f 100755
--- a/tools/tools/git/hooks/prepare-commit-msg
+++ b/tools/tools/git/hooks/prepare-commit-msg
@@ -38,7 +38,7 @@ outfile=$(mktemp /tmp/freebsd-git-commit.XXXXXXXX)
cat >$outfile <<EOF
$(awk '1;/^#$/{exit}' $1)
-# 72 columns --|
+# 50 columns --| 72 columns --|
#
# Uncomment and complete these metadata fields, as appropriate:
#
diff --git a/tools/tools/git/mfc-candidates.lua b/tools/tools/git/mfc-candidates.lua
new file mode 100755
index 000000000000..d2865a892971
--- /dev/null
+++ b/tools/tools/git/mfc-candidates.lua
@@ -0,0 +1,217 @@
+#!/usr/libexec/flua
+
+-- SPDX-License-Identifier: BSD-2-Clause
+-- Copyright 2024 The FreeBSD Foundation
+
+-- MFC candidate search utility. Identify hashes that exist only in the
+-- "MFC from" branch and do not have a corresponding "cherry picked from"
+-- commit in the "MFC to" branch.
+
+-- Execute a command and return its output. A final newline is stripped,
+-- similar to sh.
+local function exec_command(command)
+ local handle = assert(io.popen(command))
+ local output = handle:read("a")
+ handle:close()
+ if output:sub(-1) == "\n" then
+ return output:sub(1, -2)
+ end
+ return output
+end
+
+-- Return a table of cherry-pick (MFC) candidates.
+local function read_from(from_branch, to_branch, author, dirspec)
+ local command = "git rev-list --first-parent --reverse "
+ command = command .. to_branch .. ".." .. from_branch
+ if #author > 0 then
+ command = command .. " --committer \\<" .. author .. "@"
+ end
+ if dirspec then
+ command = command .. " " .. dirspec
+ end
+ if verbose > 1 then
+ print("Obtaining MFC-from commits using command:")
+ print(command)
+ end
+ local handle = assert(io.popen(command))
+ local content = {}
+ for line in handle:lines() do
+ table.insert(content, line)
+ end
+ handle:close()
+ return content
+end
+
+-- Return a table of original hashes of changes that have already been
+-- cherry-picked (MFC'd).
+local function read_to(from_branch, to_branch, dirspec)
+ local command = "git log " .. from_branch .. ".." .. to_branch
+ command = command .. " --grep 'cherry picked from'"
+ if dirspec then
+ command = command .. " " .. dirspec
+ end
+ if verbose > 1 then
+ print("Obtaining MFC-to commits using command:")
+ print(command)
+ end
+ local handle = assert(io.popen(command))
+ local content = {}
+ for line in handle:lines() do
+ local hash = line:match("%(cherry picked from commit ([0-9a-f]+)%)")
+ if hash then
+ table.insert(content, hash)
+ end
+ end
+ handle:close()
+ return content
+end
+
+-- Read a commit exclude file and return its content as a table. Comments
+-- starting with # and text after a hash is ignored.
+local function read_exclude(filename)
+ local file = assert(io.open(filename, "r"))
+ local content = {}
+ for line in file:lines() do
+ local hash = line:match("^%x+")
+ if hash then
+ -- Hashes are 40 chars; if less, expand short hash.
+ if #hash < 40 then
+ hash = exec_command(
+ "git rev-parse " .. hash)
+ end
+ table.insert(content, hash)
+ end
+ end
+ file:close()
+ return content
+end
+
+--- Remove hashes from 'set1' list that are present in 'set2' list
+local function set_difference(set1, set2)
+ local set2_values = {}
+ for _, value in ipairs(set2) do
+ set2_values[value] = true
+ end
+
+ local result = {}
+ for _, value in ipairs(set1) do
+ if not set2_values[value] then
+ table.insert(result, value)
+ end
+ end
+ return result
+end
+
+-- Global state
+verbose = 0
+
+local function params(from_branch, to_branch, author)
+ print("from: " .. from_branch)
+ print("to: " .. to_branch)
+ if #author > 0 then
+ print("author/committer: " .. author)
+ else
+ print("author/committer: <all>")
+ end
+end
+
+local function usage(from_branch, to_branch, author)
+ local script_name = arg[0]:match("([^/]+)$")
+ print(script_name .. " [-ah] [-f from_branch] [-t to_branch] [-u user] [-X exclude_file] [path ...]")
+ print()
+ params(from_branch, to_branch, author)
+end
+
+-- Main function
+local function main()
+ local from_branch = "freebsd/main"
+ local to_branch = ""
+ local author = os.getenv("USER") or ""
+ local dirspec = nil
+
+ local url = exec_command("git remote get-url freebsd")
+ local freebsd_repo = string.match(url, "[^/]+$")
+ freebsd_repo = string.gsub(freebsd_repo, ".git$", "")
+ if freebsd_repo == "ports" or freebsd_repo == "freebsd-ports" then
+ local year = os.date("%Y")
+ local month = os.date("%m")
+ local qtr = math.ceil(month / 3)
+ to_branch = "freebsd/" .. year .. "Q" .. qtr
+ elseif freebsd_repo == "src" or freebsd_repo == "freebsd-src" then
+ to_branch = "freebsd/stable/14"
+ -- If pwd is a stable or release branch tree, default to it.
+ local cur_branch = exec_command("git symbolic-ref --short HEAD")
+ if string.match(cur_branch, "^stable/") then
+ to_branch = cur_branch
+ elseif string.match(cur_branch, "^releng/") then
+ to_branch = cur_branch
+ local major = string.match(cur_branch, "%d+")
+ from_branch = "freebsd/stable/" .. major
+ end
+ else
+ print("pwd is not under a ports or src repository.")
+ return
+ end
+
+ local do_help = false
+ local exclude_file = nil
+ local i = 1
+ while i <= #arg and arg[i] do
+ local opt = arg[i]
+ if opt == "-a" then
+ author = ""
+ elseif opt == "-f" then
+ from_branch = arg[i + 1]
+ i = i + 1
+ elseif opt == "-h" then
+ do_help = true
+ i = i + 1
+ elseif opt == "-t" then
+ to_branch = arg[i + 1]
+ i = i + 1
+ elseif opt == "-u" then
+ author = arg[i + 1]
+ i = i + 1
+ elseif opt == "-v" then
+ verbose = verbose + 1
+ elseif opt == "-X" then
+ exclude_file = arg[i + 1]
+ i = i + 1
+ else
+ break
+ end
+ i = i + 1
+ end
+
+ if do_help then
+ usage(from_branch, to_branch, author)
+ return
+ end
+
+ if arg[i] then
+ dirspec = arg[i]
+ --print("dirspec = " .. dirspec)
+ -- XXX handle multiple dirspecs?
+ end
+
+ if verbose > 0 then
+ params(from_branch, to_branch, author)
+ end
+
+ local from_hashes = read_from(from_branch, to_branch, author, dirspec)
+ local to_hashes = read_to(from_branch, to_branch, dirspec)
+
+ local result_hashes = set_difference(from_hashes, to_hashes)
+
+ if exclude_file then
+ exclude_hashes = read_exclude(exclude_file)
+ result_hashes = set_difference(result_hashes, exclude_hashes)
+ end
+
+ -- Print the result
+ for _, hash in ipairs(result_hashes) do
+ print(exec_command("git show --pretty='%h %s' --no-patch " .. hash))
+ end
+end
+
+main()
diff --git a/tools/tools/git/mfc-candidates.sh b/tools/tools/git/mfc-candidates.sh
deleted file mode 100644
index c232a1ad3345..000000000000
--- a/tools/tools/git/mfc-candidates.sh
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/bin/sh
-
-#-
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright 2022 The FreeBSD Foundation
-#
-# This software was developed by Ed Maste
-# under sponsorship from the FreeBSD Foundation.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted providing that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-
-from_branch=freebsd/main
-author="${USER}"
-
-# Get the FreeBSD repository
-repo=$(basename "$(git remote get-url freebsd 2>/dev/null)" 2>/dev/null)
-
-if [ "${repo}" = "ports.git" ]; then
- year=$(date '+%Y')
- month=$(date '+%m')
- qtr=$(((month-1) / 3 + 1))
- to_branch="freebsd/${year}Q${qtr}"
-elif [ "${repo}" = "src.git" ]; then
- to_branch=freebsd/stable/14
- # If pwd is a stable or release branch tree, default to it.
- cur_branch=$(git symbolic-ref --short HEAD 2>/dev/null)
- case $cur_branch in
- stable/*)
- to_branch=$cur_branch
- ;;
- releng/*)
- to_branch=$cur_branch
- major=${cur_branch#releng/}
- major=${major%.*}
- from_branch=freebsd/stable/$major
- esac
-else
- echo "pwd is not under a ports or src repository."
- exit 0
-fi
-
-params()
-{
- echo "from: $from_branch"
- echo "to: $to_branch"
- if [ -n "$author" ]; then
- echo "author/committer: $author"
- else
- echo "author/committer: <all>"
- fi
-}
-
-usage()
-{
- echo "usage: $(basename $0) [-ah] [-f from_branch] [-t to_branch] [-u user] [-X exclude_file] [path ...]"
- echo
- params
- exit 0
-}
-
-while getopts "af:ht:u:vX:" opt; do
- case $opt in
- a)
- # All authors/committers
- author=
- ;;
- f)
- from_branch=$OPTARG
- ;;
- h)
- usage
- ;;
- t)
- to_branch=$OPTARG
- ;;
- u)
- author=$OPTARG
- ;;
- v)
- verbose=1
- ;;
- X)
- if [ ! -r "$OPTARG" ]; then
- echo "Exclude file $OPTARG not readable" >&2
- exit 1
- fi
- exclude_file=$OPTARG
- ;;
- esac
-done
-shift $(($OPTIND - 1))
-
-if [ $verbose ]; then
- params
- echo
-fi
-
-authorarg=
-if [ -n "$author" ]; then
- # Match user ID in the email portion of author or committer
- authorarg="--committer <${author}@"
-fi
-
-# Commits in from_branch after branch point
-commits_from()
-{
- git rev-list --first-parent --reverse $authorarg $to_branch..$from_branch "$@"
-}
-
-# "cherry picked from" hashes from commits in to_branch after branch point
-commits_to()
-{
- git log $from_branch..$to_branch --grep 'cherry picked from' "$@" |\
- sed -E -n 's/^[[:space:]]*\(cherry picked from commit ([0-9a-f]+)\)[[:space:]]*$/\1/p'
-}
-
-# Turn a list of short hashes (and optional descriptions) into a list of full
-# hashes.
-canonicalize_hashes()
-{
- while read hash rest; do
- case "${hash}" in
- "#"*) continue ;;
- esac
- if ! git show --pretty=%H --no-patch $hash; then
- echo "error parsing hash list" >&2
- exit 1
- fi
- done | sort
-}
-
-workdir=$(mktemp -d /tmp/find-mfc.XXXXXXXXXX)
-from_list=$workdir/commits-from
-to_list=$workdir/commits-to
-
-if [ -n "$exclude_file" ]; then
- exclude_list=$workdir/commits-exclude
- canonicalize_hashes < $exclude_file > $exclude_list
-fi
-
-commits_from "$@" > $from_list
-commits_to "$@" > $to_list
-
-/usr/libexec/flua $(dirname $0)/candidatematch.lua \
- $from_list $to_list $exclude_list
-
-rm -rf "$workdir"
diff --git a/tools/tools/hcomp/Makefile b/tools/tools/hcomp/Makefile
index 6adaa3456bf9..d1d1f640553c 100644
--- a/tools/tools/hcomp/Makefile
+++ b/tools/tools/hcomp/Makefile
@@ -1,4 +1,3 @@
-
BINDIR ?= ${HOME}/bin
BINOWN ?= ${USER}
BINGRP ?= ${USER}
diff --git a/tools/tools/ifinfo/Makefile b/tools/tools/ifinfo/Makefile
index 9b0c60733563..3e95a642ca5f 100644
--- a/tools/tools/ifinfo/Makefile
+++ b/tools/tools/ifinfo/Makefile
@@ -1,4 +1,3 @@
-
PROG= ifinfo
SRCS= ifinfo.c rfc1650.c
MAN=
diff --git a/tools/tools/ifpifa/Makefile b/tools/tools/ifpifa/Makefile
index b822022defd2..b5aa64fe8b76 100644
--- a/tools/tools/ifpifa/Makefile
+++ b/tools/tools/ifpifa/Makefile
@@ -1,4 +1,3 @@
-
PROG= ifpifa
MAN=
BINDIR?=/usr/local/bin
diff --git a/tools/tools/intel-ucode-split/Makefile b/tools/tools/intel-ucode-split/Makefile
index 61a61d79445e..52d355050955 100644
--- a/tools/tools/intel-ucode-split/Makefile
+++ b/tools/tools/intel-ucode-split/Makefile
@@ -1,4 +1,3 @@
-
PROG= intel-ucode-split
MAN=
diff --git a/tools/tools/ioat/Makefile b/tools/tools/ioat/Makefile
index 50601d250de5..7822cb5b0e93 100644
--- a/tools/tools/ioat/Makefile
+++ b/tools/tools/ioat/Makefile
@@ -1,4 +1,3 @@
-
PROG= ioatcontrol
MAN= ioatcontrol.8
BINDIR?= /usr/bin
diff --git a/tools/tools/ipw/Makefile b/tools/tools/ipw/Makefile
index f10ec3a03e35..cb8fcaf9fa81 100644
--- a/tools/tools/ipw/Makefile
+++ b/tools/tools/ipw/Makefile
@@ -1,4 +1,3 @@
-
PROG= ipwstats
MAN=
diff --git a/tools/tools/iwi/Makefile b/tools/tools/iwi/Makefile
index 42a72a901ada..0e3c3c78fe08 100644
--- a/tools/tools/iwi/Makefile
+++ b/tools/tools/iwi/Makefile
@@ -1,4 +1,3 @@
-
PROG= iwistats
MAN=
diff --git a/tools/tools/iwn/Makefile b/tools/tools/iwn/Makefile
index 948299d6c434..34ec4aa669ef 100644
--- a/tools/tools/iwn/Makefile
+++ b/tools/tools/iwn/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= iwnstats
.include <bsd.subdir.mk>
diff --git a/tools/tools/iwn/iwnstats/Makefile b/tools/tools/iwn/iwnstats/Makefile
index ccf1617c64b2..c5cf15a2bce4 100644
--- a/tools/tools/iwn/iwnstats/Makefile
+++ b/tools/tools/iwn/iwnstats/Makefile
@@ -1,4 +1,3 @@
-
MAN=
.include <bsd.own.mk>
diff --git a/tools/tools/kgdb/tcplog.py b/tools/tools/kgdb/tcplog.py
new file mode 100644
index 000000000000..380f5fc85b53
--- /dev/null
+++ b/tools/tools/kgdb/tcplog.py
@@ -0,0 +1,267 @@
+#!/usr/bin/env python3
+
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# This software was developed by Tom Jones <thj@FreeBSD.org> under sponsorship
+# from The FreeBSD Foundation
+
+## Extracting logs using the kgdb script
+#
+# This script extracts tcp black box logs from a kernel core for use with
+# tcplog_dumper[1] and readbbr_log[2].
+#
+# Some system configuration is required to enable black box logs
+#
+# [1]: https://github.com/Netflix/tcplog_dumper
+# [2]: https://github.com/Netflix/read_bbrlog
+#
+# TCP Logs can be extracted from FreeBSD kernel core dumps using the gdb plugin
+# provided in the `kgdb` directory. An example usage assuming relevant kernel
+# builds and coredumps looks like:
+#
+# $ kgdb kernel-debug/kernel.debug vmcore.last
+# Reading symbols from coredump/kernel-debug/kernel.debug...
+#
+# Unread portion of the kernel message buffer:
+# KDB: enter: sysctl debug.kdb.enter
+#
+# __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
+# 57 __asm("movq %%gs:%P1,%0" : "=r" (td) : "n" (offsetof(struct pcpu,
+# (kgdb) source tcplog.py
+# (kgdb) tcplog_dump vnet0
+# processing struct tcpcb * 0xfffff80006e8ca80
+# _t_logstate: 4 _t_logpoint: 0 '\000' t_lognum: 25 t_logsn: 25
+# log written to 0xfffff80006e8ca80_tcp_log.bin
+# processing struct tcpcb * 0xfffff8000ec2b540
+# _t_logstate: 4 _t_logpoint: 0 '\000' t_lognum: 8 t_logsn: 8
+# log written to 0xfffff8000ec2b540_tcp_log.bin
+# processing struct tcpcb * 0xfffff80006bd9540
+# no logs
+# processing struct tcpcb * 0xfffff80006bd9a80
+# no logs
+# processing struct tcpcb * 0xfffff8001d837540
+# no logs
+# processing struct tcpcb * 0xfffff8001d837000
+# no logs
+#
+# processed 1 vnets, dumped 2 logs
+# 0xfffff80006e8ca80_tcp_log.bin 0xfffff8000ec2b540_tcp_log.bin
+#
+#
+# The generated files can be given to tcplog_dumper to generate pcaps like so:
+#
+# $ tcplog_dumper -s -f 0xfffff80006e8ca80_tcp_log.bin
+#
+
+import struct
+
+TLB_FLAG_RXBUF = 0x0001 #/* Includes receive buffer info */
+TLB_FLAG_TXBUF = 0x0002 #/* Includes send buffer info */
+TLB_FLAG_HDR = 0x0004 #/* Includes a TCP header */
+TLB_FLAG_VERBOSE = 0x0008 #/* Includes function/line numbers */
+TLB_FLAG_STACKINFO = 0x0010 #/* Includes stack-specific info */
+
+TCP_LOG_BUF_VER = 9 # from netinet/tcp_log_buf.h
+TCP_LOG_DEV_TYPE_BBR = 1 # from dev/tcp_log/tcp_log_dev.h
+
+TCP_LOG_ID_LEN = 64
+TCP_LOG_TAG_LEN = 32
+TCP_LOG_REASON_LEN = 32
+
+AF_INET = 2
+AF_INET6 = 28
+
+INC_ISIPV6 = 0x01
+
+class TCPLogDump(gdb.Command):
+
+ def __init__(self):
+ super(TCPLogDump, self).__init__(
+ "tcplog_dump", gdb.COMMAND_USER
+ )
+
+ def dump_tcpcb(self, tcpcb):
+ if tcpcb['t_lognum'] == 0:
+ print("processing {}\t{}\n\tno logs".format(tcpcb.type, tcpcb))
+ return
+ else:
+ print("processing {}\t{}".format(tcpcb.type, tcpcb))
+
+ print("\t_t_logstate:\t{} _t_logpoint:\t{} t_lognum:\t{} t_logsn:\t{}".format(
+ tcpcb['_t_logstate'], tcpcb['_t_logpoint'], tcpcb['t_lognum'], tcpcb['t_logsn']))
+
+ eaddr = (tcpcb['t_logs']['stqh_first'])
+ log_buf = bytes()
+ while eaddr != 0:
+ log_buf += self.print_tcplog_entry(eaddr)
+ eaddr = eaddr.dereference()['tlm_queue']['stqe_next']
+
+ if log_buf:
+ filename = "{}_tcp_log.bin".format(tcpcb)
+
+ with open(filename, "wb") as f:
+ f.write(self.format_header(tcpcb, eaddr, len(log_buf)))
+ f.write(log_buf)
+ self.logfiles_dumped.append(filename)
+ print("\tlog written to {}".format(filename))
+
+ # tcpcb, entry address, length of data for header
+ def format_header(self, tcpcb, eaddr, datalen):
+ # Get a handle we can use to read memory
+ inf = gdb.inferiors()[0] # in a coredump this should always be safe
+
+ # Add the common header
+ hdrlen = gdb.parse_and_eval("sizeof(struct tcp_log_header)")
+ hdr = struct.pack("=llq", TCP_LOG_BUF_VER, TCP_LOG_DEV_TYPE_BBR, hdrlen+datalen)
+
+ inp = tcpcb.cast(gdb.lookup_type("struct inpcb").pointer())
+
+ # Add entry->tldl_ie
+ bufaddr = gdb.parse_and_eval(
+ "&(((struct inpcb *){})->inp_inc.inc_ie)".format(tcpcb))
+ length = gdb.parse_and_eval("sizeof(struct in_endpoints)")
+ hdr += inf.read_memory(bufaddr, length).tobytes()
+
+ # Add boot time
+ hdr += struct.pack("=16x") # BOOTTIME
+
+ # Add id, tag and reason as UNKNOWN
+
+ unknown = bytes("UNKNOWN", "ascii")
+
+ hdr += struct.pack("={}s{}s{}s"
+ .format(TCP_LOG_ID_LEN, TCP_LOG_TAG_LEN, TCP_LOG_REASON_LEN),
+ unknown, unknown, unknown
+ )
+
+ # Add entry->tldl_af
+ if inp['inp_inc']['inc_flags'] & INC_ISIPV6:
+ hdr += struct.pack("=b", AF_INET6)
+ else:
+ hdr += struct.pack("=b", AF_INET)
+
+ hdr += struct.pack("=7x") # pad[7]
+
+ if len(hdr) != hdrlen:
+ print("header len {} bytes NOT CORRECT should be {}".format(len(hdr), hdrlen))
+
+ return hdr
+
+ def print_tcplog_entry(self, eaddr):
+ # implement tcp_log_logs_to_buf
+ entry = eaddr.dereference()
+
+ # If header is present copy out entire buffer
+ # otherwise copy just to the start of the header.
+ if entry['tlm_buf']['tlb_eventflags'] & TLB_FLAG_HDR:
+ length = gdb.parse_and_eval("sizeof(struct tcp_log_buffer)")
+ else:
+ length = gdb.parse_and_eval("&((struct tcp_log_buffer *) 0)->tlb_th")
+
+ bufaddr = gdb.parse_and_eval("&(((struct tcp_log_mem *){})->tlm_buf)".format(eaddr))
+
+ # Get a handle we can use to read memory
+ inf = gdb.inferiors()[0] # in a coredump this should always be safe
+ buf_mem = inf.read_memory(bufaddr, length).tobytes()
+
+ # If needed copy out a header size worth of 0 bytes
+ # this was a simple expression untiil gdb got involved.
+ if not entry['tlm_buf']['tlb_eventflags'] & TLB_FLAG_HDR:
+ buf_mem += bytes([0 for b
+ in range(
+ gdb.parse_and_eval("sizeof(struct tcp_log_buffer) - {}".format(length))
+ )
+ ])
+
+ # If verbose is set:
+ if entry['tlm_buf']['tlb_eventflags'] & TLB_FLAG_VERBOSE:
+ bufaddr = gdb.parse_and_eval("&(((struct tcp_log_mem *){})->tlm_v)".format(eaddr))
+ length = gdb.parse_and_eval("sizeof(struct tcp_log_verbose)")
+ buf_mem += inf.read_memory(bufaddr, length).tobytes()
+
+ return buf_mem
+
+ def dump_vnet(self, vnet):
+ # This is the general access pattern for something in a vnet.
+ cmd = "(struct inpcbinfo*)((((struct vnet *) {} )->vnet_data_base) + (uintptr_t )&vnet_entry_tcbinfo)".format(vnet)
+ ti = gdb.parse_and_eval(cmd)
+
+ # Get the inplist head (struct inpcb *)(struct inpcbinfo*)({})->ipi_listhead
+ inplist = ti['ipi_listhead']
+ self.walk_inplist(inplist)
+
+ def walk_inplist(self, inplist):
+ inp = inplist['clh_first']
+ while inp != 0:
+ self.dump_tcpcb(inp.cast(gdb.lookup_type("struct tcpcb").pointer()))
+ inp = inp['inp_list']['cle_next']
+
+ def walk_vnets(self, vnet):
+ vnets = []
+ while vnet != 0:
+ vnets.append(vnet)
+ vnet = vnet['vnet_le']['le_next']
+ return vnets
+
+ def complete(self, text, word):
+ return gdb.COMPLETE_SYMBOL
+
+ def invoke(self, args, from_tty):
+ if not args:
+ self.usage()
+ return
+
+ self.logfiles_dumped = []
+
+ node = gdb.parse_and_eval(args)
+
+ # If we are passed vnet0 pull out the first vnet, it is always there.
+ if str(node.type) == "struct vnet_list_head *":
+ print("finding start of the vnet list and continuing")
+ node = node["lh_first"]
+
+ if str(node.type) == "struct vnet *":
+ vnets = self.walk_vnets(node)
+ for vnet in vnets:
+ self.dump_vnet(vnet)
+
+ print("\nprocessed {} vnets, dumped {} logs\n\t{}"
+ .format(len(vnets), len(self.logfiles_dumped), " ".join(self.logfiles_dumped)))
+ elif str(node.type) == "struct inpcbinfo *":
+ inplist = node['ipi_listhead']
+ self.walk_inplist(inplist)
+
+ print("\ndumped {} logs\n\t{}"
+ .format(len(self.logfiles_dumped), " ".join(self.logfiles_dumped)))
+ elif str(node.type) == "struct tcpcb *":
+ self.dump_tcpcb(node)
+ else:
+ self.usage()
+
+ return
+
+ def usage(self):
+ print("tcplog_dump <address ish>")
+ print("Locate tcp_log_buffers and write them to a file")
+ print("Address can be one of:")
+ print("\tvnet list head (i.e. vnet0)")
+ print("\tvnet directly")
+ print("\tinpcbinfo")
+ print("\ttcpcb")
+ print("\nIf given anything other than a struct tcpcb *, will try and walk all available members")
+ print("that can be found")
+ print("\n")
+ print("logs will be written to files in cwd in the format:")
+ print("\t\t `%p_tcp_log.bin` struct tcpcb *")
+ print("\t\t existing files will be stomped on")
+ print("\nexamples:\n")
+ print("\t(kgdb) tcplog_dump vnet0")
+ print("\t(kgdb) tcplog_dump (struct inpcbinfo *)V_tcbinfo # on a non-vnet kernel (maybe, untested)")
+ print("\t(kgdb) tcplog_dump (struct tcpcb *)0xfffff80006e8ca80")
+ print("\t\twill result in a file called: 0xfffff80006e8ca80_tcp_log.bin\n\n")
+
+ return
+
+TCPLogDump()
+
diff --git a/tools/tools/kttcp/Makefile b/tools/tools/kttcp/Makefile
index fe332e3c048f..cfa275f5d5ef 100644
--- a/tools/tools/kttcp/Makefile
+++ b/tools/tools/kttcp/Makefile
@@ -1,4 +1,3 @@
-
SHELL= /bin/sh
PROG= kttcp
diff --git a/tools/tools/kttcp/sys/Makefile b/tools/tools/kttcp/sys/Makefile
index 851921a54e93..c8f468418892 100644
--- a/tools/tools/kttcp/sys/Makefile
+++ b/tools/tools/kttcp/sys/Makefile
@@ -1,4 +1,3 @@
-
KMOD = kttcp
SRCS = kttcp.c
SRCS += device_if.h
diff --git a/tools/tools/locale/Makefile b/tools/tools/locale/Makefile
index f3b399b50551..b49c90e691be 100644
--- a/tools/tools/locale/Makefile
+++ b/tools/tools/locale/Makefile
@@ -7,7 +7,7 @@
# Modified by John Marino to suit DragonFly needs
#
-CLDRVERSION= 43.0
+CLDRVERSION= 45.0
UCDVERSION= 15.0.0
.if ${.CURDIR} == ${.OBJDIR}
diff --git a/tools/tools/locale/etc/final-maps/map.UTF-8 b/tools/tools/locale/etc/final-maps/map.UTF-8
index 6cf3951aca38..6c3431c99b90 100644
--- a/tools/tools/locale/etc/final-maps/map.UTF-8
+++ b/tools/tools/locale/etc/final-maps/map.UTF-8
@@ -5,9 +5,9 @@
# charset: UTF-8
######################
#################################################################################################
-# Copyright © 1991-2023 Unicode, Inc.
+# Copyright © 1991-2024 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
-# SPDX-License-Identifier: Unicode-DFS-2016
+# SPDX-License-Identifier: Unicode-3.0
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
<code_set_name> "UTF-8"
@@ -11372,6 +11372,10 @@ CHARMAP
<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_UPPER_RIGHT> \xE2\xBF\xB9
<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_LOWER_LEFT> \xE2\xBF\xBA
<IDEOGRAPHIC_DESCRIPTION_CHARACTER_OVERLAID> \xE2\xBF\xBB
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_RIGHT> \xE2\xBF\xBC
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_LOWER_RIGHT> \xE2\xBF\xBD
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_HORIZONTAL_REFLECTION> \xE2\xBF\xBE
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_ROTATION> \xE2\xBF\xBF
<IDEOGRAPHIC_SPACE> \xE3\x80\x80
<IDEOGRAPHIC_COMMA> \xE3\x80\x81
<IDEOGRAPHIC_FULL_STOP> \xE3\x80\x82
@@ -11846,6 +11850,7 @@ CHARMAP
<CJK_STROKE_HZZZG> \xE3\x87\xA1
<CJK_STROKE_PG> \xE3\x87\xA2
<CJK_STROKE_Q> \xE3\x87\xA3
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SUBTRACTION> \xE3\x87\xAF
<KATAKANA_LETTER_SMALL_KU> \xE3\x87\xB0
<KATAKANA_LETTER_SMALL_SI> \xE3\x87\xB1
<KATAKANA_LETTER_SMALL_SU> \xE3\x87\xB2
@@ -145780,6 +145785,628 @@ CHARMAP
<CJK_UNIFIED_IDEOGRAPH-2EBDE> \xF0\xAE\xAF\x9E
<CJK_UNIFIED_IDEOGRAPH-2EBDF> \xF0\xAE\xAF\x9F
<CJK_UNIFIED_IDEOGRAPH-2EBE0> \xF0\xAE\xAF\xA0
+<CJK_UNIFIED_IDEOGRAPH-2EBF0> \xF0\xAE\xAF\xB0
+<CJK_UNIFIED_IDEOGRAPH-2EBF1> \xF0\xAE\xAF\xB1
+<CJK_UNIFIED_IDEOGRAPH-2EBF2> \xF0\xAE\xAF\xB2
+<CJK_UNIFIED_IDEOGRAPH-2EBF3> \xF0\xAE\xAF\xB3
+<CJK_UNIFIED_IDEOGRAPH-2EBF4> \xF0\xAE\xAF\xB4
+<CJK_UNIFIED_IDEOGRAPH-2EBF5> \xF0\xAE\xAF\xB5
+<CJK_UNIFIED_IDEOGRAPH-2EBF6> \xF0\xAE\xAF\xB6
+<CJK_UNIFIED_IDEOGRAPH-2EBF7> \xF0\xAE\xAF\xB7
+<CJK_UNIFIED_IDEOGRAPH-2EBF8> \xF0\xAE\xAF\xB8
+<CJK_UNIFIED_IDEOGRAPH-2EBF9> \xF0\xAE\xAF\xB9
+<CJK_UNIFIED_IDEOGRAPH-2EBFA> \xF0\xAE\xAF\xBA
+<CJK_UNIFIED_IDEOGRAPH-2EBFB> \xF0\xAE\xAF\xBB
+<CJK_UNIFIED_IDEOGRAPH-2EBFC> \xF0\xAE\xAF\xBC
+<CJK_UNIFIED_IDEOGRAPH-2EBFD> \xF0\xAE\xAF\xBD
+<CJK_UNIFIED_IDEOGRAPH-2EBFE> \xF0\xAE\xAF\xBE
+<CJK_UNIFIED_IDEOGRAPH-2EBFF> \xF0\xAE\xAF\xBF
+<CJK_UNIFIED_IDEOGRAPH-2EC00> \xF0\xAE\xB0\x80
+<CJK_UNIFIED_IDEOGRAPH-2EC01> \xF0\xAE\xB0\x81
+<CJK_UNIFIED_IDEOGRAPH-2EC02> \xF0\xAE\xB0\x82
+<CJK_UNIFIED_IDEOGRAPH-2EC03> \xF0\xAE\xB0\x83
+<CJK_UNIFIED_IDEOGRAPH-2EC04> \xF0\xAE\xB0\x84
+<CJK_UNIFIED_IDEOGRAPH-2EC05> \xF0\xAE\xB0\x85
+<CJK_UNIFIED_IDEOGRAPH-2EC06> \xF0\xAE\xB0\x86
+<CJK_UNIFIED_IDEOGRAPH-2EC07> \xF0\xAE\xB0\x87
+<CJK_UNIFIED_IDEOGRAPH-2EC08> \xF0\xAE\xB0\x88
+<CJK_UNIFIED_IDEOGRAPH-2EC09> \xF0\xAE\xB0\x89
+<CJK_UNIFIED_IDEOGRAPH-2EC0A> \xF0\xAE\xB0\x8A
+<CJK_UNIFIED_IDEOGRAPH-2EC0B> \xF0\xAE\xB0\x8B
+<CJK_UNIFIED_IDEOGRAPH-2EC0C> \xF0\xAE\xB0\x8C
+<CJK_UNIFIED_IDEOGRAPH-2EC0D> \xF0\xAE\xB0\x8D
+<CJK_UNIFIED_IDEOGRAPH-2EC0E> \xF0\xAE\xB0\x8E
+<CJK_UNIFIED_IDEOGRAPH-2EC0F> \xF0\xAE\xB0\x8F
+<CJK_UNIFIED_IDEOGRAPH-2EC10> \xF0\xAE\xB0\x90
+<CJK_UNIFIED_IDEOGRAPH-2EC11> \xF0\xAE\xB0\x91
+<CJK_UNIFIED_IDEOGRAPH-2EC12> \xF0\xAE\xB0\x92
+<CJK_UNIFIED_IDEOGRAPH-2EC13> \xF0\xAE\xB0\x93
+<CJK_UNIFIED_IDEOGRAPH-2EC14> \xF0\xAE\xB0\x94
+<CJK_UNIFIED_IDEOGRAPH-2EC15> \xF0\xAE\xB0\x95
+<CJK_UNIFIED_IDEOGRAPH-2EC16> \xF0\xAE\xB0\x96
+<CJK_UNIFIED_IDEOGRAPH-2EC17> \xF0\xAE\xB0\x97
+<CJK_UNIFIED_IDEOGRAPH-2EC18> \xF0\xAE\xB0\x98
+<CJK_UNIFIED_IDEOGRAPH-2EC19> \xF0\xAE\xB0\x99
+<CJK_UNIFIED_IDEOGRAPH-2EC1A> \xF0\xAE\xB0\x9A
+<CJK_UNIFIED_IDEOGRAPH-2EC1B> \xF0\xAE\xB0\x9B
+<CJK_UNIFIED_IDEOGRAPH-2EC1C> \xF0\xAE\xB0\x9C
+<CJK_UNIFIED_IDEOGRAPH-2EC1D> \xF0\xAE\xB0\x9D
+<CJK_UNIFIED_IDEOGRAPH-2EC1E> \xF0\xAE\xB0\x9E
+<CJK_UNIFIED_IDEOGRAPH-2EC1F> \xF0\xAE\xB0\x9F
+<CJK_UNIFIED_IDEOGRAPH-2EC20> \xF0\xAE\xB0\xA0
+<CJK_UNIFIED_IDEOGRAPH-2EC21> \xF0\xAE\xB0\xA1
+<CJK_UNIFIED_IDEOGRAPH-2EC22> \xF0\xAE\xB0\xA2
+<CJK_UNIFIED_IDEOGRAPH-2EC23> \xF0\xAE\xB0\xA3
+<CJK_UNIFIED_IDEOGRAPH-2EC24> \xF0\xAE\xB0\xA4
+<CJK_UNIFIED_IDEOGRAPH-2EC25> \xF0\xAE\xB0\xA5
+<CJK_UNIFIED_IDEOGRAPH-2EC26> \xF0\xAE\xB0\xA6
+<CJK_UNIFIED_IDEOGRAPH-2EC27> \xF0\xAE\xB0\xA7
+<CJK_UNIFIED_IDEOGRAPH-2EC28> \xF0\xAE\xB0\xA8
+<CJK_UNIFIED_IDEOGRAPH-2EC29> \xF0\xAE\xB0\xA9
+<CJK_UNIFIED_IDEOGRAPH-2EC2A> \xF0\xAE\xB0\xAA
+<CJK_UNIFIED_IDEOGRAPH-2EC2B> \xF0\xAE\xB0\xAB
+<CJK_UNIFIED_IDEOGRAPH-2EC2C> \xF0\xAE\xB0\xAC
+<CJK_UNIFIED_IDEOGRAPH-2EC2D> \xF0\xAE\xB0\xAD
+<CJK_UNIFIED_IDEOGRAPH-2EC2E> \xF0\xAE\xB0\xAE
+<CJK_UNIFIED_IDEOGRAPH-2EC2F> \xF0\xAE\xB0\xAF
+<CJK_UNIFIED_IDEOGRAPH-2EC30> \xF0\xAE\xB0\xB0
+<CJK_UNIFIED_IDEOGRAPH-2EC31> \xF0\xAE\xB0\xB1
+<CJK_UNIFIED_IDEOGRAPH-2EC32> \xF0\xAE\xB0\xB2
+<CJK_UNIFIED_IDEOGRAPH-2EC33> \xF0\xAE\xB0\xB3
+<CJK_UNIFIED_IDEOGRAPH-2EC34> \xF0\xAE\xB0\xB4
+<CJK_UNIFIED_IDEOGRAPH-2EC35> \xF0\xAE\xB0\xB5
+<CJK_UNIFIED_IDEOGRAPH-2EC36> \xF0\xAE\xB0\xB6
+<CJK_UNIFIED_IDEOGRAPH-2EC37> \xF0\xAE\xB0\xB7
+<CJK_UNIFIED_IDEOGRAPH-2EC38> \xF0\xAE\xB0\xB8
+<CJK_UNIFIED_IDEOGRAPH-2EC39> \xF0\xAE\xB0\xB9
+<CJK_UNIFIED_IDEOGRAPH-2EC3A> \xF0\xAE\xB0\xBA
+<CJK_UNIFIED_IDEOGRAPH-2EC3B> \xF0\xAE\xB0\xBB
+<CJK_UNIFIED_IDEOGRAPH-2EC3C> \xF0\xAE\xB0\xBC
+<CJK_UNIFIED_IDEOGRAPH-2EC3D> \xF0\xAE\xB0\xBD
+<CJK_UNIFIED_IDEOGRAPH-2EC3E> \xF0\xAE\xB0\xBE
+<CJK_UNIFIED_IDEOGRAPH-2EC3F> \xF0\xAE\xB0\xBF
+<CJK_UNIFIED_IDEOGRAPH-2EC40> \xF0\xAE\xB1\x80
+<CJK_UNIFIED_IDEOGRAPH-2EC41> \xF0\xAE\xB1\x81
+<CJK_UNIFIED_IDEOGRAPH-2EC42> \xF0\xAE\xB1\x82
+<CJK_UNIFIED_IDEOGRAPH-2EC43> \xF0\xAE\xB1\x83
+<CJK_UNIFIED_IDEOGRAPH-2EC44> \xF0\xAE\xB1\x84
+<CJK_UNIFIED_IDEOGRAPH-2EC45> \xF0\xAE\xB1\x85
+<CJK_UNIFIED_IDEOGRAPH-2EC46> \xF0\xAE\xB1\x86
+<CJK_UNIFIED_IDEOGRAPH-2EC47> \xF0\xAE\xB1\x87
+<CJK_UNIFIED_IDEOGRAPH-2EC48> \xF0\xAE\xB1\x88
+<CJK_UNIFIED_IDEOGRAPH-2EC49> \xF0\xAE\xB1\x89
+<CJK_UNIFIED_IDEOGRAPH-2EC4A> \xF0\xAE\xB1\x8A
+<CJK_UNIFIED_IDEOGRAPH-2EC4B> \xF0\xAE\xB1\x8B
+<CJK_UNIFIED_IDEOGRAPH-2EC4C> \xF0\xAE\xB1\x8C
+<CJK_UNIFIED_IDEOGRAPH-2EC4D> \xF0\xAE\xB1\x8D
+<CJK_UNIFIED_IDEOGRAPH-2EC4E> \xF0\xAE\xB1\x8E
+<CJK_UNIFIED_IDEOGRAPH-2EC4F> \xF0\xAE\xB1\x8F
+<CJK_UNIFIED_IDEOGRAPH-2EC50> \xF0\xAE\xB1\x90
+<CJK_UNIFIED_IDEOGRAPH-2EC51> \xF0\xAE\xB1\x91
+<CJK_UNIFIED_IDEOGRAPH-2EC52> \xF0\xAE\xB1\x92
+<CJK_UNIFIED_IDEOGRAPH-2EC53> \xF0\xAE\xB1\x93
+<CJK_UNIFIED_IDEOGRAPH-2EC54> \xF0\xAE\xB1\x94
+<CJK_UNIFIED_IDEOGRAPH-2EC55> \xF0\xAE\xB1\x95
+<CJK_UNIFIED_IDEOGRAPH-2EC56> \xF0\xAE\xB1\x96
+<CJK_UNIFIED_IDEOGRAPH-2EC57> \xF0\xAE\xB1\x97
+<CJK_UNIFIED_IDEOGRAPH-2EC58> \xF0\xAE\xB1\x98
+<CJK_UNIFIED_IDEOGRAPH-2EC59> \xF0\xAE\xB1\x99
+<CJK_UNIFIED_IDEOGRAPH-2EC5A> \xF0\xAE\xB1\x9A
+<CJK_UNIFIED_IDEOGRAPH-2EC5B> \xF0\xAE\xB1\x9B
+<CJK_UNIFIED_IDEOGRAPH-2EC5C> \xF0\xAE\xB1\x9C
+<CJK_UNIFIED_IDEOGRAPH-2EC5D> \xF0\xAE\xB1\x9D
+<CJK_UNIFIED_IDEOGRAPH-2EC5E> \xF0\xAE\xB1\x9E
+<CJK_UNIFIED_IDEOGRAPH-2EC5F> \xF0\xAE\xB1\x9F
+<CJK_UNIFIED_IDEOGRAPH-2EC60> \xF0\xAE\xB1\xA0
+<CJK_UNIFIED_IDEOGRAPH-2EC61> \xF0\xAE\xB1\xA1
+<CJK_UNIFIED_IDEOGRAPH-2EC62> \xF0\xAE\xB1\xA2
+<CJK_UNIFIED_IDEOGRAPH-2EC63> \xF0\xAE\xB1\xA3
+<CJK_UNIFIED_IDEOGRAPH-2EC64> \xF0\xAE\xB1\xA4
+<CJK_UNIFIED_IDEOGRAPH-2EC65> \xF0\xAE\xB1\xA5
+<CJK_UNIFIED_IDEOGRAPH-2EC66> \xF0\xAE\xB1\xA6
+<CJK_UNIFIED_IDEOGRAPH-2EC67> \xF0\xAE\xB1\xA7
+<CJK_UNIFIED_IDEOGRAPH-2EC68> \xF0\xAE\xB1\xA8
+<CJK_UNIFIED_IDEOGRAPH-2EC69> \xF0\xAE\xB1\xA9
+<CJK_UNIFIED_IDEOGRAPH-2EC6A> \xF0\xAE\xB1\xAA
+<CJK_UNIFIED_IDEOGRAPH-2EC6B> \xF0\xAE\xB1\xAB
+<CJK_UNIFIED_IDEOGRAPH-2EC6C> \xF0\xAE\xB1\xAC
+<CJK_UNIFIED_IDEOGRAPH-2EC6D> \xF0\xAE\xB1\xAD
+<CJK_UNIFIED_IDEOGRAPH-2EC6E> \xF0\xAE\xB1\xAE
+<CJK_UNIFIED_IDEOGRAPH-2EC6F> \xF0\xAE\xB1\xAF
+<CJK_UNIFIED_IDEOGRAPH-2EC70> \xF0\xAE\xB1\xB0
+<CJK_UNIFIED_IDEOGRAPH-2EC71> \xF0\xAE\xB1\xB1
+<CJK_UNIFIED_IDEOGRAPH-2EC72> \xF0\xAE\xB1\xB2
+<CJK_UNIFIED_IDEOGRAPH-2EC73> \xF0\xAE\xB1\xB3
+<CJK_UNIFIED_IDEOGRAPH-2EC74> \xF0\xAE\xB1\xB4
+<CJK_UNIFIED_IDEOGRAPH-2EC75> \xF0\xAE\xB1\xB5
+<CJK_UNIFIED_IDEOGRAPH-2EC76> \xF0\xAE\xB1\xB6
+<CJK_UNIFIED_IDEOGRAPH-2EC77> \xF0\xAE\xB1\xB7
+<CJK_UNIFIED_IDEOGRAPH-2EC78> \xF0\xAE\xB1\xB8
+<CJK_UNIFIED_IDEOGRAPH-2EC79> \xF0\xAE\xB1\xB9
+<CJK_UNIFIED_IDEOGRAPH-2EC7A> \xF0\xAE\xB1\xBA
+<CJK_UNIFIED_IDEOGRAPH-2EC7B> \xF0\xAE\xB1\xBB
+<CJK_UNIFIED_IDEOGRAPH-2EC7C> \xF0\xAE\xB1\xBC
+<CJK_UNIFIED_IDEOGRAPH-2EC7D> \xF0\xAE\xB1\xBD
+<CJK_UNIFIED_IDEOGRAPH-2EC7E> \xF0\xAE\xB1\xBE
+<CJK_UNIFIED_IDEOGRAPH-2EC7F> \xF0\xAE\xB1\xBF
+<CJK_UNIFIED_IDEOGRAPH-2EC80> \xF0\xAE\xB2\x80
+<CJK_UNIFIED_IDEOGRAPH-2EC81> \xF0\xAE\xB2\x81
+<CJK_UNIFIED_IDEOGRAPH-2EC82> \xF0\xAE\xB2\x82
+<CJK_UNIFIED_IDEOGRAPH-2EC83> \xF0\xAE\xB2\x83
+<CJK_UNIFIED_IDEOGRAPH-2EC84> \xF0\xAE\xB2\x84
+<CJK_UNIFIED_IDEOGRAPH-2EC85> \xF0\xAE\xB2\x85
+<CJK_UNIFIED_IDEOGRAPH-2EC86> \xF0\xAE\xB2\x86
+<CJK_UNIFIED_IDEOGRAPH-2EC87> \xF0\xAE\xB2\x87
+<CJK_UNIFIED_IDEOGRAPH-2EC88> \xF0\xAE\xB2\x88
+<CJK_UNIFIED_IDEOGRAPH-2EC89> \xF0\xAE\xB2\x89
+<CJK_UNIFIED_IDEOGRAPH-2EC8A> \xF0\xAE\xB2\x8A
+<CJK_UNIFIED_IDEOGRAPH-2EC8B> \xF0\xAE\xB2\x8B
+<CJK_UNIFIED_IDEOGRAPH-2EC8C> \xF0\xAE\xB2\x8C
+<CJK_UNIFIED_IDEOGRAPH-2EC8D> \xF0\xAE\xB2\x8D
+<CJK_UNIFIED_IDEOGRAPH-2EC8E> \xF0\xAE\xB2\x8E
+<CJK_UNIFIED_IDEOGRAPH-2EC8F> \xF0\xAE\xB2\x8F
+<CJK_UNIFIED_IDEOGRAPH-2EC90> \xF0\xAE\xB2\x90
+<CJK_UNIFIED_IDEOGRAPH-2EC91> \xF0\xAE\xB2\x91
+<CJK_UNIFIED_IDEOGRAPH-2EC92> \xF0\xAE\xB2\x92
+<CJK_UNIFIED_IDEOGRAPH-2EC93> \xF0\xAE\xB2\x93
+<CJK_UNIFIED_IDEOGRAPH-2EC94> \xF0\xAE\xB2\x94
+<CJK_UNIFIED_IDEOGRAPH-2EC95> \xF0\xAE\xB2\x95
+<CJK_UNIFIED_IDEOGRAPH-2EC96> \xF0\xAE\xB2\x96
+<CJK_UNIFIED_IDEOGRAPH-2EC97> \xF0\xAE\xB2\x97
+<CJK_UNIFIED_IDEOGRAPH-2EC98> \xF0\xAE\xB2\x98
+<CJK_UNIFIED_IDEOGRAPH-2EC99> \xF0\xAE\xB2\x99
+<CJK_UNIFIED_IDEOGRAPH-2EC9A> \xF0\xAE\xB2\x9A
+<CJK_UNIFIED_IDEOGRAPH-2EC9B> \xF0\xAE\xB2\x9B
+<CJK_UNIFIED_IDEOGRAPH-2EC9C> \xF0\xAE\xB2\x9C
+<CJK_UNIFIED_IDEOGRAPH-2EC9D> \xF0\xAE\xB2\x9D
+<CJK_UNIFIED_IDEOGRAPH-2EC9E> \xF0\xAE\xB2\x9E
+<CJK_UNIFIED_IDEOGRAPH-2EC9F> \xF0\xAE\xB2\x9F
+<CJK_UNIFIED_IDEOGRAPH-2ECA0> \xF0\xAE\xB2\xA0
+<CJK_UNIFIED_IDEOGRAPH-2ECA1> \xF0\xAE\xB2\xA1
+<CJK_UNIFIED_IDEOGRAPH-2ECA2> \xF0\xAE\xB2\xA2
+<CJK_UNIFIED_IDEOGRAPH-2ECA3> \xF0\xAE\xB2\xA3
+<CJK_UNIFIED_IDEOGRAPH-2ECA4> \xF0\xAE\xB2\xA4
+<CJK_UNIFIED_IDEOGRAPH-2ECA5> \xF0\xAE\xB2\xA5
+<CJK_UNIFIED_IDEOGRAPH-2ECA6> \xF0\xAE\xB2\xA6
+<CJK_UNIFIED_IDEOGRAPH-2ECA7> \xF0\xAE\xB2\xA7
+<CJK_UNIFIED_IDEOGRAPH-2ECA8> \xF0\xAE\xB2\xA8
+<CJK_UNIFIED_IDEOGRAPH-2ECA9> \xF0\xAE\xB2\xA9
+<CJK_UNIFIED_IDEOGRAPH-2ECAA> \xF0\xAE\xB2\xAA
+<CJK_UNIFIED_IDEOGRAPH-2ECAB> \xF0\xAE\xB2\xAB
+<CJK_UNIFIED_IDEOGRAPH-2ECAC> \xF0\xAE\xB2\xAC
+<CJK_UNIFIED_IDEOGRAPH-2ECAD> \xF0\xAE\xB2\xAD
+<CJK_UNIFIED_IDEOGRAPH-2ECAE> \xF0\xAE\xB2\xAE
+<CJK_UNIFIED_IDEOGRAPH-2ECAF> \xF0\xAE\xB2\xAF
+<CJK_UNIFIED_IDEOGRAPH-2ECB0> \xF0\xAE\xB2\xB0
+<CJK_UNIFIED_IDEOGRAPH-2ECB1> \xF0\xAE\xB2\xB1
+<CJK_UNIFIED_IDEOGRAPH-2ECB2> \xF0\xAE\xB2\xB2
+<CJK_UNIFIED_IDEOGRAPH-2ECB3> \xF0\xAE\xB2\xB3
+<CJK_UNIFIED_IDEOGRAPH-2ECB4> \xF0\xAE\xB2\xB4
+<CJK_UNIFIED_IDEOGRAPH-2ECB5> \xF0\xAE\xB2\xB5
+<CJK_UNIFIED_IDEOGRAPH-2ECB6> \xF0\xAE\xB2\xB6
+<CJK_UNIFIED_IDEOGRAPH-2ECB7> \xF0\xAE\xB2\xB7
+<CJK_UNIFIED_IDEOGRAPH-2ECB8> \xF0\xAE\xB2\xB8
+<CJK_UNIFIED_IDEOGRAPH-2ECB9> \xF0\xAE\xB2\xB9
+<CJK_UNIFIED_IDEOGRAPH-2ECBA> \xF0\xAE\xB2\xBA
+<CJK_UNIFIED_IDEOGRAPH-2ECBB> \xF0\xAE\xB2\xBB
+<CJK_UNIFIED_IDEOGRAPH-2ECBC> \xF0\xAE\xB2\xBC
+<CJK_UNIFIED_IDEOGRAPH-2ECBD> \xF0\xAE\xB2\xBD
+<CJK_UNIFIED_IDEOGRAPH-2ECBE> \xF0\xAE\xB2\xBE
+<CJK_UNIFIED_IDEOGRAPH-2ECBF> \xF0\xAE\xB2\xBF
+<CJK_UNIFIED_IDEOGRAPH-2ECC0> \xF0\xAE\xB3\x80
+<CJK_UNIFIED_IDEOGRAPH-2ECC1> \xF0\xAE\xB3\x81
+<CJK_UNIFIED_IDEOGRAPH-2ECC2> \xF0\xAE\xB3\x82
+<CJK_UNIFIED_IDEOGRAPH-2ECC3> \xF0\xAE\xB3\x83
+<CJK_UNIFIED_IDEOGRAPH-2ECC4> \xF0\xAE\xB3\x84
+<CJK_UNIFIED_IDEOGRAPH-2ECC5> \xF0\xAE\xB3\x85
+<CJK_UNIFIED_IDEOGRAPH-2ECC6> \xF0\xAE\xB3\x86
+<CJK_UNIFIED_IDEOGRAPH-2ECC7> \xF0\xAE\xB3\x87
+<CJK_UNIFIED_IDEOGRAPH-2ECC8> \xF0\xAE\xB3\x88
+<CJK_UNIFIED_IDEOGRAPH-2ECC9> \xF0\xAE\xB3\x89
+<CJK_UNIFIED_IDEOGRAPH-2ECCA> \xF0\xAE\xB3\x8A
+<CJK_UNIFIED_IDEOGRAPH-2ECCB> \xF0\xAE\xB3\x8B
+<CJK_UNIFIED_IDEOGRAPH-2ECCC> \xF0\xAE\xB3\x8C
+<CJK_UNIFIED_IDEOGRAPH-2ECCD> \xF0\xAE\xB3\x8D
+<CJK_UNIFIED_IDEOGRAPH-2ECCE> \xF0\xAE\xB3\x8E
+<CJK_UNIFIED_IDEOGRAPH-2ECCF> \xF0\xAE\xB3\x8F
+<CJK_UNIFIED_IDEOGRAPH-2ECD0> \xF0\xAE\xB3\x90
+<CJK_UNIFIED_IDEOGRAPH-2ECD1> \xF0\xAE\xB3\x91
+<CJK_UNIFIED_IDEOGRAPH-2ECD2> \xF0\xAE\xB3\x92
+<CJK_UNIFIED_IDEOGRAPH-2ECD3> \xF0\xAE\xB3\x93
+<CJK_UNIFIED_IDEOGRAPH-2ECD4> \xF0\xAE\xB3\x94
+<CJK_UNIFIED_IDEOGRAPH-2ECD5> \xF0\xAE\xB3\x95
+<CJK_UNIFIED_IDEOGRAPH-2ECD6> \xF0\xAE\xB3\x96
+<CJK_UNIFIED_IDEOGRAPH-2ECD7> \xF0\xAE\xB3\x97
+<CJK_UNIFIED_IDEOGRAPH-2ECD8> \xF0\xAE\xB3\x98
+<CJK_UNIFIED_IDEOGRAPH-2ECD9> \xF0\xAE\xB3\x99
+<CJK_UNIFIED_IDEOGRAPH-2ECDA> \xF0\xAE\xB3\x9A
+<CJK_UNIFIED_IDEOGRAPH-2ECDB> \xF0\xAE\xB3\x9B
+<CJK_UNIFIED_IDEOGRAPH-2ECDC> \xF0\xAE\xB3\x9C
+<CJK_UNIFIED_IDEOGRAPH-2ECDD> \xF0\xAE\xB3\x9D
+<CJK_UNIFIED_IDEOGRAPH-2ECDE> \xF0\xAE\xB3\x9E
+<CJK_UNIFIED_IDEOGRAPH-2ECDF> \xF0\xAE\xB3\x9F
+<CJK_UNIFIED_IDEOGRAPH-2ECE0> \xF0\xAE\xB3\xA0
+<CJK_UNIFIED_IDEOGRAPH-2ECE1> \xF0\xAE\xB3\xA1
+<CJK_UNIFIED_IDEOGRAPH-2ECE2> \xF0\xAE\xB3\xA2
+<CJK_UNIFIED_IDEOGRAPH-2ECE3> \xF0\xAE\xB3\xA3
+<CJK_UNIFIED_IDEOGRAPH-2ECE4> \xF0\xAE\xB3\xA4
+<CJK_UNIFIED_IDEOGRAPH-2ECE5> \xF0\xAE\xB3\xA5
+<CJK_UNIFIED_IDEOGRAPH-2ECE6> \xF0\xAE\xB3\xA6
+<CJK_UNIFIED_IDEOGRAPH-2ECE7> \xF0\xAE\xB3\xA7
+<CJK_UNIFIED_IDEOGRAPH-2ECE8> \xF0\xAE\xB3\xA8
+<CJK_UNIFIED_IDEOGRAPH-2ECE9> \xF0\xAE\xB3\xA9
+<CJK_UNIFIED_IDEOGRAPH-2ECEA> \xF0\xAE\xB3\xAA
+<CJK_UNIFIED_IDEOGRAPH-2ECEB> \xF0\xAE\xB3\xAB
+<CJK_UNIFIED_IDEOGRAPH-2ECEC> \xF0\xAE\xB3\xAC
+<CJK_UNIFIED_IDEOGRAPH-2ECED> \xF0\xAE\xB3\xAD
+<CJK_UNIFIED_IDEOGRAPH-2ECEE> \xF0\xAE\xB3\xAE
+<CJK_UNIFIED_IDEOGRAPH-2ECEF> \xF0\xAE\xB3\xAF
+<CJK_UNIFIED_IDEOGRAPH-2ECF0> \xF0\xAE\xB3\xB0
+<CJK_UNIFIED_IDEOGRAPH-2ECF1> \xF0\xAE\xB3\xB1
+<CJK_UNIFIED_IDEOGRAPH-2ECF2> \xF0\xAE\xB3\xB2
+<CJK_UNIFIED_IDEOGRAPH-2ECF3> \xF0\xAE\xB3\xB3
+<CJK_UNIFIED_IDEOGRAPH-2ECF4> \xF0\xAE\xB3\xB4
+<CJK_UNIFIED_IDEOGRAPH-2ECF5> \xF0\xAE\xB3\xB5
+<CJK_UNIFIED_IDEOGRAPH-2ECF6> \xF0\xAE\xB3\xB6
+<CJK_UNIFIED_IDEOGRAPH-2ECF7> \xF0\xAE\xB3\xB7
+<CJK_UNIFIED_IDEOGRAPH-2ECF8> \xF0\xAE\xB3\xB8
+<CJK_UNIFIED_IDEOGRAPH-2ECF9> \xF0\xAE\xB3\xB9
+<CJK_UNIFIED_IDEOGRAPH-2ECFA> \xF0\xAE\xB3\xBA
+<CJK_UNIFIED_IDEOGRAPH-2ECFB> \xF0\xAE\xB3\xBB
+<CJK_UNIFIED_IDEOGRAPH-2ECFC> \xF0\xAE\xB3\xBC
+<CJK_UNIFIED_IDEOGRAPH-2ECFD> \xF0\xAE\xB3\xBD
+<CJK_UNIFIED_IDEOGRAPH-2ECFE> \xF0\xAE\xB3\xBE
+<CJK_UNIFIED_IDEOGRAPH-2ECFF> \xF0\xAE\xB3\xBF
+<CJK_UNIFIED_IDEOGRAPH-2ED00> \xF0\xAE\xB4\x80
+<CJK_UNIFIED_IDEOGRAPH-2ED01> \xF0\xAE\xB4\x81
+<CJK_UNIFIED_IDEOGRAPH-2ED02> \xF0\xAE\xB4\x82
+<CJK_UNIFIED_IDEOGRAPH-2ED03> \xF0\xAE\xB4\x83
+<CJK_UNIFIED_IDEOGRAPH-2ED04> \xF0\xAE\xB4\x84
+<CJK_UNIFIED_IDEOGRAPH-2ED05> \xF0\xAE\xB4\x85
+<CJK_UNIFIED_IDEOGRAPH-2ED06> \xF0\xAE\xB4\x86
+<CJK_UNIFIED_IDEOGRAPH-2ED07> \xF0\xAE\xB4\x87
+<CJK_UNIFIED_IDEOGRAPH-2ED08> \xF0\xAE\xB4\x88
+<CJK_UNIFIED_IDEOGRAPH-2ED09> \xF0\xAE\xB4\x89
+<CJK_UNIFIED_IDEOGRAPH-2ED0A> \xF0\xAE\xB4\x8A
+<CJK_UNIFIED_IDEOGRAPH-2ED0B> \xF0\xAE\xB4\x8B
+<CJK_UNIFIED_IDEOGRAPH-2ED0C> \xF0\xAE\xB4\x8C
+<CJK_UNIFIED_IDEOGRAPH-2ED0D> \xF0\xAE\xB4\x8D
+<CJK_UNIFIED_IDEOGRAPH-2ED0E> \xF0\xAE\xB4\x8E
+<CJK_UNIFIED_IDEOGRAPH-2ED0F> \xF0\xAE\xB4\x8F
+<CJK_UNIFIED_IDEOGRAPH-2ED10> \xF0\xAE\xB4\x90
+<CJK_UNIFIED_IDEOGRAPH-2ED11> \xF0\xAE\xB4\x91
+<CJK_UNIFIED_IDEOGRAPH-2ED12> \xF0\xAE\xB4\x92
+<CJK_UNIFIED_IDEOGRAPH-2ED13> \xF0\xAE\xB4\x93
+<CJK_UNIFIED_IDEOGRAPH-2ED14> \xF0\xAE\xB4\x94
+<CJK_UNIFIED_IDEOGRAPH-2ED15> \xF0\xAE\xB4\x95
+<CJK_UNIFIED_IDEOGRAPH-2ED16> \xF0\xAE\xB4\x96
+<CJK_UNIFIED_IDEOGRAPH-2ED17> \xF0\xAE\xB4\x97
+<CJK_UNIFIED_IDEOGRAPH-2ED18> \xF0\xAE\xB4\x98
+<CJK_UNIFIED_IDEOGRAPH-2ED19> \xF0\xAE\xB4\x99
+<CJK_UNIFIED_IDEOGRAPH-2ED1A> \xF0\xAE\xB4\x9A
+<CJK_UNIFIED_IDEOGRAPH-2ED1B> \xF0\xAE\xB4\x9B
+<CJK_UNIFIED_IDEOGRAPH-2ED1C> \xF0\xAE\xB4\x9C
+<CJK_UNIFIED_IDEOGRAPH-2ED1D> \xF0\xAE\xB4\x9D
+<CJK_UNIFIED_IDEOGRAPH-2ED1E> \xF0\xAE\xB4\x9E
+<CJK_UNIFIED_IDEOGRAPH-2ED1F> \xF0\xAE\xB4\x9F
+<CJK_UNIFIED_IDEOGRAPH-2ED20> \xF0\xAE\xB4\xA0
+<CJK_UNIFIED_IDEOGRAPH-2ED21> \xF0\xAE\xB4\xA1
+<CJK_UNIFIED_IDEOGRAPH-2ED22> \xF0\xAE\xB4\xA2
+<CJK_UNIFIED_IDEOGRAPH-2ED23> \xF0\xAE\xB4\xA3
+<CJK_UNIFIED_IDEOGRAPH-2ED24> \xF0\xAE\xB4\xA4
+<CJK_UNIFIED_IDEOGRAPH-2ED25> \xF0\xAE\xB4\xA5
+<CJK_UNIFIED_IDEOGRAPH-2ED26> \xF0\xAE\xB4\xA6
+<CJK_UNIFIED_IDEOGRAPH-2ED27> \xF0\xAE\xB4\xA7
+<CJK_UNIFIED_IDEOGRAPH-2ED28> \xF0\xAE\xB4\xA8
+<CJK_UNIFIED_IDEOGRAPH-2ED29> \xF0\xAE\xB4\xA9
+<CJK_UNIFIED_IDEOGRAPH-2ED2A> \xF0\xAE\xB4\xAA
+<CJK_UNIFIED_IDEOGRAPH-2ED2B> \xF0\xAE\xB4\xAB
+<CJK_UNIFIED_IDEOGRAPH-2ED2C> \xF0\xAE\xB4\xAC
+<CJK_UNIFIED_IDEOGRAPH-2ED2D> \xF0\xAE\xB4\xAD
+<CJK_UNIFIED_IDEOGRAPH-2ED2E> \xF0\xAE\xB4\xAE
+<CJK_UNIFIED_IDEOGRAPH-2ED2F> \xF0\xAE\xB4\xAF
+<CJK_UNIFIED_IDEOGRAPH-2ED30> \xF0\xAE\xB4\xB0
+<CJK_UNIFIED_IDEOGRAPH-2ED31> \xF0\xAE\xB4\xB1
+<CJK_UNIFIED_IDEOGRAPH-2ED32> \xF0\xAE\xB4\xB2
+<CJK_UNIFIED_IDEOGRAPH-2ED33> \xF0\xAE\xB4\xB3
+<CJK_UNIFIED_IDEOGRAPH-2ED34> \xF0\xAE\xB4\xB4
+<CJK_UNIFIED_IDEOGRAPH-2ED35> \xF0\xAE\xB4\xB5
+<CJK_UNIFIED_IDEOGRAPH-2ED36> \xF0\xAE\xB4\xB6
+<CJK_UNIFIED_IDEOGRAPH-2ED37> \xF0\xAE\xB4\xB7
+<CJK_UNIFIED_IDEOGRAPH-2ED38> \xF0\xAE\xB4\xB8
+<CJK_UNIFIED_IDEOGRAPH-2ED39> \xF0\xAE\xB4\xB9
+<CJK_UNIFIED_IDEOGRAPH-2ED3A> \xF0\xAE\xB4\xBA
+<CJK_UNIFIED_IDEOGRAPH-2ED3B> \xF0\xAE\xB4\xBB
+<CJK_UNIFIED_IDEOGRAPH-2ED3C> \xF0\xAE\xB4\xBC
+<CJK_UNIFIED_IDEOGRAPH-2ED3D> \xF0\xAE\xB4\xBD
+<CJK_UNIFIED_IDEOGRAPH-2ED3E> \xF0\xAE\xB4\xBE
+<CJK_UNIFIED_IDEOGRAPH-2ED3F> \xF0\xAE\xB4\xBF
+<CJK_UNIFIED_IDEOGRAPH-2ED40> \xF0\xAE\xB5\x80
+<CJK_UNIFIED_IDEOGRAPH-2ED41> \xF0\xAE\xB5\x81
+<CJK_UNIFIED_IDEOGRAPH-2ED42> \xF0\xAE\xB5\x82
+<CJK_UNIFIED_IDEOGRAPH-2ED43> \xF0\xAE\xB5\x83
+<CJK_UNIFIED_IDEOGRAPH-2ED44> \xF0\xAE\xB5\x84
+<CJK_UNIFIED_IDEOGRAPH-2ED45> \xF0\xAE\xB5\x85
+<CJK_UNIFIED_IDEOGRAPH-2ED46> \xF0\xAE\xB5\x86
+<CJK_UNIFIED_IDEOGRAPH-2ED47> \xF0\xAE\xB5\x87
+<CJK_UNIFIED_IDEOGRAPH-2ED48> \xF0\xAE\xB5\x88
+<CJK_UNIFIED_IDEOGRAPH-2ED49> \xF0\xAE\xB5\x89
+<CJK_UNIFIED_IDEOGRAPH-2ED4A> \xF0\xAE\xB5\x8A
+<CJK_UNIFIED_IDEOGRAPH-2ED4B> \xF0\xAE\xB5\x8B
+<CJK_UNIFIED_IDEOGRAPH-2ED4C> \xF0\xAE\xB5\x8C
+<CJK_UNIFIED_IDEOGRAPH-2ED4D> \xF0\xAE\xB5\x8D
+<CJK_UNIFIED_IDEOGRAPH-2ED4E> \xF0\xAE\xB5\x8E
+<CJK_UNIFIED_IDEOGRAPH-2ED4F> \xF0\xAE\xB5\x8F
+<CJK_UNIFIED_IDEOGRAPH-2ED50> \xF0\xAE\xB5\x90
+<CJK_UNIFIED_IDEOGRAPH-2ED51> \xF0\xAE\xB5\x91
+<CJK_UNIFIED_IDEOGRAPH-2ED52> \xF0\xAE\xB5\x92
+<CJK_UNIFIED_IDEOGRAPH-2ED53> \xF0\xAE\xB5\x93
+<CJK_UNIFIED_IDEOGRAPH-2ED54> \xF0\xAE\xB5\x94
+<CJK_UNIFIED_IDEOGRAPH-2ED55> \xF0\xAE\xB5\x95
+<CJK_UNIFIED_IDEOGRAPH-2ED56> \xF0\xAE\xB5\x96
+<CJK_UNIFIED_IDEOGRAPH-2ED57> \xF0\xAE\xB5\x97
+<CJK_UNIFIED_IDEOGRAPH-2ED58> \xF0\xAE\xB5\x98
+<CJK_UNIFIED_IDEOGRAPH-2ED59> \xF0\xAE\xB5\x99
+<CJK_UNIFIED_IDEOGRAPH-2ED5A> \xF0\xAE\xB5\x9A
+<CJK_UNIFIED_IDEOGRAPH-2ED5B> \xF0\xAE\xB5\x9B
+<CJK_UNIFIED_IDEOGRAPH-2ED5C> \xF0\xAE\xB5\x9C
+<CJK_UNIFIED_IDEOGRAPH-2ED5D> \xF0\xAE\xB5\x9D
+<CJK_UNIFIED_IDEOGRAPH-2ED5E> \xF0\xAE\xB5\x9E
+<CJK_UNIFIED_IDEOGRAPH-2ED5F> \xF0\xAE\xB5\x9F
+<CJK_UNIFIED_IDEOGRAPH-2ED60> \xF0\xAE\xB5\xA0
+<CJK_UNIFIED_IDEOGRAPH-2ED61> \xF0\xAE\xB5\xA1
+<CJK_UNIFIED_IDEOGRAPH-2ED62> \xF0\xAE\xB5\xA2
+<CJK_UNIFIED_IDEOGRAPH-2ED63> \xF0\xAE\xB5\xA3
+<CJK_UNIFIED_IDEOGRAPH-2ED64> \xF0\xAE\xB5\xA4
+<CJK_UNIFIED_IDEOGRAPH-2ED65> \xF0\xAE\xB5\xA5
+<CJK_UNIFIED_IDEOGRAPH-2ED66> \xF0\xAE\xB5\xA6
+<CJK_UNIFIED_IDEOGRAPH-2ED67> \xF0\xAE\xB5\xA7
+<CJK_UNIFIED_IDEOGRAPH-2ED68> \xF0\xAE\xB5\xA8
+<CJK_UNIFIED_IDEOGRAPH-2ED69> \xF0\xAE\xB5\xA9
+<CJK_UNIFIED_IDEOGRAPH-2ED6A> \xF0\xAE\xB5\xAA
+<CJK_UNIFIED_IDEOGRAPH-2ED6B> \xF0\xAE\xB5\xAB
+<CJK_UNIFIED_IDEOGRAPH-2ED6C> \xF0\xAE\xB5\xAC
+<CJK_UNIFIED_IDEOGRAPH-2ED6D> \xF0\xAE\xB5\xAD
+<CJK_UNIFIED_IDEOGRAPH-2ED6E> \xF0\xAE\xB5\xAE
+<CJK_UNIFIED_IDEOGRAPH-2ED6F> \xF0\xAE\xB5\xAF
+<CJK_UNIFIED_IDEOGRAPH-2ED70> \xF0\xAE\xB5\xB0
+<CJK_UNIFIED_IDEOGRAPH-2ED71> \xF0\xAE\xB5\xB1
+<CJK_UNIFIED_IDEOGRAPH-2ED72> \xF0\xAE\xB5\xB2
+<CJK_UNIFIED_IDEOGRAPH-2ED73> \xF0\xAE\xB5\xB3
+<CJK_UNIFIED_IDEOGRAPH-2ED74> \xF0\xAE\xB5\xB4
+<CJK_UNIFIED_IDEOGRAPH-2ED75> \xF0\xAE\xB5\xB5
+<CJK_UNIFIED_IDEOGRAPH-2ED76> \xF0\xAE\xB5\xB6
+<CJK_UNIFIED_IDEOGRAPH-2ED77> \xF0\xAE\xB5\xB7
+<CJK_UNIFIED_IDEOGRAPH-2ED78> \xF0\xAE\xB5\xB8
+<CJK_UNIFIED_IDEOGRAPH-2ED79> \xF0\xAE\xB5\xB9
+<CJK_UNIFIED_IDEOGRAPH-2ED7A> \xF0\xAE\xB5\xBA
+<CJK_UNIFIED_IDEOGRAPH-2ED7B> \xF0\xAE\xB5\xBB
+<CJK_UNIFIED_IDEOGRAPH-2ED7C> \xF0\xAE\xB5\xBC
+<CJK_UNIFIED_IDEOGRAPH-2ED7D> \xF0\xAE\xB5\xBD
+<CJK_UNIFIED_IDEOGRAPH-2ED7E> \xF0\xAE\xB5\xBE
+<CJK_UNIFIED_IDEOGRAPH-2ED7F> \xF0\xAE\xB5\xBF
+<CJK_UNIFIED_IDEOGRAPH-2ED80> \xF0\xAE\xB6\x80
+<CJK_UNIFIED_IDEOGRAPH-2ED81> \xF0\xAE\xB6\x81
+<CJK_UNIFIED_IDEOGRAPH-2ED82> \xF0\xAE\xB6\x82
+<CJK_UNIFIED_IDEOGRAPH-2ED83> \xF0\xAE\xB6\x83
+<CJK_UNIFIED_IDEOGRAPH-2ED84> \xF0\xAE\xB6\x84
+<CJK_UNIFIED_IDEOGRAPH-2ED85> \xF0\xAE\xB6\x85
+<CJK_UNIFIED_IDEOGRAPH-2ED86> \xF0\xAE\xB6\x86
+<CJK_UNIFIED_IDEOGRAPH-2ED87> \xF0\xAE\xB6\x87
+<CJK_UNIFIED_IDEOGRAPH-2ED88> \xF0\xAE\xB6\x88
+<CJK_UNIFIED_IDEOGRAPH-2ED89> \xF0\xAE\xB6\x89
+<CJK_UNIFIED_IDEOGRAPH-2ED8A> \xF0\xAE\xB6\x8A
+<CJK_UNIFIED_IDEOGRAPH-2ED8B> \xF0\xAE\xB6\x8B
+<CJK_UNIFIED_IDEOGRAPH-2ED8C> \xF0\xAE\xB6\x8C
+<CJK_UNIFIED_IDEOGRAPH-2ED8D> \xF0\xAE\xB6\x8D
+<CJK_UNIFIED_IDEOGRAPH-2ED8E> \xF0\xAE\xB6\x8E
+<CJK_UNIFIED_IDEOGRAPH-2ED8F> \xF0\xAE\xB6\x8F
+<CJK_UNIFIED_IDEOGRAPH-2ED90> \xF0\xAE\xB6\x90
+<CJK_UNIFIED_IDEOGRAPH-2ED91> \xF0\xAE\xB6\x91
+<CJK_UNIFIED_IDEOGRAPH-2ED92> \xF0\xAE\xB6\x92
+<CJK_UNIFIED_IDEOGRAPH-2ED93> \xF0\xAE\xB6\x93
+<CJK_UNIFIED_IDEOGRAPH-2ED94> \xF0\xAE\xB6\x94
+<CJK_UNIFIED_IDEOGRAPH-2ED95> \xF0\xAE\xB6\x95
+<CJK_UNIFIED_IDEOGRAPH-2ED96> \xF0\xAE\xB6\x96
+<CJK_UNIFIED_IDEOGRAPH-2ED97> \xF0\xAE\xB6\x97
+<CJK_UNIFIED_IDEOGRAPH-2ED98> \xF0\xAE\xB6\x98
+<CJK_UNIFIED_IDEOGRAPH-2ED99> \xF0\xAE\xB6\x99
+<CJK_UNIFIED_IDEOGRAPH-2ED9A> \xF0\xAE\xB6\x9A
+<CJK_UNIFIED_IDEOGRAPH-2ED9B> \xF0\xAE\xB6\x9B
+<CJK_UNIFIED_IDEOGRAPH-2ED9C> \xF0\xAE\xB6\x9C
+<CJK_UNIFIED_IDEOGRAPH-2ED9D> \xF0\xAE\xB6\x9D
+<CJK_UNIFIED_IDEOGRAPH-2ED9E> \xF0\xAE\xB6\x9E
+<CJK_UNIFIED_IDEOGRAPH-2ED9F> \xF0\xAE\xB6\x9F
+<CJK_UNIFIED_IDEOGRAPH-2EDA0> \xF0\xAE\xB6\xA0
+<CJK_UNIFIED_IDEOGRAPH-2EDA1> \xF0\xAE\xB6\xA1
+<CJK_UNIFIED_IDEOGRAPH-2EDA2> \xF0\xAE\xB6\xA2
+<CJK_UNIFIED_IDEOGRAPH-2EDA3> \xF0\xAE\xB6\xA3
+<CJK_UNIFIED_IDEOGRAPH-2EDA4> \xF0\xAE\xB6\xA4
+<CJK_UNIFIED_IDEOGRAPH-2EDA5> \xF0\xAE\xB6\xA5
+<CJK_UNIFIED_IDEOGRAPH-2EDA6> \xF0\xAE\xB6\xA6
+<CJK_UNIFIED_IDEOGRAPH-2EDA7> \xF0\xAE\xB6\xA7
+<CJK_UNIFIED_IDEOGRAPH-2EDA8> \xF0\xAE\xB6\xA8
+<CJK_UNIFIED_IDEOGRAPH-2EDA9> \xF0\xAE\xB6\xA9
+<CJK_UNIFIED_IDEOGRAPH-2EDAA> \xF0\xAE\xB6\xAA
+<CJK_UNIFIED_IDEOGRAPH-2EDAB> \xF0\xAE\xB6\xAB
+<CJK_UNIFIED_IDEOGRAPH-2EDAC> \xF0\xAE\xB6\xAC
+<CJK_UNIFIED_IDEOGRAPH-2EDAD> \xF0\xAE\xB6\xAD
+<CJK_UNIFIED_IDEOGRAPH-2EDAE> \xF0\xAE\xB6\xAE
+<CJK_UNIFIED_IDEOGRAPH-2EDAF> \xF0\xAE\xB6\xAF
+<CJK_UNIFIED_IDEOGRAPH-2EDB0> \xF0\xAE\xB6\xB0
+<CJK_UNIFIED_IDEOGRAPH-2EDB1> \xF0\xAE\xB6\xB1
+<CJK_UNIFIED_IDEOGRAPH-2EDB2> \xF0\xAE\xB6\xB2
+<CJK_UNIFIED_IDEOGRAPH-2EDB3> \xF0\xAE\xB6\xB3
+<CJK_UNIFIED_IDEOGRAPH-2EDB4> \xF0\xAE\xB6\xB4
+<CJK_UNIFIED_IDEOGRAPH-2EDB5> \xF0\xAE\xB6\xB5
+<CJK_UNIFIED_IDEOGRAPH-2EDB6> \xF0\xAE\xB6\xB6
+<CJK_UNIFIED_IDEOGRAPH-2EDB7> \xF0\xAE\xB6\xB7
+<CJK_UNIFIED_IDEOGRAPH-2EDB8> \xF0\xAE\xB6\xB8
+<CJK_UNIFIED_IDEOGRAPH-2EDB9> \xF0\xAE\xB6\xB9
+<CJK_UNIFIED_IDEOGRAPH-2EDBA> \xF0\xAE\xB6\xBA
+<CJK_UNIFIED_IDEOGRAPH-2EDBB> \xF0\xAE\xB6\xBB
+<CJK_UNIFIED_IDEOGRAPH-2EDBC> \xF0\xAE\xB6\xBC
+<CJK_UNIFIED_IDEOGRAPH-2EDBD> \xF0\xAE\xB6\xBD
+<CJK_UNIFIED_IDEOGRAPH-2EDBE> \xF0\xAE\xB6\xBE
+<CJK_UNIFIED_IDEOGRAPH-2EDBF> \xF0\xAE\xB6\xBF
+<CJK_UNIFIED_IDEOGRAPH-2EDC0> \xF0\xAE\xB7\x80
+<CJK_UNIFIED_IDEOGRAPH-2EDC1> \xF0\xAE\xB7\x81
+<CJK_UNIFIED_IDEOGRAPH-2EDC2> \xF0\xAE\xB7\x82
+<CJK_UNIFIED_IDEOGRAPH-2EDC3> \xF0\xAE\xB7\x83
+<CJK_UNIFIED_IDEOGRAPH-2EDC4> \xF0\xAE\xB7\x84
+<CJK_UNIFIED_IDEOGRAPH-2EDC5> \xF0\xAE\xB7\x85
+<CJK_UNIFIED_IDEOGRAPH-2EDC6> \xF0\xAE\xB7\x86
+<CJK_UNIFIED_IDEOGRAPH-2EDC7> \xF0\xAE\xB7\x87
+<CJK_UNIFIED_IDEOGRAPH-2EDC8> \xF0\xAE\xB7\x88
+<CJK_UNIFIED_IDEOGRAPH-2EDC9> \xF0\xAE\xB7\x89
+<CJK_UNIFIED_IDEOGRAPH-2EDCA> \xF0\xAE\xB7\x8A
+<CJK_UNIFIED_IDEOGRAPH-2EDCB> \xF0\xAE\xB7\x8B
+<CJK_UNIFIED_IDEOGRAPH-2EDCC> \xF0\xAE\xB7\x8C
+<CJK_UNIFIED_IDEOGRAPH-2EDCD> \xF0\xAE\xB7\x8D
+<CJK_UNIFIED_IDEOGRAPH-2EDCE> \xF0\xAE\xB7\x8E
+<CJK_UNIFIED_IDEOGRAPH-2EDCF> \xF0\xAE\xB7\x8F
+<CJK_UNIFIED_IDEOGRAPH-2EDD0> \xF0\xAE\xB7\x90
+<CJK_UNIFIED_IDEOGRAPH-2EDD1> \xF0\xAE\xB7\x91
+<CJK_UNIFIED_IDEOGRAPH-2EDD2> \xF0\xAE\xB7\x92
+<CJK_UNIFIED_IDEOGRAPH-2EDD3> \xF0\xAE\xB7\x93
+<CJK_UNIFIED_IDEOGRAPH-2EDD4> \xF0\xAE\xB7\x94
+<CJK_UNIFIED_IDEOGRAPH-2EDD5> \xF0\xAE\xB7\x95
+<CJK_UNIFIED_IDEOGRAPH-2EDD6> \xF0\xAE\xB7\x96
+<CJK_UNIFIED_IDEOGRAPH-2EDD7> \xF0\xAE\xB7\x97
+<CJK_UNIFIED_IDEOGRAPH-2EDD8> \xF0\xAE\xB7\x98
+<CJK_UNIFIED_IDEOGRAPH-2EDD9> \xF0\xAE\xB7\x99
+<CJK_UNIFIED_IDEOGRAPH-2EDDA> \xF0\xAE\xB7\x9A
+<CJK_UNIFIED_IDEOGRAPH-2EDDB> \xF0\xAE\xB7\x9B
+<CJK_UNIFIED_IDEOGRAPH-2EDDC> \xF0\xAE\xB7\x9C
+<CJK_UNIFIED_IDEOGRAPH-2EDDD> \xF0\xAE\xB7\x9D
+<CJK_UNIFIED_IDEOGRAPH-2EDDE> \xF0\xAE\xB7\x9E
+<CJK_UNIFIED_IDEOGRAPH-2EDDF> \xF0\xAE\xB7\x9F
+<CJK_UNIFIED_IDEOGRAPH-2EDE0> \xF0\xAE\xB7\xA0
+<CJK_UNIFIED_IDEOGRAPH-2EDE1> \xF0\xAE\xB7\xA1
+<CJK_UNIFIED_IDEOGRAPH-2EDE2> \xF0\xAE\xB7\xA2
+<CJK_UNIFIED_IDEOGRAPH-2EDE3> \xF0\xAE\xB7\xA3
+<CJK_UNIFIED_IDEOGRAPH-2EDE4> \xF0\xAE\xB7\xA4
+<CJK_UNIFIED_IDEOGRAPH-2EDE5> \xF0\xAE\xB7\xA5
+<CJK_UNIFIED_IDEOGRAPH-2EDE6> \xF0\xAE\xB7\xA6
+<CJK_UNIFIED_IDEOGRAPH-2EDE7> \xF0\xAE\xB7\xA7
+<CJK_UNIFIED_IDEOGRAPH-2EDE8> \xF0\xAE\xB7\xA8
+<CJK_UNIFIED_IDEOGRAPH-2EDE9> \xF0\xAE\xB7\xA9
+<CJK_UNIFIED_IDEOGRAPH-2EDEA> \xF0\xAE\xB7\xAA
+<CJK_UNIFIED_IDEOGRAPH-2EDEB> \xF0\xAE\xB7\xAB
+<CJK_UNIFIED_IDEOGRAPH-2EDEC> \xF0\xAE\xB7\xAC
+<CJK_UNIFIED_IDEOGRAPH-2EDED> \xF0\xAE\xB7\xAD
+<CJK_UNIFIED_IDEOGRAPH-2EDEE> \xF0\xAE\xB7\xAE
+<CJK_UNIFIED_IDEOGRAPH-2EDEF> \xF0\xAE\xB7\xAF
+<CJK_UNIFIED_IDEOGRAPH-2EDF0> \xF0\xAE\xB7\xB0
+<CJK_UNIFIED_IDEOGRAPH-2EDF1> \xF0\xAE\xB7\xB1
+<CJK_UNIFIED_IDEOGRAPH-2EDF2> \xF0\xAE\xB7\xB2
+<CJK_UNIFIED_IDEOGRAPH-2EDF3> \xF0\xAE\xB7\xB3
+<CJK_UNIFIED_IDEOGRAPH-2EDF4> \xF0\xAE\xB7\xB4
+<CJK_UNIFIED_IDEOGRAPH-2EDF5> \xF0\xAE\xB7\xB5
+<CJK_UNIFIED_IDEOGRAPH-2EDF6> \xF0\xAE\xB7\xB6
+<CJK_UNIFIED_IDEOGRAPH-2EDF7> \xF0\xAE\xB7\xB7
+<CJK_UNIFIED_IDEOGRAPH-2EDF8> \xF0\xAE\xB7\xB8
+<CJK_UNIFIED_IDEOGRAPH-2EDF9> \xF0\xAE\xB7\xB9
+<CJK_UNIFIED_IDEOGRAPH-2EDFA> \xF0\xAE\xB7\xBA
+<CJK_UNIFIED_IDEOGRAPH-2EDFB> \xF0\xAE\xB7\xBB
+<CJK_UNIFIED_IDEOGRAPH-2EDFC> \xF0\xAE\xB7\xBC
+<CJK_UNIFIED_IDEOGRAPH-2EDFD> \xF0\xAE\xB7\xBD
+<CJK_UNIFIED_IDEOGRAPH-2EDFE> \xF0\xAE\xB7\xBE
+<CJK_UNIFIED_IDEOGRAPH-2EDFF> \xF0\xAE\xB7\xBF
+<CJK_UNIFIED_IDEOGRAPH-2EE00> \xF0\xAE\xB8\x80
+<CJK_UNIFIED_IDEOGRAPH-2EE01> \xF0\xAE\xB8\x81
+<CJK_UNIFIED_IDEOGRAPH-2EE02> \xF0\xAE\xB8\x82
+<CJK_UNIFIED_IDEOGRAPH-2EE03> \xF0\xAE\xB8\x83
+<CJK_UNIFIED_IDEOGRAPH-2EE04> \xF0\xAE\xB8\x84
+<CJK_UNIFIED_IDEOGRAPH-2EE05> \xF0\xAE\xB8\x85
+<CJK_UNIFIED_IDEOGRAPH-2EE06> \xF0\xAE\xB8\x86
+<CJK_UNIFIED_IDEOGRAPH-2EE07> \xF0\xAE\xB8\x87
+<CJK_UNIFIED_IDEOGRAPH-2EE08> \xF0\xAE\xB8\x88
+<CJK_UNIFIED_IDEOGRAPH-2EE09> \xF0\xAE\xB8\x89
+<CJK_UNIFIED_IDEOGRAPH-2EE0A> \xF0\xAE\xB8\x8A
+<CJK_UNIFIED_IDEOGRAPH-2EE0B> \xF0\xAE\xB8\x8B
+<CJK_UNIFIED_IDEOGRAPH-2EE0C> \xF0\xAE\xB8\x8C
+<CJK_UNIFIED_IDEOGRAPH-2EE0D> \xF0\xAE\xB8\x8D
+<CJK_UNIFIED_IDEOGRAPH-2EE0E> \xF0\xAE\xB8\x8E
+<CJK_UNIFIED_IDEOGRAPH-2EE0F> \xF0\xAE\xB8\x8F
+<CJK_UNIFIED_IDEOGRAPH-2EE10> \xF0\xAE\xB8\x90
+<CJK_UNIFIED_IDEOGRAPH-2EE11> \xF0\xAE\xB8\x91
+<CJK_UNIFIED_IDEOGRAPH-2EE12> \xF0\xAE\xB8\x92
+<CJK_UNIFIED_IDEOGRAPH-2EE13> \xF0\xAE\xB8\x93
+<CJK_UNIFIED_IDEOGRAPH-2EE14> \xF0\xAE\xB8\x94
+<CJK_UNIFIED_IDEOGRAPH-2EE15> \xF0\xAE\xB8\x95
+<CJK_UNIFIED_IDEOGRAPH-2EE16> \xF0\xAE\xB8\x96
+<CJK_UNIFIED_IDEOGRAPH-2EE17> \xF0\xAE\xB8\x97
+<CJK_UNIFIED_IDEOGRAPH-2EE18> \xF0\xAE\xB8\x98
+<CJK_UNIFIED_IDEOGRAPH-2EE19> \xF0\xAE\xB8\x99
+<CJK_UNIFIED_IDEOGRAPH-2EE1A> \xF0\xAE\xB8\x9A
+<CJK_UNIFIED_IDEOGRAPH-2EE1B> \xF0\xAE\xB8\x9B
+<CJK_UNIFIED_IDEOGRAPH-2EE1C> \xF0\xAE\xB8\x9C
+<CJK_UNIFIED_IDEOGRAPH-2EE1D> \xF0\xAE\xB8\x9D
+<CJK_UNIFIED_IDEOGRAPH-2EE1E> \xF0\xAE\xB8\x9E
+<CJK_UNIFIED_IDEOGRAPH-2EE1F> \xF0\xAE\xB8\x9F
+<CJK_UNIFIED_IDEOGRAPH-2EE20> \xF0\xAE\xB8\xA0
+<CJK_UNIFIED_IDEOGRAPH-2EE21> \xF0\xAE\xB8\xA1
+<CJK_UNIFIED_IDEOGRAPH-2EE22> \xF0\xAE\xB8\xA2
+<CJK_UNIFIED_IDEOGRAPH-2EE23> \xF0\xAE\xB8\xA3
+<CJK_UNIFIED_IDEOGRAPH-2EE24> \xF0\xAE\xB8\xA4
+<CJK_UNIFIED_IDEOGRAPH-2EE25> \xF0\xAE\xB8\xA5
+<CJK_UNIFIED_IDEOGRAPH-2EE26> \xF0\xAE\xB8\xA6
+<CJK_UNIFIED_IDEOGRAPH-2EE27> \xF0\xAE\xB8\xA7
+<CJK_UNIFIED_IDEOGRAPH-2EE28> \xF0\xAE\xB8\xA8
+<CJK_UNIFIED_IDEOGRAPH-2EE29> \xF0\xAE\xB8\xA9
+<CJK_UNIFIED_IDEOGRAPH-2EE2A> \xF0\xAE\xB8\xAA
+<CJK_UNIFIED_IDEOGRAPH-2EE2B> \xF0\xAE\xB8\xAB
+<CJK_UNIFIED_IDEOGRAPH-2EE2C> \xF0\xAE\xB8\xAC
+<CJK_UNIFIED_IDEOGRAPH-2EE2D> \xF0\xAE\xB8\xAD
+<CJK_UNIFIED_IDEOGRAPH-2EE2E> \xF0\xAE\xB8\xAE
+<CJK_UNIFIED_IDEOGRAPH-2EE2F> \xF0\xAE\xB8\xAF
+<CJK_UNIFIED_IDEOGRAPH-2EE30> \xF0\xAE\xB8\xB0
+<CJK_UNIFIED_IDEOGRAPH-2EE31> \xF0\xAE\xB8\xB1
+<CJK_UNIFIED_IDEOGRAPH-2EE32> \xF0\xAE\xB8\xB2
+<CJK_UNIFIED_IDEOGRAPH-2EE33> \xF0\xAE\xB8\xB3
+<CJK_UNIFIED_IDEOGRAPH-2EE34> \xF0\xAE\xB8\xB4
+<CJK_UNIFIED_IDEOGRAPH-2EE35> \xF0\xAE\xB8\xB5
+<CJK_UNIFIED_IDEOGRAPH-2EE36> \xF0\xAE\xB8\xB6
+<CJK_UNIFIED_IDEOGRAPH-2EE37> \xF0\xAE\xB8\xB7
+<CJK_UNIFIED_IDEOGRAPH-2EE38> \xF0\xAE\xB8\xB8
+<CJK_UNIFIED_IDEOGRAPH-2EE39> \xF0\xAE\xB8\xB9
+<CJK_UNIFIED_IDEOGRAPH-2EE3A> \xF0\xAE\xB8\xBA
+<CJK_UNIFIED_IDEOGRAPH-2EE3B> \xF0\xAE\xB8\xBB
+<CJK_UNIFIED_IDEOGRAPH-2EE3C> \xF0\xAE\xB8\xBC
+<CJK_UNIFIED_IDEOGRAPH-2EE3D> \xF0\xAE\xB8\xBD
+<CJK_UNIFIED_IDEOGRAPH-2EE3E> \xF0\xAE\xB8\xBE
+<CJK_UNIFIED_IDEOGRAPH-2EE3F> \xF0\xAE\xB8\xBF
+<CJK_UNIFIED_IDEOGRAPH-2EE40> \xF0\xAE\xB9\x80
+<CJK_UNIFIED_IDEOGRAPH-2EE41> \xF0\xAE\xB9\x81
+<CJK_UNIFIED_IDEOGRAPH-2EE42> \xF0\xAE\xB9\x82
+<CJK_UNIFIED_IDEOGRAPH-2EE43> \xF0\xAE\xB9\x83
+<CJK_UNIFIED_IDEOGRAPH-2EE44> \xF0\xAE\xB9\x84
+<CJK_UNIFIED_IDEOGRAPH-2EE45> \xF0\xAE\xB9\x85
+<CJK_UNIFIED_IDEOGRAPH-2EE46> \xF0\xAE\xB9\x86
+<CJK_UNIFIED_IDEOGRAPH-2EE47> \xF0\xAE\xB9\x87
+<CJK_UNIFIED_IDEOGRAPH-2EE48> \xF0\xAE\xB9\x88
+<CJK_UNIFIED_IDEOGRAPH-2EE49> \xF0\xAE\xB9\x89
+<CJK_UNIFIED_IDEOGRAPH-2EE4A> \xF0\xAE\xB9\x8A
+<CJK_UNIFIED_IDEOGRAPH-2EE4B> \xF0\xAE\xB9\x8B
+<CJK_UNIFIED_IDEOGRAPH-2EE4C> \xF0\xAE\xB9\x8C
+<CJK_UNIFIED_IDEOGRAPH-2EE4D> \xF0\xAE\xB9\x8D
+<CJK_UNIFIED_IDEOGRAPH-2EE4E> \xF0\xAE\xB9\x8E
+<CJK_UNIFIED_IDEOGRAPH-2EE4F> \xF0\xAE\xB9\x8F
+<CJK_UNIFIED_IDEOGRAPH-2EE50> \xF0\xAE\xB9\x90
+<CJK_UNIFIED_IDEOGRAPH-2EE51> \xF0\xAE\xB9\x91
+<CJK_UNIFIED_IDEOGRAPH-2EE52> \xF0\xAE\xB9\x92
+<CJK_UNIFIED_IDEOGRAPH-2EE53> \xF0\xAE\xB9\x93
+<CJK_UNIFIED_IDEOGRAPH-2EE54> \xF0\xAE\xB9\x94
+<CJK_UNIFIED_IDEOGRAPH-2EE55> \xF0\xAE\xB9\x95
+<CJK_UNIFIED_IDEOGRAPH-2EE56> \xF0\xAE\xB9\x96
+<CJK_UNIFIED_IDEOGRAPH-2EE57> \xF0\xAE\xB9\x97
+<CJK_UNIFIED_IDEOGRAPH-2EE58> \xF0\xAE\xB9\x98
+<CJK_UNIFIED_IDEOGRAPH-2EE59> \xF0\xAE\xB9\x99
+<CJK_UNIFIED_IDEOGRAPH-2EE5A> \xF0\xAE\xB9\x9A
+<CJK_UNIFIED_IDEOGRAPH-2EE5B> \xF0\xAE\xB9\x9B
+<CJK_UNIFIED_IDEOGRAPH-2EE5C> \xF0\xAE\xB9\x9C
+<CJK_UNIFIED_IDEOGRAPH-2EE5D> \xF0\xAE\xB9\x9D
<CJK_COMPATIBILITY_IDEOGRAPH-2F800> \xF0\xAF\xA0\x80
<CJK_COMPATIBILITY_IDEOGRAPH-2F801> \xF0\xAF\xA0\x81
<CJK_COMPATIBILITY_IDEOGRAPH-2F802> \xF0\xAF\xA0\x82
diff --git a/tools/tools/locale/etc/final-maps/widths.txt b/tools/tools/locale/etc/final-maps/widths.txt
index d8f0ab1888f0..3d0535be3884 100644
--- a/tools/tools/locale/etc/final-maps/widths.txt
+++ b/tools/tools/locale/etc/final-maps/widths.txt
@@ -1,6 +1,6 @@
# Warning: Do not edit. This file is automatically generated from the
# tools in /usr/src/tools/tools/locale. The data is obtained from the
-# utf8proc 2.8.0.
+# utf8proc 2.9.0.
# -----------------------------------------------------------------------------
WIDTH
<COMBINING_GRAVE_ACCENT> 0
@@ -859,6 +859,166 @@ WIDTH
<HANGUL_CHOSEONG_NIEUN-HIEUH> 2
<HANGUL_CHOSEONG_TIKEUT-RIEUL> 2
<HANGUL_CHOSEONG_FILLER> 2
+<HANGUL_JUNGSEONG_FILLER> 0
+<HANGUL_JUNGSEONG_A> 0
+<HANGUL_JUNGSEONG_AE> 0
+<HANGUL_JUNGSEONG_YA> 0
+<HANGUL_JUNGSEONG_YAE> 0
+<HANGUL_JUNGSEONG_EO> 0
+<HANGUL_JUNGSEONG_E> 0
+<HANGUL_JUNGSEONG_YEO> 0
+<HANGUL_JUNGSEONG_YE> 0
+<HANGUL_JUNGSEONG_O> 0
+<HANGUL_JUNGSEONG_WA> 0
+<HANGUL_JUNGSEONG_WAE> 0
+<HANGUL_JUNGSEONG_OE> 0
+<HANGUL_JUNGSEONG_YO> 0
+<HANGUL_JUNGSEONG_U> 0
+<HANGUL_JUNGSEONG_WEO> 0
+<HANGUL_JUNGSEONG_WE> 0
+<HANGUL_JUNGSEONG_WI> 0
+<HANGUL_JUNGSEONG_YU> 0
+<HANGUL_JUNGSEONG_EU> 0
+<HANGUL_JUNGSEONG_YI> 0
+<HANGUL_JUNGSEONG_I> 0
+<HANGUL_JUNGSEONG_A-O> 0
+<HANGUL_JUNGSEONG_A-U> 0
+<HANGUL_JUNGSEONG_YA-O> 0
+<HANGUL_JUNGSEONG_YA-YO> 0
+<HANGUL_JUNGSEONG_EO-O> 0
+<HANGUL_JUNGSEONG_EO-U> 0
+<HANGUL_JUNGSEONG_EO-EU> 0
+<HANGUL_JUNGSEONG_YEO-O> 0
+<HANGUL_JUNGSEONG_YEO-U> 0
+<HANGUL_JUNGSEONG_O-EO> 0
+<HANGUL_JUNGSEONG_O-E> 0
+<HANGUL_JUNGSEONG_O-YE> 0
+<HANGUL_JUNGSEONG_O-O> 0
+<HANGUL_JUNGSEONG_O-U> 0
+<HANGUL_JUNGSEONG_YO-YA> 0
+<HANGUL_JUNGSEONG_YO-YAE> 0
+<HANGUL_JUNGSEONG_YO-YEO> 0
+<HANGUL_JUNGSEONG_YO-O> 0
+<HANGUL_JUNGSEONG_YO-I> 0
+<HANGUL_JUNGSEONG_U-A> 0
+<HANGUL_JUNGSEONG_U-AE> 0
+<HANGUL_JUNGSEONG_U-EO-EU> 0
+<HANGUL_JUNGSEONG_U-YE> 0
+<HANGUL_JUNGSEONG_U-U> 0
+<HANGUL_JUNGSEONG_YU-A> 0
+<HANGUL_JUNGSEONG_YU-EO> 0
+<HANGUL_JUNGSEONG_YU-E> 0
+<HANGUL_JUNGSEONG_YU-YEO> 0
+<HANGUL_JUNGSEONG_YU-YE> 0
+<HANGUL_JUNGSEONG_YU-U> 0
+<HANGUL_JUNGSEONG_YU-I> 0
+<HANGUL_JUNGSEONG_EU-U> 0
+<HANGUL_JUNGSEONG_EU-EU> 0
+<HANGUL_JUNGSEONG_YI-U> 0
+<HANGUL_JUNGSEONG_I-A> 0
+<HANGUL_JUNGSEONG_I-YA> 0
+<HANGUL_JUNGSEONG_I-O> 0
+<HANGUL_JUNGSEONG_I-U> 0
+<HANGUL_JUNGSEONG_I-EU> 0
+<HANGUL_JUNGSEONG_I-ARAEA> 0
+<HANGUL_JUNGSEONG_ARAEA> 0
+<HANGUL_JUNGSEONG_ARAEA-EO> 0
+<HANGUL_JUNGSEONG_ARAEA-U> 0
+<HANGUL_JUNGSEONG_ARAEA-I> 0
+<HANGUL_JUNGSEONG_SSANGARAEA> 0
+<HANGUL_JUNGSEONG_A-EU> 0
+<HANGUL_JUNGSEONG_YA-U> 0
+<HANGUL_JUNGSEONG_YEO-YA> 0
+<HANGUL_JUNGSEONG_O-YA> 0
+<HANGUL_JUNGSEONG_O-YAE> 0
+<HANGUL_JONGSEONG_KIYEOK> 0
+<HANGUL_JONGSEONG_SSANGKIYEOK> 0
+<HANGUL_JONGSEONG_KIYEOK-SIOS> 0
+<HANGUL_JONGSEONG_NIEUN> 0
+<HANGUL_JONGSEONG_NIEUN-CIEUC> 0
+<HANGUL_JONGSEONG_NIEUN-HIEUH> 0
+<HANGUL_JONGSEONG_TIKEUT> 0
+<HANGUL_JONGSEONG_RIEUL> 0
+<HANGUL_JONGSEONG_RIEUL-KIYEOK> 0
+<HANGUL_JONGSEONG_RIEUL-MIEUM> 0
+<HANGUL_JONGSEONG_RIEUL-PIEUP> 0
+<HANGUL_JONGSEONG_RIEUL-SIOS> 0
+<HANGUL_JONGSEONG_RIEUL-THIEUTH> 0
+<HANGUL_JONGSEONG_RIEUL-PHIEUPH> 0
+<HANGUL_JONGSEONG_RIEUL-HIEUH> 0
+<HANGUL_JONGSEONG_MIEUM> 0
+<HANGUL_JONGSEONG_PIEUP> 0
+<HANGUL_JONGSEONG_PIEUP-SIOS> 0
+<HANGUL_JONGSEONG_SIOS> 0
+<HANGUL_JONGSEONG_SSANGSIOS> 0
+<HANGUL_JONGSEONG_IEUNG> 0
+<HANGUL_JONGSEONG_CIEUC> 0
+<HANGUL_JONGSEONG_CHIEUCH> 0
+<HANGUL_JONGSEONG_KHIEUKH> 0
+<HANGUL_JONGSEONG_THIEUTH> 0
+<HANGUL_JONGSEONG_PHIEUPH> 0
+<HANGUL_JONGSEONG_HIEUH> 0
+<HANGUL_JONGSEONG_KIYEOK-RIEUL> 0
+<HANGUL_JONGSEONG_KIYEOK-SIOS-KIYEOK> 0
+<HANGUL_JONGSEONG_NIEUN-KIYEOK> 0
+<HANGUL_JONGSEONG_NIEUN-TIKEUT> 0
+<HANGUL_JONGSEONG_NIEUN-SIOS> 0
+<HANGUL_JONGSEONG_NIEUN-PANSIOS> 0
+<HANGUL_JONGSEONG_NIEUN-THIEUTH> 0
+<HANGUL_JONGSEONG_TIKEUT-KIYEOK> 0
+<HANGUL_JONGSEONG_TIKEUT-RIEUL> 0
+<HANGUL_JONGSEONG_RIEUL-KIYEOK-SIOS> 0
+<HANGUL_JONGSEONG_RIEUL-NIEUN> 0
+<HANGUL_JONGSEONG_RIEUL-TIKEUT> 0
+<HANGUL_JONGSEONG_RIEUL-TIKEUT-HIEUH> 0
+<HANGUL_JONGSEONG_SSANGRIEUL> 0
+<HANGUL_JONGSEONG_RIEUL-MIEUM-KIYEOK> 0
+<HANGUL_JONGSEONG_RIEUL-MIEUM-SIOS> 0
+<HANGUL_JONGSEONG_RIEUL-PIEUP-SIOS> 0
+<HANGUL_JONGSEONG_RIEUL-PIEUP-HIEUH> 0
+<HANGUL_JONGSEONG_RIEUL-KAPYEOUNPIEUP> 0
+<HANGUL_JONGSEONG_RIEUL-SSANGSIOS> 0
+<HANGUL_JONGSEONG_RIEUL-PANSIOS> 0
+<HANGUL_JONGSEONG_RIEUL-KHIEUKH> 0
+<HANGUL_JONGSEONG_RIEUL-YEORINHIEUH> 0
+<HANGUL_JONGSEONG_MIEUM-KIYEOK> 0
+<HANGUL_JONGSEONG_MIEUM-RIEUL> 0
+<HANGUL_JONGSEONG_MIEUM-PIEUP> 0
+<HANGUL_JONGSEONG_MIEUM-SIOS> 0
+<HANGUL_JONGSEONG_MIEUM-SSANGSIOS> 0
+<HANGUL_JONGSEONG_MIEUM-PANSIOS> 0
+<HANGUL_JONGSEONG_MIEUM-CHIEUCH> 0
+<HANGUL_JONGSEONG_MIEUM-HIEUH> 0
+<HANGUL_JONGSEONG_KAPYEOUNMIEUM> 0
+<HANGUL_JONGSEONG_PIEUP-RIEUL> 0
+<HANGUL_JONGSEONG_PIEUP-PHIEUPH> 0
+<HANGUL_JONGSEONG_PIEUP-HIEUH> 0
+<HANGUL_JONGSEONG_KAPYEOUNPIEUP> 0
+<HANGUL_JONGSEONG_SIOS-KIYEOK> 0
+<HANGUL_JONGSEONG_SIOS-TIKEUT> 0
+<HANGUL_JONGSEONG_SIOS-RIEUL> 0
+<HANGUL_JONGSEONG_SIOS-PIEUP> 0
+<HANGUL_JONGSEONG_PANSIOS> 0
+<HANGUL_JONGSEONG_IEUNG-KIYEOK> 0
+<HANGUL_JONGSEONG_IEUNG-SSANGKIYEOK> 0
+<HANGUL_JONGSEONG_SSANGIEUNG> 0
+<HANGUL_JONGSEONG_IEUNG-KHIEUKH> 0
+<HANGUL_JONGSEONG_YESIEUNG> 0
+<HANGUL_JONGSEONG_YESIEUNG-SIOS> 0
+<HANGUL_JONGSEONG_YESIEUNG-PANSIOS> 0
+<HANGUL_JONGSEONG_PHIEUPH-PIEUP> 0
+<HANGUL_JONGSEONG_KAPYEOUNPHIEUPH> 0
+<HANGUL_JONGSEONG_HIEUH-NIEUN> 0
+<HANGUL_JONGSEONG_HIEUH-RIEUL> 0
+<HANGUL_JONGSEONG_HIEUH-MIEUM> 0
+<HANGUL_JONGSEONG_HIEUH-PIEUP> 0
+<HANGUL_JONGSEONG_YEORINHIEUH> 0
+<HANGUL_JONGSEONG_KIYEOK-NIEUN> 0
+<HANGUL_JONGSEONG_KIYEOK-PIEUP> 0
+<HANGUL_JONGSEONG_KIYEOK-CHIEUCH> 0
+<HANGUL_JONGSEONG_KIYEOK-KHIEUKH> 0
+<HANGUL_JONGSEONG_KIYEOK-HIEUH> 0
+<HANGUL_JONGSEONG_SSANGNIEUN> 0
<ETHIOPIC_COMBINING_GEMINATION_AND_VOWEL_LENGTH_MARK> 0
<ETHIOPIC_COMBINING_VOWEL_LENGTH_MARK> 0
<ETHIOPIC_COMBINING_GEMINATION_MARK> 0
@@ -1687,6 +1847,10 @@ WIDTH
<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_UPPER_RIGHT> 2
<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_LOWER_LEFT> 2
<IDEOGRAPHIC_DESCRIPTION_CHARACTER_OVERLAID> 2
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_RIGHT> 2
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SURROUND_FROM_LOWER_RIGHT> 2
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_HORIZONTAL_REFLECTION> 2
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_ROTATION> 2
<IDEOGRAPHIC_SPACE> 2
<IDEOGRAPHIC_COMMA> 2
<IDEOGRAPHIC_FULL_STOP> 2
@@ -2160,6 +2324,7 @@ WIDTH
<CJK_STROKE_HZZZG> 2
<CJK_STROKE_PG> 2
<CJK_STROKE_Q> 2
+<IDEOGRAPHIC_DESCRIPTION_CHARACTER_SUBTRACTION> 2
<KATAKANA_LETTER_SMALL_KU> 2
<KATAKANA_LETTER_SMALL_SI> 2
<KATAKANA_LETTER_SMALL_SU> 2
@@ -114014,6 +114179,628 @@ WIDTH
<CJK_UNIFIED_IDEOGRAPH-2EBDE> 2
<CJK_UNIFIED_IDEOGRAPH-2EBDF> 2
<CJK_UNIFIED_IDEOGRAPH-2EBE0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF1> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF2> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF3> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF4> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF5> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF6> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF7> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF8> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBF9> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBFA> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBFB> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBFC> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBFD> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBFE> 2
+<CJK_UNIFIED_IDEOGRAPH-2EBFF> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC00> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC01> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC02> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC03> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC04> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC05> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC06> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC07> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC08> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC09> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC0A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC0B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC0C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC0D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC0E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC0F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC10> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC11> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC12> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC13> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC14> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC15> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC16> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC17> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC18> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC19> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC1A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC1B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC1C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC1D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC1E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC1F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC20> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC21> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC22> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC23> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC24> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC25> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC26> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC27> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC28> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC29> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC2A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC2B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC2C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC2D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC2E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC2F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC30> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC31> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC32> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC33> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC34> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC35> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC36> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC37> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC38> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC39> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC3A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC3B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC3C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC3D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC3E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC3F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC40> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC41> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC42> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC43> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC44> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC45> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC46> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC47> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC48> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC49> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC4A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC4B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC4C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC4D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC4E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC4F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC50> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC51> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC52> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC53> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC54> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC55> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC56> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC57> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC58> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC59> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC5A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC5B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC5C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC5D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC5E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC5F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC60> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC61> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC62> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC63> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC64> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC65> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC66> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC67> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC68> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC69> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC6A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC6B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC6C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC6D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC6E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC6F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC70> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC71> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC72> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC73> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC74> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC75> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC76> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC77> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC78> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC79> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC7A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC7B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC7C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC7D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC7E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC7F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC80> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC81> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC82> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC83> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC84> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC85> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC86> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC87> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC88> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC89> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC8A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC8B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC8C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC8D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC8E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC8F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC90> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC91> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC92> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC93> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC94> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC95> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC96> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC97> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC98> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC99> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC9A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC9B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC9C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC9D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC9E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EC9F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA0> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA1> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA2> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA3> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA4> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA5> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA6> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA7> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA8> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECA9> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECAA> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECAB> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECAC> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECAD> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECAE> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECAF> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB0> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB1> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB2> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB3> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB4> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB5> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB6> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB7> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB8> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECB9> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECBA> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECBB> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECBC> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECBD> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECBE> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECBF> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC0> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC1> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC2> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC3> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC4> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC5> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC6> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC7> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC8> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECC9> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECCA> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECCB> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECCC> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECCD> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECCE> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECCF> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD0> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD1> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD2> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD3> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD4> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD5> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD6> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD7> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD8> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECD9> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECDA> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECDB> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECDC> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECDD> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECDE> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECDF> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE0> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE1> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE2> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE3> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE4> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE5> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE6> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE7> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE8> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECE9> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECEA> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECEB> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECEC> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECED> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECEE> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECEF> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF0> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF1> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF2> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF3> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF4> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF5> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF6> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF7> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF8> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECF9> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECFA> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECFB> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECFC> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECFD> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECFE> 2
+<CJK_UNIFIED_IDEOGRAPH-2ECFF> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED00> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED01> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED02> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED03> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED04> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED05> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED06> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED07> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED08> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED09> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED0A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED0B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED0C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED0D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED0E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED0F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED10> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED11> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED12> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED13> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED14> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED15> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED16> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED17> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED18> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED19> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED1A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED1B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED1C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED1D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED1E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED1F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED20> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED21> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED22> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED23> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED24> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED25> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED26> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED27> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED28> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED29> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED2A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED2B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED2C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED2D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED2E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED2F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED30> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED31> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED32> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED33> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED34> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED35> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED36> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED37> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED38> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED39> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED3A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED3B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED3C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED3D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED3E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED3F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED40> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED41> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED42> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED43> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED44> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED45> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED46> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED47> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED48> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED49> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED4A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED4B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED4C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED4D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED4E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED4F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED50> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED51> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED52> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED53> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED54> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED55> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED56> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED57> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED58> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED59> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED5A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED5B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED5C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED5D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED5E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED5F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED60> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED61> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED62> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED63> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED64> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED65> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED66> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED67> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED68> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED69> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED6A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED6B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED6C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED6D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED6E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED6F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED70> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED71> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED72> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED73> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED74> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED75> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED76> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED77> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED78> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED79> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED7A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED7B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED7C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED7D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED7E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED7F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED80> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED81> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED82> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED83> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED84> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED85> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED86> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED87> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED88> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED89> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED8A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED8B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED8C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED8D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED8E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED8F> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED90> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED91> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED92> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED93> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED94> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED95> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED96> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED97> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED98> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED99> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED9A> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED9B> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED9C> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED9D> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED9E> 2
+<CJK_UNIFIED_IDEOGRAPH-2ED9F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA1> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA2> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA3> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA4> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA5> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA6> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA7> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA8> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDA9> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDAA> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDAB> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDAC> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDAD> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDAE> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDAF> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB1> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB2> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB3> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB4> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB5> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB6> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB7> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB8> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDB9> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDBA> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDBB> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDBC> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDBD> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDBE> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDBF> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC1> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC2> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC3> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC4> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC5> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC6> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC7> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC8> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDC9> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDCA> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDCB> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDCC> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDCD> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDCE> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDCF> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD1> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD2> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD3> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD4> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD5> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD6> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD7> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD8> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDD9> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDDA> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDDB> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDDC> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDDD> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDDE> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDDF> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE1> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE2> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE3> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE4> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE5> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE6> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE7> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE8> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDE9> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDEA> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDEB> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDEC> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDED> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDEE> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDEF> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF0> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF1> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF2> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF3> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF4> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF5> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF6> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF7> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF8> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDF9> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDFA> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDFB> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDFC> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDFD> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDFE> 2
+<CJK_UNIFIED_IDEOGRAPH-2EDFF> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE00> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE01> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE02> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE03> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE04> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE05> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE06> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE07> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE08> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE09> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE0A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE0B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE0C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE0D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE0E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE0F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE10> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE11> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE12> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE13> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE14> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE15> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE16> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE17> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE18> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE19> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE1A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE1B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE1C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE1D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE1E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE1F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE20> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE21> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE22> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE23> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE24> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE25> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE26> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE27> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE28> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE29> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE2A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE2B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE2C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE2D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE2E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE2F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE30> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE31> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE32> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE33> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE34> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE35> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE36> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE37> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE38> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE39> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE3A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE3B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE3C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE3D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE3E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE3F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE40> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE41> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE42> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE43> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE44> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE45> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE46> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE47> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE48> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE49> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE4A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE4B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE4C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE4D> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE4E> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE4F> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE50> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE51> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE52> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE53> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE54> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE55> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE56> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE57> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE58> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE59> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE5A> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE5B> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE5C> 2
+<CJK_UNIFIED_IDEOGRAPH-2EE5D> 2
<CJK_COMPATIBILITY_IDEOGRAPH-2F800> 2
<CJK_COMPATIBILITY_IDEOGRAPH-2F801> 2
<CJK_COMPATIBILITY_IDEOGRAPH-2F802> 2
diff --git a/tools/tools/locale/tools/getwidths.c b/tools/tools/locale/tools/getwidths.c
index 2790b8031912..63c62791253f 100644
--- a/tools/tools/locale/tools/getwidths.c
+++ b/tools/tools/locale/tools/getwidths.c
@@ -28,6 +28,21 @@
#include <utf8proc.h>
+static int
+width_of(int32_t wc)
+{
+
+ /*
+ * Hangul Jamo medial vowels and final consonants are more of
+ * a combining character, and should be considered zero-width.
+ */
+ if (wc >= 0x1160 && wc <= 0x11ff)
+ return (0);
+
+ /* No override by default, trust utf8proc's width. */
+ return (utf8proc_charwidth(wc));
+}
+
int
main(void)
{
@@ -43,9 +58,10 @@ main(void)
wcc = utf8proc_category(wc);
if (wcc == UTF8PROC_CATEGORY_CC)
continue;
- wcw = utf8proc_charwidth(wc);
+ wcw = width_of(wc);
if (wcw == 1)
continue;
+
printf("%04X %d\n", wc, wcw);
}
diff --git a/tools/tools/makeroot/Makefile b/tools/tools/makeroot/Makefile
index 218d77cf5211..fffe06d26f75 100644
--- a/tools/tools/makeroot/Makefile
+++ b/tools/tools/makeroot/Makefile
@@ -1,4 +1,3 @@
-
SCRIPTS= makeroot.sh
MAN= makeroot.8
diff --git a/tools/tools/mcgrab/Makefile b/tools/tools/mcgrab/Makefile
index 460c8beded1e..61eca34b4d56 100644
--- a/tools/tools/mcgrab/Makefile
+++ b/tools/tools/mcgrab/Makefile
@@ -1,4 +1,3 @@
-
PROG_CXX= mcgrab
CFLAGS+= -I${.CURDIR}/../mctest
diff --git a/tools/tools/mctest/Makefile b/tools/tools/mctest/Makefile
index 6ffc0bedbfc9..0616e599ecfb 100644
--- a/tools/tools/mctest/Makefile
+++ b/tools/tools/mctest/Makefile
@@ -1,4 +1,3 @@
-
PROG_CXX= mctest
LIBADD= pthread
diff --git a/tools/tools/mfi/Makefile b/tools/tools/mfi/Makefile
index 84e11395e766..bfae20586df5 100644
--- a/tools/tools/mfi/Makefile
+++ b/tools/tools/mfi/Makefile
@@ -1,4 +1,3 @@
-
PROG= mfi_checkq
MAN=
BINDIR?=/usr/local/bin
diff --git a/tools/tools/mwl/Makefile b/tools/tools/mwl/Makefile
index f3a00af70d81..fc0f22878718 100644
--- a/tools/tools/mwl/Makefile
+++ b/tools/tools/mwl/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= mwlstats mwldebug
.include <bsd.subdir.mk>
diff --git a/tools/tools/mwl/mwldebug/Makefile b/tools/tools/mwl/mwldebug/Makefile
index cbbfdeb73617..8ec0d0cf5a69 100644
--- a/tools/tools/mwl/mwldebug/Makefile
+++ b/tools/tools/mwl/mwldebug/Makefile
@@ -1,4 +1,3 @@
-
PROG= mwldebug
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/mwl/mwlstats/Makefile b/tools/tools/mwl/mwlstats/Makefile
index af1833f9ea11..74d8c7df80be 100644
--- a/tools/tools/mwl/mwlstats/Makefile
+++ b/tools/tools/mwl/mwlstats/Makefile
@@ -1,4 +1,3 @@
-
PROG= mwlstats
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/nanobsd/Files/root/save_cfg b/tools/tools/nanobsd/Files/root/save_cfg
index 1931e5c79923..24f812197a68 100644
--- a/tools/tools/nanobsd/Files/root/save_cfg
+++ b/tools/tools/nanobsd/Files/root/save_cfg
@@ -62,7 +62,7 @@ do
# Add to cfg (y/n/i)?
# y) -> save this file in /cfg
# n) -> do not save this file in /cfg for current script invocation ONLY
- # i) -> add file to ignore list (/cfg/.ignore hiereachy) and never save
+ # i) -> add file to ignore list (/cfg/.ignore hierarchy) and never save
# try to add this file to /cfg.
#
# touch is used to add files to /cfg to keep the script flow straight and easy
diff --git a/tools/tools/nanobsd/defaults.sh b/tools/tools/nanobsd/defaults.sh
index 165c967de807..65bace957f71 100755
--- a/tools/tools/nanobsd/defaults.sh
+++ b/tools/tools/nanobsd/defaults.sh
@@ -67,7 +67,6 @@ NANO_PKG_META_BASE=/var/db
# Make & parallel Make
NANO_MAKE="make"
NANO_NCPU=$(sysctl -n hw.ncpu)
-NANO_PMAKE="make -j $NANO_NCPU"
# The default name for any image we create.
NANO_IMGNAME="_.disk.full"
@@ -498,10 +497,10 @@ run_late_customize ( ) (
# a user's cfg file would override this.
#
fixup_before_diskimage ( ) (
- # Run the deduplication script that takes the matalog journal and
+ # Run the deduplication script that takes the metalog journal and
# combines multiple entries for the same file (see source for
# details). We take the extra step of removing the size keywords. This
- # script, and many of the user scripts, copies, appeneds and otherwise
+ # script, and many of the user scripts, copies, appends and otherwise
# modifies files in the build, changing their sizes. These actions are
# impossible to trap, so go ahead remove the size= keyword. For this
# narrow use, it doesn't buy us any protection and just gets in the way.
@@ -539,7 +538,7 @@ setup_nanobsd ( ) (
# are installed by this point, but are later in the process,
# the symlink not being here causes problems. It never hurts
# to have the symlink in error though.
- ln -s ../../etc/local usr/local/etc
+ ln -sf ../../etc/local usr/local/etc
for d in var etc
do
@@ -571,13 +570,42 @@ setup_nanobsd_etc ( ) (
# create diskless marker file
touch etc/diskless
- [ -n "${NANO_NOPRIV_BUILD}" ] && chmod 666 etc/defaults/rc.conf
-
- # Make root filesystem R/O by default
- echo "root_rw_mount=NO" >> etc/defaults/rc.conf
- # Disable entropy file, since / is read-only /var/db/entropy should be enough?
- echo "entropy_file=NO" >> etc/defaults/rc.conf
+ [ -n "${NANO_NOPRIV_BUILD}" ] && chmod 666 boot/defaults/loader.conf
+ {
+ echo
+ echo '### NanoBSD configuration ##################################'
+ echo 'hostuuid_load="NO"'
+ echo 'entropy_cache_load="NO" # Disable loading cached entropy at boot time.'
+ echo 'kern.random.initial_seeding.disable_bypass_warnings="1" # Do not log a warning'
+ echo " # if the 'bypass_before_seeding' knob is enabled"
+ echo " # and a request is submitted prior to initial"
+ echo " # seeding."
+ } >> boot/defaults/loader.conf
+ [ -n "${NANO_NOPRIV_BUILD}" ] && chmod 444 boot/defaults/loader.conf
+ [ -n "${NANO_NOPRIV_BUILD}" ] && chmod 666 etc/defaults/rc.conf
+ if ! ed -s etc/defaults/rc.conf <<\EOF
+/^### Define source_rc_confs, the mechanism used by \/etc\/rc\.\* ##$/i
+### NanoBSD options ########################################
+##############################################################
+
+kldxref_enable="NO" # Disable building linker.hints files with kldxref(8).
+root_rw_mount="NO" # Inhibit remounting root read-write.
+entropy_boot_file="NO" # Disable very early (used at early boot time)
+ # entropy caching through reboots.
+entropy_file="NO" # Disable late (used when going multi-user)
+ # entropy through reboots.
+entropy_dir="NO" # Disable caching entropy via cron.
+
+##############################################################
+.
+w
+q
+EOF
+ then
+ echo "Regular expression pattern not found"
+ exit 2
+ fi
[ -n "${NANO_NOPRIV_BUILD}" ] && chmod 444 etc/defaults/rc.conf
# save config file for scripts
@@ -714,10 +742,10 @@ UsbDevice ( ) {
cust_comconsole ( ) (
# Enable getty on console
- sed -i "" -e /tty[du]0/s/off/on/ ${NANO_WORLDDIR}/etc/ttys
+ sed -i "" -e '/^tty[du]0/s/off/onifconsole/' ${NANO_WORLDDIR}/etc/ttys
- # Disable getty on syscons devices
- sed -i "" -e '/^ttyv[0-8]/s/ on/ off/' ${NANO_WORLDDIR}/etc/ttys
+ # Disable getty on syscons or vt devices
+ sed -i "" -E '/^ttyv[0-8]/s/\ton(ifexists)?/\toff/' ${NANO_WORLDDIR}/etc/ttys
# Tell loader to use serial console early.
echo "${NANO_BOOT2CFG}" > ${NANO_WORLDDIR}/boot.config
@@ -760,6 +788,7 @@ cust_pkgng ( ) (
fi
# If the package directory doesn't exist, we're done.
+ NANO_PACKAGE_DIR="$(realpath $NANO_PACKAGE_DIR)"
if [ ! -d ${NANO_PACKAGE_DIR} ]; then
echo "DONE 0 packages"
return 0
@@ -785,7 +814,7 @@ cust_pkgng ( ) (
CR "${PKGCMD} add /_.p/${_NANO_PKG_PACKAGE}"
(
- # Expand any glob characters in pacakge list
+ # Expand any glob characters in package list
cd "${NANO_PACKAGE_DIR}"
_PKGS=`find ${NANO_PACKAGE_LIST} -not -name "${_NANO_PKG_PACKAGE}" -print | sort | uniq`
@@ -852,17 +881,20 @@ pprint ( ) (
usage ( ) {
(
- echo "Usage: $0 [-bfhiKknqvwX] [-c config_file]"
+ echo "Usage: $0 [-BbfhIiKknqvWwX] [-c config_file]"
+ echo " -B suppress installs (both kernel and world)"
echo " -b suppress builds (both kernel and world)"
echo " -c specify config file"
echo " -f suppress code slice extraction (implies -i)"
echo " -h print this help summary page"
+ echo " -I build disk image from existing build/install"
echo " -i suppress disk image build"
echo " -K suppress installkernel"
echo " -k suppress buildkernel"
echo " -n add -DNO_CLEAN to buildworld, buildkernel, etc"
echo " -q make output more quiet"
echo " -v make output more verbose"
+ echo " -W suppress installworld"
echo " -w suppress buildworld"
echo " -X make native-xtools"
) 1>&2
@@ -873,7 +905,7 @@ usage ( ) {
# Setup and Export Internal variables
#
-export_var ( ) { # Don't wawnt a subshell
+export_var ( ) { # Don't want a subshell
var=$1
# Lookup value of the variable.
eval val=\$$var
@@ -882,13 +914,17 @@ export_var ( ) { # Don't wawnt a subshell
}
# Call this function to set defaults _after_ parsing options.
-# dont want a subshell otherwise variable setting is thrown away.
+# don't want a subshell otherwise variable setting is thrown away.
set_defaults_and_export ( ) {
: ${NANO_OBJ:=/usr/obj/nanobsd.${NANO_NAME}${NANO_LAYOUT:+.${NANO_LAYOUT}}}
: ${MAKEOBJDIRPREFIX:=${NANO_OBJ}}
: ${NANO_DISKIMGDIR:=${NANO_OBJ}}
: ${NANO_WORLDDIR:=${NANO_OBJ}/_.w}
: ${NANO_LOG:=${NANO_OBJ}}
+ : ${NANO_PMAKE:="${NANO_MAKE} -j ${NANO_NCPU}"}
+ if ! $do_clean; then
+ NANO_PMAKE="${NANO_PMAKE} -DNO_CLEAN"
+ fi
NANO_MAKE_CONF_BUILD=${MAKEOBJDIRPREFIX}/make.conf.build
NANO_MAKE_CONF_INSTALL=${NANO_OBJ}/make.conf.install
diff --git a/tools/tools/nanobsd/embedded/common b/tools/tools/nanobsd/embedded/common
index bcb1061df629..4aecd3602f6f 100644
--- a/tools/tools/nanobsd/embedded/common
+++ b/tools/tools/nanobsd/embedded/common
@@ -51,9 +51,8 @@
# o documentation for how to run the qemu images
# o msdos mtools fallback
# o special boot for !x86 !arm platforms
-# o qemu image for arm
# o qemu image for aarch64
-# o qemu image for armv6/armv7
+# o qemu image for armv7
# o easy support for different image / vm formats
# o need to promote much of this to nanobsd.sh and friends
# o uses old kludge to build image w/o ownership being right
@@ -503,12 +502,6 @@ std_amd64 ( ) {
std_i386
}
-std_arm ( ) {
-}
-
-std_armv6 ( ) {
-}
-
std_armv7 ( ) {
}
diff --git a/tools/tools/nanobsd/embedded/rpi.cfg b/tools/tools/nanobsd/embedded/rpi.cfg
deleted file mode 100644
index 54d2b559290b..000000000000
--- a/tools/tools/nanobsd/embedded/rpi.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-
-#-
-# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
-# Copyright (c) 2010-2011 iXsystems, Inc.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL iXsystems, Inc. OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-
-NANO_ARCH=armv6
-NANO_KERNEL=RPI-B
-NANO_DRIVE=mmcsd0
-NANO_NAME=rpi-b
-NANO_BOOT_PKG=u-boot-rpi
-NANO_CPUTYPE=arm1176jzf-s
-
-. common # Pull in common definitions, keep last
diff --git a/tools/tools/nanobsd/fill_pkg.sh b/tools/tools/nanobsd/fill_pkg.sh
index 2869122c5fbf..17d163709f91 100644
--- a/tools/tools/nanobsd/fill_pkg.sh
+++ b/tools/tools/nanobsd/fill_pkg.sh
@@ -27,16 +27,16 @@
#
#
# Usage:
-# $0 PACKAGE_DUMP NANO_PACKAGE_DIR /usr/ports/foo/bar [package.txz]...
+# $0 [-cv] PACKAGE_DUMP NANO_PACKAGE_DIR /usr/ports/foo/bar [package.pkg]...
#
-# Will symlink the packages listed, including their runtime dependencies,
+# Will symlink/copy the packages listed, including their runtime dependencies,
# from the PACKAGE_DUMP to the NANO_PACKAGE_DIR.
#
: ${PORTSDIR:=/usr/ports}
usage () {
- echo "Usage: $0 [-v] package-dump-dir nano-package-dir port-dir-or-pkg ..." 1>&2
+ echo "Usage: $0 [-cv] package-dump-dir nano-package-dir port-dir-or-pkg ..." 1>&2
exit 2
}
@@ -53,29 +53,29 @@ ports_recurse() (
for p do
if [ -d "$p" -a -f "$p/Makefile" ] ; then
msg 3 "$p: full path to port"
- pkgname=`cd "$p" && make -V pkgname`
+ pkgname=`cd "$p" && make package-name`
type=port
fullpath=$p
elif [ -d "${PORTSDIR}/$p" -a -f "${PORTSDIR}/$p/Makefile" ] ; then
msg 3 "$p: path to port relative to ${PORTSDIR}}"
- pkgname=`cd "${PORTSDIR}/$p" && make -V pkgname`
+ pkgname=`cd "${PORTSDIR}/$p" && make package-name`
type=port
fullpath=${PORTSDIR}/$p
- elif [ "${p%.txz}" != "$p" -a -f "$p" ] && pkg info -F "$p" > /dev/null 2>&1 ; then
+ elif [ "${p%.pkg}" != "$p" -a -f "$p" ] && pkg info -F "$p" > /dev/null 2>&1 ; then
msg 3 "$p: full package file name"
- pkgname=`basename "$p" | sed 's/\.txz$//I'`
+ pkgname=`basename "$p" | sed 's/\.pkg$//I'`
type=pkg
fullpath=$p
- elif [ "${p%.txz}" != "$p" -a -f "$dumpdir/$p" ] && pkg info -F "$dumpdir/$p" > /dev/null 2>&1 ; then
+ elif [ "${p%.pkg}" != "$p" -a -f "$dumpdir/$p" ] && pkg info -F "$dumpdir/$p" > /dev/null 2>&1 ; then
msg 3 "$p: package file name relative to $dumpdir"
- pkgname=`basename "$p" | sed 's/\.txz$//I'`
+ pkgname=`basename "$p" | sed 's/\.pkg$//I'`
type=pkg
fullpath=$dumpdir/$p
- elif [ -f "$dumpdir/$p.txz" ] && pkg info -F "$dumpdir/$p.txz" > /dev/null 2>&1 ; then
+ elif [ -f "$dumpdir/$p.pkg" ] && pkg info -F "$dumpdir/$p.pkg" > /dev/null 2>&1 ; then
msg 3 "$p: package name relative to $dumpdir"
pkgname=`basename "$p"`
type=pkg
- fullpath=$dumpdir/$p.txz
+ fullpath=$dumpdir/$p.pkg
else
echo "Missing port or package $p" 1>&2
exit 2
@@ -106,7 +106,7 @@ ports_recurse() (
fi
deps=`pkg info -dF "$fullpath" | grep -v "$pkgname:"`
for dep in $deps ; do
- arg=`echo $dep | sed -e "s|^|$dir|" -e 's/$/.txz/'`
+ arg=`echo $dep | sed -e "s|^|$dir|" -e 's/$/.pkg/'`
msg 2 "Check $arg as requirement for package $pkgname"
ports_recurse "$outputfile" "$dumpdir" "$arg"
done
@@ -116,10 +116,12 @@ ports_recurse() (
done
)
+COPY="ln -s"
VERBOSE=0
-while getopts v opt ; do
+while getopts cv opt ; do
case "$opt" in
+ c) COPY="cp -p" ;;
v) VERBOSE=$(($VERBOSE + 1)) ;;
[?]) usage ;;
esac
@@ -155,10 +157,10 @@ for p do
done
for i in `cat "$PL"` ; do
- if [ -f "$NANO_PKG_DUMP/$i.txz" ] ; then
- ln -s "$NANO_PKG_DUMP/$i.txz" "$NANO_PKG_DIR"
+ if [ -f "$NANO_PKG_DUMP/$i.pkg" ] ; then
+ $COPY "$NANO_PKG_DUMP/$i.pkg" "$NANO_PKG_DIR"
else
- echo "Package $i misssing in $NANO_PKG_DUMP" 1>&2
+ echo "Package $i missing in $NANO_PKG_DUMP" 1>&2
exit 1
fi
done
diff --git a/tools/tools/nanobsd/legacy.sh b/tools/tools/nanobsd/legacy.sh
index 58288d063b4a..2f689212263e 100644
--- a/tools/tools/nanobsd/legacy.sh
+++ b/tools/tools/nanobsd/legacy.sh
@@ -64,31 +64,30 @@ calculate_partitioning ( ) (
}
# First image partition start at second track
- print $3, isl * cs - $3
+ print $3, isl * cs - $3, 1
c = isl * cs;
# Second image partition (if any) also starts offset one
# track to keep them identical.
if ($2 > 1) {
- print $3 + c, isl * cs - $3
+ print $3 + c, isl * cs - $3, 2
c += isl * cs;
}
# Config partition starts at cylinder boundary.
- print c, csl * cs
+ print c, csl * cs, 3
c += csl * cs
# Data partition (if any) starts at cylinder boundary.
if ($7 > 0) {
- print c, dsl * cs
+ print c, dsl * cs, 4
} else if ($7 < 0 && $1 > c) {
- print c, $1 - c
+ print c, $1 - c, 4
} else if ($1 < c) {
print "Disk space overcommitted by", \
c - $1, "sectors" > "/dev/stderr"
exit 2
}
-
}
' > ${NANO_LOG}/_.partitioning
)
@@ -116,14 +115,15 @@ create_code_slice ( ) (
trap "echo 'Running exit trap code' ; df -i ${MNT} ; umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT
- bsdlabel -w ${MD}
+ gpart create -s bsd "${MD}"
+ gpart add -t freebsd-ufs -b 16 "${MD}"
if [ -f ${NANO_WORLDDIR}/boot/boot ]; then
echo "Making bootable partition"
gpart bootcode -b ${NANO_WORLDDIR}/boot/boot ${MD}
else
echo "Partition will not be bootable"
fi
- bsdlabel ${MD}
+ gpart list ${MD}
# Create first image
populate_slice /dev/${MD}${NANO_PARTITION_ROOT} ${NANO_WORLDDIR} ${MNT} "${NANO_ROOT}"
@@ -173,7 +173,7 @@ create_diskimage ( ) (
}
{
# Make partition
- print "gpart add -t freebsd -b ", $1, " -s ", $2, " $1"
+ print "gpart add -t freebsd -b ", $1, " -s ", $2, " -i ", $3, " $1"
}
END {
# Force slice 1 to be marked active. This is necessary
diff --git a/tools/tools/nanobsd/mtree-dedup.awk b/tools/tools/nanobsd/mtree-dedup.awk
index e30f3100b4da..8840047f5318 100755
--- a/tools/tools/nanobsd/mtree-dedup.awk
+++ b/tools/tools/nanobsd/mtree-dedup.awk
@@ -84,7 +84,7 @@ function mtree_from_kvs(path, kvs)
return lv;
}
-# Parse the mtree line into path + KVs. Use a sentinal value
+# Parse the mtree line into path + KVs. Use a sentinel value
# for a bare keyword, which is extremely unlikely to be used
# for real.
function line2kv(kvs, str)
diff --git a/tools/tools/nanobsd/nanobsd.sh b/tools/tools/nanobsd/nanobsd.sh
index af03d89acece..4c390d8ca371 100755
--- a/tools/tools/nanobsd/nanobsd.sh
+++ b/tools/tools/nanobsd/nanobsd.sh
@@ -156,10 +156,6 @@ if [ ! -d "${NANO_TOOLS}" ]; then
exit 1
fi
-if ! $do_clean; then
- NANO_PMAKE="${NANO_PMAKE} -DNO_CLEAN"
-fi
-
pprint 1 "NanoBSD image ${NANO_NAME} build starting"
run_early_customize
diff --git a/tools/tools/nanobsd/pcengines/ALIX_DSK b/tools/tools/nanobsd/pcengines/ALIX_DSK
index 9ab9d79c574c..31365834d20f 100644
--- a/tools/tools/nanobsd/pcengines/ALIX_DSK
+++ b/tools/tools/nanobsd/pcengines/ALIX_DSK
@@ -97,6 +97,7 @@ device pflog
device pfsync
device carp
device if_bridge
+device crypto # core crypto support
options DEVICE_POLLING
diff --git a/tools/tools/nanobsd/rescue/common b/tools/tools/nanobsd/rescue/common
index 5fcf5c19b882..15bf10f5e67d 100644
--- a/tools/tools/nanobsd/rescue/common
+++ b/tools/tools/nanobsd/rescue/common
@@ -1,15 +1,15 @@
#
#
-NANO_SRC=$(pwd)
-NANO_SRC=${NANO_SRC%/tools/tools/nanobsd/rescue}
-NANO_OBJ=${NANO_SRC}/../nanobsd-builds/${NANO_NAME}/obj
+#NANO_SRC=$(pwd)
+#NANO_SRC=${NANO_SRC%/tools/tools/nanobsd/rescue}
+#NANO_OBJ=${NANO_SRC}/../nanobsd-builds/${NANO_NAME}/obj
NANO_TOOLS=`pwd`
NANO_PACKAGE_DIR=`pwd`/Pkg
NANO_RAM_TMPVARSIZE=40960
NANO_PMAKE="make -j 8"
NANO_LABEL="rescue"
NANO_RAM_TMPVARSIZE=40960
-NANO_MEDIASIZE="3932160"
+NANO_MEDIASIZE="6000000"
NANO_SECTS="63"
NANO_HEADS="16"
NANO_IMAGES="2"
@@ -31,10 +31,12 @@ CONF_INSTALL='
CONF_WORLD='
CFLAGS=-O -pipe
# We do not need these for rescue
-WITHOUT_LIB32=true
WITHOUT_TESTS=true
-WITHOUT_DEBUG_FILES=t
-WITHOUT_KERNEL_SYMBOLS=t
+WITHOUT_DEBUG_FILES=true
+WITHOUT_KERNEL_SYMBOLS=true
+WITHOUT_CLANG_FULL=true
+WITH_CLANG_EXTRAS=true
+WITHOUT_LIB32=true
'
# Functions
@@ -50,14 +52,14 @@ toUpper() {
customize_cmd cust_allow_ssh_root
customize_cmd cust_install_files
-cust_ld32_cfg () (
- cd ${NANO_WORLDDIR}/libexec
- if [ \! -f ld-elf32.so.1 ]; then
- ln -s ld-elf.so.1 ld-elf32.so.1
- fi
-)
-customize_cmd cust_ld32_cfg
-
+#cust_ld32_cfg () (
+# cd ${NANO_WORLDDIR}/libexec
+# if [ \! -f ld-elf32.so.1 ]; then
+# ln -s ld-elf.so.1 ld-elf32.so.1
+# fi
+#)
+#customize_cmd cust_ld32_cfg
+#
#cust_boot_cfg () (
# cd ${NANO_WORLDDIR}
# echo "-S115200 -h" > boot.config
@@ -67,7 +69,7 @@ customize_cmd cust_ld32_cfg
#)
#customize_cmd cust_boot_cfg
-customize_cmd cust_pkgng
+#customize_cmd cust_pkgng
cust_etc_cfg () (
cd ${NANO_WORLDDIR}
diff --git a/tools/tools/ncpus/Makefile b/tools/tools/ncpus/Makefile
index 1b77b68b4eda..a6f740d8c611 100644
--- a/tools/tools/ncpus/Makefile
+++ b/tools/tools/ncpus/Makefile
@@ -1,4 +1,3 @@
-
PROG= ncpus
MAN=
SRCS= ncpus.c acpi.c
diff --git a/tools/tools/net80211/Makefile b/tools/tools/net80211/Makefile
index 216d3bfa2d86..b4b32899cd26 100644
--- a/tools/tools/net80211/Makefile
+++ b/tools/tools/net80211/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= stumbler w00t wesside wlaninject wlanstats wlantxtime wlanwatch wlanwds
.include <bsd.subdir.mk>
diff --git a/tools/tools/net80211/stumbler/Makefile b/tools/tools/net80211/stumbler/Makefile
index ad553e006d2d..b8d5da3340b2 100644
--- a/tools/tools/net80211/stumbler/Makefile
+++ b/tools/tools/net80211/stumbler/Makefile
@@ -1,4 +1,3 @@
-
PROG= stumbler
BINDIR= /usr/local/bin
LIBADD= pcap tinfow ncursesw
diff --git a/tools/tools/net80211/w00t/Makefile b/tools/tools/net80211/w00t/Makefile
index 04a165de9bc5..8cc9184a005a 100644
--- a/tools/tools/net80211/w00t/Makefile
+++ b/tools/tools/net80211/w00t/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= libw00t ap assoc expand prga redir
.include <bsd.subdir.mk>
diff --git a/tools/tools/net80211/w00t/Makefile.inc b/tools/tools/net80211/w00t/Makefile.inc
index d5596cc580bf..fcde408757e6 100644
--- a/tools/tools/net80211/w00t/Makefile.inc
+++ b/tools/tools/net80211/w00t/Makefile.inc
@@ -1,8 +1,7 @@
-
W00T= ../libw00t
# NB: we get crc32 from -lz
DPADD= ${W00T}/libw00t.a
-LDFLAGS= -L${W00T}
+LDFLAGS+= -L${W00T}
LDADD= -lw00t
LIBADD+= crypto z
diff --git a/tools/tools/net80211/w00t/ap/Makefile b/tools/tools/net80211/w00t/ap/Makefile
index 178470c5ca2f..f561227d5d19 100644
--- a/tools/tools/net80211/w00t/ap/Makefile
+++ b/tools/tools/net80211/w00t/ap/Makefile
@@ -1,4 +1,3 @@
-
.include <../Makefile.inc>
PROG= ap
diff --git a/tools/tools/net80211/w00t/assoc/Makefile b/tools/tools/net80211/w00t/assoc/Makefile
index d5ed3ebae4c9..623efd4a8565 100644
--- a/tools/tools/net80211/w00t/assoc/Makefile
+++ b/tools/tools/net80211/w00t/assoc/Makefile
@@ -1,4 +1,3 @@
-
.include <../Makefile.inc>
PROG= assoc
diff --git a/tools/tools/net80211/w00t/expand/Makefile b/tools/tools/net80211/w00t/expand/Makefile
index d413af5fdb2a..3dadccf97b8b 100644
--- a/tools/tools/net80211/w00t/expand/Makefile
+++ b/tools/tools/net80211/w00t/expand/Makefile
@@ -1,4 +1,3 @@
-
.include <../Makefile.inc>
PROG= expand
diff --git a/tools/tools/net80211/w00t/libw00t/Makefile b/tools/tools/net80211/w00t/libw00t/Makefile
index 2146da5a9e33..190cc4fd8741 100644
--- a/tools/tools/net80211/w00t/libw00t/Makefile
+++ b/tools/tools/net80211/w00t/libw00t/Makefile
@@ -1,4 +1,3 @@
-
LIB= w00t
SRCS= w00t.c
INTERNALLIB= true
diff --git a/tools/tools/net80211/w00t/prga/Makefile b/tools/tools/net80211/w00t/prga/Makefile
index 9d4a2395c2dd..a95727443d2d 100644
--- a/tools/tools/net80211/w00t/prga/Makefile
+++ b/tools/tools/net80211/w00t/prga/Makefile
@@ -1,4 +1,3 @@
-
.include <../Makefile.inc>
PROG= prga
diff --git a/tools/tools/net80211/w00t/redir/Makefile b/tools/tools/net80211/w00t/redir/Makefile
index 0bc0729de5a4..d9a22f0110ed 100644
--- a/tools/tools/net80211/w00t/redir/Makefile
+++ b/tools/tools/net80211/w00t/redir/Makefile
@@ -1,4 +1,3 @@
-
.include <../Makefile.inc>
PROG= redir
diff --git a/tools/tools/net80211/wesside/Makefile b/tools/tools/net80211/wesside/Makefile
index 8badc634353a..563e8b0f1c59 100644
--- a/tools/tools/net80211/wesside/Makefile
+++ b/tools/tools/net80211/wesside/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= dics udps wesside
.include <bsd.subdir.mk>
diff --git a/tools/tools/net80211/wesside/dics/Makefile b/tools/tools/net80211/wesside/dics/Makefile
index ec94e0dc9889..f5411a28d9ef 100644
--- a/tools/tools/net80211/wesside/dics/Makefile
+++ b/tools/tools/net80211/wesside/dics/Makefile
@@ -1,4 +1,3 @@
-
PROG= dics
BINDIR= /usr/local/bin
LIBADD= z
diff --git a/tools/tools/net80211/wesside/udps/Makefile b/tools/tools/net80211/wesside/udps/Makefile
index 40177a533c2e..34b045cb52c3 100644
--- a/tools/tools/net80211/wesside/udps/Makefile
+++ b/tools/tools/net80211/wesside/udps/Makefile
@@ -1,4 +1,3 @@
-
PROG= udps
BINDIR= /usr/local/bin
LIBADD= z
diff --git a/tools/tools/net80211/wesside/wesside/Makefile b/tools/tools/net80211/wesside/wesside/Makefile
index 0c2bb0f42b23..50a599e848f6 100644
--- a/tools/tools/net80211/wesside/wesside/Makefile
+++ b/tools/tools/net80211/wesside/wesside/Makefile
@@ -1,4 +1,3 @@
-
PROG= wesside
BINDIR= /usr/local/bin
LIBADD= z
diff --git a/tools/tools/net80211/wlaninject/Makefile b/tools/tools/net80211/wlaninject/Makefile
index c072ef10e3b8..5923248ad2eb 100644
--- a/tools/tools/net80211/wlaninject/Makefile
+++ b/tools/tools/net80211/wlaninject/Makefile
@@ -1,4 +1,3 @@
-
PROG= wlaninject
BINDIR= /usr/local/bin
CFLAGS=-g
diff --git a/tools/tools/net80211/wlanstats/Makefile b/tools/tools/net80211/wlanstats/Makefile
deleted file mode 100644
index dec8e84e1255..000000000000
--- a/tools/tools/net80211/wlanstats/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-
-.include <bsd.compiler.mk>
-
-PROG= wlanstats
-BINDIR= /usr/local/bin
-MAN=
-LIBADD= bsdstat
-CFLAGS+=-I${.CURDIR}/../../../../lib/libbsdstat/
-
-SRCS= wlanstats.c main.c
-
-CFLAGS.clang+= -fbracket-depth=512 -Wno-cast-align
-
-.include <bsd.prog.mk>
diff --git a/tools/tools/net80211/wlanstats/main.c b/tools/tools/net80211/wlanstats/main.c
deleted file mode 100644
index ac100a70622e..000000000000
--- a/tools/tools/net80211/wlanstats/main.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/*-
- * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/*
- * wlanstats [-i interface]
- * (default interface is wlan0).
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <net/ethernet.h>
-#include <net80211/_ieee80211.h>
-
-#include <err.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <strings.h>
-#include <unistd.h>
-
-#include "wlanstats.h"
-
-static struct {
- const char *tag;
- const char *fmt;
-} tags[] = {
- { "default",
- "input,rx_mgmt,output,rx_badkeyid,scan_active,scan_bg,bmiss,rssi,noise,rate"
- },
- { "ampdu",
- "input,output,ampdu_reorder,ampdu_oor,rx_dup,ampdu_flush,ampdu_move,"
- "ampdu_drop,ampdu_bar,ampdu_baroow,ampdu_barmove,ampdu_bartx,"
- "ampdu_bartxfail,ampdu_bartxretry,rssi,rate"
- },
- {
- "amsdu",
- "input,output,amsdu_tooshort,amsdu_split,amsdu_decap,amsdu_encap,rx_amsdu_more,rx_amsdu_more_end,rssi,rate"
- },
-};
-
-static const char *
-getfmt(const char *tag)
-{
- unsigned int i;
- for (i = 0; i < nitems(tags); i++)
- if (strcasecmp(tags[i].tag, tag) == 0)
- return tags[i].fmt;
- return tag;
-}
-
-static int signalled;
-
-static void
-catchalarm(int signo __unused)
-{
- signalled = 1;
-}
-
-#if 0
-static void
-print_sta_stats(FILE *fd, const u_int8_t macaddr[IEEE80211_ADDR_LEN])
-{
-#define STAT(x,fmt) \
- if (ns->ns_##x) { fprintf(fd, "%s" #x " " fmt, sep, ns->ns_##x); sep = " "; }
- struct ieee80211req ireq;
- struct ieee80211req_sta_stats stats;
- const struct ieee80211_nodestats *ns = &stats.is_stats;
- const char *sep;
-
- (void) memset(&ireq, 0, sizeof(ireq));
- (void) strncpy(ireq.i_name, ifr.ifr_name, sizeof(ireq.i_name));
- ireq.i_type = IEEE80211_IOC_STA_STATS;
- ireq.i_data = &stats;
- ireq.i_len = sizeof(stats);
- memcpy(stats.is_u.macaddr, macaddr, IEEE80211_ADDR_LEN);
- if (ioctl(s, SIOCG80211, &ireq) < 0)
- err(1, "unable to get station stats for %s",
- ether_ntoa((const struct ether_addr*) macaddr));
-
- fprintf(fd, "%s:\n", ether_ntoa((const struct ether_addr*) macaddr));
-
- sep = "\t";
- STAT(rx_data, "%u");
- STAT(rx_mgmt, "%u");
- STAT(rx_ctrl, "%u");
- STAT(rx_beacons, "%u");
- STAT(rx_proberesp, "%u");
- STAT(rx_ucast, "%u");
- STAT(rx_mcast, "%u");
- STAT(rx_bytes, "%llu");
- STAT(rx_dup, "%u");
- STAT(rx_noprivacy, "%u");
- STAT(rx_wepfail, "%u");
- STAT(rx_demicfail, "%u");
- STAT(rx_decap, "%u");
- STAT(rx_defrag, "%u");
- STAT(rx_disassoc, "%u");
- STAT(rx_deauth, "%u");
- STAT(rx_decryptcrc, "%u");
- STAT(rx_unauth, "%u");
- STAT(rx_unencrypted, "%u");
- fprintf(fd, "\n");
-
- sep = "\t";
- STAT(tx_data, "%u");
- STAT(tx_mgmt, "%u");
- STAT(tx_probereq, "%u");
- STAT(tx_ucast, "%u");
- STAT(tx_mcast, "%u");
- STAT(tx_bytes, "%llu");
- STAT(tx_novlantag, "%u");
- STAT(tx_vlanmismatch, "%u");
- fprintf(fd, "\n");
-
- sep = "\t";
- STAT(tx_assoc, "%u");
- STAT(tx_assoc_fail, "%u");
- STAT(tx_auth, "%u");
- STAT(tx_auth_fail, "%u");
- STAT(tx_deauth, "%u");
- STAT(tx_deauth_code, "%llu");
- STAT(tx_disassoc, "%u");
- STAT(tx_disassoc_code, "%u");
- fprintf(fd, "\n");
-
-#undef STAT
-}
-#endif
-
-static void
-usage(void)
-{
-
- printf("wlanstats: [-ah] [-i ifname] [-l] [-m station MAC address] [-o fmt] [interval]\n");
-}
-
-int
-main(int argc, char *argv[])
-{
- struct wlanstatfoo *wf;
- struct ether_addr *ea;
- const uint8_t *mac = NULL;
- const char *ifname;
-#if 0
- int allnodes = 0;
-#endif
- int c, mode;
-
- ifname = getenv("WLAN");
- if (ifname == NULL)
- ifname = "wlan0";
- wf = wlanstats_new(ifname, getfmt("default"));
-#if 0
- while ((c = getopt(argc, argv, "ahi:lm:o:")) != -1) {
-#else
- while ((c = getopt(argc, argv, "hi:lm:o:")) != -1) {
-#endif
- switch (c) {
-#if 0
- case 'a':
- allnodes++;
- break;
-#endif
- case 'h':
- usage();
- exit(0);
- case 'i':
- wf->setifname(wf, optarg);
- break;
- case 'l':
- wf->print_fields(wf, stdout);
- return 0;
- case 'm':
- ea = ether_aton(optarg);
- if (!ea)
- errx(1, "%s: invalid ethernet address", optarg);
- mac = ea->octet;
- break;
- case 'o':
- wf->setfmt(wf, getfmt(optarg));
- break;
- default:
- usage();
- exit(1);
- /*NOTREACHED*/
- }
- }
- argc -= optind;
- argv += optind;
-
- mode = wf->getopmode(wf);
- wf->setstamac(wf, mac);
-
- if (argc > 0) {
- u_long interval = strtoul(argv[0], NULL, 0);
- int line, omask;
-
- if (interval < 1)
- interval = 1;
- signal(SIGALRM, catchalarm);
- signalled = 0;
- alarm(interval);
- banner:
- wf->print_header(wf, stdout);
- line = 0;
- loop:
- if (line != 0) {
- wf->collect_cur(wf);
- wf->print_current(wf, stdout);
- wf->update_tot(wf);
- } else {
- wf->collect_tot(wf);
- wf->print_total(wf, stdout);
- }
- fflush(stdout);
- omask = sigblock(sigmask(SIGALRM));
- if (!signalled)
- sigpause(0);
- sigsetmask(omask);
- signalled = 0;
- alarm(interval);
- line++;
- /* refresh every display in case sta roams */
- if (mac == NULL && mode == IEEE80211_M_STA)
- wf->setstamac(wf, NULL);
- if (line == 21) /* XXX tty line count */
- goto banner;
- else
- goto loop;
- /*NOTREACHED*/
-#if 0
- } else if (allnodes) {
- struct ieee80211req_sta_info *si;
- union {
- struct ieee80211req_sta_req req;
- uint8_t buf[24*1024];
- } u;
- uint8_t *cp;
- struct ieee80211req ireq;
- int len;
-
- /*
- * Retrieve station/neighbor table and print stats for each.
- */
- (void) memset(&ireq, 0, sizeof(ireq));
- (void) strncpy(ireq.i_name, ifr.ifr_name, sizeof(ireq.i_name));
- ireq.i_type = IEEE80211_IOC_STA_INFO;
- memset(&u.req.macaddr, 0xff, sizeof(u.req.macaddr));
- ireq.i_data = &u;
- ireq.i_len = sizeof(u);
- if (ioctl(s, SIOCG80211, &ireq) < 0)
- err(1, "unable to get station information");
- len = ireq.i_len;
- if (len >= sizeof(struct ieee80211req_sta_info)) {
- cp = u.req.info;
- do {
- si = (struct ieee80211req_sta_info *) cp;
- if (si->isi_len < sizeof(*si))
- break;
- print_sta_stats(stdout, si->isi_macaddr);
- cp += si->isi_len, len -= si->isi_len;
- } while (len >= sizeof(struct ieee80211req_sta_info));
- }
-#endif
- } else {
- wf->collect_tot(wf);
- wf->print_verbose(wf, stdout);
- }
- return 0;
-}
diff --git a/tools/tools/net80211/wlanstats/wlanstats.c b/tools/tools/net80211/wlanstats/wlanstats.c
deleted file mode 100644
index 74b1e7ffc989..000000000000
--- a/tools/tools/net80211/wlanstats/wlanstats.c
+++ /dev/null
@@ -1,1040 +0,0 @@
-/*-
- * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-/*
- * net80211 statistics class.
- */
-
-#include <sys/param.h>
-#include <sys/file.h>
-#include <sys/sockio.h>
-#include <sys/socket.h>
-
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <net/if_media.h>
-#include <net/if_var.h>
-#include <net/ethernet.h>
-
-#include <err.h>
-#include <ifaddrs.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "../../../../sys/net80211/ieee80211_ioctl.h"
-
-#include "wlanstats.h"
-
-#ifndef IEEE80211_ADDR_COPY
-#define IEEE80211_ADDR_COPY(dst, src) memcpy(dst, src, IEEE80211_ADDR_LEN)
-#define IEEE80211_ADDR_EQ(a1,a2) (memcmp(a1,a2,IEEE80211_ADDR_LEN) == 0)
-#endif
-
-#define AFTER(prev) ((prev)+1)
-
-static const struct fmt wlanstats[] = {
-#define S_RX_BADVERSION 0
- { 5, "rx_badversion", "bvers", "rx frame with bad version" },
-#define S_RX_TOOSHORT AFTER(S_RX_BADVERSION)
- { 5, "rx_tooshort", "2short", "rx frame too short" },
-#define S_RX_WRONGBSS AFTER(S_RX_TOOSHORT)
- { 5, "rx_wrongbss", "wrbss", "rx from wrong bssid" },
-#define S_RX_DUP AFTER(S_RX_WRONGBSS)
- { 5, "rx_dup", "rxdup", "rx discard 'cuz dup" },
-#define S_RX_WRONGDIR AFTER(S_RX_DUP)
- { 5, "rx_wrongdir", "wrdir", "rx w/ wrong direction" },
-#define S_RX_MCASTECHO AFTER(S_RX_WRONGDIR)
- { 5, "rx_mcastecho", "mecho", "rx discard 'cuz mcast echo" },
-#define S_RX_NOTASSOC AFTER(S_RX_MCASTECHO)
- { 6, "rx_notassoc", "!assoc", "rx discard 'cuz sta !assoc" },
-#define S_RX_NOPRIVACY AFTER(S_RX_NOTASSOC)
- { 6, "rx_noprivacy", "nopriv", "rx w/ wep but privacy off" },
-#define S_RX_UNENCRYPTED AFTER(S_RX_NOPRIVACY)
- { 6, "rx_unencrypted", "unencr", "rx w/o wep and privacy on" },
-#define S_RX_WEPFAIL AFTER(S_RX_UNENCRYPTED)
- { 7, "rx_wepfail", "wepfail", "rx wep processing failed" },
-#define S_RX_DECAP AFTER(S_RX_WEPFAIL)
- { 5, "rx_decap", "decap", "rx decapsulation failed" },
-#define S_RX_MGTDISCARD AFTER(S_RX_DECAP)
- { 8, "rx_mgtdiscard", "mgtdiscard", "rx discard mgt frames" },
-#define S_RX_CTL AFTER(S_RX_MGTDISCARD)
- { 5, "rx_ctl", "ctl", "rx ctrl frames" },
-#define S_RX_BEACON AFTER(S_RX_CTL)
- { 6, "rx_beacon", "beacon", "rx beacon frames" },
-#define S_RX_RSTOOBIG AFTER(S_RX_BEACON)
- { 6, "rx_rstoobig", "rs2big", "rx rate set truncated" },
-#define S_RX_ELEM_MISSING AFTER(S_RX_RSTOOBIG)
- { 6, "rx_elem_missing","iemiss", "rx required element missing" },
-#define S_RX_ELEM_TOOBIG AFTER(S_RX_ELEM_MISSING)
- { 6, "rx_elem_toobig", "ie2big", "rx element too big" },
-#define S_RX_ELEM_TOOSMALL AFTER(S_RX_ELEM_TOOBIG)
- { 7, "rx_elem_toosmall","ie2small","rx element too small" },
-#define S_RX_ELEM_UNKNOWN AFTER(S_RX_ELEM_TOOSMALL)
- { 5, "rx_elem_unknown","ieunk", "rx element unknown" },
-#define S_RX_BADCHAN AFTER(S_RX_ELEM_UNKNOWN)
- { 6, "rx_badchan", "badchan", "rx frame w/ invalid chan" },
-#define S_RX_CHANMISMATCH AFTER(S_RX_BADCHAN)
- { 5, "rx_chanmismatch","chanmismatch", "rx frame chan mismatch" },
-#define S_RX_NODEALLOC AFTER(S_RX_CHANMISMATCH)
- { 5, "rx_nodealloc", "nodealloc", "nodes allocated (rx)" },
-#define S_RX_SSIDMISMATCH AFTER(S_RX_NODEALLOC)
- { 5, "rx_ssidmismatch","ssidmismatch", "rx frame ssid mismatch" },
-#define S_RX_AUTH_UNSUPPORTED AFTER(S_RX_SSIDMISMATCH)
- { 5, "rx_auth_unsupported","auth_unsupported",
- "rx w/ unsupported auth alg" },
-#define S_RX_AUTH_FAIL AFTER(S_RX_AUTH_UNSUPPORTED)
- { 5, "rx_auth_fail", "auth_fail", "rx sta auth failure" },
-#define S_RX_AUTH_FAIL_CODE AFTER(S_RX_AUTH_FAIL)
- { 5, "rx_auth_fail_code","auth_fail_code",
- "last rx auth failure reason" },
-#define S_RX_AUTH_COUNTERMEASURES AFTER(S_RX_AUTH_FAIL_CODE)
- { 5, "rx_auth_countermeasures", "auth_countermeasures",
- "rx sta auth failure 'cuz of TKIP countermeasures" },
-#define S_RX_ASSOC_BSS AFTER(S_RX_AUTH_COUNTERMEASURES)
- { 5, "rx_assoc_bss", "assoc_bss", "rx assoc from wrong bssid" },
-#define S_RX_ASSOC_NOTAUTH AFTER(S_RX_ASSOC_BSS)
- { 5, "rx_assoc_notauth","assoc_notauth", "rx assoc w/o auth" },
-#define S_RX_ASSOC_CAPMISMATCH AFTER(S_RX_ASSOC_NOTAUTH)
- { 5, "rx_assoc_capmismatch","assoc_capmismatch",
- "rx assoc w/ cap mismatch" },
-#define S_RX_ASSOC_NORATE AFTER(S_RX_ASSOC_CAPMISMATCH)
- { 5, "rx_assoc_norate","assoc_norate", "rx assoc w/ no rate match" },
-#define S_RX_ASSOC_BADWPAIE AFTER(S_RX_ASSOC_NORATE)
- { 5, "rx_assoc_badwpaie","assoc_badwpaie",
- "rx assoc w/ bad WPA IE" },
-#define S_RX_DEAUTH AFTER(S_RX_ASSOC_BADWPAIE)
- { 5, "rx_deauth", "deauth", "rx deauthentication" },
-#define S_RX_DEAUTH_CODE AFTER(S_RX_DEAUTH)
- { 5, "rx_deauth_code","deauth_code", "last rx deauth reason" },
-#define S_RX_DISASSOC AFTER(S_RX_DEAUTH_CODE)
- { 5, "rx_disassoc", "disassoc", "rx disassociation" },
-#define S_RX_DISASSOC_CODE AFTER(S_RX_DISASSOC)
- { 5, "rx_disassoc_code","disassoc_code",
- "last rx disassoc reason" },
-#define S_BMISS AFTER(S_RX_DISASSOC_CODE)
- { 5, "bmiss", "bmiss", "beacon miss events handled" },
-#define S_RX_BADSUBTYPE AFTER(S_BMISS)
- { 5, "rx_badsubtype", "badsubtype", "rx frame w/ unknown subtype" },
-#define S_RX_NOBUF AFTER(S_RX_BADSUBTYPE)
- { 5, "rx_nobuf", "nobuf", "rx failed for lack of mbuf" },
-#define S_RX_DECRYPTCRC AFTER(S_RX_NOBUF)
- { 5, "rx_decryptcrc", "decryptcrc", "rx decrypt failed on crc" },
-#define S_RX_AHDEMO_MGT AFTER(S_RX_DECRYPTCRC)
- { 5, "rx_ahdemo_mgt", "ahdemo_mgt",
- "rx discard mgmt frame received in ahdoc demo mode" },
-#define S_RX_BAD_AUTH AFTER(S_RX_AHDEMO_MGT)
- { 5, "rx_bad_auth", "bad_auth", "rx bad authentication request" },
-#define S_RX_UNAUTH AFTER(S_RX_BAD_AUTH)
- { 5, "rx_unauth", "unauth",
- "rx discard 'cuz port unauthorized" },
-#define S_RX_BADKEYID AFTER(S_RX_UNAUTH)
- { 5, "rx_badkeyid", "rxkid", "rx w/ incorrect keyid" },
-#define S_RX_CCMPREPLAY AFTER(S_RX_BADKEYID)
- { 5, "rx_ccmpreplay", "ccmpreplay", "rx seq# violation (CCMP)" },
-#define S_RX_CCMPFORMAT AFTER(S_RX_CCMPREPLAY)
- { 5, "rx_ccmpformat", "ccmpformat", "rx format bad (CCMP)" },
-#define S_RX_CCMPMIC AFTER(S_RX_CCMPFORMAT)
- { 5, "rx_ccmpmic", "ccmpmic", "rx MIC check failed (CCMP)" },
-#define S_RX_TKIPREPLAY AFTER(S_RX_CCMPMIC)
- { 5, "rx_tkipreplay", "tkipreplay", "rx seq# violation (TKIP)" },
-#define S_RX_TKIPFORMAT AFTER(S_RX_TKIPREPLAY)
- { 5, "rx_tkipformat", "tkipformat", "rx format bad (TKIP)" },
-#define S_RX_TKIPMIC AFTER(S_RX_TKIPFORMAT)
- { 5, "rx_tkipmic", "tkipmic", "rx MIC check failed (TKIP)" },
-#define S_RX_TKIPICV AFTER(S_RX_TKIPMIC)
- { 5, "rx_tkipicv", "tkipicv", "rx ICV check failed (TKIP)" },
-#define S_RX_BADCIPHER AFTER(S_RX_TKIPICV)
- { 5, "rx_badcipher", "badcipher", "rx failed 'cuz bad cipher/key type" },
-#define S_RX_NOCIPHERCTX AFTER(S_RX_BADCIPHER)
- { 5, "rx_nocipherctx", "nocipherctx", "rx failed 'cuz key/cipher ctx not setup" },
-#define S_RX_ACL AFTER(S_RX_NOCIPHERCTX)
- { 5, "rx_acl", "acl", "rx discard 'cuz acl policy" },
-#define S_TX_NOBUF AFTER(S_RX_ACL)
- { 5, "tx_nobuf", "nobuf", "tx failed for lack of mbuf" },
-#define S_TX_NONODE AFTER(S_TX_NOBUF)
- { 5, "tx_nonode", "nonode", "tx failed for no node" },
-#define S_TX_UNKNOWNMGT AFTER(S_TX_NONODE)
- { 5, "tx_unknownmgt", "unknownmgt", "tx of unknown mgt frame" },
-#define S_TX_BADCIPHER AFTER(S_TX_UNKNOWNMGT)
- { 5, "tx_badcipher", "badcipher", "tx failed 'cuz bad ciper/key type" },
-#define S_TX_NODEFKEY AFTER(S_TX_BADCIPHER)
- { 5, "tx_nodefkey", "nodefkey", "tx failed 'cuz no defkey" },
-#define S_TX_NOHEADROOM AFTER(S_TX_NODEFKEY)
- { 5, "tx_noheadroom", "noheadroom", "tx failed 'cuz no space for crypto hdrs" },
-#define S_TX_FRAGFRAMES AFTER(S_TX_NOHEADROOM)
- { 5, "tx_fragframes", "fragframes", "tx frames fragmented" },
-#define S_TX_FRAGS AFTER(S_TX_FRAGFRAMES)
- { 5, "tx_frags", "frags", "tx frags generated" },
-#define S_SCAN_ACTIVE AFTER(S_TX_FRAGS)
- { 5, "scan_active", "ascan", "active scans started" },
-#define S_SCAN_PASSIVE AFTER(S_SCAN_ACTIVE)
- { 5, "scan_passive", "pscan", "passive scans started" },
-#define S_SCAN_BG AFTER(S_SCAN_PASSIVE)
- { 5, "scan_bg", "bgscn", "background scans started" },
-#define S_NODE_TIMEOUT AFTER(S_SCAN_BG)
- { 5, "node_timeout", "node_timeout", "nodes timed out for inactivity" },
-#define S_CRYPTO_NOMEM AFTER(S_NODE_TIMEOUT)
- { 5, "crypto_nomem", "crypto_nomem", "cipher context malloc failed" },
-#define S_CRYPTO_TKIP AFTER(S_CRYPTO_NOMEM)
- { 5, "crypto_tkip", "crypto_tkip", "tkip crypto done in s/w" },
-#define S_CRYPTO_TKIPENMIC AFTER(S_CRYPTO_TKIP)
- { 5, "crypto_tkipenmic","crypto_tkipenmic", "tkip tx MIC done in s/w" },
-#define S_CRYPTO_TKIPDEMIC AFTER(S_CRYPTO_TKIPENMIC)
- { 5, "crypto_tkipdemic","crypto_tkipdemic", "tkip rx MIC done in s/w" },
-#define S_CRYPTO_TKIPCM AFTER(S_CRYPTO_TKIPDEMIC)
- { 5, "crypto_tkipcm", "crypto_tkipcm", "tkip dropped frames 'cuz of countermeasures" },
-#define S_CRYPTO_CCMP AFTER(S_CRYPTO_TKIPCM)
- { 5, "crypto_ccmp", "crypto_ccmp", "ccmp crypto done in s/w" },
-#define S_CRYPTO_WEP AFTER(S_CRYPTO_CCMP)
- { 5, "crypto_wep", "crypto_wep", "wep crypto done in s/w" },
-#define S_CRYPTO_SETKEY_CIPHER AFTER(S_CRYPTO_WEP)
- { 5, "crypto_setkey_cipher", "crypto_setkey_cipher","setkey failed 'cuz cipher rejected data" },
-#define S_CRYPTO_SETKEY_NOKEY AFTER(S_CRYPTO_SETKEY_CIPHER)
- { 5, "crypto_setkey_nokey", "crypto_setkey_nokey","setkey failed 'cuz no key index" },
-#define S_CRYPTO_DELKEY AFTER(S_CRYPTO_SETKEY_NOKEY)
- { 5, "crypto_delkey", "crypto_delkey", "driver key delete failed" },
-#define S_CRYPTO_BADCIPHER AFTER(S_CRYPTO_DELKEY)
- { 5, "crypto_badcipher","crypto_badcipher", "setkey failed 'cuz unknown cipher" },
-#define S_CRYPTO_NOCIPHER AFTER(S_CRYPTO_BADCIPHER)
- { 5, "crypto_nocipher","crypto_nocipher", "setkey failed 'cuz cipher module unavailable" },
-#define S_CRYPTO_ATTACHFAIL AFTER(S_CRYPTO_NOCIPHER)
- { 5, "crypto_attachfail","crypto_attachfail", "setkey failed 'cuz cipher attach failed" },
-#define S_CRYPTO_SWFALLBACK AFTER(S_CRYPTO_ATTACHFAIL)
- { 5, "crypto_swfallback","crypto_swfallback", "crypto fell back to s/w implementation" },
-#define S_CRYPTO_KEYFAIL AFTER(S_CRYPTO_SWFALLBACK)
- { 5, "crypto_keyfail", "crypto_keyfail", "setkey failed 'cuz driver key alloc failed" },
-#define S_CRYPTO_ENMICFAIL AFTER(S_CRYPTO_KEYFAIL)
- { 5, "crypto_enmicfail","crypto_enmicfail", "enmic failed (may be mbuf exhaustion)" },
-#define S_IBSS_CAPMISMATCH AFTER(S_CRYPTO_ENMICFAIL)
- { 5, "ibss_capmismatch","ibss_capmismatch", "ibss merge faied 'cuz capabilities mismatch" },
-#define S_IBSS_NORATE AFTER(S_IBSS_CAPMISMATCH)
- { 5, "ibss_norate", "ibss_norate", "ibss merge faied 'cuz rate set mismatch" },
-#define S_PS_UNASSOC AFTER(S_IBSS_NORATE)
- { 5, "ps_unassoc", "ps_unassoc", "ps-poll received for unassociated station" },
-#define S_PS_BADAID AFTER(S_PS_UNASSOC)
- { 5, "ps_badaid", "ps_badaid", "ps-poll received with invalid association id" },
-#define S_PS_QEMPTY AFTER(S_PS_BADAID)
- { 5, "ps_qempty", "ps_qempty", "ps-poll received with nothing to send" },
-#define S_FF_BADHDR AFTER(S_PS_QEMPTY)
- { 5, "ff_badhdr", "ff_badhdr", "fast frame rx'd w/ bad hdr" },
-#define S_FF_TOOSHORT AFTER(S_FF_BADHDR)
- { 5, "ff_tooshort", "ff_tooshort", "fast frame rx decap error" },
-#define S_FF_SPLIT AFTER(S_FF_TOOSHORT)
- { 5, "ff_split", "ff_split", "fast frame rx split error" },
-#define S_FF_DECAP AFTER(S_FF_SPLIT)
- { 5, "ff_decap", "ff_decap", "fast frames decap'd" },
-#define S_FF_ENCAP AFTER(S_FF_DECAP)
- { 5, "ff_encap", "ff_encap", "fast frames encap'd for tx" },
-#define S_FF_ENCAPFAIL AFTER(S_FF_ENCAP)
- { 5, "ff_encapfail", "ff_encapfail", "fast frames encap failed" },
-#define S_RX_BADBINTVAL AFTER(S_FF_ENCAPFAIL)
- { 5, "rx_badbintval", "rx_badbintval","rx frame with bogus beacon interval" },
-#define S_RX_MGMT AFTER(S_RX_BADBINTVAL)
- { 8, "rx_mgmt", "mgmt", "rx management frames" },
-#define S_RX_DEMICFAIL AFTER(S_RX_MGMT)
- { 5, "rx_demicfail", "rx_demicfail", "rx demic failed" },
-#define S_RX_DEFRAG AFTER(S_RX_DEMICFAIL)
- { 5, "rx_defrag", "rx_defrag", "rx defragmentation failed" },
-#define S_RX_ACTION AFTER(S_RX_DEFRAG)
- { 5, "rx_action", "rx_action", "rx action frames" },
-#define S_AMSDU_TOOSHORT AFTER(S_RX_ACTION)
- { 8, "amsdu_tooshort", "tooshort","A-MSDU rx decap error" },
-#define S_AMSDU_SPLIT AFTER(S_AMSDU_TOOSHORT)
- { 8, "amsdu_split", "split", "A-MSDU rx failed on frame split" },
-#define S_AMSDU_DECAP AFTER(S_AMSDU_SPLIT)
- { 8, "amsdu_decap", "decap", "A-MSDU frames received" },
-#define S_AMSDU_ENCAP AFTER(S_AMSDU_DECAP)
- { 8, "amsdu_encap", "encap", "A-MSDU frames transmitted" },
-#define S_AMSDU_RX_MORE AFTER(S_AMSDU_ENCAP)
- { 13, "rx_amsdu_more", "rx_amsdu_more", "A-MSDU HW intermediary decap'ed received" },
-#define S_AMSDU_RX_MORE_END AFTER(S_AMSDU_RX_MORE)
- { 17, "rx_amsdu_more_end", "rx_amsdu_more_end", "A-MSDU HW end decap'ed received" },
-#define S_AMPDU_REORDER AFTER(S_AMSDU_RX_MORE_END)
- { 8, "ampdu_reorder", "reorder","A-MPDU frames held in reorder q" },
-#define S_AMPDU_FLUSH AFTER(S_AMPDU_REORDER)
- { 8, "ampdu_flush", "flush", "A-MPDU frames sent up from reorder q" },
-#define S_AMPDU_BARBAD AFTER(S_AMPDU_FLUSH)
- { 6, "ampdu_barbad", "barbad", "A-MPDU BAR rx before ADDBA exchange (or disabled with net.link.ieee80211)" },
-#define S_AMPDU_BAROOW AFTER(S_AMPDU_BARBAD)
- { 6, "ampdu_baroow", "baroow", "A-MPDU BAR rx out of BA window" },
-#define S_AMPDU_BARMOVE AFTER(S_AMPDU_BAROOW)
- { 8, "ampdu_barmove", "barmove","A-MPDU BAR rx moved BA window" },
-#define S_AMPDU_BAR AFTER(S_AMPDU_BARMOVE)
- { 8, "ampdu_bar", "rxbar", "A-MPDU BAR rx successful" },
-#define S_AMPDU_MOVE AFTER(S_AMPDU_BAR)
- { 5, "ampdu_move", "move", "A-MPDU frame moved BA window" },
-#define S_AMPDU_OOR AFTER(S_AMPDU_MOVE)
- { 8, "ampdu_oor", "oorx", "A-MPDU frames rx out-of-order" },
-#define S_AMPDU_COPY AFTER(S_AMPDU_OOR)
- { 8, "ampdu_copy", "copy", "A-MPDU rx window slots copied" },
-#define S_AMPDU_DROP AFTER(S_AMPDU_COPY)
- { 5, "ampdu_drop", "drop", "A-MPDU frames discarded for out of range seqno" },
-#define S_AMPDU_AGE AFTER(S_AMPDU_DROP)
- { 5, "ampdu_age", "age", "A-MPDU frames sent up due to old age" },
-#define S_AMPDU_STOP AFTER(S_AMPDU_AGE)
- { 5, "ampdu_stop", "stop", "A-MPDU streams stopped" },
-#define S_AMPDU_STOP_FAILED AFTER(S_AMPDU_STOP)
- { 5, "ampdu_stop_failed","!stop", "A-MPDU stop requests failed 'cuz stream not running" },
-#define S_ADDBA_REJECT AFTER(S_AMPDU_STOP_FAILED)
- { 5, "addba_reject", "reject", "ADDBA requests rejected 'cuz A-MPDU rx is disabled" },
-#define S_ADDBA_NOREQUEST AFTER(S_ADDBA_REJECT)
- { 5, "addba_norequest","norequest","ADDBA response frames discarded because no ADDBA request was pending" },
-#define S_ADDBA_BADTOKEN AFTER(S_ADDBA_NOREQUEST)
- { 5, "addba_badtoken", "badtoken","ADDBA response frames discarded 'cuz rx'd dialog token is wrong" },
-#define S_TX_BADSTATE AFTER(S_ADDBA_BADTOKEN)
- { 4, "tx_badstate", "badstate", "tx failed 'cuz vap not in RUN state" },
-#define S_TX_NOTASSOC AFTER(S_TX_BADSTATE)
- { 4, "tx_notassoc", "notassoc", "tx failed 'cuz dest sta not associated" },
-#define S_TX_CLASSIFY AFTER(S_TX_NOTASSOC)
- { 4, "tx_classify", "classify", "tx packet classification failed" },
-#define S_DWDS_MCAST AFTER(S_TX_CLASSIFY)
- { 8, "dwds_mcast", "dwds_mcast", "mcast frame transmitted on dwds vap discarded" },
-#define S_DWDS_QDROP AFTER(S_DWDS_MCAST)
- { 8, "dwds_qdrop", "dwds_qdrop", "4-address frame discarded because dwds pending queue is full" },
-#define S_HT_ASSOC_NOHTCAP AFTER(S_DWDS_QDROP)
- { 4, "ht_nohtcap", "ht_nohtcap", "non-HT station rejected in HT-only BSS" },
-#define S_HT_ASSOC_DOWNGRADE AFTER(S_HT_ASSOC_NOHTCAP)
- { 4, "ht_downgrade", "ht_downgrade", "HT station downgraded to legacy operation" },
-#define S_HT_ASSOC_NORATE AFTER(S_HT_ASSOC_DOWNGRADE)
- { 4, "ht_norate", "ht_norate", "HT station rejected because of HT rate set" },
-#define S_MESH_WRONGMESH AFTER(S_HT_ASSOC_NORATE)
- { 4, "mesh_wrong", "mesh_wrong", "frame discarded because sender not a mesh sta" },
-#define S_MESH_NOLINK AFTER(S_MESH_WRONGMESH)
- { 4, "mesh_nolink", "mesh_nolink", "frame discarded because link not established" },
-#define S_MESH_FWD_TTL AFTER(S_MESH_NOLINK)
- { 4, "mesh_fwd_ttl", "mesh_fwd_ttl", "frame not forwarded because TTL zero" },
-#define S_MESH_FWD_NOBUF AFTER(S_MESH_FWD_TTL)
- { 4, "mesh_fwd_nobuf", "mesh_fwd_nobuf", "frame not forwarded because mbuf could not be allocated" },
-#define S_MESH_FWD_TOOSHORT AFTER(S_MESH_FWD_NOBUF)
- { 4, "mesh_fwd_tooshort", "mesh_fwd_tooshort", "frame not forwarded because too short to have 802.11 header" },
-#define S_MESH_FWD_DISABLED AFTER(S_MESH_FWD_TOOSHORT)
- { 4, "mesh_fwd_disabled", "mesh_fwd_disabled", "frame not forwarded because administratively disabled" },
-#define S_MESH_FWD_NOPATH AFTER(S_MESH_FWD_DISABLED)
- { 4, "mesh_fwd_nopath", "mesh_fwd_nopath", "frame not forwarded because no path found to destination" },
-#define S_HWMP_WRONGSEQ AFTER(S_MESH_FWD_NOPATH)
- { 4, "hwmp_wrongseq", "hwmp_wrongseq", "frame discarded because mesh sequence number is invalid" },
-#define S_HWMP_ROOTREQS AFTER(S_HWMP_WRONGSEQ)
- { 4, "hwmp_rootreqs", "hwmp_rootreqs", "root PREQ frames sent" },
-#define S_HWMP_ROOTANN AFTER(S_HWMP_ROOTREQS)
- { 4, "hwmp_rootann", "hwmp_rootann", "root RANN frames received" },
-#define S_MESH_BADAE AFTER(S_HWMP_ROOTANN)
- { 4, "mesh_badae", "mesh_badae", "frame discarded for bad AddressExtension (AE)" },
-#define S_MESH_RTADDFAILED AFTER(S_MESH_BADAE)
- { 4, "mesh_rtadd", "mesh_rtadd", "mesh route add failed" },
-#define S_MESH_NOTPROXY AFTER(S_MESH_RTADDFAILED)
- { 8, "mesh_notproxy", "mesh_notproxy","frame discarded because station not acting as a proxy" },
-#define S_RX_BADALIGN AFTER(S_MESH_NOTPROXY)
- { 4, "rx_badalign", "rx_badalign","frame discarded because payload re-alignment failed" },
-#define S_INPUT AFTER(S_RX_BADALIGN)
- { 8, "input", "input", "total data frames received" },
-#define S_RX_UCAST AFTER(S_INPUT)
- { 8, "rx_ucast", "rx_ucast", "unicast data frames received" },
-#define S_RX_MCAST AFTER(S_RX_UCAST)
- { 8, "rx_mcast", "rx_mcast", "multicast data frames received" },
-#define S_OUTPUT AFTER(S_RX_MCAST)
- { 8, "output", "output", "total data frames transmit" },
-#define S_TX_UCAST AFTER(S_OUTPUT)
- { 8, "tx_ucast", "tx_ucast", "unicast data frames sent" },
-#define S_TX_MCAST AFTER(S_TX_UCAST)
- { 8, "tx_mcast", "tx_mcast", "multicast data frames sent" },
-#define S_RATE AFTER(S_TX_MCAST)
- { 7, "rate", "rate", "current transmit rate" },
-#define S_RSSI AFTER(S_RATE)
- { 6, "rssi", "rssi", "current rssi" },
-#define S_NOISE AFTER(S_RSSI)
- { 5, "noise", "noise", "current noise floor (dBm)" },
-#define S_SIGNAL AFTER(S_NOISE)
- { 6, "signal", "sig", "current signal (dBm)" },
-#define S_BEACON_BAD AFTER(S_SIGNAL)
- { 9, "beacon_bad", "beaconbad", "bad beacons received" },
-#define S_AMPDU_BARTX AFTER(S_BEACON_BAD)
- { 5, "ampdu_bartx", "bartx", "BAR frames sent" },
-#define S_AMPDU_BARTX_FAIL AFTER(S_AMPDU_BARTX)
- { 9, "ampdu_bartxfail", "bartx_fail", "BAR frames failed to send" },
-#define S_AMPDU_BARTX_RETRY AFTER(S_AMPDU_BARTX_FAIL)
- { 10, "ampdu_bartxretry", "bartx_retry", "BAR frames retried" },
-};
-
-struct wlanstatfoo_p {
- struct wlanstatfoo base;
- int s;
- int opmode;
- uint8_t mac[IEEE80211_ADDR_LEN];
- struct ifreq ifr;
- struct ieee80211_stats cur;
- struct ieee80211_stats total;
- struct ieee80211req ireq;
- union {
- struct ieee80211req_sta_req info;
- char buf[1024];
- } u_info;
- struct ieee80211req_sta_stats ncur;
- struct ieee80211req_sta_stats ntotal;
-};
-
-static void
-wlan_setifname(struct wlanstatfoo *wf0, const char *ifname)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) wf0;
-
- strncpy(wf->ifr.ifr_name, ifname, sizeof (wf->ifr.ifr_name));
- strncpy(wf->ireq.i_name, ifname, sizeof (wf->ireq.i_name));
-}
-
-static const char *
-wlan_getifname(struct wlanstatfoo *wf0)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) wf0;
-
- return wf->ifr.ifr_name;
-}
-
-static int
-wlan_getopmode(struct wlanstatfoo *wf0)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) wf0;
-
- if (wf->opmode == -1) {
- struct ifmediareq ifmr;
-
- memset(&ifmr, 0, sizeof(ifmr));
- strlcpy(ifmr.ifm_name, wf->ifr.ifr_name, sizeof(ifmr.ifm_name));
- if (ioctl(wf->s, SIOCGIFMEDIA, &ifmr) < 0)
- err(1, "%s (SIOCGIFMEDIA)", wf->ifr.ifr_name);
- if (ifmr.ifm_current & IFM_IEEE80211_ADHOC) {
- if (ifmr.ifm_current & IFM_FLAG0)
- wf->opmode = IEEE80211_M_AHDEMO;
- else
- wf->opmode = IEEE80211_M_IBSS;
- } else if (ifmr.ifm_current & IFM_IEEE80211_HOSTAP)
- wf->opmode = IEEE80211_M_HOSTAP;
- else if (ifmr.ifm_current & IFM_IEEE80211_MONITOR)
- wf->opmode = IEEE80211_M_MONITOR;
- else
- wf->opmode = IEEE80211_M_STA;
- }
- return wf->opmode;
-}
-
-static void
-getlladdr(struct wlanstatfoo_p *wf)
-{
- const struct sockaddr_dl *sdl;
- struct ifaddrs *ifp, *p;
-
- if (getifaddrs(&ifp) != 0)
- err(1, "getifaddrs");
- for (p = ifp; p != NULL; p = p->ifa_next)
- if (strcmp(p->ifa_name, wf->ifr.ifr_name) == 0 &&
- p->ifa_addr->sa_family == AF_LINK)
- break;
- if (p == NULL)
- errx(1, "did not find link layer address for interface %s",
- wf->ifr.ifr_name);
- sdl = (const struct sockaddr_dl *) p->ifa_addr;
- IEEE80211_ADDR_COPY(wf->mac, CLLADDR(sdl));
- freeifaddrs(ifp);
-}
-
-static int
-getbssid(struct wlanstatfoo_p *wf)
-{
- wf->ireq.i_type = IEEE80211_IOC_BSSID;
- wf->ireq.i_data = wf->mac;
- wf->ireq.i_len = IEEE80211_ADDR_LEN;
- return ioctl(wf->s, SIOCG80211, &wf->ireq);
-}
-
-static void
-wlan_setstamac(struct wlanstatfoo *wf0, const uint8_t *mac)
-{
- static const uint8_t zeromac[IEEE80211_ADDR_LEN];
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) wf0;
-
- if (mac == NULL) {
- switch (wlan_getopmode(wf0)) {
- case IEEE80211_M_HOSTAP:
- case IEEE80211_M_MONITOR:
- getlladdr(wf);
- break;
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- /*
- * NB: this may not work in which case the
- * mac must be specified on the command line
- */
- if (getbssid(wf) < 0 ||
- IEEE80211_ADDR_EQ(wf->mac, zeromac))
- getlladdr(wf);
- break;
- case IEEE80211_M_STA:
- if (getbssid(wf) < 0)
- err(1, "%s (IEEE80211_IOC_BSSID)",
- wf->ireq.i_name);
- break;
- }
- } else
- IEEE80211_ADDR_COPY(wf->mac, mac);
-}
-
-/* XXX only fetch what's needed to do reports */
-static void
-wlan_collect(struct wlanstatfoo_p *wf,
- struct ieee80211_stats *stats, struct ieee80211req_sta_stats *nstats)
-{
-
- IEEE80211_ADDR_COPY(wf->u_info.info.is_u.macaddr, wf->mac);
- wf->ireq.i_type = IEEE80211_IOC_STA_INFO;
- wf->ireq.i_data = (caddr_t) &wf->u_info;
- wf->ireq.i_len = sizeof(wf->u_info);
- if (ioctl(wf->s, SIOCG80211, &wf->ireq) < 0) {
- warn("%s:%s (IEEE80211_IOC_STA_INFO)", wf->ireq.i_name,
- ether_ntoa((const struct ether_addr*) wf->mac));
- }
-
- IEEE80211_ADDR_COPY(nstats->is_u.macaddr, wf->mac);
- wf->ireq.i_type = IEEE80211_IOC_STA_STATS;
- wf->ireq.i_data = (caddr_t) nstats;
- wf->ireq.i_len = sizeof(*nstats);
- if (ioctl(wf->s, SIOCG80211, &wf->ireq) < 0)
- warn("%s:%s (IEEE80211_IOC_STA_STATS)", wf->ireq.i_name,
- ether_ntoa((const struct ether_addr*) wf->mac));
-
- wf->ifr.ifr_data = (caddr_t) stats;
- if (ioctl(wf->s, SIOCG80211STATS, &wf->ifr) < 0)
- err(1, "%s (SIOCG80211STATS)", wf->ifr.ifr_name);
-}
-
-static void
-wlan_collect_cur(struct bsdstat *sf)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) sf;
-
- wlan_collect(wf, &wf->cur, &wf->ncur);
-}
-
-static void
-wlan_collect_tot(struct bsdstat *sf)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) sf;
-
- wlan_collect(wf, &wf->total, &wf->ntotal);
-}
-
-static void
-wlan_update_tot(struct bsdstat *sf)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) sf;
-
- wf->total = wf->cur;
- wf->ntotal = wf->ncur;
-}
-
-static void
-setreason(char b[], size_t bs, unsigned int v)
-{
- static const char *reasons[] = {
- [IEEE80211_REASON_UNSPECIFIED] = "unspecified",
- [IEEE80211_REASON_AUTH_EXPIRE] = "auth expire",
- [IEEE80211_REASON_AUTH_LEAVE] = "auth leave",
- [IEEE80211_REASON_ASSOC_EXPIRE] = "assoc expire",
- [IEEE80211_REASON_ASSOC_TOOMANY] = "assoc toomany",
- [IEEE80211_REASON_NOT_AUTHED] = "not authed",
- [IEEE80211_REASON_NOT_ASSOCED] = "not assoced",
- [IEEE80211_REASON_ASSOC_LEAVE] = "assoc leave",
- [IEEE80211_REASON_ASSOC_NOT_AUTHED] = "assoc not authed",
- [IEEE80211_REASON_DISASSOC_PWRCAP_BAD] = "disassoc pwrcap bad",
- [IEEE80211_REASON_DISASSOC_SUPCHAN_BAD] = "disassoc supchan bad",
- [IEEE80211_REASON_IE_INVALID] = "ie invalid",
- [IEEE80211_REASON_MIC_FAILURE] = "mic failure",
- [IEEE80211_REASON_4WAY_HANDSHAKE_TIMEOUT]= "4-way handshake timeout",
- [IEEE80211_REASON_GROUP_KEY_UPDATE_TIMEOUT] = "group key update timeout",
- [IEEE80211_REASON_IE_IN_4WAY_DIFFERS] = "ie in 4-way differs",
- [IEEE80211_REASON_GROUP_CIPHER_INVALID] = "group cipher invalid",
- [IEEE80211_REASON_PAIRWISE_CIPHER_INVALID]= "pairwise cipher invalid",
- [IEEE80211_REASON_AKMP_INVALID] = "akmp invalid",
- [IEEE80211_REASON_UNSUPP_RSN_IE_VERSION]= "unsupported rsn ie version",
- [IEEE80211_REASON_INVALID_RSN_IE_CAP] = "invalid rsn ie cap",
- [IEEE80211_REASON_802_1X_AUTH_FAILED] = "802.1x auth failed",
- [IEEE80211_REASON_CIPHER_SUITE_REJECTED]= "cipher suite rejected",
- };
- if (v < nitems(reasons) && reasons[v] != NULL)
- snprintf(b, bs, "%s (%u)", reasons[v], v);
- else
- snprintf(b, bs, "%u", v);
-}
-
-static void
-setstatus(char b[], size_t bs, unsigned int v)
-{
- static const char *status[] = {
- [IEEE80211_STATUS_SUCCESS] = "success",
- [IEEE80211_STATUS_UNSPECIFIED] = "unspecified",
- [IEEE80211_STATUS_CAPINFO] = "capinfo",
- [IEEE80211_STATUS_NOT_ASSOCED] = "not assoced",
- [IEEE80211_STATUS_OTHER] = "other",
- [IEEE80211_STATUS_ALG] = "algorithm",
- [IEEE80211_STATUS_SEQUENCE] = "sequence",
- [IEEE80211_STATUS_CHALLENGE] = "challenge",
- [IEEE80211_STATUS_TIMEOUT] = "timeout",
- [IEEE80211_STATUS_TOOMANY] = "toomany",
- [IEEE80211_STATUS_BASIC_RATE] = "basic rate",
- [IEEE80211_STATUS_SP_REQUIRED] = "sp required",
- [IEEE80211_STATUS_PBCC_REQUIRED] = "pbcc required",
- [IEEE80211_STATUS_CA_REQUIRED] = "ca required",
- [IEEE80211_STATUS_SPECMGMT_REQUIRED] = "specmgmt required",
- [IEEE80211_STATUS_PWRCAP_REQUIRED] = "pwrcap required",
- [IEEE80211_STATUS_SUPCHAN_REQUIRED] = "supchan required",
- [IEEE80211_STATUS_SHORTSLOT_REQUIRED] = "shortslot required",
- [IEEE80211_STATUS_DSSSOFDM_REQUIRED] = "dsssofdm required",
- [IEEE80211_STATUS_INVALID_IE] = "invalid ie",
- [IEEE80211_STATUS_GROUP_CIPHER_INVALID] = "group cipher invalid",
- [IEEE80211_STATUS_PAIRWISE_CIPHER_INVALID]= "pairwise cipher invalid",
- [IEEE80211_STATUS_AKMP_INVALID] = "akmp invalid",
- [IEEE80211_STATUS_UNSUPP_RSN_IE_VERSION]= "unsupported rsn ie version",
- [IEEE80211_STATUS_INVALID_RSN_IE_CAP] = "invalid rsn ie cap",
- [IEEE80211_STATUS_CIPHER_SUITE_REJECTED]= "cipher suite rejected",
- };
- if (v < nitems(status) && status[v] != NULL)
- snprintf(b, bs, "%s (%u)", status[v], v);
- else
- snprintf(b, bs, "%u", v);
-}
-
-static int
-wlan_getinfo(struct wlanstatfoo_p *wf, int s, char b[], size_t bs)
-{
- const struct ieee80211req_sta_info *si = &wf->u_info.info.info[0];
-
- switch (s) {
- case S_RATE:
- snprintf(b, bs, "%.1fM", (float) si->isi_txmbps/2.0);
- return 1;
- case S_RSSI:
- snprintf(b, bs, "%.1f", (float) si->isi_rssi/2.0);
- return 1;
- case S_NOISE:
- snprintf(b, bs, "%d", si->isi_noise);
- return 1;
- case S_SIGNAL:
- snprintf(b, bs, "%.1f", (float) si->isi_rssi/2.0
- + (float) si->isi_noise);
- return 1;
- case S_RX_AUTH_FAIL_CODE:
- if (wf->cur.is_rx_authfail_code == 0)
- break;
- setstatus(b, bs, wf->cur.is_rx_authfail_code);
- return 1;
- case S_RX_DEAUTH_CODE:
- if (wf->cur.is_rx_deauth_code == 0)
- break;
- setreason(b, bs, wf->cur.is_rx_deauth_code);
- return 1;
- case S_RX_DISASSOC_CODE:
- if (wf->cur.is_rx_disassoc_code == 0)
- break;
- setreason(b, bs, wf->cur.is_rx_disassoc_code);
- return 1;
- }
- b[0] = '\0';
- return 0;
-}
-
-static int
-wlan_get_curstat(struct bsdstat *sf, int s, char b[], size_t bs)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) sf;
-#define STAT(x) \
- snprintf(b, bs, "%u", wf->cur.is_##x - wf->total.is_##x); return 1
-#define NSTAT(x) \
- snprintf(b, bs, "%u", \
- wf->ncur.is_stats.ns_##x - wf->ntotal.is_stats.ns_##x); \
- return 1
-
- switch (s) {
- case S_RX_BADVERSION: STAT(rx_badversion);
- case S_RX_TOOSHORT: STAT(rx_tooshort);
- case S_RX_WRONGBSS: STAT(rx_wrongbss);
- case S_RX_DUP: STAT(rx_dup);
- case S_RX_WRONGDIR: STAT(rx_wrongdir);
- case S_RX_MCASTECHO: STAT(rx_mcastecho);
- case S_RX_NOTASSOC: STAT(rx_notassoc);
- case S_RX_NOPRIVACY: STAT(rx_noprivacy);
- case S_RX_UNENCRYPTED: STAT(rx_unencrypted);
- case S_RX_WEPFAIL: STAT(rx_wepfail);
- case S_RX_DECAP: STAT(rx_decap);
- case S_RX_MGTDISCARD: STAT(rx_mgtdiscard);
- case S_RX_CTL: STAT(rx_ctl);
- case S_RX_BEACON: STAT(rx_beacon);
- case S_RX_RSTOOBIG: STAT(rx_rstoobig);
- case S_RX_ELEM_MISSING: STAT(rx_elem_missing);
- case S_RX_ELEM_TOOBIG: STAT(rx_elem_toobig);
- case S_RX_ELEM_TOOSMALL: STAT(rx_elem_toosmall);
- case S_RX_ELEM_UNKNOWN: STAT(rx_elem_unknown);
- case S_RX_BADCHAN: STAT(rx_badchan);
- case S_RX_CHANMISMATCH: STAT(rx_chanmismatch);
- case S_RX_NODEALLOC: STAT(rx_nodealloc);
- case S_RX_SSIDMISMATCH: STAT(rx_ssidmismatch);
- case S_RX_AUTH_UNSUPPORTED: STAT(rx_auth_unsupported);
- case S_RX_AUTH_FAIL: STAT(rx_auth_fail);
- case S_RX_AUTH_COUNTERMEASURES: STAT(rx_auth_countermeasures);
- case S_RX_ASSOC_BSS: STAT(rx_assoc_bss);
- case S_RX_ASSOC_NOTAUTH: STAT(rx_assoc_notauth);
- case S_RX_ASSOC_CAPMISMATCH: STAT(rx_assoc_capmismatch);
- case S_RX_ASSOC_NORATE: STAT(rx_assoc_norate);
- case S_RX_ASSOC_BADWPAIE: STAT(rx_assoc_badwpaie);
- case S_RX_DEAUTH: STAT(rx_deauth);
- case S_RX_DISASSOC: STAT(rx_disassoc);
- case S_BMISS: STAT(beacon_miss);
- case S_RX_BADSUBTYPE: STAT(rx_badsubtype);
- case S_RX_NOBUF: STAT(rx_nobuf);
- case S_RX_DECRYPTCRC: STAT(rx_decryptcrc);
- case S_RX_AHDEMO_MGT: STAT(rx_ahdemo_mgt);
- case S_RX_BAD_AUTH: STAT(rx_bad_auth);
- case S_RX_UNAUTH: STAT(rx_unauth);
- case S_RX_BADKEYID: STAT(rx_badkeyid);
- case S_RX_CCMPREPLAY: STAT(rx_ccmpreplay);
- case S_RX_CCMPFORMAT: STAT(rx_ccmpformat);
- case S_RX_CCMPMIC: STAT(rx_ccmpmic);
- case S_RX_TKIPREPLAY: STAT(rx_tkipreplay);
- case S_RX_TKIPFORMAT: STAT(rx_tkipformat);
- case S_RX_TKIPMIC: STAT(rx_tkipmic);
- case S_RX_TKIPICV: STAT(rx_tkipicv);
- case S_RX_BADCIPHER: STAT(rx_badcipher);
- case S_RX_NOCIPHERCTX: STAT(rx_nocipherctx);
- case S_RX_ACL: STAT(rx_acl);
- case S_TX_NOBUF: STAT(tx_nobuf);
- case S_TX_NONODE: STAT(tx_nonode);
- case S_TX_UNKNOWNMGT: STAT(tx_unknownmgt);
- case S_TX_BADCIPHER: STAT(tx_badcipher);
- case S_TX_NODEFKEY: STAT(tx_nodefkey);
- case S_TX_NOHEADROOM: STAT(tx_noheadroom);
- case S_TX_FRAGFRAMES: STAT(tx_fragframes);
- case S_TX_FRAGS: STAT(tx_frags);
- case S_SCAN_ACTIVE: STAT(scan_active);
- case S_SCAN_PASSIVE: STAT(scan_passive);
- case S_SCAN_BG: STAT(scan_bg);
- case S_NODE_TIMEOUT: STAT(node_timeout);
- case S_CRYPTO_NOMEM: STAT(crypto_nomem);
- case S_CRYPTO_TKIP: STAT(crypto_tkip);
- case S_CRYPTO_TKIPENMIC: STAT(crypto_tkipenmic);
- case S_CRYPTO_TKIPDEMIC: STAT(crypto_tkipdemic);
- case S_CRYPTO_TKIPCM: STAT(crypto_tkipcm);
- case S_CRYPTO_CCMP: STAT(crypto_ccmp);
- case S_CRYPTO_WEP: STAT(crypto_wep);
- case S_CRYPTO_SETKEY_CIPHER: STAT(crypto_setkey_cipher);
- case S_CRYPTO_SETKEY_NOKEY: STAT(crypto_setkey_nokey);
- case S_CRYPTO_DELKEY: STAT(crypto_delkey);
- case S_CRYPTO_BADCIPHER: STAT(crypto_badcipher);
- case S_CRYPTO_NOCIPHER: STAT(crypto_nocipher);
- case S_CRYPTO_ATTACHFAIL: STAT(crypto_attachfail);
- case S_CRYPTO_SWFALLBACK: STAT(crypto_swfallback);
- case S_CRYPTO_KEYFAIL: STAT(crypto_keyfail);
- case S_CRYPTO_ENMICFAIL: STAT(crypto_enmicfail);
- case S_IBSS_CAPMISMATCH: STAT(ibss_capmismatch);
- case S_IBSS_NORATE: STAT(ibss_norate);
- case S_PS_UNASSOC: STAT(ps_unassoc);
- case S_PS_BADAID: STAT(ps_badaid);
- case S_PS_QEMPTY: STAT(ps_qempty);
- case S_FF_BADHDR: STAT(ff_badhdr);
- case S_FF_TOOSHORT: STAT(ff_tooshort);
- case S_FF_SPLIT: STAT(ff_split);
- case S_FF_DECAP: STAT(ff_decap);
- case S_FF_ENCAP: STAT(ff_encap);
- case S_FF_ENCAPFAIL: STAT(ff_encapfail);
- case S_RX_BADBINTVAL: STAT(rx_badbintval);
- case S_RX_MGMT: STAT(rx_mgmt);
- case S_RX_DEMICFAIL: STAT(rx_demicfail);
- case S_RX_DEFRAG: STAT(rx_defrag);
- case S_RX_ACTION: STAT(rx_action);
- case S_AMSDU_TOOSHORT: STAT(amsdu_tooshort);
- case S_AMSDU_SPLIT: STAT(amsdu_split);
- case S_AMSDU_DECAP: STAT(amsdu_decap);
- case S_AMSDU_ENCAP: STAT(amsdu_encap);
- case S_AMSDU_RX_MORE: NSTAT(rx_amsdu_more);
- case S_AMSDU_RX_MORE_END: NSTAT(rx_amsdu_more_end);
- case S_AMPDU_REORDER: STAT(ampdu_rx_reorder);
- case S_AMPDU_FLUSH: STAT(ampdu_rx_flush);
- case S_AMPDU_BARBAD: STAT(ampdu_bar_bad);
- case S_AMPDU_BAROOW: STAT(ampdu_bar_oow);
- case S_AMPDU_BARMOVE: STAT(ampdu_bar_move);
- case S_AMPDU_BAR: STAT(ampdu_bar_rx);
- case S_AMPDU_MOVE: STAT(ampdu_rx_move);
- case S_AMPDU_OOR: STAT(ampdu_rx_oor);
- case S_AMPDU_COPY: STAT(ampdu_rx_copy);
- case S_AMPDU_DROP: STAT(ampdu_rx_drop);
- case S_AMPDU_AGE: STAT(ampdu_rx_age);
- case S_AMPDU_STOP: STAT(ampdu_stop);
- case S_AMPDU_STOP_FAILED:STAT(ampdu_stop_failed);
- case S_ADDBA_REJECT: STAT(addba_reject);
- case S_ADDBA_NOREQUEST: STAT(addba_norequest);
- case S_ADDBA_BADTOKEN: STAT(addba_badtoken);
- case S_TX_BADSTATE: STAT(tx_badstate);
- case S_TX_NOTASSOC: STAT(tx_notassoc);
- case S_TX_CLASSIFY: STAT(tx_classify);
- case S_DWDS_MCAST: STAT(dwds_mcast);
- case S_DWDS_QDROP: STAT(dwds_qdrop);
- case S_HT_ASSOC_NOHTCAP:STAT(ht_assoc_nohtcap);
- case S_HT_ASSOC_DOWNGRADE:STAT(ht_assoc_downgrade);
- case S_HT_ASSOC_NORATE: STAT(ht_assoc_norate);
- case S_MESH_WRONGMESH: STAT(mesh_wrongmesh);
- case S_MESH_NOLINK: STAT(mesh_nolink);
- case S_MESH_FWD_TTL: STAT(mesh_fwd_ttl);
- case S_MESH_FWD_NOBUF: STAT(mesh_fwd_nobuf);
- case S_MESH_FWD_TOOSHORT: STAT(mesh_fwd_tooshort);
- case S_MESH_FWD_DISABLED: STAT(mesh_fwd_disabled);
- case S_MESH_FWD_NOPATH: STAT(mesh_fwd_nopath);
- case S_HWMP_WRONGSEQ: STAT(hwmp_wrongseq);
- case S_HWMP_ROOTREQS: STAT(hwmp_rootreqs);
- case S_HWMP_ROOTANN: STAT(hwmp_rootrann);
- case S_MESH_BADAE: STAT(mesh_badae);
- case S_MESH_RTADDFAILED:STAT(mesh_rtaddfailed);
- case S_MESH_NOTPROXY: STAT(mesh_notproxy);
- case S_RX_BADALIGN: STAT(rx_badalign);
- case S_INPUT: NSTAT(rx_data);
- case S_OUTPUT: NSTAT(tx_data);
- case S_RX_UCAST: NSTAT(rx_ucast);
- case S_RX_MCAST: NSTAT(rx_mcast);
- case S_TX_UCAST: NSTAT(tx_ucast);
- case S_TX_MCAST: NSTAT(tx_mcast);
- case S_BEACON_BAD: STAT(beacon_bad);
- case S_AMPDU_BARTX: STAT(ampdu_bar_tx);
- case S_AMPDU_BARTX_RETRY: STAT(ampdu_bar_tx_retry);
- case S_AMPDU_BARTX_FAIL: STAT(ampdu_bar_tx_fail);
- }
- return wlan_getinfo(wf, s, b, bs);
-#undef NSTAT
-#undef STAT
-}
-
-static int
-wlan_get_totstat(struct bsdstat *sf, int s, char b[], size_t bs)
-{
- struct wlanstatfoo_p *wf = (struct wlanstatfoo_p *) sf;
-#define STAT(x) \
- snprintf(b, bs, "%u", wf->total.is_##x); return 1
-#define NSTAT(x) \
- snprintf(b, bs, "%u", wf->ntotal.is_stats.ns_##x); return 1
-
- switch (s) {
- case S_RX_BADVERSION: STAT(rx_badversion);
- case S_RX_TOOSHORT: STAT(rx_tooshort);
- case S_RX_WRONGBSS: STAT(rx_wrongbss);
- case S_RX_DUP: STAT(rx_dup);
- case S_RX_WRONGDIR: STAT(rx_wrongdir);
- case S_RX_MCASTECHO: STAT(rx_mcastecho);
- case S_RX_NOTASSOC: STAT(rx_notassoc);
- case S_RX_NOPRIVACY: STAT(rx_noprivacy);
- case S_RX_UNENCRYPTED: STAT(rx_unencrypted);
- case S_RX_WEPFAIL: STAT(rx_wepfail);
- case S_RX_DECAP: STAT(rx_decap);
- case S_RX_MGTDISCARD: STAT(rx_mgtdiscard);
- case S_RX_CTL: STAT(rx_ctl);
- case S_RX_BEACON: STAT(rx_beacon);
- case S_RX_RSTOOBIG: STAT(rx_rstoobig);
- case S_RX_ELEM_MISSING: STAT(rx_elem_missing);
- case S_RX_ELEM_TOOBIG: STAT(rx_elem_toobig);
- case S_RX_ELEM_TOOSMALL: STAT(rx_elem_toosmall);
- case S_RX_ELEM_UNKNOWN: STAT(rx_elem_unknown);
- case S_RX_BADCHAN: STAT(rx_badchan);
- case S_RX_CHANMISMATCH: STAT(rx_chanmismatch);
- case S_RX_NODEALLOC: STAT(rx_nodealloc);
- case S_RX_SSIDMISMATCH: STAT(rx_ssidmismatch);
- case S_RX_AUTH_UNSUPPORTED: STAT(rx_auth_unsupported);
- case S_RX_AUTH_FAIL: STAT(rx_auth_fail);
- case S_RX_AUTH_COUNTERMEASURES: STAT(rx_auth_countermeasures);
- case S_RX_ASSOC_BSS: STAT(rx_assoc_bss);
- case S_RX_ASSOC_NOTAUTH: STAT(rx_assoc_notauth);
- case S_RX_ASSOC_CAPMISMATCH: STAT(rx_assoc_capmismatch);
- case S_RX_ASSOC_NORATE: STAT(rx_assoc_norate);
- case S_RX_ASSOC_BADWPAIE: STAT(rx_assoc_badwpaie);
- case S_RX_DEAUTH: STAT(rx_deauth);
- case S_RX_DISASSOC: STAT(rx_disassoc);
- case S_BMISS: STAT(beacon_miss);
- case S_RX_BADSUBTYPE: STAT(rx_badsubtype);
- case S_RX_NOBUF: STAT(rx_nobuf);
- case S_RX_DECRYPTCRC: STAT(rx_decryptcrc);
- case S_RX_AHDEMO_MGT: STAT(rx_ahdemo_mgt);
- case S_RX_BAD_AUTH: STAT(rx_bad_auth);
- case S_RX_UNAUTH: STAT(rx_unauth);
- case S_RX_BADKEYID: STAT(rx_badkeyid);
- case S_RX_CCMPREPLAY: STAT(rx_ccmpreplay);
- case S_RX_CCMPFORMAT: STAT(rx_ccmpformat);
- case S_RX_CCMPMIC: STAT(rx_ccmpmic);
- case S_RX_TKIPREPLAY: STAT(rx_tkipreplay);
- case S_RX_TKIPFORMAT: STAT(rx_tkipformat);
- case S_RX_TKIPMIC: STAT(rx_tkipmic);
- case S_RX_TKIPICV: STAT(rx_tkipicv);
- case S_RX_BADCIPHER: STAT(rx_badcipher);
- case S_RX_NOCIPHERCTX: STAT(rx_nocipherctx);
- case S_RX_ACL: STAT(rx_acl);
- case S_TX_NOBUF: STAT(tx_nobuf);
- case S_TX_NONODE: STAT(tx_nonode);
- case S_TX_UNKNOWNMGT: STAT(tx_unknownmgt);
- case S_TX_BADCIPHER: STAT(tx_badcipher);
- case S_TX_NODEFKEY: STAT(tx_nodefkey);
- case S_TX_NOHEADROOM: STAT(tx_noheadroom);
- case S_TX_FRAGFRAMES: STAT(tx_fragframes);
- case S_TX_FRAGS: STAT(tx_frags);
- case S_SCAN_ACTIVE: STAT(scan_active);
- case S_SCAN_PASSIVE: STAT(scan_passive);
- case S_SCAN_BG: STAT(scan_bg);
- case S_NODE_TIMEOUT: STAT(node_timeout);
- case S_CRYPTO_NOMEM: STAT(crypto_nomem);
- case S_CRYPTO_TKIP: STAT(crypto_tkip);
- case S_CRYPTO_TKIPENMIC: STAT(crypto_tkipenmic);
- case S_CRYPTO_TKIPDEMIC: STAT(crypto_tkipdemic);
- case S_CRYPTO_TKIPCM: STAT(crypto_tkipcm);
- case S_CRYPTO_CCMP: STAT(crypto_ccmp);
- case S_CRYPTO_WEP: STAT(crypto_wep);
- case S_CRYPTO_SETKEY_CIPHER: STAT(crypto_setkey_cipher);
- case S_CRYPTO_SETKEY_NOKEY: STAT(crypto_setkey_nokey);
- case S_CRYPTO_DELKEY: STAT(crypto_delkey);
- case S_CRYPTO_BADCIPHER: STAT(crypto_badcipher);
- case S_CRYPTO_NOCIPHER: STAT(crypto_nocipher);
- case S_CRYPTO_ATTACHFAIL: STAT(crypto_attachfail);
- case S_CRYPTO_SWFALLBACK: STAT(crypto_swfallback);
- case S_CRYPTO_KEYFAIL: STAT(crypto_keyfail);
- case S_CRYPTO_ENMICFAIL: STAT(crypto_enmicfail);
- case S_IBSS_CAPMISMATCH: STAT(ibss_capmismatch);
- case S_IBSS_NORATE: STAT(ibss_norate);
- case S_PS_UNASSOC: STAT(ps_unassoc);
- case S_PS_BADAID: STAT(ps_badaid);
- case S_PS_QEMPTY: STAT(ps_qempty);
- case S_FF_BADHDR: STAT(ff_badhdr);
- case S_FF_TOOSHORT: STAT(ff_tooshort);
- case S_FF_SPLIT: STAT(ff_split);
- case S_FF_DECAP: STAT(ff_decap);
- case S_FF_ENCAP: STAT(ff_encap);
- case S_FF_ENCAPFAIL: STAT(ff_encapfail);
- case S_RX_BADBINTVAL: STAT(rx_badbintval);
- case S_RX_MGMT: STAT(rx_mgmt);
- case S_RX_DEMICFAIL: STAT(rx_demicfail);
- case S_RX_DEFRAG: STAT(rx_defrag);
- case S_RX_ACTION: STAT(rx_action);
- case S_AMSDU_TOOSHORT: STAT(amsdu_tooshort);
- case S_AMSDU_SPLIT: STAT(amsdu_split);
- case S_AMSDU_DECAP: STAT(amsdu_decap);
- case S_AMSDU_ENCAP: STAT(amsdu_encap);
- case S_AMSDU_RX_MORE: NSTAT(rx_amsdu_more);
- case S_AMSDU_RX_MORE_END: NSTAT(rx_amsdu_more_end);
- case S_AMPDU_REORDER: STAT(ampdu_rx_reorder);
- case S_AMPDU_FLUSH: STAT(ampdu_rx_flush);
- case S_AMPDU_BARBAD: STAT(ampdu_bar_bad);
- case S_AMPDU_BAROOW: STAT(ampdu_bar_oow);
- case S_AMPDU_BARMOVE: STAT(ampdu_bar_move);
- case S_AMPDU_BAR: STAT(ampdu_bar_rx);
- case S_AMPDU_MOVE: STAT(ampdu_rx_move);
- case S_AMPDU_OOR: STAT(ampdu_rx_oor);
- case S_AMPDU_COPY: STAT(ampdu_rx_copy);
- case S_AMPDU_DROP: STAT(ampdu_rx_drop);
- case S_AMPDU_AGE: STAT(ampdu_rx_age);
- case S_AMPDU_STOP: STAT(ampdu_stop);
- case S_AMPDU_STOP_FAILED:STAT(ampdu_stop_failed);
- case S_ADDBA_REJECT: STAT(addba_reject);
- case S_ADDBA_NOREQUEST: STAT(addba_norequest);
- case S_ADDBA_BADTOKEN: STAT(addba_badtoken);
- case S_TX_BADSTATE: STAT(tx_badstate);
- case S_TX_NOTASSOC: STAT(tx_notassoc);
- case S_TX_CLASSIFY: STAT(tx_classify);
- case S_DWDS_MCAST: STAT(dwds_mcast);
- case S_DWDS_QDROP: STAT(dwds_qdrop);
- case S_HT_ASSOC_NOHTCAP:STAT(ht_assoc_nohtcap);
- case S_HT_ASSOC_DOWNGRADE:STAT(ht_assoc_downgrade);
- case S_HT_ASSOC_NORATE: STAT(ht_assoc_norate);
- case S_MESH_WRONGMESH: STAT(mesh_wrongmesh);
- case S_MESH_NOLINK: STAT(mesh_nolink);
- case S_MESH_FWD_TTL: STAT(mesh_fwd_ttl);
- case S_MESH_FWD_NOBUF: STAT(mesh_fwd_nobuf);
- case S_MESH_FWD_TOOSHORT: STAT(mesh_fwd_tooshort);
- case S_MESH_FWD_DISABLED: STAT(mesh_fwd_disabled);
- case S_MESH_FWD_NOPATH: STAT(mesh_fwd_nopath);
- case S_HWMP_WRONGSEQ: STAT(hwmp_wrongseq);
- case S_HWMP_ROOTREQS: STAT(hwmp_rootreqs);
- case S_HWMP_ROOTANN: STAT(hwmp_rootrann);
- case S_MESH_BADAE: STAT(mesh_badae);
- case S_MESH_RTADDFAILED:STAT(mesh_rtaddfailed);
- case S_MESH_NOTPROXY: STAT(mesh_notproxy);
- case S_RX_BADALIGN: STAT(rx_badalign);
- case S_INPUT: NSTAT(rx_data);
- case S_OUTPUT: NSTAT(tx_data);
- case S_RX_UCAST: NSTAT(rx_ucast);
- case S_RX_MCAST: NSTAT(rx_mcast);
- case S_TX_UCAST: NSTAT(tx_ucast);
- case S_TX_MCAST: NSTAT(tx_mcast);
- case S_BEACON_BAD: STAT(beacon_bad);
- case S_AMPDU_BARTX: STAT(ampdu_bar_tx);
- case S_AMPDU_BARTX_RETRY: STAT(ampdu_bar_tx_retry);
- case S_AMPDU_BARTX_FAIL: STAT(ampdu_bar_tx_fail);
- }
- return wlan_getinfo(wf, s, b, bs);
-#undef NSTAT
-#undef STAT
-}
-
-BSDSTAT_DEFINE_BOUNCE(wlanstatfoo)
-
-struct wlanstatfoo *
-wlanstats_new(const char *ifname, const char *fmtstring)
-{
- struct wlanstatfoo_p *wf;
-
- wf = calloc(1, sizeof(struct wlanstatfoo_p));
- if (wf != NULL) {
- bsdstat_init(&wf->base.base, "wlanstats", wlanstats,
- nitems(wlanstats));
- /* override base methods */
- wf->base.base.collect_cur = wlan_collect_cur;
- wf->base.base.collect_tot = wlan_collect_tot;
- wf->base.base.get_curstat = wlan_get_curstat;
- wf->base.base.get_totstat = wlan_get_totstat;
- wf->base.base.update_tot = wlan_update_tot;
-
- /* setup bounce functions for public methods */
- BSDSTAT_BOUNCE(wf, wlanstatfoo);
-
- /* setup our public methods */
- wf->base.setifname = wlan_setifname;
- wf->base.getifname = wlan_getifname;
- wf->base.getopmode = wlan_getopmode;
- wf->base.setstamac = wlan_setstamac;
- wf->opmode = -1;
-
- wf->s = socket(AF_INET, SOCK_DGRAM, 0);
- if (wf->s < 0)
- err(1, "socket");
-
- wlan_setifname(&wf->base, ifname);
- wf->base.setfmt(&wf->base, fmtstring);
- }
- return &wf->base;
-}
diff --git a/tools/tools/net80211/wlanstats/wlanstats.h b/tools/tools/net80211/wlanstats/wlanstats.h
deleted file mode 100644
index 8ab3c0558fd6..000000000000
--- a/tools/tools/net80211/wlanstats/wlanstats.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGES.
- */
-
-#ifndef _WLANSTATS_H_
-#define _WLANSTATS_H_
-
-#include "bsdstat.h"
-
-/*
- * wlan statistics class.
- */
-struct wlanstatfoo {
- struct bsdstat base;
-
- BSDSTAT_DECL_METHODS(struct wlanstatfoo *);
-
- /* set the network interface name for collection */
- void (*setifname)(struct wlanstatfoo *, const char *ifname);
- /* get the network interface name */
- const char *(*getifname)(struct wlanstatfoo *);
- /* get the wireless operating mode */
- int (*getopmode)(struct wlanstatfoo *);
- /* set the mac address of the associated station/ap */
- void (*setstamac)(struct wlanstatfoo *, const uint8_t mac[]);
-};
-
-struct wlanstatfoo *wlanstats_new(const char *ifname, const char *fmtstring);
-#endif /* _WLANSTATS_H_ */
diff --git a/tools/tools/net80211/wlantxtime/Makefile b/tools/tools/net80211/wlantxtime/Makefile
index 4948d818f466..b133375f5a4d 100644
--- a/tools/tools/net80211/wlantxtime/Makefile
+++ b/tools/tools/net80211/wlantxtime/Makefile
@@ -1,4 +1,3 @@
-
PROG= wlantxtime
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/net80211/wlanwatch/Makefile b/tools/tools/net80211/wlanwatch/Makefile
index 28a13096f450..0cace0f00bc7 100644
--- a/tools/tools/net80211/wlanwatch/Makefile
+++ b/tools/tools/net80211/wlanwatch/Makefile
@@ -1,4 +1,3 @@
-
PROG= wlanwatch
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/net80211/wlanwatch/wlanwatch.c b/tools/tools/net80211/wlanwatch/wlanwatch.c
index 6e3bfd798c2d..ec6d85cc1ffb 100644
--- a/tools/tools/net80211/wlanwatch/wlanwatch.c
+++ b/tools/tools/net80211/wlanwatch/wlanwatch.c
@@ -63,6 +63,7 @@
#include <sysexits.h>
#include <unistd.h>
#include <ifaddrs.h>
+#include <inttypes.h>
/* XXX */
enum ieee80211_notify_cac_event {
@@ -74,7 +75,7 @@ enum ieee80211_notify_cac_event {
static void print_rtmsg(struct rt_msghdr *rtm, int msglen);
-int nflag = 0;
+static int nflag = 0;
int
main(int argc, char *argv[])
@@ -121,22 +122,17 @@ bprintf(FILE *fp, int b, char *s)
putc('>', fp);
}
-char metricnames[] =
-"\011pksent\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire\2hopcount"
-"\1mtu";
-char routeflags[] =
-"\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT"
-"\011CLONING\012XRESOLVE\013LLINFO\014STATIC\015BLACKHOLE\016b016"
-"\017PROTO2\020PROTO1\021PRCLONING\022WASCLONED\023PROTO3\024CHAINDELETE"
-"\025PINNED\026LOCAL\027BROADCAST\030MULTICAST";
-char ifnetflags[] =
+static char ifnetflags[] =
"\1UP\2BROADCAST\3DEBUG\4LOOPBACK\5PTP\6b6\7RUNNING\010NOARP"
"\011PPROMISC\012ALLMULTI\013OACTIVE\014SIMPLEX\015LINK0\016LINK1"
"\017LINK2\020MULTICAST";
-char addrnames[] =
+static char addrnames[] =
"\1DST\2GATEWAY\3NETMASK\4GENMASK\5IFP\6IFA\7AUTHOR\010BRD";
-char defaultname[] = "default";
+static char defaultname[] = "default";
+
+#define SOCKADDR_CNV_CONST(sa, sa_fam) \
+ ((struct sa_fam *)(void *) (sa))
static const char *
routename(struct sockaddr *sa)
@@ -165,7 +161,7 @@ routename(struct sockaddr *sa)
{ struct in_addr in;
char *cp;
- in = ((struct sockaddr_in *)sa)->sin_addr;
+ in = SOCKADDR_CNV_CONST(sa, sockaddr_in)->sin_addr;
cp = NULL;
if (in.s_addr == INADDR_ANY || sa->sa_len < 4)
@@ -220,10 +216,10 @@ routename(struct sockaddr *sa)
#endif
case AF_LINK:
- return (link_ntoa((struct sockaddr_dl *)sa));
+ return (link_ntoa(SOCKADDR_CNV_CONST(sa, sockaddr_dl)));
default:
- { u_short *s = (u_short *)sa;
+ { u_short *s = (u_short *)(void *)sa;
u_short *slim = s + ((sa->sa_len + 1) >> 1);
char *cp = line + sprintf(line, "(%d)", sa->sa_family);
char *cpe = line + sizeof(line);
@@ -340,7 +336,7 @@ print_rtmsg(struct rt_msghdr *rtm, int msglen)
fflush(stdout);
break;
case RTM_IEEE80211:
-#define V(type) ((struct type *)(&ifan[1]))
+#define V(type) ((struct type *)(void *)(&ifan[1]))
ifan = (struct if_announcemsghdr *)rtm;
printf("%.19s RTM_IEEE80211: if# %d, ", cnow, ifan->ifan_index);
switch (ifan->ifan_what) {
@@ -373,7 +369,8 @@ print_rtmsg(struct rt_msghdr *rtm, int msglen)
printf("replay failure: src %s "
, ether_sprintf(V(ieee80211_replay_event)->iev_src)
);
- printf("dst %s cipher %u keyix %u keyrsc %llu rsc %llu"
+ printf("dst %s cipher %u keyix %u keyrsc %" PRIu64
+ " rsc %" PRIu64
, ether_sprintf(V(ieee80211_replay_event)->iev_dst)
, V(ieee80211_replay_event)->iev_cipher
, V(ieee80211_replay_event)->iev_keyix
diff --git a/tools/tools/net80211/wlanwds/Makefile b/tools/tools/net80211/wlanwds/Makefile
index 0a2ab16381c7..293ddb75f9b4 100644
--- a/tools/tools/net80211/wlanwds/Makefile
+++ b/tools/tools/net80211/wlanwds/Makefile
@@ -1,6 +1,7 @@
-
PROG= wlanwds
BINDIR= /usr/local/bin
MAN=
+LIBADD= util
+
.include <bsd.prog.mk>
diff --git a/tools/tools/net80211/wlanwds/wlanwds.c b/tools/tools/net80211/wlanwds/wlanwds.c
index a9ca89e4d5b1..f6364c3ce4da 100644
--- a/tools/tools/net80211/wlanwds/wlanwds.c
+++ b/tools/tools/net80211/wlanwds/wlanwds.c
@@ -68,6 +68,7 @@
#include <syslog.h>
#include <unistd.h>
#include <ifaddrs.h>
+#include <libutil.h>
#define IEEE80211_ADDR_EQ(a1,a2) (memcmp(a1,a2,IEEE80211_ADDR_LEN) == 0)
#define IEEE80211_ADDR_COPY(dst,src) memcpy(dst,src,IEEE80211_ADDR_LEN)
@@ -107,9 +108,11 @@ main(int argc, char *argv[])
{
const char *progname = argv[0];
const char *pidfile = NULL;
+ struct pidfh *pfh = NULL;
int s, c, logmask, bg = 1;
char msg[2048];
int log_stderr = 0;
+ pid_t otherpid;
logmask = LOG_UPTO(LOG_INFO);
while ((c = getopt(argc, argv, "efjP:s:tv")) != -1)
@@ -148,6 +151,17 @@ main(int argc, char *argv[])
ifnets = argv;
nifnets = argc;
+ if (pidfile != NULL) {
+ pfh = pidfile_open(pidfile, 0600, &otherpid);
+ if (pfh == NULL) {
+ if (errno == EEXIST)
+ errx(EXIT_FAILURE, "Daemon already running; pid: %jd.",
+ (intmax_t)otherpid);
+
+ warn("Cannot open or create pidfile");
+ }
+ }
+
s = socket(PF_ROUTE, SOCK_RAW, 0);
if (s < 0)
err(EX_OSERR, "socket");
@@ -157,8 +171,12 @@ main(int argc, char *argv[])
scanforvaps(s);
/* XXX what directory to work in? */
- if (bg && daemon(0, 0) < 0)
+ if (bg && daemon(0, 0) < 0) {
+ pidfile_remove(pfh);
err(EX_OSERR, "daemon");
+ }
+
+ pidfile_write(pfh);
openlog("wlanwds", log_stderr | LOG_PID | LOG_CONS, LOG_DAEMON);
setlogmask(logmask);
@@ -167,6 +185,8 @@ main(int argc, char *argv[])
ssize_t n = read(s, msg, sizeof(msg));
handle_rtmsg((struct rt_msghdr *)msg, n);
}
+
+ pidfile_remove(pfh);
return 0;
}
@@ -283,7 +303,7 @@ getlladdr(const char *ifname, uint8_t macaddr[ETHER_ADDR_LEN])
}
/* Look for a matching interface */
- for (ifa = ifap; ifa != NULL; ifa++) {
+ for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
if (strcmp(ifname, ifa->ifa_name) != 0)
continue;
@@ -295,7 +315,7 @@ getlladdr(const char *ifname, uint8_t macaddr[ETHER_ADDR_LEN])
}
/* Check address family */
- sdl = (struct sockaddr_dl *) ifa->ifa_addr;
+ sdl = (struct sockaddr_dl *)(void *)ifa->ifa_addr;
if (sdl->sdl_type != IFT_ETHER) {
syslog(LOG_CRIT, "%s: %s: unknown aftype (%d)\n",
__func__,
diff --git a/tools/tools/netrate/Makefile.inc b/tools/tools/netrate/Makefile.inc
index 59704fbd89de..cf63a151e331 100644
--- a/tools/tools/netrate/Makefile.inc
+++ b/tools/tools/netrate/Makefile.inc
@@ -1,3 +1,2 @@
-
WARNS?= 5
WFORMAT?= 2
diff --git a/tools/tools/netrate/http/Makefile b/tools/tools/netrate/http/Makefile
index cfdea3e09753..588199f2ae62 100644
--- a/tools/tools/netrate/http/Makefile
+++ b/tools/tools/netrate/http/Makefile
@@ -1,4 +1,3 @@
-
PROG= http
MAN=
LIBADD= pthread
diff --git a/tools/tools/netrate/httpd/Makefile b/tools/tools/netrate/httpd/Makefile
index 5282df918de6..18bd38009e4c 100644
--- a/tools/tools/netrate/httpd/Makefile
+++ b/tools/tools/netrate/httpd/Makefile
@@ -1,4 +1,3 @@
-
PROG= httpd
MAN=
WARNS?= 3
diff --git a/tools/tools/netrate/juggle/Makefile b/tools/tools/netrate/juggle/Makefile
index 7b624d7e4e74..15665e63e2ef 100644
--- a/tools/tools/netrate/juggle/Makefile
+++ b/tools/tools/netrate/juggle/Makefile
@@ -1,4 +1,3 @@
-
PROG= juggle
MAN=
WARNS?= 3
diff --git a/tools/tools/netrate/tcpconnect/Makefile b/tools/tools/netrate/tcpconnect/Makefile
index 3686c823d89c..a038ba496b86 100644
--- a/tools/tools/netrate/tcpconnect/Makefile
+++ b/tools/tools/netrate/tcpconnect/Makefile
@@ -1,4 +1,3 @@
-
PROG= tcpconnect
MAN=
WARNS?= 3
diff --git a/tools/tools/netrate/tcpp/Makefile b/tools/tools/netrate/tcpp/Makefile
index 79ee56b8f7cf..a25d418f2649 100644
--- a/tools/tools/netrate/tcpp/Makefile
+++ b/tools/tools/netrate/tcpp/Makefile
@@ -1,4 +1,3 @@
-
PROG= tcpp
INCS= tcpp.h
MAN=
diff --git a/tools/tools/netrate/tcpreceive/Makefile b/tools/tools/netrate/tcpreceive/Makefile
index 1564bd5a41ec..1d02a57656a0 100644
--- a/tools/tools/netrate/tcpreceive/Makefile
+++ b/tools/tools/netrate/tcpreceive/Makefile
@@ -1,4 +1,3 @@
-
PROG= tcpreceive
MAN=
WARNS?= 3
diff --git a/tools/tools/notescheck/Makefile b/tools/tools/notescheck/Makefile
index c86b2ee41bc1..493068e67eef 100644
--- a/tools/tools/notescheck/Makefile
+++ b/tools/tools/notescheck/Makefile
@@ -1,4 +1,3 @@
-
SCRIPTS= notescheck.py
.include <bsd.prog.mk>
diff --git a/tools/tools/npe/Makefile b/tools/tools/npe/Makefile
index 67634bf343f6..e89e95afe4ad 100644
--- a/tools/tools/npe/Makefile
+++ b/tools/tools/npe/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= npestats
.include <bsd.subdir.mk>
diff --git a/tools/tools/npe/npestats/Makefile b/tools/tools/npe/npestats/Makefile
index 3c1cca48f903..3fa9dd50c555 100644
--- a/tools/tools/npe/npestats/Makefile
+++ b/tools/tools/npe/npestats/Makefile
@@ -1,4 +1,3 @@
-
PROG= npestats
SRCS= main.c npestats.c
BINDIR= /usr/local/bin
diff --git a/tools/tools/pirtool/Makefile b/tools/tools/pirtool/Makefile
index df60b2d9ce8c..e291511839c6 100644
--- a/tools/tools/pirtool/Makefile
+++ b/tools/tools/pirtool/Makefile
@@ -1,4 +1,3 @@
-
PROG= pirtool
SRCS= pirtool.c
MAN=
diff --git a/tools/tools/shlib-compat/Makefile.sysfake b/tools/tools/shlib-compat/Makefile.sysfake
index 9ef5a3a752da..34a790be3f8c 100644
--- a/tools/tools/shlib-compat/Makefile.sysfake
+++ b/tools/tools/shlib-compat/Makefile.sysfake
@@ -1,4 +1,3 @@
-
SRCS+= sysfake.c
CLEANFILES+= sysfake.c
diff --git a/tools/tools/shlib-compat/test/Makefile b/tools/tools/shlib-compat/test/Makefile
index 6af16f2f9e61..e28b6ee2ad7e 100644
--- a/tools/tools/shlib-compat/test/Makefile
+++ b/tools/tools/shlib-compat/test/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= libtest1 \
libtest2 \
libtest3 \
diff --git a/tools/tools/shlib-compat/test/Makefile.inc b/tools/tools/shlib-compat/test/Makefile.inc
index 6417cdc826fb..dc0bf23f863f 100644
--- a/tools/tools/shlib-compat/test/Makefile.inc
+++ b/tools/tools/shlib-compat/test/Makefile.inc
@@ -1,4 +1,3 @@
-
LIB= test${TESTNUM}
SHLIB_MAJOR= 0
diff --git a/tools/tools/shlib-compat/test/libtest1/Makefile b/tools/tools/shlib-compat/test/libtest1/Makefile
index 36b4e7024397..cbbb9d30d960 100644
--- a/tools/tools/shlib-compat/test/libtest1/Makefile
+++ b/tools/tools/shlib-compat/test/libtest1/Makefile
@@ -1,4 +1,3 @@
-
TESTNUM= 1
.include <../Makefile.inc>
diff --git a/tools/tools/shlib-compat/test/libtest2/Makefile b/tools/tools/shlib-compat/test/libtest2/Makefile
index a205258710a0..fe2b7b22b111 100644
--- a/tools/tools/shlib-compat/test/libtest2/Makefile
+++ b/tools/tools/shlib-compat/test/libtest2/Makefile
@@ -1,4 +1,3 @@
-
TESTNUM= 2
.include <../Makefile.inc>
diff --git a/tools/tools/shlib-compat/test/libtest3/Makefile b/tools/tools/shlib-compat/test/libtest3/Makefile
index 232da97d2555..d5942c588a15 100644
--- a/tools/tools/shlib-compat/test/libtest3/Makefile
+++ b/tools/tools/shlib-compat/test/libtest3/Makefile
@@ -1,4 +1,3 @@
-
TESTNUM= 3
.include <../Makefile.inc>
diff --git a/tools/tools/shlib-compat/test/libtestsys/Makefile b/tools/tools/shlib-compat/test/libtestsys/Makefile
index 8bf88e27430d..631fb8178175 100644
--- a/tools/tools/shlib-compat/test/libtestsys/Makefile
+++ b/tools/tools/shlib-compat/test/libtestsys/Makefile
@@ -1,4 +1,3 @@
-
TESTNUM= sys
CLEANFILES+= test.c
diff --git a/tools/tools/so_splice/Makefile b/tools/tools/so_splice/Makefile
new file mode 100644
index 000000000000..57ced2fc7b47
--- /dev/null
+++ b/tools/tools/so_splice/Makefile
@@ -0,0 +1,12 @@
+PROGS= pingpong proxy
+
+MAN=
+
+WARNS?= 6
+
+.if defined(SRCDIR)
+CFLAGS+= -I${SRCDIR}/include \
+ -I${SRCDIR}/sys
+.endif
+
+.include <bsd.progs.mk>
diff --git a/tools/tools/so_splice/pingpong.c b/tools/tools/so_splice/pingpong.c
new file mode 100644
index 000000000000..bfcd7f4e0736
--- /dev/null
+++ b/tools/tools/so_splice/pingpong.c
@@ -0,0 +1,197 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Klara, Inc.
+ */
+
+/*
+ * A utility which implements a simple ping-pong over TCP, and prints the amount
+ * of time elapsed for each round trip.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+static void
+usage(void)
+{
+ fprintf(stderr,
+"usage: pingpong [-c <target addr> [-l <msgsz>] [-n <count]]|[-s <listen addr>]\n");
+ exit(1);
+}
+
+static void
+addrinfo(struct sockaddr_storage *ss, const char *addr)
+{
+ struct addrinfo hints, *res, *res1;
+ char *host, *port;
+ int error;
+
+ host = strdup(addr);
+ if (host == NULL)
+ err(1, "strdup");
+ port = strchr(host, ':');
+ if (port == NULL)
+ errx(1, "invalid address '%s', should be <addr>:<port>", host);
+ *port++ = '\0';
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+ error = getaddrinfo(host, port, &hints, &res);
+ if (error != 0)
+ errx(1, "%s", gai_strerror(error));
+ for (res1 = res; res != NULL; res = res->ai_next) {
+ if (res->ai_protocol == IPPROTO_TCP) {
+ memcpy(ss, res->ai_addr, res->ai_addrlen);
+ break;
+ }
+ }
+ if (res == NULL)
+ errx(1, "no TCP address found for '%s'", host);
+ free(host);
+ freeaddrinfo(res1);
+}
+
+int
+main(int argc, char **argv)
+{
+ char buf[1024];
+ struct sockaddr_storage ss;
+ char *addr;
+ size_t len;
+ int ch, count, s;
+ enum { NONE, CLIENT, SERVER } mode;
+
+ count = 0;
+ len = 0;
+ mode = NONE;
+ while ((ch = getopt(argc, argv, "c:l:n:s:")) != -1) {
+ switch (ch) {
+ case 'c':
+ addr = optarg;
+ mode = CLIENT;
+ break;
+ case 'l':
+ len = strtol(optarg, NULL, 10);
+ if (len > sizeof(buf))
+ errx(1, "message size too large");
+ if (len == 0)
+ errx(1, "message size must be non-zero");
+ break;
+ case 'n':
+ count = strtol(optarg, NULL, 10);
+ if (count <= 0)
+ errx(1, "count must be positive");
+ break;
+ case 's':
+ addr = optarg;
+ mode = SERVER;
+ break;
+ default:
+ usage();
+ break;
+ }
+ }
+
+ if (mode == NONE)
+ usage();
+ if (mode == SERVER && len != 0)
+ usage();
+
+ if (mode == CLIENT) {
+ if (len == 0)
+ len = 1;
+ if (count == 0)
+ count = 1;
+ }
+
+ addrinfo(&ss, addr);
+
+ s = socket(ss.ss_family, SOCK_STREAM, 0);
+ if (s == -1)
+ err(1, "socket");
+ if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &(int){1}, sizeof(int)) ==
+ -1)
+ err(1, "setsockopt");
+
+ if (mode == CLIENT) {
+ struct timespec ts1, ts2;
+ ssize_t n;
+
+ memset(buf, 'a', len);
+ if (connect(s, (struct sockaddr *)&ss, ss.ss_len) == -1)
+ err(1, "connect");
+
+ for (int i = 0; i < count; i++) {
+ int64_t ns;
+
+ clock_gettime(CLOCK_MONOTONIC, &ts1);
+ n = write(s, buf, len);
+ if (n < 0)
+ err(1, "write");
+ n = read(s, buf, len);
+ if (n < 0)
+ err(1, "read");
+ if ((size_t)n < len)
+ errx(1, "unexpected short read");
+ clock_gettime(CLOCK_MONOTONIC, &ts2);
+
+ ns = (ts2.tv_sec - ts1.tv_sec) * 1000000000 +
+ (ts2.tv_nsec - ts1.tv_nsec);
+ printf("round trip time: %ld.%02ld us\n", ns / 1000,
+ (ns % 1000) / 10);
+ for (size_t j = 0; j < len; j++) {
+ if (buf[j] != 'b')
+ errx(1, "unexpected data");
+ }
+ }
+ } else /* if (mode == SERVER) */ {
+ int cs;
+
+ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &(int){1},
+ sizeof(int)) == -1)
+ err(1, "setsockopt");
+ if (bind(s, (struct sockaddr *)&ss, ss.ss_len) == -1)
+ err(1, "bind");
+ if (listen(s, 1) == -1)
+ err(1, "listen");
+
+ for (;;) {
+ ssize_t n;
+
+ cs = accept(s, NULL, NULL);
+ if (cs == -1)
+ err(1, "accept");
+
+ for (;;) {
+ n = read(cs, buf, sizeof(buf));
+ if (n < 0) {
+ if (errno == ECONNRESET)
+ break;
+ err(1, "read");
+ }
+ if (n == 0)
+ break;
+ memset(buf, 'b', n);
+ n = write(cs, buf, n);
+ if (n < 0)
+ err(1, "write");
+ }
+ (void)close(cs);
+ }
+ }
+
+ return (0);
+}
diff --git a/tools/tools/so_splice/proxy.c b/tools/tools/so_splice/proxy.c
new file mode 100644
index 000000000000..409a47225522
--- /dev/null
+++ b/tools/tools/so_splice/proxy.c
@@ -0,0 +1,451 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Klara, Inc.
+ */
+
+/*
+ * A simple TCP proxy. Listens on a local address until a connection appears,
+ * then opens a TCP connection to the target address and shuttles data between
+ * the two until one side closes its connection.
+ *
+ * For example:
+ *
+ * $ proxy -l 127.0.0.1:8080 www.example.com:80
+ *
+ * The -m flag selects the mode of the transfer. Specify "-m copy" to enable
+ * copying through userspace, and "-m splice" to use SO_SPLICE.
+ *
+ * The -L flag enables a loopback mode, wherein all data is additionally proxied
+ * through a loopback TCP connection. This exists mostly to help test a
+ * specific use-case in custom proxy software where we would like to use
+ * SO_SPLICE.
+ */
+
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <arpa/inet.h>
+
+#include <assert.h>
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+struct proxy_softc {
+ struct sockaddr_storage lss;
+ struct sockaddr_storage tss;
+ size_t bufsz;
+ enum proxy_mode { PROXY_MODE_COPY, PROXY_MODE_SPLICE } mode;
+ bool loopback;
+};
+
+static void
+usage(void)
+{
+ fprintf(stderr,
+"usage: proxy [-m copy|splice] [-s <buf-size>] [-L] -l <listen addr> <target addr>\n");
+ exit(1);
+}
+
+static void
+proxy_copy(struct proxy_softc *sc, int cs, int ts)
+{
+ struct kevent kev[2];
+ uint8_t *buf;
+ int kq;
+
+ kq = kqueue();
+ if (kq == -1)
+ err(1, "kqueue");
+
+ EV_SET(&kev[0], cs, EVFILT_READ, EV_ADD, 0, 0, (void *)(uintptr_t)ts);
+ EV_SET(&kev[1], ts, EVFILT_READ, EV_ADD, 0, 0, (void *)(uintptr_t)cs);
+ if (kevent(kq, kev, 2, NULL, 0, NULL) == -1)
+ err(1, "kevent");
+
+ buf = malloc(sc->bufsz);
+ if (buf == NULL)
+ err(1, "malloc");
+
+ for (;;) {
+ uint8_t *data;
+ ssize_t n, resid;
+ int rs, ws;
+
+ if (kevent(kq, NULL, 0, kev, 2, NULL) == -1) {
+ if (errno == EINTR)
+ continue;
+ err(1, "kevent");
+ }
+
+ rs = (int)kev[0].ident;
+ ws = (int)(uintptr_t)kev[0].udata;
+
+ n = read(rs, buf, sc->bufsz);
+ if (n == -1) {
+ if (errno == ECONNRESET)
+ break;
+ err(1, "read");
+ }
+ if (n == 0)
+ break;
+
+ data = buf;
+ resid = n;
+ do {
+ n = write(ws, data, resid);
+ if (n == -1) {
+ if (errno == EINTR)
+ continue;
+ if (errno == ECONNRESET || errno == EPIPE)
+ break;
+ err(1, "write");
+ }
+ assert(n > 0);
+ data += n;
+ resid -= n;
+ } while (resid > 0);
+ }
+
+ free(buf);
+ close(kq);
+}
+
+static void
+splice(int s1, int s2)
+{
+ struct splice sp;
+
+ memset(&sp, 0, sizeof(sp));
+ sp.sp_fd = s2;
+ if (setsockopt(s1, SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)) == -1)
+ err(1, "setsockopt");
+}
+
+static void
+proxy_splice(struct proxy_softc *sc __unused, int cs, int ts)
+{
+ struct kevent kev[2];
+ int error, kq;
+
+ /* Set up our splices. */
+ splice(cs, ts);
+ splice(ts, cs);
+
+ /* Block until the connection is terminated. */
+ kq = kqueue();
+ if (kq == -1)
+ err(1, "kqueue");
+ EV_SET(&kev[0], cs, EVFILT_READ, EV_ADD, 0, 0, NULL);
+ EV_SET(&kev[1], ts, EVFILT_READ, EV_ADD, 0, 0, NULL);
+ do {
+ error = kevent(kq, kev, 2, kev, 2, NULL);
+ if (error == -1 && errno != EINTR)
+ err(1, "kevent");
+ } while (error <= 0);
+
+ close(kq);
+}
+
+static void
+nodelay(int s)
+{
+ if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &(int){1}, sizeof(int)) ==
+ -1)
+ err(1, "setsockopt");
+}
+
+/*
+ * Like socketpair(2), but for TCP sockets on the loopback address.
+ */
+static void
+tcp_socketpair(int out[2], int af)
+{
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+ struct sockaddr *sa;
+ int sd[2];
+
+ sd[0] = socket(af, SOCK_STREAM, 0);
+ if (sd[0] == -1)
+ err(1, "socket");
+ sd[1] = socket(af, SOCK_STREAM, 0);
+ if (sd[1] == -1)
+ err(1, "socket");
+
+ nodelay(sd[0]);
+ nodelay(sd[1]);
+
+ if (af == AF_INET) {
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ sin.sin_port = 0;
+ sin.sin_len = sizeof(sin);
+ sa = (struct sockaddr *)&sin;
+ } else if (af == AF_INET6) {
+ memset(&sin6, 0, sizeof(sin6));
+ sin6.sin6_family = AF_INET6;
+ sin6.sin6_addr = in6addr_loopback;
+ sin6.sin6_port = 0;
+ sin6.sin6_len = sizeof(sin6);
+ sa = (struct sockaddr *)&sin6;
+ } else {
+ errx(1, "unsupported address family %d", af);
+ }
+
+ if (bind(sd[0], sa, sa->sa_len) == -1)
+ err(1, "bind");
+ if (listen(sd[0], 1) == -1)
+ err(1, "listen");
+
+ if (getsockname(sd[0], sa, &(socklen_t){sa->sa_len}) == -1)
+ err(1, "getsockname");
+ if (connect(sd[1], sa, sa->sa_len) == -1)
+ err(1, "connect");
+
+ out[0] = sd[1];
+ out[1] = accept(sd[0], NULL, NULL);
+ if (out[1] == -1)
+ err(1, "accept");
+ close(sd[0]);
+}
+
+/*
+ * Proxy data between two connected TCP sockets. Returns the PID of the process
+ * forked off to handle the data transfer.
+ */
+static pid_t
+proxy(struct proxy_softc *sc, int s1, int s2)
+{
+ pid_t child;
+
+ child = fork();
+ if (child == -1)
+ err(1, "fork");
+ if (child != 0) {
+ close(s1);
+ close(s2);
+ return (child);
+ }
+
+ if (sc->mode == PROXY_MODE_COPY)
+ proxy_copy(sc, s1, s2);
+ else
+ proxy_splice(sc, s1, s2);
+ _exit(0);
+}
+
+/*
+ * The proxy event loop accepts connections and forks off child processes to
+ * handle them. We also handle events generated when child processes exit
+ * (triggered by one side closing its connection).
+ */
+static void
+eventloop(struct proxy_softc *sc)
+{
+ struct kevent kev;
+ int kq, lsd;
+ pid_t child;
+
+ lsd = socket(sc->lss.ss_family, SOCK_STREAM, 0);
+ if (lsd == -1)
+ err(1, "socket");
+ if (setsockopt(lsd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) ==
+ -1)
+ err(1, "setsockopt");
+ if (bind(lsd, (struct sockaddr *)&sc->lss, sc->lss.ss_len) == -1)
+ err(1, "bind");
+ if (listen(lsd, 5) == -1)
+ err(1, "listen");
+
+ kq = kqueue();
+ if (kq == -1)
+ err(1, "kqueue");
+ EV_SET(&kev, lsd, EVFILT_READ, EV_ADD, 0, 0, NULL);
+ if (kevent(kq, &kev, 1, NULL, 0, NULL) == -1)
+ err(1, "kevent");
+
+ for (;;) {
+ if (kevent(kq, NULL, 0, &kev, 1, NULL) == -1) {
+ if (errno == EINTR)
+ continue;
+ err(1, "kevent");
+ }
+
+ switch (kev.filter) {
+ case EVFILT_READ: {
+ int s, ts;
+
+ if ((int)kev.ident != lsd)
+ errx(1, "unexpected event ident %d",
+ (int)kev.ident);
+
+ s = accept(lsd, NULL, NULL);
+ if (s == -1)
+ err(1, "accept");
+ nodelay(s);
+
+ ts = socket(sc->tss.ss_family, SOCK_STREAM, 0);
+ if (ts == -1)
+ err(1, "socket");
+ nodelay(ts);
+ if (connect(ts, (struct sockaddr *)&sc->tss,
+ sc->tss.ss_len) == -1)
+ err(1, "connect");
+
+ if (sc->loopback) {
+ int ls[2];
+
+ tcp_socketpair(ls, sc->tss.ss_family);
+ child = proxy(sc, ls[0], ts);
+ EV_SET(&kev, child, EVFILT_PROC, EV_ADD,
+ NOTE_EXIT, 0, NULL);
+ if (kevent(kq, &kev, 1, NULL, 0, NULL) == -1)
+ err(1, "kevent");
+ child = proxy(sc, s, ls[1]);
+ EV_SET(&kev, child, EVFILT_PROC, EV_ADD,
+ NOTE_EXIT, 0, NULL);
+ if (kevent(kq, &kev, 1, NULL, 0, NULL) == -1)
+ err(1, "kevent");
+ } else {
+ child = proxy(sc, s, ts);
+ EV_SET(&kev, child, EVFILT_PROC, EV_ADD,
+ NOTE_EXIT, 0, NULL);
+ if (kevent(kq, &kev, 1, NULL, 0, NULL) == -1)
+ err(1, "kevent");
+ }
+
+ break;
+ }
+ case EVFILT_PROC: {
+ int status;
+
+ child = kev.ident;
+ status = (int)kev.data;
+ if (WIFEXITED(status)) {
+ if (WEXITSTATUS(status) != 0) {
+ errx(1, "child exited with status %d",
+ WEXITSTATUS(status));
+ }
+ } else if (WIFSIGNALED(status)) {
+ warnx("child %d terminated by signal %d",
+ (pid_t)kev.ident, WTERMSIG(status));
+ }
+ if (waitpid(child, NULL, 0) == -1)
+ err(1, "waitpid");
+ break;
+ }
+ }
+ }
+}
+
+static void
+addrinfo(struct sockaddr_storage *ss, const char *addr)
+{
+ struct addrinfo hints, *res, *res1;
+ char *host, *port;
+ int error;
+
+ host = strdup(addr);
+ if (host == NULL)
+ err(1, "strdup");
+ port = strchr(host, ':');
+ if (port == NULL)
+ errx(1, "invalid address '%s', should be <addr>:<port>", host);
+ *port++ = '\0';
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+ error = getaddrinfo(host, port, &hints, &res);
+ if (error != 0)
+ errx(1, "%s", gai_strerror(error));
+ for (res1 = res; res != NULL; res = res->ai_next) {
+ if (res->ai_protocol == IPPROTO_TCP) {
+ memcpy(ss, res->ai_addr, res->ai_addrlen);
+ break;
+ }
+ }
+ if (res == NULL)
+ errx(1, "no TCP address found for '%s'", host);
+ free(host);
+ freeaddrinfo(res1);
+}
+
+static void
+proxy_init(struct proxy_softc *sc, const char *laddr, const char *taddr,
+ size_t bufsz, enum proxy_mode mode, bool loopback)
+{
+ addrinfo(&sc->lss, laddr);
+ addrinfo(&sc->tss, taddr);
+
+ sc->bufsz = bufsz;
+ sc->mode = mode;
+ sc->loopback = loopback;
+}
+
+int
+main(int argc, char **argv)
+{
+ struct proxy_softc sc;
+ char *laddr, *taddr;
+ size_t bufsz;
+ enum proxy_mode mode;
+ int ch;
+ bool loopback;
+
+ (void)signal(SIGPIPE, SIG_IGN);
+
+ loopback = false;
+ mode = PROXY_MODE_COPY;
+ bufsz = 2 * 1024 * 1024ul;
+ laddr = taddr = NULL;
+ while ((ch = getopt(argc, argv, "Ll:m:s:")) != -1) {
+ switch (ch) {
+ case 'l':
+ laddr = optarg;
+ break;
+ case 'L':
+ loopback = true;
+ break;
+ case 'm':
+ if (strcmp(optarg, "copy") == 0)
+ mode = PROXY_MODE_COPY;
+ else if (strcmp(optarg, "splice") == 0)
+ mode = PROXY_MODE_SPLICE;
+ else
+ usage();
+ break;
+ case 's':
+ bufsz = atoi(optarg);
+ break;
+ default:
+ usage();
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (laddr == NULL || argc != 1)
+ usage();
+ taddr = argv[0];
+
+ /* Marshal command-line parameters into a neat structure. */
+ proxy_init(&sc, laddr, taddr, bufsz, mode, loopback);
+
+ /* Start handling connections. */
+ eventloop(&sc);
+
+ return (0);
+}
diff --git a/tools/tools/sortbench/Makefile b/tools/tools/sortbench/Makefile
index a3a6dc410af1..33d3b73442e8 100644
--- a/tools/tools/sortbench/Makefile
+++ b/tools/tools/sortbench/Makefile
@@ -1,4 +1,3 @@
-
PROG= sort_bench
MAN=
diff --git a/tools/tools/switch_tls/Makefile b/tools/tools/switch_tls/Makefile
index 796b9c5c9c3f..00bb882cc600 100644
--- a/tools/tools/switch_tls/Makefile
+++ b/tools/tools/switch_tls/Makefile
@@ -1,4 +1,3 @@
-
PROG= switch_tls
MAN=
diff --git a/tools/tools/sysdoc/Makefile b/tools/tools/sysdoc/Makefile
index 2dec25afb9a2..e00cdad8ea52 100644
--- a/tools/tools/sysdoc/Makefile
+++ b/tools/tools/sysdoc/Makefile
@@ -1,4 +1,3 @@
-
sysctl.5:
sh ${.CURDIR}/sysdoc.sh -k /boot/kernel
diff --git a/tools/tools/sysdoc/tunables.mdoc b/tools/tools/sysdoc/tunables.mdoc
index 54f6920a22c0..20b59f450cf2 100644
--- a/tools/tools/sysdoc/tunables.mdoc
+++ b/tools/tools/sysdoc/tunables.mdoc
@@ -1272,12 +1272,12 @@ bool
Controls forwarding of source-routed IP packets.
---
-net.inet.ip.check_interface
+net.inet.ip.rfc1122_strong_es
bool
This
.Nm
-verifies that packets arrive on the correct interfaces.
+verifies that the packet's IP destination address matches an address on the arrival interface.
---
net.inet.ip.fastforwarding
diff --git a/tools/tools/tionxcl/Makefile b/tools/tools/tionxcl/Makefile
index 0bb9f733d227..a7987d9e6df6 100644
--- a/tools/tools/tionxcl/Makefile
+++ b/tools/tools/tionxcl/Makefile
@@ -1,4 +1,3 @@
-
PROG= tionxcl
MAN=
diff --git a/tools/tools/track/Makefile b/tools/tools/track/Makefile
index c494c7375a49..c5acc6e28036 100644
--- a/tools/tools/track/Makefile
+++ b/tools/tools/track/Makefile
@@ -1,4 +1,3 @@
-
PREFIX?= /usr/local
BINDIR?= ${PREFIX}/bin
SCRIPTS= track.sh
diff --git a/tools/tools/tscdrift/Makefile b/tools/tools/tscdrift/Makefile
index 190bb4ecee3d..28d9493643f9 100644
--- a/tools/tools/tscdrift/Makefile
+++ b/tools/tools/tscdrift/Makefile
@@ -1,4 +1,3 @@
-
PROG= tscdrift
MAN=
diff --git a/tools/tools/umastat/Makefile b/tools/tools/umastat/Makefile
index 97ac4cdb32ce..29c128b6a868 100644
--- a/tools/tools/umastat/Makefile
+++ b/tools/tools/umastat/Makefile
@@ -1,4 +1,3 @@
-
PROG= umastat
MAN=
WARNS?= 3
diff --git a/tools/tools/vhba/vhba.h b/tools/tools/vhba/vhba.h
index d6b32b10b56d..be00779bcb5d 100644
--- a/tools/tools/vhba/vhba.h
+++ b/tools/tools/vhba/vhba.h
@@ -38,12 +38,12 @@
#include <sys/taskqueue.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
+#include <sys/stdarg.h>
#include <sys/proc.h>
#include <machine/bus.h>
#include <machine/cpu.h>
-#include <machine/stdarg.h>
#include <cam/cam.h>
#include <cam/cam_debug.h>
diff --git a/tools/tools/vimage/Makefile b/tools/tools/vimage/Makefile
index a52562abfd60..0536413b26f0 100644
--- a/tools/tools/vimage/Makefile
+++ b/tools/tools/vimage/Makefile
@@ -1,4 +1,3 @@
-
PROG= vimage
LIBADD= jail
diff --git a/tools/tools/vt/mkkfont/Makefile b/tools/tools/vt/mkkfont/Makefile
index 3044eff66c36..f9758be0ef15 100644
--- a/tools/tools/vt/mkkfont/Makefile
+++ b/tools/tools/vt/mkkfont/Makefile
@@ -1,4 +1,3 @@
-
PROG= mkkfont
MAN1=
diff --git a/tools/tools/vt/mkkfont/mkkfont.c b/tools/tools/vt/mkkfont/mkkfont.c
index 3f92f926c029..ec4675cfcf1b 100644
--- a/tools/tools/vt/mkkfont/mkkfont.c
+++ b/tools/tools/vt/mkkfont/mkkfont.c
@@ -1,6 +1,5 @@
/*-
* Copyright (c) 2009 The FreeBSD Foundation
- * All rights reserved.
*
* This software was developed by Ed Schouten under sponsorship from the
* FreeBSD Foundation.
diff --git a/tools/tools/whereintheworld/Makefile b/tools/tools/whereintheworld/Makefile
index 374a2196df11..96e3d7eabe37 100644
--- a/tools/tools/whereintheworld/Makefile
+++ b/tools/tools/whereintheworld/Makefile
@@ -1,4 +1,3 @@
-
SCRIPTS= whereintheworld.pl
.include <bsd.prog.mk>
diff --git a/tools/tools/wtap/Makefile b/tools/tools/wtap/Makefile
index e34cb2e325a1..24768af795e1 100644
--- a/tools/tools/wtap/Makefile
+++ b/tools/tools/wtap/Makefile
@@ -1,4 +1,3 @@
-
SUBDIR= wtap vis_map
.include <bsd.subdir.mk>
diff --git a/tools/tools/wtap/vis_map/Makefile b/tools/tools/wtap/vis_map/Makefile
index 41c1c643754b..4510ccc6ae76 100644
--- a/tools/tools/wtap/vis_map/Makefile
+++ b/tools/tools/wtap/vis_map/Makefile
@@ -1,4 +1,3 @@
-
BINDIR?= /usr/local/bin/
PROG= vis_map
SRC= vis_map.c
diff --git a/tools/tools/wtap/wtap/Makefile b/tools/tools/wtap/wtap/Makefile
index 9cc83c77d04d..9d66f6d64368 100644
--- a/tools/tools/wtap/wtap/Makefile
+++ b/tools/tools/wtap/wtap/Makefile
@@ -1,4 +1,3 @@
-
BINDIR?= /usr/local/bin
PROG= wtap
SRC= wtap.c
diff --git a/tools/tools/zfsboottest/Makefile b/tools/tools/zfsboottest/Makefile
index cc8f0ab78606..458e39aab6c7 100644
--- a/tools/tools/zfsboottest/Makefile
+++ b/tools/tools/zfsboottest/Makefile
@@ -1,4 +1,3 @@
-
.PATH: ${SRCTOP}/stand/zfs ${SRCTOP}/sys/cddl/boot/zfs
BINDIR?= /usr/bin
diff --git a/tools/uma/smrstress/smrstress.c b/tools/uma/smrstress/smrstress.c
index 2d6566c6e6dc..41fa11b4364c 100644
--- a/tools/uma/smrstress/smrstress.c
+++ b/tools/uma/smrstress/smrstress.c
@@ -37,11 +37,10 @@
#include <sys/mbuf.h>
#include <sys/smp.h>
#include <sys/smr.h>
+#include <sys/stdarg.h>
#include <vm/uma.h>
-#include <machine/stdarg.h>
-
static uma_zone_t smrs_zone;
static smr_t smrs_smr;