aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/LibraryReport/LibraryReport.tcl1
-rw-r--r--tools/README1
-rw-r--r--tools/boot/TEST-NOTES22
-rwxr-xr-xtools/boot/ci-qemu-test.sh26
-rw-r--r--tools/boot/full-test.readme37
-rw-r--r--tools/boot/full-test.sh668
-rwxr-xr-xtools/boot/install-boot.sh89
-rwxr-xr-xtools/boot/lua-img.sh1
-rwxr-xr-xtools/boot/lua-lint.sh3
-rwxr-xr-xtools/boot/lua-test.sh1
-rwxr-xr-xtools/boot/rootgen.sh438
-rw-r--r--tools/boot/smbios/Makefile9
-rw-r--r--tools/boot/smbios/main.c96
-rw-r--r--tools/boot/smbios/stand.h18
-rwxr-xr-xtools/boot/universe.sh42
-rw-r--r--tools/bsdbox/Makefile11
-rw-r--r--tools/bsdbox/Makefile.base4
-rw-r--r--tools/bsdbox/Makefile.depend1
-rw-r--r--tools/bsdbox/Makefile.fs1
-rw-r--r--tools/bsdbox/Makefile.hostapd27
-rw-r--r--tools/bsdbox/Makefile.kld1
-rw-r--r--tools/bsdbox/Makefile.login1
-rw-r--r--tools/bsdbox/Makefile.net2
-rw-r--r--tools/bsdbox/Makefile.telnetd14
-rw-r--r--tools/bsdbox/Makefile.textproc1
-rw-r--r--tools/bsdbox/README1
-rw-r--r--tools/build/Makefile192
-rw-r--r--tools/build/Makefile.depend1
-rwxr-xr-xtools/build/absolute-symlink.sh49
-rwxr-xr-xtools/build/beinstall.sh20
-rw-r--r--tools/build/bootstrap-m4/Makefile2
-rw-r--r--tools/build/bootstrap-m4/inittokenizer.c2
-rwxr-xr-xtools/build/check-links.sh1
-rwxr-xr-xtools/build/checkstyle9.pl2677
-rw-r--r--tools/build/cross-build/Makefile2
-rw-r--r--tools/build/cross-build/capsicum_stubs.c2
-rw-r--r--tools/build/cross-build/date.sh1
-rw-r--r--tools/build/cross-build/fake_chflags/Makefile2
-rw-r--r--tools/build/cross-build/fake_chflags/chflags1
-rw-r--r--tools/build/cross-build/fake_sysctl.c3
-rw-r--r--tools/build/cross-build/fgetln_fallback.c2
-rw-r--r--tools/build/cross-build/hostname.sh1
-rw-r--r--tools/build/cross-build/include/common/db.h2
-rw-r--r--tools/build/cross-build/include/common/exterr.h14
-rw-r--r--tools/build/cross-build/include/common/getopt.h2
-rw-r--r--tools/build/cross-build/include/common/grp.h2
-rw-r--r--tools/build/cross-build/include/common/libcasper.h2
-rw-r--r--tools/build/cross-build/include/common/libelf.h2
-rw-r--r--tools/build/cross-build/include/common/libutil.h4
-rw-r--r--tools/build/cross-build/include/common/machine/endian.h2
-rw-r--r--tools/build/cross-build/include/common/netconfig.h2
-rw-r--r--tools/build/cross-build/include/common/netdb.h2
-rw-r--r--tools/build/cross-build/include/common/osreldate.h2
-rw-r--r--tools/build/cross-build/include/common/pwd.h2
-rw-r--r--tools/build/cross-build/include/common/ssp/ssp.h34
-rw-r--r--tools/build/cross-build/include/common/string.h2
-rw-r--r--tools/build/cross-build/include/common/sys/_iovec.h2
-rw-r--r--tools/build/cross-build/include/common/sys/_null.h2
-rw-r--r--tools/build/cross-build/include/common/sys/_types.h8
-rw-r--r--tools/build/cross-build/include/common/sys/cdefs.h15
-rw-r--r--tools/build/cross-build/include/common/sys/ctype.h2
-rw-r--r--tools/build/cross-build/include/common/sys/exterrvar.h6
-rw-r--r--tools/build/cross-build/include/common/sys/limits.h2
-rw-r--r--tools/build/cross-build/include/common/sys/mman.h2
-rw-r--r--tools/build/cross-build/include/common/sys/param.h2
-rw-r--r--tools/build/cross-build/include/common/sys/stdint.h2
-rw-r--r--tools/build/cross-build/include/common/sys/sysctl.h2
-rw-r--r--tools/build/cross-build/include/common/sys/types.h6
-rw-r--r--tools/build/cross-build/include/common/unistd.h2
-rw-r--r--tools/build/cross-build/include/linux/__unused_workaround_end.h2
-rw-r--r--tools/build/cross-build/include/linux/__unused_workaround_start.h2
-rw-r--r--tools/build/cross-build/include/linux/__used_workaround_end.h2
-rw-r--r--tools/build/cross-build/include/linux/__used_workaround_start.h2
-rw-r--r--tools/build/cross-build/include/linux/ctype.h2
-rw-r--r--tools/build/cross-build/include/linux/endian.h2
-rw-r--r--tools/build/cross-build/include/linux/errno.h2
-rw-r--r--tools/build/cross-build/include/linux/fcntl.h9
-rw-r--r--tools/build/cross-build/include/linux/libutil.h5
-rw-r--r--tools/build/cross-build/include/linux/limits.h7
-rw-r--r--tools/build/cross-build/include/linux/nbtool_config.h2
-rw-r--r--tools/build/cross-build/include/linux/netdb.h2
-rw-r--r--tools/build/cross-build/include/linux/regex.h2
-rw-r--r--tools/build/cross-build/include/linux/resolv.h2
-rw-r--r--tools/build/cross-build/include/linux/signal.h2
-rw-r--r--tools/build/cross-build/include/linux/spawn.h2
-rw-r--r--tools/build/cross-build/include/linux/stdio.h2
-rw-r--r--tools/build/cross-build/include/linux/stdlib.h2
-rw-r--r--tools/build/cross-build/include/linux/string.h7
-rw-r--r--tools/build/cross-build/include/linux/strings.h (renamed from tools/build/cross-build/fflags.c)44
-rw-r--r--tools/build/cross-build/include/linux/sys/disk.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/endian.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/filio.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/ioccom.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/mount.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/param.h4
-rw-r--r--tools/build/cross-build/include/linux/sys/stat.h30
-rw-r--r--tools/build/cross-build/include/linux/sys/time.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/ttycom.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/types.h30
-rw-r--r--tools/build/cross-build/include/linux/sys/ucred.h2
-rw-r--r--tools/build/cross-build/include/linux/time.h2
-rw-r--r--tools/build/cross-build/include/linux/unistd.h12
-rw-r--r--tools/build/cross-build/include/linux/wctype.h2
-rw-r--r--tools/build/cross-build/include/mac/endian.h7
-rw-r--r--tools/build/cross-build/include/mac/libutil.h2
-rw-r--r--tools/build/cross-build/include/mac/nbtool_config.h2
-rw-r--r--tools/build/cross-build/include/mac/signal.h2
-rw-r--r--tools/build/cross-build/include/mac/stdlib.h3
-rw-r--r--tools/build/cross-build/include/mac/string.h9
-rw-r--r--tools/build/cross-build/include/mac/sys/_types.h4
-rw-r--r--tools/build/cross-build/include/mac/sys/endian.h2
-rw-r--r--tools/build/cross-build/include/mac/sys/linker_set.h140
-rw-r--r--tools/build/cross-build/include/mac/sys/stat.h2
-rw-r--r--tools/build/cross-build/include/mac/sys/time.h2
-rw-r--r--tools/build/cross-build/include/mac/unistd.h2
-rw-r--r--tools/build/cross-build/mkimg/Makefile2
-rw-r--r--tools/build/cross-build/mkimg/Makefile.depend1
-rw-r--r--tools/build/cross-build/progname.c4
-rw-r--r--tools/build/cross-build/secure_getenv.c16
-rwxr-xr-xtools/build/depend-cleanup.sh476
-rw-r--r--tools/build/dummy.c1
-rw-r--r--tools/build/fcntl.h2
-rwxr-xr-xtools/build/freebsd-yeet.pl147
-rw-r--r--tools/build/fspacectl.c2
-rw-r--r--tools/build/futimens.c2
-rw-r--r--tools/build/libc-bootstrap/libc_private.h2
-rw-r--r--tools/build/libc-bootstrap/namespace.h2
-rw-r--r--tools/build/libc-bootstrap/un-namespace.h2
-rwxr-xr-xtools/build/make.py175
-rw-r--r--tools/build/make_check/Makefile22
-rw-r--r--tools/build/make_check/check.mk1
-rw-r--r--tools/build/make_check/regress.t1
-rw-r--r--tools/build/make_check/shell_test.sh1
-rw-r--r--tools/build/mk/Makefile.boot12
-rw-r--r--tools/build/mk/Makefile.boot.pre2
-rw-r--r--tools/build/mk/OptionalObsoleteFiles.inc3070
-rw-r--r--tools/build/mk/bsd.lib.mk1
-rw-r--r--tools/build/mk/bsd.prog.mk1
-rw-r--r--tools/build/options/INIT_ALL21
-rw-r--r--tools/build/options/LIBC_MALLOC13
-rw-r--r--tools/build/options/WITHOUT_ACCT1
-rw-r--r--tools/build/options/WITHOUT_ACPI1
-rw-r--r--tools/build/options/WITHOUT_APM1
-rw-r--r--tools/build/options/WITHOUT_ASSERT_DEBUG1
-rw-r--r--tools/build/options/WITHOUT_AT1
-rw-r--r--tools/build/options/WITHOUT_ATM3
-rw-r--r--tools/build/options/WITHOUT_AUDIT1
-rw-r--r--tools/build/options/WITHOUT_AUTHPF1
-rw-r--r--tools/build/options/WITHOUT_AUTOFS3
-rw-r--r--tools/build/options/WITHOUT_AUTO_OBJ1
-rw-r--r--tools/build/options/WITHOUT_BHYVE3
-rw-r--r--tools/build/options/WITHOUT_BIND_NOW1
-rw-r--r--tools/build/options/WITHOUT_BLACKLIST1
-rw-r--r--tools/build/options/WITHOUT_BLACKLIST_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_BLUETOOTH1
-rw-r--r--tools/build/options/WITHOUT_BOOT1
-rw-r--r--tools/build/options/WITHOUT_BOOTPARAMD1
-rw-r--r--tools/build/options/WITHOUT_BOOTPD1
-rw-r--r--tools/build/options/WITHOUT_BRANCH_PROTECTION1
-rw-r--r--tools/build/options/WITHOUT_BSDINSTALL1
-rw-r--r--tools/build/options/WITHOUT_BSD_CPIO1
-rw-r--r--tools/build/options/WITHOUT_BSNMP1
-rw-r--r--tools/build/options/WITHOUT_BZIP21
-rw-r--r--tools/build/options/WITHOUT_BZIP2_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_CALENDAR1
-rw-r--r--tools/build/options/WITHOUT_CAPSICUM2
-rw-r--r--tools/build/options/WITHOUT_CAROOT1
-rw-r--r--tools/build/options/WITHOUT_CASPER3
-rw-r--r--tools/build/options/WITHOUT_CCD1
-rw-r--r--tools/build/options/WITHOUT_CDDL1
-rw-r--r--tools/build/options/WITHOUT_CLANG1
-rw-r--r--tools/build/options/WITHOUT_CLANG_BOOTSTRAP1
-rw-r--r--tools/build/options/WITHOUT_CLANG_FULL1
-rw-r--r--tools/build/options/WITHOUT_CLANG_IS_CC6
-rw-r--r--tools/build/options/WITHOUT_CLEAN1
-rw-r--r--tools/build/options/WITHOUT_CPP1
-rw-r--r--tools/build/options/WITHOUT_CROSS_COMPILER1
-rw-r--r--tools/build/options/WITHOUT_CRYPT1
-rw-r--r--tools/build/options/WITHOUT_CUSE1
-rw-r--r--tools/build/options/WITHOUT_CXGBETOOL1
-rw-r--r--tools/build/options/WITHOUT_CXX4
-rw-r--r--tools/build/options/WITHOUT_DEBUG_FILES1
-rw-r--r--tools/build/options/WITHOUT_DIALOG1
-rw-r--r--tools/build/options/WITHOUT_DICT1
-rw-r--r--tools/build/options/WITHOUT_DMAGENT1
-rw-r--r--tools/build/options/WITHOUT_DOCCOMPRESS1
-rw-r--r--tools/build/options/WITHOUT_DTRACE1
-rw-r--r--tools/build/options/WITHOUT_DYNAMICROOT1
-rw-r--r--tools/build/options/WITHOUT_EE1
-rw-r--r--tools/build/options/WITHOUT_EFI1
-rw-r--r--tools/build/options/WITHOUT_ELFTOOLCHAIN_BOOTSTRAP1
-rw-r--r--tools/build/options/WITHOUT_EXAMPLES1
-rw-r--r--tools/build/options/WITHOUT_FDT1
-rw-r--r--tools/build/options/WITHOUT_FILE1
-rw-r--r--tools/build/options/WITHOUT_FINGER1
-rw-r--r--tools/build/options/WITHOUT_FLOPPY1
-rw-r--r--tools/build/options/WITHOUT_FORMAT_EXTENSIONS1
-rw-r--r--tools/build/options/WITHOUT_FORTH1
-rw-r--r--tools/build/options/WITHOUT_FP_LIBC1
-rw-r--r--tools/build/options/WITHOUT_FREEBSD_UPDATE1
-rw-r--r--tools/build/options/WITHOUT_FTP1
-rw-r--r--tools/build/options/WITHOUT_GAMES1
-rw-r--r--tools/build/options/WITHOUT_GCC1
-rw-r--r--tools/build/options/WITHOUT_GCC_BOOTSTRAP1
-rw-r--r--tools/build/options/WITHOUT_GCOV1
-rw-r--r--tools/build/options/WITHOUT_GDB1
-rw-r--r--tools/build/options/WITHOUT_GH_BC6
-rw-r--r--tools/build/options/WITHOUT_GNU_DIFF6
-rw-r--r--tools/build/options/WITHOUT_GOOGLETEST1
-rw-r--r--tools/build/options/WITHOUT_GPIO1
-rw-r--r--tools/build/options/WITHOUT_GSSAPI2
-rw-r--r--tools/build/options/WITHOUT_HAST1
-rw-r--r--tools/build/options/WITHOUT_HTML1
-rw-r--r--tools/build/options/WITHOUT_HYPERV1
-rw-r--r--tools/build/options/WITHOUT_ICONV1
-rw-r--r--tools/build/options/WITHOUT_INCLUDES1
-rw-r--r--tools/build/options/WITHOUT_INET1
-rw-r--r--tools/build/options/WITHOUT_INET61
-rw-r--r--tools/build/options/WITHOUT_INET6_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_INETD1
-rw-r--r--tools/build/options/WITHOUT_INET_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_INFO1
-rw-r--r--tools/build/options/WITHOUT_INSTALLLIB1
-rw-r--r--tools/build/options/WITHOUT_IPFILTER1
-rw-r--r--tools/build/options/WITHOUT_IPFW1
-rw-r--r--tools/build/options/WITHOUT_IPSEC_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_ISCSI1
-rw-r--r--tools/build/options/WITHOUT_JAIL1
-rw-r--r--tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE5
-rw-r--r--tools/build/options/WITHOUT_KDUMP1
-rw-r--r--tools/build/options/WITHOUT_KERBEROS3
-rw-r--r--tools/build/options/WITHOUT_KERBEROS_SUPPORT4
-rw-r--r--tools/build/options/WITHOUT_KERNEL_RETPOLINE1
-rw-r--r--tools/build/options/WITHOUT_KERNEL_SYMBOLS1
-rw-r--r--tools/build/options/WITHOUT_KVM1
-rw-r--r--tools/build/options/WITHOUT_KVM_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_LDNS1
-rw-r--r--tools/build/options/WITHOUT_LDNS_UTILS1
-rw-r--r--tools/build/options/WITHOUT_LEGACY_CONSOLE1
-rw-r--r--tools/build/options/WITHOUT_LIB321
-rw-r--r--tools/build/options/WITHOUT_LLD1
-rw-r--r--tools/build/options/WITHOUT_LLDB1
-rw-r--r--tools/build/options/WITHOUT_LLD_BOOTSTRAP1
-rw-r--r--tools/build/options/WITHOUT_LLD_IS_LD7
-rw-r--r--tools/build/options/WITHOUT_LLVM_ASSERTIONS1
-rw-r--r--tools/build/options/WITHOUT_LLVM_BINUTILS17
-rw-r--r--tools/build/options/WITHOUT_LLVM_COV1
-rw-r--r--tools/build/options/WITHOUT_LLVM_CXXFILT1
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_AARCH641
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_ALL1
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_ARM1
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_MIPS1
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_POWERPC1
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_RISCV1
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_SPARC5
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_X861
-rw-r--r--tools/build/options/WITHOUT_LOADER_BIOS_TEXTONLY2
-rw-r--r--tools/build/options/WITHOUT_LOADER_GELI1
-rw-r--r--tools/build/options/WITHOUT_LOADER_IA321
-rw-r--r--tools/build/options/WITHOUT_LOADER_LUA1
-rw-r--r--tools/build/options/WITHOUT_LOADER_OFW1
-rw-r--r--tools/build/options/WITHOUT_LOADER_PXEBOOT10
-rw-r--r--tools/build/options/WITHOUT_LOADER_UBOOT1
-rw-r--r--tools/build/options/WITHOUT_LOADER_ZFS1
-rw-r--r--tools/build/options/WITHOUT_LOCALES1
-rw-r--r--tools/build/options/WITHOUT_LOCATE1
-rw-r--r--tools/build/options/WITHOUT_LPR1
-rw-r--r--tools/build/options/WITHOUT_LS_COLORS1
-rw-r--r--tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS1
-rw-r--r--tools/build/options/WITHOUT_MAIL1
-rw-r--r--tools/build/options/WITHOUT_MAILWRAPPER1
-rw-r--r--tools/build/options/WITHOUT_MAKE1
-rw-r--r--tools/build/options/WITHOUT_MAKE_CHECK_USE_SANDBOX1
-rw-r--r--tools/build/options/WITHOUT_MALLOC_PRODUCTION8
-rw-r--r--tools/build/options/WITHOUT_MAN1
-rw-r--r--tools/build/options/WITHOUT_MANCOMPRESS1
-rw-r--r--tools/build/options/WITHOUT_MANSPLITPKG1
-rw-r--r--tools/build/options/WITHOUT_MAN_UTILS1
-rw-r--r--tools/build/options/WITHOUT_MITKRB51
-rw-r--r--tools/build/options/WITHOUT_MLX5TOOL1
-rw-r--r--tools/build/options/WITHOUT_MODULE_DRM1
-rw-r--r--tools/build/options/WITHOUT_MODULE_DRM21
-rw-r--r--tools/build/options/WITHOUT_NCP1
-rw-r--r--tools/build/options/WITHOUT_NETCAT1
-rw-r--r--tools/build/options/WITHOUT_NETGRAPH1
-rw-r--r--tools/build/options/WITHOUT_NETGRAPH_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_NETLINK3
-rw-r--r--tools/build/options/WITHOUT_NETLINK_SUPPORT4
-rw-r--r--tools/build/options/WITHOUT_NIS1
-rw-r--r--tools/build/options/WITHOUT_NLS1
-rw-r--r--tools/build/options/WITHOUT_NLS_CATALOGS1
-rw-r--r--tools/build/options/WITHOUT_NS_CACHING1
-rw-r--r--tools/build/options/WITHOUT_NTP1
-rw-r--r--tools/build/options/WITHOUT_NUAGEINIT1
-rw-r--r--tools/build/options/WITHOUT_NVME2
-rw-r--r--tools/build/options/WITHOUT_OFED5
-rw-r--r--tools/build/options/WITHOUT_OPENMP1
-rw-r--r--tools/build/options/WITHOUT_OPENSSH1
-rw-r--r--tools/build/options/WITHOUT_OPENSSL1
-rw-r--r--tools/build/options/WITHOUT_PAM1
-rw-r--r--tools/build/options/WITHOUT_PAM_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_PF1
-rw-r--r--tools/build/options/WITHOUT_PIE1
-rw-r--r--tools/build/options/WITHOUT_PKGBOOTSTRAP1
-rw-r--r--tools/build/options/WITHOUT_PMC1
-rw-r--r--tools/build/options/WITHOUT_PORTSNAP4
-rw-r--r--tools/build/options/WITHOUT_PPP1
-rw-r--r--tools/build/options/WITHOUT_PROFILE1
-rw-r--r--tools/build/options/WITHOUT_PTHREADS_ASSERTIONS1
-rw-r--r--tools/build/options/WITHOUT_QUOTAS1
-rw-r--r--tools/build/options/WITHOUT_RADIUS_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_RBOOTD1
-rw-r--r--tools/build/options/WITHOUT_REPRODUCIBLE_BUILD1
-rw-r--r--tools/build/options/WITHOUT_RESCUE1
-rw-r--r--tools/build/options/WITHOUT_RETPOLINE1
-rw-r--r--tools/build/options/WITHOUT_ROUTED1
-rw-r--r--tools/build/options/WITHOUT_SCTP_SUPPORT4
-rw-r--r--tools/build/options/WITHOUT_SENDMAIL1
-rw-r--r--tools/build/options/WITHOUT_SERVICESDB1
-rw-r--r--tools/build/options/WITHOUT_SETUID_LOGIN1
-rw-r--r--tools/build/options/WITHOUT_SHAREDOCS1
-rw-r--r--tools/build/options/WITHOUT_SHARED_TOOLCHAIN6
-rw-r--r--tools/build/options/WITHOUT_SOURCELESS1
-rw-r--r--tools/build/options/WITHOUT_SOURCELESS_HOST1
-rw-r--r--tools/build/options/WITHOUT_SOURCELESS_UCODE1
-rw-r--r--tools/build/options/WITHOUT_SSP6
-rw-r--r--tools/build/options/WITHOUT_STATS1
-rw-r--r--tools/build/options/WITHOUT_SYSCONS1
-rw-r--r--tools/build/options/WITHOUT_SYSTEM_COMPILER1
-rw-r--r--tools/build/options/WITHOUT_SYSTEM_LINKER1
-rw-r--r--tools/build/options/WITHOUT_TALK1
-rw-r--r--tools/build/options/WITHOUT_TCP_WRAPPERS1
-rw-r--r--tools/build/options/WITHOUT_TCSH1
-rw-r--r--tools/build/options/WITHOUT_TELNET1
-rw-r--r--tools/build/options/WITHOUT_TESTS1
-rw-r--r--tools/build/options/WITHOUT_TESTS_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_TEXTPROC1
-rw-r--r--tools/build/options/WITHOUT_TFTP1
-rw-r--r--tools/build/options/WITHOUT_TOOLCHAIN3
-rw-r--r--tools/build/options/WITHOUT_UNBOUND1
-rw-r--r--tools/build/options/WITHOUT_UNIFIED_OBJDIR1
-rw-r--r--tools/build/options/WITHOUT_USB1
-rw-r--r--tools/build/options/WITHOUT_USB_GADGET_EXAMPLES1
-rw-r--r--tools/build/options/WITHOUT_UTMPX1
-rw-r--r--tools/build/options/WITHOUT_VI1
-rw-r--r--tools/build/options/WITHOUT_VT1
-rw-r--r--tools/build/options/WITHOUT_WARNS1
-rw-r--r--tools/build/options/WITHOUT_WERROR1
-rw-r--r--tools/build/options/WITHOUT_WIRELESS1
-rw-r--r--tools/build/options/WITHOUT_WIRELESS_SUPPORT1
-rw-r--r--tools/build/options/WITHOUT_WPA_SUPPLICANT_EAPOL1
-rw-r--r--tools/build/options/WITHOUT_ZEROREGS2
-rw-r--r--tools/build/options/WITHOUT_ZFS1
-rw-r--r--tools/build/options/WITHOUT_ZFS_TESTS1
-rw-r--r--tools/build/options/WITHOUT_ZONEINFO1
-rw-r--r--tools/build/options/WITH_AUTO_OBJ1
-rw-r--r--tools/build/options/WITH_BEARSSL20
-rw-r--r--tools/build/options/WITH_BHYVE_SNAPSHOT1
-rw-r--r--tools/build/options/WITH_BIND_NOW1
-rw-r--r--tools/build/options/WITH_BRANCH_PROTECTION4
-rw-r--r--tools/build/options/WITH_CCACHE_BUILD8
-rw-r--r--tools/build/options/WITH_CLANG1
-rw-r--r--tools/build/options/WITH_CLANG_BOOTSTRAP1
-rw-r--r--tools/build/options/WITH_CLANG_EXTRAS1
-rw-r--r--tools/build/options/WITH_CLANG_FORMAT1
-rw-r--r--tools/build/options/WITH_CLANG_FULL1
-rw-r--r--tools/build/options/WITH_CLANG_IS_CC6
-rw-r--r--tools/build/options/WITH_CLEAN4
-rw-r--r--tools/build/options/WITH_CTF1
-rw-r--r--tools/build/options/WITH_CXGBETOOL1
-rw-r--r--tools/build/options/WITH_CXX1
-rw-r--r--tools/build/options/WITH_DEBUG_FILES1
-rw-r--r--tools/build/options/WITH_DETECT_TZ_CHANGES1
-rw-r--r--tools/build/options/WITH_DIALOG6
-rw-r--r--tools/build/options/WITH_DIRDEPS_BUILD10
-rw-r--r--tools/build/options/WITH_DIRDEPS_CACHE1
-rw-r--r--tools/build/options/WITH_DISK_IMAGE_TOOLS_BOOTSTRAP6
-rw-r--r--tools/build/options/WITH_DTRACE_ASAN4
-rw-r--r--tools/build/options/WITH_DTRACE_TESTS1
-rw-r--r--tools/build/options/WITH_EFI1
-rw-r--r--tools/build/options/WITH_EXPERIMENTAL1
-rw-r--r--tools/build/options/WITH_EXTRA_TCP_STACKS2
-rw-r--r--tools/build/options/WITH_FDT1
-rw-r--r--tools/build/options/WITH_GCC1
-rw-r--r--tools/build/options/WITH_GCC_BOOTSTRAP1
-rw-r--r--tools/build/options/WITH_GCOV1
-rw-r--r--tools/build/options/WITH_GDB1
-rw-r--r--tools/build/options/WITH_GH_BC1
-rw-r--r--tools/build/options/WITH_GNU_DIFF3
-rw-r--r--tools/build/options/WITH_GOOGLETEST1
-rw-r--r--tools/build/options/WITH_HESIOD1
-rw-r--r--tools/build/options/WITH_HYPERV1
-rw-r--r--tools/build/options/WITH_INIT_ALL_PATTERN5
-rw-r--r--tools/build/options/WITH_INIT_ALL_ZERO4
-rw-r--r--tools/build/options/WITH_INSTALL_AS_USER1
-rw-r--r--tools/build/options/WITH_KERNEL_BIN8
-rw-r--r--tools/build/options/WITH_KERNEL_RETPOLINE1
-rw-r--r--tools/build/options/WITH_LIB323
-rw-r--r--tools/build/options/WITH_LIBSOFT1
-rw-r--r--tools/build/options/WITH_LLD1
-rw-r--r--tools/build/options/WITH_LLDB1
-rw-r--r--tools/build/options/WITH_LLD_BOOTSTRAP1
-rw-r--r--tools/build/options/WITH_LLD_IS_LD2
-rw-r--r--tools/build/options/WITH_LLVM_ASSERTIONS1
-rw-r--r--tools/build/options/WITH_LLVM_BINUTILS20
-rw-r--r--tools/build/options/WITH_LLVM_COV1
-rw-r--r--tools/build/options/WITH_LLVM_CXXFILT1
-rw-r--r--tools/build/options/WITH_LLVM_FULL_DEBUGINFO2
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_AARCH641
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_ALL1
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_ARM1
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_BPF1
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_MIPS1
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_POWERPC1
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_RISCV1
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_SPARC5
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_X861
-rw-r--r--tools/build/options/WITH_LOADER_EFI_SECUREBOOT1
-rw-r--r--tools/build/options/WITH_LOADER_FIREWIRE3
-rw-r--r--tools/build/options/WITH_LOADER_GELI1
-rw-r--r--tools/build/options/WITH_LOADER_IA321
-rw-r--r--tools/build/options/WITH_LOADER_LUA1
-rw-r--r--tools/build/options/WITH_LOADER_OFW1
-rw-r--r--tools/build/options/WITH_LOADER_PXEBOOT25
-rw-r--r--tools/build/options/WITH_LOADER_UBOOT1
-rw-r--r--tools/build/options/WITH_LOADER_VERBOSE1
-rw-r--r--tools/build/options/WITH_LOADER_VERIEXEC3
-rw-r--r--tools/build/options/WITH_LOADER_VERIEXEC_PASS_MANIFEST1
-rw-r--r--tools/build/options/WITH_LOADER_VERIEXEC_VECTX7
-rw-r--r--tools/build/options/WITH_MALLOC_PRODUCTION8
-rw-r--r--tools/build/options/WITH_MANSPLITPKG1
-rw-r--r--tools/build/options/WITH_META_ERROR_TARGET13
-rw-r--r--tools/build/options/WITH_META_MODE1
-rw-r--r--tools/build/options/WITH_MITKRB51
-rw-r--r--tools/build/options/WITH_MLX5TOOL1
-rw-r--r--tools/build/options/WITH_MODULE_DRM1
-rw-r--r--tools/build/options/WITH_MODULE_DRM21
-rw-r--r--tools/build/options/WITH_NETLINK3
-rw-r--r--tools/build/options/WITH_NETLINK_SUPPORT4
-rw-r--r--tools/build/options/WITH_NVME2
-rw-r--r--tools/build/options/WITH_OFED3
-rw-r--r--tools/build/options/WITH_OFED_EXTRA1
-rw-r--r--tools/build/options/WITH_OPENLDAP1
-rw-r--r--tools/build/options/WITH_OPENMP1
-rw-r--r--tools/build/options/WITH_PIE1
-rw-r--r--tools/build/options/WITH_PROFILE1
-rw-r--r--tools/build/options/WITH_RATELIMIT1
-rw-r--r--tools/build/options/WITH_REPRODUCIBLE_BUILD1
-rw-r--r--tools/build/options/WITH_RETPOLINE1
-rw-r--r--tools/build/options/WITH_RPCBIND_WARMSTART_SUPPORT1
-rw-r--r--tools/build/options/WITH_RUN_TESTS1
-rw-r--r--tools/build/options/WITH_SENDMAIL1
-rw-r--r--tools/build/options/WITH_SHARED_TOOLCHAIN6
-rw-r--r--tools/build/options/WITH_SORT_THREADS1
-rw-r--r--tools/build/options/WITH_SSP6
-rw-r--r--tools/build/options/WITH_STAGING1
-rw-r--r--tools/build/options/WITH_STAGING_MAN1
-rw-r--r--tools/build/options/WITH_STAGING_PROG1
-rw-r--r--tools/build/options/WITH_STALE_STAGED1
-rw-r--r--tools/build/options/WITH_STATS1
-rw-r--r--tools/build/options/WITH_SYSROOT1
-rw-r--r--tools/build/options/WITH_SYSTEM_COMPILER1
-rw-r--r--tools/build/options/WITH_SYSTEM_LINKER1
-rw-r--r--tools/build/options/WITH_TCP_WRAPPERS1
-rw-r--r--tools/build/options/WITH_TOOLCHAIN2
-rw-r--r--tools/build/options/WITH_UNDEFINED_VERSION4
-rw-r--r--tools/build/options/WITH_UNIFIED_OBJDIR1
-rw-r--r--tools/build/options/WITH_USB_GADGET_EXAMPLES1
-rw-r--r--tools/build/options/WITH_VERIEXEC1
-rw-r--r--tools/build/options/WITH_ZEROREGS4
-rw-r--r--tools/build/options/WITH_ZFS3
-rw-r--r--tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT6
-rw-r--r--tools/build/options/WITH_ZONEINFO_OLD_TIMEZONES_SUPPORT1
-rwxr-xr-xtools/build/options/makeman133
-rw-r--r--tools/build/options/makeman.lua791
-rwxr-xr-xtools/build/stale-symlink-buildworld.sh64
-rw-r--r--tools/build/stat.h2
-rw-r--r--tools/build/stdlib.h2
-rw-r--r--tools/build/strings.h2
-rw-r--r--tools/build/test-includes/Makefile7
-rw-r--r--tools/build/test-includes/badfiles.inc22
-rw-r--r--tools/build/utimensat.c2
-rw-r--r--tools/bus_space/C/Makefile2
-rw-r--r--tools/bus_space/C/lang.c3
-rw-r--r--tools/bus_space/C/libbus.h2
-rw-r--r--tools/bus_space/Makefile2
-rw-r--r--tools/bus_space/Makefile.inc2
-rw-r--r--tools/bus_space/Python/Makefile2
-rw-r--r--tools/bus_space/Python/lang.c2
-rw-r--r--tools/bus_space/bus.c2
-rw-r--r--tools/bus_space/bus.h2
-rw-r--r--tools/bus_space/busdma.c2
-rw-r--r--tools/bus_space/busdma.h2
-rw-r--r--tools/bus_space/examples/am79c900_diag.py1
-rw-r--r--tools/debugscripts/README1
-rw-r--r--tools/debugscripts/dot.gdbinit1
-rw-r--r--tools/debugscripts/gdbinit.i3861
-rw-r--r--tools/debugscripts/gdbinit.kernel1
-rw-r--r--tools/debugscripts/netstat-anr.gdb1
-rw-r--r--tools/diag/README1
-rw-r--r--tools/diag/dumpvfscache/Makefile2
-rw-r--r--tools/diag/dumpvfscache/dumpvfscache.c1
-rw-r--r--tools/diag/localeck/Makefile2
-rw-r--r--tools/diag/localeck/docheck.sh1
-rw-r--r--tools/diag/localeck/localeck.c2
-rw-r--r--tools/diag/prtblknos/Makefile2
-rw-r--r--tools/diag/prtblknos/README1
-rw-r--r--tools/diag/prtblknos/main.c19
-rw-r--r--tools/diag/prtblknos/prtblknos.c32
-rwxr-xr-xtools/ifnet/convert_ifapi.sh (renamed from tools/ifnet/convert_drvapi.sh)249
-rw-r--r--tools/install.sh1
-rw-r--r--tools/kerneldoc/Doxyfile1
-rw-r--r--tools/kerneldoc/Makefile2
-rw-r--r--tools/kerneldoc/subsys/Dependencies1
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-cam2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-crypto2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_aac2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_aacraid2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_acpi_support2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_acpica2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_adb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_adlink2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ae2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_age2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_agp2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ahci2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_aic7xxx2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_al_eth2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_alc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ale2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_alpm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_altera21
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_amd_ecc_inject2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_amdgpio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_amdpm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_amdsbwd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_amdsmb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_amdsmn2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_amdtemp2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_an2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_arcmsr2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_asmc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ata2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ath2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_atkbdc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_axgbe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bce2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_beri21
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bfe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bhnd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bnxt2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bvm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bwi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bwn2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_bxe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cadence2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cardbus2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cas2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ce2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cesa2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cfe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cfi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_chromebook_platform2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ciss2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_coretemp2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cp2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cpuctl2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cpufreq2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cxgb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cxgbe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_cyapa2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_dc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_dcons2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_dme21
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_dpaa2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_dpms2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_dwc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_e10002
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_efidev2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ena2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_et2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_etherswitch2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_evdev2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_exca2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_extres2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_fb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_fdc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_fdt2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ffec2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_filemon2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_firewire2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_flash2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_fxp2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_gem2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_glxiic2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_glxsb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_gpio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_gxemul21
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hdmi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hifn2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hpt27xx2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hptiop2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hptmv2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hptnr2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hptrr2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hwpmc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_hyperv2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ic2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ice2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ichiic2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ichsmb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ichwd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ida2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_iicbus2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_imcsmb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_intel2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_intpm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_io2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ioat2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ipmi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ips2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ipw2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_isci2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_iscsi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_iser2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_isl2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ismt2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_isp2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ispfw2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_iwi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_iwm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_iwn2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ixgbe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ixl2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_jedec_dimm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_jme2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_kbd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_kbdmux2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ksyms2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_le2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_led2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_lge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_liquidio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_malo2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mbox2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_md2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mdio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mem2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mfi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mii2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mlx2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mlx42
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mlx52
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mmc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mmcnull2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mn2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mpr2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mps2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mpt2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mrsas2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_msk2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mthca2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mvs2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mwl2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_mxge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_my2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nctgpio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_neta2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_netfpga10g2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_netmap2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nfe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nfsmb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nmdm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ntb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_null2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nvd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nvdimm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nvme2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nvram2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_nvram2env21
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_oce2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ocs_fc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ofw2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_otus2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ow2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pbio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pccard2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pccbb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pcf2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pci2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pms2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_powermac_nvram2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ppbus2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ppc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_proto2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_psci2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pst2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pty2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_puc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_pwm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_qlnx2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_qlxgb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_qlxgbe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_qlxge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_quicc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ral2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_random2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_rccgpio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_re2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_rl2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_rndtest2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_rt21
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_rtwn2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_safe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sbni2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_scc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sdhci2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sec2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sfxge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_siis2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sis2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sk2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_smartpqi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_smbus2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_smc2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_snp2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sound2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_speaker2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_spibus2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ste2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_stge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_sym2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_syscons2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_tcp_log2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_tdfx2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_terasic2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_ti2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_tpm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_tsec2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_twe2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_tws2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_uart2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_usb2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_veriexec2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_vge2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_viapm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_viawd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_videomode2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_virtio2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_vkbd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_vmware2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_vnic2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_vr2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_vt2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_vte2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_watchdog2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_wbwd2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_wpi2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_wtap2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_xdma2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_xen2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_xilinx2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-dev_xl2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-geom2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-kern2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-libkern2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-linux2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-net802112
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-netgraph2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-netinet2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-netinet62
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-netipsec2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-opencrypto2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-vm2
-rw-r--r--tools/kerneldoc/subsys/Doxyfile-xen2
-rw-r--r--tools/kerneldoc/subsys/Makefile1
-rw-r--r--tools/kerneldoc/subsys/README1
-rw-r--r--tools/kerneldoc/subsys/common-Doxyfile2
-rw-r--r--tools/kerneldoc/subsys/notreviewed.dox1
-rw-r--r--tools/lua/template.lua1
-rw-r--r--tools/make_libdeps.sh1
-rw-r--r--tools/pkgbase/README.md2
-rw-r--r--tools/pkgbase/metalog_reader.lua42
-rw-r--r--tools/regression/README1
-rw-r--r--tools/regression/TODO1
-rw-r--r--tools/regression/aio/aiop/Makefile2
-rw-r--r--tools/regression/aio/aiop/aiop.c3
-rw-r--r--tools/regression/atm/Funcs.sh53
-rw-r--r--tools/regression/atm/README14
-rw-r--r--tools/regression/atm/RunTest.sh45
-rw-r--r--tools/regression/atm/proto_cc/RunTest.sh10
-rw-r--r--tools/regression/atm/proto_sscfu/RunTest.sh11
-rw-r--r--tools/regression/atm/proto_sscop/RunTest.sh10
-rw-r--r--tools/regression/atm/proto_uni/RunTest.sh12
-rw-r--r--tools/regression/audit/audit_pipe_ioctl/Makefile1
-rw-r--r--tools/regression/audit/audit_pipe_ioctl/audit_pipe_ioctl.c2
-rw-r--r--tools/regression/bpf/Makefile2
-rw-r--r--tools/regression/bpf/bpf_filter/Makefile4
-rw-r--r--tools/regression/bpf/bpf_filter/bpf_test.c2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0001.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0002.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0003.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0004.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0005.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0006.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0007.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0008.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0009.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0010.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0011.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0012.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0013.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0014.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0015.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0016.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0017.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0018.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0019.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0020.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0021.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0022.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0023.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0024.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0025.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0026.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0027.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0028.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0029.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0030.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0031.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0032.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0033.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0034.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0035.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0036.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0037.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0038.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0039.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0040.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0041.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0042.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0043.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0044.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0045.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0046.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0047.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0048.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0049.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0050.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0051.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0052.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0053.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0054.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0055.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0056.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0057.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0058.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0059.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0060.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0061.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0062.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0063.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0064.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0065.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0066.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0067.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0068.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0069.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0070.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0071.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0072.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0073.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0074.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0075.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0076.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0077.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0078.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0079.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0080.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0081.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0082.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0083.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0084.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0085.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0086.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0087.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0088.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0089.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0090.h2
-rw-r--r--tools/regression/bpf/bpf_filter/tests/test0091.h2
-rw-r--r--tools/regression/capsicum/syscalls/Makefile2
-rw-r--r--tools/regression/capsicum/syscalls/cap_fcntls_limit.c4
-rw-r--r--tools/regression/capsicum/syscalls/cap_getmode.c4
-rw-r--r--tools/regression/capsicum/syscalls/cap_ioctls_limit.c4
-rw-r--r--tools/regression/capsicum/syscalls/misc.c4
-rw-r--r--tools/regression/capsicum/syscalls/misc.h3
-rw-r--r--tools/regression/ccd/layout/Makefile1
-rw-r--r--tools/regression/ccd/layout/a.c1
-rw-r--r--tools/regression/ccd/layout/b.c1
-rw-r--r--tools/regression/ccd/layout/ccd.sh1
-rw-r--r--tools/regression/ccd/layout/ccd0.sh1
-rw-r--r--tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_01
-rw-r--r--tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_41
-rw-r--r--tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_01
-rw-r--r--tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_21
-rw-r--r--tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_41
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_01
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_41
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_01
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_21
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_41
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_01
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_41
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_01
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_21
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_41
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_01
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_21
-rw-r--r--tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_41
-rw-r--r--tools/regression/compat32/aarch64/Makefile4
-rw-r--r--tools/regression/compat32/aarch64/swp_test_impl.S410
-rw-r--r--tools/regression/doat/Makefile2
-rw-r--r--tools/regression/doat/README1
-rw-r--r--tools/regression/doat/doat.c2
-rw-r--r--tools/regression/environ/Makefile1
-rw-r--r--tools/regression/environ/Makefile.envctl1
-rw-r--r--tools/regression/environ/Makefile.retention1
-rw-r--r--tools/regression/environ/Makefile.timings1
-rw-r--r--tools/regression/environ/envctl.c3
-rw-r--r--tools/regression/environ/envtest.t1
-rw-r--r--tools/regression/environ/retention.c3
-rw-r--r--tools/regression/environ/timings.c3
-rw-r--r--tools/regression/ethernet/ethermulti/Makefile2
-rw-r--r--tools/regression/ethernet/ethermulti/ethermulti.c3
-rw-r--r--tools/regression/fsx/Makefile2
-rw-r--r--tools/regression/fsx/fsx.c27
-rw-r--r--tools/regression/gaithrstress/Makefile2
-rw-r--r--tools/regression/gaithrstress/gaithrstress.c2
-rw-r--r--tools/regression/geom/ConfCmp/ConfCmp.c2
-rw-r--r--tools/regression/geom/ConfCmp/Makefile2
-rw-r--r--tools/regression/geom/Data/disk.beast.da0.xml1
-rw-r--r--tools/regression/geom/Data/disk.critter.ad0.xml1
-rw-r--r--tools/regression/geom/Data/disk.empty.flp.xml1
-rw-r--r--tools/regression/geom/Data/disk.far.ad0.xml1
-rw-r--r--tools/regression/geom/Data/disk.flat.da1.xml1
-rw-r--r--tools/regression/geom/Data/disk.kern.flp.xml1
-rw-r--r--tools/regression/geom/Data/disk.msdos.ext.xml1
-rw-r--r--tools/regression/geom/Data/disk.msdos.flp.xml1
-rw-r--r--tools/regression/geom/Data/disk.typo.ad0.xml1
-rw-r--r--tools/regression/geom/MdLoad/Makefile2
-rw-r--r--tools/regression/geom/MdLoad/MdLoad.c2
-rw-r--r--tools/regression/geom/Ref/disk.apple.xml1
-rw-r--r--tools/regression/geom/Ref/disk.beast.da0.xml1
-rw-r--r--tools/regression/geom/Ref/disk.critter.ad0.xml1
-rw-r--r--tools/regression/geom/Ref/disk.empty.flp.xml1
-rw-r--r--tools/regression/geom/Ref/disk.far.ad0.xml1
-rw-r--r--tools/regression/geom/Ref/disk.flat.da1.xml1
-rw-r--r--tools/regression/geom/Ref/disk.kern.flp.xml1
-rw-r--r--tools/regression/geom/Ref/disk.msdos.ext.xml1
-rw-r--r--tools/regression/geom/Ref/disk.msdos.flp.xml1
-rw-r--r--tools/regression/geom/Ref/disk.typo.ad0.xml1
-rw-r--r--tools/regression/geom/RunTest.sh1
-rw-r--r--tools/regression/geom/RunTest.t1
-rw-r--r--tools/regression/geom_gpt/Makefile2
-rw-r--r--tools/regression/geom_gpt/gctl_test.t1
-rw-r--r--tools/regression/geom_gpt/gctl_test_helper.c3
-rw-r--r--tools/regression/include/stdatomic/Makefile2
-rw-r--r--tools/regression/include/stdatomic/Makefile.depend1
-rw-r--r--tools/regression/include/stdatomic/logic.c2
-rw-r--r--tools/regression/include/tgmath/Makefile2
-rw-r--r--tools/regression/include/tgmath/tgmath.c2
-rw-r--r--tools/regression/include/tgmath/tgmath.t1
-rwxr-xr-xtools/regression/ipfw/fwd/vimage-fwd.sh1
-rw-r--r--tools/regression/ipsec/ipsec.t1
-rw-r--r--tools/regression/ipsec/ipsec6.t1
-rw-r--r--tools/regression/iscsi/initiator-instructions.txt6
-rw-r--r--tools/regression/iscsi/iscsi-test.sh1
-rw-r--r--tools/regression/kgssapi/Makefile2
-rw-r--r--tools/regression/kgssapi/gsstest.c2
-rw-r--r--tools/regression/kthread/kld/Makefile2
-rw-r--r--tools/regression/kthread/kld/kthrdlk.c3
-rw-r--r--tools/regression/lib/libc/regex/Makefile2
-rw-r--r--tools/regression/mlock/Makefile2
-rw-r--r--tools/regression/mlock/mlock.c2
-rw-r--r--tools/regression/msdosfs/msdosfstest-2.sh1
-rw-r--r--tools/regression/msdosfs/msdosfstest-3.sh1
-rw-r--r--tools/regression/msdosfs/msdosfstest-4.sh1
-rw-r--r--tools/regression/msdosfs/msdosfstest-5.sh1
-rw-r--r--tools/regression/msdosfs/msdosfstest-6.sh1
-rw-r--r--tools/regression/msdosfs/msdosfstest.sh1
-rw-r--r--tools/regression/net/if_tap/test-tap.sh1
-rw-r--r--tools/regression/net80211/ccmp/Makefile2
-rw-r--r--tools/regression/net80211/ccmp/test_ccmp.c2
-rw-r--r--tools/regression/net80211/tkip/Makefile2
-rw-r--r--tools/regression/net80211/tkip/test_tkip.c2
-rw-r--r--tools/regression/net80211/wep/Makefile2
-rw-r--r--tools/regression/net80211/wep/test_wep.c2
-rw-r--r--tools/regression/netinet/arphold/Makefile2
-rw-r--r--tools/regression/netinet/arphold/arphold.c2
-rw-r--r--tools/regression/netinet/arphold/arphold.t1
-rw-r--r--tools/regression/netinet/ip_id_period/ip_id_period.py1
-rw-r--r--tools/regression/netinet/ipbroadcast/Makefile1
-rw-r--r--tools/regression/netinet/ipbroadcast/ipbroadcast.c32
-rw-r--r--tools/regression/netinet/ipdivert/Makefile1
-rw-r--r--tools/regression/netinet/ipdivert/ipdivert.c4
-rw-r--r--tools/regression/netinet/ipmulticast/Makefile1
-rw-r--r--tools/regression/netinet/ipmulticast/ipmulticast.c3
-rw-r--r--tools/regression/netinet/ipsockopt/Makefile1
-rw-r--r--tools/regression/netinet/ipsockopt/ipsockopt.c2
-rw-r--r--tools/regression/netinet/ipsockopt/ipsockopt.t1
-rw-r--r--tools/regression/netinet/msocket/Makefile2
-rw-r--r--tools/regression/netinet/msocket/msocket.c2
-rw-r--r--tools/regression/netinet/msocket_ifnet_remove/Makefile2
-rw-r--r--tools/regression/netinet/msocket_ifnet_remove/msocket_ifnet_remove.c2
-rw-r--r--tools/regression/netinet/rawconnect/Makefile1
-rw-r--r--tools/regression/netinet/rawconnect/rawconnect.c2
-rw-r--r--tools/regression/netinet/rawconnect/rawconnect.t1
-rw-r--r--tools/regression/netinet/tcpconnect/Makefile1
-rw-r--r--tools/regression/netinet/tcpconnect/README.tcp-md51
-rw-r--r--tools/regression/netinet/tcpconnect/tcpconnect.c2
-rw-r--r--tools/regression/netinet/tcpdrop/Makefile1
-rw-r--r--tools/regression/netinet/tcpdrop/tcpdrop.c2
-rw-r--r--tools/regression/netinet/tcpfullwindowrst/Makefile2
-rw-r--r--tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrst.t1
-rw-r--r--tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrsttest.c2
-rw-r--r--tools/regression/netinet/tcpsockclosebeforeaccept/Makefile1
-rw-r--r--tools/regression/netinet/tcpsockclosebeforeaccept/tcpsockclosebeforeaccept.c2
-rw-r--r--tools/regression/netinet/tcpsocktimewait/Makefile1
-rw-r--r--tools/regression/netinet/tcpsocktimewait/tcpsocktimewait.c2
-rw-r--r--tools/regression/netinet/tcpstream/Makefile1
-rw-r--r--tools/regression/netinet/tcpstream/README2
-rw-r--r--tools/regression/netinet/tcpstream/tcpstream.c4
-rw-r--r--tools/regression/netinet/udpconnectjail/Makefile2
-rw-r--r--tools/regression/netinet/udpconnectjail/udpconnectjail.c2
-rw-r--r--tools/regression/netinet/udpzerobyte/Makefile2
-rw-r--r--tools/regression/netinet/udpzerobyte/udpzerobyte.c2
-rw-r--r--tools/regression/netinet6/icmp6_filter/Makefile1
-rw-r--r--tools/regression/netinet6/icmp6_filter/icmp6_filter.c2
-rw-r--r--tools/regression/netinet6/inet6_rth/Makefile1
-rw-r--r--tools/regression/netinet6/inet6_rth/inet6_rth-segments.c3
-rw-r--r--tools/regression/netinet6/inet6_rth/test_subr.c3
-rw-r--r--tools/regression/netinet6/inet6_rth/test_subr.h2
-rw-r--r--tools/regression/netinet6/ip6_sockets/Makefile1
-rw-r--r--tools/regression/netinet6/ip6_sockets/ip6_sockets.c2
-rw-r--r--tools/regression/nfsmmap/Makefile2
-rw-r--r--tools/regression/nfsmmap/README1
-rw-r--r--tools/regression/nfsmmap/test1/Makefile2
-rw-r--r--tools/regression/nfsmmap/test2/Makefile2
-rw-r--r--tools/regression/p1003_1b/Makefile2
-rw-r--r--tools/regression/p1003_1b/README1
-rw-r--r--tools/regression/p1003_1b/fifo.c2
-rw-r--r--tools/regression/p1003_1b/main.c1
-rw-r--r--tools/regression/p1003_1b/memlock.c2
-rw-r--r--tools/regression/p1003_1b/p26.c2
-rw-r--r--tools/regression/p1003_1b/prutil.c1
-rw-r--r--tools/regression/p1003_1b/prutil.h1
-rw-r--r--tools/regression/p1003_1b/sched.c1
-rw-r--r--tools/regression/p1003_1b/yield.c1
-rw-r--r--tools/regression/poll/Makefile1
-rw-r--r--tools/regression/poll/Readme1
-rw-r--r--tools/regression/poll/pipepoll.c1
-rw-r--r--tools/regression/poll/pipeselect.c1
-rw-r--r--tools/regression/poll/sockpoll.c1
-rw-r--r--tools/regression/posixsem/Makefile2
-rw-r--r--tools/regression/posixsem/posixsem.c3
-rw-r--r--tools/regression/posixsem/posixsem.t1
-rw-r--r--tools/regression/posixsem/test.c2
-rw-r--r--tools/regression/posixsem/test.h2
-rw-r--r--tools/regression/posixsem2/Makefile2
-rw-r--r--tools/regression/posixsem2/semtest.c1
-rw-r--r--tools/regression/priv/Makefile1
-rw-r--r--tools/regression/priv/main.c2
-rw-r--r--tools/regression/priv/main.h2
-rw-r--r--tools/regression/priv/priv_acct.c2
-rw-r--r--tools/regression/priv/priv_adjtime.c2
-rw-r--r--tools/regression/priv/priv_audit_control.c2
-rw-r--r--tools/regression/priv/priv_audit_getaudit.c2
-rw-r--r--tools/regression/priv/priv_audit_setaudit.c2
-rw-r--r--tools/regression/priv/priv_audit_submit.c2
-rw-r--r--tools/regression/priv/priv_clock_settime.c2
-rw-r--r--tools/regression/priv/priv_cred.c2
-rw-r--r--tools/regression/priv/priv_io.c2
-rw-r--r--tools/regression/priv/priv_kenv_set.c2
-rw-r--r--tools/regression/priv/priv_kenv_unset.c2
-rw-r--r--tools/regression/priv/priv_msgbuf.c2
-rw-r--r--tools/regression/priv/priv_netinet_ipsec.c2
-rw-r--r--tools/regression/priv/priv_netinet_raw.c2
-rw-r--r--tools/regression/priv/priv_proc_setlogin.c2
-rw-r--r--tools/regression/priv/priv_proc_setrlimit.c2
-rw-r--r--tools/regression/priv/priv_sched_rtprio.c2
-rw-r--r--tools/regression/priv/priv_sched_setpriority.c2
-rw-r--r--tools/regression/priv/priv_settimeofday.c2
-rw-r--r--tools/regression/priv/priv_sysctl_write.c2
-rw-r--r--tools/regression/priv/priv_vfs_chflags.c2
-rw-r--r--tools/regression/priv/priv_vfs_chmod.c2
-rw-r--r--tools/regression/priv/priv_vfs_chown.c2
-rw-r--r--tools/regression/priv/priv_vfs_chroot.c2
-rw-r--r--tools/regression/priv/priv_vfs_clearsugid.c2
-rw-r--r--tools/regression/priv/priv_vfs_extattr_system.c2
-rw-r--r--tools/regression/priv/priv_vfs_fhopen.c2
-rw-r--r--tools/regression/priv/priv_vfs_fhstat.c2
-rw-r--r--tools/regression/priv/priv_vfs_fhstatfs.c2
-rw-r--r--tools/regression/priv/priv_vfs_generation.c2
-rw-r--r--tools/regression/priv/priv_vfs_getfh.c2
-rw-r--r--tools/regression/priv/priv_vfs_read_write.c2
-rw-r--r--tools/regression/priv/priv_vfs_setgid.c2
-rw-r--r--tools/regression/priv/priv_vfs_stickyfile.c2
-rw-r--r--tools/regression/priv/priv_vfs_utimes.c2
-rw-r--r--tools/regression/priv/priv_vm_madv_protect.c2
-rw-r--r--tools/regression/priv/priv_vm_mlock.c2
-rw-r--r--tools/regression/priv/priv_vm_munlock.c2
-rw-r--r--tools/regression/pthread/cv_cancel1/Makefile2
-rw-r--r--tools/regression/pthread/cv_cancel1/cv_cancel1.c2
-rw-r--r--tools/regression/pthread/mutex_isowned_np/Makefile2
-rw-r--r--tools/regression/pthread/mutex_isowned_np/mutex_isowned_np.c4
-rw-r--r--tools/regression/pthread/unwind/Makefile1
-rw-r--r--tools/regression/pthread/unwind/Test.cpp1
-rw-r--r--tools/regression/pthread/unwind/catch_pthread_exit.cpp1
-rw-r--r--tools/regression/pthread/unwind/cond_wait_cancel.cpp1
-rw-r--r--tools/regression/pthread/unwind/cond_wait_cancel2.cpp1
-rw-r--r--tools/regression/pthread/unwind/main_thread_exit.cpp1
-rw-r--r--tools/regression/pthread/unwind/sem_wait_cancel.cpp1
-rw-r--r--tools/regression/pthread/unwind/thread_normal_exit.cpp1
-rw-r--r--tools/regression/redzone9/Makefile2
-rw-r--r--tools/regression/redzone9/README1
-rw-r--r--tools/regression/redzone9/redzone.c3
-rw-r--r--tools/regression/redzone9/test.sh1
-rw-r--r--tools/regression/rpcsec_gss/Makefile2
-rw-r--r--tools/regression/rpcsec_gss/rpctest.c2
-rw-r--r--tools/regression/security/access/Makefile2
-rw-r--r--tools/regression/security/access/testaccess.c2
-rw-r--r--tools/regression/security/cap_test/Makefile2
-rw-r--r--tools/regression/security/cap_test/cap_test.c4
-rw-r--r--tools/regression/security/cap_test/cap_test.h2
-rw-r--r--tools/regression/security/cap_test/cap_test.t1
-rw-r--r--tools/regression/security/cap_test/cap_test_capabilities.c3
-rw-r--r--tools/regression/security/cap_test/cap_test_capmode.c5
-rw-r--r--tools/regression/security/cap_test/cap_test_fcntl.c3
-rw-r--r--tools/regression/security/cap_test/cap_test_pdfork.c5
-rw-r--r--tools/regression/security/cap_test/cap_test_pdkill.c5
-rw-r--r--tools/regression/security/cap_test/cap_test_relative.c5
-rw-r--r--tools/regression/security/cap_test/cap_test_sysctl.c5
-rw-r--r--tools/regression/security/open_to_operation/Makefile2
-rw-r--r--tools/regression/security/open_to_operation/open_to_operation.c3
-rw-r--r--tools/regression/security/proc_to_proc/Makefile2
-rw-r--r--tools/regression/security/proc_to_proc/README1
-rw-r--r--tools/regression/security/proc_to_proc/scenario.c2
-rw-r--r--tools/regression/security/proc_to_proc/scenario.h2
-rw-r--r--tools/regression/security/proc_to_proc/testuid.c2
-rw-r--r--tools/regression/sigqueue/Makefile2
-rw-r--r--tools/regression/sigqueue/sigqtest1/Makefile2
-rw-r--r--tools/regression/sigqueue/sigqtest1/sigqtest1.c1
-rw-r--r--tools/regression/sigqueue/sigqtest2/Makefile2
-rw-r--r--tools/regression/sigqueue/sigqtest2/sigqtest2.c1
-rw-r--r--tools/regression/sockets/accept_fd_leak/Makefile1
-rw-r--r--tools/regression/sockets/accept_fd_leak/accept_fd_leak.c2
-rw-r--r--tools/regression/sockets/accept_fd_leak/accept_fd_leak.t1
-rw-r--r--tools/regression/sockets/accf_data_attach/Makefile1
-rw-r--r--tools/regression/sockets/accf_data_attach/accf_data_attach.c2
-rw-r--r--tools/regression/sockets/accf_data_attach/accf_data_attach.t1
-rw-r--r--tools/regression/sockets/fstat/Makefile1
-rw-r--r--tools/regression/sockets/fstat/fstat.c2
-rw-r--r--tools/regression/sockets/kqueue/Makefile1
-rw-r--r--tools/regression/sockets/kqueue/kqueue.c2
-rw-r--r--tools/regression/sockets/kqueue/kqueue.t1
-rw-r--r--tools/regression/sockets/listen_backlog/Makefile2
-rw-r--r--tools/regression/sockets/listen_backlog/listen_backlog.c10
-rw-r--r--tools/regression/sockets/listen_kqueue/Makefile2
-rw-r--r--tools/regression/sockets/listen_kqueue/listen_kqueue.c2
-rw-r--r--tools/regression/sockets/listenclose/Makefile1
-rw-r--r--tools/regression/sockets/listenclose/listenclose.c2
-rw-r--r--tools/regression/sockets/pr_atomic/Makefile2
-rw-r--r--tools/regression/sockets/pr_atomic/pr_atomic.c2
-rw-r--r--tools/regression/sockets/reconnect/Makefile1
-rw-r--r--tools/regression/sockets/reconnect/reconnect.c2
-rw-r--r--tools/regression/sockets/rtsocket/Makefile2
-rw-r--r--tools/regression/sockets/rtsocket/rtsocket.c2
-rw-r--r--tools/regression/sockets/sblock/Makefile1
-rw-r--r--tools/regression/sockets/sblock/sblock.c2
-rw-r--r--tools/regression/sockets/sendfile/Makefile1
-rw-r--r--tools/regression/sockets/sendfile/sendfile.c2
-rw-r--r--tools/regression/sockets/shutdown/Makefile1
-rw-r--r--tools/regression/sockets/shutdown/shutdown.c2
-rw-r--r--tools/regression/sockets/sigpipe/Makefile1
-rw-r--r--tools/regression/sockets/sigpipe/sigpipe.c2
-rw-r--r--tools/regression/sockets/so_setfib/Makefile2
-rw-r--r--tools/regression/sockets/so_setfib/so_setfib.c2
-rw-r--r--tools/regression/sockets/udp_pingpong/Makefile2
-rw-r--r--tools/regression/sockets/udp_pingpong/udp_pingpong.c3
-rw-r--r--tools/regression/sockets/unix_bindconnect/Makefile2
-rw-r--r--tools/regression/sockets/unix_bindconnect/unix_bindconnect.c2
-rw-r--r--tools/regression/sockets/unix_close_race/Makefile2
-rw-r--r--tools/regression/sockets/unix_close_race/unix_close_race.c2
-rw-r--r--tools/regression/sockets/unix_cmsg/Makefile2
-rw-r--r--tools/regression/sockets/unix_cmsg/README1
-rw-r--r--tools/regression/sockets/unix_cmsg/t_cmsg_len.c3
-rw-r--r--tools/regression/sockets/unix_cmsg/t_cmsg_len.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/t_cmsgcred.c3
-rw-r--r--tools/regression/sockets/unix_cmsg/t_cmsgcred.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.c3
-rw-r--r--tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/t_generic.c3
-rw-r--r--tools/regression/sockets/unix_cmsg/t_generic.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/t_peercred.c3
-rw-r--r--tools/regression/sockets/unix_cmsg/t_peercred.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/t_sockcred.c3
-rw-r--r--tools/regression/sockets/unix_cmsg/t_sockcred.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/t_xxxtime.c.in2
-rw-r--r--tools/regression/sockets/unix_cmsg/t_xxxtime.h.in2
-rw-r--r--tools/regression/sockets/unix_cmsg/uc_check_time.c2
-rw-r--r--tools/regression/sockets/unix_cmsg/uc_check_time.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/uc_common.c2
-rw-r--r--tools/regression/sockets/unix_cmsg/uc_common.h2
-rw-r--r--tools/regression/sockets/unix_cmsg/unix_cmsg.c3
-rw-r--r--tools/regression/sockets/unix_cmsg/unix_cmsg.t1
-rw-r--r--tools/regression/sockets/unix_gc/Makefile2
-rw-r--r--tools/regression/sockets/unix_gc/unix_gc.c2
-rw-r--r--tools/regression/sockets/unix_sendtorace/Makefile2
-rw-r--r--tools/regression/sockets/unix_sendtorace/unix_sendtorace.c2
-rw-r--r--tools/regression/sockets/unix_socket/Makefile2
-rw-r--r--tools/regression/sockets/unix_socket/unix_socket.c2
-rw-r--r--tools/regression/sockets/unix_sorflush/Makefile2
-rw-r--r--tools/regression/sockets/unix_sorflush/unix_sorflush.c2
-rw-r--r--tools/regression/sockets/zerosend/Makefile2
-rw-r--r--tools/regression/sockets/zerosend/zerosend.c2
-rw-r--r--tools/regression/sysvmsg/Makefile1
-rw-r--r--tools/regression/sysvmsg/README1
-rw-r--r--tools/regression/sysvmsg/msgtest.c1
-rw-r--r--tools/regression/sysvsem/Makefile1
-rw-r--r--tools/regression/sysvsem/README1
-rw-r--r--tools/regression/sysvsem/semtest.c1
-rw-r--r--tools/regression/sysvshm/Makefile1
-rw-r--r--tools/regression/sysvshm/README1
-rw-r--r--tools/regression/sysvshm/shmtest.c3
-rw-r--r--tools/regression/tls/Makefile2
-rw-r--r--tools/regression/tls/libxx/Makefile2
-rw-r--r--tools/regression/tls/libxx/xx.c1
-rw-r--r--tools/regression/tls/libyy/Makefile2
-rw-r--r--tools/regression/tls/libyy/yy.c1
-rw-r--r--tools/regression/tls/ttls1/Makefile2
-rw-r--r--tools/regression/tls/ttls1/ttls1.c1
-rw-r--r--tools/regression/tls/ttls2/Makefile2
-rw-r--r--tools/regression/tls/ttls2/ttls2.c1
-rw-r--r--tools/regression/tls/ttls3/Makefile4
-rw-r--r--tools/regression/tls/ttls3/elftls.S2
-rw-r--r--tools/regression/tls/ttls3/tls-test-lib.c2
-rw-r--r--tools/regression/tls/ttls3/tls-test.c2
-rw-r--r--tools/regression/tls/ttls4/Makefile2
-rw-r--r--tools/regression/tls/ttls4/ttls4.c2
-rw-r--r--tools/regression/tmpfs/Makefile1
-rw-r--r--tools/regression/tmpfs/h_funcs.subr1
-rw-r--r--tools/regression/tmpfs/h_tools.c2
-rw-r--r--tools/regression/tmpfs/t_create1
-rw-r--r--tools/regression/tmpfs/t_dots1
-rw-r--r--tools/regression/tmpfs/t_exec1
-rw-r--r--tools/regression/tmpfs/t_link1
-rw-r--r--tools/regression/tmpfs/t_mkdir1
-rw-r--r--tools/regression/tmpfs/t_mount1
-rw-r--r--tools/regression/tmpfs/t_pipes1
-rw-r--r--tools/regression/tmpfs/t_read_write1
-rw-r--r--tools/regression/tmpfs/t_readdir1
-rw-r--r--tools/regression/tmpfs/t_remove1
-rw-r--r--tools/regression/tmpfs/t_rename1
-rw-r--r--tools/regression/tmpfs/t_rmdir1
-rw-r--r--tools/regression/tmpfs/t_setattr1
-rw-r--r--tools/regression/tmpfs/t_sizes1
-rw-r--r--tools/regression/tmpfs/t_sockets1
-rw-r--r--tools/regression/tmpfs/t_statvfs1
-rw-r--r--tools/regression/tmpfs/t_symlink1
-rw-r--r--tools/regression/tmpfs/t_times1
-rw-r--r--tools/regression/tmpfs/t_trail_slash1
-rw-r--r--tools/regression/tmpfs/t_truncate1
-rw-r--r--tools/regression/tmpfs/t_vnd1
-rw-r--r--tools/regression/tmpfs/t_vnode_leak1
-rw-r--r--tools/regression/ufs/uprintf/Makefile2
-rw-r--r--tools/regression/ufs/uprintf/ufs_uprintf.c2
-rwxr-xr-xtools/regression/usb/usb_enum.t1
-rw-r--r--tools/regression/usr.bin/cc/Makefile2
-rw-r--r--tools/regression/usr.bin/cc/float.c2
-rw-r--r--tools/regression/usr.bin/cc/float.t1
-rw-r--r--tools/regression/usr.bin/env/Makefile2
-rw-r--r--tools/regression/usr.bin/env/regress-env.rgdata1
-rw-r--r--tools/regression/usr.bin/env/regress-sb.rb1
-rw-r--r--tools/regression/zfs/LICENSE1
-rwxr-xr-xtools/regression/zfs/misc.sh1
-rw-r--r--tools/regression/zfs/zpool/add/cache.t1
-rw-r--r--tools/regression/zfs/zpool/add/disks.t1
-rw-r--r--tools/regression/zfs/zpool/add/doesnt_exist.t1
-rw-r--r--tools/regression/zfs/zpool/add/files.t1
-rw-r--r--tools/regression/zfs/zpool/add/log.t1
-rw-r--r--tools/regression/zfs/zpool/add/mirror.t1
-rw-r--r--tools/regression/zfs/zpool/add/option-f_inuse.t1
-rw-r--r--tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_0.t1
-rw-r--r--tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_1.t1
-rw-r--r--tools/regression/zfs/zpool/add/option-f_size_mismatch.t1
-rw-r--r--tools/regression/zfs/zpool/add/option-f_type_mismatch.t1
-rw-r--r--tools/regression/zfs/zpool/add/option-n.t1
-rw-r--r--tools/regression/zfs/zpool/add/raidz1.t1
-rw-r--r--tools/regression/zfs/zpool/add/raidz2.t1
-rw-r--r--tools/regression/zfs/zpool/add/spare.t1
-rw-r--r--tools/regression/zfs/zpool/attach/log.t1
-rw-r--r--tools/regression/zfs/zpool/attach/mirror.t1
-rw-r--r--tools/regression/zfs/zpool/attach/option-f_inuse.t1
-rw-r--r--tools/regression/zfs/zpool/create/already_exists.t1
-rw-r--r--tools/regression/zfs/zpool/create/automount.t1
-rw-r--r--tools/regression/zfs/zpool/create/cache.t1
-rw-r--r--tools/regression/zfs/zpool/create/disks.t1
-rw-r--r--tools/regression/zfs/zpool/create/files.t1
-rw-r--r--tools/regression/zfs/zpool/create/log.t1
-rw-r--r--tools/regression/zfs/zpool/create/mirror.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-R.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-f_inuse.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_0.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_1.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-f_size_mismatch.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-f_type_mismatch.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-m.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-n.t1
-rw-r--r--tools/regression/zfs/zpool/create/option-o.t1
-rw-r--r--tools/regression/zfs/zpool/create/raidz1.t1
-rw-r--r--tools/regression/zfs/zpool/create/raidz2.t1
-rw-r--r--tools/regression/zfs/zpool/create/spare.t1
-rw-r--r--tools/regression/zfs/zpool/offline/io.t1
-rw-r--r--tools/regression/zfs/zpool/offline/log.t1
-rw-r--r--tools/regression/zfs/zpool/offline/mirror.t1
-rw-r--r--tools/regression/zfs/zpool/offline/option-t.t1
-rw-r--r--tools/regression/zfs/zpool/offline/raidz1.t1
-rw-r--r--tools/regression/zfs/zpool/offline/raidz2.t1
-rw-r--r--tools/regression/zfs/zpool/remove/cache.t1
-rw-r--r--tools/regression/zfs/zpool/remove/spare.t1
-rw-r--r--tools/regression/zfs/zpool/replace/cache.t1
-rw-r--r--tools/regression/zfs/zpool/replace/disk.t1
-rw-r--r--tools/regression/zfs/zpool/replace/log.t1
-rw-r--r--tools/regression/zfs/zpool/replace/mirror.t1
-rw-r--r--tools/regression/zfs/zpool/replace/raidz1.t1
-rw-r--r--tools/regression/zfs/zpool/replace/raidz2.t1
-rw-r--r--tools/regression/zfs/zpool/replace/spare.t1
-rwxr-xr-xtools/sched/make_ktr.sh1
-rwxr-xr-xtools/sched/schedgraph.d2
-rw-r--r--tools/sched/schedgraph.py1
-rw-r--r--tools/test/README3
-rw-r--r--tools/test/arc4random/biastest.c216
-rw-r--r--tools/test/auxinfo/Makefile2
-rw-r--r--tools/test/auxinfo/auxinfo.c2
-rw-r--r--tools/test/avx_sig/avx_sig.c220
-rw-r--r--tools/test/bsnmp/Makefile3
-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/Makefile2
-rw-r--r--tools/test/callout_free/callout_free.c2
-rw-r--r--tools/test/devrandom/hammer.random1
-rw-r--r--tools/test/devrandom/hammer.urandom1
-rw-r--r--tools/test/devrandom/stat.16bit1
-rw-r--r--tools/test/devrandom/stat.8bit1
-rw-r--r--tools/test/gpioevents/Makefile4
-rw-r--r--tools/test/gpioevents/gpioevents.c57
-rwxr-xr-xtools/test/hwpmc/pmctest.py1
-rw-r--r--tools/test/iconv/Makefile2
-rw-r--r--tools/test/iconv/const-gnuism.c3
-rw-r--r--tools/test/iconv/gnu/Makefile2
-rw-r--r--tools/test/iconv/gnu/gnu.c2
-rw-r--r--tools/test/iconv/posix/Makefile2
-rw-r--r--tools/test/iconv/posix/posix.c19
-rw-r--r--tools/test/iconv/ref/ARMSCII-81
-rw-r--r--tools/test/iconv/ref/ARMSCII-8-rev1
-rw-r--r--tools/test/iconv/ref/ASCII1
-rw-r--r--tools/test/iconv/ref/ASCII-rev1
-rw-r--r--tools/test/iconv/ref/ATARIST1
-rw-r--r--tools/test/iconv/ref/ATARIST-rev1
-rw-r--r--tools/test/iconv/ref/BIG51
-rw-r--r--tools/test/iconv/ref/BIG5-20031
-rw-r--r--tools/test/iconv/ref/BIG5-2003-rev1
-rw-r--r--tools/test/iconv/ref/BIG5-HKSCS1
-rw-r--r--tools/test/iconv/ref/BIG5-HKSCS-rev1
-rw-r--r--tools/test/iconv/ref/BIG5-rev1
-rw-r--r--tools/test/iconv/ref/BIG5HKSCS1
-rw-r--r--tools/test/iconv/ref/BIG5HKSCS-rev1
-rw-r--r--tools/test/iconv/ref/C991
-rw-r--r--tools/test/iconv/ref/C99-rev1
-rw-r--r--tools/test/iconv/ref/CP10461
-rw-r--r--tools/test/iconv/ref/CP1046-rev1
-rw-r--r--tools/test/iconv/ref/CP11241
-rw-r--r--tools/test/iconv/ref/CP1124-rev1
-rw-r--r--tools/test/iconv/ref/CP11251
-rw-r--r--tools/test/iconv/ref/CP1125-rev1
-rw-r--r--tools/test/iconv/ref/CP11291
-rw-r--r--tools/test/iconv/ref/CP1129-rev1
-rw-r--r--tools/test/iconv/ref/CP11311
-rw-r--r--tools/test/iconv/ref/CP1131-rev1
-rw-r--r--tools/test/iconv/ref/CP11331
-rw-r--r--tools/test/iconv/ref/CP1133-rev1
-rw-r--r--tools/test/iconv/ref/CP11611
-rw-r--r--tools/test/iconv/ref/CP1161-rev1
-rw-r--r--tools/test/iconv/ref/CP11621
-rw-r--r--tools/test/iconv/ref/CP1162-rev1
-rw-r--r--tools/test/iconv/ref/CP11631
-rw-r--r--tools/test/iconv/ref/CP1163-rev1
-rw-r--r--tools/test/iconv/ref/CP12501
-rw-r--r--tools/test/iconv/ref/CP1250-rev1
-rw-r--r--tools/test/iconv/ref/CP12511
-rw-r--r--tools/test/iconv/ref/CP1251-rev1
-rw-r--r--tools/test/iconv/ref/CP12521
-rw-r--r--tools/test/iconv/ref/CP1252-rev1
-rw-r--r--tools/test/iconv/ref/CP12531
-rw-r--r--tools/test/iconv/ref/CP1253-rev1
-rw-r--r--tools/test/iconv/ref/CP12541
-rw-r--r--tools/test/iconv/ref/CP1254-rev1
-rw-r--r--tools/test/iconv/ref/CP12551
-rw-r--r--tools/test/iconv/ref/CP1255-rev1
-rw-r--r--tools/test/iconv/ref/CP12561
-rw-r--r--tools/test/iconv/ref/CP1256-rev1
-rw-r--r--tools/test/iconv/ref/CP12571
-rw-r--r--tools/test/iconv/ref/CP1257-rev1
-rw-r--r--tools/test/iconv/ref/CP12581
-rw-r--r--tools/test/iconv/ref/CP1258-rev1
-rw-r--r--tools/test/iconv/ref/CP4371
-rw-r--r--tools/test/iconv/ref/CP437-rev1
-rw-r--r--tools/test/iconv/ref/CP7371
-rw-r--r--tools/test/iconv/ref/CP737-rev1
-rw-r--r--tools/test/iconv/ref/CP7751
-rw-r--r--tools/test/iconv/ref/CP775-rev1
-rw-r--r--tools/test/iconv/ref/CP8501
-rw-r--r--tools/test/iconv/ref/CP850-rev1
-rw-r--r--tools/test/iconv/ref/CP8521
-rw-r--r--tools/test/iconv/ref/CP852-rev1
-rw-r--r--tools/test/iconv/ref/CP8531
-rw-r--r--tools/test/iconv/ref/CP853-rev1
-rw-r--r--tools/test/iconv/ref/CP8551
-rw-r--r--tools/test/iconv/ref/CP855-rev1
-rw-r--r--tools/test/iconv/ref/CP8561
-rw-r--r--tools/test/iconv/ref/CP856-rev1
-rw-r--r--tools/test/iconv/ref/CP8571
-rw-r--r--tools/test/iconv/ref/CP857-rev1
-rw-r--r--tools/test/iconv/ref/CP8581
-rw-r--r--tools/test/iconv/ref/CP858-rev1
-rw-r--r--tools/test/iconv/ref/CP8601
-rw-r--r--tools/test/iconv/ref/CP860-rev1
-rw-r--r--tools/test/iconv/ref/CP8611
-rw-r--r--tools/test/iconv/ref/CP861-rev1
-rw-r--r--tools/test/iconv/ref/CP8621
-rw-r--r--tools/test/iconv/ref/CP862-rev1
-rw-r--r--tools/test/iconv/ref/CP8631
-rw-r--r--tools/test/iconv/ref/CP863-rev1
-rw-r--r--tools/test/iconv/ref/CP8641
-rw-r--r--tools/test/iconv/ref/CP864-rev1
-rw-r--r--tools/test/iconv/ref/CP8651
-rw-r--r--tools/test/iconv/ref/CP865-rev1
-rw-r--r--tools/test/iconv/ref/CP8661
-rw-r--r--tools/test/iconv/ref/CP866-rev1
-rw-r--r--tools/test/iconv/ref/CP8691
-rw-r--r--tools/test/iconv/ref/CP869-rev1
-rw-r--r--tools/test/iconv/ref/CP8741
-rw-r--r--tools/test/iconv/ref/CP874-rev1
-rw-r--r--tools/test/iconv/ref/CP9221
-rw-r--r--tools/test/iconv/ref/CP922-rev1
-rw-r--r--tools/test/iconv/ref/CP9321
-rw-r--r--tools/test/iconv/ref/CP932-rev1
-rw-r--r--tools/test/iconv/ref/CP9361
-rw-r--r--tools/test/iconv/ref/CP936-rev1
-rw-r--r--tools/test/iconv/ref/CP9431
-rw-r--r--tools/test/iconv/ref/CP943-rev1
-rw-r--r--tools/test/iconv/ref/CP9491
-rw-r--r--tools/test/iconv/ref/CP949-rev1
-rw-r--r--tools/test/iconv/ref/CP9501
-rw-r--r--tools/test/iconv/ref/CP950-rev1
-rw-r--r--tools/test/iconv/ref/DEC-HANYU1
-rw-r--r--tools/test/iconv/ref/DEC-HANYU-rev1
-rw-r--r--tools/test/iconv/ref/EUC-CN1
-rw-r--r--tools/test/iconv/ref/EUC-CN-rev1
-rw-r--r--tools/test/iconv/ref/EUC-JIS-20041
-rw-r--r--tools/test/iconv/ref/EUC-JIS-2004-rev1
-rw-r--r--tools/test/iconv/ref/EUC-JP1
-rw-r--r--tools/test/iconv/ref/EUC-JP-rev1
-rw-r--r--tools/test/iconv/ref/EUC-KR1
-rw-r--r--tools/test/iconv/ref/EUC-KR-rev1
-rw-r--r--tools/test/iconv/ref/EUC-TW1
-rw-r--r--tools/test/iconv/ref/EUC-TW-rev1
-rw-r--r--tools/test/iconv/ref/GB180301
-rw-r--r--tools/test/iconv/ref/GB18030-rev1
-rw-r--r--tools/test/iconv/ref/GB23121
-rw-r--r--tools/test/iconv/ref/GB2312-rev1
-rw-r--r--tools/test/iconv/ref/GBK1
-rw-r--r--tools/test/iconv/ref/GBK-rev1
-rw-r--r--tools/test/iconv/ref/GEORGIAN-ACADEMY1
-rw-r--r--tools/test/iconv/ref/GEORGIAN-ACADEMY-rev1
-rw-r--r--tools/test/iconv/ref/GEORGIAN-PS1
-rw-r--r--tools/test/iconv/ref/GEORGIAN-PS-rev1
-rw-r--r--tools/test/iconv/ref/HP-ROMAN81
-rw-r--r--tools/test/iconv/ref/HP-ROMAN8-rev1
-rw-r--r--tools/test/iconv/ref/HZ1
-rw-r--r--tools/test/iconv/ref/HZ-rev1
-rw-r--r--tools/test/iconv/ref/ISO-2022-CN1
-rw-r--r--tools/test/iconv/ref/ISO-2022-CN-EXT1
-rw-r--r--tools/test/iconv/ref/ISO-2022-CN-EXT-rev1
-rw-r--r--tools/test/iconv/ref/ISO-2022-CN-rev1
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP1
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP-11
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP-1-rev1
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP-21
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP-2-rev1
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP-20041
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP-2004-rev1
-rw-r--r--tools/test/iconv/ref/ISO-2022-JP-rev1
-rw-r--r--tools/test/iconv/ref/ISO-2022-KR1
-rw-r--r--tools/test/iconv/ref/ISO-2022-KR-rev1
-rw-r--r--tools/test/iconv/ref/ISO-IR-141
-rw-r--r--tools/test/iconv/ref/ISO-IR-14-rev1
-rw-r--r--tools/test/iconv/ref/ISO-IR-1651
-rw-r--r--tools/test/iconv/ref/ISO-IR-165-rev1
-rw-r--r--tools/test/iconv/ref/ISO-IR-571
-rw-r--r--tools/test/iconv/ref/ISO-IR-57-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-11
-rw-r--r--tools/test/iconv/ref/ISO8859-1-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-101
-rw-r--r--tools/test/iconv/ref/ISO8859-10-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-111
-rw-r--r--tools/test/iconv/ref/ISO8859-11-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-131
-rw-r--r--tools/test/iconv/ref/ISO8859-13-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-141
-rw-r--r--tools/test/iconv/ref/ISO8859-14-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-151
-rw-r--r--tools/test/iconv/ref/ISO8859-15-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-161
-rw-r--r--tools/test/iconv/ref/ISO8859-16-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-21
-rw-r--r--tools/test/iconv/ref/ISO8859-2-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-31
-rw-r--r--tools/test/iconv/ref/ISO8859-3-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-41
-rw-r--r--tools/test/iconv/ref/ISO8859-4-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-51
-rw-r--r--tools/test/iconv/ref/ISO8859-5-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-61
-rw-r--r--tools/test/iconv/ref/ISO8859-6-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-71
-rw-r--r--tools/test/iconv/ref/ISO8859-7-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-81
-rw-r--r--tools/test/iconv/ref/ISO8859-8-rev1
-rw-r--r--tools/test/iconv/ref/ISO8859-91
-rw-r--r--tools/test/iconv/ref/ISO8859-9-rev1
-rw-r--r--tools/test/iconv/ref/JAVA1
-rw-r--r--tools/test/iconv/ref/JAVA-rev1
-rw-r--r--tools/test/iconv/ref/JIS_X02011
-rw-r--r--tools/test/iconv/ref/JIS_X0201-rev1
-rw-r--r--tools/test/iconv/ref/JIS_X0208-19901
-rw-r--r--tools/test/iconv/ref/JIS_X0208-1990-rev1
-rw-r--r--tools/test/iconv/ref/JOHAB1
-rw-r--r--tools/test/iconv/ref/JOHAB-rev1
-rw-r--r--tools/test/iconv/ref/KOI8-R1
-rw-r--r--tools/test/iconv/ref/KOI8-R-rev1
-rw-r--r--tools/test/iconv/ref/KOI8-RU1
-rw-r--r--tools/test/iconv/ref/KOI8-RU-rev1
-rw-r--r--tools/test/iconv/ref/KOI8-T1
-rw-r--r--tools/test/iconv/ref/KOI8-T-rev1
-rw-r--r--tools/test/iconv/ref/KOI8-U1
-rw-r--r--tools/test/iconv/ref/KOI8-U-rev1
-rw-r--r--tools/test/iconv/ref/KZ-10481
-rw-r--r--tools/test/iconv/ref/KZ-1048-rev1
-rw-r--r--tools/test/iconv/ref/MACARABIC1
-rw-r--r--tools/test/iconv/ref/MACARABIC-rev1
-rw-r--r--tools/test/iconv/ref/MACCENTRALEUROPE1
-rw-r--r--tools/test/iconv/ref/MACCENTRALEUROPE-rev1
-rw-r--r--tools/test/iconv/ref/MACCROATIAN1
-rw-r--r--tools/test/iconv/ref/MACCROATIAN-rev1
-rw-r--r--tools/test/iconv/ref/MACCYRILLIC1
-rw-r--r--tools/test/iconv/ref/MACCYRILLIC-rev1
-rw-r--r--tools/test/iconv/ref/MACGREEK1
-rw-r--r--tools/test/iconv/ref/MACGREEK-rev1
-rw-r--r--tools/test/iconv/ref/MACHEBREW1
-rw-r--r--tools/test/iconv/ref/MACHEBREW-rev1
-rw-r--r--tools/test/iconv/ref/MACICELAND1
-rw-r--r--tools/test/iconv/ref/MACICELAND-rev1
-rw-r--r--tools/test/iconv/ref/MACROMAN1
-rw-r--r--tools/test/iconv/ref/MACROMAN-rev1
-rw-r--r--tools/test/iconv/ref/MACROMANIA1
-rw-r--r--tools/test/iconv/ref/MACROMANIA-rev1
-rw-r--r--tools/test/iconv/ref/MACTHAI1
-rw-r--r--tools/test/iconv/ref/MACTHAI-rev1
-rw-r--r--tools/test/iconv/ref/MACTURKISH1
-rw-r--r--tools/test/iconv/ref/MACTURKISH-rev1
-rw-r--r--tools/test/iconv/ref/MACUKRAINE1
-rw-r--r--tools/test/iconv/ref/MACUKRAINE-rev1
-rw-r--r--tools/test/iconv/ref/MULELAO-11
-rw-r--r--tools/test/iconv/ref/MULELAO-1-rev1
-rw-r--r--tools/test/iconv/ref/NEXTSTEP1
-rw-r--r--tools/test/iconv/ref/NEXTSTEP-rev1
-rw-r--r--tools/test/iconv/ref/PT1541
-rw-r--r--tools/test/iconv/ref/PT154-rev1
-rw-r--r--tools/test/iconv/ref/RISCOS-LATIN11
-rw-r--r--tools/test/iconv/ref/RISCOS-LATIN1-rev1
-rw-r--r--tools/test/iconv/ref/SHIFT_JIS1
-rw-r--r--tools/test/iconv/ref/SHIFT_JIS-rev1
-rw-r--r--tools/test/iconv/ref/TCVN5712-11
-rw-r--r--tools/test/iconv/ref/TCVN5712-1-rev1
-rw-r--r--tools/test/iconv/ref/TDS5651
-rw-r--r--tools/test/iconv/ref/TDS565-rev1
-rw-r--r--tools/test/iconv/ref/UTF-16BE1
-rw-r--r--tools/test/iconv/ref/UTF-16BE-rev1
-rw-r--r--tools/test/iconv/ref/UTF-16LE1
-rw-r--r--tools/test/iconv/ref/UTF-16LE-rev1
-rw-r--r--tools/test/iconv/ref/UTF-32BE1
-rw-r--r--tools/test/iconv/ref/UTF-32BE-rev1
-rw-r--r--tools/test/iconv/ref/UTF-32LE1
-rw-r--r--tools/test/iconv/ref/UTF-32LE-rev1
-rw-r--r--tools/test/iconv/ref/UTF-71
-rw-r--r--tools/test/iconv/ref/UTF-7-rev1
-rw-r--r--tools/test/iconv/ref/UTF-81
-rw-r--r--tools/test/iconv/ref/UTF-8-rev1
-rw-r--r--tools/test/iconv/ref/VISCII1
-rw-r--r--tools/test/iconv/ref/VISCII-rev1
-rw-r--r--tools/test/iconv/refgen/Makefile2
-rw-r--r--tools/test/iconv/tablegen/Makefile2
-rwxr-xr-xtools/test/iconv/tablegen/cmp.sh1
-rw-r--r--tools/test/iconv/tablegen/tablegen.c4
-rw-r--r--tools/test/malloc/Makefile1
-rw-r--r--tools/test/malloc/main.c1
-rw-r--r--tools/test/net/Makefile2
-rw-r--r--tools/test/net/connect.c2
-rw-r--r--tools/test/net/listen.c2
-rw-r--r--tools/test/netfibs/Makefile2
-rw-r--r--tools/test/netfibs/README1
-rwxr-xr-xtools/test/netfibs/forwarding.sh1
-rwxr-xr-xtools/test/netfibs/initiator.sh1
-rw-r--r--tools/test/netfibs/reflect.c2
-rwxr-xr-xtools/test/netfibs/reflector.sh3
-rw-r--r--tools/test/popss/popss.c4
-rw-r--r--tools/test/ppsapi/Makefile2
-rw-r--r--tools/test/ppsapi/README1
-rw-r--r--tools/test/ppsapi/ppsapitest.c2
-rw-r--r--tools/test/pthread_vfork/pthread_vfork_test.c3
-rw-r--r--tools/test/ptrace/Makefile2
-rw-r--r--tools/test/ptrace/scescx.c37
-rwxr-xr-xtools/test/sort/bigtest/kcmd2
-rw-r--r--tools/test/sort/regression/Makefile2
-rwxr-xr-xtools/test/sort/regression/cmp.sh1
-rw-r--r--tools/test/stress2/default.cfg1
-rw-r--r--tools/test/stress2/lib/resources.c2
-rwxr-xr-xtools/test/stress2/misc/1st.sh2
-rwxr-xr-xtools/test/stress2/misc/aesni.sh7
-rw-r--r--tools/test/stress2/misc/all.debug.inc3
-rw-r--r--tools/test/stress2/misc/all.exclude76
-rwxr-xr-xtools/test/stress2/misc/all.sh16
-rwxr-xr-xtools/test/stress2/misc/arp.sh2
-rwxr-xr-xtools/test/stress2/misc/aslr.sh2
-rwxr-xr-xtools/test/stress2/misc/badcode2.sh2
-rwxr-xr-xtools/test/stress2/misc/badcode3.sh9
-rwxr-xr-xtools/test/stress2/misc/beneath.sh2
-rwxr-xr-xtools/test/stress2/misc/beneath2.sh2
-rwxr-xr-xtools/test/stress2/misc/beneath3.sh2
-rwxr-xr-xtools/test/stress2/misc/beneath4.sh2
-rwxr-xr-xtools/test/stress2/misc/buildkernel.sh3
-rwxr-xr-xtools/test/stress2/misc/buildworld.sh1
-rwxr-xr-xtools/test/stress2/misc/buildworld2.sh1
-rwxr-xr-xtools/test/stress2/misc/buildworld3.sh3
-rwxr-xr-xtools/test/stress2/misc/buildworld4.sh3
-rwxr-xr-xtools/test/stress2/misc/chain.sh2
-rwxr-xr-xtools/test/stress2/misc/chroot.sh2
-rwxr-xr-xtools/test/stress2/misc/compare.sh2
-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/core5.sh4
-rwxr-xr-xtools/test/stress2/misc/cpuset.sh2
-rwxr-xr-xtools/test/stress2/misc/creat.sh84
-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/datagram.sh2
-rwxr-xr-xtools/test/stress2/misc/datagram2.sh2
-rwxr-xr-xtools/test/stress2/misc/datagram3.sh2
-rwxr-xr-xtools/test/stress2/misc/datamove.sh2
-rwxr-xr-xtools/test/stress2/misc/datamove2.sh2
-rwxr-xr-xtools/test/stress2/misc/datamove3.sh2
-rwxr-xr-xtools/test/stress2/misc/datamove6.sh50
-rwxr-xr-xtools/test/stress2/misc/devfs4.sh2
-rwxr-xr-xtools/test/stress2/misc/devfs5.sh4
-rwxr-xr-xtools/test/stress2/misc/dtrace_fault.sh2
-rwxr-xr-xtools/test/stress2/misc/dup.sh2
-rwxr-xr-xtools/test/stress2/misc/elf.sh2
-rwxr-xr-xtools/test/stress2/misc/execpath.sh2
-rwxr-xr-xtools/test/stress2/misc/exlock2.sh19
-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.sh4
-rwxr-xr-xtools/test/stress2/misc/ext4fs.sh4
-rwxr-xr-xtools/test/stress2/misc/extattr2.sh2
-rwxr-xr-xtools/test/stress2/misc/extattr3.sh2
-rwxr-xr-xtools/test/stress2/misc/fcntl.sh21
-rwxr-xr-xtools/test/stress2/misc/fcntl2.sh4
-rwxr-xr-xtools/test/stress2/misc/fcntl3.sh2
-rwxr-xr-xtools/test/stress2/misc/fexecve.sh2
-rwxr-xr-xtools/test/stress2/misc/fifo2.sh8
-rwxr-xr-xtools/test/stress2/misc/fifo4.sh4
-rwxr-xr-xtools/test/stress2/misc/flock_open_close.sh7
-rwxr-xr-xtools/test/stress2/misc/force.sh2
-rwxr-xr-xtools/test/stress2/misc/force10.sh92
-rwxr-xr-xtools/test/stress2/misc/force11.sh100
-rwxr-xr-xtools/test/stress2/misc/force12.sh83
-rwxr-xr-xtools/test/stress2/misc/force13.sh129
-rwxr-xr-xtools/test/stress2/misc/force14.sh119
-rwxr-xr-xtools/test/stress2/misc/force15.sh113
-rwxr-xr-xtools/test/stress2/misc/force2.sh2
-rwxr-xr-xtools/test/stress2/misc/force3.sh2
-rwxr-xr-xtools/test/stress2/misc/force4.sh2
-rwxr-xr-xtools/test/stress2/misc/force5.sh2
-rwxr-xr-xtools/test/stress2/misc/force6.sh2
-rwxr-xr-xtools/test/stress2/misc/force7.sh2
-rwxr-xr-xtools/test/stress2/misc/force8.sh2
-rwxr-xr-xtools/test/stress2/misc/force9.sh25
-rwxr-xr-xtools/test/stress2/misc/fork2.sh134
-rwxr-xr-xtools/test/stress2/misc/forkbomb.sh5
-rwxr-xr-xtools/test/stress2/misc/fsck.sh22
-rwxr-xr-xtools/test/stress2/misc/fsck10.sh172
-rwxr-xr-xtools/test/stress2/misc/fsck11.sh171
-rwxr-xr-xtools/test/stress2/misc/fsck12.sh175
-rwxr-xr-xtools/test/stress2/misc/fsck13.sh153
-rwxr-xr-xtools/test/stress2/misc/fsck14.sh119
-rwxr-xr-xtools/test/stress2/misc/fsck2.sh2
-rwxr-xr-xtools/test/stress2/misc/fsck3.sh2
-rwxr-xr-xtools/test/stress2/misc/fsck4.sh2
-rwxr-xr-xtools/test/stress2/misc/fsck5.sh2
-rwxr-xr-xtools/test/stress2/misc/fsck6.sh2
-rwxr-xr-xtools/test/stress2/misc/fsck7.sh2
-rwxr-xr-xtools/test/stress2/misc/fsck8.sh179
-rwxr-xr-xtools/test/stress2/misc/fsck9.sh168
-rwxr-xr-xtools/test/stress2/misc/fstat.sh2
-rwxr-xr-xtools/test/stress2/misc/fsync2.sh2
-rwxr-xr-xtools/test/stress2/misc/fsync3.sh156
-rwxr-xr-xtools/test/stress2/misc/fsync4.sh146
-rwxr-xr-xtools/test/stress2/misc/ftruncate3.sh96
-rwxr-xr-xtools/test/stress2/misc/fullpath2.sh2
-rwxr-xr-xtools/test/stress2/misc/geomleak2.sh2
-rwxr-xr-xtools/test/stress2/misc/getrandom.sh2
-rwxr-xr-xtools/test/stress2/misc/getrandom2.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop10.sh6
-rwxr-xr-xtools/test/stress2/misc/gnop11.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop12.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop13.sh138
-rwxr-xr-xtools/test/stress2/misc/gnop2.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop4.sh3
-rwxr-xr-xtools/test/stress2/misc/gnop6.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop7.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop8.sh2
-rwxr-xr-xtools/test/stress2/misc/gnop9.sh2
-rwxr-xr-xtools/test/stress2/misc/gpt.sh2
-rwxr-xr-xtools/test/stress2/misc/growfs2.sh65
-rwxr-xr-xtools/test/stress2/misc/growfs3.sh41
-rwxr-xr-xtools/test/stress2/misc/gunion.sh9
-rwxr-xr-xtools/test/stress2/misc/gunion2.sh9
-rwxr-xr-xtools/test/stress2/misc/holdcnt05.sh2
-rwxr-xr-xtools/test/stress2/misc/ifconfig.sh2
-rwxr-xr-xtools/test/stress2/misc/ifconfig2.sh2
-rwxr-xr-xtools/test/stress2/misc/indir.sh2
-rwxr-xr-xtools/test/stress2/misc/indir_trunc.sh2
-rwxr-xr-xtools/test/stress2/misc/jexec.sh2
-rwxr-xr-xtools/test/stress2/misc/jumbo.sh2
-rwxr-xr-xtools/test/stress2/misc/kcmp.sh67
-rwxr-xr-xtools/test/stress2/misc/kern_umtx_inf_loop.sh1
-rwxr-xr-xtools/test/stress2/misc/kevent10.sh2
-rwxr-xr-xtools/test/stress2/misc/kevent12.sh2
-rwxr-xr-xtools/test/stress2/misc/kevent13.sh2
-rwxr-xr-xtools/test/stress2/misc/kevent14.sh2
-rwxr-xr-xtools/test/stress2/misc/kevent15.sh2
-rwxr-xr-xtools/test/stress2/misc/killpg2.sh197
-rwxr-xr-xtools/test/stress2/misc/killpg3.sh192
-rwxr-xr-xtools/test/stress2/misc/killpg4.sh114
-rwxr-xr-xtools/test/stress2/misc/kpti.sh2
-rwxr-xr-xtools/test/stress2/misc/largepage.sh2
-rwxr-xr-xtools/test/stress2/misc/ldt.sh1
-rwxr-xr-xtools/test/stress2/misc/linux.sh2
-rwxr-xr-xtools/test/stress2/misc/mapwrite.sh189
-rwxr-xr-xtools/test/stress2/misc/marcus6.sh2
-rwxr-xr-xtools/test/stress2/misc/marcus7.sh2
-rwxr-xr-xtools/test/stress2/misc/marcus8.sh41
-rwxr-xr-xtools/test/stress2/misc/mdconfig3.sh2
-rwxr-xr-xtools/test/stress2/misc/mdconfig4.sh2
-rwxr-xr-xtools/test/stress2/misc/mdconfig5.sh2
-rwxr-xr-xtools/test/stress2/misc/midi.sh2
-rwxr-xr-xtools/test/stress2/misc/midi2.sh2
-rwxr-xr-xtools/test/stress2/misc/mincore.sh2
-rwxr-xr-xtools/test/stress2/misc/minherit.sh2
-rwxr-xr-xtools/test/stress2/misc/mkdir.sh81
-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/mkfifo8.sh2
-rwxr-xr-xtools/test/stress2/misc/mlockall4.sh2
-rwxr-xr-xtools/test/stress2/misc/mlockall6.sh5
-rwxr-xr-xtools/test/stress2/misc/mmap10.sh21
-rwxr-xr-xtools/test/stress2/misc/mmap18.sh13
-rwxr-xr-xtools/test/stress2/misc/mmap32.sh5
-rwxr-xr-xtools/test/stress2/misc/mmap33.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap34.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap35.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap36.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap37.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap38.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap39.sh2
-rwxr-xr-xtools/test/stress2/misc/mmap40.sh13
-rwxr-xr-xtools/test/stress2/misc/mmap41.sh160
-rwxr-xr-xtools/test/stress2/misc/mmap42.sh101
-rwxr-xr-xtools/test/stress2/misc/mmap43.sh187
-rwxr-xr-xtools/test/stress2/misc/mmap44.sh255
-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.sh (renamed from tools/test/stress2/misc/vmstat2.sh)46
-rwxr-xr-xtools/test/stress2/misc/mountro4.sh2
-rwxr-xr-xtools/test/stress2/misc/mountro5.sh2
-rwxr-xr-xtools/test/stress2/misc/mountro6.sh2
-rwxr-xr-xtools/test/stress2/misc/mountu.sh2
-rwxr-xr-xtools/test/stress2/misc/mprotect.sh2
-rwxr-xr-xtools/test/stress2/misc/mprotect2.sh2
-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/msdos11.sh2
-rwxr-xr-xtools/test/stress2/misc/msdos12.sh2
-rwxr-xr-xtools/test/stress2/misc/msdos13.sh2
-rwxr-xr-xtools/test/stress2/misc/msdos14.sh4
-rwxr-xr-xtools/test/stress2/misc/msdos15.sh2
-rwxr-xr-xtools/test/stress2/misc/msdos16.sh2
-rwxr-xr-xtools/test/stress2/misc/msdos17.sh144
-rwxr-xr-xtools/test/stress2/misc/msdos18.sh250
-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/newfs.sh4
-rwxr-xr-xtools/test/stress2/misc/newfs6.sh (renamed from tools/test/stress2/misc/md4.sh)50
-rwxr-xr-xtools/test/stress2/misc/newfs7.sh (renamed from tools/test/stress2/misc/gbde.sh)48
-rwxr-xr-xtools/test/stress2/misc/newfs8.sh69
-rwxr-xr-xtools/test/stress2/misc/nfs17.sh2
-rwxr-xr-xtools/test/stress2/misc/nfs18.sh2
-rwxr-xr-xtools/test/stress2/misc/nfs_halfpage.sh2
-rwxr-xr-xtools/test/stress2/misc/nfs_halfpage2.sh2
-rwxr-xr-xtools/test/stress2/misc/nfsrename.sh4
-rwxr-xr-xtools/test/stress2/misc/nlink.sh2
-rwxr-xr-xtools/test/stress2/misc/nlink2.sh2
-rwxr-xr-xtools/test/stress2/misc/nlink3.sh4
-rwxr-xr-xtools/test/stress2/misc/nlink4.sh4
-rwxr-xr-xtools/test/stress2/misc/nlink5.sh9
-rwxr-xr-xtools/test/stress2/misc/nullfs18.sh3
-rwxr-xr-xtools/test/stress2/misc/nullfs25.sh2
-rwxr-xr-xtools/test/stress2/misc/nullfs26.sh2
-rwxr-xr-xtools/test/stress2/misc/nullfs27.sh2
-rwxr-xr-xtools/test/stress2/misc/nullfs28.sh2
-rwxr-xr-xtools/test/stress2/misc/nullfs30.sh112
-rwxr-xr-xtools/test/stress2/misc/nullfs31.sh75
-rwxr-xr-xtools/test/stress2/misc/nullfs32.sh43
-rwxr-xr-xtools/test/stress2/misc/numa.sh2
-rwxr-xr-xtools/test/stress2/misc/open2.sh2
-rwxr-xr-xtools/test/stress2/misc/overflow3.sh2
-rwxr-xr-xtools/test/stress2/misc/pageout.sh10
-rwxr-xr-xtools/test/stress2/misc/pager_read_error.sh36
-rwxr-xr-xtools/test/stress2/misc/perf.sh3
-rwxr-xr-xtools/test/stress2/misc/ping.sh2
-rwxr-xr-xtools/test/stress2/misc/pipe3.sh2
-rwxr-xr-xtools/test/stress2/misc/pipe_enomem.sh2
-rwxr-xr-xtools/test/stress2/misc/pkru.sh2
-rwxr-xr-xtools/test/stress2/misc/pmc6.sh2
-rwxr-xr-xtools/test/stress2/misc/poll2.sh6
-rwxr-xr-xtools/test/stress2/misc/pread.sh10
-rwxr-xr-xtools/test/stress2/misc/proccontrol.sh2
-rwxr-xr-xtools/test/stress2/misc/procfs.sh3
-rwxr-xr-xtools/test/stress2/misc/procfs3.sh2
-rwxr-xr-xtools/test/stress2/misc/procfs4.sh7
-rwxr-xr-xtools/test/stress2/misc/procfs6.sh2
-rwxr-xr-xtools/test/stress2/misc/procstat.sh2
-rwxr-xr-xtools/test/stress2/misc/procstat2.sh2
-rwxr-xr-xtools/test/stress2/misc/pthread10.sh106
-rwxr-xr-xtools/test/stress2/misc/ptrace10.sh2
-rwxr-xr-xtools/test/stress2/misc/ptrace11.sh2
-rwxr-xr-xtools/test/stress2/misc/ptrace12.sh2
-rwxr-xr-xtools/test/stress2/misc/ptrace9.sh2
-rwxr-xr-xtools/test/stress2/misc/pts2.sh4
-rwxr-xr-xtools/test/stress2/misc/pts3.sh2
-rwxr-xr-xtools/test/stress2/misc/quota12.sh2
-rwxr-xr-xtools/test/stress2/misc/quota5.sh2
-rwxr-xr-xtools/test/stress2/misc/r335171.sh2
-rwxr-xr-xtools/test/stress2/misc/radix.sh6
-rwxr-xr-xtools/test/stress2/misc/random.sh2
-rwxr-xr-xtools/test/stress2/misc/rangelocks.sh194
-rwxr-xr-xtools/test/stress2/misc/rangelocks2.sh178
-rwxr-xr-xtools/test/stress2/misc/rdgsbase.sh2
-rwxr-xr-xtools/test/stress2/misc/rdwr.sh50
-rwxr-xr-xtools/test/stress2/misc/readdir.sh8
-rwxr-xr-xtools/test/stress2/misc/reaper.sh2
-rwxr-xr-xtools/test/stress2/misc/reaper2.sh10
-rwxr-xr-xtools/test/stress2/misc/reaper3.sh13
-rwxr-xr-xtools/test/stress2/misc/reaper4.sh13
-rwxr-xr-xtools/test/stress2/misc/reaper5.sh2
-rwxr-xr-xtools/test/stress2/misc/rename14.sh5
-rwxr-xr-xtools/test/stress2/misc/rename15.sh2
-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/seekhole.sh77
-rwxr-xr-xtools/test/stress2/misc/seekhole2.sh65
-rwxr-xr-xtools/test/stress2/misc/segnp.sh2
-rwxr-xr-xtools/test/stress2/misc/segregs.sh2
-rwxr-xr-xtools/test/stress2/misc/sem_post.sh2
-rwxr-xr-xtools/test/stress2/misc/sem_timedwait.sh2
-rwxr-xr-xtools/test/stress2/misc/sem_wait.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile15.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile17.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile18.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile19.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile20.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile21.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile22.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile23.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile24.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile25.sh6
-rwxr-xr-xtools/test/stress2/misc/sendfile26.sh2
-rwxr-xr-xtools/test/stress2/misc/sendfile5.sh4
-rwxr-xr-xtools/test/stress2/misc/setrlimit.sh193
-rwxr-xr-xtools/test/stress2/misc/setrlimit2.sh118
-rwxr-xr-xtools/test/stress2/misc/setsockopt.sh2
-rwxr-xr-xtools/test/stress2/misc/setsockopt2.sh5
-rwxr-xr-xtools/test/stress2/misc/shm2.sh2
-rwxr-xr-xtools/test/stress2/misc/shm_super.sh2
-rwxr-xr-xtools/test/stress2/misc/sigfastblock.sh2
-rwxr-xr-xtools/test/stress2/misc/sigfastblock2.sh2
-rwxr-xr-xtools/test/stress2/misc/signal2.sh53
-rwxr-xr-xtools/test/stress2/misc/sigreturn2.sh69
-rwxr-xr-xtools/test/stress2/misc/sigreturn3.sh181
-rwxr-xr-xtools/test/stress2/misc/sigreturn4.sh207
-rwxr-xr-xtools/test/stress2/misc/sigstop2.sh2
-rwxr-xr-xtools/test/stress2/misc/smrstress.sh2
-rwxr-xr-xtools/test/stress2/misc/smrstress2.sh2
-rwxr-xr-xtools/test/stress2/misc/snap12.sh2
-rwxr-xr-xtools/test/stress2/misc/snap13.sh70
-rwxr-xr-xtools/test/stress2/misc/socketpair4.sh2
-rwxr-xr-xtools/test/stress2/misc/softupdate.sh1
-rwxr-xr-xtools/test/stress2/misc/sort2.sh2
-rwxr-xr-xtools/test/stress2/misc/split.sh2
-rwxr-xr-xtools/test/stress2/misc/su.sh2
-rwxr-xr-xtools/test/stress2/misc/suj11.sh2
-rwxr-xr-xtools/test/stress2/misc/suj12.sh3
-rwxr-xr-xtools/test/stress2/misc/suj15.sh2
-rwxr-xr-xtools/test/stress2/misc/suj16.sh2
-rwxr-xr-xtools/test/stress2/misc/suj26.sh2
-rwxr-xr-xtools/test/stress2/misc/suj27.sh2
-rwxr-xr-xtools/test/stress2/misc/suj36.sh84
-rwxr-xr-xtools/test/stress2/misc/suj4.sh2
-rwxr-xr-xtools/test/stress2/misc/suj5.sh3
-rwxr-xr-xtools/test/stress2/misc/swap5.sh2
-rwxr-xr-xtools/test/stress2/misc/swap6.sh4
-rwxr-xr-xtools/test/stress2/misc/swapoff3.sh2
-rwxr-xr-xtools/test/stress2/misc/swapoff4.sh2
-rwxr-xr-xtools/test/stress2/misc/swapoff5.sh2
-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.sh3
-rwxr-xr-xtools/test/stress2/misc/syscall4.sh2
-rwxr-xr-xtools/test/stress2/misc/systrace.sh2
-rwxr-xr-xtools/test/stress2/misc/systrace2.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller11.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller12.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller14.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller15.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller16.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller19.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller24.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller26.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller27.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller28.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller29.sh4
-rwxr-xr-xtools/test/stress2/misc/syzkaller30.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller31.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller32.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller33.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller34.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller4.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller42.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller43.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller50.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller51.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller53.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller54.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller55.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller58.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller59.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller61.sh319
-rwxr-xr-xtools/test/stress2/misc/syzkaller62.sh83
-rwxr-xr-xtools/test/stress2/misc/syzkaller63.sh75
-rwxr-xr-xtools/test/stress2/misc/syzkaller64.sh328
-rwxr-xr-xtools/test/stress2/misc/syzkaller65.sh82
-rwxr-xr-xtools/test/stress2/misc/syzkaller66.sh156
-rwxr-xr-xtools/test/stress2/misc/syzkaller67.sh99
-rwxr-xr-xtools/test/stress2/misc/syzkaller68.sh235
-rwxr-xr-xtools/test/stress2/misc/syzkaller69.sh494
-rwxr-xr-xtools/test/stress2/misc/syzkaller7.sh2
-rwxr-xr-xtools/test/stress2/misc/syzkaller70.sh302
-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/syzkaller80.sh320
-rwxr-xr-xtools/test/stress2/misc/syzkaller81.sh72
-rwxr-xr-xtools/test/stress2/misc/syzkaller82.sh122
-rwxr-xr-xtools/test/stress2/misc/syzkaller83.sh168
-rwxr-xr-xtools/test/stress2/misc/tcp4.sh2
-rwxr-xr-xtools/test/stress2/misc/timeout.sh2
-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/tmpfs19.sh2
-rwxr-xr-xtools/test/stress2/misc/tmpfs2.sh6
-rwxr-xr-xtools/test/stress2/misc/tmpfs20.sh2
-rwxr-xr-xtools/test/stress2/misc/tmpfs21.sh2
-rwxr-xr-xtools/test/stress2/misc/tmpfs22.sh2
-rwxr-xr-xtools/test/stress2/misc/tmpfs23.sh2
-rwxr-xr-x[-rw-r--r--]tools/test/stress2/misc/tmpfs24.sh (renamed from tools/tools/nanobsd/embedded/qemu-mips.cfg)57
-rwxr-xr-xtools/test/stress2/misc/tmpfs25.sh86
-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/trim8.sh2
-rwxr-xr-xtools/test/stress2/misc/truncate8.sh2
-rwxr-xr-xtools/test/stress2/misc/truncate9.sh2
-rwxr-xr-xtools/test/stress2/misc/truss2.sh2
-rwxr-xr-xtools/test/stress2/misc/udp2.sh2
-rwxr-xr-xtools/test/stress2/misc/ufsbench.sh2
-rwxr-xr-xtools/test/stress2/misc/umount3.sh2
-rwxr-xr-xtools/test/stress2/misc/umount4.sh2
-rwxr-xr-xtools/test/stress2/misc/umountf11.sh2
-rwxr-xr-xtools/test/stress2/misc/umountf12.sh2
-rwxr-xr-xtools/test/stress2/misc/umountf4.sh6
-rwxr-xr-xtools/test/stress2/misc/umountf6.sh6
-rwxr-xr-xtools/test/stress2/misc/unionfs13.sh2
-rwxr-xr-xtools/test/stress2/misc/unionfs14.sh2
-rwxr-xr-xtools/test/stress2/misc/unionfs15.sh86
-rwxr-xr-xtools/test/stress2/misc/unionfs16.sh65
-rwxr-xr-xtools/test/stress2/misc/unionfs17.sh73
-rwxr-xr-xtools/test/stress2/misc/unionfs18.sh73
-rwxr-xr-xtools/test/stress2/misc/unionfs19.sh74
-rwxr-xr-xtools/test/stress2/misc/unionfs4.sh4
-rwxr-xr-xtools/test/stress2/misc/unionfs5.sh13
-rwxr-xr-xtools/test/stress2/misc/unionfs6.sh8
-rwxr-xr-xtools/test/stress2/misc/unionfs7.sh8
-rwxr-xr-xtools/test/stress2/misc/unionfs8.sh12
-rwxr-xr-xtools/test/stress2/misc/unionfs9.sh3
-rwxr-xr-xtools/test/stress2/misc/unix_socket.sh2
-rwxr-xr-xtools/test/stress2/misc/unix_socket_detach.sh2
-rwxr-xr-xtools/test/stress2/misc/vfork.sh36
-rwxr-xr-xtools/test/stress2/misc/vm_map.sh2
-rwxr-xr-xtools/test/stress2/misc/vunref.sh3
-rwxr-xr-xtools/test/stress2/misc/write2.sh2
-rwxr-xr-xtools/test/stress2/misc/zfs10.sh2
-rwxr-xr-xtools/test/stress2/misc/zfs11.sh2
-rwxr-xr-xtools/test/stress2/misc/zfs12.sh2
-rwxr-xr-xtools/test/stress2/misc/zfs13.sh2
-rwxr-xr-xtools/test/stress2/misc/zfs14.sh2
-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/zfs8.sh2
-rwxr-xr-xtools/test/stress2/misc/zfs9.sh2
-rwxr-xr-xtools/test/stress2/misc/zz-combo01.sh2
-rwxr-xr-xtools/test/stress2/misc/zz-combo02.sh2
-rwxr-xr-xtools/test/stress2/misc/zz-combo03.sh2
-rwxr-xr-xtools/test/stress2/misc/zz-combo04.sh2
-rwxr-xr-xtools/test/stress2/misc/zzbuildworld.sh3
-rw-r--r--tools/test/stress2/testcases/swap/swap.c6
-rw-r--r--tools/test/stress2/tools/bench.c2
-rwxr-xr-xtools/test/stress2/tools/fail.sh2
-rwxr-xr-xtools/test/stress2/tools/fast.sh2
-rw-r--r--tools/test/stress2/tools/flip.c29
-rw-r--r--tools/test/stress2/tools/lsholes.c61
-rwxr-xr-xtools/test/stress2/tools/ministat.sh2
-rwxr-xr-xtools/test/stress2/tools/ps.sh2
-rw-r--r--tools/test/stress2/tools/serial.c44
-rw-r--r--tools/test/stress2/tools/swap.c2
-rwxr-xr-xtools/test/stress2/tools/vmstat.sh31
-rw-r--r--tools/test/testfloat/README.txt50
-rw-r--r--tools/test/testfloat/fail.c46
-rw-r--r--tools/test/testfloat/fail.h29
-rw-r--r--tools/test/testfloat/random.c63
-rw-r--r--tools/test/testfloat/random.h32
-rw-r--r--tools/test/testfloat/slowfloat-32.c1183
-rw-r--r--tools/test/testfloat/slowfloat-64.c2109
-rw-r--r--tools/test/testfloat/slowfloat.c35
-rw-r--r--tools/test/testfloat/slowfloat.h167
-rw-r--r--tools/test/testfloat/systemBugs.txt323
-rw-r--r--tools/test/testfloat/systflags.h33
-rw-r--r--tools/test/testfloat/systfloat.c553
-rw-r--r--tools/test/testfloat/systmodes.h42
-rw-r--r--tools/test/testfloat/testCases.c3682
-rw-r--r--tools/test/testfloat/testCases.h69
-rw-r--r--tools/test/testfloat/testFunction.c1149
-rw-r--r--tools/test/testfloat/testFunction.h135
-rw-r--r--tools/test/testfloat/testLoops.c2713
-rw-r--r--tools/test/testfloat/testLoops.h143
-rw-r--r--tools/test/testfloat/testfloat-history.txt57
-rw-r--r--tools/test/testfloat/testfloat-source.txt444
-rw-r--r--tools/test/testfloat/testfloat.c299
-rw-r--r--tools/test/testfloat/testfloat.txt771
-rw-r--r--tools/test/testfloat/testsoftfloat.c1044
-rw-r--r--tools/test/testfloat/writeHex.c183
-rw-r--r--tools/test/testfloat/writeHex.h42
-rw-r--r--tools/test/upsdl/Makefile2
-rw-r--r--tools/test/upsdl/upsdl.c2
-rw-r--r--tools/test/vm86/Makefile2
-rw-r--r--tools/test/vm86/vm86_test.c4
-rw-r--r--tools/test/vm86/vm86_test_asm.s5
-rw-r--r--tools/test/xregs_sig/Makefile10
-rw-r--r--tools/test/xregs_sig/c2x2c_aarch64.S64
-rw-r--r--tools/test/xregs_sig/c2x2c_amd64.S140
-rw-r--r--tools/test/xregs_sig/xregs_sig.c262
-rwxr-xr-xtools/tinder.sh1
-rw-r--r--tools/tools/README6
-rw-r--r--tools/tools/aac/Makefile2
-rw-r--r--tools/tools/aac/aac_checkq.c3
-rw-r--r--tools/tools/ansify/Makefile2
-rw-r--r--tools/tools/ansify/ansify.pl3
-rw-r--r--tools/tools/ath/Makefile2
-rw-r--r--tools/tools/ath/Makefile.inc2
-rw-r--r--tools/tools/ath/arcode/Makefile2
-rw-r--r--tools/tools/ath/arcode/arcode.c2
-rw-r--r--tools/tools/ath/ath_ee_9287_print/9287.c2
-rw-r--r--tools/tools/ath/ath_ee_9287_print/9287.h1
-rw-r--r--tools/tools/ath/ath_ee_9287_print/Makefile2
-rw-r--r--tools/tools/ath/ath_ee_9287_print/eeprom.c2
-rw-r--r--tools/tools/ath/ath_ee_9287_print/eeprom.h1
-rw-r--r--tools/tools/ath/ath_ee_9287_print/main.c2
-rw-r--r--tools/tools/ath/ath_ee_9300_print/Makefile2
-rw-r--r--tools/tools/ath/ath_ee_9300_print/Makefile.depend1
-rw-r--r--tools/tools/ath/ath_ee_9300_print/main.c2
-rw-r--r--tools/tools/ath/ath_ee_v14_print/Makefile2
-rw-r--r--tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c2
-rw-r--r--tools/tools/ath/ath_ee_v4k_print/Makefile2
-rw-r--r--tools/tools/ath/ath_ee_v4k_print/eeprom.c2
-rw-r--r--tools/tools/ath/ath_ee_v4k_print/eeprom.h1
-rw-r--r--tools/tools/ath/ath_ee_v4k_print/main.c2
-rw-r--r--tools/tools/ath/ath_ee_v4k_print/v4k.c2
-rw-r--r--tools/tools/ath/ath_ee_v4k_print/v4k.h1
-rw-r--r--tools/tools/ath/ath_prom_read/Makefile2
-rw-r--r--tools/tools/ath/ath_prom_read/ath_prom_read.c2
-rw-r--r--tools/tools/ath/athaggrstats/Makefile2
-rw-r--r--tools/tools/ath/athaggrstats/athaggrstats.c2
-rw-r--r--tools/tools/ath/athaggrstats/athaggrstats.h2
-rw-r--r--tools/tools/ath/athaggrstats/main.c2
-rw-r--r--tools/tools/ath/athalq/Makefile2
-rw-r--r--tools/tools/ath/athalq/ar5210_ds.c2
-rw-r--r--tools/tools/ath/athalq/ar5210_ds.h2
-rw-r--r--tools/tools/ath/athalq/ar5211_ds.c2
-rw-r--r--tools/tools/ath/athalq/ar5211_ds.h2
-rw-r--r--tools/tools/ath/athalq/ar5212_ds.c2
-rw-r--r--tools/tools/ath/athalq/ar5212_ds.h2
-rw-r--r--tools/tools/ath/athalq/ar5416_ds.c2
-rw-r--r--tools/tools/ath/athalq/ar5416_ds.h2
-rw-r--r--tools/tools/ath/athalq/ar5416_ds_tdma.c2
-rw-r--r--tools/tools/ath/athalq/ar9300_ds.c2
-rw-r--r--tools/tools/ath/athalq/ar9300_ds.h2
-rw-r--r--tools/tools/ath/athalq/main.c2
-rw-r--r--tools/tools/ath/athalq/tdma.c2
-rw-r--r--tools/tools/ath/athalq/tdma.h2
-rwxr-xr-xtools/tools/ath/athalq/txdiff.pl2
-rw-r--r--tools/tools/ath/athani/Makefile2
-rw-r--r--tools/tools/ath/athani/main.c2
-rw-r--r--tools/tools/ath/athctrl.sh1
-rw-r--r--tools/tools/ath/athdebug/Makefile2
-rw-r--r--tools/tools/ath/athdebug/athdebug.c2
-rw-r--r--tools/tools/ath/athdecode/Makefile1
-rw-r--r--tools/tools/ath/athdecode/main.c2
-rw-r--r--tools/tools/ath/athkey/Makefile2
-rw-r--r--tools/tools/ath/athkey/athkey.c2
-rw-r--r--tools/tools/ath/athpoke/Makefile2
-rw-r--r--tools/tools/ath/athpoke/athpoke.c8
-rw-r--r--tools/tools/ath/athpow/Makefile2
-rw-r--r--tools/tools/ath/athpow/athpow.c2
-rw-r--r--tools/tools/ath/athprom/Makefile2
-rw-r--r--tools/tools/ath/athprom/athprom.c2
-rw-r--r--tools/tools/ath/athprom/eeprom-141
-rw-r--r--tools/tools/ath/athprom/eeprom-31
-rw-r--r--tools/tools/ath/athprom/eeprom-41
-rw-r--r--tools/tools/ath/athprom/eeprom-51
-rw-r--r--tools/tools/ath/athradar/Makefile2
-rw-r--r--tools/tools/ath/athradar/athradar.c2
-rw-r--r--tools/tools/ath/athratestats/Makefile2
-rw-r--r--tools/tools/ath/athratestats/main.c2
-rw-r--r--tools/tools/ath/athrd/Makefile2
-rw-r--r--tools/tools/ath/athrd/athrd.12
-rw-r--r--tools/tools/ath/athrd/athrd.c2
-rwxr-xr-xtools/tools/ath/athrd/run.sh1
-rw-r--r--tools/tools/ath/athregs/Makefile2
-rw-r--r--tools/tools/ath/athregs/dumpregs.c2
-rw-r--r--tools/tools/ath/athspectral/Makefile2
-rw-r--r--tools/tools/ath/athspectral/athspectral.c2
-rw-r--r--tools/tools/ath/athstats/Makefile2
-rw-r--r--tools/tools/ath/athstats/athstats.c2
-rw-r--r--tools/tools/ath/athstats/athstats.h2
-rw-r--r--tools/tools/ath/athstats/main.c2
-rw-r--r--tools/tools/ath/athsurvey/Makefile2
-rw-r--r--tools/tools/ath/athsurvey/athsurvey.c2
-rw-r--r--tools/tools/ath/common/ah_osdep.h2
-rw-r--r--tools/tools/ath/common/ctrl.c4
-rw-r--r--tools/tools/ath/common/ctrl.h2
-rw-r--r--tools/tools/ath/common/diag.h2
-rw-r--r--tools/tools/ath/common/dumpregs.h2
-rw-r--r--tools/tools/ath/common/dumpregs_5210.c2
-rw-r--r--tools/tools/ath/common/dumpregs_5211.c2
-rw-r--r--tools/tools/ath/common/dumpregs_5212.c2
-rw-r--r--tools/tools/ath/common/dumpregs_5416.c2
-rw-r--r--tools/tools/bhyve/Makefile8
-rw-r--r--tools/tools/bhyve/fwctl_fetch.c143
-rw-r--r--tools/tools/bootparttest/Makefile2
-rw-r--r--tools/tools/bootparttest/bootparttest.c3
-rw-r--r--tools/tools/bootparttest/stub.c2
-rw-r--r--tools/tools/build_option_survey/listallopts.sh1
-rw-r--r--tools/tools/build_option_survey/mkhtml.sh1
-rw-r--r--tools/tools/build_option_survey/option_survey.sh3
-rw-r--r--tools/tools/build_option_survey/reduce.sh1
-rwxr-xr-xtools/tools/cd2dvd/cd2dvd.sh1
-rw-r--r--tools/tools/cfi/Makefile2
-rw-r--r--tools/tools/cfi/cfi.c2
-rw-r--r--tools/tools/commitsdb/make_commit_db2
-rw-r--r--tools/tools/commitsdb/query_commit_db2
-rw-r--r--tools/tools/crypto/Makefile1
-rw-r--r--tools/tools/crypto/README1
-rw-r--r--tools/tools/crypto/cryptocheck.c328
-rwxr-xr-xtools/tools/crypto/cryptorun.sh1
-rw-r--r--tools/tools/crypto/cryptostats.c2
-rw-r--r--tools/tools/crypto/cryptotest.c2
-rw-r--r--tools/tools/crypto/hifnstats.c2
-rw-r--r--tools/tools/crypto/ipsecstats.c2
-rw-r--r--tools/tools/crypto/safestats.c2
-rw-r--r--tools/tools/cxgbtool/Makefile2
-rw-r--r--tools/tools/cxgbtool/cxgbtool.c2
-rw-r--r--tools/tools/cxgbtool/reg_defs.c1
-rw-r--r--tools/tools/cxgbtool/reg_defs_t3.c1
-rw-r--r--tools/tools/cxgbtool/reg_defs_t3b.c1
-rw-r--r--tools/tools/cxgbtool/reg_defs_t3c.c1
-rw-r--r--tools/tools/cxgbtool/version.h1
-rw-r--r--tools/tools/decioctl/Makefile2
-rw-r--r--tools/tools/decioctl/decioctl.c2
-rw-r--r--tools/tools/dmardump/Makefile2
-rw-r--r--tools/tools/dmardump/dmardump.c3
-rw-r--r--tools/tools/drm/README1
-rwxr-xr-xtools/tools/drm/gen-drm_pciids5
-rw-r--r--tools/tools/drm/radeon/README1
-rw-r--r--tools/tools/drm/radeon/firmwares/README1
-rwxr-xr-xtools/tools/drm/radeon/firmwares/encode-firmwares1
-rw-r--r--tools/tools/drm/radeon/mkregtable/Makefile2
-rw-r--r--tools/tools/drm/radeon/mkregtable/Makefile.depend1
-rw-r--r--tools/tools/drm/radeon/mkregtable/README1
-rw-r--r--tools/tools/drm/radeon/mkregtable/mkregtable.c8
-rw-r--r--tools/tools/editing/freebsd.vim2
-rw-r--r--tools/tools/epfe/epfe.pl38
-rw-r--r--tools/tools/ether_reflect/Makefile1
-rw-r--r--tools/tools/ether_reflect/ether_reflect.18
-rw-r--r--tools/tools/ether_reflect/ether_reflect.c2
-rwxr-xr-xtools/tools/fetchbench/fetchbench1
-rw-r--r--tools/tools/fib_multibind/Makefile4
-rw-r--r--tools/tools/fib_multibind/sink.c237
-rw-r--r--tools/tools/find-sb/Makefile2
-rw-r--r--tools/tools/find-sb/README1
-rw-r--r--tools/tools/find-sb/find-sb.c2
-rw-r--r--tools/tools/find-sb/mini_ufs.h2
-rw-r--r--tools/tools/fixwhite/Makefile2
-rw-r--r--tools/tools/fixwhite/fixwhite.12
-rw-r--r--tools/tools/fixwhite/fixwhite.c2
-rw-r--r--tools/tools/gdb_regofs/Makefile1
-rw-r--r--tools/tools/genericize/Makefile2
-rwxr-xr-xtools/tools/genericize/genericize.pl3
-rw-r--r--tools/tools/gensnmpdef/Makefile1
-rw-r--r--tools/tools/git/HOWTO7
-rwxr-xr-xtools/tools/git/arcgit5
-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.195
-rw-r--r--tools/tools/git/git-arc.sh372
-rwxr-xr-xtools/tools/git/hooks/prepare-commit-msg3
-rwxr-xr-xtools/tools/git/mfc-candidates.lua217
-rw-r--r--tools/tools/git/mfc-candidates.sh176
-rw-r--r--tools/tools/hcomp/Makefile2
-rw-r--r--tools/tools/hcomp/hcomp.pl3
-rw-r--r--tools/tools/html-mv/html-mv59
-rw-r--r--tools/tools/ifinfo/Makefile2
-rw-r--r--tools/tools/ifinfo/ifinfo.c2
-rw-r--r--tools/tools/ifinfo/ifinfo.h2
-rw-r--r--tools/tools/ifpifa/Makefile2
-rw-r--r--tools/tools/ifpifa/ifpifa.c5
-rw-r--r--tools/tools/indent_wrapper/Makefile1
-rw-r--r--tools/tools/indent_wrapper/indent_wrapper.c2
-rw-r--r--tools/tools/intel-ucode-split/Makefile2
-rw-r--r--tools/tools/intel-ucode-split/intel-ucode-split.c4
-rw-r--r--tools/tools/ioat/Makefile2
-rw-r--r--tools/tools/ioat/ioatcontrol.82
-rw-r--r--tools/tools/ioat/ioatcontrol.c2
-rw-r--r--tools/tools/ipw/Makefile2
-rw-r--r--tools/tools/ipw/ipwstats.c3
-rwxr-xr-xtools/tools/iso/check-iso3166.pl1
-rwxr-xr-xtools/tools/iso/check-iso639.pl1
-rw-r--r--tools/tools/iwi/Makefile2
-rw-r--r--tools/tools/iwi/iwistats.c4
-rw-r--r--tools/tools/iwn/Makefile2
-rw-r--r--tools/tools/iwn/iwnstats/Makefile2
-rw-r--r--tools/tools/iwn/iwnstats/iwn_ioctl.c2
-rw-r--r--tools/tools/iwn/iwnstats/iwn_ioctl.h2
-rw-r--r--tools/tools/iwn/iwnstats/iwnstats.h2
-rw-r--r--tools/tools/iwn/iwnstats/main.c2
-rwxr-xr-xtools/tools/kdrv/KernelDriver1
-rw-r--r--tools/tools/kdrv/sample.drvinfo1
-rw-r--r--tools/tools/kernelcruft/kernelcruft.sh1
-rw-r--r--tools/tools/kerninclude/kerninclude.sh1
-rw-r--r--tools/tools/kernxref/kernxref.sh1
-rw-r--r--tools/tools/kgdb/tcplog.py267
-rw-r--r--tools/tools/kttcp/Makefile2
-rw-r--r--tools/tools/kttcp/README1
-rw-r--r--tools/tools/kttcp/kttcp.c1
-rw-r--r--tools/tools/kttcp/sys/Makefile2
-rw-r--r--tools/tools/kttcp/sys/kttcp.c1
-rw-r--r--tools/tools/kttcp/sys/kttcpio.h1
-rw-r--r--tools/tools/locale/Makefile23
-rw-r--r--tools/tools/locale/README6
-rw-r--r--tools/tools/locale/etc/charmaps.xml1
-rw-r--r--tools/tools/locale/etc/charmaps/ARMSCII-8.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/Big5.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/CP1131.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/CP1251.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/CP866.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/GB18030.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/GB2312.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/GBK.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISCII-DEV.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-1.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-13.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-15.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-2.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-4.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-5.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-7.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/ISO8859-9.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/KOI8-R.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/KOI8-U.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/PT154.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/SJIS.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/US-ASCII.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/charmaps.txt1
-rw-r--r--tools/tools/locale/etc/charmaps/eucCN.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/eucJP.TXT1
-rw-r--r--tools/tools/locale/etc/charmaps/eucKR.TXT1
-rw-r--r--tools/tools/locale/etc/final-maps/map.UTF-85120
-rw-r--r--tools/tools/locale/etc/final-maps/widths.txt10780
-rw-r--r--tools/tools/locale/tools/charmaps.pm3
-rwxr-xr-xtools/tools/locale/tools/cldr2def.pl4
-rwxr-xr-xtools/tools/locale/tools/convert_map.pl1
-rw-r--r--tools/tools/locale/tools/extract-colldef.awk3
-rwxr-xr-xtools/tools/locale/tools/finalize3
-rw-r--r--tools/tools/locale/tools/getwidths.c20
-rwxr-xr-xtools/tools/locale/tools/mkwidths.pl3
-rwxr-xr-xtools/tools/locale/tools/utf8-rollup.pl3
-rw-r--r--tools/tools/makeroot/Makefile2
-rw-r--r--tools/tools/makeroot/Makefile.depend1
-rw-r--r--tools/tools/makeroot/makeroot.82
-rwxr-xr-xtools/tools/makeroot/makeroot.sh1
-rw-r--r--tools/tools/man/README2
-rwxr-xr-xtools/tools/man/checkmlinks.sh1
-rw-r--r--tools/tools/mcgrab/Makefile2
-rw-r--r--tools/tools/mcgrab/mcgrab.12
-rw-r--r--tools/tools/mcgrab/mcgrab.cc2
-rw-r--r--tools/tools/mctest/Makefile2
-rw-r--r--tools/tools/mctest/mctest.12
-rw-r--r--tools/tools/mctest/mctest.cc2
-rw-r--r--tools/tools/mctest/mctest.h1
-rw-r--r--tools/tools/mctest/mctest_run.sh1
-rw-r--r--tools/tools/mfi/Makefile2
-rw-r--r--tools/tools/mfi/mfi_checkq.c3
-rw-r--r--tools/tools/mfi/runmegacli.sh2
-rwxr-xr-xtools/tools/mid/mid-build46
-rwxr-xr-xtools/tools/mid/mid-index83
-rwxr-xr-xtools/tools/mid/mid-master33
-rwxr-xr-xtools/tools/mid/mid-master-index21
-rw-r--r--tools/tools/mtxstat/mtxratio.sh1
-rw-r--r--tools/tools/mtxstat/mtxstat.pl3
-rw-r--r--tools/tools/mwl/Makefile2
-rw-r--r--tools/tools/mwl/mwldebug/Makefile2
-rw-r--r--tools/tools/mwl/mwldebug/mwldebug.c2
-rw-r--r--tools/tools/mwl/mwlstats/Makefile2
-rw-r--r--tools/tools/mwl/mwlstats/main.c2
-rw-r--r--tools/tools/mwl/mwlstats/mwlstats.c4
-rw-r--r--tools/tools/mwl/mwlstats/mwlstats.h2
-rw-r--r--tools/tools/nanobsd/Files/root/change_password1
-rw-r--r--tools/tools/nanobsd/Files/root/save_cfg3
-rw-r--r--tools/tools/nanobsd/Files/root/save_sshkeys1
-rw-r--r--tools/tools/nanobsd/Files/root/update1
-rw-r--r--tools/tools/nanobsd/Files/root/updatep11
-rw-r--r--tools/tools/nanobsd/Files/root/updatep21
-rw-r--r--tools/tools/nanobsd/FlashDevice.sub1
-rwxr-xr-xtools/tools/nanobsd/defaults.sh84
-rw-r--r--tools/tools/nanobsd/dhcpd/README1
-rw-r--r--tools/tools/nanobsd/dhcpd/common3
-rw-r--r--tools/tools/nanobsd/dhcpd/os-base1
-rw-r--r--tools/tools/nanobsd/embedded/README5
-rw-r--r--tools/tools/nanobsd/embedded/beaglebone.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/common34
-rw-r--r--tools/tools/nanobsd/embedded/i386.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/pandaboard.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/qemu-amd64.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/qemu-armv7.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/qemu-i386.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/qemu-mips64.cfg36
-rw-r--r--tools/tools/nanobsd/embedded/qemu-powerpc.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/qemu-powerpc64.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/rpi.cfg36
-rw-r--r--tools/tools/nanobsd/embedded/rpi2.cfg1
-rw-r--r--tools/tools/nanobsd/embedded/rpi3.cfg1
-rw-r--r--tools/tools/nanobsd/fill_pkg.sh35
-rw-r--r--tools/tools/nanobsd/legacy.sh19
-rwxr-xr-xtools/tools/nanobsd/mtree-dedup.awk3
-rwxr-xr-xtools/tools/nanobsd/nanobsd.sh5
-rw-r--r--tools/tools/nanobsd/pcengines/ALIX_DSK2
-rw-r--r--tools/tools/nanobsd/pcengines/ALIX_NFS1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/etc/rc.conf1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/etc/ttys4
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/.cshrc1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/.k5login1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/.login1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/change_password1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/save_cfg1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/save_sshkeys1
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/updatep11
-rw-r--r--tools/tools/nanobsd/pcengines/Files/root/updatep21
-rw-r--r--tools/tools/nanobsd/pcengines/alix_dsk.conf1
-rw-r--r--tools/tools/nanobsd/pcengines/alix_nfs.conf1
-rwxr-xr-xtools/tools/nanobsd/pcengines/build.sh1
-rw-r--r--tools/tools/nanobsd/pcengines/common.conf1
-rwxr-xr-xtools/tools/nanobsd/pcengines/test.sh1
-rw-r--r--tools/tools/nanobsd/rescue/Files/etc/ssh/ssh_config49
-rw-r--r--tools/tools/nanobsd/rescue/Files/etc/ssh/sshd_config121
-rw-r--r--tools/tools/nanobsd/rescue/Files/etc/ttys12
-rw-r--r--tools/tools/nanobsd/rescue/Files/root/.cshrc1
-rwxr-xr-xtools/tools/nanobsd/rescue/Files/root/GPT4ZFS_Create.sh1
-rw-r--r--tools/tools/nanobsd/rescue/Files/root/ZFS_Create.txt1
-rw-r--r--tools/tools/nanobsd/rescue/R3214
-rw-r--r--tools/tools/nanobsd/rescue/R641
-rwxr-xr-xtools/tools/nanobsd/rescue/build.sh9
-rw-r--r--tools/tools/nanobsd/rescue/common38
-rwxr-xr-xtools/tools/nanobsd/rescue/merge.sh28
-rw-r--r--tools/tools/nanobsd/rescue/rescue_amd64.conf1
-rw-r--r--tools/tools/nanobsd/rescue/rescue_i386.conf10
-rw-r--r--tools/tools/ncpus/Makefile2
-rw-r--r--tools/tools/ncpus/acpi.c2
-rw-r--r--tools/tools/ncpus/acpidump.h2
-rw-r--r--tools/tools/ncpus/biosmptable.c3
-rw-r--r--tools/tools/ncpus/ncpus.c1
-rw-r--r--tools/tools/net80211/Makefile2
-rw-r--r--tools/tools/net80211/README1
-rw-r--r--tools/tools/net80211/mlme_assoc/Makefile7
-rw-r--r--tools/tools/net80211/mlme_assoc/README51
-rw-r--r--tools/tools/net80211/mlme_assoc/mlme_assoc.c200
-rw-r--r--tools/tools/net80211/scripts/config1
-rw-r--r--tools/tools/net80211/scripts/mesh/common1
-rw-r--r--tools/tools/net80211/scripts/mesh/config.mesh1
-rw-r--r--tools/tools/net80211/scripts/mesh/setup.simple1
-rw-r--r--tools/tools/net80211/scripts/mesh/topology.line1
-rw-r--r--tools/tools/net80211/scripts/mesh/topology.ring1
-rw-r--r--tools/tools/net80211/scripts/mesh/topology.star1
-rw-r--r--tools/tools/net80211/scripts/mesh/topology.tree1
-rw-r--r--tools/tools/net80211/scripts/setup.dfs1
-rw-r--r--tools/tools/net80211/scripts/setup.fixed1
-rw-r--r--tools/tools/net80211/scripts/setup.local1
-rw-r--r--tools/tools/net80211/scripts/setup.mixed1
-rw-r--r--tools/tools/net80211/scripts/setup.simple1
-rw-r--r--tools/tools/net80211/scripts/setup.simple21
-rw-r--r--tools/tools/net80211/scripts/setup.sta1
-rw-r--r--tools/tools/net80211/scripts/setup.tdma-master1
-rw-r--r--tools/tools/net80211/scripts/setup.tdma-slave1
-rw-r--r--tools/tools/net80211/scripts/setup.tsn1
-rw-r--r--tools/tools/net80211/scripts/setup.updown1
-rw-r--r--tools/tools/net80211/scripts/setup.updown.wpa1
-rw-r--r--tools/tools/net80211/scripts/setup.wds1
-rw-r--r--tools/tools/net80211/scripts/setup.wdsmain1
-rw-r--r--tools/tools/net80211/scripts/setup.wdsrelay1
-rw-r--r--tools/tools/net80211/scripts/setup.wep1
-rw-r--r--tools/tools/net80211/scripts/setup.wpa1
-rw-r--r--tools/tools/net80211/scripts/setup.wpa1.aes1
-rw-r--r--tools/tools/net80211/scripts/setup.wpa1.tkip1
-rw-r--r--tools/tools/net80211/scripts/setup.wpa21
-rw-r--r--tools/tools/net80211/scripts/setup.wpa2.tkip1
-rw-r--r--tools/tools/net80211/stumbler/Makefile2
-rw-r--r--tools/tools/net80211/stumbler/stumbler.c2
-rw-r--r--tools/tools/net80211/w00t/Makefile2
-rw-r--r--tools/tools/net80211/w00t/Makefile.inc4
-rw-r--r--tools/tools/net80211/w00t/README1
-rw-r--r--tools/tools/net80211/w00t/ap/Makefile2
-rw-r--r--tools/tools/net80211/w00t/ap/ap.c2
-rw-r--r--tools/tools/net80211/w00t/assoc/Makefile2
-rw-r--r--tools/tools/net80211/w00t/assoc/assoc.c2
-rw-r--r--tools/tools/net80211/w00t/expand/Makefile2
-rw-r--r--tools/tools/net80211/w00t/expand/expand.c2
-rw-r--r--tools/tools/net80211/w00t/libw00t/Makefile2
-rw-r--r--tools/tools/net80211/w00t/libw00t/w00t.c2
-rw-r--r--tools/tools/net80211/w00t/libw00t/w00t.h2
-rw-r--r--tools/tools/net80211/w00t/prga/Makefile2
-rw-r--r--tools/tools/net80211/w00t/prga/prga.c2
-rw-r--r--tools/tools/net80211/w00t/redir/Makefile2
-rw-r--r--tools/tools/net80211/w00t/redir/buddy.c2
-rw-r--r--tools/tools/net80211/w00t/redir/redir.c2
-rw-r--r--tools/tools/net80211/wesside/Makefile2
-rw-r--r--tools/tools/net80211/wesside/README1
-rw-r--r--tools/tools/net80211/wesside/dics/Makefile2
-rw-r--r--tools/tools/net80211/wesside/dics/dics.c2
-rw-r--r--tools/tools/net80211/wesside/udps/Makefile2
-rw-r--r--tools/tools/net80211/wesside/udps/udps.c2
-rw-r--r--tools/tools/net80211/wesside/wesside/Makefile2
-rw-r--r--tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.c2
-rw-r--r--tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.h2
-rw-r--r--tools/tools/net80211/wesside/wesside/wesside.c2
-rw-r--r--tools/tools/net80211/wlaninject/Makefile2
-rw-r--r--tools/tools/net80211/wlaninject/README1
-rw-r--r--tools/tools/net80211/wlaninject/wlaninject.c2
-rw-r--r--tools/tools/net80211/wlanstats/Makefile15
-rw-r--r--tools/tools/net80211/wlanstats/main.c291
-rw-r--r--tools/tools/net80211/wlanstats/wlanstats.c1042
-rw-r--r--tools/tools/net80211/wlanstats/wlanstats.h56
-rw-r--r--tools/tools/net80211/wlantxtime/Makefile2
-rw-r--r--tools/tools/net80211/wlantxtime/wlantxtime.c2
-rw-r--r--tools/tools/net80211/wlanwatch/Makefile2
-rw-r--r--tools/tools/net80211/wlanwatch/wlanwatch.c36
-rw-r--r--tools/tools/net80211/wlanwds/Makefile4
-rw-r--r--tools/tools/net80211/wlanwds/wlanwds.c28
-rw-r--r--tools/tools/netmap/Makefile1
-rw-r--r--tools/tools/netmap/README1
-rw-r--r--tools/tools/netmap/bridge.82
-rw-r--r--tools/tools/netmap/bridge.c4
-rw-r--r--tools/tools/netmap/ctrs.h1
-rw-r--r--tools/tools/netmap/lb.82
-rw-r--r--tools/tools/netmap/lb.c6
-rw-r--r--tools/tools/netmap/nmreplay.82
-rw-r--r--tools/tools/netmap/nmreplay.c7
-rw-r--r--tools/tools/netmap/pkt-gen.89
-rw-r--r--tools/tools/netmap/pkt-gen.c141
-rw-r--r--tools/tools/netmap/pkt_hash.c1
-rw-r--r--tools/tools/netmap/pkt_hash.h1
-rw-r--r--tools/tools/netrate/Makefile1
-rw-r--r--tools/tools/netrate/Makefile.inc2
-rw-r--r--tools/tools/netrate/README2
-rw-r--r--tools/tools/netrate/http/Makefile2
-rw-r--r--tools/tools/netrate/http/http.c2
-rw-r--r--tools/tools/netrate/httpd/Makefile2
-rw-r--r--tools/tools/netrate/httpd/httpd.c2
-rw-r--r--tools/tools/netrate/juggle/Makefile2
-rw-r--r--tools/tools/netrate/juggle/juggle.c2
-rw-r--r--tools/tools/netrate/netblast/Makefile1
-rw-r--r--tools/tools/netrate/netblast/netblast.c2
-rw-r--r--tools/tools/netrate/netreceive/Makefile1
-rw-r--r--tools/tools/netrate/netreceive/netreceive.c2
-rw-r--r--tools/tools/netrate/netsend/Makefile1
-rw-r--r--tools/tools/netrate/netsend/netsend.c2
-rw-r--r--tools/tools/netrate/tcpconnect/Makefile2
-rw-r--r--tools/tools/netrate/tcpconnect/tcpconnect.c2
-rw-r--r--tools/tools/netrate/tcpp/Makefile2
-rw-r--r--tools/tools/netrate/tcpp/README3
-rw-r--r--tools/tools/netrate/tcpp/parallelism.csh1
-rwxr-xr-xtools/tools/netrate/tcpp/runit.pl1
-rw-r--r--tools/tools/netrate/tcpp/tcpp.c2
-rw-r--r--tools/tools/netrate/tcpp/tcpp.h2
-rw-r--r--tools/tools/netrate/tcpp/tcpp_client.c2
-rw-r--r--tools/tools/netrate/tcpp/tcpp_server.c4
-rw-r--r--tools/tools/netrate/tcpp/tcpp_util.c2
-rw-r--r--tools/tools/netrate/tcpreceive/Makefile2
-rw-r--r--tools/tools/netrate/tcpreceive/tcpreceive.c2
-rw-r--r--tools/tools/notescheck/Makefile2
-rw-r--r--tools/tools/notescheck/notescheck.py1
-rw-r--r--tools/tools/npe/Makefile2
-rw-r--r--tools/tools/npe/npestats/Makefile2
-rw-r--r--tools/tools/npe/npestats/main.c2
-rw-r--r--tools/tools/npe/npestats/npestats.c2
-rw-r--r--tools/tools/npe/npestats/npestats.h2
-rw-r--r--tools/tools/nvmf/nvmfd/Makefile14
-rw-r--r--tools/tools/nvmf/nvmfd/Makefile.depend20
-rw-r--r--tools/tools/nvmf/nvmfd/controller.c244
-rw-r--r--tools/tools/nvmf/nvmfd/ctl.c137
-rw-r--r--tools/tools/nvmf/nvmfd/devices.c386
-rw-r--r--tools/tools/nvmf/nvmfd/discovery.c342
-rw-r--r--tools/tools/nvmf/nvmfd/internal.h66
-rw-r--r--tools/tools/nvmf/nvmfd/io.c676
-rw-r--r--tools/tools/nvmf/nvmfd/nvmfd.8131
-rw-r--r--tools/tools/nvmf/nvmfd/nvmfd.c271
-rw-r--r--tools/tools/nvmf/nvmfdd/Makefile9
-rw-r--r--tools/tools/nvmf/nvmfdd/nvmfdd.c493
-rw-r--r--tools/tools/pciroms/Makefile1
-rw-r--r--tools/tools/pciroms/pciroms.c3
-rwxr-xr-xtools/tools/perforce/awkdiff42
-rwxr-xr-xtools/tools/perforce/p4diffbranch19
-rw-r--r--tools/tools/pirtool/Makefile2
-rw-r--r--tools/tools/pirtool/pirtable.h2
-rw-r--r--tools/tools/pirtool/pirtool.c2
-rw-r--r--tools/tools/portsinfo/portsinfo.sh84
-rw-r--r--tools/tools/qrndtest/Makefile1
-rw-r--r--tools/tools/qrndtest/r.c2
-rw-r--r--tools/tools/release/chk_dokern.sh_and_drivers.conf1
-rwxr-xr-xtools/tools/scsi-defects/scsi-defects.pl1
-rw-r--r--tools/tools/shlib-compat/Makefile.sysfake2
-rwxr-xr-xtools/tools/shlib-compat/makesyscalls-fake.sh1
-rwxr-xr-xtools/tools/shlib-compat/shlib-compat-dirs.sh1
-rwxr-xr-xtools/tools/shlib-compat/shlib-compat.py1
-rw-r--r--tools/tools/shlib-compat/test/Makefile2
-rw-r--r--tools/tools/shlib-compat/test/Makefile.inc2
-rw-r--r--tools/tools/shlib-compat/test/Versions.def1
-rw-r--r--tools/tools/shlib-compat/test/libtest1/Makefile2
-rw-r--r--tools/tools/shlib-compat/test/libtest1/Symbol.map1
-rw-r--r--tools/tools/shlib-compat/test/libtest1/test.c1
-rw-r--r--tools/tools/shlib-compat/test/libtest2/Makefile2
-rw-r--r--tools/tools/shlib-compat/test/libtest2/Symbol.map1
-rw-r--r--tools/tools/shlib-compat/test/libtest2/test.c1
-rw-r--r--tools/tools/shlib-compat/test/libtest3/Makefile2
-rw-r--r--tools/tools/shlib-compat/test/libtest3/Symbol.map1
-rw-r--r--tools/tools/shlib-compat/test/libtest3/test.c1
-rw-r--r--tools/tools/shlib-compat/test/libtestsys/Makefile2
-rw-r--r--tools/tools/shlib-compat/test/libtestsys/Symbol.map1
-rw-r--r--tools/tools/shlib-compat/test/regress.m41
-rwxr-xr-xtools/tools/shlib-compat/test/regress.sh1
-rw-r--r--tools/tools/shlib-compat/test/regress.t1
-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/Makefile2
-rw-r--r--tools/tools/sortbench/README1
-rwxr-xr-xtools/tools/sortbench/bench.py2
-rw-r--r--tools/tools/sortbench/sort_bench.c2
-rw-r--r--tools/tools/switch_tls/Makefile2
-rw-r--r--tools/tools/switch_tls/switch_tls.c5
-rw-r--r--tools/tools/sysbuild/README1
-rw-r--r--tools/tools/sysbuild/sysbuild.sh1
-rw-r--r--tools/tools/syscall_timing/Makefile1
-rw-r--r--tools/tools/syscall_timing/syscall_timing.c2
-rw-r--r--tools/tools/sysdoc/Makefile2
-rw-r--r--tools/tools/sysdoc/sysctl.sh1
-rw-r--r--tools/tools/sysdoc/sysdoc.sh1
-rw-r--r--tools/tools/sysdoc/tunables.mdoc5
-rwxr-xr-xtools/tools/termcap/termcap.pl1
-rw-r--r--tools/tools/tionxcl/Makefile2
-rw-r--r--tools/tools/tionxcl/tionxcl.c2
-rw-r--r--tools/tools/track/Makefile2
-rw-r--r--tools/tools/track/track.sh3
-rw-r--r--tools/tools/tscdrift/Makefile2
-rw-r--r--tools/tools/tscdrift/tscdrift.c4
-rw-r--r--tools/tools/umastat/Makefile2
-rw-r--r--tools/tools/umastat/umastat.c2
-rw-r--r--tools/tools/usb/print-usb-if-vids.sh1
-rw-r--r--tools/tools/usbtest/Makefile1
-rw-r--r--tools/tools/usbtest/Makefile.depend1
-rw-r--r--tools/tools/usbtest/usb_control_ep_test.c1
-rw-r--r--tools/tools/usbtest/usb_modem_test.c1
-rw-r--r--tools/tools/usbtest/usb_msc_test.c5
-rw-r--r--tools/tools/usbtest/usb_msc_test.h1
-rw-r--r--tools/tools/usbtest/usbtest.c1
-rw-r--r--tools/tools/usbtest/usbtest.h1
-rw-r--r--tools/tools/vhba/Makefile1
-rw-r--r--tools/tools/vhba/README1
-rw-r--r--tools/tools/vhba/faulty/Makefile1
-rw-r--r--tools/tools/vhba/faulty/vhba_faulty.c1
-rw-r--r--tools/tools/vhba/lots/Makefile1
-rw-r--r--tools/tools/vhba/lots/vhba_lots.c1
-rw-r--r--tools/tools/vhba/medium/Makefile1
-rw-r--r--tools/tools/vhba/medium/vhba_medium.c1
-rw-r--r--tools/tools/vhba/mptest/Makefile1
-rw-r--r--tools/tools/vhba/mptest/vhba_mptest.c1
-rw-r--r--tools/tools/vhba/opt_cam.h1
-rw-r--r--tools/tools/vhba/rptluns/Makefile1
-rw-r--r--tools/tools/vhba/rptluns/vhba_rptluns.c1
-rw-r--r--tools/tools/vhba/simple/Makefile1
-rw-r--r--tools/tools/vhba/simple/vhba_simple.c1
-rw-r--r--tools/tools/vhba/vhba.c1
-rw-r--r--tools/tools/vhba/vhba.h5
-rw-r--r--tools/tools/vimage/Makefile2
-rw-r--r--tools/tools/vimage/vimage.84
-rw-r--r--tools/tools/vimage/vimage.c2
-rw-r--r--tools/tools/vop_table/vop_table.pl1
-rw-r--r--tools/tools/vop_table/vop_table.tcl1
-rw-r--r--tools/tools/vt/fontcvt/terminus.sh1
-rw-r--r--tools/tools/vt/keymaps/KBDFILES.map1
-rw-r--r--tools/tools/vt/keymaps/LANG.map1
-rwxr-xr-xtools/tools/vt/keymaps/convert-INDEX.pl1
-rwxr-xr-xtools/tools/vt/keymaps/convert-keymap.pl1
-rwxr-xr-xtools/tools/vt/keymaps/convert-keymaps.pl1
-rw-r--r--tools/tools/vt/mkkfont/Makefile4
-rw-r--r--tools/tools/vt/mkkfont/mkkfont.c3
-rw-r--r--tools/tools/whereintheworld/Makefile2
-rw-r--r--tools/tools/whereintheworld/whereintheworld.pl1
-rw-r--r--tools/tools/wtap/Makefile2
-rw-r--r--tools/tools/wtap/vis_map/Makefile2
-rw-r--r--tools/tools/wtap/vis_map/vis_map.c2
-rw-r--r--tools/tools/wtap/wtap/Makefile2
-rw-r--r--tools/tools/wtap/wtap/wtap.c2
-rw-r--r--tools/tools/zfsboottest/Makefile2
-rw-r--r--tools/tools/zfsboottest/zfsboottest.c1
-rwxr-xr-xtools/tools/zfsboottest/zfsboottest.sh1
-rw-r--r--tools/uma/smrstress/Makefile1
-rw-r--r--tools/uma/smrstress/smrstress.c8
2727 files changed, 47156 insertions, 25202 deletions
diff --git a/tools/LibraryReport/LibraryReport.tcl b/tools/LibraryReport/LibraryReport.tcl
index fbf63896c71d..b1678d027f07 100755
--- a/tools/LibraryReport/LibraryReport.tcl
+++ b/tools/LibraryReport/LibraryReport.tcl
@@ -50,7 +50,6 @@ exec tclsh $0 $*
#
################################################################################
#
-# $FreeBSD$
#
#########################################################################################
diff --git a/tools/README b/tools/README
index 99ec8e9241f7..ab0470df049a 100644
--- a/tools/README
+++ b/tools/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This directory tree contains tools used for the maintenance and
testing of FreeBSD. There is no toplevel Makefile structure since
diff --git a/tools/boot/TEST-NOTES b/tools/boot/TEST-NOTES
new file mode 100644
index 000000000000..9c1debca5376
--- /dev/null
+++ b/tools/boot/TEST-NOTES
@@ -0,0 +1,22 @@
+New test script
+
+o Assumes univerese has run.
+o Will create a test tree somewhere outside of the source tree
+ o trees has the different trees we use to create images
+ o trees/${ARCH}/$PART have each architecture's tree images
+ for the different partitions we need.
+ o bios has cached BIOSes needed for tests
+ o images has the images to test
+ o tests has the test scripts
+ o linux has cached copies off kernels for the kboot tests
+o Assumes qemu port installed
+ o will use firmware from there
+o Will use 3 linux kernels, amd64 and aarch64 built with CONFIG_EFI_STUB
+o Will test
+ o armv7 UEFI+uboot booting on MBR and GPT
+ o aarch64 Will test UEFI+ACPI on MBR/GPT, UEFI+ACPI+kboot, DTB+kboot
+ o amd64 <big matrix here>
+ o i386 legacy + {gpt,mbr} and cdrom boot (also the isoboot unified?)
+ o powerpc <who knows> but kboot+dtb
+ o riscv UEFI+ACPI with GPT and serial console
+
diff --git a/tools/boot/ci-qemu-test.sh b/tools/boot/ci-qemu-test.sh
index e6481c794af5..63f0fc2c64b2 100755
--- a/tools/boot/ci-qemu-test.sh
+++ b/tools/boot/ci-qemu-test.sh
@@ -8,7 +8,6 @@
# rootgen.sh and related scripts generate much more extensive tests for many
# combinations of boot env (ufs, zfs, geli, etc).
#
-# $FreeBSD$
set -e
@@ -21,7 +20,7 @@ die()
tempdir_cleanup()
{
trap - EXIT SIGINT SIGHUP SIGTERM SIGQUIT
- rm -rf ${ROOTDIR}
+ rm -rf ${WORKDIR}
}
tempdir_setup()
@@ -85,7 +84,7 @@ amd64)
if [ ! -r "${OVMF}" ]; then
die "Cannot read UEFI firmware file ${OVMF}"
fi
- QEMU="qemu-system-x86_64 -drive if=pflash,format=raw,readonly,file=${OVMF}"
+ QEMU="qemu-system-x86_64 -drive if=pflash,format=raw,readonly=on,file=${OVMF}"
EFIBOOT=BOOTx64.EFI
ROOTDEV=ada0s1
;;
@@ -99,22 +98,35 @@ arm64)
esac
# Create a temp dir to hold the boot image.
-ROOTDIR=$(mktemp -d -t ci-qemu-test-fat-root)
+WORKDIR=$(mktemp -d -t ci-qemu-test-fat-root)
+ROOTDIR=${WORKDIR}/stage-root
trap tempdir_cleanup EXIT SIGINT SIGHUP SIGTERM SIGQUIT
# Populate the boot image in a temp dir.
( cd ${SRCTOP} && tempdir_setup )
+# Using QEMU's virtual FAT support is much faster than creating a disk image,
+# but only supports about 500MB. Fall back to creating a disk image if the
+# staged root is too large.
+hda="fat:${ROOTDIR}"
+rootsize=$(du -skA ${ROOTDIR} | sed 's/[[:space:]].*$//')
+if [ $rootsize -gt 512000 ]; then
+ echo "Root size ${rootsize}K too large for QEMU virtual FAT" >&2
+ makefs -t msdos -s 1g $WORKDIR/image.fat $ROOTDIR
+ mkimg -s mbr -p efi:=$WORKDIR/image.fat -o $WORKDIR/image.mbr
+ hda="$WORKDIR/image.mbr"
+fi
+
# And, boot in QEMU.
: ${BOOTLOG:=${TMPDIR:-/tmp}/ci-qemu-test-boot.log}
timeout 300 \
$QEMU -m 256M -nodefaults \
-serial stdio -vga none -nographic -monitor none \
- -snapshot -hda fat:${ROOTDIR} 2>&1 | tee ${BOOTLOG}
+ -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.readme b/tools/boot/full-test.readme
new file mode 100644
index 000000000000..db1f12c7024b
--- /dev/null
+++ b/tools/boot/full-test.readme
@@ -0,0 +1,37 @@
+First, you will need a few things.
+
+(1) a small cache of binaries. You'll need to put these into
+ ~/stand-test-root/cache. You can find the tarball at
+ freefall.freebsd.org:~imp/cache.tar. You can just extract this in ~. These are
+ the linux kernels I'm testing with.
+
+(2) The latest qemu-system-aarch64 (I think ports/pkg version of emulators/qemu
+ is recent enough). If not, I know the latest master of qemu project works.
+
+(3) A recent enough universe that the building of stand will work for all the
+ architectures that I build. You can hack the ARCHES line near the top of
+ tools/boot/full-test.sh if need be, but you'll need at least amd64, arm64 and
+ maybe riscv (I don't have a good way to filter arches in this script yet, since
+ it's at an early state of development.
+
+(4) Build the kernel for at least arm64 and use it as an 'override'. I do this
+ by sudo -E make installkernel
+ DESTDIR=$HOME/stand-test-root/override/arm64-aarch64 TARGET=arm64 after
+ building the kernel. The script is designed to use kernels and binaries from
+ the latest CDs to do the testing, but has a way to override the kernel and
+ since we need to fix arm64...
+
+(5) You'll need to build the images. If you've done 1-5 correctly (and I've not
+ missed anything), then "cd <mumble>/src; sh tools/boot/full-test.sh" will create
+ all the images and scripts to run qemu. There should be no errors, though
+ warnings about zfs.ko etc missing from powerpc is fine (and ignored by the
+ script already).
+
+(6) There will be a script to recreate this created in
+ $HOME/stand-test-root/scripts/arm64-aarch64/linuxboot-test.sh. Just run it with
+ 'sh'. And extra args are passed to qemu, so '-s -S' for gdb and
+ '-d trace:gicv3\* -D /tmp/gic.log' for verbose gic tracing (spaces are important).
+
+There's also a linuxboot-test-raw.sh which boots w/o EDK2+Linux.efi but loads
+the kernel directly. and freebsd-test.sh which uses EDK2+loader.efi to boot FreeBSD
+w/o kboot at all.
diff --git a/tools/boot/full-test.sh b/tools/boot/full-test.sh
new file mode 100644
index 000000000000..1160861316dc
--- /dev/null
+++ b/tools/boot/full-test.sh
@@ -0,0 +1,668 @@
+#!/bin/sh
+
+# STAND_ROOT is the root of a tree:
+# cache - Cached binaries that we have downloaded
+# trees - binary trees that we use to make image
+# trees/${ARCH}/$thing
+# images - bootable images that we use to test
+# images/${ARCH}/$thing
+# bios - cached bios images (as well as 'vars' files when we start testing
+# different booting scenarios in the precense / absence of variables).
+# scripts - generated scripts that uses images to run the tests.
+#
+# Strategy:
+# Download FreeBSD release isos, Linux kernels (for the kboot tests) and
+# other misc things. We use these to generate dozens of test images that we
+# use qemu-system-XXXX to boot. They all boot the same thing at the moment:
+# an /etc/rc script that prints the boot method, echos success and then
+# halts.
+
+# What version of FreeBSD to we snag the ISOs from to extract the binaries
+# we are testing
+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
+TREES=${STAND_ROOT}/trees
+IMAGES=${STAND_ROOT}/images
+BIOS=${STAND_ROOT}/bios
+SCRIPTS=${STAND_ROOT}/scripts
+OVERRIDE=${STAND_ROOT}/override
+
+# 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 arm64:aarch64"
+
+# The smallest FAT32 filesystem is 33292 KB
+espsize=33292
+
+mkdir -p ${CACHE} ${TREES} ${IMAGES} ${BIOS}
+
+die()
+{
+ echo Fatal Error: $*
+ exit 1
+}
+
+ma_combo()
+{
+ local m=$1
+ local ma=$2
+ local ma_combo="${m}"
+
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ echo ${ma_combo}
+}
+
+fetch_one()
+{
+ local m=$1
+ local ma=$2
+ local v=$3
+ local flavor=$4
+ local ma_combo=$(ma_combo $m $ma)
+ local file="FreeBSD-${v}-RELEASE-${ma_combo}-${flavor}"
+ local url="${URLBASE}/${m}/${ma}/ISO-IMAGES/${v}/${file}.xz"
+
+ mkdir -p ${CACHE}
+ [ -r ${CACHE}/${file} ] && echo "Using cached ${file}" && return
+ cd ${CACHE}
+ echo "Fetching ${url}"
+ fetch ${url} || die "Can't fetch ${file} from ${url}"
+ xz -d ${file}.xz || die "Can't uncompress ${file}.xz"
+ cd ..
+}
+
+update_freebsd_img_cache()
+{
+ local a m ma
+
+ for a in $ARCHES; do
+ m=${a%%:*}
+ ma=${a##*:}
+ fetch_one $m $ma ${FREEBSD_VERSION} bootonly.iso
+ done
+
+ fetch_one arm armv7 ${FREEBSD_VERSION} GENERICSD.img
+}
+
+make_minimal_freebsd_tree()
+{
+ local m=$1
+ local ma=$2
+ local v=$3
+ local flavor=$4
+ local file d
+ local ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+
+ file="FreeBSD-${v}-RELEASE-${ma_combo}-${flavor}"
+ dir=${TREES}/${ma_combo}/freebsd
+ rm -rf ${dir}
+
+ # Make a super simple userland. It has just enough to print a santiy value,
+ # then say test succeeded, and then halt the system. We assume that /bin/sh
+ # has all the library prereqs for the rest...
+ mkdir -p ${dir}
+ # Make required dirs
+ for d in boot/kernel boot/defaults boot/lua boot/loader.conf.d \
+ sbin bin lib libexec etc dev; do
+ mkdir -p ${dir}/${d}
+ done
+ # 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/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
+
+sysctl machdep.bootmethod
+echo "RC COMMAND RUNNING -- SUCCESS!!!!!"
+halt -p
+EOF
+ chmod +x ${dir}/etc/rc
+
+ # Check to see if we have overrides here... So we can insert our own kernel
+ # instead of the one from the release.
+ echo "CHECKING ${OVERRIDE}/${ma_combo}/boot"
+ if [ -d ${OVERRIDE}/${ma_combo}/boot ]; then
+ o=${OVERRIDE}/${ma_combo}
+ for i in \
+ boot/device.hints \
+ boot/kernel/kernel \
+ boot/kernel/acl_nfs4.ko \
+ boot/kernel/cryptodev.ko \
+ boot/kernel/zfs.ko \
+ boot/kernel/geom_eli.ko; do
+ [ -r $o/$i ] && echo Copying override $i && cp $o/$i ${dir}/$i
+ done
+ else
+ # Copy the kernel (but not the boot loader, we'll add the one to test later)
+ # This will take care of both UFS and ZFS boots as well as geli
+ # Note: It's OK for device.hints to be missing. It's mostly for legacy platforms.
+ tar -C ${dir} -xf ${CACHE}/$file \
+ boot/device.hints \
+ boot/kernel/kernel \
+ boot/kernel/acl_nfs4.ko \
+ boot/kernel/cryptodev.ko \
+ boot/kernel/zfs.ko \
+ boot/kernel/geom_eli.ko || true
+ # XXX WHAT TO DO ABOUT LINKER HINTS -- PUNT FOR NOW
+ # XXX also, ZFS not supported on 32-bit powerpc platforms
+ fi
+
+ # Setup some common settings for serial console, etc
+ echo -h -D -S115200 > ${dir}/boot.config
+ cat > ${dir}/boot/loader.conf <<EOF
+comconsole_speed=115200
+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
+}
+
+make_freebsd_minimal_trees()
+{
+ for a in $ARCHES; do
+ m=${a%%:*}
+ ma=${a##*:}
+ make_minimal_freebsd_tree $m $ma ${FREEBSD_VERSION} bootonly.iso
+ done
+ # Note: armv7 isn't done yet as its the odd-man out -- we need to extract things
+ # in a special way, so punt for the moment
+}
+
+make_freebsd_test_trees()
+{
+ for a in $ARCHES; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${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}
+ echo "Creating tree for ${m}:${ma}"
+ cd ${SRCTOP}
+ # Indirection needed because our build system is too complex
+ # 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
+}
+
+make_linux_initrds()
+{
+ # At the moment, we have just two
+ for a in amd64:amd64 arm64:aarch64; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ dir=${TREES}/${ma_combo}/linuxboot
+ dir2=${TREES}/${ma_combo}/test-stand
+ dir3=${TREES}/${ma_combo}/freebsd
+ initrd=${TREES}/${ma_combo}/initrd.img
+ rm -rf ${dir}
+ mkdir -p ${dir}
+ cp ${dir2}/boot/loader.kboot ${dir}/init
+ # Copy the boot loader
+ tar -c -f - -C ${dir2} boot | tar -xf - -C ${dir}
+ # Copy the boot kernel
+ tar -c -f - -C ${dir3} boot | tar -xf - -C ${dir}
+ (cd ${dir} ; find . | LC_ALL=C sort | cpio -o -H newc | gzip > ${initrd})
+ done
+}
+
+make_linux_esps()
+{
+ # At the moment, we have just two
+ for a in amd64:amd64 arm64:aarch64; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ dir=${TREES}/${ma_combo}/linuxboot-esp
+ initrd=${TREES}/${ma_combo}/initrd.img
+ mkdir -p ${dir}
+ case ${ma} in
+ amd64) bin=x64 cons="console=ttyS0,115200" ;;
+ aarch64) bin=aa64 ;;
+ esac
+ mkdir -p ${dir}/efi/boot
+ cp ${CACHE}/linux/linux${bin}.efi ${dir}
+ cp ${CACHE}/linux/shell${bin}.efi ${dir}/efi/boot/boot${bin}.efi
+ cat > ${dir}/startup.nsh <<EOF
+# Run linux
+# Tell it to run with out special initrd that then boot FreeBSD
+
+\linux${bin} ${cons} initrd=\initrd.img
+EOF
+ cp $initrd ${dir}
+ done
+}
+
+make_linuxboot_images()
+{
+ # ESP variant: In this variant, amd64 and arm64 are both created more or
+ # less the same way. Both are EFI + ACPI implementations
+ for a in amd64:amd64 arm64:aarch64; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ src=${TREES}/${ma_combo}/linuxboot-esp
+ dir=${TREES}/${ma_combo}/freebsd
+ dir2=${TREES}/${ma_combo}/test-stand
+ esp=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}.esp
+ ufs=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}.ufs
+ zfs=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}.zfs
+ img=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}.img
+ 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 \
+ -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 \
+ -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
+ ${zfs} ${dir} ${dir2}
+ ${MKIMG} -s gpt \
+ -p efi:=${esp} \
+ -p freebsd-zfs:=${zfs} -o ${img2}
+ rm -f ${esp} # Don't need to keep this around
+ done
+
+ # The raw variant, currently used only on arm64. It boots with the raw interface of qemu
+ # for testing purposes. This means it makes a good test for the DTB variation, but not ACPI
+ # since qemu doesn't currently provide that...
+ for a in arm64:aarch64; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ linux="${CACHE}/linux/vmlinux-${m}*"
+ initrd=${TREES}/${ma_combo}/initrd.img
+ img=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}-raw
+ cp ${linux} ${img}.kernel
+ cp ${initrd} ${img}.initrd
+ done
+}
+
+make_linuxboot_scripts()
+{
+ # At the moment, we have just two -- and the images we've built so far are just
+ # the hostfs boot. The boot off anything more complex isn't here.
+ for a in amd64:amd64 arm64:aarch64; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+
+ # First off, update the edk firmware
+ bios_code=${BIOS}/edk2-${ma_combo}-code.fd
+ bios_vars=${BIOS}/edk2-${ma_combo}-vars.fd
+ case ${ma} in
+ amd64)
+ 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}
+ fi
+ ;;
+ aarch64)
+ if [ ${bios_code} -ot /usr/local/share/qemu/edk2-aarch64-code.fd ]; then
+ # aarch64 vars starts as an empty file
+ dd if=/dev/zero of=${bios_code} bs=1M count=64
+ dd if=/dev/zero of=${bios_vars} bs=1M count=64
+ dd if=/usr/local/share/qemu/edk2-aarch64-code.fd of=${bios_code} conv=notrunc
+ fi
+ ;;
+ esac
+
+ # Now make me a script
+ img=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}.img
+ img2=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}-raw
+ img3=${IMAGES}/${ma_combo}/linuxboot-${ma_combo}-zfs.img
+ out=${SCRIPTS}/${ma_combo}/linuxboot-test.sh
+ out2=${SCRIPTS}/${ma_combo}/linuxboot-test-raw.sh
+ out3=${SCRIPTS}/${ma_combo}/linuxboot-test-zfs.sh
+ cd=${CACHE}/FreeBSD-13.1-RELEASE-arm64-aarch64-bootonly.iso
+ mkdir -p ${SCRIPTS}/${ma_combo}
+ case ${ma} in
+ amd64)
+ cat > ${out} <<EOF
+${qemu_bin}/qemu-system-x86_64 -nographic -m 512M \\
+ -drive file=${img},if=none,id=drive0,cache=writeback,format=raw \\
+ -device virtio-blk,drive=drive0,bootindex=0 \\
+ -drive file=${bios_code},format=raw,if=pflash \\
+ -drive file=${bios_vars},format=raw,if=pflash \\
+ -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+ ;;
+ aarch64)
+ # ESP version
+ raw=${IMAGES}/${ma_combo}/freebsd-arm64-aarch64.img
+ cat > ${out} <<EOF
+${qemu_bin}/qemu-system-aarch64 -nographic -machine virt,gic-version=3 -m 512M -smp 4 \\
+ -cpu cortex-a57 \\
+ -drive file=${img},if=none,id=drive0,cache=writeback \\
+ -device virtio-blk,drive=drive0,bootindex=0 \\
+ -drive file=${raw},if=none,id=drive1,cache=writeback \\
+ -device nvme,serial=fboot,drive=drive1,bootindex=1 \\
+ -drive file=${bios_code},format=raw,if=pflash \\
+ -drive file=${bios_vars},format=raw,if=pflash \\
+ -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+ # RAW version
+ # Note: We have to use cortex-a57 for raw mode because the
+ # kernel we use has issues with max.
+ cat > ${out2} <<EOF
+${qemu_bin}/qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt \\
+ -kernel ${img2}.kernel -initrd ${img2}.initrd \\
+ -append "console=ttyAMA0" \\
+ -drive file=${cd},if=none,id=drive0,cache=writeback,format=raw \\
+ -device virtio-blk,drive=drive0,bootindex=0 \\
+ -nographic -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+ # ZFS version
+ # Note: We have to use cortex-a57 for raw mode because the
+ # kernel we use has issues with max.
+ cat > ${out3} <<EOF
+${qemu_bin}/qemu-system-aarch64 -nographic -machine virt,gic-version=3 -m 512M -smp 4 \\
+ -cpu cortex-a57 \\
+ -drive file=${img3},if=none,id=drive0,cache=writeback \\
+ -device virtio-blk,drive=drive0,bootindex=0 \\
+ -drive file=${bios_code},format=raw,if=pflash \\
+ -drive file=${bios_vars},format=raw,if=pflash \\
+ -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+ ;;
+ esac
+ done
+}
+
+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; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ dir=${TREES}/${ma_combo}/freebsd-esp
+ dir2=${TREES}/${ma_combo}/test-stand
+ rm -rf ${dir}
+ mkdir -p ${dir}
+ case ${ma} in
+ amd64) bin=x64 ;;
+ aarch64) bin=aa64 ;;
+ esac
+ mkdir -p ${dir}/efi/boot
+ cp ${dir2}/boot/loader.efi ${dir}/efi/boot/boot${bin}.efi
+ done
+}
+
+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; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ src=${TREES}/${ma_combo}/freebsd-esp
+ dir=${TREES}/${ma_combo}/freebsd
+ dir2=${TREES}/${ma_combo}/test-stand
+ esp=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.esp
+ ufs=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.ufs
+ img=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.img
+ mkdir -p ${IMAGES}/${ma_combo}
+ mkdir -p ${dir2}/etc
+ 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 \
+ -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}
+ # rm -f ${esp} ${ufs} # Don't need to keep this around
+ done
+
+ set -x
+
+if false; then
+ # BIOS i386
+ a=i386:i386
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ dir=${TREES}/${ma_combo}/freebsd
+ dir2=${TREES}/${ma_combo}/test-stand
+ ufs=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.ufs
+ img=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.img
+ mkdir -p ${IMAGES}/${ma_combo}
+ mkdir -p ${dir2}/etc
+ cat > ${dir2}/etc/fstab <<EOF
+/dev/ufs/root / ufs rw 1 1
+EOF
+ ${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 \
+ -p freebsd-boot:=${dir2}/boot/gptboot \
+ -p freebsd-ufs:=${ufs} \
+ -o ${img}
+ rm -f ${src}/etc/fstab
+
+ # PowerPC for 32-bit mac
+ a=powerpc:powerpc
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ dir=${TREES}/${ma_combo}/freebsd
+ dir2=${TREES}/${ma_combo}/test-stand
+ ufs=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.ufs
+ img=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.img
+ mkdir -p ${IMAGES}/${ma_combo}
+ mkdir -p ${dir2}/etc
+ cat > ${dir2}/etc/fstab <<EOF
+/dev/ufs/root / ufs rw 1 1
+EOF
+ ${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 \
+ -p freebsd-boot:=${dir2}/boot/boot1.hfs \
+ -p freebsd-ufs:=${ufs} \
+ -o ${img}
+fi
+
+ set +x
+}
+
+make_freebsd_scripts()
+{
+ # At the moment, we have just two
+ for a in amd64:amd64 arm64:aarch64; do
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+
+ # First off, update the edk firmware
+ bios_code=${BIOS}/edk2-${ma_combo}-code.fd
+ bios_vars=${BIOS}/edk2-${ma_combo}-vars.fd
+ case ${ma} in
+ amd64)
+ 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}
+ fi
+ ;;
+ aarch64)
+ if [ ${bios_code} -ot /usr/local/share/qemu/edk2-aarch64-code.fd ]; then
+ # aarch64 vars starts as an empty file
+ dd if=/dev/zero of=${bios_code} bs=1M count=64
+ dd if=/dev/zero of=${bios_vars} bs=1M count=64
+ dd if=/usr/local/share/qemu/edk2-aarch64-code.fd of=${bios_code} conv=notrunc
+ fi
+ ;;
+ esac
+
+ # Now make me a script
+ img=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.img
+ out=${SCRIPTS}/${ma_combo}/freebsd-test.sh
+ mkdir -p ${SCRIPTS}/${ma_combo}
+ case ${ma} in
+ amd64)
+ cat > ${out} <<EOF
+${qemu_bin}/qemu-system-x86_64 -nographic -m 512M \\
+ -drive file=${img},if=none,id=drive0,cache=writeback,format=raw \\
+ -device virtio-blk,drive=drive0,bootindex=0 \\
+ -drive file=${bios_code},format=raw,if=pflash \\
+ -drive file=${bios_vars},format=raw,if=pflash \\
+ -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+ ;;
+ aarch64)
+ # ESP version
+ raw=${IMAGES}/${ma_combo}/nvme-test-empty.raw
+ cat > ${out} <<EOF
+${qemu_bin}/qemu-system-aarch64 -nographic -machine virt,gic-version=3 -m 512M \\
+ -cpu cortex-a57 -drive file=${img},if=none,id=drive0,cache=writeback -smp 4 \\
+ -device virtio-blk,drive=drive0,bootindex=0 \\
+ -drive file=${bios_code},format=raw,if=pflash \\
+ -drive file=${bios_vars},format=raw,if=pflash \\
+ -drive file=${raw},if=none,id=drive1,cache=writeback,format=raw \\
+ -device nvme,serial=deadbeef,drive=drive1 \\
+ -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+ ;;
+ esac
+ done
+
+if false; then
+ set -x
+ a=powerpc:powerpc
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ img=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.img
+ out=${SCRIPTS}/${ma_combo}/freebsd-test.sh
+ mkdir -p ${SCRIPTS}/${ma_combo}
+ cat > ${out} <<EOF
+${qemu_bin}/qemu-system-ppc -m 1g -M mac99,via=pmu \\
+ -vga none -nographic \\
+ -drive file=${img},if=virtio \\
+ -prom-env "boot-device=/pci@f2000000/scsi/disk@0:,\\\\\\:tbxi" \\
+ -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+
+ set -x
+ a=i386:i386
+ m=${a%%:*}
+ ma=${a##*:}
+ ma_combo="${m}"
+ [ "${m}" != "${ma}" ] && ma_combo="${m}-${ma}"
+ img=${IMAGES}/${ma_combo}/freebsd-${ma_combo}.img
+ out=${SCRIPTS}/${ma_combo}/freebsd-test.sh
+ mkdir -p ${SCRIPTS}/${ma_combo}
+ cat > ${out} <<EOF
+${qemu_bin}/qemu-system-i386 -m 1g \\
+ -vga none -nographic \\
+ -drive file=${img},format=raw \\
+ -nographic \\
+ -monitor telnet::4444,server,nowait \\
+ -serial stdio \$*
+EOF
+fi
+}
+
+# The smallest FAT32 filesystem is 33292 KB
+espsize=33292
+
+set -e
+echo "src/stand test in ${STAND_ROOT}"
+update_freebsd_img_cache
+make_freebsd_minimal_trees
+make_freebsd_test_trees
+make_linux_initrds
+make_linux_esps
+make_freebsd_esps
+make_freebsd_images
+make_freebsd_scripts
+make_linuxboot_images
+make_linuxboot_scripts
diff --git a/tools/boot/install-boot.sh b/tools/boot/install-boot.sh
index d86441f23259..10e62dd32ba8 100755
--- a/tools/boot/install-boot.sh
+++ b/tools/boot/install-boot.sh
@@ -1,7 +1,5 @@
#!/bin/sh
-# $FreeBSD$
-
#
# Installs/updates the necessary boot blocks for the desired boot environment
#
@@ -44,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
@@ -60,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 \
@@ -72,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
@@ -95,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))
@@ -116,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}"
@@ -128,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
@@ -272,27 +294,9 @@ boot_nogeli_mbr_ufs_both() {
boot_nogeli_mbr_ufs_uefi $1 $2 $3
}
+# ZFS+MBR+BIOS is not a supported configuration
boot_nogeli_mbr_zfs_legacy() {
- dev=$1
- dst=$2
-
- # search to find the BSD slice
- s=$(find_part $dev "freebsd")
- if [ -z "$s" ] ; then
- die "No BSD slice found"
- fi
- idx=$(find_part ${dev}s${s} "freebsd-zfs")
- if [ -z "$idx" ] ; then
- die "No freebsd-zfs slice found"
- fi
- # search to find the freebsd-zfs partition within the slice
- # Or just assume it is 'a' because it has to be since it fails otherwise
- doit gpart bootcode -b ${dst}/boot/mbr ${dev}
- dd if=${dst}/boot/zfsboot of=/tmp/zfsboot1 count=1
- doit gpart bootcode -b /tmp/zfsboot1 ${dev}s${s} # Put boot1 into the start of part
- sysctl kern.geom.debugflags=0x10 # Put boot2 into ZFS boot slot
- doit dd if=${dst}/boot/zfsboot of=/dev/${dev}s${s}a skip=1 seek=1024
- sysctl kern.geom.debugflags=0x0
+ exit 1
}
boot_nogeli_mbr_zfs_uefi() {
@@ -300,7 +304,6 @@ boot_nogeli_mbr_zfs_uefi() {
}
boot_nogeli_mbr_zfs_both() {
- boot_nogeli_mbr_zfs_legacy $1 $2 $3
boot_nogeli_mbr_zfs_uefi $1 $2 $3
}
@@ -353,15 +356,6 @@ boot_geli_mbr_zfs_both() {
exit 1
}
-boot_nogeli_vtoc8_ufs_ofw() {
- dev=$1
- dst=$2
-
- # For non-native builds, ensure that geom_part(4) supports VTOC8.
- kldload geom_part_vtoc8.ko
- doit gpart bootcode -p ${vtoc8} ${dev}
-}
-
usage() {
printf 'Usage: %s -b bios [-d destdir] -f fs [-g geli] [-h] [-o optargs] -s scheme <bootdev>\n' "$0"
printf 'Options:\n'
@@ -431,9 +425,6 @@ gptzfs2=${srcroot}/boot/gptzfsboot
mbr0=${srcroot}/boot/mbr
mbr2=${srcroot}/boot/boot
-# VTOC8
-vtoc8=${srcroot}/boot/boot1
-
# sanity check here
# Check if we've been given arguments. If not, this script is probably being
diff --git a/tools/boot/lua-img.sh b/tools/boot/lua-img.sh
index 85e4cfc304d9..c0c1d0a41ac7 100755
--- a/tools/boot/lua-img.sh
+++ b/tools/boot/lua-img.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# Quick script to build a suitable /boot dir somewhere in the tree for testing.
# dir may be passed in, will default to /tmp/loadertest if not specified
diff --git a/tools/boot/lua-lint.sh b/tools/boot/lua-lint.sh
index c6bc89da3330..60d7c567dab4 100755
--- a/tools/boot/lua-lint.sh
+++ b/tools/boot/lua-lint.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# Run linter on the lua scripts in stand/lua. luacheck, available in ports as
# devel/lua-luacheck, must be installed as a dependency of this script.
@@ -18,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/lua-test.sh b/tools/boot/lua-test.sh
index 3ce5fa6bd54a..8b6bfd9d66c8 100755
--- a/tools/boot/lua-test.sh
+++ b/tools/boot/lua-test.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# Will image the test directory (default /tmp/loadertest) if it doesn't exist
diff --git a/tools/boot/rootgen.sh b/tools/boot/rootgen.sh
index b61fff647b5c..2cd65bdd180d 100755
--- a/tools/boot/rootgen.sh
+++ b/tools/boot/rootgen.sh
@@ -1,29 +1,23 @@
#!/bin/sh
-# $FreeBSD$
-
passphrase=passphrase
iterations=50000
# The smallest FAT32 filesystem is 33292 KB
espsize=33292
-dev=vtbd0
#
# Builds all the bat-shit crazy combinations we support booting from,
# at least for amd64. It assume you have a ~sane kernel in /boot/kernel
# and copies that into the ~150MB root images we create (we create the du
-# size of the kernel + 20MB
+# size of the kernel + 20MB).
#
-# Sad panda sez: this runs as root, but could be userland if someone
-# creates userland geli and zfs tools.
+# Sad panda sez: this runs as root, but could be any user if someone
+# creates userland geli.
#
# This assumes an external program install-boot.sh which will install
# the appropriate boot files in the appropriate locations.
#
-# These images assume ${dev} will be the root image. We should likely
-# use labels, but we don't.
-#
# Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
# vars should likely be conditionally set to allow better automation.
#
@@ -38,14 +32,20 @@ cpsys() {
(cd $src ; tar cf - .) | (cd $dst; tar xf -)
}
+ufs_fstab() {
+ dir=$1
+
+ cat > ${dir}/etc/fstab <<EOF
+/dev/ufs/root / ufs rw 1 1
+EOF
+}
+
mk_nogeli_gpt_ufs_legacy() {
src=$1
img=$2
- cat > ${src}/etc/fstab <<EOF
-/dev/${dev}p2 / ufs rw 1 1
-EOF
- makefs -t ffs -B little -s 200m ${img}.p2 ${src}
+ ufs_fstab ${src}
+ makefs -t ffs -B little -s 200m -o label=root ${img}.p2 ${src}
mkimg -s gpt -b ${src}/boot/pmbr \
-p freebsd-boot:=${src}/boot/gptboot \
-p freebsd-ufs:=${img}.p2 -o ${img}
@@ -56,11 +56,9 @@ mk_nogeli_gpt_ufs_uefi() {
src=$1
img=$2
- cat > ${src}/etc/fstab <<EOF
-/dev/${dev}p2 / ufs rw 1 1
-EOF
+ ufs_fstab ${src}
make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
- makefs -t ffs -B little -s 200m ${img}.p2 ${src}
+ makefs -t ffs -B little -s 200m -o label=root ${img}.p2 ${src}
mkimg -s gpt \
-p efi:=${img}.p1 \
-p freebsd-ufs:=${img}.p2 -o ${img}
@@ -71,11 +69,9 @@ mk_nogeli_gpt_ufs_both() {
src=$1
img=$2
- cat > ${src}/etc/fstab <<EOF
-/dev/${dev}p3 / ufs rw 1 1
-EOF
+ ufs_fstab ${src}
make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
- makefs -t ffs -B little -s 200m ${img}.p3 ${src}
+ makefs -t ffs -B little -s 200m -o label=root ${img}.p3 ${src}
# p1 is boot for uefi, p2 is boot for gpt, p3 is /
mkimg -b ${src}/boot/pmbr -s gpt \
-p efi:=${img}.p1 \
@@ -85,6 +81,23 @@ EOF
rm -f ${src}/etc/fstab
}
+# XXX should not assume host == target
+zfs_extra()
+{
+ src=$1
+ dst=$2
+
+ mkdir -p $dst
+ mkdir -p $dst/boot/kernel
+ cat > ${dst}/boot/loader.conf.local <<EOF
+cryptodev_load=YES
+zfs_load=YES
+EOF
+ cp /boot/kernel/acl_nfs4.ko ${dst}/boot/kernel/acl_nfs4.ko
+ cp /boot/kernel/cryptodev.ko ${dst}/boot/kernel/cryptodev.ko
+ cp /boot/kernel/zfs.ko ${dst}/boot/kernel/zfs.ko
+}
+
mk_nogeli_gpt_zfs_legacy() {
src=$1
img=$2
@@ -94,34 +107,17 @@ mk_nogeli_gpt_zfs_legacy() {
fs=$6
bios=$7
pool=nogeli-gpt-zfs-legacy
+ dst=$img.extra
- dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
- md=$(mdconfig -f ${img})
- gpart create -s gpt ${md}
- gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
- gpart add -t freebsd-zfs -l root $md
- # install-boot will make this bootable
- zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
- zpool set bootfs=${pool} ${pool}
- zfs create -po mountpoint=/ ${pool}/ROOT/default
- # NB: The online guides go nuts customizing /var and other mountpoints here, no need
- cpsys ${src} ${mntpt}
- # need to make a couple of tweaks
- cat >> ${mntpt}/boot/loader.conf <<EOF
-cryptodev_load=YES
-zfs_load=YES
-EOF
- cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
- cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
- cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
- # end tweaks
- zfs umount -f ${pool}/ROOT/default
- zfs set mountpoint=none ${pool}/ROOT/default
- zpool set bootfs=${pool}/ROOT/default ${pool}
- zpool set autoexpand=on ${pool}
- zpool export ${pool}
- ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
- mdconfig -d -u ${md}
+ zfs_extra $src $dst
+ makefs -t zfs -s 200m \
+ -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
+ ${img}.p2 ${src} ${dst}
+ mkimg -b ${src}/boot/pmbr -s gpt \
+ -p freebsd-boot:=/boot/gptzfsboot \
+ -p freebsd-zfs:=${img}.p2 \
+ -o ${img}
+ rm -rf ${dst}
}
mk_nogeli_gpt_zfs_uefi() {
@@ -133,34 +129,18 @@ mk_nogeli_gpt_zfs_uefi() {
fs=$6
bios=$7
pool=nogeli-gpt-zfs-uefi
+ dst=$img.extra
- dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
- md=$(mdconfig -f ${img})
- gpart create -s gpt ${md}
- gpart add -t efi -s ${espsize}k -a 4k ${md}
- gpart add -t freebsd-zfs -l root $md
- # install-boot will make this bootable
- zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
- zpool set bootfs=${pool} ${pool}
- zfs create -po mountpoint=/ ${pool}/ROOT/default
- # NB: The online guides go nuts customizing /var and other mountpoints here, no need
- cpsys ${src} ${mntpt}
- # need to make a couple of tweaks
- cat >> ${mntpt}/boot/loader.conf <<EOF
-cryptodev_load=YES
-zfs_load=YES
-EOF
- cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
- cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
- cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
- # end tweaks
- zfs umount -f ${pool}/ROOT/default
- zfs set mountpoint=none ${pool}/ROOT/default
- zpool set bootfs=${pool}/ROOT/default ${pool}
- zpool set autoexpand=on ${pool}
- zpool export ${pool}
- ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
- mdconfig -d -u ${md}
+ zfs_extra $src $dst
+ make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
+ makefs -t zfs -s 200m \
+ -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
+ ${img}.p2 ${src} ${dst}
+ mkimg -b ${src}/boot/pmbr -s gpt \
+ -p efi:=${img}.p1 \
+ -p freebsd-zfs:=${img}.p2 \
+ -o ${img}
+ rm -rf ${dst}
}
mk_nogeli_gpt_zfs_both() {
@@ -172,45 +152,27 @@ mk_nogeli_gpt_zfs_both() {
fs=$6
bios=$7
pool=nogeli-gpt-zfs-both
+ dst=$img.extra
- dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
- md=$(mdconfig -f ${img})
- gpart create -s gpt ${md}
- gpart add -t efi -s ${espsize}k -a 4k ${md}
- gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
- gpart add -t freebsd-zfs -l root $md
- # install-boot will make this bootable
- zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
- zpool set bootfs=${pool} ${pool}
- zfs create -po mountpoint=/ ${pool}/ROOT/default
- # NB: The online guides go nuts customizing /var and other mountpoints here, no need
- cpsys ${src} ${mntpt}
- # need to make a couple of tweaks
- cat >> ${mntpt}/boot/loader.conf <<EOF
-cryptodev_load=YES
-zfs_load=YES
-EOF
- cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
- cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
- cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
- # end tweaks
- zfs umount -f ${pool}/ROOT/default
- zfs set mountpoint=none ${pool}/ROOT/default
- zpool set bootfs=${pool}/ROOT/default ${pool}
- zpool set autoexpand=on ${pool}
- zpool export ${pool}
- ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
- mdconfig -d -u ${md}
+ zfs_extra $src $dst
+ make_esp_file ${img}.p2 ${espsize} ${src}/boot/loader.efi
+ makefs -t zfs -s 200m \
+ -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
+ ${img}.p3 ${src} ${dst}
+ mkimg -b ${src}/boot/pmbr -s gpt \
+ -p freebsd-boot:=/boot/gptzfsboot \
+ -p efi:=${img}.p2 \
+ -p freebsd-zfs:=${img}.p3 \
+ -o ${img}
+ rm -rf ${dst}
}
mk_nogeli_mbr_ufs_legacy() {
src=$1
img=$2
- cat > ${src}/etc/fstab <<EOF
-/dev/${dev}s1a / ufs rw 1 1
-EOF
- makefs -t ffs -B little -s 200m ${img}.s1a ${src}
+ ufs_fstab ${src}
+ makefs -t ffs -B little -s 200m -o label=root ${img}.s1a ${src}
mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
rm -f ${src}/etc/fstab
@@ -220,11 +182,9 @@ mk_nogeli_mbr_ufs_uefi() {
src=$1
img=$2
- cat > ${src}/etc/fstab <<EOF
-/dev/${dev}s2a / ufs rw 1 1
-EOF
+ ufs_fstab ${src}
make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
- makefs -t ffs -B little -s 200m ${img}.s2a ${src}
+ makefs -t ffs -B little -s 200m -o label=root ${img}.s2a ${src}
mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
rm -f ${src}/etc/fstab
@@ -234,57 +194,14 @@ mk_nogeli_mbr_ufs_both() {
src=$1
img=$2
- cat > ${src}/etc/fstab <<EOF
-/dev/${dev}s2a / ufs rw 1 1
-EOF
+ ufs_fstab ${src}
make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
- makefs -t ffs -B little -s 200m ${img}.s2a ${src}
+ makefs -t ffs -B little -s 200m -o label=root ${img}.s2a ${src}
mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
rm -f ${src}/etc/fstab
}
-mk_nogeli_mbr_zfs_legacy() {
- src=$1
- img=$2
- mntpt=$3
- geli=$4
- scheme=$5
- fs=$6
- bios=$7
- pool=nogeli-mbr-zfs-legacy
-
- dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
- md=$(mdconfig -f ${img})
- gpart create -s mbr ${md}
- gpart add -t freebsd ${md}
- gpart set -a active -i 1 ${md}
- gpart create -s bsd ${md}s1
- gpart add -t freebsd-zfs ${md}s1
- # install-boot will make this bootable
- zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
- zpool set bootfs=${pool} ${pool}
- zfs create -po mountpoint=/ ${pool}/ROOT/default
- # NB: The online guides go nuts customizing /var and other mountpoints here, no need
- cpsys ${src} ${mntpt}
- # need to make a couple of tweaks
- cat >> ${mntpt}/boot/loader.conf <<EOF
-cryptodev_load=YES
-zfs_load=YES
-EOF
- cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
- cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
- cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
- # end tweaks
- zfs umount -f ${pool}/ROOT/default
- zfs set mountpoint=none ${pool}/ROOT/default
- zpool set bootfs=${pool}/ROOT/default ${pool}
- zpool set autoexpand=on ${pool}
- zpool export ${pool}
- ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
- mdconfig -d -u ${md}
-}
-
mk_nogeli_mbr_zfs_uefi() {
src=$1
img=$2
@@ -295,78 +212,14 @@ mk_nogeli_mbr_zfs_uefi() {
bios=$7
pool=nogeli-mbr-zfs-uefi
- dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
- md=$(mdconfig -f ${img})
- gpart create -s mbr ${md}
- gpart add -t efi -s ${espsize}k ${md}
- gpart add -t freebsd ${md}
- gpart set -a active -i 2 ${md}
- gpart create -s bsd ${md}s2
- gpart add -t freebsd-zfs ${md}s2
- # install-boot will make this bootable
- zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
- zpool set bootfs=${pool} ${pool}
- zfs create -po mountpoint=/ ${pool}/ROOT/default
- # NB: The online guides go nuts customizing /var and other mountpoints here, no need
- cpsys ${src} ${mntpt}
- # need to make a couple of tweaks
- cat >> ${mntpt}/boot/loader.conf <<EOF
-cryptodev_load=YES
-zfs_load=YES
-EOF
- cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
- cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
- cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
- # end tweaks
- zfs umount -f ${pool}/ROOT/default
- zfs set mountpoint=none ${pool}/ROOT/default
- zpool set bootfs=${pool}/ROOT/default ${pool}
- zpool set autoexpand=on ${pool}
- zpool export ${pool}
- ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
- mdconfig -d -u ${md}
-}
-
-mk_nogeli_mbr_zfs_both() {
- src=$1
- img=$2
- mntpt=$3
- geli=$4
- scheme=$5
- fs=$6
- bios=$7
- pool=nogeli-mbr-zfs-both
-
- dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
- md=$(mdconfig -f ${img})
- gpart create -s mbr ${md}
- gpart add -t efi -s ${espsize}k ${md}
- gpart add -t freebsd ${md}
- gpart set -a active -i 2 ${md}
- gpart create -s bsd ${md}s2
- gpart add -t freebsd-zfs ${md}s2
- # install-boot will make this bootable
- zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
- zpool set bootfs=${pool} ${pool}
- zfs create -po mountpoint=/ ${pool}/ROOT/default
- # NB: The online guides go nuts customizing /var and other mountpoints here, no need
- cpsys ${src} ${mntpt}
- # need to make a couple of tweaks
- cat >> ${mntpt}/boot/loader.conf <<EOF
-cryptodev_load=YES
-zfs_load=YES
-EOF
- cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
- cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
- cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
- # end tweaks
- zfs umount -f ${pool}/ROOT/default
- zfs set mountpoint=none ${pool}/ROOT/default
- zpool set bootfs=${pool}/ROOT/default ${pool}
- zpool set autoexpand=on ${pool}
- zpool export ${pool}
- ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
- mdconfig -d -u ${md}
+ zfs_extra $src $dst
+ make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
+ makefs -t zfs -s 200m \
+ -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
+ ${img}.s2a ${src} ${dst}
+ mkimg -s bsd -p freebsd-zfs:=${img}.s2a -o ${img}.s2
+ mkimg -a 1 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
+ rm -rf ${dst}
}
mk_geli_gpt_ufs_legacy() {
@@ -386,16 +239,14 @@ mk_geli_gpt_ufs_legacy() {
# install-boot will make this bootable
echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
echo ${passphrase} | geli attach -j - ${md}p2
- newfs /dev/${md}p2.eli
+ newfs -L root /dev/${md}p2.eli
mount /dev/${md}p2.eli ${mntpt}
cpsys ${src} ${mntpt}
# need to make a couple of tweaks
cat > ${mntpt}/boot/loader.conf <<EOF
geom_eli_load=YES
EOF
- cat > ${mntpt}/etc/fstab <<EOF
-/dev/${dev}p2.eli / ufs rw 1 1
-EOF
+ ufs_fstab ${mntpt}
cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
# end tweaks
@@ -422,16 +273,14 @@ mk_geli_gpt_ufs_uefi() {
# install-boot will make this bootable
echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
echo ${passphrase} | geli attach -j - ${md}p2
- newfs /dev/${md}p2.eli
+ newfs -L root /dev/${md}p2.eli
mount /dev/${md}p2.eli ${mntpt}
cpsys ${src} ${mntpt}
# need to make a couple of tweaks
cat > ${mntpt}/boot/loader.conf <<EOF
geom_eli_load=YES
EOF
- cat > ${mntpt}/etc/fstab <<EOF
-/dev/${dev}p2.eli / ufs rw 1 1
-EOF
+ ufs_fstab ${mntpt}
cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
# end tweaks
@@ -459,16 +308,14 @@ mk_geli_gpt_ufs_both() {
# install-boot will make this bootable
echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
echo ${passphrase} | geli attach -j - ${md}p3
- newfs /dev/${md}p3.eli
+ newfs -L root /dev/${md}p3.eli
mount /dev/${md}p3.eli ${mntpt}
cpsys ${src} ${mntpt}
# need to make a couple of tweaks
cat > ${mntpt}/boot/loader.conf <<EOF
geom_eli_load=YES
EOF
- cat > ${mntpt}/etc/fstab <<EOF
-/dev/${dev}p3.eli / ufs rw 1 1
-EOF
+ ufs_fstab ${mntpt}
cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
# end tweaks
@@ -645,30 +492,7 @@ mk_geli_mbr_zfs_both() {
# u-boot
# powerpc
-mk_sparc64_nogeli_vtoc8_ufs_ofw() {
- src=$1
- img=$2
- mntpt=$3
- geli=$4
- scheme=$5
- fs=$6
- bios=$7
-
- cat > ${src}/etc/fstab <<EOF
-/dev/${dev}a / ufs rw 1 1
-EOF
- makefs -t ffs -B big -s 200m ${img} ${src}
- md=$(mdconfig -f ${img})
- # For non-native builds, ensure that geom_part(4) supports VTOC8.
- kldload geom_part_vtoc8.ko
- gpart create -s VTOC8 ${md}
- gpart add -t freebsd-ufs ${md}
- ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
- mdconfig -d -u ${md}
- rm -f ${src}/etc/fstab
-}
-
-qser="-serial telnet::4444,server -nographic"
+qser="-monitor telnet::4444,server,nowait -serial stdio -nographic"
# https://wiki.freebsd.org/QemuRecipes
# aarch64
@@ -687,13 +511,22 @@ qemu_aarch64_uefi()
# -netdev user,id=net0
}
+log_for()
+{
+ dir=$(dirname $1)
+ fn=$(basename $1 .sh)
+ echo $dir/$fn.log
+}
+
# Amd64 qemu
qemu_amd64_legacy()
{
img=$1
sh=$2
+ log=$(log_for $2)
- echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
+ echo "echo -n $(basename $sh .sh):' '" > $sh
+ echo "(qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser} | tee $log 2>&1 | grep -q SUCCESS) && echo legacy pass || echo legacy fail" >> $sh
chmod 755 $sh
}
@@ -701,8 +534,10 @@ qemu_amd64_uefi()
{
img=$1
sh=$2
+ log=$(log_for $2)
- echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
+ echo "echo -n $(basename $sh .sh):' '" > $sh
+ echo "(qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser} | tee $log 2>&1 | grep -q SUCCESS) && echo uefi pass || echo uefi fail" >> $sh
chmod 755 $sh
}
@@ -710,9 +545,12 @@ qemu_amd64_both()
{
img=$1
sh=$2
+ log=$(log_for $2)
- echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
- echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
+ echo "echo -n $(basename $sh .sh):' '" > $sh
+ echo "(qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser} | tee $log 2>&1 | grep -q SUCCESS) && echo legacy pass || echo legacy fail" >> $sh
+ echo "echo -n $(basename $sh .sh):' '" >> $sh
+ echo "(qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser} | tee -a $log 2>&1 | grep -q SUCCESS) && echo uefi pass || echo uefi fail" >> $sh
chmod 755 $sh
}
@@ -761,6 +599,8 @@ make_one_image()
# Create sparse file and mount newly created filesystem(s) on it
img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
+ echo "$sh" >> ${IMGDIR}/all.sh
+ echo date >> ${IMGDIR}/all.sh
echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv"
rm -f ${img}*
eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
@@ -769,16 +609,10 @@ make_one_image()
echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^"
}
-# mips
-# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
-
# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
# powerpc64
# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
-# sparc64
-# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
-
# Misc variables
SRCTOP=$(make -v SRCTOP)
cd ${SRCTOP}/stand
@@ -796,6 +630,7 @@ cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
echo -h -D -S115200 > ${DESTDIR}/boot.config
cat > ${DESTDIR}/boot/loader.conf <<EOF
comconsole_speed=115200
+autoboot_delay=0
EOF
# XXX
cp /boot/device.hints ${DESTDIR}/boot/device.hints
@@ -822,24 +657,35 @@ EOF
# If we were given exactly 5 args, go make that one image.
+rm -f ${IMGDIR}/all.sh
+echo date > ${IMGDIR}/all.sh
+chmod +x ${IMGDIR}/all.sh
+
if [ $# -eq 5 ]; then
make_one_image $*
+ echo ${IMGDIR}/all.sh
exit
fi
# OK. Let the games begin
for arch in amd64; do
- for geli in nogeli geli; do
+ for geli in nogeli; do # geli
for scheme in gpt mbr; do
for fs in ufs zfs; do
for bios in legacy uefi both; do
+ # ZFS+MBR+BIOS is not supported
+ if [ "$scheme" = "mbr" -a "$fs" = "zfs" -a "$bios" != "uefi" ]; then
+ continue
+ fi
make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
done
done
done
done
done
+ # We should also do a cd image for amd64 here
+echo ${IMGDIR}/all.sh
rmdir ${MNTPT}
@@ -852,39 +698,47 @@ for arch in i386; do
for scheme in gpt mbr; do
for fs in ufs zfs; do
for bios in legacy; do
+ # The legacy boot is shared with amd64 so those routines could
+ # likely be used here.
+
+ # ZFS+MBR+BIOS is not supported
+ if [ "$scheme" = "mbr" -a "$fs" = "zfs" -a "$bios" != "uefi" ]; then
+ continue
+ fi
make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
done
done
done
done
done
+ # We should also do a cd image for i386 here
for arch in arm aarch64; do
+ geli=nogeli # I don't think geli boot works / is supported on arm
for scheme in gpt mbr; do
- fs=ufs
- for bios in uboot efi; do
- make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
- done
+ for fs in ufs zfs; do
+ bios=efi # Note: arm has some uboot support with ufs, what to do?
+ make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
+ done
done
done
-for arch in powerpc powerpc64; do
- for scheme in ppc-wtf; do
- fs=ufs
+# It's not clear that the nested looping paradigm is best for powerpc
+# due to its diversity.
+for arch in powerpc powerpc64 powerpc64le; do
+ geli=nogeli
+ for scheme in apm gpt; do
+ fs=ufs # zfs + gpt might be supported?
for bios in ofw uboot chrp; do
make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
done
done
done
-for arch in sparc64; do
- for geli in nogeli; do
- for scheme in vtoc8; do
- for fs in ufs; do
- for bios in ofw; do
- make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
- done
- done
- done
- done
+for arch in riscv; do
+ geli=nogeli
+ fs=ufs # Generic ZFS booting support with efi?
+ scheme=gpt
+ bios=efi
+ make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
done
diff --git a/tools/boot/smbios/Makefile b/tools/boot/smbios/Makefile
new file mode 100644
index 000000000000..42a17aa54b5a
--- /dev/null
+++ b/tools/boot/smbios/Makefile
@@ -0,0 +1,9 @@
+PROG= smbios
+MAN=
+.PATH: ${SRCTOP}/stand/libsa
+SRCS= main.c
+CFLAGS+= -I${.CURDIR} -I${SRCTOP}/stand/libsa
+
+.include <bsd.prog.mk>
+
+CFLAGS+= -Wno-cast-align
diff --git a/tools/boot/smbios/main.c b/tools/boot/smbios/main.c
new file mode 100644
index 000000000000..60263d2ea8d9
--- /dev/null
+++ b/tools/boot/smbios/main.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2023 Warner Losh
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+/*
+ * Test program for smbios support in the boot loader. This program will mmap
+ * physical memory, and print the smbios table at the passed in PA. This is
+ * intended to test the code and debug problems in a debugger friendly
+ * environment.
+ */
+
+#include <sys/param.h>
+#define setenv my_setenv
+
+#define SMBIOS_SERIAL_NUMBERS 1
+#define SMBIOS_LITTLE_ENDIAN_UUID 1
+
+#include <arpa/inet.h>
+
+#include "smbios.h"
+#include "smbios.c"
+
+#include <sys/mman.h>
+
+#define MAX_MAP 10
+#define PAGE (64<<10)
+
+static struct mapping
+{
+ uintptr_t pa;
+ caddr_t va;
+} map[MAX_MAP];
+static int fd;
+static int nmap;
+
+caddr_t ptov(uintptr_t pa)
+{
+ caddr_t va;
+ uintptr_t pa2;
+ struct mapping *m = map;
+
+ pa2 = rounddown(pa, PAGE);
+ for (int i = 0; i < nmap; i++, m++) {
+ if (m->pa == pa2) {
+ return (m->va + pa - m->pa);
+ }
+ }
+ if (nmap == MAX_MAP)
+ errx(1, "Too many maps");
+ va = mmap(0, PAGE, PROT_READ, MAP_SHARED, fd, pa2);
+ if (va == MAP_FAILED)
+ err(1, "mmap offset %#lx", (long)pa2);
+ m = &map[nmap++];
+ m->pa = pa2;
+ m->va = va;
+ return (m->va + pa - m->pa);
+}
+
+static void
+cleanup(void)
+{
+ for (int i = 0; i < nmap; i++) {
+ munmap(map[i].va, PAGE);
+ }
+}
+
+int
+my_setenv(const char *name, const char *value, int overwrite __unused)
+{
+ printf("%s=%s\n", name, value);
+ return 0;
+}
+
+static void
+usage(void)
+{
+ errx(1, "smbios address");
+}
+
+int
+main(int argc, char **argv)
+{
+ uintptr_t addr;
+
+ if (argc != 2)
+ usage();
+ addr = strtoull(argv[1], NULL, 0);
+ /* For mmap later */
+ fd = open("/dev/mem", O_RDONLY);
+ if (fd < 0)
+ err(1, "Opening /dev/mem");
+ smbios_detect(ptov(addr));
+ cleanup();
+}
diff --git a/tools/boot/smbios/stand.h b/tools/boot/smbios/stand.h
new file mode 100644
index 000000000000..d754189fad13
--- /dev/null
+++ b/tools/boot/smbios/stand.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2023 Warner Losh
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <sys/types.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+caddr_t ptov(uintptr_t pa);
diff --git a/tools/boot/universe.sh b/tools/boot/universe.sh
index a23678100705..e97858ff2bcb 100755
--- a/tools/boot/universe.sh
+++ b/tools/boot/universe.sh
@@ -1,15 +1,9 @@
#!/bin/sh
-# $FreeBSD$
-
#
-# Full list of all arches, but we only build a subset. All different mips add any
-# value, and there's a few others we just don't support.
+# Full list of all arches we don't build.
#
-# mips/mipsel mips/mips mips/mips64el mips/mips64 mips/mipsn32 \
-# mips/mipselhf mips/mipshf mips/mips64elhf mips/mips64hf \
-# powerpc/powerpc powerpc/powerpc64 powerpc/powerpcspe \
-# riscv/riscv64 riscv/riscv64sf
+# 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
@@ -45,7 +39,7 @@ dobuild()
echo "Fail (cleanup)"
continue
fi
- if ! make buildenv TARGET_ARCH=$ta BUILDENV_SHELL="make ${opt} -j 20 all" \
+ if ! make buildenv TARGET_ARCH=$ta BUILDENV_SHELL="make ${opt} -j 40 all" \
>> $lf 2>&1; then
echo "Fail (build)"
continue
@@ -58,6 +52,7 @@ cd $top/stand
# Build without forth
for i in \
+ arm64/aarch64 \
amd64/amd64 \
i386/i386 \
; do
@@ -67,6 +62,7 @@ done
# Build without GELI
for i in \
+ arm64/aarch64 \
amd64/amd64 \
i386/i386 \
; do
@@ -74,46 +70,36 @@ for i in \
dobuild $ta _.boot.${ta}.no_geli.log "WITHOUT_LOADER_GEIL=yes"
done
-# Default build for a goodly selection of architectures
+# Default build for a almost all architectures
for i in \
amd64/amd64 \
arm/armv7 \
arm64/aarch64 \
i386/i386 \
- mips/mips mips/mips64 \
- powerpc/powerpc powerpc/powerpc64 \
+ powerpc/powerpc \
+ powerpc/powerpc64 \
+ powerpc/powerpc64le \
+ riscv/riscv64 \
; do
ta=${i##*/}
dobuild $ta _.boot.${ta}.log ""
done
-# Default build for a goodly selection of architectures with Lua
-for i in \
- amd64/amd64 \
- arm/armv7 \
- arm64/aarch64 \
- i386/i386 \
- mips/mips mips/mips64 \
- powerpc/powerpc powerpc/powerpc64 \
- ; do
- ta=${i##*/}
- dobuild $ta _.boot.${ta}.lua.log "MK_LOADER_LUA=yes MK_FORTH=no"
-done
-
# Build w/o ZFS
for i in \
+ arm64/aarch64 \
amd64/amd64 \
i386/i386 \
; do
ta=${i##*/}
- dobuild $ta _.boot.${ta}.no_zfs.log "MK_ZFS=no"
+ dobuild $ta _.boot.${ta}.no_zfs.log "MK_LOADER_ZFS=no"
done
-# Build with firewire
+# Build w/ LOADER_BIOS_TEXTONLY
for i in \
amd64/amd64 \
i386/i386 \
; do
ta=${i##*/}
- dobuild $ta _.boot.${ta}.firewire.log "MK_LOADER_FIREWIRE=yes"
+ dobuild $ta _.boot.${ta}.no_zfs.log "MK_LOADER_BIOS_TEXTONLY=yes"
done
diff --git a/tools/bsdbox/Makefile b/tools/bsdbox/Makefile
index ce40eb8b75a2..35e37b31ea2f 100644
--- a/tools/bsdbox/Makefile
+++ b/tools/bsdbox/Makefile
@@ -1,10 +1,8 @@
-#$FreeBSD$
-# @(#)Makefile 8.1 (Berkeley) 6/2/93
-
MAN=
.include <bsd.own.mk>
MK_SSP= no
+MK_PIE= no
PROG= bsdbox
BINDIR?=/sbin
@@ -55,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
@@ -72,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
@@ -100,9 +98,6 @@ CRUNCH_LIBS+= -lm
#.include "Makefile.textproc"
.include "Makefile.login"
.include "Makefile.kld"
-# telnet/telnetd are too broken to include as a crunchgen'ed binary,
-# thanks to some of the horrible layering violations going on.
-# .include "Makefile.telnetd"
.include "Makefile.fs"
CRUNCH_LIBS+= -lcrypto -lssl -lz
diff --git a/tools/bsdbox/Makefile.base b/tools/bsdbox/Makefile.base
index f2ffc2e49f70..8dfc2c50c68c 100644
--- a/tools/bsdbox/Makefile.base
+++ b/tools/bsdbox/Makefile.base
@@ -2,7 +2,6 @@
# This builds a variety of "base" tools, useful for an embedded
# system.
#
-# $FreeBSD$
#
CRUNCH_PROGS_sbin+= dmesg sysctl init reboot
CRUNCH_PROGS_bin+= ls cat dd df cp hostname kill mkdir sleep ps
@@ -10,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
@@ -24,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.depend b/tools/bsdbox/Makefile.depend
index 5c55689d1148..4d727dd6d58f 100644
--- a/tools/bsdbox/Makefile.depend
+++ b/tools/bsdbox/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
diff --git a/tools/bsdbox/Makefile.fs b/tools/bsdbox/Makefile.fs
index 5f6833723c91..fbf660d2aa34 100644
--- a/tools/bsdbox/Makefile.fs
+++ b/tools/bsdbox/Makefile.fs
@@ -1,7 +1,6 @@
#
# Filesystem related tools
#
-# $FreeBSD$
# mfs
CRUNCH_PROGS_sbin+= mdmfs mdconfig newfs
diff --git a/tools/bsdbox/Makefile.hostapd b/tools/bsdbox/Makefile.hostapd
index 631643188bf1..4459de171242 100644
--- a/tools/bsdbox/Makefile.hostapd
+++ b/tools/bsdbox/Makefile.hostapd
@@ -1,16 +1,20 @@
#
# Build hostap/wpa_supplicant and supporting utilities.
#
-# $FreeBSD$
#
.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
@@ -18,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.kld b/tools/bsdbox/Makefile.kld
index 96be779faeeb..ebf67527d0c2 100644
--- a/tools/bsdbox/Makefile.kld
+++ b/tools/bsdbox/Makefile.kld
@@ -1,6 +1,5 @@
#
# This builds the kld related programs.
#
-# $FreeBSD$
#
CRUNCH_PROGS_sbin+= kldload kldunload kldstat
diff --git a/tools/bsdbox/Makefile.login b/tools/bsdbox/Makefile.login
index a4574ec0abc4..e7e0305c165d 100644
--- a/tools/bsdbox/Makefile.login
+++ b/tools/bsdbox/Makefile.login
@@ -1,7 +1,6 @@
#
# This builds login and friends.
#
-# $FreeBSD$
#
CRUNCH_PROGS_libexec+= getty
diff --git a/tools/bsdbox/Makefile.net b/tools/bsdbox/Makefile.net
index ed39decd4ac7..d0f7654c41d7 100644
--- a/tools/bsdbox/Makefile.net
+++ b/tools/bsdbox/Makefile.net
@@ -1,7 +1,6 @@
#
# This builds network tools.
#
-# $FreeBSD$
#
CRUNCH_PROGS_sbin+= route ping
@@ -21,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/bsdbox/Makefile.telnetd b/tools/bsdbox/Makefile.telnetd
deleted file mode 100644
index 5a77176fd3ac..000000000000
--- a/tools/bsdbox/Makefile.telnetd
+++ /dev/null
@@ -1,14 +0,0 @@
-# Build telnetd
-# Question - why is telnetds objects ending up in the srcdir? -adrian
-
-# This won't work yet - because telnetd relies on libtelnet.a which includes
-# kerberos support by default; building telnetd without kerberos support
-# requires the cross-build world to be built the same.
-# -adrian
-
-# $FreeBSD$
-
-CRUNCH_PROGS_libexec+= telnetd
-CRUNCH_PROGS_usr.bin+= telnet
-CRUNCH_LIBS+= -lkrb5 -lhx509 -lasn1 -lcom_err -lroken -ltelnetd
-# CRUNCH_BUILDOPTS_telnetd= MK_KERBEROS_SUPPORT=no
diff --git a/tools/bsdbox/Makefile.textproc b/tools/bsdbox/Makefile.textproc
index a913d4605975..1e24fe4f34d1 100644
--- a/tools/bsdbox/Makefile.textproc
+++ b/tools/bsdbox/Makefile.textproc
@@ -2,7 +2,6 @@
# This builds a variety of text processing tools that
# may be useful on an embedded device.
#
-# $FreeBSD$
#
# Sed
diff --git a/tools/bsdbox/README b/tools/bsdbox/README
index 2f63652d9799..de5bd4617639 100644
--- a/tools/bsdbox/README
+++ b/tools/bsdbox/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This is a very cut down implementation of a "busybox" style binary
for FreeBSD.
diff --git a/tools/build/Makefile b/tools/build/Makefile
index 00f5e3e45337..3c4e07e3cfc2 100644
--- a/tools/build/Makefile
+++ b/tools/build/Makefile
@@ -1,11 +1,18 @@
-# $FreeBSD$
-
.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
@@ -17,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
@@ -68,13 +85,17 @@ INCS+= stdlib.h
SRCS+= reallocarray.c
.endif
+.if exists(${HOST_INCLUDE_ROOT}/sys/stat.h)
_WITH_UTIMENS!= grep -c utimensat ${HOST_INCLUDE_ROOT}/sys/stat.h || true
+.else
+_WITH_UTIMENS= 0
+.endif
.if ${_WITH_UTIMENS} == 0
SYSINCS+= stat.h
SRCS+= futimens.c utimensat.c
.endif
-_WITH_EXPLICIT_BZERO!= grep -c explicit_bzero ${HOST_INCLUDE_ROOT}/strings.h || true
+_WITH_EXPLICIT_BZERO!= cat ${HOST_INCLUDE_ROOT}/strings.h ${HOST_INCLUDE_ROOT}/string.h | grep -c explicit_bzero || true
.if ${_WITH_EXPLICIT_BZERO} == 0
# .PATH: ${SRCTOP}/sys/libkern
# Adding sys/libkern to .PATH breaks building the cross-build compat library
@@ -121,7 +142,13 @@ CHACHA20INCSDIR= ${INCLUDEDIR}/crypto/chacha20
CHACHA20INCS+= ${SRCTOP}/sys/crypto/chacha20/_chacha.h \
${SRCTOP}/sys/crypto/chacha20/chacha.h
+.if ${MACHINE} == "host"
+_host_arch= ${_HOST_ARCH}
+.elif ${MACHINE} == "host32"
+_host_arch= ${_HOST_ARCH32}
+.else
_host_arch=${MACHINE}
+.endif
.if ${_host_arch} == "x86_64"
# bmake on Linux/mac often prints that instead of amd64
_host_arch=amd64
@@ -150,9 +177,18 @@ INCS+= ${SRCTOP}/include/nlist.h
SYSINCS+= ${SRCTOP}/sys/sys/imgact_aout.h
SYSINCS+= ${SRCTOP}/sys/sys/nlist_aout.h
+# macOS's bitstring lacks FreeBSD-specific additions used by makefs's ZFS code
+# and Linux doesn't have it at all. Older FreeBSD versions lack recent
+# additions.
+INCS+= ${SRCTOP}/include/bitstring.h
+SYSINCS+= ${SRCTOP}/sys/sys/bitstring.h
.if ${.MAKE.OS} != "FreeBSD"
.PATH: ${.CURDIR}/cross-build
+
+# Needed by our sys/types.h wrapper
+SYSINCS+= ${SRCTOP}/sys/sys/bitcount.h
+
# dbopen() behaves differently on Linux and FreeBSD so we ensure that we
# bootstrap the FreeBSD db code. The cross-build headers #define dbopen() to
# __freebsd_dbopen() so that we don't ever use the host version
@@ -178,18 +214,40 @@ SRCS+= strtonum.c merge.c heapsort.c reallocf.c
SRCS+= rpmatch.c
.if ${.MAKE.OS} == "Linux"
-# On Linux, glibc does not provide strlcpy,strlcat or strmode.
+# On Linux, glibc does not provide strmode. It only provides strlcpy
+# and strlcat from glibc 2.38.
.PATH: ${LIBC_SRCTOP}/string
-SRCS+= strlcpy.c strlcat.c strmode.c
+SRCS+= strmode.c
+# Assume if strlcpy exists so does strlcat
+_WITH_EXPLICIT_STRLCPY!= cat ${HOST_INCLUDE_ROOT}/strings.h ${HOST_INCLUDE_ROOT}/string.h | grep -c strlcpy || true
+.if ${_WITH_EXPLICIT_STRLCPY} == 0
+SRCS+= strlcpy.c strlcat.c
+.endif
+# On Linux, glibc provides ffs* but not fls*
+SRCS+= fls.c flsl.c flsll.c
# Compile the fgetln/fgetwln/closefrom fallback code from libbsd:
SRCS+= fgetln_fallback.c fgetwln_fallback.c closefrom.c
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
-.endif
+# 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
+SYSINCS+= ${SRCTOP}/sys/sys/linker_set.h
+
+.endif # ${MAKE.OS} == "Linux"
+
+.if ${.MAKE.OS} == "Darwin"
+# Standalone implementation of secure_getenv(), not available on MacOS.
+SRCS+= secure_getenv.c
+.endif # ${MAKE.OS} == "Darwin"
+
# Provide the same arc4random implementation on Linux/macOS
CFLAGS.arc4random.c+= -I${SRCTOP}/sys/crypto/chacha20 -D__isthreaded=1
SRCS+= arc4random.c arc4random_uniform.c
@@ -212,11 +270,62 @@ subr_capability.c: ${SRCTOP}/sys/kern/subr_capability.c
cp ${.ALLSRC} ${.TARGET}
SRCS+= subr_capability.c
CLEANFILES+= subr_capability.c
-.endif
+
+# 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
@@ -239,8 +348,9 @@ 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/dnv.h ${SRCTOP}/sys/sys/nv_namespace.h
# Needed when bootstrapping ldd (since it uses DF_1_PIE)
SYSINCS+= ${SRCTOP}/sys/sys/elf32.h
@@ -264,6 +374,14 @@ SYSINCS+= ${SRCTOP}/sys/sys/fnv_hash.h
INCS+= ${SRCTOP}/include/elf.h
SYSINCS+= ${SRCTOP}/sys/sys/elf.h
SYSINCS+= ${SRCTOP}/sys/sys/ctf.h
+# for kbdcontrol:
+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.
@@ -286,28 +404,55 @@ _host_tools_to_symlink= basename bzip2 bunzip2 chmod chown cmp comm cp date dd \
_make_abs!= which "${MAKE}"
_host_abs_tools_to_symlink= ${_make_abs}:make ${_make_abs}:bmake
+_LINK_HOST_TOOL= ln -sfn
+
.if ${.MAKE.OS} == "FreeBSD"
# When building on FreeBSD we always copy the host tools instead of linking
# into WORLDTMP to avoid issues with incompatible libraries (see r364030).
# Note: we could create links if we don't intend to update the current machine.
-_COPY_HOST_TOOL=cp -pf
+_COPY_HOST_TOOL= cp -pf
.else
# However, this is not necessary on Linux/macOS. Additionally, copying the host
# tools to another directory with cp -p results in freezes on macOS Big Sur for
# some unknown reason. It can also break building inside docker containers if
# there are ACLs on shared volumes.
-_COPY_HOST_TOOL=ln -sfn
-_make_abs!= which "${MAKE}"
-_host_abs_tools_to_symlink+= ${_make_abs}:make ${_make_abs}:bmake
+_COPY_HOST_TOOL= ${_LINK_HOST_TOOL}
+
.if ${.MAKE.OS} == "Darwin"
# /usr/bin/cpp may invoke xcrun:
-_host_tools_to_symlink+=xcrun
+_host_tools_to_symlink+= xcrun
.endif # ${.MAKE.OS} == "Darwin"
-# On Ubuntu /bin/sh is dash which is totally useless. Let's just link bash
-# as the build sh since that will work fine.
+
+# On Ubuntu /bin/sh is dash which is totally useless, and the same for modern
+# macOS. Let's just link bash as the build sh since that will work fine.
_host_abs_tools_to_symlink+= /bin/bash:sh
-_host_tools_to_symlink:=${_host_tools_to_symlink:Nsh}
+_host_tools_to_symlink:= ${_host_tools_to_symlink:Nsh}
+.endif
+
+# We also need to symlink any non-absolute toolchain commands. Clang finds its
+# resource directory relative to itself, so CC/CXX/CPP cannot be copied, and
+# there should be no concerns about installing over the current system since we
+# don't use the toolchain during install, so that's not an issue. However,
+# before Clang 13 there was no symlink detection for FreeBSD so that was broken
+# in the same way as copying (https://reviews.llvm.org/D103346), thus create a
+# wrapper script for each to work around this and behave like a symlink.
+# Remove this hack and just use a symlink once Clang 13 can be assumed.
+# For consistency, we use the same strategy for LD.
+.include <bsd.compiler.mk>
+.if ${.MAKE.OS} == "FreeBSD" && ${COMPILER_TYPE} == "clang" && \
+ ${COMPILER_VERSION} < 130000
+_WRAP_HOST_TOOL= sh -c "printf '\#!/bin/sh\nexec \"\%s\" \"\$$@\"\n' \"\$$0\" > \"\$$1\" && chmod +x \"\$$1\""
+.else
+_WRAP_HOST_TOOL= ${_LINK_HOST_TOOL}
.endif
+.for var in CC CXX CPP LD
+.for X in $${_empty_var_} X
+.if !empty(${X}${var}) && !${${X}${var}:[1]:M/*} && \
+ !${_toolchain_tools_to_symlink:U:M${${X}${var}:[1]}}
+_toolchain_tools_to_symlink+= ${${X}${var}:[1]}
+.endif
+.endfor
+.endfor
host-symlinks:
@echo "Linking host tools into ${DESTDIR}/bin"
@@ -333,15 +478,24 @@ host-symlinks:
rm -f ${DESTDIR}/usr/libexec/flua
${_COPY_HOST_TOOL} /usr/libexec/flua ${DESTDIR}/usr/libexec/flua
.endif
+.for _tool in ${_toolchain_tools_to_symlink}
+ @export PATH=$${PATH}:/usr/local/bin; \
+ source_path=`which ${_tool} || echo /dev/null/no/such`; \
+ if [ ! -e "$${source_path}" ] ; then \
+ echo "Cannot find host tool '${_tool}' in PATH ($$PATH)." >&2; false; \
+ fi; \
+ rm -f "${DESTDIR}/bin/${_tool}"; \
+ ${_WRAP_HOST_TOOL} "$${source_path}" "${DESTDIR}/bin/${_tool}"
+.endfor
# Create all the directories that are needed during the legacy, bootstrap-tools
# and cross-tools stages. We do this here using mkdir since mtree may not exist
# yet (this happens if we are crossbuilding from Linux/Mac).
INSTALLDIR_LIST= \
bin \
- lib/casper \
lib/geom \
usr/include/casper \
+ usr/include/openssl \
usr/include/private/ucl \
usr/include/private/zstd \
usr/lib \
diff --git a/tools/build/Makefile.depend b/tools/build/Makefile.depend
index f80275d86ab1..11aba52f82cf 100644
--- a/tools/build/Makefile.depend
+++ b/tools/build/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
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 46c65d87e61a..dcafd1030c91 100755
--- a/tools/build/beinstall.sh
+++ b/tools/build/beinstall.sh
@@ -24,7 +24,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
##
# Install a boot environment using the current FreeBSD source tree.
@@ -46,13 +45,10 @@
BE_UTILITY="${BE_UTILITY:-"bectl"}"
# If not empty, 'pkg upgrade' will be skipped.
NO_PKG_UPGRADE="${NO_PKG_UPGRADE:-""}"
-# Config updater - 'etcupdate' and 'mergemaster' are supported. Set to an
-# empty string to skip.
+# 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"}"
-# Flags for mergemaster if used.
-MERGEMASTER_FLAGS="${MERGEMASTER_FLAGS:-"-iFU"}"
+ETCUPDATE_FLAGS="${ETCUPDATE_FLAGS:-"-BF"}"
########################################################################
@@ -123,14 +119,6 @@ create_be_dirs() {
return 0
}
-update_mergemaster_pre() {
- ${MERGEMASTER_CMD} -p -m ${srcdir} -D ${BE_MNTPT} -t ${BE_MM_ROOT} ${MERGEMASTER_FLAGS}
-}
-
-update_mergemaster() {
- ${MERGEMASTER_CMD} -m ${srcdir} -D ${BE_MNTPT} -t ${BE_MM_ROOT} ${MERGEMASTER_FLAGS}
-}
-
update_etcupdate_pre() {
${ETCUPDATE_CMD} -p -s ${srcdir} -D ${BE_MNTPT} ${ETCUPDATE_FLAGS} || return $?
${ETCUPDATE_CMD} resolve -D ${BE_MNTPT} || return $?
@@ -177,11 +165,10 @@ objdir=$(make -V .OBJDIR 2>/dev/null)
## Constants
ETCUPDATE_CMD="${srcdir}/usr.sbin/etcupdate/etcupdate.sh"
-MERGEMASTER_CMD="${srcdir}/usr.sbin/mergemaster/mergemaster.sh"
# May be a worktree, in which case .git is a file, not a directory.
if [ -e .git ] ; then
- commit_time=$(git show --format='%ct' 2>/dev/null | head -1)
+ commit_time=$(git show -s --format='%ct' 2>/dev/null)
[ $? -ne 0 ] && errx "Can't lookup git commit timestamp"
commit_ts=$(date -r ${commit_time} '+%Y%m%d.%H%M%S')
elif [ -d .svn ] ; then
@@ -207,7 +194,6 @@ BE_TMP=$(mktemp -d /tmp/beinstall.XXXXXX)
[ $? -ne 0 -o ! -d ${BE_TMP} ] && errx "Unable to create mountpoint"
[ -z "$NO_CLEANUP_BE" ] && cleanup_commands="rmdir_be ${cleanup_commands}"
BE_MNTPT=${BE_TMP}/mnt
-BE_MM_ROOT=${BE_TMP}/mergemaster # mergemaster will create
mkdir -p ${BE_MNTPT}
${BE_UTILITY} create ${BENAME} >/dev/null || errx "Unable to create BE ${BENAME}"
diff --git a/tools/build/bootstrap-m4/Makefile b/tools/build/bootstrap-m4/Makefile
index d65dece3fd15..c12c82455958 100644
--- a/tools/build/bootstrap-m4/Makefile
+++ b/tools/build/bootstrap-m4/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
# 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/bootstrap-m4/inittokenizer.c b/tools/build/bootstrap-m4/inittokenizer.c
index a014012ad756..f64eddaf953b 100644
--- a/tools/build/bootstrap-m4/inittokenizer.c
+++ b/tools/build/bootstrap-m4/inittokenizer.c
@@ -482,8 +482,6 @@ char *yytext;
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#include "parser.h"
#include <assert.h>
diff --git a/tools/build/check-links.sh b/tools/build/check-links.sh
index 7dc96fa5f082..a4d18e00f5f3 100755
--- a/tools/build/check-links.sh
+++ b/tools/build/check-links.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
libkey() {
libkey="lib_symbols_$1"
diff --git a/tools/build/checkstyle9.pl b/tools/build/checkstyle9.pl
new file mode 100755
index 000000000000..b40c9810bc93
--- /dev/null
+++ b/tools/build/checkstyle9.pl
@@ -0,0 +1,2677 @@
+#!/usr/bin/env perl
+# (c) 2001, Dave Jones. (the file handling bit)
+# (c) 2005, Joel Schopp <jschopp@austin.ibm.com> (the ugly bit)
+# (c) 2007,2008, Andy Whitcroft <apw@uk.ibm.com> (new conditions, test suite)
+# (c) 2008-2010 Andy Whitcroft <apw@canonical.com>
+# Licensed under the terms of the GNU GPL License version 2
+
+use strict;
+use warnings;
+use Term::ANSIColor qw(:constants);
+
+my $P = $0;
+$P =~ s@.*/@@g;
+
+our $SrcFile = qr{\.(?:h|c|cpp|hpp|hh|cc|S|sh)$};
+
+my $V = '0.31';
+
+use Getopt::Long qw(:config no_auto_abbrev);
+
+my $quiet = 0;
+my $tree = 1;
+my $chk_signoff = 1;
+my $chk_patch = undef;
+my $chk_branch = undef;
+my $tst_only;
+my $emacs = 0;
+my $github = 0;
+my $terse = 0;
+my $file = undef;
+my $color = "auto";
+my $no_warnings = 0;
+my $summary = 1;
+my $mailback = 0;
+my $summary_file = 0;
+my $root;
+my %debug;
+my $help = 0;
+
+sub help {
+ my ($exitcode) = @_;
+
+ print << "EOM";
+Usage:
+
+ $P [OPTION]... [FILE]...
+ $P [OPTION]... [GIT-REV-LIST]
+
+Version: $V
+
+Options:
+ -q, --quiet quiet
+ --patch treat FILE as patchfile
+ --branch treat args as GIT revision list
+ --emacs emacs compile window format
+ --terse one line per report
+ -f, --file treat FILE as regular source file
+ --strict fail if only warnings are found
+ --no-summary suppress the per-file summary
+ --mailback only produce a report in case of warnings/errors
+ --summary-file include the filename in summary
+ --debug KEY=[0|1] turn on/off debugging of KEY, where KEY is one of
+ 'values', 'possible', 'type', and 'attr' (default
+ is all off)
+ --test-only=WORD report only warnings/errors containing WORD
+ literally
+ --color[=WHEN] Use colors 'always', 'never', or only when output
+ is a terminal ('auto'). Default is 'auto'.
+ -h, --help, --version display this help and exit
+
+When FILE is - read standard input.
+EOM
+
+ exit($exitcode);
+}
+
+# Use at your own risk
+print "\n", MAGENTA, "WARNING:", RESET, " This code is highly experimental ... likely isn't a great style(9) match yet\n\n";
+
+# Perl's Getopt::Long allows options to take optional arguments after a space.
+# Prevent --color by itself from consuming other arguments
+foreach (@ARGV) {
+ if ($_ eq "--color" || $_ eq "-color") {
+ $_ = "--color=$color";
+ }
+}
+
+GetOptions(
+ 'q|quiet+' => \$quiet,
+ 'tree!' => \$tree,
+ 'signoff!' => \$chk_signoff,
+ 'patch!' => \$chk_patch,
+ 'branch!' => \$chk_branch,
+ 'emacs!' => \$emacs,
+ 'github!' => \$github,
+ 'terse!' => \$terse,
+ 'f|file!' => \$file,
+ 'strict!' => \$no_warnings,
+ 'root=s' => \$root,
+ 'summary!' => \$summary,
+ 'mailback!' => \$mailback,
+ 'summary-file!' => \$summary_file,
+
+ 'debug=s' => \%debug,
+ 'test-only=s' => \$tst_only,
+ 'color=s' => \$color,
+ 'no-color' => sub { $color = 'never'; },
+ 'h|help' => \$help,
+ 'version' => \$help
+) or help(1);
+
+help(0) if ($help);
+
+my $exit = 0;
+
+if ($#ARGV < 0) {
+ print "$P: no input files\n";
+ exit(1);
+}
+
+if (!defined $chk_branch && !defined $chk_patch && !defined $file) {
+ $chk_branch = $ARGV[0] =~ /.\.\./ ? 1 : 0;
+ $file = $ARGV[0] =~ /$SrcFile/ ? 1 : 0;
+ $chk_patch = $chk_branch || $file ? 0 : 1;
+} elsif (!defined $chk_branch && !defined $chk_patch) {
+ if ($file) {
+ $chk_branch = $chk_patch = 0;
+ } else {
+ $chk_branch = $ARGV[0] =~ /.\.\./ ? 1 : 0;
+ $chk_patch = $chk_branch ? 0 : 1;
+ }
+} elsif (!defined $chk_branch && !defined $file) {
+ if ($chk_patch) {
+ $chk_branch = $file = 0;
+ } else {
+ $chk_branch = $ARGV[0] =~ /.\.\./ ? 1 : 0;
+ $file = $chk_branch ? 0 : 1;
+ }
+} elsif (!defined $chk_patch && !defined $file) {
+ if ($chk_branch) {
+ $chk_patch = $file = 0;
+ } else {
+ $file = $ARGV[0] =~ /$SrcFile/ ? 1 : 0;
+ $chk_patch = $file ? 0 : 1;
+ }
+} elsif (!defined $chk_branch) {
+ $chk_branch = $chk_patch || $file ? 0 : 1;
+} elsif (!defined $chk_patch) {
+ $chk_patch = $chk_branch || $file ? 0 : 1;
+} elsif (!defined $file) {
+ $file = $chk_patch || $chk_branch ? 0 : 1;
+}
+
+if (($chk_patch && $chk_branch) ||
+ ($chk_patch && $file) ||
+ ($chk_branch && $file)) {
+ die "Only one of --file, --branch, --patch is permitted\n";
+}
+if (!$chk_patch && !$chk_branch && !$file) {
+ die "One of --file, --branch, --patch is required\n";
+}
+
+if ($color =~ /^always$/i) {
+ $color = 1;
+} elsif ($color =~ /^never$/i) {
+ $color = 0;
+} elsif ($color =~ /^auto$/i) {
+ $color = (-t STDOUT);
+} else {
+ die "Invalid color mode: $color\n";
+}
+
+my $dbg_values = 0;
+my $dbg_possible = 0;
+my $dbg_adv_dcs = 0;
+my $dbg_adv_checking = 0;
+my $dbg_adv_apw = 0;
+for my $key (keys %debug) {
+ ## no critic
+ eval "\${dbg_$key} = '$debug{$key}';";
+ die "$@" if ($@);
+}
+
+my $rpt_cleaners = 0;
+
+if ($terse) {
+ $emacs = 1;
+ $quiet++;
+}
+
+my $emitted_corrupt = 0;
+
+our $Ident = qr{
+ [A-Za-z_][A-Za-z\d_]*
+ (?:\s*\#\#\s*[A-Za-z_][A-Za-z\d_]*)*
+ }x;
+our $Storage = qr{extern|static|asmlinkage};
+our $Sparse = qr{
+ __force
+ }x;
+
+# Notes to $Attribute:
+our $Attribute = qr{
+ const|
+ _*restrict|
+ volatile|
+ QEMU_NORETURN|
+ QEMU_WARN_UNUSED_RESULT|
+ QEMU_SENTINEL|
+ QEMU_PACKED|
+ GCC_FMT_ATTR
+ }x;
+our $Modifier;
+our $Inline = qr{inline};
+our $Member = qr{->$Ident|\.$Ident|\[[^]]*\]};
+our $Lval = qr{$Ident(?:$Member)*};
+
+our $Constant = qr{(?:[0-9]+|0x[0-9a-fA-F]+)[UL]*};
+our $Assignment = qr{(?:\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=)};
+our $Compare = qr{<=|>=|==|!=|<|>};
+our $Operators = qr{
+ <=|>=|==|!=|
+ =>|->|<<|>>|<|>|!|~|
+ &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%
+ }x;
+
+our $NonptrType;
+our $Type;
+our $Declare;
+
+our $NON_ASCII_UTF8 = qr{
+ [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
+ | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
+ | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
+ | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
+ | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
+ | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
+ | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
+}x;
+
+our $UTF8 = qr{
+ [\x09\x0A\x0D\x20-\x7E] # ASCII
+ | $NON_ASCII_UTF8
+}x;
+
+# some readers default to ISO-8859-1 when showing email source. detect
+# when UTF-8 is incorrectly interpreted as ISO-8859-1 and reencoded back.
+# False positives are possible but very unlikely.
+our $UTF8_MOJIBAKE = qr{
+ \xC3[\x82-\x9F] \xC2[\x80-\xBF] # c2-df 80-bf
+ | \xC3\xA0 \xC2[\xA0-\xBF] \xC2[\x80-\xBF] # e0 a0-bf 80-bf
+ | \xC3[\xA1-\xAC\xAE\xAF] (?: \xC2[\x80-\xBF]){2} # e1-ec/ee/ef 80-bf 80-bf
+ | \xC3\xAD \xC2[\x80-\x9F] \xC2[\x80-\xBF] # ed 80-9f 80-bf
+ | \xC3\xB0 \xC2[\x90-\xBF] (?: \xC2[\x80-\xBF]){2} # f0 90-bf 80-bf 80-bf
+ | \xC3[\xB1-\xB3] (?: \xC2[\x80-\xBF]){3} # f1-f3 80-bf 80-bf 80-bf
+ | \xC3\xB4 \xC2[\x80-\x8F] (?: \xC2[\x80-\xBF]){2} # f4 80-b8 80-bf 80-bf
+}x;
+
+# There are still some false positives, but this catches most
+# common cases.
+our $typeTypedefs = qr{(?x:
+ (?![KMGTPE]iB) # IEC binary prefix (do not match)
+ [A-Z][A-Z\d_]*[a-z][A-Za-z\d_]* # camelcase
+ | [A-Z][A-Z\d_]*AIOCB # all uppercase
+ | [A-Z][A-Z\d_]*CPU # all uppercase
+ | QEMUBH # all uppercase
+)};
+
+our @typeList = (
+ qr{void},
+ qr{(?:unsigned\s+)?char},
+ qr{(?:unsigned\s+)?short},
+ qr{(?:unsigned\s+)?int},
+ qr{(?:unsigned\s+)?long},
+ qr{(?:unsigned\s+)?long\s+int},
+ qr{(?:unsigned\s+)?long\s+long},
+ qr{(?:unsigned\s+)?long\s+long\s+int},
+ qr{unsigned},
+ qr{float},
+ qr{double},
+ qr{bool},
+ qr{struct\s+$Ident},
+ qr{union\s+$Ident},
+ qr{enum\s+$Ident},
+ qr{${Ident}_t},
+ qr{${Ident}_handler},
+ qr{${Ident}_handler_fn},
+ qr{target_(?:u)?long},
+ qr{hwaddr},
+);
+
+# This can be modified by sub possible. Since it can be empty, be careful
+# about regexes that always match, because they can cause infinite loops.
+our @modifierList = (
+);
+
+sub build_types {
+ my $all = "(?x: \n" . join("|\n ", @typeList) . "\n)";
+ if (@modifierList > 0) {
+ my $mods = "(?x: \n" . join("|\n ", @modifierList) . "\n)";
+ $Modifier = qr{(?:$Attribute|$Sparse|$mods)};
+ } else {
+ $Modifier = qr{(?:$Attribute|$Sparse)};
+ }
+ $NonptrType = qr{
+ (?:$Modifier\s+|const\s+)*
+ (?:
+ (?:typeof|__typeof__)\s*\(\s*\**\s*$Ident\s*\)|
+ (?:$typeTypedefs\b)|
+ (?:${all}\b)
+ )
+ (?:\s+$Modifier|\s+const)*
+ }x;
+ $Type = qr{
+ $NonptrType
+ (?:[\s\*]+\s*const|[\s\*]+|(?:\s*\[\s*\])+)?
+ (?:\s+$Inline|\s+$Modifier)*
+ }x;
+ $Declare = qr{(?:$Storage\s+)?$Type};
+}
+build_types();
+
+$chk_signoff = 0 if ($file);
+
+my @rawlines = ();
+my @lines = ();
+my $vname;
+if ($chk_branch) {
+ my @patches;
+ my %git_commits = ();
+ my $HASH;
+ open($HASH, "-|", "git", "log", "--reverse", "--no-merges", "--format=%H %s", $ARGV[0]) ||
+ die "$P: git log --reverse --no-merges --format='%H %s' $ARGV[0] failed - $!\n";
+
+ for my $line (<$HASH>) {
+ $line =~ /^([0-9a-fA-F]{40,40}) (.*)$/;
+ next if (!defined($1) || !defined($2));
+ my $sha1 = $1;
+ my $subject = $2;
+ push(@patches, $sha1);
+ $git_commits{$sha1} = $subject;
+ }
+
+ close $HASH;
+
+ die "$P: no revisions returned for revlist '$ARGV[0]'\n"
+ unless @patches;
+
+ my $i = 1;
+ my $num_patches = @patches;
+ for my $hash (@patches) {
+ my $FILE;
+ open($FILE, '-|', "git", "show", "--patch-with-stat", $hash) ||
+ die "$P: git show $hash - $!\n";
+ while (<$FILE>) {
+ chomp;
+ push(@rawlines, $_);
+ }
+ close($FILE);
+ $vname = substr($hash, 0, 12) . ' (' . $git_commits{$hash} . ')';
+ if ($num_patches > 1 && $quiet == 0) {
+ my $prefix = "$i/$num_patches";
+ $prefix = BLUE . BOLD . $prefix . RESET if $color;
+ print "$prefix Checking commit $vname\n";
+ $vname = "Patch $i/$num_patches";
+ } else {
+ $vname = "Commit " . $vname;
+ }
+ if (!process($hash)) {
+ $exit = 1;
+ print "\n" if ($num_patches > 1 && $quiet == 0);
+ }
+ @rawlines = ();
+ @lines = ();
+ $i++;
+ }
+} else {
+ for my $filename (@ARGV) {
+ my $FILE;
+ if ($file) {
+ open($FILE, '-|', "diff -u /dev/null $filename") ||
+ die "$P: $filename: diff failed - $!\n";
+ } elsif ($filename eq '-') {
+ open($FILE, '<&STDIN');
+ } else {
+ open($FILE, '<', "$filename") ||
+ die "$P: $filename: open failed - $!\n";
+ }
+ if ($filename eq '-') {
+ $vname = 'Your patch';
+ } else {
+ $vname = $filename;
+ }
+ print "Checking $filename...\n" if @ARGV > 1 && $quiet == 0;
+ while (<$FILE>) {
+ chomp;
+ push(@rawlines, $_);
+ }
+ close($FILE);
+ if (!process($filename)) {
+ $exit = 1;
+ }
+ @rawlines = ();
+ @lines = ();
+ }
+}
+
+exit($exit);
+
+sub top_of_kernel_tree {
+ my ($root) = @_;
+
+ my @tree_check = (
+ "Makefile.inc1", "README.md", "sys",
+ "usr.sbin"
+ );
+
+ foreach my $check (@tree_check) {
+ if (! -e $root . '/' . $check) {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+sub expand_tabs {
+ my ($str) = @_;
+
+ my $res = '';
+ my $n = 0;
+ for my $c (split(//, $str)) {
+ if ($c eq "\t") {
+ $res .= ' ';
+ $n++;
+ for (; ($n % 8) != 0; $n++) {
+ $res .= ' ';
+ }
+ next;
+ }
+ $res .= $c;
+ $n++;
+ }
+
+ return $res;
+}
+sub copy_spacing {
+ (my $res = shift) =~ tr/\t/ /c;
+ return $res;
+}
+
+sub line_stats {
+ my ($line) = @_;
+
+ # Drop the diff line leader and expand tabs
+ $line =~ s/^.//;
+ $line = expand_tabs($line);
+
+ # Pick the indent from the front of the line.
+ my ($white) = ($line =~ /^(\s*)/);
+
+ return (length($line), length($white));
+}
+
+my $sanitise_quote = '';
+
+sub sanitise_line_reset {
+ my ($in_comment) = @_;
+
+ if ($in_comment) {
+ $sanitise_quote = '*/';
+ } else {
+ $sanitise_quote = '';
+ }
+}
+sub sanitise_line {
+ my ($line) = @_;
+
+ my $res = '';
+ my $l = '';
+
+ my $qlen = 0;
+ my $off = 0;
+ my $c;
+
+ # Always copy over the diff marker.
+ $res = substr($line, 0, 1);
+
+ for ($off = 1; $off < length($line); $off++) {
+ $c = substr($line, $off, 1);
+
+ # Comments we are wacking completely including the begin
+ # and end, all to $;.
+ if ($sanitise_quote eq '' && substr($line, $off, 2) eq '/*') {
+ $sanitise_quote = '*/';
+
+ substr($res, $off, 2, "$;$;");
+ $off++;
+ next;
+ }
+ if ($sanitise_quote eq '*/' && substr($line, $off, 2) eq '*/') {
+ $sanitise_quote = '';
+ substr($res, $off, 2, "$;$;");
+ $off++;
+ next;
+ }
+ if ($sanitise_quote eq '' && substr($line, $off, 2) eq '//') {
+ $sanitise_quote = '//';
+
+ substr($res, $off, 2, $sanitise_quote);
+ $off++;
+ next;
+ }
+
+ # A \ in a string means ignore the next character.
+ if (($sanitise_quote eq "'" || $sanitise_quote eq '"') &&
+ $c eq "\\") {
+ substr($res, $off, 2, 'XX');
+ $off++;
+ next;
+ }
+ # Regular quotes.
+ if ($c eq "'" || $c eq '"') {
+ if ($sanitise_quote eq '') {
+ $sanitise_quote = $c;
+
+ substr($res, $off, 1, $c);
+ next;
+ } elsif ($sanitise_quote eq $c) {
+ $sanitise_quote = '';
+ }
+ }
+
+ #print "c<$c> SQ<$sanitise_quote>\n";
+ if ($off != 0 && $sanitise_quote eq '*/' && $c ne "\t") {
+ substr($res, $off, 1, $;);
+ } elsif ($off != 0 && $sanitise_quote eq '//' && $c ne "\t") {
+ substr($res, $off, 1, $;);
+ } elsif ($off != 0 && $sanitise_quote && $c ne "\t") {
+ substr($res, $off, 1, 'X');
+ } else {
+ substr($res, $off, 1, $c);
+ }
+ }
+
+ if ($sanitise_quote eq '//') {
+ $sanitise_quote = '';
+ }
+
+ # The pathname on a #include may be surrounded by '<' and '>'.
+ if ($res =~ /^.\s*\#\s*include\s+\<(.*)\>/) {
+ my $clean = 'X' x length($1);
+ $res =~ s@\<.*\>@<$clean>@;
+
+ # The whole of a #error is a string.
+ } elsif ($res =~ /^.\s*\#\s*(?:error|warning)\s+(.*)\b/) {
+ my $clean = 'X' x length($1);
+ $res =~ s@(\#\s*(?:error|warning)\s+).*@$1$clean@;
+ }
+
+ return $res;
+}
+
+sub ctx_statement_block {
+ my ($linenr, $remain, $off) = @_;
+ my $line = $linenr - 1;
+ my $blk = '';
+ my $soff = $off;
+ my $coff = $off - 1;
+ my $coff_set = 0;
+
+ my $loff = 0;
+
+ my $type = '';
+ my $level = 0;
+ my @stack = ();
+ my $p;
+ my $c;
+ my $len = 0;
+
+ my $remainder;
+ while (1) {
+ @stack = (['', 0]) if ($#stack == -1);
+
+ #warn "CSB: blk<$blk> remain<$remain>\n";
+ # If we are about to drop off the end, pull in more
+ # context.
+ if ($off >= $len) {
+ for (; $remain > 0; $line++) {
+ last if (!defined $lines[$line]);
+ next if ($lines[$line] =~ /^-/);
+ $remain--;
+ $loff = $len;
+ $blk .= $lines[$line] . "\n";
+ $len = length($blk);
+ $line++;
+ last;
+ }
+ # Bail if there is no further context.
+ #warn "CSB: blk<$blk> off<$off> len<$len>\n";
+ if ($off >= $len) {
+ last;
+ }
+ }
+ $p = $c;
+ $c = substr($blk, $off, 1);
+ $remainder = substr($blk, $off);
+
+ #warn "CSB: c<$c> type<$type> level<$level> remainder<$remainder> coff_set<$coff_set>\n";
+
+ # Handle nested #if/#else.
+ if ($remainder =~ /^#\s*(?:ifndef|ifdef|if)\s/) {
+ push(@stack, [ $type, $level ]);
+ } elsif ($remainder =~ /^#\s*(?:else|elif)\b/) {
+ ($type, $level) = @{$stack[$#stack - 1]};
+ } elsif ($remainder =~ /^#\s*endif\b/) {
+ ($type, $level) = @{pop(@stack)};
+ }
+
+ # Statement ends at the ';' or a close '}' at the
+ # outermost level.
+ if ($level == 0 && $c eq ';') {
+ last;
+ }
+
+ # An else is really a conditional as long as its not else if
+ if ($level == 0 && $coff_set == 0 &&
+ (!defined($p) || $p =~ /(?:\s|\}|\+)/) &&
+ $remainder =~ /^(else)(?:\s|{)/ &&
+ $remainder !~ /^else\s+if\b/) {
+ $coff = $off + length($1) - 1;
+ $coff_set = 1;
+ #warn "CSB: mark coff<$coff> soff<$soff> 1<$1>\n";
+ #warn "[" . substr($blk, $soff, $coff - $soff + 1) . "]\n";
+ }
+
+ if (($type eq '' || $type eq '(') && $c eq '(') {
+ $level++;
+ $type = '(';
+ }
+ if ($type eq '(' && $c eq ')') {
+ $level--;
+ $type = ($level != 0)? '(' : '';
+
+ if ($level == 0 && $coff < $soff) {
+ $coff = $off;
+ $coff_set = 1;
+ #warn "CSB: mark coff<$coff>\n";
+ }
+ }
+ if (($type eq '' || $type eq '{') && $c eq '{') {
+ $level++;
+ $type = '{';
+ }
+ if ($type eq '{' && $c eq '}') {
+ $level--;
+ $type = ($level != 0)? '{' : '';
+
+ if ($level == 0) {
+ if (substr($blk, $off + 1, 1) eq ';') {
+ $off++;
+ }
+ last;
+ }
+ }
+ $off++;
+ }
+ # We are truly at the end, so shuffle to the next line.
+ if ($off == $len) {
+ $loff = $len + 1;
+ $line++;
+ $remain--;
+ }
+
+ my $statement = substr($blk, $soff, $off - $soff + 1);
+ my $condition = substr($blk, $soff, $coff - $soff + 1);
+
+ #warn "STATEMENT<$statement>\n";
+ #warn "CONDITION<$condition>\n";
+
+ #print "coff<$coff> soff<$off> loff<$loff>\n";
+
+ return ($statement, $condition,
+ $line, $remain + 1, $off - $loff + 1, $level);
+}
+
+sub statement_lines {
+ my ($stmt) = @_;
+
+ # Strip the diff line prefixes and rip blank lines at start and end.
+ $stmt =~ s/(^|\n)./$1/g;
+ $stmt =~ s/^\s*//;
+ $stmt =~ s/\s*$//;
+
+ my @stmt_lines = ($stmt =~ /\n/g);
+
+ return $#stmt_lines + 2;
+}
+
+sub statement_rawlines {
+ my ($stmt) = @_;
+
+ my @stmt_lines = ($stmt =~ /\n/g);
+
+ return $#stmt_lines + 2;
+}
+
+sub statement_block_size {
+ my ($stmt) = @_;
+
+ $stmt =~ s/(^|\n)./$1/g;
+ $stmt =~ s/^\s*\{//;
+ $stmt =~ s/}\s*$//;
+ $stmt =~ s/^\s*//;
+ $stmt =~ s/\s*$//;
+
+ my @stmt_lines = ($stmt =~ /\n/g);
+ my @stmt_statements = ($stmt =~ /;/g);
+
+ my $stmt_lines = $#stmt_lines + 2;
+ my $stmt_statements = $#stmt_statements + 1;
+
+ if ($stmt_lines > $stmt_statements) {
+ return $stmt_lines;
+ } else {
+ return $stmt_statements;
+ }
+}
+
+sub ctx_statement_full {
+ my ($linenr, $remain, $off) = @_;
+ my ($statement, $condition, $level);
+
+ my (@chunks);
+
+ # Grab the first conditional/block pair.
+ ($statement, $condition, $linenr, $remain, $off, $level) =
+ ctx_statement_block($linenr, $remain, $off);
+ #print "F: c<$condition> s<$statement> remain<$remain>\n";
+ push(@chunks, [ $condition, $statement ]);
+ if (!($remain > 0 && $condition =~ /^\s*(?:\n[+-])?\s*(?:if|else|do)\b/s)) {
+ return ($level, $linenr, @chunks);
+ }
+
+ # Pull in the following conditional/block pairs and see if they
+ # could continue the statement.
+ for (;;) {
+ ($statement, $condition, $linenr, $remain, $off, $level) =
+ ctx_statement_block($linenr, $remain, $off);
+ #print "C: c<$condition> s<$statement> remain<$remain>\n";
+ last if (!($remain > 0 && $condition =~ /^(?:\s*\n[+-])*\s*(?:else|do)\b/s));
+ #print "C: push\n";
+ push(@chunks, [ $condition, $statement ]);
+ }
+
+ return ($level, $linenr, @chunks);
+}
+
+sub ctx_block_get {
+ my ($linenr, $remain, $outer, $open, $close, $off) = @_;
+ my $line;
+ my $start = $linenr - 1;
+ my $blk = '';
+ my @o;
+ my @c;
+ my @res = ();
+
+ my $level = 0;
+ my @stack = ($level);
+ for ($line = $start; $remain > 0; $line++) {
+ next if ($rawlines[$line] =~ /^-/);
+ $remain--;
+
+ $blk .= $rawlines[$line];
+
+ # Handle nested #if/#else.
+ if ($lines[$line] =~ /^.\s*#\s*(?:ifndef|ifdef|if)\s/) {
+ push(@stack, $level);
+ } elsif ($lines[$line] =~ /^.\s*#\s*(?:else|elif)\b/) {
+ $level = $stack[$#stack - 1];
+ } elsif ($lines[$line] =~ /^.\s*#\s*endif\b/) {
+ $level = pop(@stack);
+ }
+
+ foreach my $c (split(//, $lines[$line])) {
+ ##print "C<$c>L<$level><$open$close>O<$off>\n";
+ if ($off > 0) {
+ $off--;
+ next;
+ }
+
+ if ($c eq $close && $level > 0) {
+ $level--;
+ last if ($level == 0);
+ } elsif ($c eq $open) {
+ $level++;
+ }
+ }
+
+ if (!$outer || $level <= 1) {
+ push(@res, $rawlines[$line]);
+ }
+
+ last if ($level == 0);
+ }
+
+ return ($level, @res);
+}
+sub ctx_block_outer {
+ my ($linenr, $remain) = @_;
+
+ my ($level, @r) = ctx_block_get($linenr, $remain, 1, '{', '}', 0);
+ return @r;
+}
+sub ctx_block {
+ my ($linenr, $remain) = @_;
+
+ my ($level, @r) = ctx_block_get($linenr, $remain, 0, '{', '}', 0);
+ return @r;
+}
+sub ctx_statement {
+ my ($linenr, $remain, $off) = @_;
+
+ my ($level, @r) = ctx_block_get($linenr, $remain, 0, '(', ')', $off);
+ return @r;
+}
+sub ctx_block_level {
+ my ($linenr, $remain) = @_;
+
+ return ctx_block_get($linenr, $remain, 0, '{', '}', 0);
+}
+sub ctx_statement_level {
+ my ($linenr, $remain, $off) = @_;
+
+ return ctx_block_get($linenr, $remain, 0, '(', ')', $off);
+}
+
+sub ctx_locate_comment {
+ my ($first_line, $end_line) = @_;
+
+ # Catch a comment on the end of the line itself.
+ my ($current_comment) = ($rawlines[$end_line - 1] =~ m@.*(/\*.*\*/)\s*(?:\\\s*)?$@);
+ return $current_comment if (defined $current_comment);
+
+ # Look through the context and try and figure out if there is a
+ # comment.
+ my $in_comment = 0;
+ $current_comment = '';
+ for (my $linenr = $first_line; $linenr < $end_line; $linenr++) {
+ my $line = $rawlines[$linenr - 1];
+ #warn " $line\n";
+ if ($linenr == $first_line and $line =~ m@^.\s*\*@) {
+ $in_comment = 1;
+ }
+ if ($line =~ m@/\*@) {
+ $in_comment = 1;
+ }
+ if (!$in_comment && $current_comment ne '') {
+ $current_comment = '';
+ }
+ $current_comment .= $line . "\n" if ($in_comment);
+ if ($line =~ m@\*/@) {
+ $in_comment = 0;
+ }
+ }
+
+ chomp($current_comment);
+ return($current_comment);
+}
+sub ctx_has_comment {
+ my ($first_line, $end_line) = @_;
+ my $cmt = ctx_locate_comment($first_line, $end_line);
+
+ ##print "LINE: $rawlines[$end_line - 1 ]\n";
+ ##print "CMMT: $cmt\n";
+
+ return ($cmt ne '');
+}
+
+sub raw_line {
+ my ($linenr, $cnt) = @_;
+
+ my $offset = $linenr - 1;
+ $cnt++;
+
+ my $line;
+ while ($cnt) {
+ $line = $rawlines[$offset++];
+ next if (defined($line) && $line =~ /^-/);
+ $cnt--;
+ }
+
+ return $line;
+}
+
+sub cat_vet {
+ my ($vet) = @_;
+ my ($res, $coded);
+
+ $res = '';
+ while ($vet =~ /([^[:cntrl:]]*)([[:cntrl:]]|$)/g) {
+ $res .= $1;
+ if ($2 ne '') {
+ $coded = sprintf("^%c", unpack('C', $2) + 64);
+ $res .= $coded;
+ }
+ }
+ $res =~ s/$/\$/;
+
+ return $res;
+}
+
+my $av_preprocessor = 0;
+my $av_pending;
+my @av_paren_type;
+my $av_pend_colon;
+
+sub annotate_reset {
+ $av_preprocessor = 0;
+ $av_pending = '_';
+ @av_paren_type = ('E');
+ $av_pend_colon = 'O';
+}
+
+sub annotate_values {
+ my ($stream, $type) = @_;
+
+ my $res;
+ my $var = '_' x length($stream);
+ my $cur = $stream;
+
+ print "$stream\n" if ($dbg_values > 1);
+
+ while (length($cur)) {
+ @av_paren_type = ('E') if ($#av_paren_type < 0);
+ print " <" . join('', @av_paren_type) .
+ "> <$type> <$av_pending>" if ($dbg_values > 1);
+ if ($cur =~ /^(\s+)/o) {
+ print "WS($1)\n" if ($dbg_values > 1);
+ if ($1 =~ /\n/ && $av_preprocessor) {
+ $type = pop(@av_paren_type);
+ $av_preprocessor = 0;
+ }
+
+ } elsif ($cur =~ /^(\(\s*$Type\s*)\)/ && $av_pending eq '_') {
+ print "CAST($1)\n" if ($dbg_values > 1);
+ push(@av_paren_type, $type);
+ $type = 'C';
+
+ } elsif ($cur =~ /^($Type)\s*(?:$Ident|,|\)|\(|\s*$)/) {
+ print "DECLARE($1)\n" if ($dbg_values > 1);
+ $type = 'T';
+
+ } elsif ($cur =~ /^($Modifier)\s*/) {
+ print "MODIFIER($1)\n" if ($dbg_values > 1);
+ $type = 'T';
+
+ } elsif ($cur =~ /^(\#\s*define\s*$Ident)(\(?)/o) {
+ print "DEFINE($1,$2)\n" if ($dbg_values > 1);
+ $av_preprocessor = 1;
+ push(@av_paren_type, $type);
+ if ($2 ne '') {
+ $av_pending = 'N';
+ }
+ $type = 'E';
+
+ } elsif ($cur =~ /^(\#\s*(?:undef\s*$Ident|include\b))/o) {
+ print "UNDEF($1)\n" if ($dbg_values > 1);
+ $av_preprocessor = 1;
+ push(@av_paren_type, $type);
+
+ } elsif ($cur =~ /^(\#\s*(?:ifdef|ifndef|if))/o) {
+ print "PRE_START($1)\n" if ($dbg_values > 1);
+ $av_preprocessor = 1;
+
+ push(@av_paren_type, $type);
+ push(@av_paren_type, $type);
+ $type = 'E';
+
+ } elsif ($cur =~ /^(\#\s*(?:else|elif))/o) {
+ print "PRE_RESTART($1)\n" if ($dbg_values > 1);
+ $av_preprocessor = 1;
+
+ push(@av_paren_type, $av_paren_type[$#av_paren_type]);
+
+ $type = 'E';
+
+ } elsif ($cur =~ /^(\#\s*(?:endif))/o) {
+ print "PRE_END($1)\n" if ($dbg_values > 1);
+
+ $av_preprocessor = 1;
+
+ # Assume all arms of the conditional end as this
+ # one does, and continue as if the #endif was not here.
+ pop(@av_paren_type);
+ push(@av_paren_type, $type);
+ $type = 'E';
+
+ } elsif ($cur =~ /^(\\\n)/o) {
+ print "PRECONT($1)\n" if ($dbg_values > 1);
+
+ } elsif ($cur =~ /^(__attribute__)\s*\(?/o) {
+ print "ATTR($1)\n" if ($dbg_values > 1);
+ $av_pending = $type;
+ $type = 'N';
+
+ } elsif ($cur =~ /^(sizeof)\s*(\()?/o) {
+ print "SIZEOF($1)\n" if ($dbg_values > 1);
+ if (defined $2) {
+ $av_pending = 'V';
+ }
+ $type = 'N';
+
+ } elsif ($cur =~ /^(if|while|for)\b/o) {
+ print "COND($1)\n" if ($dbg_values > 1);
+ $av_pending = 'E';
+ $type = 'N';
+
+ } elsif ($cur =~/^(case)/o) {
+ print "CASE($1)\n" if ($dbg_values > 1);
+ $av_pend_colon = 'C';
+ $type = 'N';
+
+ } elsif ($cur =~/^(return|else|goto|typeof|__typeof__)\b/o) {
+ print "KEYWORD($1)\n" if ($dbg_values > 1);
+ $type = 'N';
+
+ } elsif ($cur =~ /^(\()/o) {
+ print "PAREN('$1')\n" if ($dbg_values > 1);
+ push(@av_paren_type, $av_pending);
+ $av_pending = '_';
+ $type = 'N';
+
+ } elsif ($cur =~ /^(\))/o) {
+ my $new_type = pop(@av_paren_type);
+ if ($new_type ne '_') {
+ $type = $new_type;
+ print "PAREN('$1') -> $type\n"
+ if ($dbg_values > 1);
+ } else {
+ print "PAREN('$1')\n" if ($dbg_values > 1);
+ }
+
+ } elsif ($cur =~ /^($Ident)\s*\(/o) {
+ print "FUNC($1)\n" if ($dbg_values > 1);
+ $type = 'V';
+ $av_pending = 'V';
+
+ } elsif ($cur =~ /^($Ident\s*):(?:\s*\d+\s*(,|=|;))?/) {
+ if (defined $2 && $type eq 'C' || $type eq 'T') {
+ $av_pend_colon = 'B';
+ } elsif ($type eq 'E') {
+ $av_pend_colon = 'L';
+ }
+ print "IDENT_COLON($1,$type>$av_pend_colon)\n" if ($dbg_values > 1);
+ $type = 'V';
+
+ } elsif ($cur =~ /^($Ident|$Constant)/o) {
+ print "IDENT($1)\n" if ($dbg_values > 1);
+ $type = 'V';
+
+ } elsif ($cur =~ /^($Assignment)/o) {
+ print "ASSIGN($1)\n" if ($dbg_values > 1);
+ $type = 'N';
+
+ } elsif ($cur =~/^(;|{|})/) {
+ print "END($1)\n" if ($dbg_values > 1);
+ $type = 'E';
+ $av_pend_colon = 'O';
+
+ } elsif ($cur =~/^(,)/) {
+ print "COMMA($1)\n" if ($dbg_values > 1);
+ $type = 'C';
+
+ } elsif ($cur =~ /^(\?)/o) {
+ print "QUESTION($1)\n" if ($dbg_values > 1);
+ $type = 'N';
+
+ } elsif ($cur =~ /^(:)/o) {
+ print "COLON($1,$av_pend_colon)\n" if ($dbg_values > 1);
+
+ substr($var, length($res), 1, $av_pend_colon);
+ if ($av_pend_colon eq 'C' || $av_pend_colon eq 'L') {
+ $type = 'E';
+ } else {
+ $type = 'N';
+ }
+ $av_pend_colon = 'O';
+
+ } elsif ($cur =~ /^(\[)/o) {
+ print "CLOSE($1)\n" if ($dbg_values > 1);
+ $type = 'N';
+
+ } elsif ($cur =~ /^(-(?![->])|\+(?!\+)|\*|\&\&|\&)/o) {
+ my $variant;
+
+ print "OPV($1)\n" if ($dbg_values > 1);
+ if ($type eq 'V') {
+ $variant = 'B';
+ } else {
+ $variant = 'U';
+ }
+
+ substr($var, length($res), 1, $variant);
+ $type = 'N';
+
+ } elsif ($cur =~ /^($Operators)/o) {
+ print "OP($1)\n" if ($dbg_values > 1);
+ if ($1 ne '++' && $1 ne '--') {
+ $type = 'N';
+ }
+
+ } elsif ($cur =~ /(^.)/o) {
+ print "C($1)\n" if ($dbg_values > 1);
+ }
+ if (defined $1) {
+ $cur = substr($cur, length($1));
+ $res .= $type x length($1);
+ }
+ }
+
+ return ($res, $var);
+}
+
+sub possible {
+ my ($possible, $line) = @_;
+ my $notPermitted = qr{(?:
+ ^(?:
+ $Modifier|
+ $Storage|
+ $Type|
+ DEFINE_\S+
+ )$|
+ ^(?:
+ goto|
+ return|
+ case|
+ else|
+ asm|__asm__|
+ do
+ )(?:\s|$)|
+ ^(?:typedef|struct|enum)\b|
+ ^\#
+ )}x;
+ warn "CHECK<$possible> ($line)\n" if ($dbg_possible > 2);
+ if ($possible !~ $notPermitted) {
+ # Check for modifiers.
+ $possible =~ s/\s*$Storage\s*//g;
+ $possible =~ s/\s*$Sparse\s*//g;
+ if ($possible =~ /^\s*$/) {
+
+ } elsif ($possible =~ /\s/) {
+ $possible =~ s/\s*(?:$Type|\#\#)\s*//g;
+ for my $modifier (split(' ', $possible)) {
+ if ($modifier !~ $notPermitted) {
+ warn "MODIFIER: $modifier ($possible) ($line)\n" if ($dbg_possible);
+ push(@modifierList, $modifier);
+ }
+ }
+
+ } else {
+ warn "POSSIBLE: $possible ($line)\n" if ($dbg_possible);
+ push(@typeList, $possible);
+ }
+ build_types();
+ } else {
+ warn "NOTPOSS: $possible ($line)\n" if ($dbg_possible > 1);
+ }
+}
+
+my $prefix = '';
+
+sub report {
+ my ($level, $msg) = @_;
+ if (defined $tst_only && $msg !~ /\Q$tst_only\E/) {
+ return 0;
+ }
+
+ my $output = '';
+ my $do_color = $color && !$github;
+ $output .= BOLD if $do_color;
+ $output .= "::error " if $github && $level eq 'ERROR';
+ $output .= "::warning " if $github && $level eq 'WARNING';
+ $output .= $prefix;
+ $output .= RED if $do_color && $level eq 'ERROR';
+ $output .= MAGENTA if $do_color && $level eq 'WARNING';
+ $output .= $level . ':' if !$github;
+ $output .= RESET if $do_color;
+ $output .= ' ' if (!$github);
+ $output .= $msg . "\n";
+
+ $output = (split('\n', $output))[0] . "\n" if ($terse);
+
+ push(our @report, $output);
+
+ return 1;
+}
+sub report_dump {
+ our @report;
+}
+sub ERROR {
+ if (report("ERROR", $_[0])) {
+ our $clean = 0;
+ our $cnt_error++;
+ }
+}
+sub WARN {
+ if (report("WARNING", $_[0])) {
+ our $clean = 0;
+ our $cnt_warn++;
+ }
+}
+
+# According to tests/qtest/bios-tables-test.c: do not
+# change expected file in the same commit with adding test
+sub checkfilename {
+ my ($name, $acpi_testexpected, $acpi_nontestexpected) = @_;
+
+ # Note: shell script that rebuilds the expected files is in the same
+ # directory as files themselves.
+ # Note: allowed diff list can be changed both when changing expected
+ # files and when changing tests.
+ if ($name =~ m#^tests/data/acpi/# and not $name =~ m#^\.sh$#) {
+ $$acpi_testexpected = $name;
+ } elsif ($name !~ m#^tests/qtest/bios-tables-test-allowed-diff.h$#) {
+ $$acpi_nontestexpected = $name;
+ }
+ if (defined $$acpi_testexpected and defined $$acpi_nontestexpected) {
+ ERROR("Do not add expected files together with tests, " .
+ "follow instructions in " .
+ "tests/qtest/bios-tables-test.c: both " .
+ $$acpi_testexpected . " and " .
+ $$acpi_nontestexpected . " found\n");
+ }
+}
+
+sub process {
+ my $filename = shift;
+
+ my $linenr=0;
+ my $prevline="";
+ my $prevrawline="";
+ my $stashline="";
+ my $stashrawline="";
+
+ my $length;
+ my $indent;
+ my $previndent=0;
+ my $stashindent=0;
+
+ our $clean = 1;
+ my $signoff = 0;
+ my $is_patch = 0;
+
+ my $in_header_lines = $file ? 0 : 1;
+ my $in_commit_log = 0; #Scanning lines before patch
+ my $non_utf8_charset = 0;
+
+ our @report = ();
+ our $cnt_lines = 0;
+ our $cnt_error = 0;
+ our $cnt_warn = 0;
+ our $cnt_chk = 0;
+
+ # Trace the real file/line as we go.
+ my $realfile = '';
+ my $realline = 0;
+ my $realcnt = 0;
+ my $here = '';
+ my $in_comment = 0;
+ my $comment_edge = 0;
+ my $first_line = 0;
+ my $p1_prefix = '';
+
+ my $prev_values = 'E';
+
+ # suppression flags
+ my %suppress_ifbraces;
+ my %suppress_whiletrailers;
+ my %suppress_export;
+
+ my $acpi_testexpected;
+ my $acpi_nontestexpected;
+
+ # Pre-scan the patch sanitizing the lines.
+
+ sanitise_line_reset();
+ my $line;
+ foreach my $rawline (@rawlines) {
+ $linenr++;
+ $line = $rawline;
+
+ if ($rawline=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@/) {
+ $realline=$1-1;
+ if (defined $2) {
+ $realcnt=$3+1;
+ } else {
+ $realcnt=1+1;
+ }
+ $in_comment = 0;
+
+ # Guestimate if this is a continuing comment. Run
+ # the context looking for a comment "edge". If this
+ # edge is a close comment then we must be in a comment
+ # at context start.
+ my $edge;
+ my $cnt = $realcnt;
+ for (my $ln = $linenr + 1; $cnt > 0; $ln++) {
+ next if (defined $rawlines[$ln - 1] &&
+ $rawlines[$ln - 1] =~ /^-/);
+ $cnt--;
+ #print "RAW<$rawlines[$ln - 1]>\n";
+ last if (!defined $rawlines[$ln - 1]);
+ if ($rawlines[$ln - 1] =~ m@(/\*|\*/)@ &&
+ $rawlines[$ln - 1] !~ m@"[^"]*(?:/\*|\*/)[^"]*"@) {
+ ($edge) = $1;
+ last;
+ }
+ }
+ if (defined $edge && $edge eq '*/') {
+ $in_comment = 1;
+ }
+
+ # Guestimate if this is a continuing comment. If this
+ # is the start of a diff block and this line starts
+ # ' *' then it is very likely a comment.
+ if (!defined $edge &&
+ $rawlines[$linenr] =~ m@^.\s*(?:\*\*+| \*)(?:\s|$)@)
+ {
+ $in_comment = 1;
+ }
+
+ ##print "COMMENT:$in_comment edge<$edge> $rawline\n";
+ sanitise_line_reset($in_comment);
+
+ } elsif ($realcnt && $rawline =~ /^(?:\+| |$)/) {
+ # Standardise the strings and chars within the input to
+ # simplify matching -- only bother with positive lines.
+ $line = sanitise_line($rawline);
+ }
+ push(@lines, $line);
+
+ if ($realcnt > 1) {
+ $realcnt-- if ($line =~ /^(?:\+| |$)/);
+ } else {
+ $realcnt = 0;
+ }
+
+ #print "==>$rawline\n";
+ #print "-->$line\n";
+ }
+
+ $prefix = '';
+
+ $realcnt = 0;
+ $linenr = 0;
+ foreach my $line (@lines) {
+ $linenr++;
+
+ my $rawline = $rawlines[$linenr - 1];
+
+#extract the line range in the file after the patch is applied
+ if ($line=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@/) {
+ $is_patch = 1;
+ $first_line = $linenr + 1;
+ $realline=$1-1;
+ if (defined $2) {
+ $realcnt=$3+1;
+ } else {
+ $realcnt=1+1;
+ }
+ annotate_reset();
+ $prev_values = 'E';
+
+ %suppress_ifbraces = ();
+ %suppress_whiletrailers = ();
+ %suppress_export = ();
+ next;
+
+# track the line number as we move through the hunk, note that
+# new versions of GNU diff omit the leading space on completely
+# blank context lines so we need to count that too.
+ } elsif ($line =~ /^( |\+|$)/) {
+ $realline++;
+ $realcnt-- if ($realcnt != 0);
+
+ # Measure the line length and indent.
+ ($length, $indent) = line_stats($rawline);
+
+ # Track the previous line.
+ ($prevline, $stashline) = ($stashline, $line);
+ ($previndent, $stashindent) = ($stashindent, $indent);
+ ($prevrawline, $stashrawline) = ($stashrawline, $rawline);
+
+ #warn "line<$line>\n";
+
+ } elsif ($realcnt == 1) {
+ $realcnt--;
+ }
+
+ my $hunk_line = ($realcnt != 0);
+
+#make up the handle for any error we report on this line
+ $prefix = "$filename:$realline: " if ($emacs && $file);
+ $prefix = "$filename:$linenr: " if ($emacs && !$file);
+ $prefix = "file=$filename,line=$realline:\:" if ($github && $file);
+ $prefix = "file=$realfile,line=$realline:\:" if ($github && !$file);
+
+ $here = "#$linenr: " if (!$file);
+ $here = "#$realline: " if ($file);
+
+ # extract the filename as it passes
+ if ($line =~ /^diff --git.*?(\S+)$/) {
+ $realfile = $1;
+ $realfile =~ s@^([^/]*)/@@ if (!$file);
+ checkfilename($realfile, \$acpi_testexpected, \$acpi_nontestexpected);
+ } elsif ($line =~ /^\+\+\+\s+(\S+)/) {
+ $realfile = $1;
+ $realfile =~ s@^([^/]*)/@@ if (!$file);
+ checkfilename($realfile, \$acpi_testexpected, \$acpi_nontestexpected);
+
+ $p1_prefix = $1;
+ if (!$file && $tree && $p1_prefix ne '' && defined $root &&
+ -e "$root/$p1_prefix") {
+ WARN("patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n");
+ }
+
+ next;
+ }
+
+ $here .= "FILE: $realfile:$realline:" if ($realcnt != 0);
+
+ my $hereline = "$here\n$rawline\n";
+ my $herecurr = "$here\n$rawline\n";
+ my $hereprev = "$here\n$prevrawline\n$rawline\n";
+
+ $cnt_lines++ if ($realcnt != 0);
+
+# 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|\.hpp|\.mak|\.[sS])$/) {
+ ERROR("do not set execute permissions for source files\n" . $permhere);
+ }
+ }
+
+# Accept git diff extended headers as valid patches
+ if ($line =~ /^(?:rename|copy) (?:from|to) [\w\/\.\-]+\s*$/) {
+ $is_patch = 1;
+ }
+
+# 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" .
+ $herecurr) if (!$emitted_corrupt++);
+ }
+
+# UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php
+ if (($realfile =~ /^$/ || $line =~ /^\+/) &&
+ $rawline !~ m/^$UTF8*$/) {
+ my ($utf8_prefix) = ($rawline =~ /^($UTF8*)/);
+
+ my $blank = copy_spacing($rawline);
+ my $ptr = substr($blank, 0, length($utf8_prefix)) . "^";
+ my $hereptr = "$hereline$ptr\n";
+
+ ERROR("Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $hereptr);
+ }
+
+ if ($rawline =~ m/$UTF8_MOJIBAKE/) {
+ ERROR("Doubly-encoded UTF-8\n" . $herecurr);
+ }
+# Check if it's the start of a commit log
+# (not a header line and we haven't seen the patch filename)
+ if ($in_header_lines && $realfile =~ /^$/ &&
+ !($rawline =~ /^\s+\S/ ||
+ $rawline =~ /^(commit\b|from\b|[\w-]+:).*$/i)) {
+ $in_header_lines = 0;
+ $in_commit_log = 1;
+ }
+
+# Check if there is UTF-8 in a commit log when a mail header has explicitly
+# declined it, i.e defined some charset where it is missing.
+ if ($in_header_lines &&
+ $rawline =~ /^Content-Type:.+charset="(.+)".*$/ &&
+ $1 !~ /utf-8/i) {
+ $non_utf8_charset = 1;
+ }
+
+ if ($in_commit_log && $non_utf8_charset && $realfile =~ /^$/ &&
+ $rawline =~ /$NON_ASCII_UTF8/) {
+ WARN("8-bit UTF-8 used in possible commit log\n" . $herecurr);
+ }
+
+# ignore non-hunk lines and lines being removed
+ next if (!$hunk_line || $line =~ /^-/);
+
+#trailing whitespace
+ if ($line =~ /^\+.*\015/) {
+ my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+ ERROR("DOS line endings\n" . $herevet);
+
+ } elsif ($realfile =~ /^docs\/.+\.txt/ ||
+ $realfile =~ /^docs\/.+\.md/) {
+ if ($rawline =~ /^\+\s+$/ && $rawline !~ /^\+ {4}$/) {
+ # TODO: properly check we're in a code block
+ # (surrounding text is 4-column aligned)
+ my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+ ERROR("code blocks in documentation should have " .
+ "empty lines with exactly 4 columns of " .
+ "whitespace\n" . $herevet);
+ }
+ } elsif ($rawline =~ /^\+.*\S\s+$/ || $rawline =~ /^\+\s+$/) {
+ my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+ ERROR("trailing whitespace\n" . $herevet);
+ $rpt_cleaners = 1;
+ }
+
+# check we are in a valid source file if not then ignore this hunk
+ next if ($realfile !~ /$SrcFile/);
+
+#120 column limit; exempt URLs, if no other words on line
+ if ($line =~ /^\+/ &&
+ !($line =~ /^\+\s*"[^"]*"\s*(?:\s*|,|\)\s*;)\s*$/) &&
+ !($rawline =~ /^[^[:alnum:]]*https?:\S*$/) &&
+ $length > 80 &&
+ $realfile !~ /\/tests\//)
+ {
+ if ($length > 120) {
+ ERROR("line over 120 characters\n" . $herecurr);
+ } else {
+ WARN("line over 80 characters\n" . $herecurr);
+ }
+ }
+
+# check for spaces before a quoted newline
+ if ($rawline =~ /^.*\".*\s\\n/) {
+ ERROR("unnecessary whitespace before a quoted newline\n" . $herecurr);
+ }
+
+# check for adding lines without a newline.
+ if ($line =~ /^\+/ && defined $lines[$linenr] && $lines[$linenr] =~ /^\\ No newline at end of file/) {
+ ERROR("adding a line without newline at end of file\n" . $herecurr);
+ }
+
+# check for RCS/CVS revision markers
+ if ($rawline =~ /^\+.*\$(FreeBSD|Revision|Log|Id)(?:\$|\b)/) {
+ ERROR("CVS style keyword markers, these will _not_ be updated\n". $herecurr);
+ }
+
+# check we are in a valid C source file if not then ignore this hunk
+ next if ($realfile !~ /\.(h|hpp|c|cpp|cc|hh)$/);
+
+# Block comment styles
+
+ # Block comments use /* on a line of its own
+ if ($rawline !~ m@^\+.*/\*.*\*/[ \t)}]*$@ && #inline /*...*/
+ $rawline =~ m@^\+.*/\*[*-]?+[ \t]*[^ \t]@) { # /* or /** or /*- non-blank
+ WARN("Block comments use a leading /* on a separate line\n" . $herecurr);
+ }
+
+# Block comments use * on subsequent lines
+ if ($prevline =~ /$;[ \t]*$/ && #ends in comment
+ $prevrawline =~ /^\+.*?\/\*/ && #starting /*
+ $prevrawline !~ /\*\/[ \t]*$/ && #no trailing */
+ $rawline =~ /^\+/ && #line is new
+ $rawline !~ /^\+[ \t]*\*/) { #no leading *
+ WARN("Block comments use * on subsequent lines\n" . $hereprev);
+ }
+
+# Block comments use */ on trailing lines
+ if ($rawline !~ m@^\+[ \t]*\*/[ \t]*$@ && #trailing */
+ $rawline !~ m@^\+.*/\*.*\*/[ \t]*$@ && #inline /*...*/
+ $rawline !~ m@^\+.*\*{2,}/[ \t]*$@ && #trailing **/
+ $rawline =~ m@^\+[ \t]*.+\*\/[ \t]*$@) { #non blank */
+ WARN("Block comments use a trailing */ on a separate line\n" . $herecurr);
+ }
+
+# Block comment * alignment
+ if ($prevline =~ /$;[ \t]*$/ && #ends in comment
+ $line =~ /^\+[ \t]*$;/ && #leading comment
+ $rawline =~ /^\+[ \t]*\*/ && #leading *
+ (($prevrawline =~ /^\+.*?\/\*/ && #leading /*
+ $prevrawline !~ /\*\/[ \t]*$/) || #no trailing */
+ $prevrawline =~ /^\+[ \t]*\*/)) { #leading *
+ my $oldindent;
+ $prevrawline =~ m@^\+([ \t]*/?)\*@;
+ if (defined($1)) {
+ $oldindent = expand_tabs($1);
+ } else {
+ $prevrawline =~ m@^\+(.*/?)\*@;
+ $oldindent = expand_tabs($1);
+ }
+ $rawline =~ m@^\+([ \t]*)\*@;
+ my $newindent = $1;
+ $newindent = expand_tabs($newindent);
+ if (length($oldindent) ne length($newindent)) {
+ WARN("Block comments should align the * on each line\n" . $hereprev);
+ }
+ }
+
+# Check for potential 'bare' types
+ my ($stat, $cond, $line_nr_next, $remain_next, $off_next,
+ $realline_next);
+ if ($realcnt && $line =~ /.\s*\S/) {
+ ($stat, $cond, $line_nr_next, $remain_next, $off_next) =
+ ctx_statement_block($linenr, $realcnt, 0);
+ $stat =~ s/\n./\n /g;
+ $cond =~ s/\n./\n /g;
+
+ # Find the real next line.
+ $realline_next = $line_nr_next;
+ if (defined $realline_next &&
+ (!defined $lines[$realline_next - 1] ||
+ substr($lines[$realline_next - 1], $off_next) =~ /^\s*$/)) {
+ $realline_next++;
+ }
+
+ my $s = $stat;
+ $s =~ s/{.*$//s;
+
+ # Ignore goto labels.
+ if ($s =~ /$Ident:\*$/s) {
+
+ # Ignore functions being called
+ } elsif ($s =~ /^.\s*$Ident\s*\(/s) {
+
+ } elsif ($s =~ /^.\s*else\b/s) {
+
+ # declarations always start with types
+ } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?((?:\s*$Ident)+?)\b(?:\s+$Sparse)?\s*\**\s*(?:$Ident|\(\*[^\)]*\))(?:\s*$Modifier)?\s*(?:;|=|,|\()/s) {
+ my $type = $1;
+ $type =~ s/\s+/ /g;
+ possible($type, "A:" . $s);
+
+ # definitions in global scope can only start with types
+ } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b\s*(?!:)/s) {
+ possible($1, "B:" . $s);
+ }
+
+ # any (foo ... *) is a pointer cast, and foo is a type
+ while ($s =~ /\(($Ident)(?:\s+$Sparse)*[\s\*]+\s*\)/sg) {
+ possible($1, "C:" . $s);
+ }
+
+ # Check for any sort of function declaration.
+ # int foo(something bar, other baz);
+ # void (*store_gdt)(x86_descr_ptr *);
+ if ($prev_values eq 'E' && $s =~ /^(.(?:typedef\s*)?(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*(?:\b$Ident|\(\*\s*$Ident\))\s*)\(/s) {
+ my ($name_len) = length($1);
+
+ my $ctx = $s;
+ substr($ctx, 0, $name_len + 1, '');
+ $ctx =~ s/\)[^\)]*$//;
+
+ for my $arg (split(/\s*,\s*/, $ctx)) {
+ if ($arg =~ /^(?:const\s+)?($Ident)(?:\s+$Sparse)*\s*\**\s*(:?\b$Ident)?$/s || $arg =~ /^($Ident)$/s) {
+
+ possible($1, "D:" . $s);
+ }
+ }
+ }
+
+ }
+
+#
+# Checks which may be anchored in the context.
+#
+
+# Check for switch () and associated case and default
+# statements should be at the same indent.
+ if ($line=~/\bswitch\s*\(.*\)/) {
+ my $err = '';
+ my $sep = '';
+ my @ctx = ctx_block_outer($linenr, $realcnt);
+ shift(@ctx);
+ for my $ctx (@ctx) {
+ my ($clen, $cindent) = line_stats($ctx);
+ if ($ctx =~ /^\+\s*(case\s+|default:)/ &&
+ $indent != $cindent) {
+ $err .= "$sep$ctx\n";
+ $sep = '';
+ } else {
+ $sep = "[...]\n";
+ }
+ }
+ if ($err ne '') {
+ ERROR("switch and case should be at the same indent\n$hereline$err");
+ }
+ }
+
+# if/while/etc brace do not go on next line, unless defining a do while loop,
+# or if that brace on the next line is for something else
+ if ($line =~ /(.*)\b((?:if|while|for|switch)\s*\(|do\b|else\b)/ && $line !~ /^.\s*\#/) {
+ my $pre_ctx = "$1$2";
+
+ my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, 0);
+ my $ctx_cnt = $realcnt - $#ctx - 1;
+ my $ctx = join("\n", @ctx);
+
+ my $ctx_ln = $linenr;
+ my $ctx_skip = $realcnt;
+
+ while ($ctx_skip > $ctx_cnt || ($ctx_skip == $ctx_cnt &&
+ defined $lines[$ctx_ln - 1] &&
+ $lines[$ctx_ln - 1] =~ /^-/)) {
+ ##print "SKIP<$ctx_skip> CNT<$ctx_cnt>\n";
+ $ctx_skip-- if (!defined $lines[$ctx_ln - 1] || $lines[$ctx_ln - 1] !~ /^-/);
+ $ctx_ln++;
+ }
+
+ #print "realcnt<$realcnt> ctx_cnt<$ctx_cnt>\n";
+ #print "pre<$pre_ctx>\nline<$line>\nctx<$ctx>\nnext<$lines[$ctx_ln - 1]>\n";
+
+ # The length of the "previous line" is checked against 80 because it
+ # includes the + at the beginning of the line (if the actual line has
+ # 79 or 80 characters, it is no longer possible to add a space and an
+ # opening brace there)
+ if ($#ctx == 0 && $ctx !~ /{\s*/ &&
+ defined($lines[$ctx_ln - 1]) && $lines[$ctx_ln - 1] =~ /^\+\s*\{/ &&
+ defined($lines[$ctx_ln - 2]) && length($lines[$ctx_ln - 2]) < 80) {
+ ERROR("that open brace { should be on the previous line\n" .
+ "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
+ }
+ if ($level == 0 && $pre_ctx !~ /}\s*while\s*\($/ &&
+ $ctx =~ /\)\s*\;\s*$/ &&
+ defined $lines[$ctx_ln - 1])
+ {
+ my ($nlength, $nindent) = line_stats($lines[$ctx_ln - 1]);
+ if ($nindent > $indent) {
+ ERROR("trailing semicolon indicates no statements, indent implies otherwise\n" .
+ "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
+ }
+ }
+ }
+
+# 'do ... while (0/false)' only makes sense in macros, without trailing ';'
+ if ($line =~ /while\s*\((0|false)\);/) {
+ ERROR("suspicious ; after while (0)\n" . $herecurr);
+ }
+
+# Check superfluous trailing ';'
+ if ($line =~ /;;$/) {
+ ERROR("superfluous trailing semicolon\n" . $herecurr);
+ }
+
+# Check relative indent for conditionals and blocks.
+ if ($line =~ /\b(?:(?:if|while|for)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) {
+ my ($s, $c) = ($stat, $cond);
+
+ substr($s, 0, length($c), '');
+
+ # Make sure we remove the line prefixes as we have
+ # none on the first line, and are going to re-add them
+ # where necessary.
+ $s =~ s/\n./\n/gs;
+
+ # Find out how long the conditional actually is.
+ my @newlines = ($c =~ /\n/gs);
+ my $cond_lines = 1 + $#newlines;
+
+ # We want to check the first line inside the block
+ # starting at the end of the conditional, so remove:
+ # 1) any blank line termination
+ # 2) any opening brace { on end of the line
+ # 3) any do (...) {
+ my $continuation = 0;
+ my $check = 0;
+ $s =~ s/^.*\bdo\b//;
+ $s =~ s/^\s*\{//;
+ if ($s =~ s/^\s*\\//) {
+ $continuation = 1;
+ }
+ if ($s =~ s/^\s*?\n//) {
+ $check = 1;
+ $cond_lines++;
+ }
+
+ # Also ignore a loop construct at the end of a
+ # preprocessor statement.
+ if (($prevline =~ /^.\s*#\s*define\s/ ||
+ $prevline =~ /\\\s*$/) && $continuation == 0) {
+ $check = 0;
+ }
+
+ my $cond_ptr = -1;
+ $continuation = 0;
+ while ($cond_ptr != $cond_lines) {
+ $cond_ptr = $cond_lines;
+
+ # If we see an #else/#elif then the code
+ # is not linear.
+ if ($s =~ /^\s*\#\s*(?:else|elif)/) {
+ $check = 0;
+ }
+
+ # Ignore:
+ # 1) blank lines, they should be at 0,
+ # 2) preprocessor lines, and
+ # 3) labels.
+ if ($continuation ||
+ $s =~ /^\s*?\n/ ||
+ $s =~ /^\s*#\s*?/ ||
+ $s =~ /^\s*$Ident\s*:/) {
+ $continuation = ($s =~ /^.*?\\\n/) ? 1 : 0;
+ if ($s =~ s/^.*?\n//) {
+ $cond_lines++;
+ }
+ }
+ }
+
+ my (undef, $sindent) = line_stats("+" . $s);
+ my $stat_real = raw_line($linenr, $cond_lines);
+
+ # Check if either of these lines are modified, else
+ # this is not this patch's fault.
+ if (!defined($stat_real) ||
+ $stat !~ /^\+/ && $stat_real !~ /^\+/) {
+ $check = 0;
+ }
+ if (defined($stat_real) && $cond_lines > 1) {
+ $stat_real = "[...]\n$stat_real";
+ }
+
+ #print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n";
+
+ if ($check && (($sindent % 4) != 0 ||
+ ($sindent <= $indent && $s ne ''))) {
+ ERROR("suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n");
+ }
+ }
+
+ # Track the 'values' across context and added lines.
+ my $opline = $line; $opline =~ s/^./ /;
+ my ($curr_values, $curr_vars) =
+ annotate_values($opline . "\n", $prev_values);
+ $curr_values = $prev_values . $curr_values;
+ if ($dbg_values) {
+ my $outline = $opline; $outline =~ s/\t/ /g;
+ print "$linenr > .$outline\n";
+ print "$linenr > $curr_values\n";
+ print "$linenr > $curr_vars\n";
+ }
+ $prev_values = substr($curr_values, -1);
+
+#ignore lines not being added
+ if ($line=~/^[^\+]/) {next;}
+
+# check for initialisation to aggregates open brace on the next line
+ if ($line =~ /^.\s*\{/ &&
+ $prevline =~ /(?:^|[^=])=\s*$/) {
+ ERROR("that open brace { should be on the previous line\n" . $hereprev);
+ }
+
+#
+# Checks which are anchored on the added line.
+#
+
+# check for malformed paths in #include statements (uses RAW line)
+ if ($rawline =~ m{^.\s*\#\s*include\s+[<"](.*)[">]}) {
+ my $path = $1;
+ if ($path =~ m{//}) {
+ ERROR("malformed #include filename\n" .
+ $herecurr);
+ }
+ }
+
+# Remove C99 comments.
+ $line =~ s@//.*@@;
+ $opline =~ s@//.*@@;
+
+# * goes on variable not on type
+ # (char*[ const])
+ if ($line =~ m{\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\)}) {
+ my ($from, $to) = ($1, $1);
+
+ # Should start with a space.
+ $to =~ s/^(\S)/ $1/;
+ # Should not end with a space.
+ $to =~ s/\s+$//;
+ # '*'s should not have spaces between.
+ while ($to =~ s/\*\s+\*/\*\*/) {
+ }
+
+ #print "from<$from> to<$to>\n";
+ if ($from ne $to) {
+ ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr);
+ }
+ } elsif ($line =~ m{\b$NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)($Ident)}) {
+ my ($from, $to, $ident) = ($1, $1, $2);
+
+ # Should start with a space.
+ $to =~ s/^(\S)/ $1/;
+ # Should not end with a space.
+ $to =~ s/\s+$//;
+ # '*'s should not have spaces between.
+ while ($to =~ s/\*\s+\*/\*\*/) {
+ }
+ # Modifiers should have spaces.
+ $to =~ s/(\b$Modifier$)/$1 /;
+
+ #print "from<$from> to<$to> ident<$ident>\n";
+ if ($from ne $to && $ident !~ /^$Modifier$/) {
+ ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr);
+ }
+ }
+
+# function brace can't be on same line, except for #defines of do while,
+# or if closed on same line
+ if (($line=~/$Type\s*$Ident\(.*\).*\s\{/) and
+ !($line=~/\#\s*define.*do\s\{/) and !($line=~/}/)) {
+ ERROR("open brace '{' following function declarations go on the next line\n" . $herecurr);
+ }
+
+# missing space after union, struct or enum definition
+ if ($line =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?(?:\s+$Ident)?[=\{]/) {
+ ERROR("missing space after $1 definition\n" . $herecurr);
+ }
+
+# check for spacing round square brackets; allowed:
+# 1. with a type on the left -- int [] a;
+# 2. at the beginning of a line for slice initialisers -- [0...10] = 5,
+# 3. inside a curly brace -- = { [0...10] = 5 }
+# 4. after a comma -- [1] = 5, [2] = 6
+# 5. in a macro definition -- #define abc(x) [x] = y
+ while ($line =~ /(.*?\s)\[/g) {
+ my ($where, $prefix) = ($-[1], $1);
+ if ($prefix !~ /$Type\s+$/ &&
+ ($where != 0 || $prefix !~ /^.\s+$/) &&
+ $prefix !~ /\#\s*define[^(]*\([^)]*\)\s+$/ &&
+ $prefix !~ /[,{:]\s+$/) {
+ ERROR("space prohibited before open square bracket '['\n" . $herecurr);
+ }
+ }
+
+# check for spaces between functions and their parentheses.
+ while ($line =~ /($Ident)\s+\(/g) {
+ my $name = $1;
+ my $ctx_before = substr($line, 0, $-[1]);
+ my $ctx = "$ctx_before$name";
+
+ # Ignore those directives where spaces _are_ permitted.
+ if ($name =~ /^(?:
+ if|for|while|switch|return|case|
+ volatile|__volatile__|coroutine_fn|
+ __attribute__|format|__extension__|
+ asm|__asm__)$/x)
+ {
+
+ # Ignore 'catch (...)' in C++
+ } 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
+ # parenthesis it is simply not a parameter group.
+ } elsif ($ctx_before =~ /^.\s*\#\s*define\s*$/) {
+
+ # cpp #elif statement condition may start with a (
+ } elsif ($ctx =~ /^.\s*\#\s*elif\s*$/) {
+
+ # If this whole things ends with a type its most
+ # likely a typedef for a function.
+ } elsif ($ctx =~ /$Type$/) {
+
+ } else {
+ ERROR("space prohibited between function name and open parenthesis '('\n" . $herecurr);
+ }
+ }
+# Check operator spacing.
+ if (!($line=~/\#\s*include/)) {
+ my $ops = qr{
+ <<=|>>=|<=|>=|==|!=|
+ \+=|-=|\*=|\/=|%=|\^=|\|=|&=|
+ =>|->|<<|>>|<|>|=|!|~|
+ &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%|
+ \?|::|:
+ }x;
+ my @elements = split(/($ops|;)/, $opline);
+ my $off = 0;
+
+ my $blank = copy_spacing($opline);
+
+ for (my $n = 0; $n < $#elements; $n += 2) {
+ $off += length($elements[$n]);
+
+ # Pick up the preceding and succeeding characters.
+ my $ca = substr($opline, 0, $off);
+ my $cc = '';
+ if (length($opline) >= ($off + length($elements[$n + 1]))) {
+ $cc = substr($opline, $off + length($elements[$n + 1]));
+ }
+ my $cb = "$ca$;$cc";
+
+ my $a = '';
+ $a = 'V' if ($elements[$n] ne '');
+ $a = 'W' if ($elements[$n] =~ /\s$/);
+ $a = 'C' if ($elements[$n] =~ /$;$/);
+ $a = 'B' if ($elements[$n] =~ /(\[|\()$/);
+ $a = 'O' if ($elements[$n] eq '');
+ $a = 'E' if ($ca =~ /^\s*$/);
+
+ my $op = $elements[$n + 1];
+
+ my $c = '';
+ if (defined $elements[$n + 2]) {
+ $c = 'V' if ($elements[$n + 2] ne '');
+ $c = 'W' if ($elements[$n + 2] =~ /^\s/);
+ $c = 'C' if ($elements[$n + 2] =~ /^$;/);
+ $c = 'B' if ($elements[$n + 2] =~ /^(\)|\]|;)/);
+ $c = 'O' if ($elements[$n + 2] eq '');
+ $c = 'E' if ($elements[$n + 2] =~ /^\s*\\$/);
+ } else {
+ $c = 'E';
+ }
+
+ my $ctx = "${a}x${c}";
+
+ my $at = "(ctx:$ctx)";
+
+ my $ptr = substr($blank, 0, $off) . "^";
+ my $hereptr = "$hereline$ptr\n";
+
+ # Pull out the value of this operator.
+ my $op_type = substr($curr_values, $off + 1, 1);
+
+ # Get the full operator variant.
+ my $opv = $op . substr($curr_vars, $off, 1);
+
+ # Ignore operators passed as parameters.
+ if ($op_type ne 'V' &&
+ $ca =~ /\s$/ && $cc =~ /^\s*,/) {
+
+# # Ignore comments
+# } elsif ($op =~ /^$;+$/) {
+
+ # ; should have either the end of line or a space or \ after it
+ } elsif ($op eq ';') {
+ if ($ctx !~ /.x[WEBC]/ &&
+ $cc !~ /^\\/ && $cc !~ /^;/) {
+ ERROR("space required after that '$op' $at\n" . $hereptr);
+ }
+
+ # // is a comment
+ } elsif ($op eq '//') {
+
+ # Ignore : used in class declaration in C++
+ } elsif ($opv eq ':B' && $ctx =~ /Wx[WE]/ &&
+ $line =~ /class/ && $realfile =~ /\.(cpp|h|hpp|hh|cc)$/) {
+
+ # No spaces for:
+ # ->
+ # : when part of a bitfield
+ } elsif ($op eq '->' || $opv eq ':B') {
+ if ($ctx =~ /Wx.|.xW/) {
+ ERROR("spaces prohibited around that '$op' $at\n" . $hereptr);
+ }
+
+ # , must have a space on the right.
+ # not required when having a single },{ on one line
+ } elsif ($op eq ',') {
+ if ($ctx !~ /.x[WEC]/ && $cc !~ /^}/ &&
+ ($elements[$n] . $elements[$n + 2]) !~ " *}\\{") {
+ ERROR("space required after that '$op' $at\n" . $hereptr);
+ }
+
+ # '*' as part of a type definition -- reported already.
+ } elsif ($opv eq '*_') {
+ #warn "'*' is part of type\n";
+
+ # unary operators should have a space before and
+ # none after. May be left adjacent to another
+ # unary operator, or a cast
+ } elsif ($op eq '!' || $op eq '~' ||
+ $opv eq '*U' || $opv eq '-U' ||
+ $opv eq '&U' || $opv eq '&&U') {
+ if ($op eq '~' && $ca =~ /::$/ && $realfile =~ /\.(cpp|h|hpp|cc|hh)$/) {
+ # '~' used as a name of Destructor
+
+ } elsif ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) {
+ ERROR("space required before that '$op' $at\n" . $hereptr);
+ }
+ if ($op eq '*' && $cc =~/\s*$Modifier\b/) {
+ # A unary '*' may be const
+
+ } elsif ($ctx =~ /.xW/) {
+ ERROR("space prohibited after that '$op' $at\n" . $hereptr);
+ }
+
+ # unary ++ and unary -- are allowed no space on one side.
+ } elsif ($op eq '++' or $op eq '--') {
+ if ($ctx !~ /[WEOBC]x[^W]/ && $ctx !~ /[^W]x[WOBEC]/) {
+ ERROR("space required one side of that '$op' $at\n" . $hereptr);
+ }
+ if ($ctx =~ /Wx[BE]/ ||
+ ($ctx =~ /Wx./ && $cc =~ /^;/)) {
+ ERROR("space prohibited before that '$op' $at\n" . $hereptr);
+ }
+ if ($ctx =~ /ExW/) {
+ ERROR("space prohibited after that '$op' $at\n" . $hereptr);
+ }
+
+ # A colon needs no spaces before when it is
+ # terminating a case value or a label.
+ } elsif ($opv eq ':C' || $opv eq ':L') {
+ if ($ctx =~ /Wx./) {
+ ERROR("space prohibited before that '$op' $at\n" . $hereptr);
+ }
+
+ # All the others need spaces both sides.
+ } elsif ($ctx !~ /[EWC]x[CWE]/) {
+ my $ok = 0;
+
+ if ($realfile =~ /\.(cpp|h|hpp|cc|hh)$/) {
+ # Ignore template arguments <...> in C++
+ if (($op eq '<' || $op eq '>') && $line =~ /<.*>/) {
+ $ok = 1;
+ }
+
+ # Ignore :: in C++
+ if ($op eq '::') {
+ $ok = 1;
+ }
+ }
+
+ # Ignore email addresses <foo@bar>
+ if (($op eq '<' &&
+ $cc =~ /^\S+\@\S+>/) ||
+ ($op eq '>' &&
+ $ca =~ /<\S+\@\S+$/))
+ {
+ $ok = 1;
+ }
+
+ # Ignore ?:
+ if (($opv eq ':O' && $ca =~ /\?$/) ||
+ ($op eq '?' && $cc =~ /^:/)) {
+ $ok = 1;
+ }
+
+ if ($ok == 0) {
+ ERROR("spaces required around that '$op' $at\n" . $hereptr);
+ }
+ }
+ $off += length($elements[$n + 1]);
+ }
+ }
+
+#need space before brace following if, while, etc
+ if (($line =~ /\(.*\)\{/ && $line !~ /\($Type\)\{/) ||
+ $line =~ /do\{/) {
+ ERROR("space required before the open brace '{'\n" . $herecurr);
+ }
+
+# closing brace should have a space following it when it has anything
+# on the line
+ if ($line =~ /}(?!(?:,|;|\)))\S/) {
+ ERROR("space required after that close brace '}'\n" . $herecurr);
+ }
+
+# check spacing on square brackets
+ if ($line =~ /\[\s/ && $line !~ /\[\s*$/) {
+ ERROR("space prohibited after that open square bracket '['\n" . $herecurr);
+ }
+ if ($line =~ /\s\]/) {
+ ERROR("space prohibited before that close square bracket ']'\n" . $herecurr);
+ }
+
+# check spacing on parentheses
+ if ($line =~ /\(\s/ && $line !~ /\(\s*(?:\\)?$/ &&
+ $line !~ /for\s*\(\s+;/) {
+ ERROR("space prohibited after that open parenthesis '('\n" . $herecurr);
+ }
+ if ($line =~ /(\s+)\)/ && $line !~ /^.\s*\)/ &&
+ $line !~ /for\s*\(.*;\s+\)/ &&
+ $line !~ /:\s+\)/) {
+ ERROR("space prohibited before that close parenthesis ')'\n" . $herecurr);
+ }
+
+ if ($line =~ /^.\s*(Q(?:S?LIST|SIMPLEQ|TAILQ)_HEAD)\s*\(\s*[^,]/ &&
+ $line !~ /^.typedef/) {
+ ERROR("named $1 should be typedefed separately\n" . $herecurr);
+ }
+
+# Return needs parens
+ if ($line =~ /^.\s*return [^(]/) {
+ ERROR("parentheses required on return\n" . $herecurr);
+ }
+
+# Need a space before open parenthesis after if, while etc
+ if ($line=~/\b(if|while|for|switch|return)\(/) {
+ ERROR("space required before the open parenthesis '('\n" . $herecurr);
+ }
+
+# Check for illegal assignment in if conditional -- and check for trailing
+# statements after the conditional.
+ if ($line =~ /do\s*(?!{)/) {
+ my ($stat_next) = ctx_statement_block($line_nr_next,
+ $remain_next, $off_next);
+ $stat_next =~ s/\n./\n /g;
+ ##print "stat<$stat> stat_next<$stat_next>\n";
+
+ if ($stat_next =~ /^\s*while\b/) {
+ # If the statement carries leading newlines,
+ # then count those as offsets.
+ my ($whitespace) =
+ ($stat_next =~ /^((?:\s*\n[+-])*\s*)/s);
+ my $offset =
+ statement_rawlines($whitespace) - 1;
+
+ $suppress_whiletrailers{$line_nr_next +
+ $offset} = 1;
+ }
+ }
+ if (!defined $suppress_whiletrailers{$linenr} &&
+ $line =~ /\b(?:if|while|for)\s*\(/ && $line !~ /^.\s*#/) {
+ my ($s, $c) = ($stat, $cond);
+
+# if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/s) {
+# ERROR("do not use assignment in if condition\n" . $herecurr);
+# }
+
+ # Find out what is on the end of the line after the
+ # conditional.
+ substr($s, 0, length($c), '');
+ $s =~ s/\n.*//g;
+ $s =~ s/$;//g; # Remove any comments
+ if (length($c) && $s !~ /^\s*{?\s*\\*\s*$/ &&
+ $c !~ /}\s*while\s*/)
+ {
+ # Find out how long the conditional actually is.
+ my @newlines = ($c =~ /\n/gs);
+ my $cond_lines = 1 + $#newlines;
+ my $stat_real = '';
+
+ $stat_real = raw_line($linenr, $cond_lines)
+ . "\n" if ($cond_lines);
+ if (defined($stat_real) && $cond_lines > 1) {
+ $stat_real = "[...]\n$stat_real";
+ }
+
+ ERROR("trailing statements should be on next line\n" . $herecurr . $stat_real);
+ }
+ }
+
+# Check for bitwise tests written as boolean
+ if ($line =~ /
+ (?:
+ (?:\[|\(|\&\&|\|\|)
+ \s*0[xX][0-9]+\s*
+ (?:\&\&|\|\|)
+ |
+ (?:\&\&|\|\|)
+ \s*0[xX][0-9]+\s*
+ (?:\&\&|\|\||\)|\])
+ )/x)
+ {
+ ERROR("boolean test with hexadecimal, perhaps just 1 \& or \|?\n" . $herecurr);
+ }
+
+# if and else should not have general statements after it
+ if ($line =~ /^.\s*(?:}\s*)?else\b(.*)/) {
+ my $s = $1;
+ $s =~ s/$;//g; # Remove any comments
+ if ($s !~ /^\s*(?:\sif|(?:{|)\s*\\?\s*$)/) {
+ ERROR("trailing statements should be on next line\n" . $herecurr);
+ }
+ }
+# if should not continue a brace
+ if ($line =~ /}\s*if\b/) {
+ ERROR("trailing statements should be on next line\n" .
+ $herecurr);
+ }
+# case and default should not have general statements after them
+ if ($line =~ /^.\s*(?:case\s*.*|default\s*):/g &&
+ $line !~ /\G(?:
+ (?:\s*$;*)(?:\s*{)?(?:\s*$;*)(?:\s*\\)?\s*$|
+ \s*return\s+
+ )/xg)
+ {
+ ERROR("trailing statements should be on next line\n" . $herecurr);
+ }
+
+ # Check for }<nl>else {, these must be at the same
+ # indent level to be relevant to each other.
+ if ($prevline=~/}\s*$/ and $line=~/^.\s*else\s*/ and
+ $previndent == $indent) {
+ ERROR("else should follow close brace '}'\n" . $hereprev);
+ }
+
+ if ($prevline=~/}\s*$/ and $line=~/^.\s*while\s*/ and
+ $previndent == $indent) {
+ my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0);
+
+ # Find out what is on the end of the line after the
+ # conditional.
+ substr($s, 0, length($c), '');
+ $s =~ s/\n.*//g;
+
+ if ($s =~ /^\s*;/) {
+ ERROR("while should follow close brace '}'\n" . $hereprev);
+ }
+ }
+
+#no spaces allowed after \ in define
+ if ($line=~/\#\s*define.*\\\s$/) {
+ ERROR("Whitespace after \\ makes next lines useless\n" . $herecurr);
+ }
+
+# multi-statement macros should be enclosed in a do while loop, grab the
+# first statement and ensure its the whole macro if its not enclosed
+# in a known good container
+ if ($realfile !~ m@/vmlinux.lds.h$@ &&
+ $line =~ /^.\s*\#\s*define\s*$Ident(\()?/) {
+ my $ln = $linenr;
+ my $cnt = $realcnt;
+ my ($off, $dstat, $dcond, $rest);
+ my $ctx = '';
+
+ my $args = defined($1);
+
+ # Find the end of the macro and limit our statement
+ # search to that.
+ while ($cnt > 0 && defined $lines[$ln - 1] &&
+ $lines[$ln - 1] =~ /^(?:-|..*\\$)/)
+ {
+ $ctx .= $rawlines[$ln - 1] . "\n";
+ $cnt-- if ($lines[$ln - 1] !~ /^-/);
+ $ln++;
+ }
+ $ctx .= $rawlines[$ln - 1];
+
+ ($dstat, $dcond, $ln, $cnt, $off) =
+ ctx_statement_block($linenr, $ln - $linenr + 1, 0);
+ #print "dstat<$dstat> dcond<$dcond> cnt<$cnt> off<$off>\n";
+ #print "LINE<$lines[$ln-1]> len<" . length($lines[$ln-1]) . "\n";
+
+ # Extract the remainder of the define (if any) and
+ # rip off surrounding spaces, and trailing \'s.
+ $rest = '';
+ while ($off != 0 || ($cnt > 0 && $rest =~ /\\\s*$/)) {
+ #print "ADDING cnt<$cnt> $off <" . substr($lines[$ln - 1], $off) . "> rest<$rest>\n";
+ if ($off != 0 || $lines[$ln - 1] !~ /^-/) {
+ $rest .= substr($lines[$ln - 1], $off) . "\n";
+ $cnt--;
+ }
+ $ln++;
+ $off = 0;
+ }
+ $rest =~ s/\\\n.//g;
+ $rest =~ s/^\s*//s;
+ $rest =~ s/\s*$//s;
+
+ # Clean up the original statement.
+ if ($args) {
+ substr($dstat, 0, length($dcond), '');
+ } else {
+ $dstat =~ s/^.\s*\#\s*define\s+$Ident\s*//;
+ }
+ $dstat =~ s/$;//g;
+ $dstat =~ s/\\\n.//g;
+ $dstat =~ s/^\s*//s;
+ $dstat =~ s/\s*$//s;
+
+ # Flatten any parentheses and braces
+ while ($dstat =~ s/\([^\(\)]*\)/1/ ||
+ $dstat =~ s/\{[^\{\}]*\}/1/ ||
+ $dstat =~ s/\[[^\{\}]*\]/1/)
+ {
+ }
+
+ my $exceptions = qr{
+ $Declare|
+ module_param_named|
+ MODULE_PARAM_DESC|
+ DECLARE_PER_CPU|
+ DEFINE_PER_CPU|
+ __typeof__\(|
+ union|
+ struct|
+ \.$Ident\s*=\s*|
+ ^\"|\"$
+ }x;
+ #print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
+ if ($rest ne '' && $rest ne ',') {
+ if ($rest !~ /while\s*\(/ &&
+ $dstat !~ /$exceptions/)
+ {
+ ERROR("Macros with multiple statements should be enclosed in a do - while loop\n" . "$here\n$ctx\n");
+ }
+
+ } elsif ($ctx !~ /;/) {
+ if ($dstat ne '' &&
+ $dstat !~ /^(?:$Ident|-?$Constant)$/ &&
+ $dstat !~ /$exceptions/ &&
+ $dstat !~ /^\.$Ident\s*=/ &&
+ $dstat =~ /$Operators/)
+ {
+ ERROR("Macros with complex values should be enclosed in parenthesis\n" . "$here\n$ctx\n");
+ }
+ }
+ }
+
+# check for missing bracing around if etc
+ if ($line =~ /(^.*)\b(?:if|while|for)\b/ &&
+ $line !~ /\#\s*if/) {
+ my $allowed = 0;
+
+ # Check the pre-context.
+ if ($line =~ /(\}.*?)$/) {
+ my $pre = $1;
+
+ if ($line !~ /else/) {
+ print "APW: ALLOWED: pre<$pre> line<$line>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ }
+ my ($level, $endln, @chunks) =
+ ctx_statement_full($linenr, $realcnt, 1);
+ if ($dbg_adv_apw) {
+ print "APW: chunks<$#chunks> linenr<$linenr> endln<$endln> level<$level>\n";
+ print "APW: <<$chunks[1][0]>><<$chunks[1][1]>>\n"
+ if $#chunks >= 1;
+ }
+ if ($#chunks >= 0 && $level == 0) {
+ my $seen = 0;
+ my $herectx = $here . "\n";
+ my $ln = $linenr - 1;
+ for my $chunk (@chunks) {
+ my ($cond, $block) = @{$chunk};
+
+ # If the condition carries leading newlines, then count those as offsets.
+ my ($whitespace) = ($cond =~ /^((?:\s*\n[+-])*\s*)/s);
+ my $offset = statement_rawlines($whitespace) - 1;
+
+ #print "COND<$cond> whitespace<$whitespace> offset<$offset>\n";
+
+ # We have looked at and allowed this specific line.
+ $suppress_ifbraces{$ln + $offset} = 1;
+
+ $herectx .= "$rawlines[$ln + $offset]\n[...]\n";
+ $ln += statement_rawlines($block) - 1;
+
+ substr($block, 0, length($cond), '');
+
+ my $spaced_block = $block;
+ $spaced_block =~ s/\n\+/ /g;
+
+ $seen++ if ($spaced_block =~ /^\s*\{/);
+
+ print "APW: cond<$cond> block<$block> allowed<$allowed>\n"
+ if $dbg_adv_apw;
+ if (statement_lines($cond) > 1) {
+ print "APW: ALLOWED: cond<$cond>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ if ($block =~/\b(?:if|for|while)\b/) {
+ print "APW: ALLOWED: block<$block>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ if (statement_block_size($block) > 1) {
+ print "APW: ALLOWED: lines block<$block>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ }
+ $allowed=1; # disable for now.
+ if ($seen != ($#chunks + 1) && !$allowed) {
+ ERROR("braces {} are necessary for all arms of this statement\n" . $herectx);
+ }
+ }
+ }
+ if (!defined $suppress_ifbraces{$linenr - 1} &&
+ $line =~ /\b(if|while|for|else)\b/ &&
+ $line !~ /\#\s*if/ &&
+ $line !~ /\#\s*else/) {
+ my $allowed = 0;
+
+ # Check the pre-context.
+ if (substr($line, 0, $-[0]) =~ /(\}\s*)$/) {
+ my $pre = $1;
+
+ if ($line !~ /else/) {
+ print "APW: ALLOWED: pre<$pre> line<$line>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ }
+
+ my ($level, $endln, @chunks) =
+ ctx_statement_full($linenr, $realcnt, $-[0]);
+
+ # Check the condition.
+ my ($cond, $block) = @{$chunks[0]};
+ print "CHECKING<$linenr> cond<$cond> block<$block>\n"
+ if $dbg_adv_checking;
+ if (defined $cond) {
+ substr($block, 0, length($cond), '');
+ }
+ if (statement_lines($cond) > 1) {
+ print "APW: ALLOWED: cond<$cond>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ if ($block =~/\b(?:if|for|while)\b/) {
+ print "APW: ALLOWED: block<$block>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ if (statement_block_size($block) > 1) {
+ print "APW: ALLOWED: lines block<$block>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ # Check the post-context.
+ if (defined $chunks[1]) {
+ my ($cond, $block) = @{$chunks[1]};
+ if (defined $cond) {
+ substr($block, 0, length($cond), '');
+ }
+ if ($block =~ /^\s*\{/) {
+ print "APW: ALLOWED: chunk-1 block<$block>\n"
+ if $dbg_adv_apw;
+ $allowed = 1;
+ }
+ }
+ print "DCS: level=$level block<$block> allowed=$allowed\n"
+ if $dbg_adv_dcs;
+ if ($level == 0 && $block !~ /^\s*\{/ && !$allowed) {
+ my $herectx = $here . "\n";;
+ my $cnt = statement_rawlines($block);
+
+ for (my $n = 0; $n < $cnt; $n++) {
+ $herectx .= raw_line($linenr, $n) . "\n";;
+ }
+
+ WARN("braces {} are encouraged even for single statement blocks\n" . $herectx);
+ }
+ }
+
+# warn about #if 0
+ if ($line =~ /^.\s*\#\s*if\s+0\b/) {
+ ERROR("if this code is redundant consider removing it\n" .
+ $herecurr);
+ }
+
+# Check that the storage class is at the beginning of a declaration
+ if ($line =~ /\b$Storage\b/ && $line !~ /^.\s*$Storage\b/) {
+ ERROR("storage class should be at the beginning of the declaration\n" . $herecurr)
+ }
+
+# check the location of the inline attribute, that it is between
+# storage class and type.
+ if ($line =~ /\b$Type\s+$Inline\b/ ||
+ $line =~ /\b$Inline\s+$Storage\b/) {
+ ERROR("inline keyword should sit between storage class and type\n" . $herecurr);
+ }
+
+# check for sizeof(&)
+ if ($line =~ /\bsizeof\s*\(\s*\&/) {
+ ERROR("sizeof(& should be avoided\n" . $herecurr);
+ }
+
+# check for new externs in .c files.
+ if ($realfile =~ /\.c$/ && defined $stat &&
+ $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)
+ {
+ my $function_name = $1;
+ my $paren_space = $2;
+
+ my $s = $stat;
+ if (defined $cond) {
+ substr($s, 0, length($cond), '');
+ }
+ if ($s =~ /^\s*;/ &&
+ $function_name ne 'uninitialized_var')
+ {
+ ERROR("externs should be avoided in .c files\n" . $herecurr);
+ }
+
+ if ($paren_space =~ /\n/) {
+ ERROR("arguments for function declarations should follow identifier\n" . $herecurr);
+ }
+
+ } elsif ($realfile =~ /\.c$/ && defined $stat &&
+ $stat =~ /^.\s*extern\s+/)
+ {
+ ERROR("externs should be avoided in .c files\n" . $herecurr);
+ }
+
+# check for gcc specific __FUNCTION__
+ if ($line =~ /__FUNCTION__/) {
+ ERROR("__func__ should be used instead of gcc specific __FUNCTION__\n" . $herecurr);
+ }
+
+# recommend sigaction over signal for portability, when establishing a handler
+ if ($line =~ /\bsignal\s*\(/ && !($line =~ /SIG_(?:IGN|DFL)/)) {
+ ERROR("use sigaction to establish signal handlers; signal is not portable\n" . $herecurr);
+ }
+
+# format strings checks
+ my $string;
+ while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
+ $string = substr($rawline, $-[1], $+[1] - $-[1]);
+ $string =~ s/%%/__/g;
+ # check for %L{u,d,i} in strings
+ if ($string =~ /(?<!%)%L[udi]/) {
+ ERROR("\%Ld/%Lu are not-standard C, use %lld/%llu\n" . $herecurr);
+ }
+ }
+
+ # Continue checking for error messages that contains newlines. This
+ # check handles cases where string literals are spread over multiple lines.
+ # Example:
+ # error_report("Error msg line #1"
+ # "Error msg line #2\n");
+ my $quoted_newline_regex = qr{\+\s*\".*\\n.*\"};
+ my $continued_str_literal = qr{\+\s*\".*\"};
+
+ if ($rawline =~ /$quoted_newline_regex/) {
+ # Backtrack to first line that does not contain only a quoted literal
+ # and assume that it is the start of the statement.
+ my $i = $linenr - 2;
+
+ while (($i >= 0) & $rawlines[$i] =~ /$continued_str_literal/) {
+ $i--;
+ }
+ }
+
+ }
+
+ # If we have no input at all, then there is nothing to report on
+ # so just keep quiet.
+ if ($#rawlines == -1) {
+ return 1;
+ }
+
+ # In mailback mode only produce a report in the negative, for
+ # things that appear to be patches.
+ if ($mailback && ($clean == 1 || !$is_patch)) {
+ return 1;
+ }
+
+ # This is not a patch, and we are are in 'no-patch' mode so
+ # just keep quiet.
+ if (!$chk_patch && !$is_patch) {
+ return 1;
+ }
+
+ if (!$is_patch && $filename !~ /cover-letter\.patch$/) {
+ ERROR("Does not appear to be a unified-diff format patch\n");
+ }
+
+ print report_dump();
+ if ($summary && !($clean == 1 && $quiet == 1)) {
+ print "$filename " if ($summary_file);
+ print "total: $cnt_error errors, $cnt_warn warnings, " .
+ "$cnt_lines lines checked\n";
+ print "\n" if ($quiet == 0);
+ }
+
+ if ($quiet == 0) {
+ # If there were whitespace errors which cleanpatch can fix
+ # then suggest that.
+# if ($rpt_cleaners) {
+# print "NOTE: whitespace errors detected, you may wish to use scripts/cleanpatch or\n";
+# print " scripts/cleanfile\n\n";
+# }
+ }
+
+ if ($clean == 1 && $quiet == 0) {
+ print "$vname has no obvious style problems and is ready for submission.\n"
+ }
+
+ return ($no_warnings ? $clean : $cnt_error == 0);
+}
diff --git a/tools/build/cross-build/Makefile b/tools/build/cross-build/Makefile
index 69c1e9c49844..3c51dae472ef 100644
--- a/tools/build/cross-build/Makefile
+++ b/tools/build/cross-build/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
NO_OBJ=
SCRIPTS= date.sh hostname.sh
BINDIR= /usr/bin
diff --git a/tools/build/cross-build/capsicum_stubs.c b/tools/build/cross-build/capsicum_stubs.c
index 227ef3496b09..75eff8534fc4 100644
--- a/tools/build/cross-build/capsicum_stubs.c
+++ b/tools/build/cross-build/capsicum_stubs.c
@@ -33,8 +33,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/capsicum.h>
diff --git a/tools/build/cross-build/date.sh b/tools/build/cross-build/date.sh
index f697a7f0cd54..4e8cd150147a 100644
--- a/tools/build/cross-build/date.sh
+++ b/tools/build/cross-build/date.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
exec /bin/date -r0 "$@"
diff --git a/tools/build/cross-build/fake_chflags/Makefile b/tools/build/cross-build/fake_chflags/Makefile
index c4559be0e778..f5b867d50939 100644
--- a/tools/build/cross-build/fake_chflags/Makefile
+++ b/tools/build/cross-build/fake_chflags/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
NO_OBJ=
SCRIPTS= chflags
BINDIR= /usr/bin
diff --git a/tools/build/cross-build/fake_chflags/chflags b/tools/build/cross-build/fake_chflags/chflags
index cd9becba5112..7baa4712636f 100644
--- a/tools/build/cross-build/fake_chflags/chflags
+++ b/tools/build/cross-build/fake_chflags/chflags
@@ -34,7 +34,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# chflags doesn't exist on Linux, just skip the calls for now
# TODO: we could also create a wrapper that calls `chattr +i` for `chflags schg`, etc
diff --git a/tools/build/cross-build/fake_sysctl.c b/tools/build/cross-build/fake_sysctl.c
index 289fb83652f6..c4e40ebb9e72 100644
--- a/tools/build/cross-build/fake_sysctl.c
+++ b/tools/build/cross-build/fake_sysctl.c
@@ -35,8 +35,6 @@
*/
/* This file contains wrappers for sysctls used during build/install */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/sysctl.h>
#include <err.h>
@@ -55,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/fgetln_fallback.c b/tools/build/cross-build/fgetln_fallback.c
index 9bd202c125da..000cd38ce596 100644
--- a/tools/build/cross-build/fgetln_fallback.c
+++ b/tools/build/cross-build/fgetln_fallback.c
@@ -26,7 +26,7 @@
*/
#include <stdio.h>
-#include <sys/cdefs.h>
+
#include <sys/types.h>
#include <string.h>
diff --git a/tools/build/cross-build/hostname.sh b/tools/build/cross-build/hostname.sh
index 855741beca85..24aaeb8e2a29 100644
--- a/tools/build/cross-build/hostname.sh
+++ b/tools/build/cross-build/hostname.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
echo dummy
diff --git a/tools/build/cross-build/include/common/db.h b/tools/build/cross-build/include/common/db.h
index 8e429abc792f..ac00000cda6e 100644
--- a/tools/build/cross-build/include/common/db.h
+++ b/tools/build/cross-build/include/common/db.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/exterr.h b/tools/build/cross-build/include/common/exterr.h
new file mode 100644
index 000000000000..62482841c7b2
--- /dev/null
+++ b/tools/build/cross-build/include/common/exterr.h
@@ -0,0 +1,14 @@
+#ifndef _EXTERR_H_
+#define _EXTERR_H_
+
+#include <sys/types.h>
+
+static inline int
+uexterr_gettext(char *buf, size_t bufsz)
+{
+ if (bufsz > 0)
+ buf[0] = '\0';
+ return (0);
+}
+
+#endif
diff --git a/tools/build/cross-build/include/common/getopt.h b/tools/build/cross-build/include/common/getopt.h
index 621011d69c1c..9db08597351e 100644
--- a/tools/build/cross-build/include/common/getopt.h
+++ b/tools/build/cross-build/include/common/getopt.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/grp.h b/tools/build/cross-build/include/common/grp.h
index 750e1e9a49f6..b666209d928b 100644
--- a/tools/build/cross-build/include/common/grp.h
+++ b/tools/build/cross-build/include/common/grp.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/libcasper.h b/tools/build/cross-build/include/common/libcasper.h
index dd5afa9a0573..b41b212d3085 100644
--- a/tools/build/cross-build/include/common/libcasper.h
+++ b/tools/build/cross-build/include/common/libcasper.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/libelf.h b/tools/build/cross-build/include/common/libelf.h
index 5bbd34777648..be77a08eb3e2 100644
--- a/tools/build/cross-build/include/common/libelf.h
+++ b/tools/build/cross-build/include/common/libelf.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
/* Needed to get opensolaris stuff to compile */
diff --git a/tools/build/cross-build/include/common/libutil.h b/tools/build/cross-build/include/common/libutil.h
index 5e4e0422d3b2..3cda32379965 100644
--- a/tools/build/cross-build/include/common/libutil.h
+++ b/tools/build/cross-build/include/common/libutil.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
@@ -41,4 +39,4 @@
#include_next <libutil.h>
#endif
-int expand_number(const char *_buf, uint64_t *_num);
+int expand_number(const char *_buf, int64_t *_num);
diff --git a/tools/build/cross-build/include/common/machine/endian.h b/tools/build/cross-build/include/common/machine/endian.h
index d70b60ca39f7..8a05f636d1f7 100644
--- a/tools/build/cross-build/include/common/machine/endian.h
+++ b/tools/build/cross-build/include/common/machine/endian.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#if __has_include_next(<machine/endian.h>)
#include_next <machine/endian.h>
diff --git a/tools/build/cross-build/include/common/netconfig.h b/tools/build/cross-build/include/common/netconfig.h
index 95f3bb94d2f4..c592b4076bb6 100644
--- a/tools/build/cross-build/include/common/netconfig.h
+++ b/tools/build/cross-build/include/common/netconfig.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/netdb.h b/tools/build/cross-build/include/common/netdb.h
index 350174ebde9b..b2cf0b6fb305 100644
--- a/tools/build/cross-build/include/common/netdb.h
+++ b/tools/build/cross-build/include/common/netdb.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <netdb.h>
diff --git a/tools/build/cross-build/include/common/osreldate.h b/tools/build/cross-build/include/common/osreldate.h
index 801cc5e41210..714351e9cb59 100644
--- a/tools/build/cross-build/include/common/osreldate.h
+++ b/tools/build/cross-build/include/common/osreldate.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/pwd.h b/tools/build/cross-build/include/common/pwd.h
index 109119e9bfe3..a34955a63780 100644
--- a/tools/build/cross-build/include/common/pwd.h
+++ b/tools/build/cross-build/include/common/pwd.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/ssp/ssp.h b/tools/build/cross-build/include/common/ssp/ssp.h
new file mode 100644
index 000000000000..2d8b43235baf
--- /dev/null
+++ b/tools/build/cross-build/include/common/ssp/ssp.h
@@ -0,0 +1,34 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * 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
+ * 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.
+ */
+
+#ifndef _SSP_SSP_H_
+#define _SSP_SSP_H_
+
+#define __ssp_real_(fun) fun
+#define __ssp_real(fun) __ssp_real_(fun)
+
+#endif
diff --git a/tools/build/cross-build/include/common/string.h b/tools/build/cross-build/include/common/string.h
index 8a33f4d4ff19..56909e9bca0a 100644
--- a/tools/build/cross-build/include/common/string.h
+++ b/tools/build/cross-build/include/common/string.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/sys/_iovec.h b/tools/build/cross-build/include/common/sys/_iovec.h
index 89f09c7c7d27..35b290bd3dbf 100644
--- a/tools/build/cross-build/include/common/sys/_iovec.h
+++ b/tools/build/cross-build/include/common/sys/_iovec.h
@@ -32,7 +32,5 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/sys/_null.h b/tools/build/cross-build/include/common/sys/_null.h
index 5b65c8c3ebf8..8be996a8fbde 100644
--- a/tools/build/cross-build/include/common/sys/_null.h
+++ b/tools/build/cross-build/include/common/sys/_null.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/sys/_types.h b/tools/build/cross-build/include/common/sys/_types.h
index 129eaf52357d..dc1b76f25063 100644
--- a/tools/build/cross-build/include/common/sys/_types.h
+++ b/tools/build/cross-build/include/common/sys/_types.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
@@ -47,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/common/sys/cdefs.h b/tools/build/cross-build/include/common/sys/cdefs.h
index d69e4369e01e..3f9b7866141f 100644
--- a/tools/build/cross-build/include/common/sys/cdefs.h
+++ b/tools/build/cross-build/include/common/sys/cdefs.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
/* musl libc does not provide a sys/cdefs.h header */
@@ -123,6 +121,12 @@
#endif
#endif
+#ifndef __WEAK
+#ifdef __ELF__
+#define __WEAK(sym) __asm__(".weak " __XSTRING(sym))
+#endif
+#endif
+
/* Some files built as part of the bootstrap libegacy use these macros, but
* since we aren't actually building libc.so, we can defined them to be empty */
#ifndef __sym_compat
@@ -251,6 +255,13 @@
#define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var))
#endif
+#ifndef __nosanitizeaddress
+#if __has_attribute(no_sanitize) && defined(__clang__)
+#define __nosanitizeaddress __attribute__((no_sanitize("address")))
+#else
+#define __nosanitizeaddress
+#endif
+#endif
/* Expose all declarations when using FreeBSD headers */
#define __POSIX_VISIBLE 200809
diff --git a/tools/build/cross-build/include/common/sys/ctype.h b/tools/build/cross-build/include/common/sys/ctype.h
index 68a4f9807ca7..ed218e19ffc7 100644
--- a/tools/build/cross-build/include/common/sys/ctype.h
+++ b/tools/build/cross-build/include/common/sys/ctype.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include <ctype.h>
diff --git a/tools/build/cross-build/include/common/sys/exterrvar.h b/tools/build/cross-build/include/common/sys/exterrvar.h
new file mode 100644
index 000000000000..0ba821aadef2
--- /dev/null
+++ b/tools/build/cross-build/include/common/sys/exterrvar.h
@@ -0,0 +1,6 @@
+#ifndef _SYS_EXTERRVAR_H_
+#define _SYS_EXTERRVAR_H_
+
+#define UEXTERROR_MAXLEN 256
+
+#endif
diff --git a/tools/build/cross-build/include/common/sys/limits.h b/tools/build/cross-build/include/common/sys/limits.h
index 01fbe99c863a..04c422ed426f 100644
--- a/tools/build/cross-build/include/common/sys/limits.h
+++ b/tools/build/cross-build/include/common/sys/limits.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <limits.h>
#if __has_include_next(<sys/limits.h>)
diff --git a/tools/build/cross-build/include/common/sys/mman.h b/tools/build/cross-build/include/common/sys/mman.h
index f3ce83fd1df8..de8657aff304 100644
--- a/tools/build/cross-build/include/common/sys/mman.h
+++ b/tools/build/cross-build/include/common/sys/mman.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/sys/param.h b/tools/build/cross-build/include/common/sys/param.h
index f672b1067d46..c09cd9865a93 100644
--- a/tools/build/cross-build/include/common/sys/param.h
+++ b/tools/build/cross-build/include/common/sys/param.h
@@ -35,8 +35,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/sys/stdint.h b/tools/build/cross-build/include/common/sys/stdint.h
index 98f7010b308d..a97052244343 100644
--- a/tools/build/cross-build/include/common/sys/stdint.h
+++ b/tools/build/cross-build/include/common/sys/stdint.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#if defined(__has_include_next) && __has_include_next(<sys/stdint.h>)
diff --git a/tools/build/cross-build/include/common/sys/sysctl.h b/tools/build/cross-build/include/common/sys/sysctl.h
index 6d6f5438c557..3d7ecc7a5b02 100644
--- a/tools/build/cross-build/include/common/sys/sysctl.h
+++ b/tools/build/cross-build/include/common/sys/sysctl.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/common/sys/types.h b/tools/build/cross-build/include/common/sys/types.h
index 044ca6bed4f8..18b607ed82d2 100644
--- a/tools/build/cross-build/include/common/sys/types.h
+++ b/tools/build/cross-build/include/common/sys/types.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <sys/types.h>
@@ -68,4 +66,8 @@ typedef unsigned long cap_ioctl_t;
struct cap_rights;
typedef struct cap_rights cap_rights_t;
+
+/* Needed for bitstring */
+#include <sys/bitcount.h>
+
#endif
diff --git a/tools/build/cross-build/include/common/unistd.h b/tools/build/cross-build/include/common/unistd.h
index fbcc0cc31795..19efc57005bd 100644
--- a/tools/build/cross-build/include/common/unistd.h
+++ b/tools/build/cross-build/include/common/unistd.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <unistd.h>
diff --git a/tools/build/cross-build/include/linux/__unused_workaround_end.h b/tools/build/cross-build/include/linux/__unused_workaround_end.h
index eaf3d3a8f836..728e25ead9b0 100644
--- a/tools/build/cross-build/include/linux/__unused_workaround_end.h
+++ b/tools/build/cross-build/include/linux/__unused_workaround_end.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* Used to workaround system headers with struct members called __unused */
#ifdef __unused_undefd
diff --git a/tools/build/cross-build/include/linux/__unused_workaround_start.h b/tools/build/cross-build/include/linux/__unused_workaround_start.h
index 2f0ab003ad24..e01d5fc9971d 100644
--- a/tools/build/cross-build/include/linux/__unused_workaround_start.h
+++ b/tools/build/cross-build/include/linux/__unused_workaround_start.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* Used to workaround system headers with struct members called __unused */
#ifdef __unused
diff --git a/tools/build/cross-build/include/linux/__used_workaround_end.h b/tools/build/cross-build/include/linux/__used_workaround_end.h
index 99cc6c16ac26..d38c5711a30d 100644
--- a/tools/build/cross-build/include/linux/__used_workaround_end.h
+++ b/tools/build/cross-build/include/linux/__used_workaround_end.h
@@ -33,8 +33,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* Used to workaround system headers with struct members called __used */
#ifdef __used_undefd
diff --git a/tools/build/cross-build/include/linux/__used_workaround_start.h b/tools/build/cross-build/include/linux/__used_workaround_start.h
index ee290ce30169..c81e9c67248e 100644
--- a/tools/build/cross-build/include/linux/__used_workaround_start.h
+++ b/tools/build/cross-build/include/linux/__used_workaround_start.h
@@ -33,8 +33,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* Used to workaround system headers with struct members called __used */
#ifdef __used
diff --git a/tools/build/cross-build/include/linux/ctype.h b/tools/build/cross-build/include/linux/ctype.h
index fbd30580d1a9..afacebfbad91 100644
--- a/tools/build/cross-build/include/linux/ctype.h
+++ b/tools/build/cross-build/include/linux/ctype.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <ctype.h>
diff --git a/tools/build/cross-build/include/linux/endian.h b/tools/build/cross-build/include/linux/endian.h
index 92adf095636a..f4fc6855b398 100644
--- a/tools/build/cross-build/include/linux/endian.h
+++ b/tools/build/cross-build/include/linux/endian.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <endian.h>
diff --git a/tools/build/cross-build/include/linux/errno.h b/tools/build/cross-build/include/linux/errno.h
index 37f166aebabf..b05c6bb02aae 100644
--- a/tools/build/cross-build/include/linux/errno.h
+++ b/tools/build/cross-build/include/linux/errno.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <errno.h>
diff --git a/tools/build/cross-build/include/linux/fcntl.h b/tools/build/cross-build/include/linux/fcntl.h
index 4fa169d4ed4c..e5718ce5e3ed 100644
--- a/tools/build/cross-build/include/linux/fcntl.h
+++ b/tools/build/cross-build/include/linux/fcntl.h
@@ -35,8 +35,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
@@ -46,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/libutil.h b/tools/build/cross-build/include/linux/libutil.h
index 7a448babb9a8..a1d6508be82d 100644
--- a/tools/build/cross-build/include/linux/libutil.h
+++ b/tools/build/cross-build/include/linux/libutil.h
@@ -32,12 +32,9 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
-#include <sys/cdefs.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -49,7 +46,7 @@ struct pidfh;
__BEGIN_DECLS
int humanize_number(char *buf, size_t len, int64_t bytes, const char *suffix,
int scale, int flags);
-int expand_number(const char *_buf, uint64_t *_num);
+int expand_number(const char *_buf, int64_t *_num);
int flopen(const char *_path, int _flags, ...);
int flopenat(int dirfd, const char *path, int flags, ...);
diff --git a/tools/build/cross-build/include/linux/limits.h b/tools/build/cross-build/include/linux/limits.h
index 833b49b49348..4631cabb1104 100644
--- a/tools/build/cross-build/include/linux/limits.h
+++ b/tools/build/cross-build/include/linux/limits.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#if __has_include_next(<limits.h>)
#include_next <limits.h>
@@ -47,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 */
@@ -85,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/nbtool_config.h b/tools/build/cross-build/include/linux/nbtool_config.h
index a3c39308a62f..d99b39739a48 100644
--- a/tools/build/cross-build/include/linux/nbtool_config.h
+++ b/tools/build/cross-build/include/linux/nbtool_config.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/netdb.h b/tools/build/cross-build/include/linux/netdb.h
index e1832cca3efa..2680b4736982 100644
--- a/tools/build/cross-build/include/linux/netdb.h
+++ b/tools/build/cross-build/include/linux/netdb.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/regex.h b/tools/build/cross-build/include/linux/regex.h
index a27053750c3e..858e26386653 100644
--- a/tools/build/cross-build/include/linux/regex.h
+++ b/tools/build/cross-build/include/linux/regex.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <regex.h>
diff --git a/tools/build/cross-build/include/linux/resolv.h b/tools/build/cross-build/include/linux/resolv.h
index 99652b78825b..4d075a05ffa5 100644
--- a/tools/build/cross-build/include/linux/resolv.h
+++ b/tools/build/cross-build/include/linux/resolv.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <resolv.h>
diff --git a/tools/build/cross-build/include/linux/signal.h b/tools/build/cross-build/include/linux/signal.h
index 5d4cdcd19fab..177c7f6169f0 100644
--- a/tools/build/cross-build/include/linux/signal.h
+++ b/tools/build/cross-build/include/linux/signal.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/spawn.h b/tools/build/cross-build/include/linux/spawn.h
index 873add3275af..a9b9f8de97a0 100644
--- a/tools/build/cross-build/include/linux/spawn.h
+++ b/tools/build/cross-build/include/linux/spawn.h
@@ -36,8 +36,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/stdio.h b/tools/build/cross-build/include/linux/stdio.h
index c5aa893b320c..202b65508aeb 100644
--- a/tools/build/cross-build/include/linux/stdio.h
+++ b/tools/build/cross-build/include/linux/stdio.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* No #pragam once since glibc can include this multiple times */
diff --git a/tools/build/cross-build/include/linux/stdlib.h b/tools/build/cross-build/include/linux/stdlib.h
index 1e559ce1158c..66ac46239a41 100644
--- a/tools/build/cross-build/include/linux/stdlib.h
+++ b/tools/build/cross-build/include/linux/stdlib.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include <sys/cdefs.h>
diff --git a/tools/build/cross-build/include/linux/string.h b/tools/build/cross-build/include/linux/string.h
index 1d173974a5bd..b6d2fe488d40 100644
--- a/tools/build/cross-build/include/linux/string.h
+++ b/tools/build/cross-build/include/linux/string.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
@@ -46,11 +44,14 @@
*/
#include <stdlib.h>
-#include <sys/cdefs.h>
+#include <sys/types.h>
__BEGIN_DECLS
+#if !defined(__GLIBC__) || \
+ (defined(__GLIBC__) && (!__GLIBC_PREREQ(2, 38) || !defined(_GNU_SOURCE)))
size_t strlcpy(char *dst, const char *src, size_t siz);
size_t strlcat(char *dst, const char *src, size_t siz);
+#endif
char *strnstr(const char *str, const char *find, size_t str_len);
void strmode(mode_t mode, char *str);
diff --git a/tools/build/cross-build/fflags.c b/tools/build/cross-build/include/linux/strings.h
index f1d23c3637b6..36e451f277eb 100644
--- a/tools/build/cross-build/fflags.c
+++ b/tools/build/cross-build/include/linux/strings.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 2022 Jessica Clarke <jrtc27@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -36,27 +24,15 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+#pragma once
+#include <sys/cdefs.h>
+
+#include_next <strings.h>
-#include <string.h>
-#include <unistd.h>
+__BEGIN_DECLS
-char *
-fflagstostr(u_long flags __unused)
-{
- return strdup("");
-}
+int fls(int) __pure2;
+int flsl(long) __pure2;
+int flsll(long long) __pure2;
-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 */
-}
+__END_DECLS
diff --git a/tools/build/cross-build/include/linux/sys/disk.h b/tools/build/cross-build/include/linux/sys/disk.h
index d4dc46768756..b0cd0ef16609 100644
--- a/tools/build/cross-build/include/linux/sys/disk.h
+++ b/tools/build/cross-build/include/linux/sys/disk.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include <sys/mount.h>
diff --git a/tools/build/cross-build/include/linux/sys/endian.h b/tools/build/cross-build/include/linux/sys/endian.h
index 0c068a4793d5..085b3616c742 100644
--- a/tools/build/cross-build/include/linux/sys/endian.h
+++ b/tools/build/cross-build/include/linux/sys/endian.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/sys/filio.h b/tools/build/cross-build/include/linux/sys/filio.h
index 9433875ca5ec..7f9ffb8f92a2 100644
--- a/tools/build/cross-build/include/linux/sys/filio.h
+++ b/tools/build/cross-build/include/linux/sys/filio.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/sys/ioccom.h b/tools/build/cross-build/include/linux/sys/ioccom.h
index a70e20312940..021377abe471 100644
--- a/tools/build/cross-build/include/linux/sys/ioccom.h
+++ b/tools/build/cross-build/include/linux/sys/ioccom.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include <sys/ioctl.h>
diff --git a/tools/build/cross-build/include/linux/sys/mount.h b/tools/build/cross-build/include/linux/sys/mount.h
index be66e8ca5b62..edd8e29da91a 100644
--- a/tools/build/cross-build/include/linux/sys/mount.h
+++ b/tools/build/cross-build/include/linux/sys/mount.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <sys/mount.h>
diff --git a/tools/build/cross-build/include/linux/sys/param.h b/tools/build/cross-build/include/linux/sys/param.h
index 305d2767ae7e..3b29b9ef8430 100644
--- a/tools/build/cross-build/include/linux/sys/param.h
+++ b/tools/build/cross-build/include/linux/sys/param.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <sys/param.h>
@@ -47,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 72c6bb950ce9..1a69e127c2e1 100644
--- a/tools/build/cross-build/include/linux/sys/stat.h
+++ b/tools/build/cross-build/include/linux/sys/stat.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
/*
@@ -60,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/time.h b/tools/build/cross-build/include/linux/sys/time.h
index 1c86bb9ba85d..d78dd401545a 100644
--- a/tools/build/cross-build/include/linux/sys/time.h
+++ b/tools/build/cross-build/include/linux/sys/time.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/sys/ttycom.h b/tools/build/cross-build/include/linux/sys/ttycom.h
index 8a1f7cf7c3d6..8f2cbf121e42 100644
--- a/tools/build/cross-build/include/linux/sys/ttycom.h
+++ b/tools/build/cross-build/include/linux/sys/ttycom.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/sys/types.h b/tools/build/cross-build/include/linux/sys/types.h
index b3bb61c1f1fd..2e09cbb62271 100644
--- a/tools/build/cross-build/include/linux/sys/types.h
+++ b/tools/build/cross-build/include/linux/sys/types.h
@@ -32,13 +32,39 @@
* 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.
- *
- * $FreeBSD$
*/
#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/linux/sys/ucred.h b/tools/build/cross-build/include/linux/sys/ucred.h
index 89f09c7c7d27..35b290bd3dbf 100644
--- a/tools/build/cross-build/include/linux/sys/ucred.h
+++ b/tools/build/cross-build/include/linux/sys/ucred.h
@@ -32,7 +32,5 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/linux/time.h b/tools/build/cross-build/include/linux/time.h
index 189f1f266916..bc3c4c81021b 100644
--- a/tools/build/cross-build/include/linux/time.h
+++ b/tools/build/cross-build/include/linux/time.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
/* We can't use #pragma once here since at least the version of time.h
* shipped with glibc must be included more than once with different
diff --git a/tools/build/cross-build/include/linux/unistd.h b/tools/build/cross-build/include/linux/unistd.h
index f518df2ac9ae..ce179724e17b 100644
--- a/tools/build/cross-build/include/linux/unistd.h
+++ b/tools/build/cross-build/include/linux/unistd.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
@@ -41,17 +39,9 @@
/* Ensure that unistd.h pulls in getopt */
#define __USE_POSIX2
#endif
-/*
- * Before version 2.25, glibc's unistd.h would define the POSIX subset of
- * getopt.h by defining __need_getopt, including getopt.h (which would
- * disable the header guard) and then undefining it so later including
- * getopt.h explicitly would define the extensions. However, we wrap getopt,
- * and so the wrapper's #pragma once breaks that. Thus getopt.h must be
- * included before the real unistd.h to ensure we get all the extensions.
- */
-#include <getopt.h>
#include_next <unistd.h>
#include <fcntl.h>
+#include <getopt.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
diff --git a/tools/build/cross-build/include/linux/wctype.h b/tools/build/cross-build/include/linux/wctype.h
index 8c4a44d8bbe3..044a34fbd16b 100644
--- a/tools/build/cross-build/include/linux/wctype.h
+++ b/tools/build/cross-build/include/linux/wctype.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <wctype.h>
diff --git a/tools/build/cross-build/include/mac/endian.h b/tools/build/cross-build/include/mac/endian.h
new file mode 100644
index 000000000000..11788044f05a
--- /dev/null
+++ b/tools/build/cross-build/include/mac/endian.h
@@ -0,0 +1,7 @@
+/*
+ * Copyright (c) 2025 John Baldwin <jhb@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <sys/endian.h>
diff --git a/tools/build/cross-build/include/mac/libutil.h b/tools/build/cross-build/include/mac/libutil.h
index 5812e58ed39f..2f654986a06f 100644
--- a/tools/build/cross-build/include/mac/libutil.h
+++ b/tools/build/cross-build/include/mac/libutil.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/mac/nbtool_config.h b/tools/build/cross-build/include/mac/nbtool_config.h
index cb1bf1a0b655..db5903b9adf3 100644
--- a/tools/build/cross-build/include/mac/nbtool_config.h
+++ b/tools/build/cross-build/include/mac/nbtool_config.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/mac/signal.h b/tools/build/cross-build/include/mac/signal.h
index cdcaab75f326..9c2ccca21da2 100644
--- a/tools/build/cross-build/include/mac/signal.h
+++ b/tools/build/cross-build/include/mac/signal.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <signal.h>
diff --git a/tools/build/cross-build/include/mac/stdlib.h b/tools/build/cross-build/include/mac/stdlib.h
index 314ae0d1dca6..7e84039d29ad 100644
--- a/tools/build/cross-build/include/mac/stdlib.h
+++ b/tools/build/cross-build/include/mac/stdlib.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <stdlib.h>
@@ -42,6 +40,7 @@ __BEGIN_DECLS
int rpmatch(const char *response);
+char *secure_getenv(const char *name);
long long strtonum(const char *numstr, long long minval, long long maxval,
const char **errstrp);
diff --git a/tools/build/cross-build/include/mac/string.h b/tools/build/cross-build/include/mac/string.h
index 3f9ec4935a37..58464f1f9834 100644
--- a/tools/build/cross-build/include/mac/string.h
+++ b/tools/build/cross-build/include/mac/string.h
@@ -32,17 +32,18 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#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 fd14a7836792..8d39fc39f087 100644
--- a/tools/build/cross-build/include/mac/sys/_types.h
+++ b/tools/build/cross-build/include/mac/sys/_types.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <sys/_types.h>
@@ -43,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/include/mac/sys/endian.h b/tools/build/cross-build/include/mac/sys/endian.h
index f64a6d47beaf..64f548e6dc50 100644
--- a/tools/build/cross-build/include/mac/sys/endian.h
+++ b/tools/build/cross-build/include/mac/sys/endian.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/include/mac/sys/linker_set.h b/tools/build/cross-build/include/mac/sys/linker_set.h
new file mode 100644
index 000000000000..c0b81747c78b
--- /dev/null
+++ b/tools/build/cross-build/include/mac/sys/linker_set.h
@@ -0,0 +1,140 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 1999 John D. Polstra
+ * Copyright (c) 1999,2001 Peter Wemm <peter@FreeBSD.org>
+ * All rights reserved.
+ * Copyright (c) 2023 Jessica Clarke <jrtc27@FreeBSD.org>
+ *
+ * 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.
+ */
+
+#ifndef _SYS_LINKER_SET_H_
+#define _SYS_LINKER_SET_H_
+
+#include <mach-o/dyld.h>
+#include <mach-o/getsect.h>
+
+/*
+ * The following macros are used to declare global sets of objects, which
+ * are collected by the linker into a `linker_set' as defined below.
+ * For Mach-O, this is done by constructing a separate section for each set.
+ */
+
+#define __MAKE_SET_CONST const
+
+/*
+ * Private macros, not to be used outside this header file.
+ */
+
+/*
+ * The userspace address sanitizer inserts redzones around global variables,
+ * violating the assumption that linker set elements are packed.
+ */
+#define __NOASAN __nosanitizeaddress
+
+#define __MAKE_SET_QV(set, sym, qv) \
+ static void const * qv \
+ __NOASAN \
+ __set_##set##_sym_##sym __section("__DATA,set_" #set) \
+ __used = &(sym)
+#define __MAKE_SET(set, sym) __MAKE_SET_QV(set, sym, __MAKE_SET_CONST)
+
+static inline __pure2 uint8_t *
+__set_getsectiondata(const char *segname, const char *sectname,
+ unsigned long *size)
+{
+ uint32_t image_count, image_index;
+ const struct mach_header *mh;
+ uint8_t *ret;
+
+ image_count = _dyld_image_count();
+ for (image_index = 0; image_index < image_count; ++image_index) {
+ mh = _dyld_get_image_header(image_index);
+ if (mh == NULL)
+ continue;
+
+ ret = getsectiondata((const struct mach_header_64 *)mh,
+ segname, sectname, size);
+ if (ret != NULL)
+ return (ret);
+ }
+
+ return (NULL);
+}
+
+#define __SET_RANGE(set) ({ \
+ unsigned long __set_size; \
+ char *__set_data; \
+ __set_data = __set_getsectiondata("__DATA", \
+ "set_" #set, &__set_size); \
+ (struct { \
+ __CONCAT(__typeof_set_,set) **begin; \
+ __CONCAT(__typeof_set_,set) **limit; \
+ }){ \
+ .begin = (__CONCAT(__typeof_set_,set) **)__set_data, \
+ .limit = (__CONCAT(__typeof_set_,set) **)(__set_data + \
+ __set_size) \
+ }; \
+})
+
+/*
+ * Public macros.
+ */
+#define TEXT_SET(set, sym) __MAKE_SET(set, sym)
+#define DATA_SET(set, sym) __MAKE_SET(set, sym)
+#define DATA_WSET(set, sym) __MAKE_SET_QV(set, sym, )
+#define BSS_SET(set, sym) __MAKE_SET(set, sym)
+#define ABS_SET(set, sym) __MAKE_SET(set, sym)
+#define SET_ENTRY(set, sym) __MAKE_SET(set, sym)
+
+/*
+ * Initialize before referring to a given linker set.
+ */
+#define SET_DECLARE(set, ptype) \
+ typedef ptype __CONCAT(__typeof_set_,set)
+
+#define SET_BEGIN(set) \
+ (__SET_RANGE(set).begin)
+#define SET_LIMIT(set) \
+ (__SET_RANGE(set).limit)
+
+/*
+ * Iterate over all the elements of a set.
+ *
+ * Sets always contain addresses of things, and "pvar" points to words
+ * containing those addresses. Thus is must be declared as "type **pvar",
+ * and the address of each set item is obtained inside the loop by "*pvar".
+ */
+#define SET_FOREACH(pvar, set) \
+ for (pvar = SET_BEGIN(set); pvar < SET_LIMIT(set); pvar++)
+
+#define SET_ITEM(set, i) \
+ ((SET_BEGIN(set))[i])
+
+/*
+ * Provide a count of the items in a set.
+ */
+#define SET_COUNT(set) \
+ (SET_LIMIT(set) - SET_BEGIN(set))
+
+#endif /* _SYS_LINKER_SET_H_ */
diff --git a/tools/build/cross-build/include/mac/sys/stat.h b/tools/build/cross-build/include/mac/sys/stat.h
index 0ff5ac929d06..95a9d0ce4764 100644
--- a/tools/build/cross-build/include/mac/sys/stat.h
+++ b/tools/build/cross-build/include/mac/sys/stat.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include_next <sys/stat.h>
diff --git a/tools/build/cross-build/include/mac/sys/time.h b/tools/build/cross-build/include/mac/sys/time.h
index 094764b8888c..6a0526c552e1 100644
--- a/tools/build/cross-build/include/mac/sys/time.h
+++ b/tools/build/cross-build/include/mac/sys/time.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
#include_next <sys/time.h>
diff --git a/tools/build/cross-build/include/mac/unistd.h b/tools/build/cross-build/include/mac/unistd.h
index 3a4010e0d013..8af6af93821e 100644
--- a/tools/build/cross-build/include/mac/unistd.h
+++ b/tools/build/cross-build/include/mac/unistd.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/cross-build/mkimg/Makefile b/tools/build/cross-build/mkimg/Makefile
index 932f6150f118..cbef4a9f36ea 100644
--- a/tools/build/cross-build/mkimg/Makefile
+++ b/tools/build/cross-build/mkimg/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
# allow building mkimg as a host tool.
MKIMG_SRC = ${SRCTOP}/usr.bin/mkimg
diff --git a/tools/build/cross-build/mkimg/Makefile.depend b/tools/build/cross-build/mkimg/Makefile.depend
index f80275d86ab1..11aba52f82cf 100644
--- a/tools/build/cross-build/mkimg/Makefile.depend
+++ b/tools/build/cross-build/mkimg/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
diff --git a/tools/build/cross-build/progname.c b/tools/build/cross-build/progname.c
index 645227df48d7..b7163f23fb2a 100644
--- a/tools/build/cross-build/progname.c
+++ b/tools/build/cross-build/progname.c
@@ -34,11 +34,8 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdlib.h>
-#ifdef __GLIBC__
extern const char *__progname;
const char *
getprogname(void)
@@ -50,4 +47,3 @@ setprogname(const char *progname)
{
__progname = progname;
}
-#endif /* __GLIBC__ */
diff --git a/tools/build/cross-build/secure_getenv.c b/tools/build/cross-build/secure_getenv.c
new file mode 100644
index 000000000000..466035f31a40
--- /dev/null
+++ b/tools/build/cross-build/secure_getenv.c
@@ -0,0 +1,16 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023 Mark Johnston <markj@FreeBSD.org>
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+
+char *
+secure_getenv(const char *name)
+{
+ if (issetugid() != 0)
+ return (NULL);
+ return (getenv(name));
+}
diff --git a/tools/build/depend-cleanup.sh b/tools/build/depend-cleanup.sh
index 39b06b45d45f..22bf34439758 100755
--- a/tools/build/depend-cleanup.sh
+++ b/tools/build/depend-cleanup.sh
@@ -1,12 +1,17 @@
#!/bin/sh
#
-# $FreeBSD$
#
# 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
@@ -16,77 +21,452 @@
# 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 -fv`: 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 -fv "$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
+#
+# We also have a big hammer at the top of the tree, .clean_build_epoch, to be
+# used in severe cases where we can't surgically remove just the parts that
+# need rebuilt. This should be used sparingly.
+
+set -e
+set -u
+
+warn()
+{
+ echo "$(basename "$0"):" "$@" >&2
+}
+
+err()
+{
+ warn "$@"
+ exit 1
+}
+
+usage()
+{
+ echo "usage: $(basename $0) [-v] [-n] objtop srctop" >&2
+}
+
+VERBOSE=
+PRETEND=
+while getopts vn o; do
+ case "$o" in
+ v)
+ VERBOSE=1
+ ;;
+ n)
+ PRETEND=1
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+done
+shift $((OPTIND-1))
+
+if [ $# -ne 2 ]; then
+ usage
+ exit 1
+fi
OBJTOP=$1
+shift
+SRCTOP=$1
+shift
+
if [ ! -d "$OBJTOP" ]; then
- echo "usage: $(basename $0) objtop" >&2
- exit 1
+ err "$OBJTOP: Not a directory"
+fi
+
+if [ ! -d "$SRCTOP" -o ! -f "$SRCTOP/Makefile.inc1" ]; then
+ err "$SRCTOP: Not the root of a src tree"
+fi
+
+: ${CLEANMK=""}
+if [ -n "$CLEANMK" ]; then
+ if [ -z "${MAKE+set}" ]; then
+ err "MAKE not set"
+ fi
+fi
+
+if [ -z "${MACHINE+set}" ]; then
+ err "MACHINE not set"
fi
+if [ -z "${MACHINE_ARCH+set}" ]; then
+ err "MACHINE_ARCH not set"
+fi
+
+if [ -z "${ALL_libcompats+set}" ]; then
+ err "ALL_libcompats not set"
+fi
+
+run()
+{
+ if [ "$VERBOSE" ]; then
+ echo "$@"
+ fi
+ if ! [ "$PRETEND" ]; then
+ "$@"
+ fi
+}
+
+# Clean the depend and object files for a given source file if the
+# depend file matches a regex (which defaults to the source file
+# name). This is typically used if a file was renamed, especially if
+# only its extension was changed (e.g. from .c to .cc).
+#
# $1 directory
# $2 source filename w/o extension
# $3 source extension
+# $4 optional regex for egrep -w
clean_dep()
{
- if [ -e "$OBJTOP"/$1/.depend.$2.pico ] && \
- egrep -qw "$2\.$3" "$OBJTOP"/$1/.depend.$2.pico; then \
- echo "Removing stale dependencies and objects for $2.$3"; \
- rm -f \
- "$OBJTOP"/$1/.depend.$2.* \
- "$OBJTOP"/$1/$2.*o \
- "$OBJTOP"/obj-lib32/$1/.depend.$2.* \
- "$OBJTOP"/obj-lib32/$1/$2.*o
+ for libcompat in "" $ALL_libcompats; do
+ dirprfx=${libcompat:+obj-lib${libcompat}/}
+ 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 -fv \
+ "$OBJTOP"/$dirprfx$1/.depend.$2.* \
+ "$OBJTOP"/$dirprfx$1/$2.*o
+ fi
+ done
+}
+
+# Clean the object file for a given source file if it exists and
+# matches a regex. This is typically used if a a change in CFLAGS or
+# similar caused a change in the generated code without a change in
+# the sources.
+#
+# $1 directory
+# $2 source filename w/o extension
+# $3 source extension
+# $4 regex for egrep -w
+clean_obj()
+{
+ for libcompat in "" $ALL_libcompats; do
+ dirprfx=${libcompat:+obj-lib${libcompat}/}
+ if strings "$OBJTOP"/$dirprfx$1/$2.*o 2>/dev/null | egrep -qw "${4}"; then
+ echo "Removing stale ${libcompat:+lib${libcompat} }objects for $2.$3"
+ run rm -fv \
+ "$OBJTOP"/$dirprfx$1/$2.*o
+ fi
+ done
+}
+
+extract_epoch()
+{
+ [ -s "$1" ] || return 0
+
+ awk 'int($1) > 0 { epoch = $1 } END { print epoch }' "$1"
+}
+
+clean_world()
+{
+ local buildepoch="$1"
+
+ # The caller may set CLEANMK in the environment to make target(s) that
+ # should be invoked instead of just destroying everything. This is
+ # generally used after legacy/bootstrap tools to avoid over-cleansing
+ # since we're generally in the temporary tree's ancestor.
+ if [ -n "$CLEANMK" ]; then
+ echo "Cleaning up the object tree"
+ run $MAKE -C "$SRCTOP" -f "$SRCTOP"/Makefile.inc1 $CLEANMK
+ else
+ echo "Cleaning up the temporary build tree"
+ run rm -rf "$OBJTOP"
+ fi
+
+ # We don't assume that all callers will have grabbed the build epoch, so
+ # we'll do it here as needed. This will be useful if we add other
+ # non-epoch reasons to force clean.
+ if [ -z "$buildepoch" ]; then
+ buildepoch=$(extract_epoch "$SRCTOP"/.clean_build_epoch)
+ fi
+
+ mkdir -p "$OBJTOP"
+ echo "$buildepoch" > "$OBJTOP"/.clean_build_epoch
+
+ exit 0
+}
+
+check_epoch()
+{
+ local srcepoch objepoch
+
+ srcepoch=$(extract_epoch "$SRCTOP"/.clean_build_epoch)
+ if [ -z "$srcepoch" ]; then
+ err "Malformed .clean_build_epoch; please validate the last line"
+ fi
+
+ # We don't discriminate between the varying degrees of difference
+ # between epochs. If it went backwards we could be bisecting across
+ # epochs, in which case the original need to clean likely still stands.
+ objepoch=$(extract_epoch "$OBJTOP"/.clean_build_epoch)
+ if [ -z "$objepoch" ] || [ "$srcepoch" -ne "$objepoch" ]; then
+ if [ "$VERBOSE" ]; then
+ echo "Cleaning - src epoch: $srcepoch, objdir epoch: ${objepoch:-unknown}"
+ fi
+
+ clean_world "$srcepoch"
+ # NORETURN
fi
}
+check_epoch
+
+#### Typical dependency cleanup begins here.
+
# 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"
- rm -rf "$OBJTOP"/cddl "$OBJTOP"/obj-lib32/cddl
+# 20220326 fbc002cb72d2 move from bcmp.c to bcmp.S
+if [ "$MACHINE_ARCH" = "amd64" ]; then
+ clean_dep lib/libc bcmp c
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"
- rm -rf "$OBJTOP"/rescue/rescue
+# 20220524 68fe988a40ca kqueue_test binary replaced shell script
+if stat "$OBJTOP"/tests/sys/kqueue/libkqueue/*kqtest* \
+ "$OBJTOP"/tests/sys/kqueue/libkqueue/.depend.kqtest* >/dev/null 2>&1; then
+ echo "Removing old kqtest"
+ run rm -fv "$OBJTOP"/tests/sys/kqueue/libkqueue/.depend.* \
+ "$OBJTOP"/tests/sys/kqueue/libkqueue/*
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"
- rm -rf "$OBJTOP"/sbin/pfctl/.depend.pf_ruleset.o
+# 20221115 42d10b1b56f2 move from rs.c to rs.cc
+clean_dep usr.bin/rs rs c
+
+# 20230110 bc42155199b5 usr.sbin/zic/zic -> usr.sbin/zic
+if [ -d "$OBJTOP"/usr.sbin/zic/zic ] ; then
+ echo "Removing old zic directory"
+ run rm -rf "$OBJTOP"/usr.sbin/zic/zic
fi
-# 20210108 821aa63a0940 non-widechar version of ncurses removed
-if [ -e "$OBJTOP"/lib/ncurses/ncursesw ]; then
- echo "Removing stale ncurses objects"
- rm -rf "$OBJTOP"/lib/ncurses "$OBJTOP"/obj-lib32/lib/ncurses
+# 20230208 29c5f8bf9a01 move from mkmakefile.c to mkmakefile.cc
+clean_dep usr.sbin/config mkmakefile c
+# 20230209 83d7ed8af3d9 convert to main.cc and mkoptions.cc
+clean_dep usr.sbin/config main c
+clean_dep usr.sbin/config mkoptions c
+
+# 20230401 54579376c05e kqueue1 from syscall to C wrapper
+clean_dep lib/libc kqueue1 S
+
+# 20230623 b077aed33b7b OpenSSL 3.0 update
+if [ -f "$OBJTOP"/secure/lib/libcrypto/aria.o ]; then
+ echo "Removing old OpenSSL 1.1.1 tree"
+ for libcompat in "" $ALL_libcompats; do
+ dirprfx=${libcompat:+obj-lib${libcompat}/}
+ run rm -rf "$OBJTOP"/${dirprfx}secure/lib/libcrypto \
+ "$OBJTOP"/${dirprfx}secure/lib/libssl
+ 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
+# 20230714 ee8b0c436d72 replace ffs/fls implementations with clang builtins
+clean_dep lib/libc ffs S
+clean_dep lib/libc ffsl S
+clean_dep lib/libc ffsll S
+clean_dep lib/libc fls S
+clean_dep lib/libc flsl S
+clean_dep lib/libc flsll 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"
- rm -f "$OBJTOP"/lib/libc++/libc++.ld
+# 20230815 28f6c2f29280 GoogleTest update
+if [ -e "$OBJTOP"/tests/sys/fs/fusefs/mockfs.o ] && \
+ grep -q '_ZN7testing8internal18g_linked_ptr_mutexE' "$OBJTOP"/tests/sys/fs/fusefs/mockfs.o; then
+ echo "Removing stale fusefs GoogleTest objects"
+ run rm -rf "$OBJTOP"/tests/sys/fs/fusefs
fi
-# 20220326 fbc002cb72d2 move from bcmp.c to bcmp.S
-if [ "$MACHINE_ARCH" = "amd64" ]; then
- clean_dep lib/libc bcmp c
+# 20231031 0527c9bdc718 Remove forward compat ino64 stuff
+clean_dep lib/libc fstat c
+clean_dep lib/libc fstatat c
+clean_dep lib/libc fstatfs c
+clean_dep lib/libc getdirentries c
+clean_dep lib/libc getfsstat c
+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 ]; 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 'nvme_util.o' "$OBJTOP"/rescue/rescue/rescue.mk; then
+ echo "removing rescue.mk without nvme_util.o"
+ run rm -fv "$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 -fv \
+ "$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 -fv "$p"/*.inc
+ fi
+fi
+
+# 20241025 cb5e41b16083 Unbundle hash functions fom lib/libcrypt
+clean_obj lib/libcrypt crypt-md5 c __MD5Init
+clean_obj lib/libcrypt crypt-nthash c __MD4Init
+clean_obj lib/libcrypt crypt-sha256 c __SHA256Init
+clean_obj lib/libcrypt crypt-sha512 c __SHA512Init
+
+# 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 -fv "$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 -fv "$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 -fv "$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 -fv "$OBJTOP"/lib/libc/memchr.S
+
+ # 20250110 3863fec1ce2d add strlen SIMD implementation
+ ALL_libcompats= clean_dep lib/libc strlen S arm-optimized-routines
+ run rm -fv "$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 -fv "$OBJTOP"/lib/clang/libllvm/libllvm.a
+fi
+if [ -f "$OBJTOP"/lib/clang/libclang/libclang.a ]; then
+ echo "Removing old static libclang library"
+ run rm -fv "$OBJTOP"/lib/clang/libclang/libclang.a
+fi
+if [ -f "$OBJTOP"/lib/clang/liblldb/liblldb.a ]; then
+ echo "Removing old static liblldb library"
+ run rm -fv "$OBJTOP"/lib/clang/liblldb/liblldb.a
+fi
+
+# 20250813 4f766afc1ca0 tcopy converted to C++
+clean_dep usr.bin/tcopy tcopy c
diff --git a/tools/build/dummy.c b/tools/build/dummy.c
index b656a0305a97..8aff747b3f7e 100644
--- a/tools/build/dummy.c
+++ b/tools/build/dummy.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*
* Empty file to keep linker happy.
*/
diff --git a/tools/build/fcntl.h b/tools/build/fcntl.h
index 3f88a4bf73d3..6aaf3eef2804 100644
--- a/tools/build/fcntl.h
+++ b/tools/build/fcntl.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _LEGACY_SYS_FCNTL_H_
diff --git a/tools/build/freebsd-yeet.pl b/tools/build/freebsd-yeet.pl
new file mode 100755
index 000000000000..33466a5c1094
--- /dev/null
+++ b/tools/build/freebsd-yeet.pl
@@ -0,0 +1,147 @@
+#!/usr/local/bin/perl
+#
+# Remove almost all of the $ FreeBSD $ tags in the tree.
+#
+# Copyright (c) 2023, Warner Losh
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Needs p5-File-Lib package
+# Caveat Emptor
+#
+use strict;
+use warnings;
+use File::Find;
+
+sub skip_list
+{
+ my $fn = $_[0];
+
+ if ($fn =~ m=^./contrib/=) {
+ return 1;
+ }
+ if ($fn =~ m=^./sys/contrib/=) {
+ return 1;
+ }
+ if ($fn =~ m=^./cddl/contrib/=) {
+ return 1;
+ }
+ if ($fn =~ m=^./crypto/=) {
+ return 1;
+ }
+ if ($fn =~ m=^./.git/=) {
+ return 1;
+ }
+ if ($fn =~ m=~$=) {
+ return 1;
+ }
+ return 0;
+}
+
+my $pretty;
+my $pattern;
+my $repl;
+my $count;
+my $syshash;
+my $hash;
+
+sub do_one
+{
+ $pretty = $_[0];
+ $pattern = $_[1];
+ $repl = "";
+ $repl = $_[2];
+ $syshash = $_[3];
+ $hash = $_[4];
+ $count = 0;
+
+ sub findfiles
+ {
+ return unless -f;
+ my $fn="$File::Find::name";
+ return if skip_list($fn);
+ open my $fh, '<', $_ or die "Can't open $fn: $!\n";
+ local $/;
+ my $file = <$fh>;
+ close $fh;
+ my $len = length($file);
+
+ $file =~ s=$pattern=$repl=gm;
+ my $len2 = length($file);
+ return if $len2 == $len;
+ print "$pretty: $fn\n";
+ open my $fhw, '>', $_ or die "Can't write $fn: $!\n";
+ print $fhw $file;
+ close $fhw;
+ $count++;
+ }
+
+ $count = 0;
+ find({ wanted => \&findfiles, }, './sys');
+ if ($count > 0) {
+ print "Changed $pretty\n";
+ system("git commit -a -m'sys: Remove \$FreeBSD\$: $pretty\n\nRemove /$pattern/\n\nSimilar commit in current:\n(cherry picked from commit $syshash)'");
+ }
+ $count = 0;
+ find({ wanted => \&findfiles, }, '.');
+ if ($count > 0) {
+ print "Changed $pretty\n";
+ system("git commit -a -m'Remove \$FreeBSD\$: $pretty\n\nRemove /$pattern/\n\nSimilar commit in main:\n(cherry picked from commit $hash)'");
+ }
+}
+
+# These are the commits to head
+# 9524e274b548 Remove $FreeBSD$: one-line xdr pattern
+# 26a58599a09a Remove $FreeBSD$: one-line forth tag
+# 401ab69cff8f Remove $FreeBSD$: one-line ps tag
+# 6ef644f5889a Remove $FreeBSD$: one-line lua tag
+# 9636a14538f5 Remove $FreeBSD$: two-line lua tag
+# 8c99d94c900f sys: Remove $FreeBSD$: two-line lua tag
+# ae992a336e8d Remove $FreeBSD$: one-line catalog
+# 2063df147163 sys: Remove $FreeBSD$: one-line catalog
+# 05248206f720 Remove $FreeBSD$: one-line bare tag
+# 78d146160dc5 sys: Remove $FreeBSD$: one-line bare tag
+# b2c76c41be32 Remove $FreeBSD$: one-line nroff pattern
+# fa9896e082a1 Remove $FreeBSD$: two-line nroff pattern
+# 9e7892125655 sys: Remove $FreeBSD$: two-line nroff pattern
+# d0b2dbfa0ecf Remove $FreeBSD$: one-line sh pattern
+# 031beb4e239b sys: Remove $FreeBSD$: one-line sh pattern
+# b1cfcffa89e6 Remove $FreeBSD$: one-line .S pattern
+# d4bf8003ee42 sys: Remove $FreeBSD$: one-line .S pattern
+# c8573564095b Remove $FreeBSD$: alt one-line .c pattern
+# da5432eda807 Remove $FreeBSD$: alt two-line .c pattern
+# 1d386b48a555 Remove $FreeBSD$: one-line .c pattern
+# 685dc743dc3b sys: Remove $FreeBSD$: one-line .c pattern
+# e5d258c9e599 Remove $FreeBSD$: two-line .c pattern
+# dfc016587a1e sys: Remove $FreeBSD$: two-line .c pattern
+# 2a63c3be1582 Remove $FreeBSD$: one-line .c comment pattern
+# 71625ec9ad2a sys: Remove $FreeBSD$: one-line .c comment pattern
+# 42b388439bd3 Remove $FreeBSD$: one-line .h pattern
+# 2ff63af9b88c sys: Remove $FreeBSD$: one-line .h pattern
+# b3e7694832e8 Remove $FreeBSD$: two-line .h pattern
+# 95ee2897e98f sys: Remove $FreeBSD$: two-line .h pattern
+# d54a7d337331 Remove $FreeBSD$: one-line m4 tag
+# 82a265ad9bad sys: Remove $FreeBSD$: sound driver version
+
+# Note: Do two line before one line
+# commit message pattern replacement or '' sys hash src hash
+do_one("sound driver version", 'SND_DECLARE_FILE\("\$FreeBSD\$"\);', 'SND_DECLARE_FILE("");', '', '82a265ad9bad');
+do_one("one-line m4 tag", '^dnl\s*\$FreeBSD\$.*$\n', '', '', 'd54a7d337331');
+do_one("two-line .h pattern", '^\s*\*\n \*\s+\$FreeBSD\$$\n', '', '95ee2897e98f', 'b3e7694832e8');
+do_one("one-line .h pattern", '^\s*\*+\s*\$FreeBSD\$.*$\n', '', '2ff63af9b88c', '42b388439bd3');
+do_one("one-line .c comment pattern", '^/[*/]\s*\$FreeBSD\$.*\n', '', '71625ec9ad2a', '2a63c3be1582');
+do_one("two-line .c pattern", '^#include\s+<sys/cdefs.h>.*$\n\s+__FBSDID\("\$FreeBSD\$"\);\n','', 'dfc016587a1e', 'e5d258c9e599');
+do_one("one-line .c pattern", '^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n', '', '685dc743dc3b', '1d386b48a555');
+do_one("alt two-line .c pattern", '^\s*__RCSID\("\$FreeBSD\$"\);\n\n', '', '', 'da5432eda807');
+do_one("alt one-line .c pattern", '^\s*__RCSID\("\$FreeBSD\$"\);\n', '', '', 'c8573564095b');
+do_one("one-line .S pattern", '^\s\.(asciz|ident)\s+\"\$FreeBSD\$\".*\n', '', 'd4bf8003ee42', 'b1cfcffa89e6');
+do_one("one-line sh pattern", '^\s*#[#!]?\s*\$FreeBSD\$.*$\n', '', '031beb4e239b', 'd0b2dbfa0ecf');
+do_one("two-line nroff pattern", '^\.\\\\"\n\.\\\\"\s*\$FreeBSD\$$\n', '', '9e7892125655', 'fa9896e082a1');
+do_one("one-line nroff pattern", '^\.\\\\"\s*\$FreeBSD\$$\n', '', '', 'b2c76c41be32');
+do_one("one-line bare tag", '^\s*\$FreeBSD\$$\n', '', '78d146160dc5', '05248206f720');
+do_one("one-line catalog", '^\s*\$\s*\$FreeBSD\$$\n', '', '2063df147163', 'ae992a336e8d');
+do_one("two-line lua tag", '^--\n--\s*\$FreeBSD\$.*$\n', '', '8c99d94c900f', '9636a14538f5');
+do_one("one-line lua tag", '^--\s*\$FreeBSD\$.*$\n', '', '', '6ef644f5889a');
+do_one("one-line ps tag", '^%\s*RCSID:\s*\$FreeBSD\$.*$\n', '', '', '401ab69cff8f');
+do_one("one-line forth tag", '^\\\\[\s*]*\$FreeBSD\$.*$\n', '', '', '26a58599a09a');
+do_one("one-line xdr pattern", '^\s*%\s*__FBSDID\("\$FreeBSD\$"\);?\s*\n', '', '', '9524e274b548');
+exit;
diff --git a/tools/build/fspacectl.c b/tools/build/fspacectl.c
index 13abca23a318..478539a8798c 100644
--- a/tools/build/fspacectl.c
+++ b/tools/build/fspacectl.c
@@ -27,8 +27,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <errno.h>
#include <fcntl.h>
diff --git a/tools/build/futimens.c b/tools/build/futimens.c
index 7d1cae701e97..d00f94d342ae 100644
--- a/tools/build/futimens.c
+++ b/tools/build/futimens.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/stat.h>
#include <errno.h>
diff --git a/tools/build/libc-bootstrap/libc_private.h b/tools/build/libc-bootstrap/libc_private.h
index febee84ac24e..5b8e20d930d1 100644
--- a/tools/build/libc-bootstrap/libc_private.h
+++ b/tools/build/libc-bootstrap/libc_private.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/libc-bootstrap/namespace.h b/tools/build/libc-bootstrap/namespace.h
index 2c242f88072d..e453d1f0a796 100644
--- a/tools/build/libc-bootstrap/namespace.h
+++ b/tools/build/libc-bootstrap/namespace.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/libc-bootstrap/un-namespace.h b/tools/build/libc-bootstrap/un-namespace.h
index f08ab41ea543..4972077cb45b 100644
--- a/tools/build/libc-bootstrap/un-namespace.h
+++ b/tools/build/libc-bootstrap/un-namespace.h
@@ -32,8 +32,6 @@
* 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.
- *
- * $FreeBSD$
*/
#pragma once
diff --git a/tools/build/make.py b/tools/build/make.py
index 799ea89b74b3..2f36a3e23e32 100755
--- a/tools/build/make.py
+++ b/tools/build/make.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OKAY
# -
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Alex Richardson <arichardson@FreeBSD.org>
#
@@ -26,7 +26,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# This script makes it easier to build on non-FreeBSD systems by bootstrapping
@@ -35,12 +34,24 @@
# On FreeBSD you can use it the same way as just calling make:
# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py buildworld -DWITH_FOO`
#
-# On Linux and MacOS you will either need to set XCC/XCXX/XLD/XCPP or pass
-# --cross-bindir to specify the path to the cross-compiler bindir:
-# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py
-# --cross-bindir=/path/to/cross/compiler buildworld -DWITH_FOO TARGET=foo
-# TARGET_ARCH=bar`
+# On Linux and MacOS you may need to explicitly indicate the cross toolchain
+# to use. You can do this by:
+# - setting XCC/XCXX/XLD/XCPP to the paths of each tool
+# - using --cross-bindir to specify the path to the cross-compiler bindir:
+# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py
+# --cross-bindir=/path/to/cross/compiler buildworld -DWITH_FOO TARGET=foo
+# TARGET_ARCH=bar`
+# - using --cross-toolchain to specify the package containing the cross-compiler
+# (MacOS only currently):
+# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py
+# --cross-toolchain=llvm@NN buildworld -DWITH_FOO TARGET=foo
+# TARGET_ARCH=bar`
+#
+# On MacOS, this tool will search for an llvm toolchain installed via brew and
+# use it as the cross toolchain if an explicit toolchain is not specified.
+
import argparse
+import functools
import os
import shlex
import shutil
@@ -49,43 +60,96 @@ import sys
from pathlib import Path
+# List of targets that are independent of TARGET/TARGET_ARCH and thus do not
+# need them to be set. Keep in the same order as Makefile documents them (if
+# they are documented).
+mach_indep_targets = [
+ "cleanuniverse",
+ "universe",
+ "universe-toolchain",
+ "tinderbox",
+ "worlds",
+ "kernels",
+ "kernel-toolchains",
+ "targets",
+ "toolchains",
+ "makeman",
+ "sysent",
+]
+
+
def run(cmd, **kwargs):
cmd = list(map(str, cmd)) # convert all Path objects to str
debug("Running", cmd)
subprocess.check_call(cmd, **kwargs)
+# Always bootstraps in order to control bmake's config to ensure compatibility
def bootstrap_bmake(source_root, objdir_prefix):
bmake_source_dir = source_root / "contrib/bmake"
bmake_build_dir = objdir_prefix / "bmake-build"
bmake_install_dir = objdir_prefix / "bmake-install"
bmake_binary = bmake_install_dir / "bin/bmake"
+ bmake_config = bmake_install_dir / ".make-py-config"
- if (bmake_install_dir / "bin/bmake").exists():
+ bmake_source_version = subprocess.run([
+ "sh", "-c", ". \"$0\"/VERSION; echo $_MAKE_VERSION", bmake_source_dir],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.strip()
+ try:
+ bmake_source_version = int(bmake_source_version)
+ except ValueError:
+ sys.exit("Invalid source bmake version '" + bmake_source_version + "'")
+
+ bmake_installed_version = 0
+ if bmake_binary.exists():
+ bmake_installed_version = subprocess.run([
+ bmake_binary, "-r", "-f", "/dev/null", "-V", "MAKE_VERSION"],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.strip()
+ try:
+ bmake_installed_version = int(bmake_installed_version.strip())
+ except ValueError:
+ print("Invalid installed bmake version '" +
+ bmake_installed_version + "', treating as not present")
+
+ configure_args = [
+ "--with-default-sys-path=.../share/mk:" +
+ str(bmake_install_dir / "share/mk"),
+ "--with-machine=amd64", # TODO? "--with-machine-arch=amd64",
+ "--without-filemon", "--prefix=" + str(bmake_install_dir)]
+
+ configure_args_str = ' '.join([shlex.quote(x) for x in configure_args])
+ if bmake_config.exists():
+ last_configure_args_str = bmake_config.read_text()
+ else:
+ last_configure_args_str = ""
+
+ debug("Source bmake version: " + str(bmake_source_version))
+ debug("Installed bmake version: " + str(bmake_installed_version))
+ debug("Configure args: " + configure_args_str)
+ debug("Last configure args: " + last_configure_args_str)
+
+ if bmake_installed_version == bmake_source_version and \
+ configure_args_str == last_configure_args_str:
return bmake_binary
+
print("Bootstrapping bmake...")
- # TODO: check if the host system bmake is new enough and use that instead
- if not bmake_build_dir.exists():
- os.makedirs(str(bmake_build_dir))
+ if bmake_build_dir.exists():
+ shutil.rmtree(str(bmake_build_dir))
+ if bmake_install_dir.exists():
+ shutil.rmtree(str(bmake_install_dir))
+
+ os.makedirs(str(bmake_build_dir))
+
env = os.environ.copy()
global new_env_vars
env.update(new_env_vars)
- if sys.platform.startswith("linux"):
- # Work around the deleted file bmake/missing/sys/cdefs.h
- # TODO: bmake should keep the compat sys/cdefs.h
- env["CFLAGS"] = "-I{src}/tools/build/cross-build/include/common " \
- "-I{src}/tools/build/cross-build/include/linux " \
- "-D_GNU_SOURCE=1".format(src=source_root)
- configure_args = [
- "--with-default-sys-path=" + str(bmake_install_dir / "share/mk"),
- "--with-machine=amd64", # TODO? "--with-machine-arch=amd64",
- "--without-filemon", "--prefix=" + str(bmake_install_dir)]
run(["sh", bmake_source_dir / "boot-strap"] + configure_args,
cwd=str(bmake_build_dir), env=env)
-
run(["sh", bmake_source_dir / "boot-strap", "op=install"] + configure_args,
cwd=str(bmake_build_dir))
+ bmake_config.write_text(configure_args_str)
+
print("Finished bootstrapping bmake...")
return bmake_binary
@@ -107,7 +171,8 @@ def check_required_make_env_var(varname, binary_name, bindir):
return
if not bindir:
sys.exit("Could not infer value for $" + varname + ". Either set $" +
- varname + " or pass --cross-bindir=/cross/compiler/dir/bin")
+ varname + " or pass --cross-bindir=/cross/compiler/dir/bin" +
+ " or --cross-toolchain=<package>")
# try to infer the path to the tool
guess = os.path.join(bindir, binary_name)
if not os.path.isfile(guess):
@@ -119,28 +184,52 @@ def check_required_make_env_var(varname, binary_name, bindir):
if parsed_args.debug:
run([guess, "--version"])
+
def check_xtool_make_env_var(varname, binary_name):
# Avoid calling brew --prefix on macOS if all variables are already set:
if os.getenv(varname):
return
global parsed_args
if parsed_args.cross_bindir is None:
- parsed_args.cross_bindir = default_cross_toolchain()
+ cross_bindir = cross_toolchain_bindir(binary_name,
+ parsed_args.cross_toolchain)
+ else:
+ cross_bindir = parsed_args.cross_bindir
return check_required_make_env_var(varname, binary_name,
- parsed_args.cross_bindir)
+ cross_bindir)
+
+
+@functools.cache
+def brew_prefix(package: str) -> str:
+ path = subprocess.run(["brew", "--prefix", package], stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE).stdout.strip()
+ debug("Inferred", package, "dir as", path)
+ return path.decode("utf-8")
+
+def binary_path(bindir: str, binary_name: str) -> "Optional[str]":
+ try:
+ if bindir and Path(bindir, "bin", binary_name).exists():
+ return str(Path(bindir, "bin"))
+ except OSError:
+ pass
+ return None
-def default_cross_toolchain():
+def cross_toolchain_bindir(binary_name: str, package: "Optional[str]") -> str:
# default to homebrew-installed clang on MacOS if available
if sys.platform.startswith("darwin"):
if shutil.which("brew"):
- llvm_dir = subprocess.run(["brew", "--prefix", "llvm"],
- capture_output=True).stdout.strip()
- debug("Inferred LLVM dir as", llvm_dir)
- try:
- if llvm_dir and Path(llvm_dir.decode("utf-8"), "bin").exists():
- return str(Path(llvm_dir.decode("utf-8"), "bin"))
- except OSError:
- return None
+ if not package:
+ package = "llvm"
+ bindir = binary_path(brew_prefix(package), binary_name)
+ if bindir:
+ return bindir
+
+ # brew installs lld as a separate package for LLVM 19 and later
+ if binary_name == "ld.lld":
+ lld_package = package.replace("llvm", "lld")
+ bindir = binary_path(brew_prefix(lld_package), binary_name)
+ if bindir:
+ return bindir
return None
@@ -160,6 +249,10 @@ if __name__ == "__main__":
help="Compiler type to find in --cross-bindir (only "
"needed if XCC/XCPP/XLD are not set)"
"Note: using CC is currently highly experimental")
+ parser.add_argument("--cross-toolchain", default=None,
+ help="Name of package containing cc/c++/cpp/ld to build "
+ "target binaries (only needed if XCC/XCPP/XLD "
+ "are not set)")
parser.add_argument("--host-compiler-type", choices=("cc", "clang", "gcc"),
default="cc",
help="Compiler type to find in --host-bindir (only "
@@ -188,14 +281,14 @@ 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
new_env_vars = {}
if not sys.platform.startswith("freebsd"):
if not is_make_var_set("TARGET") or not is_make_var_set("TARGET_ARCH"):
- if "universe" not in sys.argv and "tinderbox" not in sys.argv:
+ if not set(sys.argv).intersection(set(mach_indep_targets)):
sys.exit("TARGET= and TARGET_ARCH= must be set explicitly "
"when building on non-FreeBSD")
if not parsed_args.bootstrap_toolchain:
@@ -256,7 +349,7 @@ if __name__ == "__main__":
and not is_make_var_set("WITHOUT_CLEAN")):
# Avoid accidentally deleting all of the build tree and wasting lots of
# time cleaning directories instead of just doing a rm -rf ${.OBJDIR}
- want_clean = input("You did not set -DWITHOUT_CLEAN/--clean/--no-clean."
+ want_clean = input("You did not set -DWITHOUT_CLEAN/--(no-)clean."
" Did you really mean to do a clean build? y/[N] ")
if not want_clean.lower().startswith("y"):
bmake_args.append("-DWITHOUT_CLEAN")
@@ -267,5 +360,13 @@ if __name__ == "__main__":
shlex.quote(s) for s in [str(bmake_binary)] + bmake_args)
debug("Running `env ", env_cmd_str, " ", make_cmd_str, "`", sep="")
os.environ.update(new_env_vars)
+
+ # Fedora defines bash function wrapper for some shell commands and this
+ # makes 'which <command>' return the function's source code instead of
+ # the binary path. Undefine it to restore the original behavior.
+ os.unsetenv("BASH_FUNC_which%%")
+ os.unsetenv("BASH_FUNC_ml%%")
+ os.unsetenv("BASH_FUNC_module%%")
+
os.chdir(str(source_root))
os.execv(str(bmake_binary), [str(bmake_binary)] + bmake_args)
diff --git a/tools/build/make_check/Makefile b/tools/build/make_check/Makefile
index c9273c3efd85..74e28ad1c9f5 100644
--- a/tools/build/make_check/Makefile
+++ b/tools/build/make_check/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.MAKE.MODE= normal
# Failure is handled by the invoker, don't kill other legs of a parallel build.
@@ -59,10 +57,6 @@ all:
@echo "ok 14 shell # Test shell detected no regression."
@${SMAKE} shell_1 || ${SMAKE} failure
@echo "ok 15 shell_1 # Test shell_1 detected no regression."
-.if !defined(.PARSEDIR)
- @${SMAKE} shell_2 || ${SMAKE} failure
- @echo "ok 16 shell_2 # Test shell_2 detected no regression."
-.endif
.if make(C_check)
C_check:
@@ -102,7 +96,6 @@ notdef:
.endif
.if make(modifiers)
-.if defined(.PARSEDIR)
# check if bmake can expand plain variables
.MAKE.EXPAND_VARIABLES= yes
x!= ${SMAKE} -V .CURDIR:H
@@ -110,21 +103,6 @@ modifiers:
.if ${.CURDIR:H} != "$x"
@false
.endif
-.else
-# See if make(1) supports the C modifier.
-modifiers: dollarV
- @if ${SMAKE} -V .CURDIR:C/.// 2>&1 >/dev/null | \
- grep -q "Unknown modifier 'C'"; then \
- false; \
- fi
-
-# check that make -V '${VAR}' works
-V_expn != V_OK=ok ${SMAKE} -r -f /dev/null -V '$${V_OK}'
-dollarV:
-.if ${V_expn} == ""
- @false
-.endif
-.endif
.endif
.if make(arith_expr)
diff --git a/tools/build/make_check/check.mk b/tools/build/make_check/check.mk
index f2d666d5ca43..2eac5edf403e 100644
--- a/tools/build/make_check/check.mk
+++ b/tools/build/make_check/check.mk
@@ -1,4 +1,3 @@
-# $FreeBSD$
all:
${MK} ${MK_ARG}
diff --git a/tools/build/make_check/regress.t b/tools/build/make_check/regress.t
index e37f3328bdf6..711559ed6e69 100644
--- a/tools/build/make_check/regress.t
+++ b/tools/build/make_check/regress.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
make all
diff --git a/tools/build/make_check/shell_test.sh b/tools/build/make_check/shell_test.sh
index 46169eb6efc2..4363618a2f36 100644
--- a/tools/build/make_check/shell_test.sh
+++ b/tools/build/make_check/shell_test.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
echo $@
if ! test -t 0 ; then
cat
diff --git a/tools/build/mk/Makefile.boot b/tools/build/mk/Makefile.boot
index 138dff45930b..43246f3ceebf 100644
--- a/tools/build/mk/Makefile.boot
+++ b/tools/build/mk/Makefile.boot
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
CFLAGS+= -I${WORLDTMP}/legacy/usr/include
DPADD+= ${WORLDTMP}/legacy/usr/lib/libegacy.a
LDADD+= -legacy
@@ -35,7 +33,6 @@ LIBZ:=${WORLDTMP}/legacy/usr/lib/libz.a
CFLAGS+= -Werror=implicit-function-declaration -Werror=implicit-int \
-Werror=return-type -Wundef
CFLAGS+= -DHAVE_NBTOOL_CONFIG_H=1
-CFLAGS+= -I${SRCTOP}/tools/build/cross-build/include/common
# This is needed for code that compiles for pre-C11 C standards
CWARNFLAGS.clang+=-Wno-typedef-redefinition
# bsd.sys.mk explicitly turns on -Wsystem-headers, but that's extremely
@@ -52,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
@@ -69,6 +70,11 @@ CFLAGS+= -idirafter ${SRCTOP}/contrib/libarchive/libarchive
.endif
.endif # ${.MAKE.OS} != "FreeBSD"
+.if ${.MAKE.OS} != "FreeBSD"
+# Add the common compatibility headers after the OS-specific ones.
+CFLAGS+= -I${SRCTOP}/tools/build/cross-build/include/common
+.endif
+
# we do not want to capture dependencies referring to the above
UPDATE_DEPENDFILE= no
diff --git a/tools/build/mk/Makefile.boot.pre b/tools/build/mk/Makefile.boot.pre
index 4113c934fbc0..4bd8b964f90c 100644
--- a/tools/build/mk/Makefile.boot.pre
+++ b/tools/build/mk/Makefile.boot.pre
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
# 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 85257d41140c..fe92cf671ebc 100644
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -1,9 +1,10 @@
#
-# $FreeBSD$
#
# This file adds support for the WITHOUT_* and WITH_* knobs in src.conf(5) to
# the check-old* and delete-old* targets.
#
+# Blocks should be in sort(1) order by primary option.
+#
.if ${MK_ACCT} == no
OLD_FILES+=etc/rc.d/accounting
@@ -54,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
@@ -80,44 +77,6 @@ OLD_FILES+=usr/share/man/man1/batch.1.gz
OLD_FILES+=usr/share/man/man8/atrun.8.gz
.endif
-.if ${MK_ATM} == no
-OLD_FILES+=usr/bin/sscop
-OLD_FILES+=usr/include/netnatm/addr.h
-OLD_FILES+=usr/include/netnatm/api/atmapi.h
-OLD_FILES+=usr/include/netnatm/api/ccatm.h
-OLD_FILES+=usr/include/netnatm/api/unisap.h
-OLD_DIRS+=usr/include/netnatm/api
-OLD_FILES+=usr/include/netnatm/msg/uni_config.h
-OLD_FILES+=usr/include/netnatm/msg/uni_hdr.h
-OLD_FILES+=usr/include/netnatm/msg/uni_ie.h
-OLD_FILES+=usr/include/netnatm/msg/uni_msg.h
-OLD_FILES+=usr/include/netnatm/msg/unimsglib.h
-OLD_FILES+=usr/include/netnatm/msg/uniprint.h
-OLD_FILES+=usr/include/netnatm/msg/unistruct.h
-OLD_DIRS+=usr/include/netnatm/msg
-OLD_FILES+=usr/include/netnatm/saal/sscfu.h
-OLD_FILES+=usr/include/netnatm/saal/sscfudef.h
-OLD_FILES+=usr/include/netnatm/saal/sscop.h
-OLD_FILES+=usr/include/netnatm/saal/sscopdef.h
-OLD_DIRS+=usr/include/netnatm/saal
-OLD_FILES+=usr/include/netnatm/sig/uni.h
-OLD_FILES+=usr/include/netnatm/sig/unidef.h
-OLD_FILES+=usr/include/netnatm/sig/unisig.h
-OLD_DIRS+=usr/include/netnatm/sig
-OLD_FILES+=usr/include/netnatm/unimsg.h
-OLD_FILES+=usr/lib/libngatm.a
-OLD_FILES+=usr/lib/libngatm.so
-OLD_LIBS+=usr/lib/libngatm.so.4
-OLD_FILES+=usr/lib/libngatm_p.a
-OLD_FILES+=usr/share/man/man1/sscop.1.gz
-OLD_FILES+=usr/share/man/man3/libngatm.3.gz
-OLD_FILES+=usr/share/man/man3/uniaddr.3.gz
-OLD_FILES+=usr/share/man/man3/unifunc.3.gz
-OLD_FILES+=usr/share/man/man3/unimsg.3.gz
-OLD_FILES+=usr/share/man/man3/unisap.3.gz
-OLD_FILES+=usr/share/man/man3/unistruct.3.gz
-.endif
-
.if ${MK_AUDIT} == no
OLD_FILES+=etc/rc.d/auditd
OLD_FILES+=etc/rc.d/auditdistd
@@ -164,13 +123,14 @@ OLD_FILES+=etc/autofs/special_media
OLD_FILES+=etc/autofs/special_noauto
OLD_FILES+=etc/autofs/special_null
OLD_FILES+=etc/auto_master
+OLD_FILES+=etc/devd/autofs.conf
OLD_FILES+=etc/rc.d/automount
OLD_FILES+=etc/rc.d/automountd
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
@@ -178,6 +138,15 @@ OLD_FILES+=usr/share/man/man8/autounmountd.8.gz
OLD_DIRS+=etc/autofs
.endif
+.if ${MK_BEARSSL} == no
+OLD_FILES+=usr/lib/libbearssl.a
+OLD_FILES+=usr/lib/libbearssl.so
+OLD_LIBS+=usr/lib/libbearssl.so.5
+OLD_FILES+=usr/lib/libsecureboot.a
+OLD_FILES+=usr/lib/libsecureboot.so
+OLD_LIBS+=usr/lib/libsecureboot.so.5
+.endif
+
.if ${MK_BHYVE} == no
OLD_FILES+=usr/lib/libvmmapi.a
OLD_FILES+=usr/lib/libvmmapi.so
@@ -192,13 +161,6 @@ OLD_FILES+=usr/share/man/man8/bhyveload.8.gz
OLD_DIRS+=usr/share/examples/bhyve
.endif
-.if !defined(WITH_PORT_BASE_BINUTILS)
-.if ${MK_LLD_IS_LD} == no
-OLD_FILES+=usr/bin/ld
-OLD_FILES+=usr/share/man/man1/ld.1.gz
-.endif
-.endif
-
.if ${MK_BLACKLIST} == no
OLD_FILES+=etc/blacklistd.conf
OLD_FILES+=etc/rc.d/blacklistd
@@ -227,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
@@ -274,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
@@ -352,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
@@ -392,7 +357,6 @@ OLD_FILES+=boot/shortcuts.4th
OLD_FILES+=boot/support.4th
OLD_FILES+=boot/userboot.so
OLD_FILES+=boot/version.4th
-OLD_FILES+=boot/zfsboot
OLD_FILES+=boot/zfsloader
OLD_FILES+=usr/lib/kgzldr.o
OLD_FILES+=usr/share/man/man5/loader.conf.5.gz
@@ -409,7 +373,6 @@ OLD_FILES+=usr/share/man/man8/menu.4th.8.gz
OLD_FILES+=usr/share/man/man8/menusets.4th.8.gz
OLD_FILES+=usr/share/man/man8/pxeboot.8.gz
OLD_FILES+=usr/share/man/man8/version.4th.8.gz
-OLD_FILES+=usr/share/man/man8/zfsboot.8.gz
OLD_FILES+=usr/share/man/man8/zfsloader.8.gz
.endif
@@ -432,13 +395,6 @@ OLD_FILES+=usr/sbin/bootptest
OLD_FILES+=usr/share/man/man8/bootptest.8.gz
.endif
-.if ${MK_BSD_CPIO} == no
-OLD_FILES+=usr/bin/bsdcpio
-OLD_FILES+=usr/bin/cpio
-OLD_FILES+=usr/share/man/man1/bsdcpio.1.gz
-OLD_FILES+=usr/share/man/man1/cpio.1.gz
-.endif
-
.if ${MK_BSDINSTALL} == no
OLD_FILES+=usr/libexec/bsdinstall/adduser
OLD_FILES+=usr/libexec/bsdinstall/auto
@@ -450,6 +406,9 @@ OLD_FILES+=usr/libexec/bsdinstall/distextract
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
@@ -460,10 +419,13 @@ 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
OLD_FILES+=usr/libexec/bsdinstall/scriptedpart
OLD_FILES+=usr/libexec/bsdinstall/services
+OLD_FILES+=usr/libexec/bsdinstall/startbsdinstall
OLD_FILES+=usr/libexec/bsdinstall/time
OLD_FILES+=usr/libexec/bsdinstall/umount
OLD_FILES+=usr/libexec/bsdinstall/wlanconfig
@@ -474,6 +436,13 @@ OLD_FILES+=usr/share/man/man8/sade.8.gz
OLD_DIRS+=usr/libexec/bsdinstall
.endif
+.if ${MK_BSD_CPIO} == no
+OLD_FILES+=usr/bin/bsdcpio
+OLD_FILES+=usr/bin/cpio
+OLD_FILES+=usr/share/man/man1/bsdcpio.1.gz
+OLD_FILES+=usr/share/man/man1/cpio.1.gz
+.endif
+
.if ${MK_BSNMP} == no
OLD_FILES+=etc/snmpd.config
OLD_FILES+=etc/rc.d/bsnmpd
@@ -490,7 +459,7 @@ OLD_FILES+=usr/include/bsnmp/snmpclient.h
OLD_FILES+=usr/include/bsnmp/snmpmod.h
OLD_FILES+=usr/lib/libbsnmp.a
OLD_FILES+=usr/lib/libbsnmp.so
-OLD_LIBS+=usr/lib/libbsnmp.so.6
+OLD_LIBS+=usr/lib/libbsnmp.so.7
OLD_FILES+=usr/lib/libbsnmp_p.a
OLD_FILES+=usr/lib/libbsnmptools.a
OLD_FILES+=usr/lib/libbsnmptools.so
@@ -884,14 +853,15 @@ OLD_DIRS+=usr/tests/usr.bin/calendar
.if ${MK_CASPER} == no
OLD_LIBS+=lib/libcasper.so.1
-OLD_LIBS+=lib/casper/libcap_dns.so.2
-OLD_LIBS+=lib/casper/libcap_fileargs.so.1
-OLD_LIBS+=lib/casper/libcap_grp.so.1
-OLD_LIBS+=lib/casper/libcap_net.so.1
-OLD_LIBS+=lib/casper/libcap_pwd.so.1
-OLD_LIBS+=lib/casper/libcap_sysctl.so.1
-OLD_LIBS+=lib/casper/libcap_sysctl.so.2
-OLD_LIBS+=lib/casper/libcap_syslog.so.1
+OLD_LIBS+=lib/libcap_dns.so.2
+OLD_LIBS+=lib/libcap_fileargs.so.1
+OLD_LIBS+=lib/libcap_grp.so.1
+OLD_LIBS+=lib/libcap_net.so.1
+OLD_LIBS+=lib/libcap_netdb.so.1
+OLD_LIBS+=lib/libcap_pwd.so.1
+OLD_LIBS+=lib/libcap_sysctl.so.1
+OLD_LIBS+=lib/libcap_sysctl.so.2
+OLD_LIBS+=lib/libcap_syslog.so.1
.endif
.if ${MK_CCD} == no
@@ -902,261 +872,13 @@ OLD_FILES+=usr/share/man/man4/ccd.4.gz
OLD_FILES+=usr/share/man/man8/ccdconfig.8.gz
.endif
-.if ${MK_CDDL} == no
-OLD_LIBS+=lib/libavl.so.2
-OLD_LIBS+=lib/libctf.so.2
-OLD_LIBS+=lib/libdtrace.so.2
-OLD_LIBS+=lib/libnvpair.so.2
-OLD_LIBS+=lib/libumem.so.2
-OLD_LIBS+=lib/libuutil.so.2
-OLD_FILES+=usr/bin/ctfconvert
-OLD_FILES+=usr/bin/ctfdump
-OLD_FILES+=usr/bin/ctfmerge
-OLD_FILES+=usr/lib/dtrace/drti.o
-OLD_FILES+=usr/lib/dtrace/errno.d
-OLD_FILES+=usr/lib/dtrace/io.d
-OLD_FILES+=usr/lib/dtrace/ip.d
-OLD_FILES+=usr/lib/dtrace/mbuf.d
-OLD_FILES+=usr/lib/dtrace/psinfo.d
-.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
-OLD_FILES+=usr/lib/dtrace/regs_x86.d
-.endif
-OLD_FILES+=usr/lib/dtrace/sctp.d
-OLD_FILES+=usr/lib/dtrace/siftr.d
-OLD_FILES+=usr/lib/dtrace/signal.d
-OLD_FILES+=usr/lib/dtrace/socket.d
-OLD_FILES+=usr/lib/dtrace/tcp.d
-OLD_FILES+=usr/lib/dtrace/udp.d
-OLD_FILES+=usr/lib/dtrace/udplite.d
-OLD_FILES+=usr/lib/dtrace/unistd.d
-OLD_FILES+=usr/lib/libavl.a
-OLD_FILES+=usr/lib/libavl.so
-OLD_FILES+=usr/lib/libavl_p.a
-OLD_FILES+=usr/lib/libctf.a
-OLD_FILES+=usr/lib/libctf.so
-OLD_FILES+=usr/lib/libctf_p.a
-OLD_FILES+=usr/lib/libdtrace.a
-OLD_FILES+=usr/lib/libdtrace.so
-OLD_FILES+=usr/lib/libdtrace_p.a
-OLD_FILES+=usr/lib/libnvpair.a
-OLD_FILES+=usr/lib/libnvpair.so
-OLD_FILES+=usr/lib/libnvpair_p.a
-OLD_FILES+=usr/lib/libumem.a
-OLD_FILES+=usr/lib/libumem.so
-OLD_FILES+=usr/lib/libumem_p.a
-OLD_FILES+=usr/lib/libuutil.a
-OLD_FILES+=usr/lib/libuutil.so
-OLD_FILES+=usr/lib/libuutil_p.a
-OLD_LIBS+=lib/libdtrace.so.2
-OLD_FILES+=usr/libexec/dwatch/chmod
-OLD_FILES+=usr/libexec/dwatch/errno
-OLD_FILES+=usr/libexec/dwatch/fchmodat
-OLD_FILES+=usr/libexec/dwatch/io
-OLD_FILES+=usr/libexec/dwatch/io-done
-OLD_FILES+=usr/libexec/dwatch/io-start
-OLD_FILES+=usr/libexec/dwatch/ip
-OLD_FILES+=usr/libexec/dwatch/ip-receive
-OLD_FILES+=usr/libexec/dwatch/ip-send
-OLD_FILES+=usr/libexec/dwatch/kill
-OLD_FILES+=usr/libexec/dwatch/lchmod
-OLD_FILES+=usr/libexec/dwatch/nanosleep
-OLD_FILES+=usr/libexec/dwatch/open
-OLD_FILES+=usr/libexec/dwatch/openat
-OLD_FILES+=usr/libexec/dwatch/proc
-OLD_FILES+=usr/libexec/dwatch/proc-create
-OLD_FILES+=usr/libexec/dwatch/proc-exec
-OLD_FILES+=usr/libexec/dwatch/proc-exec-failure
-OLD_FILES+=usr/libexec/dwatch/proc-exec-success
-OLD_FILES+=usr/libexec/dwatch/proc-exit
-OLD_FILES+=usr/libexec/dwatch/proc-signal
-OLD_FILES+=usr/libexec/dwatch/proc-signal-clear
-OLD_FILES+=usr/libexec/dwatch/proc-signal-discard
-OLD_FILES+=usr/libexec/dwatch/proc-signal-send
-OLD_FILES+=usr/libexec/dwatch/proc-status
-OLD_FILES+=usr/libexec/dwatch/read
-OLD_FILES+=usr/libexec/dwatch/recv
-OLD_FILES+=usr/libexec/dwatch/recvfrom
-OLD_FILES+=usr/libexec/dwatch/recvmsg
-OLD_FILES+=usr/libexec/dwatch/rw
-OLD_FILES+=usr/libexec/dwatch/sched
-OLD_FILES+=usr/libexec/dwatch/sched-change-pri
-OLD_FILES+=usr/libexec/dwatch/sched-cpu
-OLD_FILES+=usr/libexec/dwatch/sched-dequeue
-OLD_FILES+=usr/libexec/dwatch/sched-enqueue
-OLD_FILES+=usr/libexec/dwatch/sched-exec
-OLD_FILES+=usr/libexec/dwatch/sched-lend-pri
-OLD_FILES+=usr/libexec/dwatch/sched-load-change
-OLD_FILES+=usr/libexec/dwatch/sched-off-cpu
-OLD_FILES+=usr/libexec/dwatch/sched-on-cpu
-OLD_FILES+=usr/libexec/dwatch/sched-preempt
-OLD_FILES+=usr/libexec/dwatch/sched-pri
-OLD_FILES+=usr/libexec/dwatch/sched-queue
-OLD_FILES+=usr/libexec/dwatch/sched-remain-cpu
-OLD_FILES+=usr/libexec/dwatch/sched-sleep
-OLD_FILES+=usr/libexec/dwatch/sched-surrender
-OLD_FILES+=usr/libexec/dwatch/sched-tick
-OLD_FILES+=usr/libexec/dwatch/sched-wakeup
-OLD_FILES+=usr/libexec/dwatch/send
-OLD_FILES+=usr/libexec/dwatch/sendmsg
-OLD_FILES+=usr/libexec/dwatch/sendrecv
-OLD_FILES+=usr/libexec/dwatch/sendto
-OLD_FILES+=usr/libexec/dwatch/systop
-OLD_FILES+=usr/libexec/dwatch/tcp
-OLD_FILES+=usr/libexec/dwatch/tcp-accept
-OLD_FILES+=usr/libexec/dwatch/tcp-accept-established
-OLD_FILES+=usr/libexec/dwatch/tcp-accept-refused
-OLD_FILES+=usr/libexec/dwatch/tcp-connect
-OLD_FILES+=usr/libexec/dwatch/tcp-connect-established
-OLD_FILES+=usr/libexec/dwatch/tcp-connect-refused
-OLD_FILES+=usr/libexec/dwatch/tcp-connect-request
-OLD_FILES+=usr/libexec/dwatch/tcp-established
-OLD_FILES+=usr/libexec/dwatch/tcp-init
-OLD_FILES+=usr/libexec/dwatch/tcp-io
-OLD_FILES+=usr/libexec/dwatch/tcp-receive
-OLD_FILES+=usr/libexec/dwatch/tcp-refused
-OLD_FILES+=usr/libexec/dwatch/tcp-send
-OLD_FILES+=usr/libexec/dwatch/tcp-state-change
-OLD_FILES+=usr/libexec/dwatch/tcp-status
-OLD_FILES+=usr/libexec/dwatch/udp
-OLD_FILES+=usr/libexec/dwatch/udp-receive
-OLD_FILES+=usr/libexec/dwatch/udp-send
-OLD_FILES+=usr/libexec/dwatch/udplite
-OLD_FILES+=usr/libexec/dwatch/udplite-receive
-OLD_FILES+=usr/libexec/dwatch/udplite-send
-OLD_FILES+=usr/libexec/dwatch/vop_create
-OLD_FILES+=usr/libexec/dwatch/vop_lookup
-OLD_FILES+=usr/libexec/dwatch/vop_mkdir
-OLD_FILES+=usr/libexec/dwatch/vop_mknod
-OLD_FILES+=usr/libexec/dwatch/vop_readdir
-OLD_FILES+=usr/libexec/dwatch/vop_remove
-OLD_FILES+=usr/libexec/dwatch/vop_rename
-OLD_FILES+=usr/libexec/dwatch/vop_rmdir
-OLD_FILES+=usr/libexec/dwatch/vop_symlink
-OLD_FILES+=usr/libexec/dwatch/write
-OLD_FILES+=usr/sbin/dtrace
-OLD_FILES+=usr/sbin/dwatch
-OLD_FILES+=usr/sbin/lockstat
-OLD_FILES+=usr/sbin/plockstat
-OLD_FILES+=usr/share/man/man1/dtrace.1.gz
-OLD_FILES+=usr/share/man/man1/dtruss.1.gz
-OLD_FILES+=usr/share/man/man1/lockstat.1.gz
-OLD_FILES+=usr/share/man/man1/plockstat.1.gz
-OLD_FILES+=usr/share/dtrace/blocking
-OLD_FILES+=usr/share/dtrace/disklatency
-OLD_FILES+=usr/share/dtrace/disklatencycmd
-OLD_FILES+=usr/share/dtrace/hotopen
-OLD_FILES+=usr/share/dtrace/nfsattrstats
-OLD_FILES+=usr/share/dtrace/nfsclienttime
-OLD_FILES+=usr/share/dtrace/siftr
-OLD_FILES+=usr/share/dtrace/toolkit/execsnoop
-OLD_FILES+=usr/share/dtrace/toolkit/hotkernel
-OLD_FILES+=usr/share/dtrace/toolkit/hotuser
-OLD_FILES+=usr/share/dtrace/toolkit/opensnoop
-OLD_FILES+=usr/share/dtrace/toolkit/procsystime
-OLD_FILES+=usr/share/dtrace/tcpconn
-OLD_FILES+=usr/share/dtrace/tcpdebug
-OLD_FILES+=usr/share/dtrace/tcpstate
-OLD_FILES+=usr/share/dtrace/tcptrack
-OLD_FILES+=usr/share/dtrace/udptrack
-OLD_FILES+=usr/share/man/man1/dtrace.1.gz
-OLD_DIRS+=usr/lib/dtrace
-OLD_DIRS+=usr/lib32/dtrace
-OLD_DIRS+=usr/libexec/dwatch
-OLD_DIRS+=usr/share/dtrace/toolkit
-OLD_DIRS+=usr/share/dtrace
+.if ${MK_CLANG} == no && ${MK_CLANG_FORMAT} == no && ${MK_LLDB} == no
+OLD_LIBS+=usr/lib/libprivateclang.so.19
.endif
-.if ${MK_ZFS} == no
-OLD_FILES+=boot/gptzfsboot
-OLD_FILES+=boot/zfsboot
-OLD_FILES+=boot/zfsloader
-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/zvol
-OLD_FILES+=etc/devd/zfs.conf
-OLD_FILES+=etc/periodic/daily/404.status-zfs
-OLD_FILES+=etc/periodic/daily/800.scrub-zfs
-OLD_FILES+=etc/zfs/exports
-OLD_DIRS+=etc/zfs
-OLD_LIBS+=lib/libzfs.so.2
-OLD_LIBS+=lib/libzfs.so.3
-OLD_LIBS+=lib/libzfs_core.so.2
-OLD_LIBS+=lib/libzpool.so.2
-OLD_FILES+=rescue/zdb
-OLD_FILES+=rescue/zfs
-OLD_FILES+=rescue/zpool
-OLD_FILES+=sbin/bectl
-OLD_FILES+=sbin/zfs
-OLD_FILES+=sbin/zpool
-OLD_FILES+=sbin/zfsbootcfg
-OLD_FILES+=usr/bin/zinject
-OLD_FILES+=usr/bin/zstreamdump
-OLD_FILES+=usr/bin/ztest
-OLD_FILES+=usr/lib/libbe.a
-OLD_FILES+=usr/lib/libbe_p.a
-OLD_FILES+=usr/lib/libbe.so
-OLD_LIBS+=lib/libbe.so.1
-OLD_FILES+=usr/lib/libzfs.a
-OLD_FILES+=usr/lib/libzfs.so
-OLD_FILES+=usr/lib/libzfs_core.a
-OLD_FILES+=usr/lib/libzfs_core.so
-OLD_FILES+=usr/lib/libzfs_core_p.a
-OLD_FILES+=usr/lib/libzfs_p.a
-OLD_FILES+=usr/lib/libzpool.a
-OLD_FILES+=usr/lib/libzpool.so
-OLD_LIBS+=usr/lib/libzpool.so.2
-OLD_FILES+=usr/sbin/zfsd
-OLD_FILES+=usr/sbin/zhack
-OLD_FILES+=usr/sbin/zdb
-OLD_FILES+=usr/share/man/man3/be_activate.3.gz
-OLD_FILES+=usr/share/man/man3/be_active_name.3.gz
-OLD_FILES+=usr/share/man/man3/be_active_path.3.gz
-OLD_FILES+=usr/share/man/man3/be_create_depth.3.gz
-OLD_FILES+=usr/share/man/man3/be_create_from_existing_snap.3.gz
-OLD_FILES+=usr/share/man/man3/be_create_from_existing.3.gz
-OLD_FILES+=usr/share/man/man3/be_create.3.gz
-OLD_FILES+=usr/share/man/man3/be_deactivate.3.gz
-OLD_FILES+=usr/share/man/man3/be_destroy.3.gz
-OLD_FILES+=usr/share/man/man3/be_exists.3.gz
-OLD_FILES+=usr/share/man/man3/be_export.3.gz
-OLD_FILES+=usr/share/man/man3/be_get_bootenv_props.3.gz
-OLD_FILES+=usr/share/man/man3/be_get_dataset_props.3.gz
-OLD_FILES+=usr/share/man/man3/be_get_dataset_snapshots.3.gz
-OLD_FILES+=usr/share/man/man3/be_import.3.gz
-OLD_FILES+=usr/share/man/man3/be_is_auto_snapshot_name.3.gz
-OLD_FILES+=usr/share/man/man3/be_mount.3.gz
-OLD_FILES+=usr/share/man/man3/be_mounted_at.3.gz
-OLD_FILES+=usr/share/man/man3/be_nextboot_name.3.gz
-OLD_FILES+=usr/share/man/man3/be_nextboot_path.3.gz
-OLD_FILES+=usr/share/man/man3/be_nicenum.3.gz
-OLD_FILES+=usr/share/man/man3/be_prop_list_alloc.3.gz
-OLD_FILES+=usr/share/man/man3/be_prop_list_free.3.gz
-OLD_FILES+=usr/share/man/man3/be_rename.3.gz
-OLD_FILES+=usr/share/man/man3/be_root_concat.3.gz
-OLD_FILES+=usr/share/man/man3/be_root_path.3.gz
-OLD_FILES+=usr/share/man/man3/be_snapshot.3.gz
-OLD_FILES+=usr/share/man/man3/be_unmount.3.gz
-OLD_FILES+=usr/share/man/man3/be_validate_name.3.gz
-OLD_FILES+=usr/share/man/man3/be_validate_snap.3.gz
-OLD_FILES+=usr/share/man/man3/libbe_close.3.gz
-OLD_FILES+=usr/share/man/man3/libbe_errno.3.gz
-OLD_FILES+=usr/share/man/man3/libbe_error_description.3.gz
-OLD_FILES+=usr/share/man/man3/libbe_init.3.gz
-OLD_FILES+=usr/share/man/man3/libbe_print_on_error.3.gz
-OLD_FILES+=usr/share/man/man3/libbe.3.gz
-OLD_FILES+=usr/share/man/man5/zpool-features.5.gz
-OLD_FILES+=usr/share/man/man8/bectl.8.gz
-OLD_FILES+=usr/share/man/man8/gptzfsboot.8.gz
-OLD_FILES+=usr/share/man/man8/zdb.8.gz
-OLD_FILES+=usr/share/man/man8/zfs-program.8.gz
-OLD_FILES+=usr/share/man/man8/zfs.8.gz
-OLD_FILES+=usr/share/man/man8/zfsboot.8.gz
-OLD_FILES+=usr/share/man/man8/zfsbootcfg.8.gz
-OLD_FILES+=usr/share/man/man8/zfsd.8.gz
-OLD_FILES+=usr/share/man/man8/zfsloader.8.gz
-OLD_FILES+=usr/share/man/man8/zpool.8.gz
+.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
@@ -1171,6 +893,7 @@ OLD_FILES+=usr/bin/llvm-readobj
OLD_FILES+=usr/bin/llvm-size
OLD_FILES+=usr/bin/llvm-strings
OLD_FILES+=usr/bin/llvm-symbolizer
+OLD_FILES+=usr/bin/objdump
OLD_FILES+=usr/share/man/man1/llvm-addr2line.1.gz
OLD_FILES+=usr/share/man/man1/llvm-ar.1.gz
OLD_FILES+=usr/share/man/man1/llvm-nm.1.gz
@@ -1181,321 +904,427 @@ OLD_FILES+=usr/share/man/man1/llvm-readobj.1.gz
OLD_FILES+=usr/share/man/man1/llvm-size.1.gz
OLD_FILES+=usr/share/man/man1/llvm-strings.1.gz
OLD_FILES+=usr/share/man/man1/llvm-symbolizer.1.gz
+OLD_FILES+=usr/share/man/man1/objdump.1.gz
.endif
.if ${MK_CLANG} == no
OLD_FILES+=usr/bin/clang
OLD_FILES+=usr/bin/clang++
OLD_FILES+=usr/bin/clang-cpp
-OLD_FILES+=usr/lib/clang/14.0.5/include/cuda_wrappers/algorithm
-OLD_FILES+=usr/lib/clang/14.0.5/include/cuda_wrappers/complex
-OLD_FILES+=usr/lib/clang/14.0.5/include/cuda_wrappers/new
-OLD_DIRS+=usr/lib/clang/14.0.5/include/cuda_wrappers
-OLD_FILES+=usr/lib/clang/14.0.5/include/fuzzer/FuzzedDataProvider.h
-OLD_DIRS+=usr/lib/clang/14.0.5/include/fuzzer
-OLD_FILES+=usr/lib/clang/14.0.5/include/openmp_wrappers/__clang_openmp_device_functions.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/openmp_wrappers/cmath
-OLD_FILES+=usr/lib/clang/14.0.5/include/openmp_wrappers/complex
-OLD_FILES+=usr/lib/clang/14.0.5/include/openmp_wrappers/complex.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/openmp_wrappers/complex_cmath.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/openmp_wrappers/math.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/openmp_wrappers/new
-OLD_DIRS+=usr/lib/clang/14.0.5/include/openmp_wrappers
-OLD_FILES+=usr/lib/clang/14.0.5/include/ppc_wrappers/emmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ppc_wrappers/mm_malloc.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ppc_wrappers/mmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ppc_wrappers/pmmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ppc_wrappers/smmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ppc_wrappers/tmmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ppc_wrappers/xmmintrin.h
-OLD_DIRS+=usr/lib/clang/14.0.5/include/ppc_wrappers
-OLD_FILES+=usr/lib/clang/14.0.5/include/profile/InstrProfData.inc
-OLD_FILES+=usr/lib/clang/14.0.5/include/profile/MemProfData.inc
-OLD_DIRS+=usr/lib/clang/14.0.5/include/profile
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/allocator_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/asan_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/common_interface_defs.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/coverage_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/dfsan_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/hwasan_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/linux_syscall_hooks.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/lsan_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/memprof_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/msan_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/netbsd_syscall_hooks.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/scudo_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/tsan_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/tsan_interface_atomic.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sanitizer/ubsan_interface.h
-OLD_DIRS+=usr/lib/clang/14.0.5/include/sanitizer
-OLD_FILES+=usr/lib/clang/14.0.5/include/xray/xray_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xray/xray_log_interface.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xray/xray_records.h
-OLD_DIRS+=usr/lib/clang/14.0.5/include/xray
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_builtin_vars.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_cmath.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_complex_builtins.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_device_functions.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_intrinsics.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_libdevice_declares.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_math.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_math_forward_declares.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_runtime_wrapper.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_cuda_texture_intrinsics.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_hip_cmath.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_hip_libdevice_declares.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_hip_math.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__clang_hip_runtime_wrapper.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__stddef_max_align_t.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__wmmintrin_aes.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/__wmmintrin_pclmul.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/adxintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/altivec.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ammintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/amxintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm64intr.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_acle.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_bf16.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_cde.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_cmse.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_fp16.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_mve.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_neon.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_neon_sve_bridge.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/arm_sve.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/armintr.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx2intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512bf16intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512bitalgintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512bwintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512cdintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512dqintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512erintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512fintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512fp16intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512ifmaintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512ifmavlintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512pfintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vbmi2intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vbmiintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vbmivlintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlbf16intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlbitalgintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlbwintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlcdintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vldqintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlfp16intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlvbmi2intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlvnniintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vlvp2intersectintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vnniintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vp2intersectintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vpopcntdqintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avx512vpopcntdqvlintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avxintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/avxvnniintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/bmi2intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/bmiintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/builtins.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/cet.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/cetintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/cldemoteintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/clflushoptintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/clwbintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/clzerointrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/cpuid.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/crc32intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/emmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/enqcmdintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/f16cintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/float.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/fma4intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/fmaintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/fxsrintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/gfniintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/hexagon_circ_brev_intrinsics.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/hexagon_protos.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/hexagon_types.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/hresetintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/htmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/htmxlintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/hvx_hexagon_protos.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ia32intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/immintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/inttypes.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/invpcidintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/iso646.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/keylockerintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/limits.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/lwpintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/lzcntintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/mm3dnow.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/mm_malloc.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/mmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/module.modulemap
-OLD_FILES+=usr/lib/clang/14.0.5/include/movdirintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/msa.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/mwaitxintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/nmmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/omp-tools.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/omp.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ompt.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/opencl-c-base.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/opencl-c.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/pconfigintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/pkuintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/pmmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/popcntintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/prfchwintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/ptwriteintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/rdseedintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/riscv_vector.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/rtmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/s390intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/serializeintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/sgxintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/shaintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/smmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/stdalign.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/stdarg.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/stdatomic.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/stdbool.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/stddef.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/stdint.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/stdnoreturn.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/tbmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/tgmath.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/tmmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/tsxldtrkintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/uintrintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/unwind.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/vadefs.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/vaesintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/varargs.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/vecintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/vpclmulqdqintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/waitpkgintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/wasm_simd128.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/wbnoinvdintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/wmmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/x86gprintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/x86intrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xmmintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xopintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xsavecintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xsaveintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xsaveoptintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xsavesintrin.h
-OLD_FILES+=usr/lib/clang/14.0.5/include/xtestintrin.h
-OLD_DIRS+=usr/lib/clang/14.0.5/include
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-aarch64.so
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-arm.so
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-armhf.so
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-i386.so
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-preinit-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-preinit-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-preinit-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan-x86_64.so
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan_cxx-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan_cxx-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan_cxx-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan_static-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.asan_static-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi_diag-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi_diag-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi_diag-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.dd-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.dd-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.fuzzer-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.fuzzer-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.fuzzer_interceptors-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.msan-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.msan-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-powerpc.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-powerpc64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-powerpc64le.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.profile-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.safestack-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.safestack-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.safestack-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats_client-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats_client-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats_client-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats_client-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.stats_client-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.tsan-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.tsan-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-basic-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-basic-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-basic-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-basic-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-fdr-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-fdr-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-profiling-arm.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-profiling-armhf.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
-OLD_FILES+=usr/lib/clang/14.0.5/lib/freebsd/libclang_rt.xray-x86_64.a
-OLD_DIRS+=usr/lib/clang/14.0.5/lib/freebsd
-OLD_DIRS+=usr/lib/clang/14.0.5/lib
-OLD_FILES+=usr/lib/clang/14.0.5/share/asan_ignorelist.txt
-OLD_FILES+=usr/lib/clang/14.0.5/share/cfi_ignorelist.txt
-OLD_FILES+=usr/lib/clang/14.0.5/share/msan_ignorelist.txt
-OLD_DIRS+=usr/lib/clang/14.0.5/share
-OLD_DIRS+=usr/lib/clang/14.0.5
+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
@@ -1610,57 +1439,25 @@ OLD_LIBS+=${DEBUG_LIBS}
.endif
.endif
+.if ${MK_DETECT_TZ_CHANGES} == no
+OLD_FILES+=tests/lib/libc/stdtime/detect_tz_changes_test
+.endif
+
.if ${MK_DIALOG} == no
OLD_FILES+=usr/bin/dialog
OLD_FILES+=usr/bin/dpv
OLD_FILES+=usr/lib/libdialog.a
OLD_FILES+=usr/lib/libdialog.so
-OLD_FILES+=usr/lib/libdialog.so.10
+OLD_LIBS+=usr/lib/libdialog.so.10
OLD_FILES+=usr/lib/libdialog_p.a
OLD_FILES+=usr/lib/libdpv.a
OLD_FILES+=usr/lib/libdpv.so
-OLD_FILES+=usr/lib/libdpv.so.3
+OLD_LIBS+=usr/lib/libdpv.so.3
OLD_FILES+=usr/lib/libdpv_p.a
-OLD_FILES+=usr/sbin/bsdconfig
OLD_FILES+=usr/share/man/man1/dialog.1.gz
OLD_FILES+=usr/share/man/man1/dpv.1.gz
OLD_FILES+=usr/share/man/man3/dialog.3.gz
OLD_FILES+=usr/share/man/man3/dpv.3.gz
-OLD_FILES+=usr/share/man/man8/bsdconfig.8.gz
-OLD_DIRS+=usr/share/bsdconfig
-OLD_DIRS+=usr/share/bsdconfig/media
-OLD_DIRS+=usr/share/bsdconfig/networking
-OLD_DIRS+=usr/share/bsdconfig/packages
-OLD_DIRS+=usr/share/bsdconfig/password
-OLD_DIRS+=usr/share/bsdconfig/startup
-OLD_DIRS+=usr/share/bsdconfig/timezone
-OLD_DIRS+=usr/share/bsdconfig/usermgmt
-.endif
-
-.if ${MK_EFI} == no
-OLD_FILES+=usr/sbin/efibootmgr
-OLD_FILES+=usr/sbin/efidp
-OLD_FILES+=usr/sbin/efivar
-OLD_FILES+=usr/sbin/uefisign
-OLD_FILES+=usr/share/examples/uefisign/uefikeys
-.endif
-
-.if ${MK_FTP} == no
-OLD_FILES+=etc/ftpusers
-OLD_FILES+=etc/newsyslog.conf.d/ftp.conf
-OLD_FILES+=etc/pam.d/ftp
-OLD_FILES+=etc/pam.d/ftpd
-OLD_FILES+=etc/rc.d/ftpd
-OLD_FILES+=etc/syslog.d/ftp.conf
-OLD_FILES+=usr/bin/ftp
-OLD_FILES+=usr/bin/gate-ftp
-OLD_FILES+=usr/bin/pftp
-OLD_FILES+=usr/libexec/ftpd
-OLD_FILES+=usr/share/man/man1/ftp.1.gz
-OLD_FILES+=usr/share/man/man1/gate-ftp.1.gz
-OLD_FILES+=usr/share/man/man1/pftp.1.gz
-OLD_FILES+=usr/share/man/man5/ftpchroot.5.gz
-OLD_FILES+=usr/share/man/man8/ftpd.8.gz
.endif
.if ${MK_DICT} == no
@@ -1674,12 +1471,165 @@ OLD_DIRS+=usr/share/dict
.endif
.if ${MK_DMAGENT} == no
+OLD_FILES+=etc/dma/auth.conf
OLD_FILES+=etc/dma/dma.conf
OLD_DIRS+=etc/dma
OLD_FILES+=usr/libexec/dma
OLD_FILES+=usr/libexec/dma-mbox-create
OLD_FILES+=usr/share/man/man8/dma.8.gz
OLD_FILES+=usr/share/examples/dma/mailer.conf
+OLD_DIRS+=usr/share/examples/dma
+.endif
+
+.if ${MK_DTRACE} == no
+OLD_LIBS+=lib/libctf.so.2
+OLD_LIBS+=lib/libdtrace.so.2
+OLD_FILES+=usr/bin/ctfconvert
+OLD_FILES+=usr/bin/ctfdump
+OLD_FILES+=usr/bin/ctfmerge
+OLD_FILES+=usr/lib/dtrace/drti.o
+OLD_FILES+=usr/lib/dtrace/errno.d
+OLD_FILES+=usr/lib/dtrace/io.d
+OLD_FILES+=usr/lib/dtrace/ip.d
+OLD_FILES+=usr/lib/dtrace/ipfw.d
+OLD_FILES+=usr/lib/dtrace/mbuf.d
+OLD_FILES+=usr/lib/dtrace/psinfo.d
+.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
+OLD_FILES+=usr/lib/dtrace/regs_x86.d
+.endif
+OLD_FILES+=usr/lib/dtrace/sctp.d
+OLD_FILES+=usr/lib/dtrace/siftr.d
+OLD_FILES+=usr/lib/dtrace/signal.d
+OLD_FILES+=usr/lib/dtrace/socket.d
+OLD_FILES+=usr/lib/dtrace/tcp.d
+OLD_FILES+=usr/lib/dtrace/udp.d
+OLD_FILES+=usr/lib/dtrace/udplite.d
+OLD_FILES+=usr/lib/dtrace/unistd.d
+OLD_FILES+=usr/lib/libctf.a
+OLD_FILES+=usr/lib/libctf.so
+OLD_FILES+=usr/lib/libctf_p.a
+OLD_FILES+=usr/lib/libdtrace.a
+OLD_FILES+=usr/lib/libdtrace.so
+OLD_FILES+=usr/lib/libdtrace_p.a
+OLD_LIBS+=lib/libdtrace.so.2
+OLD_FILES+=usr/libexec/dwatch/chmod
+OLD_FILES+=usr/libexec/dwatch/errno
+OLD_FILES+=usr/libexec/dwatch/fchmodat
+OLD_FILES+=usr/libexec/dwatch/io
+OLD_FILES+=usr/libexec/dwatch/io-done
+OLD_FILES+=usr/libexec/dwatch/io-start
+OLD_FILES+=usr/libexec/dwatch/ip
+OLD_FILES+=usr/libexec/dwatch/ip-receive
+OLD_FILES+=usr/libexec/dwatch/ip-send
+OLD_FILES+=usr/libexec/dwatch/kill
+OLD_FILES+=usr/libexec/dwatch/lchmod
+OLD_FILES+=usr/libexec/dwatch/nanosleep
+OLD_FILES+=usr/libexec/dwatch/open
+OLD_FILES+=usr/libexec/dwatch/openat
+OLD_FILES+=usr/libexec/dwatch/proc
+OLD_FILES+=usr/libexec/dwatch/proc-create
+OLD_FILES+=usr/libexec/dwatch/proc-exec
+OLD_FILES+=usr/libexec/dwatch/proc-exec-failure
+OLD_FILES+=usr/libexec/dwatch/proc-exec-success
+OLD_FILES+=usr/libexec/dwatch/proc-exit
+OLD_FILES+=usr/libexec/dwatch/proc-signal
+OLD_FILES+=usr/libexec/dwatch/proc-signal-clear
+OLD_FILES+=usr/libexec/dwatch/proc-signal-discard
+OLD_FILES+=usr/libexec/dwatch/proc-signal-send
+OLD_FILES+=usr/libexec/dwatch/proc-status
+OLD_FILES+=usr/libexec/dwatch/read
+OLD_FILES+=usr/libexec/dwatch/recv
+OLD_FILES+=usr/libexec/dwatch/recvfrom
+OLD_FILES+=usr/libexec/dwatch/recvmsg
+OLD_FILES+=usr/libexec/dwatch/rw
+OLD_FILES+=usr/libexec/dwatch/sched
+OLD_FILES+=usr/libexec/dwatch/sched-change-pri
+OLD_FILES+=usr/libexec/dwatch/sched-cpu
+OLD_FILES+=usr/libexec/dwatch/sched-dequeue
+OLD_FILES+=usr/libexec/dwatch/sched-enqueue
+OLD_FILES+=usr/libexec/dwatch/sched-exec
+OLD_FILES+=usr/libexec/dwatch/sched-lend-pri
+OLD_FILES+=usr/libexec/dwatch/sched-load-change
+OLD_FILES+=usr/libexec/dwatch/sched-off-cpu
+OLD_FILES+=usr/libexec/dwatch/sched-on-cpu
+OLD_FILES+=usr/libexec/dwatch/sched-preempt
+OLD_FILES+=usr/libexec/dwatch/sched-pri
+OLD_FILES+=usr/libexec/dwatch/sched-queue
+OLD_FILES+=usr/libexec/dwatch/sched-remain-cpu
+OLD_FILES+=usr/libexec/dwatch/sched-sleep
+OLD_FILES+=usr/libexec/dwatch/sched-surrender
+OLD_FILES+=usr/libexec/dwatch/sched-tick
+OLD_FILES+=usr/libexec/dwatch/sched-wakeup
+OLD_FILES+=usr/libexec/dwatch/send
+OLD_FILES+=usr/libexec/dwatch/sendmsg
+OLD_FILES+=usr/libexec/dwatch/sendrecv
+OLD_FILES+=usr/libexec/dwatch/sendto
+OLD_FILES+=usr/libexec/dwatch/systop
+OLD_FILES+=usr/libexec/dwatch/tcp
+OLD_FILES+=usr/libexec/dwatch/tcp-accept
+OLD_FILES+=usr/libexec/dwatch/tcp-accept-established
+OLD_FILES+=usr/libexec/dwatch/tcp-accept-refused
+OLD_FILES+=usr/libexec/dwatch/tcp-connect
+OLD_FILES+=usr/libexec/dwatch/tcp-connect-established
+OLD_FILES+=usr/libexec/dwatch/tcp-connect-refused
+OLD_FILES+=usr/libexec/dwatch/tcp-connect-request
+OLD_FILES+=usr/libexec/dwatch/tcp-established
+OLD_FILES+=usr/libexec/dwatch/tcp-init
+OLD_FILES+=usr/libexec/dwatch/tcp-io
+OLD_FILES+=usr/libexec/dwatch/tcp-receive
+OLD_FILES+=usr/libexec/dwatch/tcp-refused
+OLD_FILES+=usr/libexec/dwatch/tcp-send
+OLD_FILES+=usr/libexec/dwatch/tcp-state-change
+OLD_FILES+=usr/libexec/dwatch/tcp-status
+OLD_FILES+=usr/libexec/dwatch/udp
+OLD_FILES+=usr/libexec/dwatch/udp-receive
+OLD_FILES+=usr/libexec/dwatch/udp-send
+OLD_FILES+=usr/libexec/dwatch/udplite
+OLD_FILES+=usr/libexec/dwatch/udplite-receive
+OLD_FILES+=usr/libexec/dwatch/udplite-send
+OLD_FILES+=usr/libexec/dwatch/vop_create
+OLD_FILES+=usr/libexec/dwatch/vop_lookup
+OLD_FILES+=usr/libexec/dwatch/vop_mkdir
+OLD_FILES+=usr/libexec/dwatch/vop_mknod
+OLD_FILES+=usr/libexec/dwatch/vop_readdir
+OLD_FILES+=usr/libexec/dwatch/vop_remove
+OLD_FILES+=usr/libexec/dwatch/vop_rename
+OLD_FILES+=usr/libexec/dwatch/vop_rmdir
+OLD_FILES+=usr/libexec/dwatch/vop_symlink
+OLD_FILES+=usr/libexec/dwatch/write
+OLD_FILES+=usr/sbin/dtrace
+OLD_FILES+=usr/sbin/dwatch
+OLD_FILES+=usr/sbin/lockstat
+OLD_FILES+=usr/sbin/plockstat
+OLD_FILES+=usr/share/man/man1/dtrace.1.gz
+OLD_FILES+=usr/share/man/man1/dtruss.1.gz
+OLD_FILES+=usr/share/man/man1/lockstat.1.gz
+OLD_FILES+=usr/share/man/man1/plockstat.1.gz
+OLD_FILES+=usr/share/dtrace/blocking
+OLD_FILES+=usr/share/dtrace/disklatency
+OLD_FILES+=usr/share/dtrace/disklatencycmd
+OLD_FILES+=usr/share/dtrace/hotopen
+OLD_FILES+=usr/share/dtrace/nfsattrstats
+OLD_FILES+=usr/share/dtrace/nfsclienttime
+OLD_FILES+=usr/share/dtrace/siftr
+OLD_FILES+=usr/share/dtrace/toolkit/execsnoop
+OLD_FILES+=usr/share/dtrace/toolkit/hotkernel
+OLD_FILES+=usr/share/dtrace/toolkit/hotuser
+OLD_FILES+=usr/share/dtrace/toolkit/opensnoop
+OLD_FILES+=usr/share/dtrace/toolkit/procsystime
+OLD_FILES+=usr/share/dtrace/tcpconn
+OLD_FILES+=usr/share/dtrace/tcpdebug
+OLD_FILES+=usr/share/dtrace/tcpstate
+OLD_FILES+=usr/share/dtrace/tcptrack
+OLD_FILES+=usr/share/dtrace/udptrack
+OLD_FILES+=usr/share/man/man1/dtrace.1.gz
+OLD_DIRS+=usr/lib/dtrace
+. for libcompat in ${_ALL_libcompats}
+OLD_DIRS+=usr/lib${libcompat}/dtrace
+. endfor
+OLD_DIRS+=usr/libexec/dwatch
+OLD_DIRS+=usr/share/dtrace/toolkit
+OLD_DIRS+=usr/share/dtrace
.endif
.if ${MK_EE} == no
@@ -1689,6 +1639,7 @@ OLD_FILES+=usr/bin/ree
OLD_FILES+=usr/share/man/man1/edit.1.gz
OLD_FILES+=usr/share/man/man1/ee.1.gz
OLD_FILES+=usr/share/man/man1/ree.1.gz
+OLD_FILES+=usr/share/misc/init.ee
OLD_FILES+=usr/share/nls/C/ee.cat
OLD_FILES+=usr/share/nls/de_DE.ISO8859-1/ee.cat
OLD_FILES+=usr/share/nls/fr_FR.ISO8859-1/ee.cat
@@ -1699,6 +1650,14 @@ OLD_FILES+=usr/share/nls/ru_RU.KOI8-R/ee.cat
OLD_FILES+=usr/share/nls/uk_UA.KOI8-U/ee.cat
.endif
+.if ${MK_EFI} == no
+OLD_FILES+=usr/sbin/efibootmgr
+OLD_FILES+=usr/sbin/efidp
+OLD_FILES+=usr/sbin/efivar
+OLD_FILES+=usr/sbin/uefisign
+OLD_FILES+=usr/share/examples/uefisign/uefikeys
+.endif
+
.if ${MK_EXAMPLES} == no
OLD_FILES+=usr/share/examples/BSD_daemon/FreeBSD.pfa
OLD_FILES+=usr/share/examples/BSD_daemon/README
@@ -1727,9 +1686,6 @@ OLD_FILES+=usr/share/examples/diskless/README.BOOTP
OLD_FILES+=usr/share/examples/diskless/README.TEMPLATING
OLD_FILES+=usr/share/examples/diskless/clone_root
OLD_FILES+=usr/share/examples/dma/mailer.conf
-OLD_FILES+=usr/share/examples/drivers/README
-OLD_FILES+=usr/share/examples/drivers/make_device_driver.sh
-OLD_FILES+=usr/share/examples/drivers/make_pseudo_driver.sh
OLD_FILES+=usr/share/examples/dwatch/profile_template
OLD_FILES+=usr/share/examples/etc/README.examples
OLD_FILES+=usr/share/examples/etc/bsd-style-copyright
@@ -1738,12 +1694,12 @@ OLD_FILES+=usr/share/examples/etc/login.access
OLD_FILES+=usr/share/examples/etc/make.conf
OLD_FILES+=usr/share/examples/etc/rc.bsdextended
OLD_FILES+=usr/share/examples/etc/rc.firewall
-OLD_FILES+=usr/share/examples/etc/rc.sendmail
OLD_FILES+=usr/share/examples/etc/termcap.small
OLD_FILES+=usr/share/examples/etc/wpa_supplicant.conf
OLD_FILES+=usr/share/examples/find_interface/Makefile
OLD_FILES+=usr/share/examples/find_interface/README
OLD_FILES+=usr/share/examples/find_interface/find_interface.c
+OLD_FILES+=usr/share/examples/flua/libjail.lua
OLD_FILES+=usr/share/examples/hast/ucarp.sh
OLD_FILES+=usr/share/examples/hast/ucarp_down.sh
OLD_FILES+=usr/share/examples/hast/ucarp_up.sh
@@ -1753,6 +1709,8 @@ OLD_FILES+=usr/share/examples/hostapd/hostapd.conf
OLD_FILES+=usr/share/examples/hostapd/hostapd.eap_user
OLD_FILES+=usr/share/examples/hostapd/hostapd.wpa_psk
OLD_FILES+=usr/share/examples/indent/indent.pro
+OLD_FILES+=usr/share/examples/inotify/Makefile
+OLD_FILES+=usr/share/examples/inotify/inotify.c
OLD_FILES+=usr/share/examples/ipfilter/BASIC.NAT
OLD_FILES+=usr/share/examples/ipfilter/BASIC_1.FW
OLD_FILES+=usr/share/examples/ipfilter/BASIC_2.FW
@@ -1823,6 +1781,8 @@ OLD_FILES+=usr/share/examples/kld/syscall/module/Makefile
OLD_FILES+=usr/share/examples/kld/syscall/module/syscall.c
OLD_FILES+=usr/share/examples/kld/syscall/test/Makefile
OLD_FILES+=usr/share/examples/kld/syscall/test/call.c
+OLD_FILES+=usr/share/examples/kyua/Kyuafile.top
+OLD_FILES+=usr/share/examples/kyua/kyua.conf
OLD_FILES+=usr/share/examples/libusb20/Makefile
OLD_FILES+=usr/share/examples/libusb20/README
OLD_FILES+=usr/share/examples/libusb20/bulk.c
@@ -1894,6 +1854,7 @@ OLD_FILES+=usr/share/examples/scsi_target/scsi_cmds.c
OLD_FILES+=usr/share/examples/scsi_target/scsi_target.8
OLD_FILES+=usr/share/examples/scsi_target/scsi_target.c
OLD_FILES+=usr/share/examples/scsi_target/scsi_target.h
+OLD_FILES+=usr/share/examples/sendmail/mailer.conf
OLD_FILES+=usr/share/examples/ses/Makefile
OLD_FILES+=usr/share/examples/ses/Makefile.inc
OLD_FILES+=usr/share/examples/ses/getencstat/Makefile
@@ -1920,6 +1881,11 @@ OLD_FILES+=usr/share/examples/smbfs/print/lj6l
OLD_FILES+=usr/share/examples/smbfs/print/ljspool
OLD_FILES+=usr/share/examples/smbfs/print/printcap.sample
OLD_FILES+=usr/share/examples/smbfs/print/tolj
+OLD_FILES+=usr/share/examples/sound/basic.c
+OLD_FILES+=usr/share/examples/sound/ossmidi.h
+OLD_FILES+=usr/share/examples/sound/ossinit.h
+OLD_FILES+=usr/share/examples/sound/README
+OLD_FILES+=usr/share/examples/sound/midi.c
OLD_FILES+=usr/share/examples/sunrpc/Makefile
OLD_FILES+=usr/share/examples/sunrpc/dir/Makefile
OLD_FILES+=usr/share/examples/sunrpc/dir/dir.x
@@ -1948,15 +1914,16 @@ OLD_DIRS+=usr/share/examples/bsdconfig
OLD_DIRS+=usr/share/examples/csh
OLD_DIRS+=usr/share/examples/diskless
OLD_DIRS+=usr/share/examples/dma
-OLD_DIRS+=usr/share/examples/drivers
OLD_DIRS+=usr/share/examples/dwatch
OLD_DIRS+=usr/share/examples/etc
OLD_DIRS+=usr/share/examples/etc/defaults
OLD_DIRS+=usr/share/examples/find_interface
+OLD_DIRS+=usr/share/examples/flua
OLD_DIRS+=usr/share/examples/hast
OLD_DIRS+=usr/share/examples/ibcs2
OLD_DIRS+=usr/share/examples/hostapd
OLD_DIRS+=usr/share/examples/indent
+OLD_DIRS+=usr/share/examples/inotify
OLD_DIRS+=usr/share/examples/ipfilter
OLD_DIRS+=usr/share/examples/ipfw
OLD_DIRS+=usr/share/examples/jails
@@ -1972,6 +1939,7 @@ OLD_DIRS+=usr/share/examples/kld/khelp
OLD_DIRS+=usr/share/examples/kld/syscall
OLD_DIRS+=usr/share/examples/kld/syscall/module
OLD_DIRS+=usr/share/examples/kld/syscall/test
+OLD_DIRS+=usr/share/examples/kyua
OLD_DIRS+=usr/share/examples/libusb20
OLD_DIRS+=usr/share/examples/libvgl
OLD_DIRS+=usr/share/examples/mdoc
@@ -1982,6 +1950,7 @@ OLD_DIRS+=usr/share/examples/ppi
OLD_DIRS+=usr/share/examples/ppp
OLD_DIRS+=usr/share/examples/printing
OLD_DIRS+=usr/share/examples/scsi_target
+OLD_DIRS+=usr/share/examples/sendmail
OLD_DIRS+=usr/share/examples/ses
OLD_DIRS+=usr/share/examples/ses/getencstat
OLD_DIRS+=usr/share/examples/ses/sesd
@@ -1990,6 +1959,7 @@ OLD_DIRS+=usr/share/examples/ses/setobjstat
OLD_DIRS+=usr/share/examples/ses/srcs
OLD_DIRS+=usr/share/examples/smbfs
OLD_DIRS+=usr/share/examples/smbfs/print
+OLD_DIRS+=usr/share/examples/sound
OLD_DIRS+=usr/share/examples/sunrpc
OLD_DIRS+=usr/share/examples/sunrpc/dir
OLD_DIRS+=usr/share/examples/sunrpc/msg
@@ -1999,6 +1969,11 @@ OLD_DIRS+=usr/share/examples/uefisign
OLD_DIRS+=usr/share/examples/ypldap
.endif
+.if ${MK_FDT} == no
+OLD_FILES+=usr/sbin/ofwdump
+OLD_FILES+=usr/share/man/man8/ofwdump.8.gz
+.endif
+
.if ${MK_FINGER} == no
OLD_FILES+=usr/bin/finger
OLD_FILES+=usr/share/man/man1/finger.1.gz
@@ -2019,6 +1994,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
@@ -2038,11 +2039,29 @@ OLD_FILES+=usr/share/man/man5/freebsd-update.conf.5.gz
OLD_FILES+=usr/share/man/man8/freebsd-update.8.gz
.endif
-.if ${MK_FREEBSD_UPDATE} == no && ${MK_PORTSNAP} == no
+.if ${MK_FREEBSD_UPDATE} == no
OLD_FILES+=usr/libexec/phttpget
OLD_FILES+=usr/share/man/man8/phttpget.8.gz
.endif
+.if ${MK_FTP} == no
+OLD_FILES+=etc/ftpusers
+OLD_FILES+=etc/newsyslog.conf.d/ftp.conf
+OLD_FILES+=etc/pam.d/ftp
+OLD_FILES+=etc/pam.d/ftpd
+OLD_FILES+=etc/rc.d/ftpd
+OLD_FILES+=etc/syslog.d/ftp.conf
+OLD_FILES+=usr/bin/ftp
+OLD_FILES+=usr/bin/gate-ftp
+OLD_FILES+=usr/bin/pftp
+OLD_FILES+=usr/libexec/ftpd
+OLD_FILES+=usr/share/man/man1/ftp.1.gz
+OLD_FILES+=usr/share/man/man1/gate-ftp.1.gz
+OLD_FILES+=usr/share/man/man1/pftp.1.gz
+OLD_FILES+=usr/share/man/man5/ftpchroot.5.gz
+OLD_FILES+=usr/share/man/man8/ftpd.8.gz
+.endif
+
.if ${MK_GAMES} == no
OLD_FILES+=usr/bin/caesar
OLD_FILES+=usr/bin/factor
@@ -2088,124 +2107,92 @@ OLD_FILES+=usr/share/man/man8/strfile.8.gz
OLD_FILES+=usr/share/man/man8/unstr.8.gz
.endif
-.if ${MK_LLVM_COV} == no && !defined(WITH_PORT_BASE_GCC)
-OLD_FILES+=usr/bin/gcov
-OLD_FILES+=usr/share/man/man1/gcov.1.gz
-.endif
-
-.if ${MK_LLVM_COV} == no
-OLD_FILES+=usr/bin/llvm-cov
-OLD_FILES+=usr/bin/llvm-profdata
-OLD_FILES+=usr/share/man/man1/llvm-cov.1.gz
-OLD_FILES+=usr/share/man/man1/llvm-profdata.1.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_GOOGLETEST} == no
-OLD_FILES+=usr/include/gmock/gmock-actions.h
-OLD_FILES+=usr/include/gmock/gmock-cardinalities.h
-OLD_FILES+=usr/include/gmock/gmock-generated-actions.h
-OLD_FILES+=usr/include/gmock/gmock-generated-function-mockers.h
-OLD_FILES+=usr/include/gmock/gmock-generated-matchers.h
-OLD_FILES+=usr/include/gmock/gmock-generated-nice-strict.h
-OLD_FILES+=usr/include/gmock/gmock-matchers.h
-OLD_FILES+=usr/include/gmock/gmock-more-actions.h
-OLD_FILES+=usr/include/gmock/gmock-more-matchers.h
-OLD_FILES+=usr/include/gmock/gmock-spec-builders.h
-OLD_FILES+=usr/include/gmock/gmock.h
-OLD_FILES+=usr/include/gmock/internal/custom/gmock-generated-actions.h
-OLD_FILES+=usr/include/gmock/internal/custom/gmock-matchers.h
-OLD_FILES+=usr/include/gmock/internal/custom/gmock-port.h
-OLD_FILES+=usr/include/gmock/internal/gmock-generated-internal-utils.h
-OLD_FILES+=usr/include/gmock/internal/gmock-internal-utils.h
-OLD_FILES+=usr/include/gmock/internal/gmock-port.h
-OLD_DIRS+=usr/include/gmock
-OLD_FILES+=usr/include/gtest/gtest_pred_impl.h
-OLD_FILES+=usr/include/gtest/gtest_prod.h
-OLD_FILES+=usr/include/gtest/gtest-death-test.h
-OLD_FILES+=usr/include/gtest/gtest-message.h
-OLD_FILES+=usr/include/gtest/gtest-param-test.h
-OLD_FILES+=usr/include/gtest/gtest-printers.h
-OLD_FILES+=usr/include/gtest/gtest-spi.h
-OLD_FILES+=usr/include/gtest/gtest-test-part.h
-OLD_FILES+=usr/include/gtest/gtest-typed-test.h
-OLD_FILES+=usr/include/gtest/gtest.h
-OLD_FILES+=usr/include/gtest/internal/custom/gtest-port.h
-OLD_FILES+=usr/include/gtest/internal/custom/gtest-printers.h
-OLD_FILES+=usr/include/gtest/internal/custom/gtest.h
-OLD_FILES+=usr/include/gtest/internal/gtest-death-test-internal.h
-OLD_FILES+=usr/include/gtest/internal/gtest-filepath.h
-OLD_FILES+=usr/include/gtest/internal/gtest-internal.h
-OLD_FILES+=usr/include/gtest/internal/gtest-linked_ptr.h
-OLD_FILES+=usr/include/gtest/internal/gtest-param-util-generated.h
-OLD_FILES+=usr/include/gtest/internal/gtest-param-util.h
-OLD_FILES+=usr/include/gtest/internal/gtest-port-arch.h
-OLD_FILES+=usr/include/gtest/internal/gtest-port.h
-OLD_FILES+=usr/include/gtest/internal/gtest-string.h
-OLD_FILES+=usr/include/gtest/internal/gtest-tuple.h
-OLD_FILES+=usr/include/gtest/internal/gtest-type-util.h
-OLD_DIRS+=usr/include/gtest
-OLD_FILES+=usr/lib/libprivategmock_main.a
-OLD_FILES+=usr/lib/libprivategmock_main.so
-OLD_LIBS+=usr/lib/libprivategmock_main.so.0
-OLD_FILES+=usr/lib/libprivategmock_main_p.a
+OLD_FILES+=usr/include/private/gmock/gmock-actions.h
+OLD_FILES+=usr/include/private/gmock/gmock-cardinalities.h
+OLD_FILES+=usr/include/private/gmock/gmock-function-mocker.h
+OLD_FILES+=usr/include/private/gmock/gmock-matchers.h
+OLD_FILES+=usr/include/private/gmock/gmock-more-actions.h
+OLD_FILES+=usr/include/private/gmock/gmock-more-matchers.h
+OLD_FILES+=usr/include/private/gmock/gmock-nice-strict.h
+OLD_FILES+=usr/include/private/gmock/gmock-spec-builders.h
+OLD_FILES+=usr/include/private/gmock/gmock.h
+OLD_FILES+=usr/include/private/gmock/internal/custom/gmock-generated-actions.h
+OLD_FILES+=usr/include/private/gmock/internal/custom/gmock-matchers.h
+OLD_FILES+=usr/include/private/gmock/internal/custom/gmock-port.h
+OLD_FILES+=usr/include/private/gmock/internal/gmock-internal-utils.h
+OLD_FILES+=usr/include/private/gmock/internal/gmock-port.h
+OLD_FILES+=usr/include/private/gmock/internal/gmock-pp.h
+OLD_FILES+=usr/include/private/gtest/gtest-assertion-result.h
+OLD_FILES+=usr/include/private/gtest/gtest-death-test.h
+OLD_FILES+=usr/include/private/gtest/gtest-matchers.h
+OLD_FILES+=usr/include/private/gtest/gtest-message.h
+OLD_FILES+=usr/include/private/gtest/gtest-param-test.h
+OLD_FILES+=usr/include/private/gtest/gtest-printers.h
+OLD_FILES+=usr/include/private/gtest/gtest-spi.h
+OLD_FILES+=usr/include/private/gtest/gtest-test-part.h
+OLD_FILES+=usr/include/private/gtest/gtest-typed-test.h
+OLD_FILES+=usr/include/private/gtest/gtest.h
+OLD_FILES+=usr/include/private/gtest/gtest_pred_impl.h
+OLD_FILES+=usr/include/private/gtest/gtest_prod.h
+OLD_FILES+=usr/include/private/gtest/internal/custom/gtest-port.h
+OLD_FILES+=usr/include/private/gtest/internal/custom/gtest-printers.h
+OLD_FILES+=usr/include/private/gtest/internal/custom/gtest.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-death-test-internal.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-filepath.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-internal.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-param-util.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-port-arch.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-port.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-string.h
+OLD_FILES+=usr/include/private/gtest/internal/gtest-type-util.h
OLD_FILES+=usr/lib/libprivategmock.a
-OLD_FILES+=usr/lib/libprivategmock.so
-OLD_LIBS+=usr/lib/libprivategmock.so.0
OLD_FILES+=usr/lib/libprivategmock_p.a
-OLD_FILES+=usr/lib/libprivategtest_main.a
-OLD_FILES+=usr/lib/libprivategtest_main.so
-OLD_LIBS+=usr/lib/libprivategtest_main.so.0
-OLD_FILES+=usr/lib/libprivategtest_main_p.a
+OLD_LIBS+=usr/lib/libprivategmock.so
+OLD_LIBS+=usr/lib/libprivategmock.so.0
+OLD_FILES+=usr/lib/libprivategmock_main.a
+OLD_FILES+=usr/lib/libprivategmock_main_p.a
+OLD_LIBS+=usr/lib/libprivategmock_main.so
+OLD_LIBS+=usr/lib/libprivategmock_main.so.0
OLD_FILES+=usr/lib/libprivategtest.a
-OLD_FILES+=usr/lib/libprivategtest.so
-OLD_LIBS+=usr/lib/libprivategtest.so.0
OLD_FILES+=usr/lib/libprivategtest_p.a
-OLD_FILES+=usr/tests/lib/googletest/gmock/gmock_stress_test
+OLD_LIBS+=usr/lib/libprivategtest.so
+OLD_LIBS+=usr/lib/libprivategtest.so.0
+OLD_FILES+=usr/lib/libprivategtest_main.a
+OLD_FILES+=usr/lib/libprivategtest_main_p.a
+OLD_LIBS+=usr/lib/libprivategtest_main.so
+OLD_LIBS+=usr/lib/libprivategtest_main.so.0
+OLD_FILES+=usr/tests/lib/googletest/Kyuafile
OLD_FILES+=usr/tests/lib/googletest/gmock/Kyuafile
-OLD_DIRS+=usr/tests/lib/googletest/gmock
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_ex_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_link_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_test
+OLD_FILES+=usr/tests/lib/googletest/gmock/gmock_stress_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/Kyuafile
OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-actions_test
OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-cardinalities_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-ex_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-actions_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-function-mockers_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-internal-utils_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-matchers_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-function-mocker_test
OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-internal-utils_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-matchers_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-matchers-arithmetic_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-matchers-comparisons_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-matchers-containers_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-matchers-misc_test
OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-more-actions_test
OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-nice-strict_test
OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-port_test
OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-spec-builders_test
-OLD_FILES+=usr/tests/lib/googletest/gmock_main/Kyuafile
-OLD_DIRS+=usr/tests/lib/googletest/gmock_main
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_ex_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_link_test
+OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_test
+OLD_FILES+=usr/tests/lib/googletest/gtest/Kyuafile
OLD_FILES+=usr/tests/lib/googletest/gtest/googletest-param-test-test
-OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_all_test
+OLD_FILES+=usr/tests/lib/googletest/gtest/gtest-unittest-api_test
OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_environment_test
OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_no_test_unittest
OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_premature_exit_test
OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_repeat_test
OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_stress_test
OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_throw_on_failure_ex_test
-OLD_FILES+=usr/tests/lib/googletest/gtest/gtest-death-test_ex_catch_test
-OLD_FILES+=usr/tests/lib/googletest/gtest/gtest-death-test_ex_nocatch_test
-OLD_FILES+=usr/tests/lib/googletest/gtest/gtest-unittest-api_test
-OLD_FILES+=usr/tests/lib/googletest/gtest/Kyuafile
-OLD_DIRS+=usr/tests/lib/googletest/gtest
OLD_FILES+=usr/tests/lib/googletest/gtest_main/Kyuafile
OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-death-test-test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-filepath-test
-OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-linked-ptr-test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-listener-test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-message-test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-options-test
@@ -2213,7 +2200,6 @@ OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-port-test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-printers-test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-test-part-test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest-typed-test_test
-OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_help_test_
OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_main_unittest
OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_pred_impl_unittest
OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_prod_test
@@ -2221,14 +2207,9 @@ OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_skip_in_environment_setup_t
OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_skip_test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_sole_header_test
OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_unittest
-OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_xml_outfile1_test_
-OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_xml_outfile2_test_
-OLD_DIRS+=usr/tests/lib/googletest/gtest_main
-OLD_FILES+=usr/tests/lib/googletest/Kyuafile
-OLD_DIRS+=usr/tests/lib/googletest/
OLD_FILES+=usr/tests/share/examples/tests/googletest/Kyuafile
-OLD_FILES+=usr/tests/share/examples/tests/googletest/sample1_unittest
OLD_FILES+=usr/tests/share/examples/tests/googletest/sample10_unittest
+OLD_FILES+=usr/tests/share/examples/tests/googletest/sample1_unittest
OLD_FILES+=usr/tests/share/examples/tests/googletest/sample2_unittest
OLD_FILES+=usr/tests/share/examples/tests/googletest/sample3_unittest
OLD_FILES+=usr/tests/share/examples/tests/googletest/sample4_unittest
@@ -2236,6 +2217,17 @@ OLD_FILES+=usr/tests/share/examples/tests/googletest/sample5_unittest
OLD_FILES+=usr/tests/share/examples/tests/googletest/sample6_unittest
OLD_FILES+=usr/tests/share/examples/tests/googletest/sample7_unittest
OLD_FILES+=usr/tests/share/examples/tests/googletest/sample8_unittest
+OLD_DIRS+=usr/include/private/gmock/
+OLD_DIRS+=usr/include/private/gmock/internal
+OLD_DIRS+=usr/include/private/gmock/internal/custom
+OLD_DIRS+=usr/include/private/gtest/
+OLD_DIRS+=usr/include/private/gtest/internal
+OLD_DIRS+=usr/include/private/gtest/internal/custom
+OLD_DIRS+=usr/tests/lib/googletest
+OLD_DIRS+=usr/tests/lib/googletest/gmock
+OLD_DIRS+=usr/tests/lib/googletest/gmock_main
+OLD_DIRS+=usr/tests/lib/googletest/gtest
+OLD_DIRS+=usr/tests/lib/googletest/gtest_main
OLD_DIRS+=usr/tests/share/examples/tests/googletest
.endif
@@ -2270,84 +2262,6 @@ OLD_FILES+=usr/share/man/man3/gpio_pin_tristate.3.gz
OLD_FILES+=usr/share/man/man8/gpioctl.8.gz
.endif
-.if ${MK_GNU_DIFF} == no
-OLD_FILES+=usr/bin/diff3
-OLD_FILES+=usr/share/man/man1/diff3.1.gz
-.endif
-
-.if ${MK_GSSAPI} == no
-OLD_FILES+=usr/include/gssapi/gssapi.h
-OLD_DIRS+=usr/include/gssapi
-OLD_FILES+=usr/include/gssapi.h
-OLD_FILES+=usr/lib/libgssapi.a
-OLD_FILES+=usr/lib/libgssapi.so
-OLD_LIBS+=usr/lib/libgssapi.so.10
-OLD_FILES+=usr/lib/libgssapi_p.a
-OLD_FILES+=usr/lib/librpcsec_gss.a
-OLD_FILES+=usr/lib/librpcsec_gss.so
-OLD_LIBS+=usr/lib/librpcsec_gss.so.1
-OLD_FILES+=usr/sbin/gssd
-OLD_FILES+=usr/share/man/man3/gss_accept_sec_context.3.gz
-OLD_FILES+=usr/share/man/man3/gss_acquire_cred.3.gz
-OLD_FILES+=usr/share/man/man3/gss_add_cred.3.gz
-OLD_FILES+=usr/share/man/man3/gss_add_oid_set_member.3.gz
-OLD_FILES+=usr/share/man/man3/gss_canonicalize_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_compare_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_context_time.3.gz
-OLD_FILES+=usr/share/man/man3/gss_create_empty_oid_set.3.gz
-OLD_FILES+=usr/share/man/man3/gss_delete_sec_context.3.gz
-OLD_FILES+=usr/share/man/man3/gss_display_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_display_status.3.gz
-OLD_FILES+=usr/share/man/man3/gss_duplicate_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_export_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_export_sec_context.3.gz
-OLD_FILES+=usr/share/man/man3/gss_get_mic.3.gz
-OLD_FILES+=usr/share/man/man3/gss_import_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_import_sec_context.3.gz
-OLD_FILES+=usr/share/man/man3/gss_indicate_mechs.3.gz
-OLD_FILES+=usr/share/man/man3/gss_init_sec_context.3.gz
-OLD_FILES+=usr/share/man/man3/gss_inquire_context.3.gz
-OLD_FILES+=usr/share/man/man3/gss_inquire_cred.3.gz
-OLD_FILES+=usr/share/man/man3/gss_inquire_cred_by_mech.3.gz
-OLD_FILES+=usr/share/man/man3/gss_inquire_mechs_for_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_inquire_names_for_mech.3.gz
-OLD_FILES+=usr/share/man/man3/gss_process_context_token.3.gz
-OLD_FILES+=usr/share/man/man3/gss_release_buffer.3.gz
-OLD_FILES+=usr/share/man/man3/gss_release_cred.3.gz
-OLD_FILES+=usr/share/man/man3/gss_release_name.3.gz
-OLD_FILES+=usr/share/man/man3/gss_release_oid_set.3.gz
-OLD_FILES+=usr/share/man/man3/gss_seal.3.gz
-OLD_FILES+=usr/share/man/man3/gss_sign.3.gz
-OLD_FILES+=usr/share/man/man3/gss_test_oid_set_member.3.gz
-OLD_FILES+=usr/share/man/man3/gss_unseal.3.gz
-OLD_FILES+=usr/share/man/man3/gss_unwrap.3.gz
-OLD_FILES+=usr/share/man/man3/gss_verify.3.gz
-OLD_FILES+=usr/share/man/man3/gss_verify_mic.3.gz
-OLD_FILES+=usr/share/man/man3/gss_wrap.3.gz
-OLD_FILES+=usr/share/man/man3/gss_wrap_size_limit.3.gz
-OLD_FILES+=usr/share/man/man3/gssapi.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_get_error.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_get_mech_info.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_get_mechanisms.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_get_principal_name.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_get_versions.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_getcred.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_is_installed.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_max_data_length.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_mech_to_oid.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_oid_to_mech.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_qop_to_num.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_seccreate.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_set_callback.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_set_defaults.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_set_svc_name.3.gz
-OLD_FILES+=usr/share/man/man3/rpc_gss_svc_max_data_length.3.gz
-OLD_FILES+=usr/share/man/man3/rpcsec_gss.3.gz
-OLD_FILES+=usr/share/man/man5/mech.5.gz
-OLD_FILES+=usr/share/man/man5/qop.5.gz
-OLD_FILES+=usr/share/man/man8/gssd.8.gz
-.endif
-
.if ${MK_HAST} == no
OLD_FILES+=etc/rc.d/hastd
OLD_FILES+=sbin/hastctl
@@ -2449,12 +2363,68 @@ OLD_FILES+=usr/share/doc/ntp/release.html
OLD_FILES+=usr/share/doc/ntp/tickadj.html
.endif
+.if ${MK_HYPERV} == no
+OLD_FILES+=etc/devd/hyperv.conf
+OLD_FILES+=usr/libexec/hyperv/hv_set_ifconfig
+OLD_FILES+=usr/libexec/hyperv/hv_get_dns_info
+OLD_FILES+=usr/libexec/hyperv/hv_get_dhcp_info
+OLD_FILES+=usr/sbin/hv_kvp_daemon
+OLD_FILES+=usr/sbin/hv_vss_daemon
+OLD_FILES+=usr/share/man/man8/hv_kvp_daemon.8.gz
+.endif
+
.if ${MK_ICONV} == no
OLD_FILES+=usr/bin/iconv
OLD_FILES+=usr/bin/mkcsmapper
OLD_FILES+=usr/bin/mkesdb
OLD_FILES+=usr/include/_libiconv_compat.h
OLD_FILES+=usr/include/iconv.h
+OLD_LIBS+=usr/lib/i18n/libBIG5.so.5
+OLD_FILES+=usr/lib/i18n/libBIG5.so
+OLD_LIBS+=usr/lib/i18n/libDECHanyu.so.5
+OLD_FILES+=usr/lib/i18n/libDECHanyu.so
+OLD_LIBS+=usr/lib/i18n/libEUC.so.5
+OLD_FILES+=usr/lib/i18n/libEUC.so
+OLD_LIBS+=usr/lib/i18n/libEUCTW.so.5
+OLD_FILES+=usr/lib/i18n/libEUCTW.so
+OLD_LIBS+=usr/lib/i18n/libGBK2K.so.5
+OLD_FILES+=usr/lib/i18n/libGBK2K.so
+OLD_LIBS+=usr/lib/i18n/libHZ.so.5
+OLD_FILES+=usr/lib/i18n/libHZ.so
+OLD_LIBS+=usr/lib/i18n/libISO2022.so.5
+OLD_FILES+=usr/lib/i18n/libISO2022.so
+OLD_LIBS+=usr/lib/i18n/libJOHAB.so.5
+OLD_FILES+=usr/lib/i18n/libJOHAB.so
+OLD_LIBS+=usr/lib/i18n/libMSKanji.so.5
+OLD_FILES+=usr/lib/i18n/libMSKanji.so
+OLD_LIBS+=usr/lib/i18n/libUES.so.5
+OLD_FILES+=usr/lib/i18n/libUES.so
+OLD_LIBS+=usr/lib/i18n/libUTF1632.so.5
+OLD_FILES+=usr/lib/i18n/libUTF1632.so
+OLD_LIBS+=usr/lib/i18n/libUTF7.so.5
+OLD_FILES+=usr/lib/i18n/libUTF7.so
+OLD_LIBS+=usr/lib/i18n/libUTF8.so.5
+OLD_FILES+=usr/lib/i18n/libUTF8.so
+OLD_LIBS+=usr/lib/i18n/libVIQR.so.5
+OLD_FILES+=usr/lib/i18n/libVIQR.so
+OLD_LIBS+=usr/lib/i18n/libZW.so.5
+OLD_FILES+=usr/lib/i18n/libZW.so
+OLD_LIBS+=usr/lib/i18n/libiconv_none.so.5
+OLD_FILES+=usr/lib/i18n/libiconv_none.so
+OLD_LIBS+=usr/lib/i18n/libiconv_std.so.5
+OLD_FILES+=usr/lib/i18n/libiconv_std.so
+OLD_LIBS+=usr/lib/i18n/libmapper_646.so.5
+OLD_FILES+=usr/lib/i18n/libmapper_646.so
+OLD_LIBS+=usr/lib/i18n/libmapper_none.so.5
+OLD_FILES+=usr/lib/i18n/libmapper_none.so
+OLD_LIBS+=usr/lib/i18n/libmapper_parallel.so.5
+OLD_FILES+=usr/lib/i18n/libmapper_parallel.so
+OLD_LIBS+=usr/lib/i18n/libmapper_serial.so.5
+OLD_FILES+=usr/lib/i18n/libmapper_serial.so
+OLD_LIBS+=usr/lib/i18n/libmapper_std.so.5
+OLD_FILES+=usr/lib/i18n/libmapper_std.so
+OLD_LIBS+=usr/lib/i18n/libmapper_zone.so.5
+OLD_FILES+=usr/lib/i18n/libmapper_zone.so
OLD_FILES+=usr/share/man/man1/iconv.1.gz
OLD_FILES+=usr/share/man/man1/mkcsmapper.1.gz
OLD_FILES+=usr/share/man/man1/mkesdb.1.gz
@@ -2468,6 +2438,7 @@ OLD_FILES+=usr/share/man/man3/iconv_open.3.gz
OLD_FILES+=usr/share/man/man3/iconv_open_into.3.gz
OLD_FILES+=usr/share/man/man3/iconvctl.3.gz
OLD_FILES+=usr/share/man/man3/iconvlist.3.gz
+OLD_DIRS+=usr/lib/i18n
OLD_DIRS+=usr/share/i18n
OLD_DIRS+=usr/share/i18n/esdb
OLD_DIRS+=usr/share/i18n/esdb/ISO-2022
@@ -2646,6 +2617,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
@@ -2687,23 +2659,99 @@ OLD_FILES+=usr/share/man/man1/kdump.1.gz
OLD_FILES+=usr/share/man/man1/truss.1.gz
.endif
-.if ${MK_KERBEROS} == no
-OLD_FILES+=etc/rc.d/ipropd_master
-OLD_FILES+=etc/rc.d/ipropd_slave
-OLD_FILES+=usr/bin/asn1_compile
+.if ${MK_KERBEROS_SUPPORT} == "no"
+OLD_FILES+=etc/rc.d/gssd
+OLD_FILES+=usr/sbin/gssd
+OLD_FILES+=usr/share/man/man8/gssd.8.gz
+.endif
+
+# Kerberos files which are installed by both Heimdal and MIT. These should
+# only be removed if Kerberos is disabled entirely.
+.if ${MK_KERBEROS} == "no"
+
OLD_FILES+=usr/bin/compile_et
-OLD_FILES+=usr/bin/hxtool
+OLD_FILES+=usr/share/man/man1/compile_et.1.gz
+# This is kadmin(1) in MIT but kadmin(8) in Heimdal, therefore the manpage
+# is not listed here.
OLD_FILES+=usr/bin/kadmin
-OLD_FILES+=usr/bin/kcc
OLD_FILES+=usr/bin/kdestroy
-OLD_FILES+=usr/bin/kf
-OLD_FILES+=usr/bin/kgetcred
+OLD_FILES+=usr/share/man/man1/kdestroy.1.gz
OLD_FILES+=usr/bin/kinit
+OLD_FILES+=usr/share/man/man1/kinit.1.gz
OLD_FILES+=usr/bin/klist
+OLD_FILES+=usr/share/man/man1/klist.1.gz
OLD_FILES+=usr/bin/kpasswd
+OLD_FILES+=usr/share/man/man1/kpasswd.1.gz
OLD_FILES+=usr/bin/krb5-config
-OLD_FILES+=usr/bin/ksu
+OLD_FILES+=usr/share/man/man1/krb5-config.1.gz
OLD_FILES+=usr/bin/kswitch
+OLD_FILES+=usr/share/man/man1/kswitch.1.gz
+# MIT has a manpage for this, Heimdal does not.
+OLD_FILES+=usr/bin/ksu
+
+OLD_FILES+=usr/include/com_err.h
+OLD_FILES+=usr/include/gssapi.h
+OLD_FILES+=usr/include/gssapi/gssapi.h
+OLD_FILES+=usr/include/gssapi/gssapi_krb5.h
+OLD_FILES+=usr/include/kadm5/admin.h
+OLD_FILES+=usr/include/krb5.h
+OLD_FILES+=usr/include/krb5/locate_plugin.h
+
+OLD_FILES+=usr/lib/libcom_err.a
+OLD_FILES+=usr/lib/libcom_err.so
+OLD_FILES+=usr/lib/libgssapi_krb5.a
+OLD_FILES+=usr/lib/libgssapi_krb5.so
+OLD_FILES+=usr/lib/libkadm5clnt.so
+OLD_FILES+=usr/lib/libkrb5.a
+OLD_FILES+=usr/lib/libkrb5.so
+OLD_FILES+=usr/lib/librpcsec_gss.a
+OLD_FILES+=usr/lib/librpcsec_gss.so
+OLD_LIBS+=usr/lib/librpcsec_gss.so.1
+OLD_FILES+=usr/lib/pam_krb5.so
+OLD_LIBS+=usr/lib/pam_krb5.so.6
+OLD_FILES+=usr/share/man/man8/pam_krb5.8.gz
+OLD_FILES+=usr/lib/pam_ksu.so
+OLD_LIBS+=usr/lib/pam_ksu.so.6
+OLD_FILES+=usr/share/man/man8/pam_ksu.8.gz
+
+OLD_FILES+=usr/libexec/kadmind
+OLD_FILES+=usr/share/man/man8/kadmind.8.gz
+
+OLD_FILES+=usr/share/man/man3/com_err.3.gz
+OLD_FILES+=usr/share/man/man3/rpcsec_gss.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_get_error.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_get_mech_info.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_get_mechanisms.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_get_principal_name.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_get_versions.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_getcred.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_is_installed.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_max_data_length.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_mech_to_oid.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_oid_to_mech.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_qop_to_num.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_seccreate.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_set_callback.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_set_defaults.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_set_svc_name.3.gz
+OLD_FILES+=usr/share/man/man3/rpc_gss_svc_max_data_length.3.gz
+OLD_FILES+=usr/share/man/man5/krb5.conf.5.gz
+.endif # ${MK_KERBEROS} == "no"
+
+# Heimdal-specific files that don't exist in MIT Kerberos. These should be
+# removed if Kerberos is disabled, or if MIT Kerberos is selected.
+.if ${MK_KERBEROS} == "no" || ${MK_MITKRB5} != "no"
+
+# compile_et is a binary in Heimdal, but a shell script in MIT Kerberos.
+# When switching from Heimdal to MIT, we need to remove the debug symbols
+# explicitly.
+OLD_FILES+=usr/lib/debug/usr/bin/compile_et.debug
+
+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
@@ -2712,13 +2760,13 @@ 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/com_right.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/getarg.h
-OLD_FILES+=usr/include/gssapi/gssapi_krb5.h
OLD_FILES+=usr/include/hdb-protos.h
OLD_FILES+=usr/include/hdb.h
OLD_FILES+=usr/include/hdb_asn1.h
@@ -2735,25 +2783,20 @@ OLD_FILES+=usr/include/hx509-protos.h
OLD_FILES+=usr/include/hx509.h
OLD_FILES+=usr/include/hx509_err.h
OLD_FILES+=usr/include/k524_err.h
-OLD_FILES+=usr/include/kadm5/admin.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_DIRS+=usr/include/kadm5
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.h
OLD_FILES+=usr/include/krb5/ccache_plugin.h
-OLD_FILES+=usr/include/krb5/locate_plugin.h
OLD_FILES+=usr/include/krb5/send_to_kdc_plugin.h
OLD_FILES+=usr/include/krb5/windc_plugin.h
-OLD_DIRS+=usr/include/krb5
OLD_FILES+=usr/include/krb5_asn1.h
OLD_FILES+=usr/include/krb5_ccapi.h
OLD_FILES+=usr/include/krb5_err.h
@@ -2771,113 +2814,99 @@ 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/roken.h
OLD_FILES+=usr/include/rtbl.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_FILES+=usr/lib/libcom_err.a
-OLD_FILES+=usr/lib/libcom_err.so
-OLD_LIBS+=usr/lib/libcom_err.so.5
-OLD_FILES+=usr/lib/libcom_err_p.a
-OLD_FILES+=usr/lib/libgssapi_krb5.a
-OLD_FILES+=usr/lib/libgssapi_krb5.so
-OLD_LIBS+=usr/lib/libgssapi_krb5.so.10
-OLD_FILES+=usr/lib/libgssapi_krb5_p.a
+OLD_FILES+=usr/lib/libgssapi.a
+OLD_FILES+=usr/lib/libgssapi.so
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_FILES+=usr/lib/libkrb5.a
-OLD_FILES+=usr/lib/libkrb5.so
-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/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
-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/lib/libroken.a
+OLD_FILES+=usr/lib/libroken.so
+OLD_FILES+=usr/lib/libwind.a
+OLD_FILES+=usr/lib/libwind.so
+OLD_FILES+=usr/lib/libwind.so.11
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/kadmind
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/iprop-log
OLD_FILES+=usr/sbin/kstash
OLD_FILES+=usr/sbin/ktutil
-OLD_FILES+=usr/sbin/iprop-log
-OLD_FILES+=usr/share/man/man1/kdestroy.1.gz
OLD_FILES+=usr/share/man/man1/kf.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/kswitch.1.gz
+OLD_FILES+=usr/share/man/man1/kgetcred.1.gz
OLD_FILES+=usr/share/man/man3/HDB.3.gz
+OLD_FILES+=usr/share/man/man3/gss_accept_sec_context.3.gz
+OLD_FILES+=usr/share/man/man3/gss_acquire_cred.3.gz
+OLD_FILES+=usr/share/man/man3/gss_add_cred.3.gz
+OLD_FILES+=usr/share/man/man3/gss_add_oid_set_member.3.gz
+OLD_FILES+=usr/share/man/man3/gss_canonicalize_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_compare_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_context_time.3.gz
+OLD_FILES+=usr/share/man/man3/gss_create_empty_oid_set.3.gz
+OLD_FILES+=usr/share/man/man3/gss_delete_sec_context.3.gz
+OLD_FILES+=usr/share/man/man3/gss_display_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_display_status.3.gz
+OLD_FILES+=usr/share/man/man3/gss_duplicate_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_export_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_export_sec_context.3.gz
+OLD_FILES+=usr/share/man/man3/gss_get_mic.3.gz
+OLD_FILES+=usr/share/man/man3/gss_import_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_import_sec_context.3.gz
+OLD_FILES+=usr/share/man/man3/gss_indicate_mechs.3.gz
+OLD_FILES+=usr/share/man/man3/gss_init_sec_context.3.gz
+OLD_FILES+=usr/share/man/man3/gss_inquire_context.3.gz
+OLD_FILES+=usr/share/man/man3/gss_inquire_cred.3.gz
+OLD_FILES+=usr/share/man/man3/gss_inquire_cred_by_mech.3.gz
+OLD_FILES+=usr/share/man/man3/gss_inquire_mechs_for_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_inquire_names_for_mech.3.gz
+OLD_FILES+=usr/share/man/man3/gss_process_context_token.3.gz
+OLD_FILES+=usr/share/man/man3/gss_release_buffer.3.gz
+OLD_FILES+=usr/share/man/man3/gss_release_cred.3.gz
+OLD_FILES+=usr/share/man/man3/gss_release_name.3.gz
+OLD_FILES+=usr/share/man/man3/gss_release_oid_set.3.gz
+OLD_FILES+=usr/share/man/man3/gss_seal.3.gz
+OLD_FILES+=usr/share/man/man3/gss_sign.3.gz
+OLD_FILES+=usr/share/man/man3/gss_test_oid_set_member.3.gz
+OLD_FILES+=usr/share/man/man3/gss_unseal.3.gz
+OLD_FILES+=usr/share/man/man3/gss_unwrap.3.gz
+OLD_FILES+=usr/share/man/man3/gss_verify.3.gz
+OLD_FILES+=usr/share/man/man3/gss_verify_mic.3.gz
+OLD_FILES+=usr/share/man/man3/gss_wrap.3.gz
+OLD_FILES+=usr/share/man/man3/gss_wrap_size_limit.3.gz
+OLD_FILES+=usr/share/man/man3/gssapi.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
@@ -3567,38 +3596,187 @@ 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/man5/krb5.conf.5.gz
+OLD_FILES+=usr/share/man/man5/mech.5.gz
+OLD_FILES+=usr/share/man/man5/qop.5.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/kadmind.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/kfd.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/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
-.endif
-.if ${MK_KERBEROS_SUPPORT} == no
-OLD_FILES+=usr/bin/compile_et
-OLD_FILES+=usr/include/com_err.h
-OLD_FILES+=usr/include/com_right.h
-OLD_FILES+=usr/lib/libcom_err.a
-OLD_FILES+=usr/lib/libcom_err.so
+OLD_LIBS+=usr/lib/libasn1.so.11
OLD_LIBS+=usr/lib/libcom_err.so.5
-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
+OLD_LIBS+=usr/lib/libgssapi.so.10
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.10
+OLD_LIBS+=usr/lib/libgssapi_ntlm.so.10
+OLD_LIBS+=usr/lib/libgssapi_spnego.so.10
+OLD_LIBS+=usr/lib/libheimbase.so.11
+OLD_LIBS+=usr/lib/libheimntlm.so.11
+OLD_LIBS+=usr/lib/libhx509.so.11
+OLD_LIBS+=usr/lib/libhdb.so.11
+OLD_LIBS+=usr/lib/libkadm5clnt.so.11
+OLD_LIBS+=usr/lib/libkadm5srv.so.11
+OLD_LIBS+=usr/lib/libkafs5.so.11
+OLD_LIBS+=usr/lib/libkdc.so.11
+OLD_LIBS+=usr/lib/libkrb5.so.11
+OLD_LIBS+=usr/lib/libprivateheimipcc.so.11
+OLD_LIBS+=usr/lib/libprivateheimipcs.so.11
+OLD_LIBS+=usr/lib/libroken.so.11
+.endif # ${MK_KERBEROS} == "no" || ${MK_MITKRB5} != "no"
+
+# MIT-specific files that don't exist in Heimdal. These should be removed if
+# Kerberos is disabled, or if Heimdal is selected.
+.if ${MK_KERBEROS} == "no" || ${MK_MITKRB5} == "no"
+OLD_DIRS+=usr/lib/debug/usr/lib/krb5/plugins/kdb
+OLD_DIRS+=usr/lib/debug/usr/lib/krb5/plugins/preauth
+OLD_DIRS+=usr/lib/debug/usr/lib/krb5/plugins/tls
+OLD_DIRS+=usr/lib/debug/usr/lib/krb5/plugins
+OLD_DIRS+=usr/lib/debug/usr/lib/krb5
+
+# Heimdal doesn't install debug symbols for these.
+OLD_FILES+=usr/lib/debug/usr/bin/klist.debug
+OLD_FILES+=usr/lib/debug/usr/bin/kswitch.debug
+
+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/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/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/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/gssapi_err_generic.h
+OLD_FILES+=usr/include/krb5/gssapi_err_krb5.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/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/verto-module.h
+OLD_FILES+=usr/include/verto.h
+OLD_FILES+=usr/lib/krb5/plugins/kdb/db2.so
+OLD_FILES+=usr/lib/krb5/plugins/kdb/db2.so.122
+OLD_FILES+=usr/lib/krb5/plugins/preauth/otp.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/otp.so.122
+OLD_FILES+=usr/lib/krb5/plugins/preauth/pkinit.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/pkinit.so.122
+OLD_FILES+=usr/lib/krb5/plugins/preauth/spake.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/spake.so.122
+OLD_FILES+=usr/lib/krb5/plugins/preauth/test.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/test.so.122
+OLD_FILES+=usr/lib/krb5/plugins/tls/k5tls.so
+OLD_FILES+=usr/lib/krb5/plugins/tls/k5tls.so.122
+OLD_FILES+=usr/lib/libgssrpc.a
+OLD_FILES+=usr/lib/libgssrpc.so
+OLD_FILES+=usr/lib/libk5crypto.a
+OLD_FILES+=usr/lib/libk5crypto.so
+OLD_FILES+=usr/lib/libkadm5clnt_mit.a
+OLD_FILES+=usr/lib/libkadm5clnt_mit.so
+OLD_FILES+=usr/lib/libkadm5srv_mit.a
+OLD_FILES+=usr/lib/libkadm5srv_mit.so
+OLD_FILES+=usr/lib/libkdb5.a
+OLD_FILES+=usr/lib/libkdb5.so
+OLD_FILES+=usr/lib/libkrad.a
+OLD_FILES+=usr/lib/libkrad.so
+OLD_FILES+=usr/lib/libkrb5profile.a
+OLD_FILES+=usr/lib/libkrb5profile.so
+OLD_FILES+=usr/lib/libkrb5support.a
+OLD_FILES+=usr/lib/libkrb5support.so
+OLD_FILES+=usr/lib/libverto.a
+OLD_FILES+=usr/lib/libverto.so
+OLD_FILES+=usr/libdata/pkgconfig/gssrpc.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-server.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-client.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.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5-gssapi.pc
+OLD_FILES+=usr/libexec/kprop
+OLD_FILES+=usr/libexec/kpropd
+OLD_FILES+=usr/libexec/kproplog
+OLD_FILES+=usr/libexec/krb5kdc
+OLD_FILES+=usr/sbin/gss-server
+OLD_FILES+=usr/sbin/kadmin.local
+OLD_FILES+=usr/sbin/kdb5_util
+OLD_FILES+=usr/sbin/sim_server
+OLD_FILES+=usr/share/et/et_h.awk
+OLD_FILES+=usr/share/et/et_c.awk
+OLD_FILES+=usr/share/man/man1/k5srvutil.1.gz
+OLD_FILES+=usr/share/man/man1/kadmin.1.gz
+OLD_FILES+=usr/share/man/man1/ksu.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_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/pam-krb5.8.gz
+
+OLD_LIBS+=usr/lib/libcom_err.so.122
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.122
+OLD_LIBS+=usr/lib/libgssrpc.so.122
+OLD_LIBS+=usr/lib/libk5crypto.so.122
+OLD_LIBS+=usr/lib/libkadm5clnt_mit.so.122
+OLD_LIBS+=usr/lib/libkadm5srv_mit.so.122
+OLD_LIBS+=usr/lib/libkdb5.so.122
+OLD_LIBS+=usr/lib/libkrad.so.122
+OLD_LIBS+=usr/lib/libkrb5.so.122
+OLD_LIBS+=usr/lib/libkrb5profile.so.122
+OLD_LIBS+=usr/lib/libkrb5support.so.122
+OLD_LIBS+=usr/lib/libverto.so.122
+.endif # ${MK_KERBEROS} == "no" || ${MK_MITKRB5} == "no"
.if ${MK_LDNS} == no
OLD_FILES+=usr/lib/libprivateldns.a
@@ -3631,588 +3809,36 @@ OLD_FILES+=usr/share/man/man5/keymap.5.gz
OLD_FILES+=usr/share/man/man8/moused.8.gz
.endif
-.if ${MK_LIB32} == no
-OLD_FILES+=etc/mtree/BSD.lib32.dist
-OLD_FILES+=libexec/ld-elf32.so.1
-. if exists(${DESTDIR}/usr/lib32)
-LIB32_DIRS!=find ${DESTDIR}/usr/lib32 -type d \
+.for LIBCOMPAT libcompat in ${_ALL_LIBCOMPATS_libcompats}
+. if ${MK_LIB${LIBCOMPAT}} == no
+OLD_FILES+=etc/mtree/BSD.lib${libcompat}.dist
+OLD_FILES+=libexec/ld-elf${libcompat}.so.1
+. if exists(${DESTDIR}/usr/lib${libcompat})
+LIB${LIBCOMPAT}_DIRS!=find ${DESTDIR}/usr/lib${libcompat} -type d \
| sed -e 's,^${DESTDIR}/,,'; echo
-LIB32_FILES!=find ${DESTDIR}/usr/lib32 \! -type d \
+LIB${LIBCOMPAT}_FILES!=find ${DESTDIR}/usr/lib${libcompat} \! -type d \
\! -name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
-LIB32_LIBS!=find ${DESTDIR}/usr/lib32 \! -type d \
+LIB${LIBCOMPAT}_LIBS!=find ${DESTDIR}/usr/lib${libcompat} \! -type d \
-name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
-OLD_DIRS+=${LIB32_DIRS}
-OLD_FILES+=${LIB32_FILES}
-OLD_LIBS+=${LIB32_LIBS}
-. endif
-. if ${MK_DEBUG_FILES} == no
-. if exists(${DESTDIR}/usr/lib/debug/usr/lib32)
-DEBUG_LIB32_DIRS!=find ${DESTDIR}/usr/lib/debug/usr/lib32 -type d \
+OLD_DIRS+=${LIB${LIBCOMPAT}_DIRS}
+OLD_FILES+=${LIB${LIBCOMPAT}_FILES}
+OLD_LIBS+=${LIB${LIBCOMPAT}_LIBS}
+. endif
+. if ${MK_DEBUG_FILES} == no
+. if exists(${DESTDIR}/usr/lib/debug/usr/lib${libcompat})
+DEBUG_LIB${LIBCOMPAT}_DIRS!=find ${DESTDIR}/usr/lib/debug/usr/lib${libcompat} -type d \
| sed -e 's,^${DESTDIR}/,,'; echo
-DEBUG_LIB32_FILES!=find ${DESTDIR}/usr/lib/debug/usr/lib32 \! -type d \
+DEBUG_LIB${LIBCOMPAT}_FILES!=find ${DESTDIR}/usr/lib/debug/usr/lib${libcompat} \! -type d \
\! -name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
-DEBUG_LIB32_LIBS!=find ${DESTDIR}/usr/lib/debug/usr/lib32 \! -type d \
+DEBUG_LIB${LIBCOMPAT}_LIBS!=find ${DESTDIR}/usr/lib/debug/usr/lib${libcompat} \! -type d \
-name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
-OLD_DIRS+=${DEBUG_LIB32_DIRS}
-OLD_FILES+=${DEBUG_LIB32_FILES}
-OLD_LIBS+=${DEBUG_LIB32_LIBS}
+OLD_DIRS+=${DEBUG_LIB${LIBCOMPAT}_DIRS}
+OLD_FILES+=${DEBUG_LIB${LIBCOMPAT}_FILES}
+OLD_LIBS+=${DEBUG_LIB${LIBCOMPAT}_LIBS}
+. endif
. endif
-. endif
-.endif
-
-.if ${MK_CXX} == no
-OLD_LIBS+=lib/libcxxrt.so.1
-OLD_FILES+=usr/lib/libc++.a
-OLD_FILES+=usr/lib/libc++_p.a
-OLD_FILES+=usr/lib/libc++experimental.a
-OLD_FILES+=usr/lib/libc++.so
-OLD_LIBS+=usr/lib/libc++.so.1
-OLD_FILES+=usr/lib/libcxxrt.a
-OLD_FILES+=usr/lib/libcxxrt.so
-OLD_FILES+=usr/lib/libcxxrt_p.a
-OLD_FILES+=usr/include/c++/v1/__algorithm/adjacent_find.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/all_of.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/any_of.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/binary_search.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/clamp.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/comp.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/comp_ref_type.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/copy_backward.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/copy_if.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/copy_n.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/count.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/count_if.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/equal.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/equal_range.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/fill.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/fill_n.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/find.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/find_end.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/find_first_of.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/find_if.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/find_if_not.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/for_each.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/for_each_n.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/generate.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/generate_n.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/half_positive.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/in_in_out_result.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/in_in_result.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/in_out_result.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/includes.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/inplace_merge.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/is_heap.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/is_heap_until.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/is_partitioned.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/is_permutation.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/is_sorted.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/is_sorted_until.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/iter_swap.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/lexicographical_compare.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/lower_bound.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/make_heap.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/max.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/max_element.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/merge.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/min.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/min_element.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/minmax.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/minmax_element.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/mismatch.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/move.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/move_backward.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/next_permutation.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/none_of.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/nth_element.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/partial_sort.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/partial_sort_copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/partition.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/partition_copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/partition_point.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/pop_heap.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/prev_permutation.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/push_heap.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/remove.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/remove_copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/remove_copy_if.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/remove_if.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/replace.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/replace_copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/replace_copy_if.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/replace_if.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/reverse.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/reverse_copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/rotate.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/rotate_copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/sample.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/search.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/search_n.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/set_difference.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/set_intersection.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/set_symmetric_difference.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/set_union.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/shift_left.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/shift_right.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/shuffle.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/sift_down.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/sort.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/sort_heap.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/stable_partition.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/stable_sort.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/swap_ranges.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/transform.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/unique.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/unique_copy.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/unwrap_iter.h
-OLD_FILES+=usr/include/c++/v1/__algorithm/upper_bound.h
-OLD_DIRS+=usr/include/c++/v1/__algorithm
-OLD_FILES+=usr/include/c++/v1/__availability
-OLD_FILES+=usr/include/c++/v1/__bit/bit_cast.h
-OLD_FILES+=usr/include/c++/v1/__bit/byteswap.h
-OLD_DIRS+=usr/include/c++/v1/__bit
-OLD_FILES+=usr/include/c++/v1/__bit_reference
-OLD_FILES+=usr/include/c++/v1/__bits
-OLD_FILES+=usr/include/c++/v1/__bsd_locale_defaults.h
-OLD_FILES+=usr/include/c++/v1/__bsd_locale_fallbacks.h
-OLD_FILES+=usr/include/c++/v1/__charconv/chars_format.h
-OLD_FILES+=usr/include/c++/v1/__charconv/from_chars_result.h
-OLD_FILES+=usr/include/c++/v1/__charconv/to_chars_result.h
-OLD_DIRS+=usr/include/c++/v1/__charconv
-OLD_FILES+=usr/include/c++/v1/__chrono/calendar.h
-OLD_FILES+=usr/include/c++/v1/__chrono/convert_to_timespec.h
-OLD_FILES+=usr/include/c++/v1/__chrono/duration.h
-OLD_FILES+=usr/include/c++/v1/__chrono/file_clock.h
-OLD_FILES+=usr/include/c++/v1/__chrono/high_resolution_clock.h
-OLD_FILES+=usr/include/c++/v1/__chrono/steady_clock.h
-OLD_FILES+=usr/include/c++/v1/__chrono/system_clock.h
-OLD_FILES+=usr/include/c++/v1/__chrono/time_point.h
-OLD_DIRS+=usr/include/c++/v1/__chrono
-OLD_FILES+=usr/include/c++/v1/__compare/common_comparison_category.h
-OLD_FILES+=usr/include/c++/v1/__compare/compare_partial_order_fallback.h
-OLD_FILES+=usr/include/c++/v1/__compare/compare_strong_order_fallback.h
-OLD_FILES+=usr/include/c++/v1/__compare/compare_three_way.h
-OLD_FILES+=usr/include/c++/v1/__compare/compare_three_way_result.h
-OLD_FILES+=usr/include/c++/v1/__compare/compare_weak_order_fallback.h
-OLD_FILES+=usr/include/c++/v1/__compare/is_eq.h
-OLD_FILES+=usr/include/c++/v1/__compare/ordering.h
-OLD_FILES+=usr/include/c++/v1/__compare/partial_order.h
-OLD_FILES+=usr/include/c++/v1/__compare/strong_order.h
-OLD_FILES+=usr/include/c++/v1/__compare/synth_three_way.h
-OLD_FILES+=usr/include/c++/v1/__compare/three_way_comparable.h
-OLD_FILES+=usr/include/c++/v1/__compare/weak_order.h
-OLD_DIRS+=usr/include/c++/v1/__compare
-OLD_FILES+=usr/include/c++/v1/__concepts/arithmetic.h
-OLD_FILES+=usr/include/c++/v1/__concepts/assignable.h
-OLD_FILES+=usr/include/c++/v1/__concepts/boolean_testable.h
-OLD_FILES+=usr/include/c++/v1/__concepts/class_or_enum.h
-OLD_FILES+=usr/include/c++/v1/__concepts/common_reference_with.h
-OLD_FILES+=usr/include/c++/v1/__concepts/common_with.h
-OLD_FILES+=usr/include/c++/v1/__concepts/constructible.h
-OLD_FILES+=usr/include/c++/v1/__concepts/convertible_to.h
-OLD_FILES+=usr/include/c++/v1/__concepts/copyable.h
-OLD_FILES+=usr/include/c++/v1/__concepts/derived_from.h
-OLD_FILES+=usr/include/c++/v1/__concepts/destructible.h
-OLD_FILES+=usr/include/c++/v1/__concepts/different_from.h
-OLD_FILES+=usr/include/c++/v1/__concepts/equality_comparable.h
-OLD_FILES+=usr/include/c++/v1/__concepts/invocable.h
-OLD_FILES+=usr/include/c++/v1/__concepts/movable.h
-OLD_FILES+=usr/include/c++/v1/__concepts/predicate.h
-OLD_FILES+=usr/include/c++/v1/__concepts/regular.h
-OLD_FILES+=usr/include/c++/v1/__concepts/relation.h
-OLD_FILES+=usr/include/c++/v1/__concepts/same_as.h
-OLD_FILES+=usr/include/c++/v1/__concepts/semiregular.h
-OLD_FILES+=usr/include/c++/v1/__concepts/swappable.h
-OLD_FILES+=usr/include/c++/v1/__concepts/totally_ordered.h
-OLD_DIRS+=usr/include/c++/v1/__concepts
-OLD_FILES+=usr/include/c++/v1/__config
-OLD_FILES+=usr/include/c++/v1/__config_site
-OLD_FILES+=usr/include/c++/v1/__coroutine/coroutine_handle.h
-OLD_FILES+=usr/include/c++/v1/__coroutine/coroutine_traits.h
-OLD_FILES+=usr/include/c++/v1/__coroutine/noop_coroutine_handle.h
-OLD_FILES+=usr/include/c++/v1/__coroutine/trivial_awaitables.h
-OLD_DIRS+=usr/include/c++/v1/__coroutine
-OLD_FILES+=usr/include/c++/v1/__debug
-OLD_FILES+=usr/include/c++/v1/__errc
-OLD_FILES+=usr/include/c++/v1/__filesystem/copy_options.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/directory_entry.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/directory_iterator.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/directory_options.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/file_status.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/file_time_type.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/file_type.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/filesystem_error.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/operations.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/path.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/path_iterator.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/perm_options.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/perms.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/recursive_directory_iterator.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/space_info.h
-OLD_FILES+=usr/include/c++/v1/__filesystem/u8path.h
-OLD_DIRS+=usr/include/c++/v1/__filesystem
-OLD_FILES+=usr/include/c++/v1/__format/format_arg.h
-OLD_FILES+=usr/include/c++/v1/__format/format_args.h
-OLD_FILES+=usr/include/c++/v1/__format/format_context.h
-OLD_FILES+=usr/include/c++/v1/__format/format_error.h
-OLD_FILES+=usr/include/c++/v1/__format/format_fwd.h
-OLD_FILES+=usr/include/c++/v1/__format/format_parse_context.h
-OLD_FILES+=usr/include/c++/v1/__format/format_string.h
-OLD_FILES+=usr/include/c++/v1/__format/format_to_n_result.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter_bool.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter_char.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter_floating_point.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter_integer.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter_integral.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter_pointer.h
-OLD_FILES+=usr/include/c++/v1/__format/formatter_string.h
-OLD_FILES+=usr/include/c++/v1/__format/parser_std_format_spec.h
-OLD_DIRS+=usr/include/c++/v1/__format
-OLD_FILES+=usr/include/c++/v1/__functional/binary_function.h
-OLD_FILES+=usr/include/c++/v1/__functional/binary_negate.h
-OLD_FILES+=usr/include/c++/v1/__functional/bind.h
-OLD_FILES+=usr/include/c++/v1/__functional/bind_back.h
-OLD_FILES+=usr/include/c++/v1/__functional/bind_front.h
-OLD_FILES+=usr/include/c++/v1/__functional/binder1st.h
-OLD_FILES+=usr/include/c++/v1/__functional/binder2nd.h
-OLD_FILES+=usr/include/c++/v1/__functional/compose.h
-OLD_FILES+=usr/include/c++/v1/__functional/default_searcher.h
-OLD_FILES+=usr/include/c++/v1/__functional/function.h
-OLD_FILES+=usr/include/c++/v1/__functional/hash.h
-OLD_FILES+=usr/include/c++/v1/__functional/identity.h
-OLD_FILES+=usr/include/c++/v1/__functional/invoke.h
-OLD_FILES+=usr/include/c++/v1/__functional/is_transparent.h
-OLD_FILES+=usr/include/c++/v1/__functional/mem_fn.h
-OLD_FILES+=usr/include/c++/v1/__functional/mem_fun_ref.h
-OLD_FILES+=usr/include/c++/v1/__functional/not_fn.h
-OLD_FILES+=usr/include/c++/v1/__functional/operations.h
-OLD_FILES+=usr/include/c++/v1/__functional/perfect_forward.h
-OLD_FILES+=usr/include/c++/v1/__functional/pointer_to_binary_function.h
-OLD_FILES+=usr/include/c++/v1/__functional/pointer_to_unary_function.h
-OLD_FILES+=usr/include/c++/v1/__functional/ranges_operations.h
-OLD_FILES+=usr/include/c++/v1/__functional/reference_wrapper.h
-OLD_FILES+=usr/include/c++/v1/__functional/unary_function.h
-OLD_FILES+=usr/include/c++/v1/__functional/unary_negate.h
-OLD_FILES+=usr/include/c++/v1/__functional/unwrap_ref.h
-OLD_FILES+=usr/include/c++/v1/__functional/weak_result_type.h
-OLD_DIRS+=usr/include/c++/v1/__functional
-OLD_FILES+=usr/include/c++/v1/__functional_base
-OLD_FILES+=usr/include/c++/v1/__hash_table
-OLD_FILES+=usr/include/c++/v1/__iterator/access.h
-OLD_FILES+=usr/include/c++/v1/__iterator/advance.h
-OLD_FILES+=usr/include/c++/v1/__iterator/back_insert_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/common_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/concepts.h
-OLD_FILES+=usr/include/c++/v1/__iterator/counted_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/data.h
-OLD_FILES+=usr/include/c++/v1/__iterator/default_sentinel.h
-OLD_FILES+=usr/include/c++/v1/__iterator/distance.h
-OLD_FILES+=usr/include/c++/v1/__iterator/empty.h
-OLD_FILES+=usr/include/c++/v1/__iterator/erase_if_container.h
-OLD_FILES+=usr/include/c++/v1/__iterator/front_insert_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/incrementable_traits.h
-OLD_FILES+=usr/include/c++/v1/__iterator/indirectly_comparable.h
-OLD_FILES+=usr/include/c++/v1/__iterator/insert_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/istream_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/istreambuf_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/iter_move.h
-OLD_FILES+=usr/include/c++/v1/__iterator/iter_swap.h
-OLD_FILES+=usr/include/c++/v1/__iterator/iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/iterator_traits.h
-OLD_FILES+=usr/include/c++/v1/__iterator/move_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/next.h
-OLD_FILES+=usr/include/c++/v1/__iterator/ostream_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/ostreambuf_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/prev.h
-OLD_FILES+=usr/include/c++/v1/__iterator/projected.h
-OLD_FILES+=usr/include/c++/v1/__iterator/readable_traits.h
-OLD_FILES+=usr/include/c++/v1/__iterator/reverse_access.h
-OLD_FILES+=usr/include/c++/v1/__iterator/reverse_iterator.h
-OLD_FILES+=usr/include/c++/v1/__iterator/size.h
-OLD_FILES+=usr/include/c++/v1/__iterator/unreachable_sentinel.h
-OLD_FILES+=usr/include/c++/v1/__iterator/wrap_iter.h
-OLD_DIRS+=usr/include/c++/v1/__iterator
-OLD_FILES+=usr/include/c++/v1/__libcpp_version
-OLD_FILES+=usr/include/c++/v1/__locale
-OLD_FILES+=usr/include/c++/v1/__mbstate_t.h
-OLD_FILES+=usr/include/c++/v1/__memory/addressof.h
-OLD_FILES+=usr/include/c++/v1/__memory/allocation_guard.h
-OLD_FILES+=usr/include/c++/v1/__memory/allocator.h
-OLD_FILES+=usr/include/c++/v1/__memory/allocator_arg_t.h
-OLD_FILES+=usr/include/c++/v1/__memory/allocator_traits.h
-OLD_FILES+=usr/include/c++/v1/__memory/auto_ptr.h
-OLD_FILES+=usr/include/c++/v1/__memory/compressed_pair.h
-OLD_FILES+=usr/include/c++/v1/__memory/concepts.h
-OLD_FILES+=usr/include/c++/v1/__memory/construct_at.h
-OLD_FILES+=usr/include/c++/v1/__memory/pointer_traits.h
-OLD_FILES+=usr/include/c++/v1/__memory/ranges_construct_at.h
-OLD_FILES+=usr/include/c++/v1/__memory/ranges_uninitialized_algorithms.h
-OLD_FILES+=usr/include/c++/v1/__memory/raw_storage_iterator.h
-OLD_FILES+=usr/include/c++/v1/__memory/shared_ptr.h
-OLD_FILES+=usr/include/c++/v1/__memory/temporary_buffer.h
-OLD_FILES+=usr/include/c++/v1/__memory/uninitialized_algorithms.h
-OLD_FILES+=usr/include/c++/v1/__memory/unique_ptr.h
-OLD_FILES+=usr/include/c++/v1/__memory/uses_allocator.h
-OLD_FILES+=usr/include/c++/v1/__memory/voidify.h
-OLD_DIRS+=usr/include/c++/v1/__memory
-OLD_FILES+=usr/include/c++/v1/__mutex_base
-OLD_FILES+=usr/include/c++/v1/__node_handle
-OLD_FILES+=usr/include/c++/v1/__nullptr
-OLD_FILES+=usr/include/c++/v1/__numeric/accumulate.h
-OLD_FILES+=usr/include/c++/v1/__numeric/adjacent_difference.h
-OLD_FILES+=usr/include/c++/v1/__numeric/exclusive_scan.h
-OLD_FILES+=usr/include/c++/v1/__numeric/gcd_lcm.h
-OLD_FILES+=usr/include/c++/v1/__numeric/inclusive_scan.h
-OLD_FILES+=usr/include/c++/v1/__numeric/inner_product.h
-OLD_FILES+=usr/include/c++/v1/__numeric/iota.h
-OLD_FILES+=usr/include/c++/v1/__numeric/midpoint.h
-OLD_FILES+=usr/include/c++/v1/__numeric/partial_sum.h
-OLD_FILES+=usr/include/c++/v1/__numeric/reduce.h
-OLD_FILES+=usr/include/c++/v1/__numeric/transform_exclusive_scan.h
-OLD_FILES+=usr/include/c++/v1/__numeric/transform_inclusive_scan.h
-OLD_FILES+=usr/include/c++/v1/__numeric/transform_reduce.h
-OLD_DIRS+=usr/include/c++/v1/__numeric
-OLD_FILES+=usr/include/c++/v1/__random/bernoulli_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/binomial_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/cauchy_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/chi_squared_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/clamp_to_integral.h
-OLD_FILES+=usr/include/c++/v1/__random/default_random_engine.h
-OLD_FILES+=usr/include/c++/v1/__random/discard_block_engine.h
-OLD_FILES+=usr/include/c++/v1/__random/discrete_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/exponential_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/extreme_value_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/fisher_f_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/gamma_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/generate_canonical.h
-OLD_FILES+=usr/include/c++/v1/__random/geometric_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/independent_bits_engine.h
-OLD_FILES+=usr/include/c++/v1/__random/is_seed_sequence.h
-OLD_FILES+=usr/include/c++/v1/__random/knuth_b.h
-OLD_FILES+=usr/include/c++/v1/__random/linear_congruential_engine.h
-OLD_FILES+=usr/include/c++/v1/__random/log2.h
-OLD_FILES+=usr/include/c++/v1/__random/lognormal_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/mersenne_twister_engine.h
-OLD_FILES+=usr/include/c++/v1/__random/negative_binomial_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/normal_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/piecewise_constant_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/piecewise_linear_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/poisson_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/random_device.h
-OLD_FILES+=usr/include/c++/v1/__random/ranlux.h
-OLD_FILES+=usr/include/c++/v1/__random/seed_seq.h
-OLD_FILES+=usr/include/c++/v1/__random/shuffle_order_engine.h
-OLD_FILES+=usr/include/c++/v1/__random/student_t_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/subtract_with_carry_engine.h
-OLD_FILES+=usr/include/c++/v1/__random/uniform_int_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/uniform_random_bit_generator.h
-OLD_FILES+=usr/include/c++/v1/__random/uniform_real_distribution.h
-OLD_FILES+=usr/include/c++/v1/__random/weibull_distribution.h
-OLD_DIRS+=usr/include/c++/v1/__random
-OLD_FILES+=usr/include/c++/v1/__ranges/access.h
-OLD_FILES+=usr/include/c++/v1/__ranges/all.h
-OLD_FILES+=usr/include/c++/v1/__ranges/common_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/concepts.h
-OLD_FILES+=usr/include/c++/v1/__ranges/copyable_box.h
-OLD_FILES+=usr/include/c++/v1/__ranges/counted.h
-OLD_FILES+=usr/include/c++/v1/__ranges/dangling.h
-OLD_FILES+=usr/include/c++/v1/__ranges/data.h
-OLD_FILES+=usr/include/c++/v1/__ranges/drop_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/empty.h
-OLD_FILES+=usr/include/c++/v1/__ranges/empty_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/enable_borrowed_range.h
-OLD_FILES+=usr/include/c++/v1/__ranges/enable_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/iota_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/join_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/non_propagating_cache.h
-OLD_FILES+=usr/include/c++/v1/__ranges/owning_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/range_adaptor.h
-OLD_FILES+=usr/include/c++/v1/__ranges/ref_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/reverse_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/single_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/size.h
-OLD_FILES+=usr/include/c++/v1/__ranges/subrange.h
-OLD_FILES+=usr/include/c++/v1/__ranges/take_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/transform_view.h
-OLD_FILES+=usr/include/c++/v1/__ranges/view_interface.h
-OLD_DIRS+=usr/include/c++/v1/__ranges
-OLD_FILES+=usr/include/c++/v1/__split_buffer
-OLD_FILES+=usr/include/c++/v1/__std_stream
-OLD_FILES+=usr/include/c++/v1/__string
-OLD_FILES+=usr/include/c++/v1/__thread/poll_with_backoff.h
-OLD_FILES+=usr/include/c++/v1/__thread/timed_backoff_policy.h
-OLD_DIRS+=usr/include/c++/v1/__thread
-OLD_FILES+=usr/include/c++/v1/__threading_support
-OLD_FILES+=usr/include/c++/v1/__tree
-OLD_FILES+=usr/include/c++/v1/__tuple
-OLD_FILES+=usr/include/c++/v1/__undef_macros
-OLD_FILES+=usr/include/c++/v1/__utility/as_const.h
-OLD_FILES+=usr/include/c++/v1/__utility/auto_cast.h
-OLD_FILES+=usr/include/c++/v1/__utility/cmp.h
-OLD_FILES+=usr/include/c++/v1/__utility/declval.h
-OLD_FILES+=usr/include/c++/v1/__utility/exchange.h
-OLD_FILES+=usr/include/c++/v1/__utility/forward.h
-OLD_FILES+=usr/include/c++/v1/__utility/in_place.h
-OLD_FILES+=usr/include/c++/v1/__utility/integer_sequence.h
-OLD_FILES+=usr/include/c++/v1/__utility/move.h
-OLD_FILES+=usr/include/c++/v1/__utility/pair.h
-OLD_FILES+=usr/include/c++/v1/__utility/piecewise_construct.h
-OLD_FILES+=usr/include/c++/v1/__utility/priority_tag.h
-OLD_FILES+=usr/include/c++/v1/__utility/rel_ops.h
-OLD_FILES+=usr/include/c++/v1/__utility/swap.h
-OLD_FILES+=usr/include/c++/v1/__utility/to_underlying.h
-OLD_FILES+=usr/include/c++/v1/__utility/transaction.h
-OLD_DIRS+=usr/include/c++/v1/__utility
-OLD_FILES+=usr/include/c++/v1/__variant/monostate.h
-OLD_DIRS+=usr/include/c++/v1/__variant
-OLD_FILES+=usr/include/c++/v1/algorithm
-OLD_FILES+=usr/include/c++/v1/any
-OLD_FILES+=usr/include/c++/v1/array
-OLD_FILES+=usr/include/c++/v1/atomic
-OLD_FILES+=usr/include/c++/v1/barrier
-OLD_FILES+=usr/include/c++/v1/bit
-OLD_FILES+=usr/include/c++/v1/bitset
-OLD_FILES+=usr/include/c++/v1/cassert
-OLD_FILES+=usr/include/c++/v1/ccomplex
-OLD_FILES+=usr/include/c++/v1/cctype
-OLD_FILES+=usr/include/c++/v1/cerrno
-OLD_FILES+=usr/include/c++/v1/cfenv
-OLD_FILES+=usr/include/c++/v1/cfloat
-OLD_FILES+=usr/include/c++/v1/charconv
-OLD_FILES+=usr/include/c++/v1/chrono
-OLD_FILES+=usr/include/c++/v1/cinttypes
-OLD_FILES+=usr/include/c++/v1/ciso646
-OLD_FILES+=usr/include/c++/v1/climits
-OLD_FILES+=usr/include/c++/v1/clocale
-OLD_FILES+=usr/include/c++/v1/cmath
-OLD_FILES+=usr/include/c++/v1/codecvt
-OLD_FILES+=usr/include/c++/v1/compare
-OLD_FILES+=usr/include/c++/v1/complex
-OLD_FILES+=usr/include/c++/v1/complex.h
-OLD_FILES+=usr/include/c++/v1/concepts
-OLD_FILES+=usr/include/c++/v1/condition_variable
-OLD_FILES+=usr/include/c++/v1/coroutine
-OLD_FILES+=usr/include/c++/v1/csetjmp
-OLD_FILES+=usr/include/c++/v1/csignal
-OLD_FILES+=usr/include/c++/v1/cstdarg
-OLD_FILES+=usr/include/c++/v1/cstdbool
-OLD_FILES+=usr/include/c++/v1/cstddef
-OLD_FILES+=usr/include/c++/v1/cstdint
-OLD_FILES+=usr/include/c++/v1/cstdio
-OLD_FILES+=usr/include/c++/v1/cstdlib
-OLD_FILES+=usr/include/c++/v1/cstring
-OLD_FILES+=usr/include/c++/v1/ctgmath
-OLD_FILES+=usr/include/c++/v1/ctime
-OLD_FILES+=usr/include/c++/v1/ctype.h
-OLD_FILES+=usr/include/c++/v1/cwchar
-OLD_FILES+=usr/include/c++/v1/cwctype
-OLD_FILES+=usr/include/c++/v1/cxxabi.h
-OLD_FILES+=usr/include/c++/v1/deque
-OLD_FILES+=usr/include/c++/v1/errno.h
-OLD_FILES+=usr/include/c++/v1/exception
-OLD_FILES+=usr/include/c++/v1/execution
-OLD_FILES+=usr/include/c++/v1/experimental/__config
-OLD_FILES+=usr/include/c++/v1/experimental/__memory
-OLD_FILES+=usr/include/c++/v1/experimental/algorithm
-OLD_FILES+=usr/include/c++/v1/experimental/coroutine
-OLD_FILES+=usr/include/c++/v1/experimental/deque
-OLD_FILES+=usr/include/c++/v1/experimental/filesystem
-OLD_FILES+=usr/include/c++/v1/experimental/forward_list
-OLD_FILES+=usr/include/c++/v1/experimental/functional
-OLD_FILES+=usr/include/c++/v1/experimental/iterator
-OLD_FILES+=usr/include/c++/v1/experimental/list
-OLD_FILES+=usr/include/c++/v1/experimental/map
-OLD_FILES+=usr/include/c++/v1/experimental/memory_resource
-OLD_FILES+=usr/include/c++/v1/experimental/propagate_const
-OLD_FILES+=usr/include/c++/v1/experimental/regex
-OLD_FILES+=usr/include/c++/v1/experimental/set
-OLD_FILES+=usr/include/c++/v1/experimental/simd
-OLD_FILES+=usr/include/c++/v1/experimental/string
-OLD_FILES+=usr/include/c++/v1/experimental/type_traits
-OLD_FILES+=usr/include/c++/v1/experimental/unordered_map
-OLD_FILES+=usr/include/c++/v1/experimental/unordered_set
-OLD_FILES+=usr/include/c++/v1/experimental/utility
-OLD_FILES+=usr/include/c++/v1/experimental/vector
-OLD_DIRS+=usr/include/c++/v1/experimental
-OLD_FILES+=usr/include/c++/v1/ext/__hash
-OLD_FILES+=usr/include/c++/v1/ext/hash_map
-OLD_FILES+=usr/include/c++/v1/ext/hash_set
-OLD_DIRS+=usr/include/c++/v1/ext
-OLD_FILES+=usr/include/c++/v1/fenv.h
-OLD_FILES+=usr/include/c++/v1/filesystem
-OLD_FILES+=usr/include/c++/v1/float.h
-OLD_FILES+=usr/include/c++/v1/format
-OLD_FILES+=usr/include/c++/v1/forward_list
-OLD_FILES+=usr/include/c++/v1/fstream
-OLD_FILES+=usr/include/c++/v1/functional
-OLD_FILES+=usr/include/c++/v1/future
-OLD_FILES+=usr/include/c++/v1/initializer_list
-OLD_FILES+=usr/include/c++/v1/inttypes.h
-OLD_FILES+=usr/include/c++/v1/iomanip
-OLD_FILES+=usr/include/c++/v1/ios
-OLD_FILES+=usr/include/c++/v1/iosfwd
-OLD_FILES+=usr/include/c++/v1/iostream
-OLD_FILES+=usr/include/c++/v1/istream
-OLD_FILES+=usr/include/c++/v1/iterator
-OLD_FILES+=usr/include/c++/v1/latch
-OLD_FILES+=usr/include/c++/v1/limits
-OLD_FILES+=usr/include/c++/v1/limits.h
-OLD_FILES+=usr/include/c++/v1/list
-OLD_FILES+=usr/include/c++/v1/locale
-OLD_FILES+=usr/include/c++/v1/locale.h
-OLD_FILES+=usr/include/c++/v1/map
-OLD_FILES+=usr/include/c++/v1/math.h
-OLD_FILES+=usr/include/c++/v1/memory
-OLD_FILES+=usr/include/c++/v1/module.modulemap
-OLD_FILES+=usr/include/c++/v1/mutex
-OLD_FILES+=usr/include/c++/v1/new
-OLD_FILES+=usr/include/c++/v1/numbers
-OLD_FILES+=usr/include/c++/v1/numeric
-OLD_FILES+=usr/include/c++/v1/optional
-OLD_FILES+=usr/include/c++/v1/ostream
-OLD_FILES+=usr/include/c++/v1/queue
-OLD_FILES+=usr/include/c++/v1/random
-OLD_FILES+=usr/include/c++/v1/ranges
-OLD_FILES+=usr/include/c++/v1/ratio
-OLD_FILES+=usr/include/c++/v1/regex
-OLD_FILES+=usr/include/c++/v1/scoped_allocator
-OLD_FILES+=usr/include/c++/v1/semaphore
-OLD_FILES+=usr/include/c++/v1/set
-OLD_FILES+=usr/include/c++/v1/setjmp.h
-OLD_FILES+=usr/include/c++/v1/shared_mutex
-OLD_FILES+=usr/include/c++/v1/span
-OLD_FILES+=usr/include/c++/v1/sstream
-OLD_FILES+=usr/include/c++/v1/stack
-OLD_FILES+=usr/include/c++/v1/stdbool.h
-OLD_FILES+=usr/include/c++/v1/stddef.h
-OLD_FILES+=usr/include/c++/v1/stdexcept
-OLD_FILES+=usr/include/c++/v1/stdint.h
-OLD_FILES+=usr/include/c++/v1/stdio.h
-OLD_FILES+=usr/include/c++/v1/stdlib.h
-OLD_FILES+=usr/include/c++/v1/streambuf
-OLD_FILES+=usr/include/c++/v1/string
-OLD_FILES+=usr/include/c++/v1/string.h
-OLD_FILES+=usr/include/c++/v1/string_view
-OLD_FILES+=usr/include/c++/v1/strstream
-OLD_FILES+=usr/include/c++/v1/system_error
-OLD_FILES+=usr/include/c++/v1/tgmath.h
-OLD_FILES+=usr/include/c++/v1/thread
-OLD_FILES+=usr/include/c++/v1/tuple
-OLD_FILES+=usr/include/c++/v1/type_traits
-OLD_FILES+=usr/include/c++/v1/typeindex
-OLD_FILES+=usr/include/c++/v1/typeinfo
-OLD_FILES+=usr/include/c++/v1/unordered_map
-OLD_FILES+=usr/include/c++/v1/unordered_set
-OLD_FILES+=usr/include/c++/v1/utility
-OLD_FILES+=usr/include/c++/v1/valarray
-OLD_FILES+=usr/include/c++/v1/variant
-OLD_FILES+=usr/include/c++/v1/vector
-OLD_FILES+=usr/include/c++/v1/version
-OLD_FILES+=usr/include/c++/v1/wchar.h
-OLD_FILES+=usr/include/c++/v1/wctype.h
-OLD_DIRS+=usr/include/c++/v1
.endif
+.endfor # LIBCOMPAT libcompat
.if ${MK_LLD} == no
OLD_FILES+=usr/bin/ld.lld
@@ -4221,10 +3847,20 @@ 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
+.if ${MK_LLVM_COV} == no
+OLD_FILES+=usr/bin/gcov
+OLD_FILES+=usr/bin/llvm-cov
+OLD_FILES+=usr/bin/llvm-profdata
+OLD_FILES+=usr/share/man/man1/gcov.1.gz
+OLD_FILES+=usr/share/man/man1/llvm-cov.1.gz
+OLD_FILES+=usr/share/man/man1/llvm-profdata.1.gz
+.endif
+
.if ${MK_LOCALES} == no
OLD_DIRS+=usr/share/locale/af_ZA.ISO8859-15
OLD_FILES+=usr/share/locale/af_ZA.ISO8859-15/LC_COLLATE
@@ -5622,7 +5258,6 @@ OLD_FILES+=etc/mail.rc
OLD_FILES+=etc/mail/aliases
OLD_FILES+=etc/mail/mailer.conf
OLD_FILES+=etc/periodic/daily/130.clean-msgs
-OLD_FILES+=etc/rc.d/othermta
OLD_FILES+=usr/bin/Mail
OLD_FILES+=usr/bin/biff
OLD_FILES+=usr/bin/from
@@ -6096,7 +5731,13 @@ OLD_FILES+=usr/share/snmp/defs/netgraph_tree.def
OLD_FILES+=usr/share/snmp/mibs/BEGEMOT-NETGRAPH.txt
.endif
+.if ${MK_NETLINK} == no
+OLD_FILES+=usr.bin/genl
+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
@@ -6237,7 +5878,6 @@ OLD_DIRS+=usr/share/nls/en_US.ISO8859-15
OLD_FILES+=usr/share/nls/en_US.ISO8859-15/ee.cat
OLD_DIRS+=usr/share/nls/en_US.UTF-8
OLD_DIRS+=usr/share/nls/es_ES.UTF-8
-OLD_FILES+=usr/share/nls/es_ES.ISO8859-1/grep.cat
OLD_FILES+=usr/share/nls/es_ES.ISO8859-1/libc.cat
OLD_FILES+=usr/share/nls/es_ES.ISO8859-1/tcsh.cat
OLD_DIRS+=usr/share/nls/es_ES.ISO8859-1
@@ -6289,16 +5929,13 @@ OLD_FILES+=usr/share/nls/fr_FR.ISO8859-15/tcsh.cat
OLD_DIRS+=usr/share/nls/fr_FR.UTF-8
OLD_FILES+=usr/share/nls/fr_FR.UTF-8/tcsh.cat
OLD_DIRS+=usr/share/nls/gl_ES.ISO8859-1
-OLD_FILES+=usr/share/nls/gl_ES.ISO8859-1/grep.cat
OLD_FILES+=usr/share/nls/gl_ES.ISO8859-1/libc.cat
OLD_DIRS+=usr/share/nls/he_IL.UTF-8
OLD_DIRS+=usr/share/nls/hi_IN.ISCII-DEV
OLD_DIRS+=usr/share/nls/hr_HR.ISO8859-2
OLD_DIRS+=usr/share/nls/hu_HU.ISO8859-2
OLD_FILES+=usr/share/nls/hu_HU.ISO8859-2/ee.cat
-OLD_FILES+=usr/share/nls/hu_HU.ISO8859-2/grep.cat
OLD_FILES+=usr/share/nls/hu_HU.ISO8859-2/libc.cat
-OLD_FILES+=usr/share/nls/hu_HU.ISO8859-2/sort.cat
OLD_DIRS+=usr/share/nls/hr_HR.UTF-8
OLD_DIRS+=usr/share/nls/hu_HU.UTF-8
OLD_DIRS+=usr/share/nls/hy_AM.ARMSCII-8
@@ -6320,14 +5957,11 @@ OLD_FILES+=usr/share/nls/it_IT.ISO8859-15/tcsh.cat
OLD_DIRS+=usr/share/nls/it_IT.UTF-8
OLD_FILES+=usr/share/nls/it_IT.UTF-8/tcsh.cat
OLD_DIRS+=usr/share/nls/ja_JP.SJIS
-OLD_FILES+=usr/share/nls/ja_JP.SJIS/grep.cat
OLD_FILES+=usr/share/nls/ja_JP.SJIS/tcsh.cat
OLD_DIRS+=usr/share/nls/ja_JP.UTF-8
-OLD_FILES+=usr/share/nls/ja_JP.UTF-8/grep.cat
OLD_FILES+=usr/share/nls/ja_JP.UTF-8/libc.cat
OLD_FILES+=usr/share/nls/ja_JP.UTF-8/tcsh.cat
OLD_DIRS+=usr/share/nls/ja_JP.eucJP
-OLD_FILES+=usr/share/nls/ja_JP.eucJP/grep.cat
OLD_FILES+=usr/share/nls/ja_JP.eucJP/libc.cat
OLD_FILES+=usr/share/nls/ja_JP.eucJP/tcsh.cat
OLD_DIRS+=usr/share/nls/kk_KZ.PT154
@@ -6362,7 +5996,6 @@ OLD_DIRS+=usr/share/nls/pt_BR.ISO8859-1
OLD_DIRS+=usr/share/nls/pt_BR.UTF-8
OLD_DIRS+=usr/share/nls/pt_PT.ISO8859-1
OLD_FILES+=usr/share/nls/pt_BR.ISO8859-1/ee.cat
-OLD_FILES+=usr/share/nls/pt_BR.ISO8859-1/grep.cat
OLD_FILES+=usr/share/nls/pt_BR.ISO8859-1/libc.cat
OLD_FILES+=usr/share/nls/pt_PT.ISO8859-1/ee.cat
OLD_DIRS+=usr/share/nls/pt_PT.ISO8859-15
@@ -6377,7 +6010,6 @@ OLD_DIRS+=usr/share/nls/ru_RU.ISO8859-5
OLD_FILES+=usr/share/nls/ru_RU.ISO8859-5/tcsh.cat
OLD_DIRS+=usr/share/nls/ru_RU.KOI8-R
OLD_FILES+=usr/share/nls/ru_RU.KOI8-R/ee.cat
-OLD_FILES+=usr/share/nls/ru_RU.KOI8-R/grep.cat
OLD_FILES+=usr/share/nls/ru_RU.KOI8-R/libc.cat
OLD_FILES+=usr/share/nls/ru_RU.KOI8-R/tcsh.cat
OLD_DIRS+=usr/share/nls/ru_RU.UTF-8
@@ -6402,7 +6034,6 @@ OLD_DIRS+=usr/share/nls/uk_UA.KOI8-U
OLD_FILES+=usr/share/nls/uk_UA.KOI8-U/ee.cat
OLD_FILES+=usr/share/nls/uk_UA.KOI8-U/tcsh.cat
OLD_DIRS+=usr/share/nls/uk_UA.UTF-8
-OLD_FILES+=usr/share/nls/uk_UA.UTF-8/grep.cat
OLD_FILES+=usr/share/nls/uk_UA.UTF-8/libc.cat
OLD_FILES+=usr/share/nls/uk_UA.UTF-8/tcsh.cat
OLD_DIRS+=usr/share/nls/zh_CN.GB18030
@@ -6411,7 +6042,6 @@ OLD_DIRS+=usr/share/nls/zh_CN.GBK
OLD_DIRS+=usr/share/nls/zh_CN.GB2312
OLD_FILES+=usr/share/nls/zh_CN.GB2312/libc.cat
OLD_DIRS+=usr/share/nls/zh_CN.UTF-8
-OLD_FILES+=usr/share/nls/zh_CN.UTF-8/grep.cat
OLD_FILES+=usr/share/nls/zh_CN.UTF-8/libc.cat
OLD_DIRS+=usr/share/nls/zh_CN.eucCN
OLD_DIRS+=usr/share/nls/zh_HK.UTF-8
@@ -7077,6 +6707,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
@@ -7186,6 +6817,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
@@ -7306,6 +6940,7 @@ OLD_FILES+=usr/sbin/pmcannotate
OLD_FILES+=usr/sbin/pmccontrol
OLD_FILES+=usr/sbin/pmcstat
OLD_FILES+=usr/share/man/man3/pmc.3.gz
+OLD_FILES+=usr/share/man/man3/pmc.amd.3.gz
OLD_FILES+=usr/share/man/man3/pmc.atom.3.gz
OLD_FILES+=usr/share/man/man3/pmc.atomsilvermont.3.gz
OLD_FILES+=usr/share/man/man3/pmc.core.3.gz
@@ -7318,13 +6953,7 @@ OLD_FILES+=usr/share/man/man3/pmc.haswellxeon.3.gz
OLD_FILES+=usr/share/man/man3/pmc.iaf.3.gz
OLD_FILES+=usr/share/man/man3/pmc.ivybridge.3.gz
OLD_FILES+=usr/share/man/man3/pmc.ivybridgexeon.3.gz
-OLD_FILES+=usr/share/man/man3/pmc.k7.3.gz
OLD_FILES+=usr/share/man/man3/pmc.k8.3.gz
-OLD_FILES+=usr/share/man/man3/pmc.mips24k.3.gz
-OLD_FILES+=usr/share/man/man3/pmc.octeon.3.gz
-OLD_FILES+=usr/share/man/man3/pmc.p4.3.gz
-OLD_FILES+=usr/share/man/man3/pmc.p5.3.gz
-OLD_FILES+=usr/share/man/man3/pmc.p6.3.gz
OLD_FILES+=usr/share/man/man3/pmc.sandybridge.3.gz
OLD_FILES+=usr/share/man/man3/pmc.sandybridgeuc.3.gz
OLD_FILES+=usr/share/man/man3/pmc.sandybridgexeon.3.gz
@@ -7377,17 +7006,10 @@ OLD_FILES+=usr/share/man/man8/pmcstat.8.gz
OLD_FILES+=usr/share/man/man8/pmcstudy.8.gz
.endif
-.if ${MK_PORTSNAP} == no
-OLD_FILES+=etc/portsnap.conf
-OLD_FILES+=usr/libexec/make_index
-OLD_FILES+=usr/sbin/portsnap
-OLD_FILES+=usr/share/examples/etc/portsnap.conf
-OLD_FILES+=usr/share/man/man8/portsnap.8.gz
-.endif
-
.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
@@ -7396,188 +7018,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/libngatm_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/libprivatedevdctl_p.a
-OLD_FILES+=usr/lib/libprivateevent_p.a
-OLD_FILES+=usr/lib/libprivateevent1_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
@@ -7673,7 +7113,9 @@ OLD_FILES+=etc/periodic/daily/440.status-mailq
OLD_FILES+=etc/periodic/daily/460.status-mail-rejects
OLD_FILES+=etc/periodic/daily/500.queuerun
OLD_FILES+=etc/rc.d/sendmail
+.if ${MK_MAILWRAPPER} == no
OLD_FILES+=bin/rmail
+.endif
OLD_FILES+=usr/bin/vacation
OLD_FILES+=usr/include/libmilter/mfapi.h
OLD_FILES+=usr/include/libmilter/mfdef.h
@@ -7691,6 +7133,8 @@ OLD_FILES+=usr/sbin/makemap
OLD_FILES+=usr/sbin/praliases
OLD_FILES+=usr/share/doc/smm/08.sendmailop/paper.ascii.gz
OLD_DIRS+=usr/share/doc/smm/08.sendmailop
+OLD_FILES+=usr/share/examples/sendmail/mailer.conf
+OLD_DIRS+=usr/share/examples/sendmail
OLD_FILES+=usr/share/man/man1/mailq.1.gz
OLD_FILES+=usr/share/man/man1/newaliases.1.gz
OLD_FILES+=usr/share/man/man1/vacation.1.gz
@@ -7756,18 +7200,23 @@ OLD_FILES+=usr/share/sendmail/cf/feature/access_db.m4
OLD_FILES+=usr/share/sendmail/cf/feature/allmasquerade.m4
OLD_FILES+=usr/share/sendmail/cf/feature/always_add_domain.m4
OLD_FILES+=usr/share/sendmail/cf/feature/authinfo.m4
+OLD_FILES+=usr/share/sendmail/cf/feature/blocklist_recipients.m4
OLD_FILES+=usr/share/sendmail/cf/feature/badmx.m4
OLD_FILES+=usr/share/sendmail/cf/feature/bcc.m4
OLD_FILES+=usr/share/sendmail/cf/feature/bestmx_is_local.m4
OLD_FILES+=usr/share/sendmail/cf/feature/bitdomain.m4
OLD_FILES+=usr/share/sendmail/cf/feature/blacklist_recipients.m4
OLD_FILES+=usr/share/sendmail/cf/feature/block_bad_helo.m4
+OLD_FILES+=usr/share/sendmail/cf/feature/check_other.m4
+OLD_FILES+=usr/share/sendmail/cf/feature/check_cert_altnames.m4
+OLD_FILES+=usr/share/sendmail/cf/feature/check_other.m4
OLD_FILES+=usr/share/sendmail/cf/feature/compat_check.m4
OLD_FILES+=usr/share/sendmail/cf/feature/conncontrol.m4
OLD_FILES+=usr/share/sendmail/cf/feature/delay_checks.m4
OLD_FILES+=usr/share/sendmail/cf/feature/dnsbl.m4
OLD_FILES+=usr/share/sendmail/cf/feature/domaintable.m4
OLD_FILES+=usr/share/sendmail/cf/feature/enhdnsbl.m4
+OLD_FILES+=usr/share/sendmail/cf/feature/fips3.m4
OLD_FILES+=usr/share/sendmail/cf/feature/generics_entire_domain.m4
OLD_FILES+=usr/share/sendmail/cf/feature/genericstable.m4
OLD_FILES+=usr/share/sendmail/cf/feature/greet_pause.m4
@@ -7804,6 +7253,8 @@ OLD_FILES+=usr/share/sendmail/cf/feature/relay_mail_from.m4
OLD_FILES+=usr/share/sendmail/cf/feature/require_rdns.m4
OLD_FILES+=usr/share/sendmail/cf/feature/smrsh.m4
OLD_FILES+=usr/share/sendmail/cf/feature/stickyhost.m4
+OLD_FILES+=usr/share/sendmail/cf/feature/sts.m4
+OLD_FILES+=usr/share/sendmail/cf/feature/tls_failures.m4
OLD_FILES+=usr/share/sendmail/cf/feature/tls_session_features.m4
OLD_FILES+=usr/share/sendmail/cf/feature/use_client_ptr.m4
OLD_FILES+=usr/share/sendmail/cf/feature/use_ct_file.m4
@@ -7907,6 +7358,27 @@ OLD_DIRS+=var/spool/clientmqueue
OLD_FILES+=var/db/services.db
.endif
+.if ${MK_NUAGEINIT} == no
+OLD_FILES+=etc/rc.d/nuageinit
+OLD_FILES+=usr/libexec/nuageinit
+OLD_FILES+=usr/share/flua/nuage.lua
+OLD_FILES+=usr/share/flua/yaml.lua
+OLD_FILES+=usr/tests
+OLD_FILES+=usr/tests/libexec/nuageinit/utils
+OLD_FILES+=usr/tests/libexec/nuageinit/nuage
+OLD_FILES+=usr/tests/libexec/nuageinit/warn.lua
+OLD_FILES+=usr/tests/libexec/nuageinit/dirname.lua
+OLD_FILES+=usr/tests/libexec/nuageinit/err.lua
+OLD_FILES+=usr/tests/libexec/nuageinit/adduser.lua
+OLD_FILES+=usr/tests/libexec/nuageinit/addsshkeys.lua
+OLD_FILES+=usr/tests/libexec/nuageinit/Kyuafile
+OLD_FILES+=usr/tests/libexec/nuageinit/ktrace.out
+OLD_FILES+=usr/tests/libexec/nuageinit/addgroup.lua
+OLD_FILES+=usr/tests/libexec/nuageinit/sethostname.lua
+OLD_FILES+=usr/tests/libexec/nuageinit/nuageinit
+OLD_FILES+=usr/tests/libexec/nuageinit/addsshkey.lua
+.endif
+
.if ${MK_SHAREDOCS} == no
OLD_FILES+=usr/share/doc/pjdfstest/README
OLD_DIRS+=usr/share/doc/pjdfstest
@@ -8000,6 +7472,7 @@ OLD_FILES+=usr/share/syscons/keymaps/by.cp1131.kbd
OLD_FILES+=usr/share/syscons/keymaps/by.cp1251.kbd
OLD_FILES+=usr/share/syscons/keymaps/by.iso5.kbd
OLD_FILES+=usr/share/syscons/keymaps/ce.iso2.kbd
+OLD_FILES+=usr/share/syscons/keymaps/colemak-dh.iso15.acc.kbd
OLD_FILES+=usr/share/syscons/keymaps/colemak.iso15.acc.kbd
OLD_FILES+=usr/share/syscons/keymaps/cs.latin2.qwertz.kbd
OLD_FILES+=usr/share/syscons/keymaps/cz.iso2.kbd
@@ -8084,6 +7557,7 @@ OLD_FILES+=usr/share/syscons/keymaps/us.dvorakx.kbd
OLD_FILES+=usr/share/syscons/keymaps/us.emacs.kbd
OLD_FILES+=usr/share/syscons/keymaps/us.iso.acc.kbd
OLD_FILES+=usr/share/syscons/keymaps/us.iso.kbd
+OLD_FILES+=usr/share/syscons/keymaps/us.iso.macbook.kbd
OLD_FILES+=usr/share/syscons/keymaps/us.pc-ctrl.kbd
OLD_FILES+=usr/share/syscons/keymaps/us.unix.kbd
OLD_FILES+=usr/share/syscons/scrnmaps/armscii8-2haik8.scm
@@ -8176,11 +7650,8 @@ OLD_FILES+=usr/share/nls/uk_UA.UTF-8/tcsh.cat
.endif
.if ${MK_TELNET} == no
-OLD_FILES+=etc/pam.d/telnetd
OLD_FILES+=usr/bin/telnet
-OLD_FILES+=usr/libexec/telnetd
OLD_FILES+=usr/share/man/man1/telnet.1.gz
-OLD_FILES+=usr/share/man/man8/telnetd.8.gz
.endif
.if ${MK_TESTS} == yes
@@ -8830,6 +8301,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
@@ -8840,6 +8312,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
@@ -8904,6 +8377,12 @@ OLD_FILES+=usr/share/man/man3/elftc_set_timestamps.3.gz
OLD_FILES+=usr/share/man/man3/elftc_timestamp.3.gz
OLD_FILES+=usr/share/man/man3/elftc_string_table_create.3.gz
OLD_FILES+=usr/share/man/man3/elftc_version.3.gz
+# usr.bin/lorder
+OLD_FILES+=usr/bin/lorder
+OLD_FILES+=usr/tests/usr.bin/lorder/Kyuafile
+OLD_FILES+=usr/tests/usr.bin/lorder/lorder_test
+OLD_DIRS+=usr/tests/usr.bin/lorder
+# usr.bin/yacc
OLD_FILES+=usr/tests/usr.bin/yacc/Kyuafile
OLD_FILES+=usr/tests/usr.bin/yacc/btyacc_calc1.y
OLD_FILES+=usr/tests/usr.bin/yacc/btyacc_demo.y
@@ -9607,6 +9086,14 @@ OLD_FILES+=usr/share/man/man8/lastlogin.8.gz
OLD_FILES+=usr/share/man/man8/utx.8.gz
.endif
+.if ${MK_VERIEXEC} == no
+OLD_FILES+=sbin/veriexec
+OLD_FILES+=usr/share/man/man8/veriexec.8.gz
+OLD_FILES+=usr/lib/libveriexec.a
+OLD_FILES+=usr/lib/libveriexec.so
+OLD_LIBS+=usr/lib/libveriexec.so.5
+.endif
+
.if ${MK_VI} == no
OLD_FILES+=etc/rc.d/virecover
OLD_FILES+=rescue/ex
@@ -9669,14 +9156,114 @@ OLD_FILES+=usr/share/snmp/defs/wlan_tree.def
OLD_FILES+=usr/share/snmp/mibs/BEGEMOT-WIRELESS-MIB.txt
.endif
-.if ${MK_HYPERV} == no
-OLD_FILES+=etc/devd/hyperv.conf
-OLD_FILES+=usr/libexec/hyperv/hv_set_ifconfig
-OLD_FILES+=usr/libexec/hyperv/hv_get_dns_info
-OLD_FILES+=usr/libexec/hyperv/hv_get_dhcp_info
-OLD_FILES+=usr/sbin/hv_kvp_daemon
-OLD_FILES+=usr/sbin/hv_vss_daemon
-OLD_FILES+=usr/share/man/man8/hv_kvp_daemon.8.gz
+.if ${MK_ZFS} == no
+OLD_FILES+=boot/gptzfsboot
+OLD_FILES+=boot/zfsloader
+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
+OLD_FILES+=etc/periodic/daily/800.scrub-zfs
+OLD_FILES+=etc/zfs/exports
+OLD_DIRS+=etc/zfs
+OLD_LIBS+=lib/libavl.so.2
+OLD_LIBS+=lib/libnvpair.so.2
+OLD_LIBS+=lib/libumem.so.2
+OLD_LIBS+=lib/libuutil.so.2
+OLD_LIBS+=lib/libzfs.so.2
+OLD_LIBS+=lib/libzfs.so.3
+OLD_LIBS+=lib/libzfs_core.so.2
+OLD_LIBS+=lib/libzpool.so.2
+OLD_FILES+=rescue/zdb
+OLD_FILES+=rescue/zfs
+OLD_FILES+=rescue/zpool
+OLD_FILES+=sbin/bectl
+OLD_FILES+=sbin/zfs
+OLD_FILES+=sbin/zpool
+OLD_FILES+=sbin/zfsbootcfg
+OLD_FILES+=usr/bin/zinject
+OLD_FILES+=usr/bin/zstreamdump
+OLD_FILES+=usr/bin/ztest
+OLD_FILES+=usr/lib/libbe.a
+OLD_FILES+=usr/lib/libbe_p.a
+OLD_FILES+=usr/lib/libbe.so
+OLD_LIBS+=lib/libbe.so.1
+OLD_FILES+=usr/lib/libavl.a
+OLD_FILES+=usr/lib/libavl.so
+OLD_FILES+=usr/lib/libavl_p.a
+OLD_FILES+=usr/lib/libnvpair.a
+OLD_FILES+=usr/lib/libnvpair.so
+OLD_FILES+=usr/lib/libnvpair_p.a
+OLD_FILES+=usr/lib/libumem.a
+OLD_FILES+=usr/lib/libumem.so
+OLD_FILES+=usr/lib/libumem_p.a
+OLD_FILES+=usr/lib/libuutil.a
+OLD_FILES+=usr/lib/libuutil.so
+OLD_FILES+=usr/lib/libuutil_p.a
+OLD_FILES+=usr/lib/libzfs.a
+OLD_FILES+=usr/lib/libzfs.so
+OLD_FILES+=usr/lib/libzfs_core.a
+OLD_FILES+=usr/lib/libzfs_core.so
+OLD_FILES+=usr/lib/libzfs_core_p.a
+OLD_FILES+=usr/lib/libzfs_p.a
+OLD_FILES+=usr/lib/libzpool.a
+OLD_FILES+=usr/lib/libzpool.so
+OLD_LIBS+=usr/lib/libzpool.so.2
+OLD_FILES+=usr/sbin/zfsd
+OLD_FILES+=usr/sbin/zhack
+OLD_FILES+=usr/sbin/zdb
+OLD_FILES+=usr/share/man/man3/be_activate.3.gz
+OLD_FILES+=usr/share/man/man3/be_active_name.3.gz
+OLD_FILES+=usr/share/man/man3/be_active_path.3.gz
+OLD_FILES+=usr/share/man/man3/be_create_depth.3.gz
+OLD_FILES+=usr/share/man/man3/be_create_from_existing_snap.3.gz
+OLD_FILES+=usr/share/man/man3/be_create_from_existing.3.gz
+OLD_FILES+=usr/share/man/man3/be_create.3.gz
+OLD_FILES+=usr/share/man/man3/be_deactivate.3.gz
+OLD_FILES+=usr/share/man/man3/be_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/be_exists.3.gz
+OLD_FILES+=usr/share/man/man3/be_export.3.gz
+OLD_FILES+=usr/share/man/man3/be_get_bootenv_props.3.gz
+OLD_FILES+=usr/share/man/man3/be_get_dataset_props.3.gz
+OLD_FILES+=usr/share/man/man3/be_get_dataset_snapshots.3.gz
+OLD_FILES+=usr/share/man/man3/be_import.3.gz
+OLD_FILES+=usr/share/man/man3/be_is_auto_snapshot_name.3.gz
+OLD_FILES+=usr/share/man/man3/be_mount.3.gz
+OLD_FILES+=usr/share/man/man3/be_mounted_at.3.gz
+OLD_FILES+=usr/share/man/man3/be_nextboot_name.3.gz
+OLD_FILES+=usr/share/man/man3/be_nextboot_path.3.gz
+OLD_FILES+=usr/share/man/man3/be_nicenum.3.gz
+OLD_FILES+=usr/share/man/man3/be_prop_list_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/be_prop_list_free.3.gz
+OLD_FILES+=usr/share/man/man3/be_rename.3.gz
+OLD_FILES+=usr/share/man/man3/be_root_concat.3.gz
+OLD_FILES+=usr/share/man/man3/be_root_path.3.gz
+OLD_FILES+=usr/share/man/man3/be_snapshot.3.gz
+OLD_FILES+=usr/share/man/man3/be_unmount.3.gz
+OLD_FILES+=usr/share/man/man3/be_validate_name.3.gz
+OLD_FILES+=usr/share/man/man3/be_validate_snap.3.gz
+OLD_FILES+=usr/share/man/man3/libbe_close.3.gz
+OLD_FILES+=usr/share/man/man3/libbe_errno.3.gz
+OLD_FILES+=usr/share/man/man3/libbe_error_description.3.gz
+OLD_FILES+=usr/share/man/man3/libbe_init.3.gz
+OLD_FILES+=usr/share/man/man3/libbe_print_on_error.3.gz
+OLD_FILES+=usr/share/man/man3/libbe.3.gz
+OLD_FILES+=usr/share/man/man5/zpool-features.5.gz
+OLD_FILES+=usr/share/man/man8/bectl.8.gz
+OLD_FILES+=usr/share/man/man8/gptzfsboot.8.gz
+OLD_FILES+=usr/share/man/man8/zdb.8.gz
+OLD_FILES+=usr/share/man/man8/zfs-program.8.gz
+OLD_FILES+=usr/share/man/man8/zfs.8.gz
+OLD_FILES+=usr/share/man/man8/zfsbootcfg.8.gz
+OLD_FILES+=usr/share/man/man8/zfsd.8.gz
+OLD_FILES+=usr/share/man/man8/zfsloader.8.gz
+OLD_FILES+=usr/share/man/man8/zpool.8.gz
.endif
.if ${MK_ZONEINFO} == no
@@ -9769,6 +9356,7 @@ OLD_FILES+=usr/share/zoneinfo/America/Cayenne
OLD_FILES+=usr/share/zoneinfo/America/Cayman
OLD_FILES+=usr/share/zoneinfo/America/Chicago
OLD_FILES+=usr/share/zoneinfo/America/Chihuahua
+OLD_FILES+=usr/share/zoneinfo/America/Ciudad_Juarez
OLD_FILES+=usr/share/zoneinfo/America/Costa_Rica
OLD_FILES+=usr/share/zoneinfo/America/Creston
OLD_FILES+=usr/share/zoneinfo/America/Cuiaba
diff --git a/tools/build/mk/bsd.lib.mk b/tools/build/mk/bsd.lib.mk
index 6f717d812696..335f1d424358 100644
--- a/tools/build/mk/bsd.lib.mk
+++ b/tools/build/mk/bsd.lib.mk
@@ -1,4 +1,3 @@
-# $FreeBSD$
.include "Makefile.boot.pre"
# Don't build shared libraries during bootstrap
diff --git a/tools/build/mk/bsd.prog.mk b/tools/build/mk/bsd.prog.mk
index 3eb5c904e2ef..a4775a66e764 100644
--- a/tools/build/mk/bsd.prog.mk
+++ b/tools/build/mk/bsd.prog.mk
@@ -1,4 +1,3 @@
-# $FreeBSD$
.include "Makefile.boot.pre"
.include "../../../share/mk/bsd.prog.mk"
diff --git a/tools/build/options/INIT_ALL b/tools/build/options/INIT_ALL
new file mode 100644
index 000000000000..3ca70337b8f1
--- /dev/null
+++ b/tools/build/options/INIT_ALL
@@ -0,0 +1,21 @@
+Control default initialization of stack variables in C and C++ code.
+Options other than
+.Li none
+require the Clang compiler or GCC 12.0 or later.
+The default value is
+.Li none .
+Valid values are:
+.Bl -tag -width indent
+.It Li none
+Do not initialize stack variables (standard C/C++ behavior).
+.It Li pattern
+Build the base system or kernel with stack variables initialized to
+.Pq compiler defined
+debugging patterns on function entry.
+.It Li zero
+Build the base system or kernel with stack variables initialized
+to zero on function entry.
+This value is converted to
+.Li none
+for amd64 kernel builds due to incompatability with ifunc memset.
+.El
diff --git a/tools/build/options/LIBC_MALLOC b/tools/build/options/LIBC_MALLOC
new file mode 100644
index 000000000000..5a72f7730fc7
--- /dev/null
+++ b/tools/build/options/LIBC_MALLOC
@@ -0,0 +1,13 @@
+Specify the
+.Xr malloc 3
+implementation used by libc.
+The default value is
+.Li jemalloc .
+Valid values are:
+.Bl -tag -width indent
+.It Li jemalloc
+.El
+.Pp
+Other implementations are expected in the future in both
+.Fx
+and downstream consumers.
diff --git a/tools/build/options/WITHOUT_ACCT b/tools/build/options/WITHOUT_ACCT
index b885bc113692..a31683007f95 100644
--- a/tools/build/options/WITHOUT_ACCT
+++ b/tools/build/options/WITHOUT_ACCT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build process accounting tools such as
.Xr accton 8
and
diff --git a/tools/build/options/WITHOUT_ACPI b/tools/build/options/WITHOUT_ACPI
index 76c304a1b1a8..a44daa30867d 100644
--- a/tools/build/options/WITHOUT_ACPI
+++ b/tools/build/options/WITHOUT_ACPI
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr acpiconf 8 ,
.Xr acpidump 8
diff --git a/tools/build/options/WITHOUT_APM b/tools/build/options/WITHOUT_APM
index cb1334e1e654..b8658381964b 100644
--- a/tools/build/options/WITHOUT_APM
+++ b/tools/build/options/WITHOUT_APM
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr apm 8 ,
.Xr apmd 8
diff --git a/tools/build/options/WITHOUT_ASSERT_DEBUG b/tools/build/options/WITHOUT_ASSERT_DEBUG
index 66103683229a..e2dca19c49d2 100644
--- a/tools/build/options/WITHOUT_ASSERT_DEBUG
+++ b/tools/build/options/WITHOUT_ASSERT_DEBUG
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Compile programs and libraries without the
.Xr assert 3
checks.
diff --git a/tools/build/options/WITHOUT_AT b/tools/build/options/WITHOUT_AT
index 849f6b1e5468..ed4d7c2cfaea 100644
--- a/tools/build/options/WITHOUT_AT
+++ b/tools/build/options/WITHOUT_AT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr at 1
and related utilities.
diff --git a/tools/build/options/WITHOUT_ATM b/tools/build/options/WITHOUT_ATM
deleted file mode 100644
index 345663fb3ccd..000000000000
--- a/tools/build/options/WITHOUT_ATM
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" $FreeBSD$
-Do not build
-programs and libraries related to ATM networking.
diff --git a/tools/build/options/WITHOUT_AUDIT b/tools/build/options/WITHOUT_AUDIT
index 479bf77655e1..8adc89172200 100644
--- a/tools/build/options/WITHOUT_AUDIT
+++ b/tools/build/options/WITHOUT_AUDIT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build audit support into system programs.
diff --git a/tools/build/options/WITHOUT_AUTHPF b/tools/build/options/WITHOUT_AUTHPF
index 55e6a726b4ff..1d708b84e16c 100644
--- a/tools/build/options/WITHOUT_AUTHPF
+++ b/tools/build/options/WITHOUT_AUTHPF
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr authpf 8 .
diff --git a/tools/build/options/WITHOUT_AUTOFS b/tools/build/options/WITHOUT_AUTOFS
index 0d8f2450cccc..4e4047dda97f 100644
--- a/tools/build/options/WITHOUT_AUTOFS
+++ b/tools/build/options/WITHOUT_AUTOFS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
-.Xr autofs 5
+.Xr autofs 4
related programs, libraries, and kernel modules.
diff --git a/tools/build/options/WITHOUT_AUTO_OBJ b/tools/build/options/WITHOUT_AUTO_OBJ
index 69dd6c387bdb..60c4826bee30 100644
--- a/tools/build/options/WITHOUT_AUTO_OBJ
+++ b/tools/build/options/WITHOUT_AUTO_OBJ
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Disable automatic creation of objdirs.
This is enabled by default if the wanted OBJDIR is writable by the current user.
diff --git a/tools/build/options/WITHOUT_BHYVE b/tools/build/options/WITHOUT_BHYVE
index 52cef5d142e3..5d523bc58b0a 100644
--- a/tools/build/options/WITHOUT_BHYVE
+++ b/tools/build/options/WITHOUT_BHYVE
@@ -1,6 +1,5 @@
-.\" $FreeBSD$
Do not build or install
.Xr bhyve 8 ,
associated utilities, and examples.
.Pp
-This option only affects amd64/amd64.
+This option only affects amd64/amd64 and arm64/aarch64.
diff --git a/tools/build/options/WITHOUT_BIND_NOW b/tools/build/options/WITHOUT_BIND_NOW
index f35a7653aa3b..7c0e7a94015f 100644
--- a/tools/build/options/WITHOUT_BIND_NOW
+++ b/tools/build/options/WITHOUT_BIND_NOW
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build all binaries with the
.Dv DF_BIND_NOW
flag set.
diff --git a/tools/build/options/WITHOUT_BLACKLIST b/tools/build/options/WITHOUT_BLACKLIST
index 39ccd585aaa2..c54c83f27553 100644
--- a/tools/build/options/WITHOUT_BLACKLIST
+++ b/tools/build/options/WITHOUT_BLACKLIST
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Set this if you do not want to build
.Xr blacklistd 8
and
diff --git a/tools/build/options/WITHOUT_BLACKLIST_SUPPORT b/tools/build/options/WITHOUT_BLACKLIST_SUPPORT
index 2bb7542699e9..2bf22ea42ab6 100644
--- a/tools/build/options/WITHOUT_BLACKLIST_SUPPORT
+++ b/tools/build/options/WITHOUT_BLACKLIST_SUPPORT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build some programs without
.Xr libblacklist 3
support, like
diff --git a/tools/build/options/WITHOUT_BLUETOOTH b/tools/build/options/WITHOUT_BLUETOOTH
index 0b8b2b5aa74c..71c2d840a3b7 100644
--- a/tools/build/options/WITHOUT_BLUETOOTH
+++ b/tools/build/options/WITHOUT_BLUETOOTH
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build Bluetooth related kernel modules, programs and libraries.
diff --git a/tools/build/options/WITHOUT_BOOT b/tools/build/options/WITHOUT_BOOT
index dae312bf45b1..b17ca3d23b73 100644
--- a/tools/build/options/WITHOUT_BOOT
+++ b/tools/build/options/WITHOUT_BOOT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build the boot blocks and loader.
diff --git a/tools/build/options/WITHOUT_BOOTPARAMD b/tools/build/options/WITHOUT_BOOTPARAMD
index 3363479d2018..ec871797e46a 100644
--- a/tools/build/options/WITHOUT_BOOTPARAMD
+++ b/tools/build/options/WITHOUT_BOOTPARAMD
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build or install
.Xr bootparamd 8 .
diff --git a/tools/build/options/WITHOUT_BOOTPD b/tools/build/options/WITHOUT_BOOTPD
index cc4ef91da9ee..ec21d48bde0a 100644
--- a/tools/build/options/WITHOUT_BOOTPD
+++ b/tools/build/options/WITHOUT_BOOTPD
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build or install
.Xr bootpd 8 .
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_BSDINSTALL b/tools/build/options/WITHOUT_BSDINSTALL
index 77d82a9749bc..22d1905d8e7f 100644
--- a/tools/build/options/WITHOUT_BSDINSTALL
+++ b/tools/build/options/WITHOUT_BSDINSTALL
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr bsdinstall 8 ,
.Xr sade 8 ,
diff --git a/tools/build/options/WITHOUT_BSD_CPIO b/tools/build/options/WITHOUT_BSD_CPIO
index 207b7f898b2e..5aecc3abd433 100644
--- a/tools/build/options/WITHOUT_BSD_CPIO
+++ b/tools/build/options/WITHOUT_BSD_CPIO
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build the BSD licensed version of cpio based on
.Xr libarchive 3 .
diff --git a/tools/build/options/WITHOUT_BSNMP b/tools/build/options/WITHOUT_BSNMP
index 2836cc58bff1..cc07336f34da 100644
--- a/tools/build/options/WITHOUT_BSNMP
+++ b/tools/build/options/WITHOUT_BSNMP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build or install
.Xr bsnmpd 1
and related libraries and data files.
diff --git a/tools/build/options/WITHOUT_BZIP2 b/tools/build/options/WITHOUT_BZIP2
index 6f7c29f8e00f..0ec4f7638a44 100644
--- a/tools/build/options/WITHOUT_BZIP2
+++ b/tools/build/options/WITHOUT_BZIP2
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build contributed bzip2 software as a part of the base system.
.Bf -symbolic
The option has no effect yet.
diff --git a/tools/build/options/WITHOUT_BZIP2_SUPPORT b/tools/build/options/WITHOUT_BZIP2_SUPPORT
index ca0e80d44e29..0cc8c81fadff 100644
--- a/tools/build/options/WITHOUT_BZIP2_SUPPORT
+++ b/tools/build/options/WITHOUT_BZIP2_SUPPORT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build some programs without optional bzip2 support.
diff --git a/tools/build/options/WITHOUT_CALENDAR b/tools/build/options/WITHOUT_CALENDAR
index aa87b2fa1c09..d361f63d6f22 100644
--- a/tools/build/options/WITHOUT_CALENDAR
+++ b/tools/build/options/WITHOUT_CALENDAR
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr calendar 1 .
diff --git a/tools/build/options/WITHOUT_CAPSICUM b/tools/build/options/WITHOUT_CAPSICUM
deleted file mode 100644
index 9d0eb89e491d..000000000000
--- a/tools/build/options/WITHOUT_CAPSICUM
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" $FreeBSD$
-Do not build Capsicum support into system programs.
diff --git a/tools/build/options/WITHOUT_CAROOT b/tools/build/options/WITHOUT_CAROOT
index 07394ae5a7a5..1009c042dc75 100644
--- a/tools/build/options/WITHOUT_CAROOT
+++ b/tools/build/options/WITHOUT_CAROOT
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not add the trusted certificates from the Mozilla NSS bundle to
base.
diff --git a/tools/build/options/WITHOUT_CASPER b/tools/build/options/WITHOUT_CASPER
index 32bfa960d7d5..19d821f6c981 100644
--- a/tools/build/options/WITHOUT_CASPER
+++ b/tools/build/options/WITHOUT_CASPER
@@ -1,2 +1 @@
-.\" $FreeBSD$
-Do not build Casper program and related libraries.
+This option has no effect.
diff --git a/tools/build/options/WITHOUT_CCD b/tools/build/options/WITHOUT_CCD
index c6c47e61c1e6..224735ce9f06 100644
--- a/tools/build/options/WITHOUT_CCD
+++ b/tools/build/options/WITHOUT_CCD
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr geom_ccd 4
and related utilities.
diff --git a/tools/build/options/WITHOUT_CDDL b/tools/build/options/WITHOUT_CDDL
index a2210308ab67..b7e4bd620540 100644
--- a/tools/build/options/WITHOUT_CDDL
+++ b/tools/build/options/WITHOUT_CDDL
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build code licensed under Sun's CDDL.
diff --git a/tools/build/options/WITHOUT_CLANG b/tools/build/options/WITHOUT_CLANG
index 27bfc4da5a53..d830934022be 100644
--- a/tools/build/options/WITHOUT_CLANG
+++ b/tools/build/options/WITHOUT_CLANG
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build the Clang C/C++ compiler during the regular phase of the build.
diff --git a/tools/build/options/WITHOUT_CLANG_BOOTSTRAP b/tools/build/options/WITHOUT_CLANG_BOOTSTRAP
index ca65c02133cc..023d4e704899 100644
--- a/tools/build/options/WITHOUT_CLANG_BOOTSTRAP
+++ b/tools/build/options/WITHOUT_CLANG_BOOTSTRAP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the Clang C/C++ compiler during the bootstrap phase of
the build.
To be able to build the system, either gcc or clang bootstrap must be
diff --git a/tools/build/options/WITHOUT_CLANG_FULL b/tools/build/options/WITHOUT_CLANG_FULL
index d519983e9c91..56e3feb36665 100644
--- a/tools/build/options/WITHOUT_CLANG_FULL
+++ b/tools/build/options/WITHOUT_CLANG_FULL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Avoid building the ARCMigrate, Rewriter and StaticAnalyzer components of
the Clang C/C++ compiler.
diff --git a/tools/build/options/WITHOUT_CLANG_IS_CC b/tools/build/options/WITHOUT_CLANG_IS_CC
deleted file mode 100644
index 85d80ad476a5..000000000000
--- a/tools/build/options/WITHOUT_CLANG_IS_CC
+++ /dev/null
@@ -1,6 +0,0 @@
-.\" $FreeBSD$
-Do not install links to the Clang C/C++ compiler as
-.Pa /usr/bin/cc ,
-.Pa /usr/bin/c++
-and
-.Pa /usr/bin/cpp .
diff --git a/tools/build/options/WITHOUT_CLEAN b/tools/build/options/WITHOUT_CLEAN
index b55caa4b4bfd..f064cd82af8f 100644
--- a/tools/build/options/WITHOUT_CLEAN
+++ b/tools/build/options/WITHOUT_CLEAN
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not clean before building world and/or kernel.
diff --git a/tools/build/options/WITHOUT_CPP b/tools/build/options/WITHOUT_CPP
index 8b9d064d2889..9eeb4b3211c4 100644
--- a/tools/build/options/WITHOUT_CPP
+++ b/tools/build/options/WITHOUT_CPP
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr cpp 1 .
diff --git a/tools/build/options/WITHOUT_CROSS_COMPILER b/tools/build/options/WITHOUT_CROSS_COMPILER
index 6c690d6cf96b..6a382263f292 100644
--- a/tools/build/options/WITHOUT_CROSS_COMPILER
+++ b/tools/build/options/WITHOUT_CROSS_COMPILER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build any cross compiler in the cross-tools stage of buildworld.
When compiling a different version of
.Fx
diff --git a/tools/build/options/WITHOUT_CRYPT b/tools/build/options/WITHOUT_CRYPT
index 9b0e2a5dfe0e..decc6fdc25e5 100644
--- a/tools/build/options/WITHOUT_CRYPT
+++ b/tools/build/options/WITHOUT_CRYPT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build any crypto code.
diff --git a/tools/build/options/WITHOUT_CUSE b/tools/build/options/WITHOUT_CUSE
index 2e498797fe52..5ab9a4dda2cf 100644
--- a/tools/build/options/WITHOUT_CUSE
+++ b/tools/build/options/WITHOUT_CUSE
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build CUSE-related programs and libraries.
diff --git a/tools/build/options/WITHOUT_CXGBETOOL b/tools/build/options/WITHOUT_CXGBETOOL
index 75142882d5b3..9b434f5f5132 100644
--- a/tools/build/options/WITHOUT_CXGBETOOL
+++ b/tools/build/options/WITHOUT_CXGBETOOL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr cxgbetool 8
diff --git a/tools/build/options/WITHOUT_CXX b/tools/build/options/WITHOUT_CXX
deleted file mode 100644
index a600bb03df27..000000000000
--- a/tools/build/options/WITHOUT_CXX
+++ /dev/null
@@ -1,4 +0,0 @@
-.\" $FreeBSD$
-Do not build C++ headers and runtime libraries.
-It also prevents building binaries and libraries written in C++, including
-.Xr devd 8 .
diff --git a/tools/build/options/WITHOUT_DEBUG_FILES b/tools/build/options/WITHOUT_DEBUG_FILES
index f9169afccf2a..710e629528eb 100644
--- a/tools/build/options/WITHOUT_DEBUG_FILES
+++ b/tools/build/options/WITHOUT_DEBUG_FILES
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Avoid building or installing standalone debug files for each
executable binary and shared library.
diff --git a/tools/build/options/WITHOUT_DIALOG b/tools/build/options/WITHOUT_DIALOG
index 792b2bede32a..92b744b10d2a 100644
--- a/tools/build/options/WITHOUT_DIALOG
+++ b/tools/build/options/WITHOUT_DIALOG
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr dialog 1 ,
.Xr dialog 3 ,
diff --git a/tools/build/options/WITHOUT_DICT b/tools/build/options/WITHOUT_DICT
index 86a8523122e8..ea5c8a973348 100644
--- a/tools/build/options/WITHOUT_DICT
+++ b/tools/build/options/WITHOUT_DICT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build the Webster dictionary files.
diff --git a/tools/build/options/WITHOUT_DMAGENT b/tools/build/options/WITHOUT_DMAGENT
index 3195ce07ecc3..223dd0340f4c 100644
--- a/tools/build/options/WITHOUT_DMAGENT
+++ b/tools/build/options/WITHOUT_DMAGENT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build dma Mail Transport Agent.
diff --git a/tools/build/options/WITHOUT_DOCCOMPRESS b/tools/build/options/WITHOUT_DOCCOMPRESS
index c1db65c598c2..71a9ead56119 100644
--- a/tools/build/options/WITHOUT_DOCCOMPRESS
+++ b/tools/build/options/WITHOUT_DOCCOMPRESS
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not install compressed system documentation.
Only the uncompressed version will be installed.
diff --git a/tools/build/options/WITHOUT_DTRACE b/tools/build/options/WITHOUT_DTRACE
new file mode 100644
index 000000000000..2109b294ea66
--- /dev/null
+++ b/tools/build/options/WITHOUT_DTRACE
@@ -0,0 +1 @@
+Do not build DTrace framework kernel modules, libraries, and user commands.
diff --git a/tools/build/options/WITHOUT_DYNAMICROOT b/tools/build/options/WITHOUT_DYNAMICROOT
index b10f0f2bb269..52d4f522ba94 100644
--- a/tools/build/options/WITHOUT_DYNAMICROOT
+++ b/tools/build/options/WITHOUT_DYNAMICROOT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Set this if you do not want to link
.Pa /bin
and
diff --git a/tools/build/options/WITHOUT_EE b/tools/build/options/WITHOUT_EE
index 4295cd6ddbc2..b3f78e92a396 100644
--- a/tools/build/options/WITHOUT_EE
+++ b/tools/build/options/WITHOUT_EE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build and install
.Xr edit 1 ,
.Xr ee 1 ,
diff --git a/tools/build/options/WITHOUT_EFI b/tools/build/options/WITHOUT_EFI
index 3d080eb6448f..45c8319a6fff 100644
--- a/tools/build/options/WITHOUT_EFI
+++ b/tools/build/options/WITHOUT_EFI
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Set not to build
.Xr efivar 3
and
diff --git a/tools/build/options/WITHOUT_ELFTOOLCHAIN_BOOTSTRAP b/tools/build/options/WITHOUT_ELFTOOLCHAIN_BOOTSTRAP
index 45c92aea4b90..e717c0a3b7cf 100644
--- a/tools/build/options/WITHOUT_ELFTOOLCHAIN_BOOTSTRAP
+++ b/tools/build/options/WITHOUT_ELFTOOLCHAIN_BOOTSTRAP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build ELF Tool Chain tools
(addr2line, nm, size, strings and strip)
as part of the bootstrap process.
diff --git a/tools/build/options/WITHOUT_EXAMPLES b/tools/build/options/WITHOUT_EXAMPLES
index 88fb243eafac..d4d004a70854 100644
--- a/tools/build/options/WITHOUT_EXAMPLES
+++ b/tools/build/options/WITHOUT_EXAMPLES
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Avoid installing examples to
.Pa /usr/share/examples/ .
diff --git a/tools/build/options/WITHOUT_FDT b/tools/build/options/WITHOUT_FDT
index bf22c5012413..2136cb39b816 100644
--- a/tools/build/options/WITHOUT_FDT
+++ b/tools/build/options/WITHOUT_FDT
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build Flattened Device Tree support as part of the base system.
This includes the device tree compiler (dtc) and libfdt support library.
diff --git a/tools/build/options/WITHOUT_FILE b/tools/build/options/WITHOUT_FILE
index 67859bd6ded1..f97b844304f9 100644
--- a/tools/build/options/WITHOUT_FILE
+++ b/tools/build/options/WITHOUT_FILE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr file 1
and related programs.
diff --git a/tools/build/options/WITHOUT_FINGER b/tools/build/options/WITHOUT_FINGER
index d42161245478..23de0e346ae8 100644
--- a/tools/build/options/WITHOUT_FINGER
+++ b/tools/build/options/WITHOUT_FINGER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build or install
.Xr finger 1
and
diff --git a/tools/build/options/WITHOUT_FLOPPY b/tools/build/options/WITHOUT_FLOPPY
index 324081f993f1..1988d598f2f2 100644
--- a/tools/build/options/WITHOUT_FLOPPY
+++ b/tools/build/options/WITHOUT_FLOPPY
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build or install programs
for operating floppy disk driver.
diff --git a/tools/build/options/WITHOUT_FORMAT_EXTENSIONS b/tools/build/options/WITHOUT_FORMAT_EXTENSIONS
index 05ae981f7b9c..f3c127fb34d7 100644
--- a/tools/build/options/WITHOUT_FORMAT_EXTENSIONS
+++ b/tools/build/options/WITHOUT_FORMAT_EXTENSIONS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not enable
.Fl fformat-extensions
when compiling the kernel.
diff --git a/tools/build/options/WITHOUT_FORTH b/tools/build/options/WITHOUT_FORTH
index dd3de7d18e91..8d35969a0377 100644
--- a/tools/build/options/WITHOUT_FORTH
+++ b/tools/build/options/WITHOUT_FORTH
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build bootloaders without Forth support.
diff --git a/tools/build/options/WITHOUT_FP_LIBC b/tools/build/options/WITHOUT_FP_LIBC
index a2975088c6cf..c92a9f82fcaf 100644
--- a/tools/build/options/WITHOUT_FP_LIBC
+++ b/tools/build/options/WITHOUT_FP_LIBC
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build
.Nm libc
without floating-point support.
diff --git a/tools/build/options/WITHOUT_FREEBSD_UPDATE b/tools/build/options/WITHOUT_FREEBSD_UPDATE
index 61638b7f35ac..6565d1fdfd7f 100644
--- a/tools/build/options/WITHOUT_FREEBSD_UPDATE
+++ b/tools/build/options/WITHOUT_FREEBSD_UPDATE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr freebsd-update 8 .
diff --git a/tools/build/options/WITHOUT_FTP b/tools/build/options/WITHOUT_FTP
index e037640b59f0..2e55ccc46ef6 100644
--- a/tools/build/options/WITHOUT_FTP
+++ b/tools/build/options/WITHOUT_FTP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build or install
.Xr ftp 1
and
diff --git a/tools/build/options/WITHOUT_GAMES b/tools/build/options/WITHOUT_GAMES
index 7102c377e07c..18db1f66d7ba 100644
--- a/tools/build/options/WITHOUT_GAMES
+++ b/tools/build/options/WITHOUT_GAMES
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build games.
diff --git a/tools/build/options/WITHOUT_GCC b/tools/build/options/WITHOUT_GCC
index 927765bfdc69..b380b606ddaf 100644
--- a/tools/build/options/WITHOUT_GCC
+++ b/tools/build/options/WITHOUT_GCC
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build and install gcc and g++ as part of the normal build process.
diff --git a/tools/build/options/WITHOUT_GCC_BOOTSTRAP b/tools/build/options/WITHOUT_GCC_BOOTSTRAP
index 88820cf67e05..6d4dccde0850 100644
--- a/tools/build/options/WITHOUT_GCC_BOOTSTRAP
+++ b/tools/build/options/WITHOUT_GCC_BOOTSTRAP
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build gcc and g++ as part of the bootstrap process.
diff --git a/tools/build/options/WITHOUT_GCOV b/tools/build/options/WITHOUT_GCOV
index 0857788db2ff..bad9fdfb0aa5 100644
--- a/tools/build/options/WITHOUT_GCOV
+++ b/tools/build/options/WITHOUT_GCOV
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the
.Xr gcov 1
tool.
diff --git a/tools/build/options/WITHOUT_GDB b/tools/build/options/WITHOUT_GDB
index 1d99903fb3fc..3dd68198af96 100644
--- a/tools/build/options/WITHOUT_GDB
+++ b/tools/build/options/WITHOUT_GDB
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr gdb 1 .
diff --git a/tools/build/options/WITHOUT_GH_BC b/tools/build/options/WITHOUT_GH_BC
deleted file mode 100644
index a1f2c070831e..000000000000
--- a/tools/build/options/WITHOUT_GH_BC
+++ /dev/null
@@ -1,6 +0,0 @@
-.\" $FreeBSD$
-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 a929b9686da9..4ea9f6f4a363 100644
--- a/tools/build/options/WITHOUT_GNU_DIFF
+++ b/tools/build/options/WITHOUT_GNU_DIFF
@@ -1,3 +1,5 @@
-.\" $FreeBSD$
Do not build GNU
-.Xr diff3 1 .
+.Xr diff3 1 ;
+build BSD
+.Xr diff3 1
+instead.
diff --git a/tools/build/options/WITHOUT_GOOGLETEST b/tools/build/options/WITHOUT_GOOGLETEST
index fca54e882561..58bcdb93a3e4 100644
--- a/tools/build/options/WITHOUT_GOOGLETEST
+++ b/tools/build/options/WITHOUT_GOOGLETEST
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Neither build nor install
.Lb libgmock ,
.Lb libgtest ,
diff --git a/tools/build/options/WITHOUT_GPIO b/tools/build/options/WITHOUT_GPIO
index 70b3673bb5db..aa35adf2e739 100644
--- a/tools/build/options/WITHOUT_GPIO
+++ b/tools/build/options/WITHOUT_GPIO
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr gpioctl 8
as part of the base system.
diff --git a/tools/build/options/WITHOUT_GSSAPI b/tools/build/options/WITHOUT_GSSAPI
deleted file mode 100644
index 1f325a64d249..000000000000
--- a/tools/build/options/WITHOUT_GSSAPI
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" $FreeBSD$
-Do not build libgssapi.
diff --git a/tools/build/options/WITHOUT_HAST b/tools/build/options/WITHOUT_HAST
index 975f56331ab1..50f59f0df129 100644
--- a/tools/build/options/WITHOUT_HAST
+++ b/tools/build/options/WITHOUT_HAST
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr hastd 8
and related utilities.
diff --git a/tools/build/options/WITHOUT_HTML b/tools/build/options/WITHOUT_HTML
index 04c1174f136f..9cb59261c8ab 100644
--- a/tools/build/options/WITHOUT_HTML
+++ b/tools/build/options/WITHOUT_HTML
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build HTML docs.
diff --git a/tools/build/options/WITHOUT_HYPERV b/tools/build/options/WITHOUT_HYPERV
index c717a4e943f8..bac59fa56466 100644
--- a/tools/build/options/WITHOUT_HYPERV
+++ b/tools/build/options/WITHOUT_HYPERV
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build or install HyperV utilities.
diff --git a/tools/build/options/WITHOUT_ICONV b/tools/build/options/WITHOUT_ICONV
index 3c887a415153..28be34d99987 100644
--- a/tools/build/options/WITHOUT_ICONV
+++ b/tools/build/options/WITHOUT_ICONV
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build iconv as part of libc.
diff --git a/tools/build/options/WITHOUT_INCLUDES b/tools/build/options/WITHOUT_INCLUDES
index da210a4f76f3..41545361ff05 100644
--- a/tools/build/options/WITHOUT_INCLUDES
+++ b/tools/build/options/WITHOUT_INCLUDES
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not install header files.
This option used to be spelled
.Va NO_INCS .
diff --git a/tools/build/options/WITHOUT_INET b/tools/build/options/WITHOUT_INET
index 79e493258017..b9f5781d1dee 100644
--- a/tools/build/options/WITHOUT_INET
+++ b/tools/build/options/WITHOUT_INET
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build programs and libraries related to IPv4 networking.
diff --git a/tools/build/options/WITHOUT_INET6 b/tools/build/options/WITHOUT_INET6
index a28a85691090..f41df46fe007 100644
--- a/tools/build/options/WITHOUT_INET6
+++ b/tools/build/options/WITHOUT_INET6
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
programs and libraries related to IPv6 networking.
diff --git a/tools/build/options/WITHOUT_INET6_SUPPORT b/tools/build/options/WITHOUT_INET6_SUPPORT
index e41e3d5baf1c..537ae5b59ddf 100644
--- a/tools/build/options/WITHOUT_INET6_SUPPORT
+++ b/tools/build/options/WITHOUT_INET6_SUPPORT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build libraries, programs, and kernel modules without IPv6 support.
diff --git a/tools/build/options/WITHOUT_INETD b/tools/build/options/WITHOUT_INETD
index 4d47f6e17c7a..94341c140b33 100644
--- a/tools/build/options/WITHOUT_INETD
+++ b/tools/build/options/WITHOUT_INETD
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr inetd 8 .
diff --git a/tools/build/options/WITHOUT_INET_SUPPORT b/tools/build/options/WITHOUT_INET_SUPPORT
index e5c0ded7d56b..167c3defd5d8 100644
--- a/tools/build/options/WITHOUT_INET_SUPPORT
+++ b/tools/build/options/WITHOUT_INET_SUPPORT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build libraries, programs, and kernel modules without IPv4 support.
diff --git a/tools/build/options/WITHOUT_INFO b/tools/build/options/WITHOUT_INFO
index 6900ca9cb315..d91aa1382580 100644
--- a/tools/build/options/WITHOUT_INFO
+++ b/tools/build/options/WITHOUT_INFO
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not make or install
.Xr info 5
files.
diff --git a/tools/build/options/WITHOUT_INSTALLLIB b/tools/build/options/WITHOUT_INSTALLLIB
index f499e9ddd837..dae81fb39868 100644
--- a/tools/build/options/WITHOUT_INSTALLLIB
+++ b/tools/build/options/WITHOUT_INSTALLLIB
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Set this to not install optional libraries.
For example, when creating a
.Xr nanobsd 8
diff --git a/tools/build/options/WITHOUT_IPFILTER b/tools/build/options/WITHOUT_IPFILTER
index 4bdb201944fc..f1940348f6aa 100644
--- a/tools/build/options/WITHOUT_IPFILTER
+++ b/tools/build/options/WITHOUT_IPFILTER
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build IP Filter package.
diff --git a/tools/build/options/WITHOUT_IPFW b/tools/build/options/WITHOUT_IPFW
index 591973e57e12..45be98765c00 100644
--- a/tools/build/options/WITHOUT_IPFW
+++ b/tools/build/options/WITHOUT_IPFW
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build IPFW tools.
diff --git a/tools/build/options/WITHOUT_IPSEC_SUPPORT b/tools/build/options/WITHOUT_IPSEC_SUPPORT
index 03ab11bda522..09f6152528c4 100644
--- a/tools/build/options/WITHOUT_IPSEC_SUPPORT
+++ b/tools/build/options/WITHOUT_IPSEC_SUPPORT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the kernel with
.Xr ipsec 4
support.
diff --git a/tools/build/options/WITHOUT_ISCSI b/tools/build/options/WITHOUT_ISCSI
index 6d6e76b53891..6c3264098a9a 100644
--- a/tools/build/options/WITHOUT_ISCSI
+++ b/tools/build/options/WITHOUT_ISCSI
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr iscsid 8
and related utilities.
diff --git a/tools/build/options/WITHOUT_JAIL b/tools/build/options/WITHOUT_JAIL
index d47f0e944532..8e19446635ac 100644
--- a/tools/build/options/WITHOUT_JAIL
+++ b/tools/build/options/WITHOUT_JAIL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build tools for the support of jails; e.g.,
.Xr jail 8 .
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_KDUMP b/tools/build/options/WITHOUT_KDUMP
index 763a89fd28f2..939dc07d7505 100644
--- a/tools/build/options/WITHOUT_KDUMP
+++ b/tools/build/options/WITHOUT_KDUMP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr kdump 1
and
diff --git a/tools/build/options/WITHOUT_KERBEROS b/tools/build/options/WITHOUT_KERBEROS
index fab303b81aac..e0301ee1d786 100644
--- a/tools/build/options/WITHOUT_KERBEROS
+++ b/tools/build/options/WITHOUT_KERBEROS
@@ -1,2 +1 @@
-.\" $FreeBSD$
-Set this to not build Kerberos 5 (KTH Heimdal).
+Set this to not build Kerberos.
diff --git a/tools/build/options/WITHOUT_KERBEROS_SUPPORT b/tools/build/options/WITHOUT_KERBEROS_SUPPORT
index 1a50b28678bc..36193f2c90c9 100644
--- a/tools/build/options/WITHOUT_KERBEROS_SUPPORT
+++ b/tools/build/options/WITHOUT_KERBEROS_SUPPORT
@@ -1,7 +1,5 @@
-.\" $FreeBSD$
Build some programs without Kerberos support, like
.Xr ssh 1 ,
.Xr telnet 1 ,
-.Xr sshd 8 ,
and
-.Xr telnetd 8 .
+.Xr sshd 8 .
diff --git a/tools/build/options/WITHOUT_KERNEL_RETPOLINE b/tools/build/options/WITHOUT_KERNEL_RETPOLINE
index 83dd6edfbeac..71b739616313 100644
--- a/tools/build/options/WITHOUT_KERNEL_RETPOLINE
+++ b/tools/build/options/WITHOUT_KERNEL_RETPOLINE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Disable the "retpoline" mitigation for CVE-2017-5715 in the kernel
build.
diff --git a/tools/build/options/WITHOUT_KERNEL_SYMBOLS b/tools/build/options/WITHOUT_KERNEL_SYMBOLS
index c56359d9fa6b..2cb77260b86a 100644
--- a/tools/build/options/WITHOUT_KERNEL_SYMBOLS
+++ b/tools/build/options/WITHOUT_KERNEL_SYMBOLS
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not install standalone kernel debug symbol files.
This option has no effect at build time.
diff --git a/tools/build/options/WITHOUT_KVM b/tools/build/options/WITHOUT_KVM
index 1700731ec421..a886999b4db1 100644
--- a/tools/build/options/WITHOUT_KVM
+++ b/tools/build/options/WITHOUT_KVM
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the
.Nm libkvm
library as a part of the base system.
diff --git a/tools/build/options/WITHOUT_KVM_SUPPORT b/tools/build/options/WITHOUT_KVM_SUPPORT
index b2da6c5a3e0a..319d3ee09b39 100644
--- a/tools/build/options/WITHOUT_KVM_SUPPORT
+++ b/tools/build/options/WITHOUT_KVM_SUPPORT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build some programs without optional
.Nm libkvm
support.
diff --git a/tools/build/options/WITHOUT_LDNS b/tools/build/options/WITHOUT_LDNS
index 446d3e82e91d..ec3846faf6d8 100644
--- a/tools/build/options/WITHOUT_LDNS
+++ b/tools/build/options/WITHOUT_LDNS
@@ -1,2 +1 @@
-.\" $FreeBSD$
Setting this variable will prevent the LDNS library from being built.
diff --git a/tools/build/options/WITHOUT_LDNS_UTILS b/tools/build/options/WITHOUT_LDNS_UTILS
index f061f01db4ae..1e06528fa0f8 100644
--- a/tools/build/options/WITHOUT_LDNS_UTILS
+++ b/tools/build/options/WITHOUT_LDNS_UTILS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Setting this variable will prevent building the LDNS utilities
.Xr drill 1
and
diff --git a/tools/build/options/WITHOUT_LEGACY_CONSOLE b/tools/build/options/WITHOUT_LEGACY_CONSOLE
index 69f5eb5b8f40..32a853ce08d8 100644
--- a/tools/build/options/WITHOUT_LEGACY_CONSOLE
+++ b/tools/build/options/WITHOUT_LEGACY_CONSOLE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build programs that support a legacy PC console; e.g.,
.Xr kbdcontrol 1
and
diff --git a/tools/build/options/WITHOUT_LIB32 b/tools/build/options/WITHOUT_LIB32
index 62a1046c976f..3d9a4133f461 100644
--- a/tools/build/options/WITHOUT_LIB32
+++ b/tools/build/options/WITHOUT_LIB32
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
On 64-bit platforms, do not build 32-bit library set and a
.Nm ld-elf32.so.1
runtime linker.
diff --git a/tools/build/options/WITHOUT_LLD b/tools/build/options/WITHOUT_LLD
index 519eca7572c2..bd070495d3df 100644
--- a/tools/build/options/WITHOUT_LLD
+++ b/tools/build/options/WITHOUT_LLD
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build LLVM's lld linker.
diff --git a/tools/build/options/WITHOUT_LLDB b/tools/build/options/WITHOUT_LLDB
index db9b98aaf93a..06c9bb05ae7d 100644
--- a/tools/build/options/WITHOUT_LLDB
+++ b/tools/build/options/WITHOUT_LLDB
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build the LLDB debugger.
diff --git a/tools/build/options/WITHOUT_LLD_BOOTSTRAP b/tools/build/options/WITHOUT_LLD_BOOTSTRAP
index 0995ef549de4..7bf808709237 100644
--- a/tools/build/options/WITHOUT_LLD_BOOTSTRAP
+++ b/tools/build/options/WITHOUT_LLD_BOOTSTRAP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the LLD linker during the bootstrap phase of
the build.
To be able to build the system an alternate linker must be provided via XLD.
diff --git a/tools/build/options/WITHOUT_LLD_IS_LD b/tools/build/options/WITHOUT_LLD_IS_LD
deleted file mode 100644
index 8ca789dfdc45..000000000000
--- a/tools/build/options/WITHOUT_LLD_IS_LD
+++ /dev/null
@@ -1,7 +0,0 @@
-.\" $FreeBSD$
-Do not install a
-.Pa /usr/bin/ld symlink
-to
-.Pa ld.lld .
-The system will not have a usable tool chain unless a linker is provided
-some other way.
diff --git a/tools/build/options/WITHOUT_LLVM_ASSERTIONS b/tools/build/options/WITHOUT_LLVM_ASSERTIONS
index b4f07b0bb1f2..12d54b8ba3a4 100644
--- a/tools/build/options/WITHOUT_LLVM_ASSERTIONS
+++ b/tools/build/options/WITHOUT_LLVM_ASSERTIONS
@@ -1,2 +1 @@
-.\" $FreeBSD$
Disable debugging assertions in LLVM.
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_COV b/tools/build/options/WITHOUT_LLVM_COV
index 84ca9e8a5a0d..d95e76ddf659 100644
--- a/tools/build/options/WITHOUT_LLVM_COV
+++ b/tools/build/options/WITHOUT_LLVM_COV
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the
.Xr llvm-cov 1
tool.
diff --git a/tools/build/options/WITHOUT_LLVM_CXXFILT b/tools/build/options/WITHOUT_LLVM_CXXFILT
index e729f6c4c8e0..e7d263f01f2a 100644
--- a/tools/build/options/WITHOUT_LLVM_CXXFILT
+++ b/tools/build/options/WITHOUT_LLVM_CXXFILT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Install ELF Tool Chain's cxxfilt as c++filt, instead of LLVM's llvm-cxxfilt.
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_AARCH64 b/tools/build/options/WITHOUT_LLVM_TARGET_AARCH64
index 4306b30dd37b..7133fbaeb8ab 100644
--- a/tools/build/options/WITHOUT_LLVM_TARGET_AARCH64
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_AARCH64
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build LLVM target support for AArch64.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_ALL b/tools/build/options/WITHOUT_LLVM_TARGET_ALL
index 0b399aac209e..d6cd1bfbddbe 100644
--- a/tools/build/options/WITHOUT_LLVM_TARGET_ALL
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_ALL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Only build the required LLVM target support.
This option is preferred to specific target support options.
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_ARM b/tools/build/options/WITHOUT_LLVM_TARGET_ARM
index f89d26ae3940..cb6fa2226e01 100644
--- a/tools/build/options/WITHOUT_LLVM_TARGET_ARM
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_ARM
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build LLVM target support for ARM.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_MIPS b/tools/build/options/WITHOUT_LLVM_TARGET_MIPS
index baa15094f01c..2b8218b2c8c4 100644
--- a/tools/build/options/WITHOUT_LLVM_TARGET_MIPS
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_MIPS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build LLVM target support for MIPS.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_POWERPC b/tools/build/options/WITHOUT_LLVM_TARGET_POWERPC
index e44801c94ba2..c0c98a6e07d5 100644
--- a/tools/build/options/WITHOUT_LLVM_TARGET_POWERPC
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_POWERPC
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build LLVM target support for PowerPC.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_RISCV b/tools/build/options/WITHOUT_LLVM_TARGET_RISCV
index 408a87195016..7d724c94a663 100644
--- a/tools/build/options/WITHOUT_LLVM_TARGET_RISCV
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_RISCV
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build LLVM target support for RISC-V.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_SPARC b/tools/build/options/WITHOUT_LLVM_TARGET_SPARC
deleted file mode 100644
index dda7019210d1..000000000000
--- a/tools/build/options/WITHOUT_LLVM_TARGET_SPARC
+++ /dev/null
@@ -1,5 +0,0 @@
-.\" $FreeBSD$
-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_LLVM_TARGET_X86 b/tools/build/options/WITHOUT_LLVM_TARGET_X86
index 447b28736a45..4d4deae50dc8 100644
--- a/tools/build/options/WITHOUT_LLVM_TARGET_X86
+++ b/tools/build/options/WITHOUT_LLVM_TARGET_X86
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build LLVM target support for X86.
The
.Va LLVM_TARGET_ALL
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_GELI b/tools/build/options/WITHOUT_LOADER_GELI
index 114bea6bfe0d..1c95120afe56 100644
--- a/tools/build/options/WITHOUT_LOADER_GELI
+++ b/tools/build/options/WITHOUT_LOADER_GELI
@@ -1,2 +1 @@
-.\" $FreeBSD$
Disable inclusion of GELI crypto support in the boot chain binaries.
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_LUA b/tools/build/options/WITHOUT_LOADER_LUA
index 217cb24d0761..4514025eb209 100644
--- a/tools/build/options/WITHOUT_LOADER_LUA
+++ b/tools/build/options/WITHOUT_LOADER_LUA
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build LUA bindings for the boot loader.
diff --git a/tools/build/options/WITHOUT_LOADER_OFW b/tools/build/options/WITHOUT_LOADER_OFW
index d28ddcb73e81..fa2f5e58998a 100644
--- a/tools/build/options/WITHOUT_LOADER_OFW
+++ b/tools/build/options/WITHOUT_LOADER_OFW
@@ -1,2 +1 @@
-.\" $FreeBSD$
Disable building of openfirmware bootloader components.
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_LOADER_UBOOT b/tools/build/options/WITHOUT_LOADER_UBOOT
index 7f6a3bb49962..d2920b9fbdd3 100644
--- a/tools/build/options/WITHOUT_LOADER_UBOOT
+++ b/tools/build/options/WITHOUT_LOADER_UBOOT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Disable building of ubldr.
diff --git a/tools/build/options/WITHOUT_LOADER_ZFS b/tools/build/options/WITHOUT_LOADER_ZFS
index 78d1f1ae6e75..01e9f7b55f4a 100644
--- a/tools/build/options/WITHOUT_LOADER_ZFS
+++ b/tools/build/options/WITHOUT_LOADER_ZFS
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build ZFS file system boot loader support.
diff --git a/tools/build/options/WITHOUT_LOCALES b/tools/build/options/WITHOUT_LOCALES
index aa035b783d96..74750ad8d0d0 100644
--- a/tools/build/options/WITHOUT_LOCALES
+++ b/tools/build/options/WITHOUT_LOCALES
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build localization files; see
.Xr locale 1 .
diff --git a/tools/build/options/WITHOUT_LOCATE b/tools/build/options/WITHOUT_LOCATE
index 016666f24033..be292d83a9a5 100644
--- a/tools/build/options/WITHOUT_LOCATE
+++ b/tools/build/options/WITHOUT_LOCATE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr locate 1
and related programs.
diff --git a/tools/build/options/WITHOUT_LPR b/tools/build/options/WITHOUT_LPR
index 8bf1a265b176..24145dbe34a1 100644
--- a/tools/build/options/WITHOUT_LPR
+++ b/tools/build/options/WITHOUT_LPR
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr lpr 1
and related programs.
diff --git a/tools/build/options/WITHOUT_LS_COLORS b/tools/build/options/WITHOUT_LS_COLORS
index 479f55f2235b..0d4a910ac4ef 100644
--- a/tools/build/options/WITHOUT_LS_COLORS
+++ b/tools/build/options/WITHOUT_LS_COLORS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build
.Xr ls 1
without support for colors to distinguish file types.
diff --git a/tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS b/tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS
new file mode 100644
index 000000000000..1c596c998504
--- /dev/null
+++ b/tools/build/options/WITHOUT_MACHDEP_OPTIMIZATIONS
@@ -0,0 +1 @@
+Prefer machine-independent non-assembler code in libc and libm.
diff --git a/tools/build/options/WITHOUT_MAIL b/tools/build/options/WITHOUT_MAIL
index c10acb64f792..774a45ba8113 100644
--- a/tools/build/options/WITHOUT_MAIL
+++ b/tools/build/options/WITHOUT_MAIL
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build any mail support (MUA or MTA).
diff --git a/tools/build/options/WITHOUT_MAILWRAPPER b/tools/build/options/WITHOUT_MAILWRAPPER
index ce8fa0e395ed..29bd1fdf0693 100644
--- a/tools/build/options/WITHOUT_MAILWRAPPER
+++ b/tools/build/options/WITHOUT_MAILWRAPPER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the
.Xr mailwrapper 8
MTA selector.
diff --git a/tools/build/options/WITHOUT_MAKE b/tools/build/options/WITHOUT_MAKE
index 3de8ad73d28c..263f4e5b756c 100644
--- a/tools/build/options/WITHOUT_MAKE
+++ b/tools/build/options/WITHOUT_MAKE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not install
.Xr make 1
and related support files.
diff --git a/tools/build/options/WITHOUT_MAKE_CHECK_USE_SANDBOX b/tools/build/options/WITHOUT_MAKE_CHECK_USE_SANDBOX
index 0d9d06a69931..477f08fe8b2f 100644
--- a/tools/build/options/WITHOUT_MAKE_CHECK_USE_SANDBOX
+++ b/tools/build/options/WITHOUT_MAKE_CHECK_USE_SANDBOX
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not execute
.Dq Li "make check"
in limited sandbox mode.
diff --git a/tools/build/options/WITHOUT_MALLOC_PRODUCTION b/tools/build/options/WITHOUT_MALLOC_PRODUCTION
index 25ea84b59c3c..90efc200fd54 100644
--- a/tools/build/options/WITHOUT_MALLOC_PRODUCTION
+++ b/tools/build/options/WITHOUT_MALLOC_PRODUCTION
@@ -1,4 +1,8 @@
-.\" $FreeBSD$
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_MAN b/tools/build/options/WITHOUT_MAN
index 1379508c2627..85548df0e28a 100644
--- a/tools/build/options/WITHOUT_MAN
+++ b/tools/build/options/WITHOUT_MAN
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build manual pages.
diff --git a/tools/build/options/WITHOUT_MANCOMPRESS b/tools/build/options/WITHOUT_MANCOMPRESS
index af1e318116b4..20251d589f68 100644
--- a/tools/build/options/WITHOUT_MANCOMPRESS
+++ b/tools/build/options/WITHOUT_MANCOMPRESS
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not install compressed man pages.
Only the uncompressed versions will be installed.
diff --git a/tools/build/options/WITHOUT_MANSPLITPKG b/tools/build/options/WITHOUT_MANSPLITPKG
new file mode 100644
index 000000000000..a9913308d411
--- /dev/null
+++ b/tools/build/options/WITHOUT_MANSPLITPKG
@@ -0,0 +1 @@
+Do not split man pages into their own packages during make package.
diff --git a/tools/build/options/WITHOUT_MAN_UTILS b/tools/build/options/WITHOUT_MAN_UTILS
index c80206c830c8..3ae2af3377c7 100644
--- a/tools/build/options/WITHOUT_MAN_UTILS
+++ b/tools/build/options/WITHOUT_MAN_UTILS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build utilities for manual pages,
.Xr apropos 1 ,
.Xr makewhatis 1 ,
diff --git a/tools/build/options/WITHOUT_MITKRB5 b/tools/build/options/WITHOUT_MITKRB5
new file mode 100644
index 000000000000..14a9e5932ef2
--- /dev/null
+++ b/tools/build/options/WITHOUT_MITKRB5
@@ -0,0 +1 @@
+Set this to build KTH Heimdal instead of MIT Kerberos 5.
diff --git a/tools/build/options/WITHOUT_MLX5TOOL b/tools/build/options/WITHOUT_MLX5TOOL
index 267c32f6029d..fbb76736bb5a 100644
--- a/tools/build/options/WITHOUT_MLX5TOOL
+++ b/tools/build/options/WITHOUT_MLX5TOOL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr mlx5tool 8
diff --git a/tools/build/options/WITHOUT_MODULE_DRM b/tools/build/options/WITHOUT_MODULE_DRM
index f588566edb45..ac354ec8a130 100644
--- a/tools/build/options/WITHOUT_MODULE_DRM
+++ b/tools/build/options/WITHOUT_MODULE_DRM
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Disable creation of old drm video modules.
diff --git a/tools/build/options/WITHOUT_MODULE_DRM2 b/tools/build/options/WITHOUT_MODULE_DRM2
index 44d401d87619..43291115ada8 100644
--- a/tools/build/options/WITHOUT_MODULE_DRM2
+++ b/tools/build/options/WITHOUT_MODULE_DRM2
@@ -1,2 +1 @@
-.\" $FreeBSD$
Disable creation of old drm2 video modules.
diff --git a/tools/build/options/WITHOUT_NCP b/tools/build/options/WITHOUT_NCP
index 82c891304612..c381de4e00c0 100644
--- a/tools/build/options/WITHOUT_NCP
+++ b/tools/build/options/WITHOUT_NCP
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build programs, libraries, and kernel modules
related to NetWare Core protocol.
diff --git a/tools/build/options/WITHOUT_NETCAT b/tools/build/options/WITHOUT_NETCAT
index c89abf1522b7..e68b2ac61e38 100644
--- a/tools/build/options/WITHOUT_NETCAT
+++ b/tools/build/options/WITHOUT_NETCAT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr nc 1
utility.
diff --git a/tools/build/options/WITHOUT_NETGRAPH b/tools/build/options/WITHOUT_NETGRAPH
index 27488f45ddc9..fefcbcfb82c2 100644
--- a/tools/build/options/WITHOUT_NETGRAPH
+++ b/tools/build/options/WITHOUT_NETGRAPH
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build applications to support
.Xr netgraph 4 .
diff --git a/tools/build/options/WITHOUT_NETGRAPH_SUPPORT b/tools/build/options/WITHOUT_NETGRAPH_SUPPORT
index 15d409e5493a..a51da58cac52 100644
--- a/tools/build/options/WITHOUT_NETGRAPH_SUPPORT
+++ b/tools/build/options/WITHOUT_NETGRAPH_SUPPORT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build libraries, programs, and kernel modules without netgraph support.
diff --git a/tools/build/options/WITHOUT_NETLINK b/tools/build/options/WITHOUT_NETLINK
new file mode 100644
index 000000000000..8b698239b10a
--- /dev/null
+++ b/tools/build/options/WITHOUT_NETLINK
@@ -0,0 +1,3 @@
+Do not build
+.Xr genl 1
+utility.
diff --git a/tools/build/options/WITHOUT_NETLINK_SUPPORT b/tools/build/options/WITHOUT_NETLINK_SUPPORT
new file mode 100644
index 000000000000..d7147c91e358
--- /dev/null
+++ b/tools/build/options/WITHOUT_NETLINK_SUPPORT
@@ -0,0 +1,4 @@
+Make libraries and programs use rtsock and
+.Xr sysctl 3
+interfaces instead of
+.Xr snl 3 .
diff --git a/tools/build/options/WITHOUT_NIS b/tools/build/options/WITHOUT_NIS
index 0d72227cda3c..90cecbe76451 100644
--- a/tools/build/options/WITHOUT_NIS
+++ b/tools/build/options/WITHOUT_NIS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr NIS 8
support and related programs.
diff --git a/tools/build/options/WITHOUT_NLS b/tools/build/options/WITHOUT_NLS
index cba7dcd89e45..125b0b302c61 100644
--- a/tools/build/options/WITHOUT_NLS
+++ b/tools/build/options/WITHOUT_NLS
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build NLS catalogs.
diff --git a/tools/build/options/WITHOUT_NLS_CATALOGS b/tools/build/options/WITHOUT_NLS_CATALOGS
index a066e4705ec9..a22e9fec2252 100644
--- a/tools/build/options/WITHOUT_NLS_CATALOGS
+++ b/tools/build/options/WITHOUT_NLS_CATALOGS
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build NLS catalog support for
.Xr csh 1 .
diff --git a/tools/build/options/WITHOUT_NS_CACHING b/tools/build/options/WITHOUT_NS_CACHING
index 9a2739d4f2b3..212dcca27bc5 100644
--- a/tools/build/options/WITHOUT_NS_CACHING
+++ b/tools/build/options/WITHOUT_NS_CACHING
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Disable name caching in the
.Pa nsswitch
subsystem.
diff --git a/tools/build/options/WITHOUT_NTP b/tools/build/options/WITHOUT_NTP
index 0b8e38c44373..884068ce89e5 100644
--- a/tools/build/options/WITHOUT_NTP
+++ b/tools/build/options/WITHOUT_NTP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr ntpd 8
and related programs.
diff --git a/tools/build/options/WITHOUT_NUAGEINIT b/tools/build/options/WITHOUT_NUAGEINIT
new file mode 100644
index 000000000000..14a17ce0ed5b
--- /dev/null
+++ b/tools/build/options/WITHOUT_NUAGEINIT
@@ -0,0 +1 @@
+Do not install the limited cloud init support scripts.
diff --git a/tools/build/options/WITHOUT_NVME b/tools/build/options/WITHOUT_NVME
deleted file mode 100644
index 507f708cd697..000000000000
--- a/tools/build/options/WITHOUT_NVME
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" $FreeBSD$
-Do not build nvme related tools and kernel modules.
diff --git a/tools/build/options/WITHOUT_OFED b/tools/build/options/WITHOUT_OFED
index 63cb5b94eb28..8c38242cb1b8 100644
--- a/tools/build/options/WITHOUT_OFED
+++ b/tools/build/options/WITHOUT_OFED
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
-Disable the build of the
+Do not build the
.Dq "OpenFabrics Enterprise Distribution"
-Infiniband software stack, including kernel modules and userspace libraries.
+InfiniBand software stack, including kernel modules and userspace libraries.
diff --git a/tools/build/options/WITHOUT_OPENMP b/tools/build/options/WITHOUT_OPENMP
index f7474b698fe8..65fe9f21f67d 100644
--- a/tools/build/options/WITHOUT_OPENMP
+++ b/tools/build/options/WITHOUT_OPENMP
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build LLVM's OpenMP runtime.
diff --git a/tools/build/options/WITHOUT_OPENSSH b/tools/build/options/WITHOUT_OPENSSH
index 7f13fb891b8c..a1f8f03a829b 100644
--- a/tools/build/options/WITHOUT_OPENSSH
+++ b/tools/build/options/WITHOUT_OPENSSH
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build OpenSSH.
diff --git a/tools/build/options/WITHOUT_OPENSSL b/tools/build/options/WITHOUT_OPENSSL
index 88cced32ade8..b5a41130ed43 100644
--- a/tools/build/options/WITHOUT_OPENSSL
+++ b/tools/build/options/WITHOUT_OPENSSL
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build OpenSSL.
diff --git a/tools/build/options/WITHOUT_PAM b/tools/build/options/WITHOUT_PAM
index a980bba139bf..37c399bb7a18 100644
--- a/tools/build/options/WITHOUT_PAM
+++ b/tools/build/options/WITHOUT_PAM
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build PAM library and modules.
.Bf -symbolic
This option is deprecated and does nothing.
diff --git a/tools/build/options/WITHOUT_PAM_SUPPORT b/tools/build/options/WITHOUT_PAM_SUPPORT
index 047f3719ea7f..323a83cf6192 100644
--- a/tools/build/options/WITHOUT_PAM_SUPPORT
+++ b/tools/build/options/WITHOUT_PAM_SUPPORT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build some programs without PAM support, particularly
.Xr ftpd 8
and
diff --git a/tools/build/options/WITHOUT_PF b/tools/build/options/WITHOUT_PF
index 6b23d559f19d..097b89b0d55e 100644
--- a/tools/build/options/WITHOUT_PF
+++ b/tools/build/options/WITHOUT_PF
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build PF firewall package.
diff --git a/tools/build/options/WITHOUT_PIE b/tools/build/options/WITHOUT_PIE
index 69cc4843587f..08d08c283e02 100644
--- a/tools/build/options/WITHOUT_PIE
+++ b/tools/build/options/WITHOUT_PIE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build dynamically linked binaries as
Position-Independent Executable (PIE).
diff --git a/tools/build/options/WITHOUT_PKGBOOTSTRAP b/tools/build/options/WITHOUT_PKGBOOTSTRAP
index 14bfcc05f14c..35a0f4fcf2a4 100644
--- a/tools/build/options/WITHOUT_PKGBOOTSTRAP
+++ b/tools/build/options/WITHOUT_PKGBOOTSTRAP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr pkg 7
bootstrap tool.
diff --git a/tools/build/options/WITHOUT_PMC b/tools/build/options/WITHOUT_PMC
index c8027bf3a3d3..a5f14731b1a3 100644
--- a/tools/build/options/WITHOUT_PMC
+++ b/tools/build/options/WITHOUT_PMC
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr pmccontrol 8
and related programs.
diff --git a/tools/build/options/WITHOUT_PORTSNAP b/tools/build/options/WITHOUT_PORTSNAP
deleted file mode 100644
index 8b023fd65251..000000000000
--- a/tools/build/options/WITHOUT_PORTSNAP
+++ /dev/null
@@ -1,4 +0,0 @@
-.\" $FreeBSD$
-Do not build or install
-.Xr portsnap 8
-and related files.
diff --git a/tools/build/options/WITHOUT_PPP b/tools/build/options/WITHOUT_PPP
index ce7161243bff..7610634abe0f 100644
--- a/tools/build/options/WITHOUT_PPP
+++ b/tools/build/options/WITHOUT_PPP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr ppp 8
and related programs.
diff --git a/tools/build/options/WITHOUT_PROFILE b/tools/build/options/WITHOUT_PROFILE
index 7fdb12c94cdd..6d543e6241a4 100644
--- a/tools/build/options/WITHOUT_PROFILE
+++ b/tools/build/options/WITHOUT_PROFILE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build profiled libraries for use with
.Xr gprof 8 .
diff --git a/tools/build/options/WITHOUT_PTHREADS_ASSERTIONS b/tools/build/options/WITHOUT_PTHREADS_ASSERTIONS
new file mode 100644
index 000000000000..b0961fa43cb6
--- /dev/null
+++ b/tools/build/options/WITHOUT_PTHREADS_ASSERTIONS
@@ -0,0 +1 @@
+Disable debugging assertions in pthreads library.
diff --git a/tools/build/options/WITHOUT_QUOTAS b/tools/build/options/WITHOUT_QUOTAS
index a79bf5dd839a..1914ee676d02 100644
--- a/tools/build/options/WITHOUT_QUOTAS
+++ b/tools/build/options/WITHOUT_QUOTAS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr quota 1
and related programs.
diff --git a/tools/build/options/WITHOUT_RADIUS_SUPPORT b/tools/build/options/WITHOUT_RADIUS_SUPPORT
index 6d1a97de1baa..4b203a7af23d 100644
--- a/tools/build/options/WITHOUT_RADIUS_SUPPORT
+++ b/tools/build/options/WITHOUT_RADIUS_SUPPORT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build radius support into various applications, like
.Xr pam_radius 8
and
diff --git a/tools/build/options/WITHOUT_RBOOTD b/tools/build/options/WITHOUT_RBOOTD
index fd331607328d..4f4b38747ec7 100644
--- a/tools/build/options/WITHOUT_RBOOTD
+++ b/tools/build/options/WITHOUT_RBOOTD
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build or install
.Xr rbootd 8 .
diff --git a/tools/build/options/WITHOUT_REPRODUCIBLE_BUILD b/tools/build/options/WITHOUT_REPRODUCIBLE_BUILD
index b858e389fee4..feabaed77fb1 100644
--- a/tools/build/options/WITHOUT_REPRODUCIBLE_BUILD
+++ b/tools/build/options/WITHOUT_REPRODUCIBLE_BUILD
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Include build metadata (such as the build time, user, and host)
in the kernel, boot loaders, and uname output.
Successive builds will not be bit-for-bit identical.
diff --git a/tools/build/options/WITHOUT_RESCUE b/tools/build/options/WITHOUT_RESCUE
index 9b71cd0de3f2..5a6e80c3d733 100644
--- a/tools/build/options/WITHOUT_RESCUE
+++ b/tools/build/options/WITHOUT_RESCUE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
.Xr rescue 8 .
diff --git a/tools/build/options/WITHOUT_RETPOLINE b/tools/build/options/WITHOUT_RETPOLINE
index 693cce921be1..f918e88294dd 100644
--- a/tools/build/options/WITHOUT_RETPOLINE
+++ b/tools/build/options/WITHOUT_RETPOLINE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build the base system with the retpoline speculative execution
vulnerability mitigation.
diff --git a/tools/build/options/WITHOUT_ROUTED b/tools/build/options/WITHOUT_ROUTED
index 199c1cd85ddf..e388acf795a4 100644
--- a/tools/build/options/WITHOUT_ROUTED
+++ b/tools/build/options/WITHOUT_ROUTED
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr routed 8
utility.
diff --git a/tools/build/options/WITHOUT_SCTP_SUPPORT b/tools/build/options/WITHOUT_SCTP_SUPPORT
new file mode 100644
index 000000000000..0829dbeca49d
--- /dev/null
+++ b/tools/build/options/WITHOUT_SCTP_SUPPORT
@@ -0,0 +1,4 @@
+Disable support in the kernel for the
+.Xr sctp 4
+Stream Control Transmission Protocol
+loadable kernel module.
diff --git a/tools/build/options/WITHOUT_SENDMAIL b/tools/build/options/WITHOUT_SENDMAIL
index db99666a2696..ef93e3ae7d2b 100644
--- a/tools/build/options/WITHOUT_SENDMAIL
+++ b/tools/build/options/WITHOUT_SENDMAIL
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr sendmail 8
and related programs.
diff --git a/tools/build/options/WITHOUT_SERVICESDB b/tools/build/options/WITHOUT_SERVICESDB
index c603ec0ba123..fc0e76d8a0a1 100644
--- a/tools/build/options/WITHOUT_SERVICESDB
+++ b/tools/build/options/WITHOUT_SERVICESDB
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not install
.Pa /var/db/services.db .
diff --git a/tools/build/options/WITHOUT_SETUID_LOGIN b/tools/build/options/WITHOUT_SETUID_LOGIN
index af073b322947..e1e60432911b 100644
--- a/tools/build/options/WITHOUT_SETUID_LOGIN
+++ b/tools/build/options/WITHOUT_SETUID_LOGIN
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Set this to disable the installation of
.Xr login 1
as a set-user-ID root program.
diff --git a/tools/build/options/WITHOUT_SHAREDOCS b/tools/build/options/WITHOUT_SHAREDOCS
index 6b99e2a09984..b162e005ed5b 100644
--- a/tools/build/options/WITHOUT_SHAREDOCS
+++ b/tools/build/options/WITHOUT_SHAREDOCS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the
.Bx 4.4
legacy docs.
diff --git a/tools/build/options/WITHOUT_SHARED_TOOLCHAIN b/tools/build/options/WITHOUT_SHARED_TOOLCHAIN
deleted file mode 100644
index 86e309028c21..000000000000
--- a/tools/build/options/WITHOUT_SHARED_TOOLCHAIN
+++ /dev/null
@@ -1,6 +0,0 @@
-.\" $FreeBSD$
-Build the toolchain binaries as statically linked executables.
-The set includes
-.Xr cc 1 ,
-.Xr make 1
-and necessary utilities like assembler, linker and library archive manager.
diff --git a/tools/build/options/WITHOUT_SOURCELESS b/tools/build/options/WITHOUT_SOURCELESS
index 18bf0fc91a42..e60af5c6049e 100644
--- a/tools/build/options/WITHOUT_SOURCELESS
+++ b/tools/build/options/WITHOUT_SOURCELESS
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build kernel modules that include sourceless code (either microcode or native code for host CPU).
diff --git a/tools/build/options/WITHOUT_SOURCELESS_HOST b/tools/build/options/WITHOUT_SOURCELESS_HOST
index 26e043fc11e5..d79198407f93 100644
--- a/tools/build/options/WITHOUT_SOURCELESS_HOST
+++ b/tools/build/options/WITHOUT_SOURCELESS_HOST
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build kernel modules that include sourceless native code for host CPU.
diff --git a/tools/build/options/WITHOUT_SOURCELESS_UCODE b/tools/build/options/WITHOUT_SOURCELESS_UCODE
index c05e76f74fa6..f92bcadf3f03 100644
--- a/tools/build/options/WITHOUT_SOURCELESS_UCODE
+++ b/tools/build/options/WITHOUT_SOURCELESS_UCODE
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build kernel modules that include sourceless microcode.
diff --git a/tools/build/options/WITHOUT_SSP b/tools/build/options/WITHOUT_SSP
index 7f9dac0d7620..160da71bf9c2 100644
--- a/tools/build/options/WITHOUT_SSP
+++ b/tools/build/options/WITHOUT_SSP
@@ -1,2 +1,4 @@
-.\" $FreeBSD$
-Do not build world with propolice stack smashing protection.
+Do not build world with stack smashing protection.
+See
+.Xr mitigations 7
+for more information.
diff --git a/tools/build/options/WITHOUT_STATS b/tools/build/options/WITHOUT_STATS
index 9f741abeab3f..3ab566e21b77 100644
--- a/tools/build/options/WITHOUT_STATS
+++ b/tools/build/options/WITHOUT_STATS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Neither build nor install
.Lb libstats
and dependent binaries.
diff --git a/tools/build/options/WITHOUT_SYSCONS b/tools/build/options/WITHOUT_SYSCONS
index 5bb435a0653b..6da49cda50d8 100644
--- a/tools/build/options/WITHOUT_SYSCONS
+++ b/tools/build/options/WITHOUT_SYSCONS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr syscons 4
support files such as keyboard maps, fonts, and screen output maps.
diff --git a/tools/build/options/WITHOUT_SYSTEM_COMPILER b/tools/build/options/WITHOUT_SYSTEM_COMPILER
index 0bcf771e572b..c70ea201b9d7 100644
--- a/tools/build/options/WITHOUT_SYSTEM_COMPILER
+++ b/tools/build/options/WITHOUT_SYSTEM_COMPILER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not opportunistically skip building a cross-compiler during the
bootstrap phase of the build.
Normally, if the currently installed compiler matches the planned bootstrap
diff --git a/tools/build/options/WITHOUT_SYSTEM_LINKER b/tools/build/options/WITHOUT_SYSTEM_LINKER
index 4b9019dfefda..0af1a627b47d 100644
--- a/tools/build/options/WITHOUT_SYSTEM_LINKER
+++ b/tools/build/options/WITHOUT_SYSTEM_LINKER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not opportunistically skip building a cross-linker during the
bootstrap phase of the build.
Normally, if the currently installed linker matches the planned bootstrap
diff --git a/tools/build/options/WITHOUT_TALK b/tools/build/options/WITHOUT_TALK
index 21d103bde0c1..894fabf59d07 100644
--- a/tools/build/options/WITHOUT_TALK
+++ b/tools/build/options/WITHOUT_TALK
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build or install
.Xr talk 1
and
diff --git a/tools/build/options/WITHOUT_TCP_WRAPPERS b/tools/build/options/WITHOUT_TCP_WRAPPERS
index e63d5b3bb7fb..b30a17f65af4 100644
--- a/tools/build/options/WITHOUT_TCP_WRAPPERS
+++ b/tools/build/options/WITHOUT_TCP_WRAPPERS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build or install
.Xr tcpd 8 ,
and related utilities.
diff --git a/tools/build/options/WITHOUT_TCSH b/tools/build/options/WITHOUT_TCSH
index 96aa699012e9..6041c141e723 100644
--- a/tools/build/options/WITHOUT_TCSH
+++ b/tools/build/options/WITHOUT_TCSH
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build and install
.Pa /bin/csh
(which is
diff --git a/tools/build/options/WITHOUT_TELNET b/tools/build/options/WITHOUT_TELNET
index d08f84d96b1c..323d20398458 100644
--- a/tools/build/options/WITHOUT_TELNET
+++ b/tools/build/options/WITHOUT_TELNET
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr telnet 1
and related programs.
diff --git a/tools/build/options/WITHOUT_TESTS b/tools/build/options/WITHOUT_TESTS
index ed90ff41584c..e9b7e4ec1bb0 100644
--- a/tools/build/options/WITHOUT_TESTS
+++ b/tools/build/options/WITHOUT_TESTS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build nor install the
.Fx
Test Suite in
diff --git a/tools/build/options/WITHOUT_TESTS_SUPPORT b/tools/build/options/WITHOUT_TESTS_SUPPORT
index cd86942ad9e3..35c331dbd1de 100644
--- a/tools/build/options/WITHOUT_TESTS_SUPPORT
+++ b/tools/build/options/WITHOUT_TESTS_SUPPORT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Disable the build of all test-related dependencies, including ATF.
diff --git a/tools/build/options/WITHOUT_TEXTPROC b/tools/build/options/WITHOUT_TEXTPROC
index 7797d997fb5d..e8e60bb9d7d9 100644
--- a/tools/build/options/WITHOUT_TEXTPROC
+++ b/tools/build/options/WITHOUT_TEXTPROC
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Do not build
programs used for text processing.
diff --git a/tools/build/options/WITHOUT_TFTP b/tools/build/options/WITHOUT_TFTP
index a64128ec4b2e..59a8158f0ce1 100644
--- a/tools/build/options/WITHOUT_TFTP
+++ b/tools/build/options/WITHOUT_TFTP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build or install
.Xr tftp 1
and
diff --git a/tools/build/options/WITHOUT_TOOLCHAIN b/tools/build/options/WITHOUT_TOOLCHAIN
index 57deb32a51f7..7445b3f45ba5 100644
--- a/tools/build/options/WITHOUT_TOOLCHAIN
+++ b/tools/build/options/WITHOUT_TOOLCHAIN
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
-Do not install header or
+Do not install
programs used for program development,
compilers, debuggers etc.
diff --git a/tools/build/options/WITHOUT_UNBOUND b/tools/build/options/WITHOUT_UNBOUND
index 10c2e85616ae..ec4be1c1d0b4 100644
--- a/tools/build/options/WITHOUT_UNBOUND
+++ b/tools/build/options/WITHOUT_UNBOUND
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr unbound 8
and related programs.
diff --git a/tools/build/options/WITHOUT_UNIFIED_OBJDIR b/tools/build/options/WITHOUT_UNIFIED_OBJDIR
index c20a96aeaea3..1214c1e24d9d 100644
--- a/tools/build/options/WITHOUT_UNIFIED_OBJDIR
+++ b/tools/build/options/WITHOUT_UNIFIED_OBJDIR
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Use the historical object directory format for
.Xr build 7
targets.
diff --git a/tools/build/options/WITHOUT_USB b/tools/build/options/WITHOUT_USB
index 37308951226b..80a61453124a 100644
--- a/tools/build/options/WITHOUT_USB
+++ b/tools/build/options/WITHOUT_USB
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build USB-related programs and libraries.
diff --git a/tools/build/options/WITHOUT_USB_GADGET_EXAMPLES b/tools/build/options/WITHOUT_USB_GADGET_EXAMPLES
index d8b54b061177..d535ab1f2f0d 100644
--- a/tools/build/options/WITHOUT_USB_GADGET_EXAMPLES
+++ b/tools/build/options/WITHOUT_USB_GADGET_EXAMPLES
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build USB gadget kernel modules.
diff --git a/tools/build/options/WITHOUT_UTMPX b/tools/build/options/WITHOUT_UTMPX
index eb2f378fef68..e0c122824aa7 100644
--- a/tools/build/options/WITHOUT_UTMPX
+++ b/tools/build/options/WITHOUT_UTMPX
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build user accounting tools such as
.Xr last 1 ,
.Xr users 1 ,
diff --git a/tools/build/options/WITHOUT_VI b/tools/build/options/WITHOUT_VI
index 19b2df6935b3..0d8af3e0deaa 100644
--- a/tools/build/options/WITHOUT_VI
+++ b/tools/build/options/WITHOUT_VI
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build and install vi, view, ex and related programs.
diff --git a/tools/build/options/WITHOUT_VT b/tools/build/options/WITHOUT_VT
index c07a9e56f0e0..120a21dfa743 100644
--- a/tools/build/options/WITHOUT_VT
+++ b/tools/build/options/WITHOUT_VT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build
.Xr vt 4
support files (fonts and keymaps).
diff --git a/tools/build/options/WITHOUT_WARNS b/tools/build/options/WITHOUT_WARNS
index a0c1339e7dc4..a5a1126a6a82 100644
--- a/tools/build/options/WITHOUT_WARNS
+++ b/tools/build/options/WITHOUT_WARNS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Set this to not add warning flags to the compiler invocations.
Useful as a temporary workaround when code enters the tree
which triggers warnings in environments that differ from the
diff --git a/tools/build/options/WITHOUT_WERROR b/tools/build/options/WITHOUT_WERROR
index 84a4c6b06967..9c4580b5c38c 100644
--- a/tools/build/options/WITHOUT_WERROR
+++ b/tools/build/options/WITHOUT_WERROR
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Set this to not treat compiler warnings as errors.
Useful as a temporary workaround when working on fixing compiler warnings.
When set, warnings are still printed in the build log but do not fail the build.
diff --git a/tools/build/options/WITHOUT_WIRELESS b/tools/build/options/WITHOUT_WIRELESS
index 7eae3735c8e6..435e6ee4ec25 100644
--- a/tools/build/options/WITHOUT_WIRELESS
+++ b/tools/build/options/WITHOUT_WIRELESS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build programs used for 802.11 wireless networks; especially
.Xr wpa_supplicant 8
and
diff --git a/tools/build/options/WITHOUT_WIRELESS_SUPPORT b/tools/build/options/WITHOUT_WIRELESS_SUPPORT
index 1d07092e10d7..85fed614e8f7 100644
--- a/tools/build/options/WITHOUT_WIRELESS_SUPPORT
+++ b/tools/build/options/WITHOUT_WIRELESS_SUPPORT
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build libraries, programs, and kernel modules without
802.11 wireless support.
diff --git a/tools/build/options/WITHOUT_WPA_SUPPLICANT_EAPOL b/tools/build/options/WITHOUT_WPA_SUPPLICANT_EAPOL
index d895ef93127d..77a3f163d285 100644
--- a/tools/build/options/WITHOUT_WPA_SUPPLICANT_EAPOL
+++ b/tools/build/options/WITHOUT_WPA_SUPPLICANT_EAPOL
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build
.Xr wpa_supplicant 8
without support for the IEEE 802.1X protocol and without
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 b/tools/build/options/WITHOUT_ZFS
index 11605eb6fcab..5598293f102e 100644
--- a/tools/build/options/WITHOUT_ZFS
+++ b/tools/build/options/WITHOUT_ZFS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Do not build the ZFS file system kernel module, libraries such as
.Xr libbe 3 ,
and user commands such as
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/WITHOUT_ZONEINFO b/tools/build/options/WITHOUT_ZONEINFO
index 647a10daf612..f6bc81da967b 100644
--- a/tools/build/options/WITHOUT_ZONEINFO
+++ b/tools/build/options/WITHOUT_ZONEINFO
@@ -1,2 +1 @@
-.\" $FreeBSD$
Do not build the timezone database.
diff --git a/tools/build/options/WITH_AUTO_OBJ b/tools/build/options/WITH_AUTO_OBJ
index 9f2e2db3617a..7765af40e40e 100644
--- a/tools/build/options/WITH_AUTO_OBJ
+++ b/tools/build/options/WITH_AUTO_OBJ
@@ -1,2 +1 @@
-.\" $FreeBSD$
Enable automatic creation of objdirs.
diff --git a/tools/build/options/WITH_BEARSSL b/tools/build/options/WITH_BEARSSL
index f576ea25dce4..ff443a20586a 100644
--- a/tools/build/options/WITH_BEARSSL
+++ b/tools/build/options/WITH_BEARSSL
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build the BearSSL library.
.Pp
BearSSL is a tiny SSL library suitable for embedded environments.
@@ -9,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_BHYVE_SNAPSHOT b/tools/build/options/WITH_BHYVE_SNAPSHOT
index 3f866d5fa69d..77a6c0031ddd 100644
--- a/tools/build/options/WITH_BHYVE_SNAPSHOT
+++ b/tools/build/options/WITH_BHYVE_SNAPSHOT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Include support for save and restore (snapshots) in
.Xr bhyve 8
and
diff --git a/tools/build/options/WITH_BIND_NOW b/tools/build/options/WITH_BIND_NOW
index a2d3ac7e7779..d9b137c9d8cc 100644
--- a/tools/build/options/WITH_BIND_NOW
+++ b/tools/build/options/WITH_BIND_NOW
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build all binaries with the
.Dv DF_BIND_NOW
flag set to indicate that the run-time loader should perform all relocation
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 88b20db606e2..9a5c2ce1cb80 100644
--- a/tools/build/options/WITH_CCACHE_BUILD
+++ b/tools/build/options/WITH_CCACHE_BUILD
@@ -1,14 +1,20 @@
-.\" $FreeBSD$
Use
.Xr ccache 1
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_CLANG b/tools/build/options/WITH_CLANG
index 44226e778c36..ad75329e8820 100644
--- a/tools/build/options/WITH_CLANG
+++ b/tools/build/options/WITH_CLANG
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build the Clang C/C++ compiler during the normal phase of the build.
diff --git a/tools/build/options/WITH_CLANG_BOOTSTRAP b/tools/build/options/WITH_CLANG_BOOTSTRAP
index 0dfeaf9009be..8c1182d427ab 100644
--- a/tools/build/options/WITH_CLANG_BOOTSTRAP
+++ b/tools/build/options/WITH_CLANG_BOOTSTRAP
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build the Clang C/C++ compiler during the bootstrap phase of the build.
diff --git a/tools/build/options/WITH_CLANG_EXTRAS b/tools/build/options/WITH_CLANG_EXTRAS
index 389c994f086a..ea6d41c45f27 100644
--- a/tools/build/options/WITH_CLANG_EXTRAS
+++ b/tools/build/options/WITH_CLANG_EXTRAS
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build additional clang and llvm tools, such as bugpoint and
clang-format.
diff --git a/tools/build/options/WITH_CLANG_FORMAT b/tools/build/options/WITH_CLANG_FORMAT
index 24316a6e2e27..e08dc7e66ac1 100644
--- a/tools/build/options/WITH_CLANG_FORMAT
+++ b/tools/build/options/WITH_CLANG_FORMAT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build clang-format.
diff --git a/tools/build/options/WITH_CLANG_FULL b/tools/build/options/WITH_CLANG_FULL
index 3e78ad904e74..72d29c94009c 100644
--- a/tools/build/options/WITH_CLANG_FULL
+++ b/tools/build/options/WITH_CLANG_FULL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build the ARCMigrate, Rewriter and StaticAnalyzer components of the
Clang C/C++ compiler.
diff --git a/tools/build/options/WITH_CLANG_IS_CC b/tools/build/options/WITH_CLANG_IS_CC
deleted file mode 100644
index 9ab78c569dd2..000000000000
--- a/tools/build/options/WITH_CLANG_IS_CC
+++ /dev/null
@@ -1,6 +0,0 @@
-.\" $FreeBSD$
-Install links to the Clang C/C++ compiler as
-.Pa /usr/bin/cc ,
-.Pa /usr/bin/c++
-and
-.Pa /usr/bin/cpp .
diff --git a/tools/build/options/WITH_CLEAN b/tools/build/options/WITH_CLEAN
new file mode 100644
index 000000000000..0bb05e33371b
--- /dev/null
+++ b/tools/build/options/WITH_CLEAN
@@ -0,0 +1,4 @@
+Clean before building world and/or kernel.
+Note that recording a new epoch in
+.Pa .clean_build_epoch
+in the root of the source tree will also force a clean world build.
diff --git a/tools/build/options/WITH_CTF b/tools/build/options/WITH_CTF
index a5d2f2c02922..a8a7ebac68f9 100644
--- a/tools/build/options/WITH_CTF
+++ b/tools/build/options/WITH_CTF
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Compile with CTF (Compact C Type Format) data.
CTF data encapsulates a reduced form of debugging information
similar to DWARF and the venerable stabs and is required for DTrace.
diff --git a/tools/build/options/WITH_CXGBETOOL b/tools/build/options/WITH_CXGBETOOL
index 53c379a2af15..5fbc8b5be1fc 100644
--- a/tools/build/options/WITH_CXGBETOOL
+++ b/tools/build/options/WITH_CXGBETOOL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build
.Xr cxgbetool 8
diff --git a/tools/build/options/WITH_CXX b/tools/build/options/WITH_CXX
index 64d1b07b6f7f..ca71af977edc 100644
--- a/tools/build/options/WITH_CXX
+++ b/tools/build/options/WITH_CXX
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build C++ headers and runtime libraries.
diff --git a/tools/build/options/WITH_DEBUG_FILES b/tools/build/options/WITH_DEBUG_FILES
index 9f476ce422ef..608f66735545 100644
--- a/tools/build/options/WITH_DEBUG_FILES
+++ b/tools/build/options/WITH_DEBUG_FILES
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Strip debug info into a separate file for each executable binary
and shared library.
The debug files will be placed in a subdirectory of
diff --git a/tools/build/options/WITH_DETECT_TZ_CHANGES b/tools/build/options/WITH_DETECT_TZ_CHANGES
index 6a2d18473892..dfd30b06931b 100644
--- a/tools/build/options/WITH_DETECT_TZ_CHANGES
+++ b/tools/build/options/WITH_DETECT_TZ_CHANGES
@@ -1,2 +1 @@
-.\" $FreeBSD$
Make the time handling code detect changes to the timezone files.
diff --git a/tools/build/options/WITH_DIALOG b/tools/build/options/WITH_DIALOG
new file mode 100644
index 000000000000..8b473b22e21e
--- /dev/null
+++ b/tools/build/options/WITH_DIALOG
@@ -0,0 +1,6 @@
+Do build
+.Xr dialog 1 ,
+.Xr dialog 3 ,
+.Xr dpv 1 ,
+and
+.Xr dpv 3 .
diff --git a/tools/build/options/WITH_DIRDEPS_BUILD b/tools/build/options/WITH_DIRDEPS_BUILD
index 3086d136b580..18630d3d1dd1 100644
--- a/tools/build/options/WITH_DIRDEPS_BUILD
+++ b/tools/build/options/WITH_DIRDEPS_BUILD
@@ -1,5 +1,4 @@
-.\" $FreeBSD$
-This is an experimental build system.
+This is an alternate build system.
For details see
https://www.crufty.net/sjg/docs/freebsd-meta-mode.htm.
Build commands can be seen from the top-level with:
@@ -33,4 +32,11 @@ The build hides commands executed unless
is defined.
.Pp
Note that there is currently no mass install feature for this.
+This build is designed for producing packages, that can then be installed
+on a target system.
.Pp
+The implementation in
+.Fx
+is incomplete.
+Completion would require leaf directories for building each kernel
+and package so that their dependencies can be tracked.
diff --git a/tools/build/options/WITH_DIRDEPS_CACHE b/tools/build/options/WITH_DIRDEPS_CACHE
index e4fec026c7d3..82291fed1e96 100644
--- a/tools/build/options/WITH_DIRDEPS_CACHE
+++ b/tools/build/options/WITH_DIRDEPS_CACHE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Cache result of dirdeps.mk which can save significant time
for subsequent builds.
Depends on
diff --git a/tools/build/options/WITH_DISK_IMAGE_TOOLS_BOOTSTRAP b/tools/build/options/WITH_DISK_IMAGE_TOOLS_BOOTSTRAP
new file mode 100644
index 000000000000..5f5fba2ea0a2
--- /dev/null
+++ b/tools/build/options/WITH_DISK_IMAGE_TOOLS_BOOTSTRAP
@@ -0,0 +1,6 @@
+Build
+.Xr etdump 1 ,
+.Xr makefs 8
+and
+.Xr mkimg 1
+as bootstrap tools.
diff --git a/tools/build/options/WITH_DTRACE_ASAN b/tools/build/options/WITH_DTRACE_ASAN
new file mode 100644
index 000000000000..4240aee4b89b
--- /dev/null
+++ b/tools/build/options/WITH_DTRACE_ASAN
@@ -0,0 +1,4 @@
+Compile userspace DTrace code (libdtrace, dtrace(1), lockstat(1), plockstat(1))
+with address and undefined behavior sanitizers.
+Requires that Clang be used as the base system compiler
+and that the runtime support library is available.
diff --git a/tools/build/options/WITH_DTRACE_TESTS b/tools/build/options/WITH_DTRACE_TESTS
index 79c18167450e..0c84e310fd95 100644
--- a/tools/build/options/WITH_DTRACE_TESTS
+++ b/tools/build/options/WITH_DTRACE_TESTS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build and install the DTrace test suite in
.Pa /usr/tests/cddl/usr.sbin/dtrace .
This test suite is considered experimental on architectures other than
diff --git a/tools/build/options/WITH_EFI b/tools/build/options/WITH_EFI
index 99685733fdec..436f1954d592 100644
--- a/tools/build/options/WITH_EFI
+++ b/tools/build/options/WITH_EFI
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build
.Xr efivar 3
and
diff --git a/tools/build/options/WITH_EXPERIMENTAL b/tools/build/options/WITH_EXPERIMENTAL
index d854f2980dda..a5f41addee52 100644
--- a/tools/build/options/WITH_EXPERIMENTAL
+++ b/tools/build/options/WITH_EXPERIMENTAL
@@ -1,2 +1 @@
-.\" $FreeBSD$
Include experimental features in the build.
diff --git a/tools/build/options/WITH_EXTRA_TCP_STACKS b/tools/build/options/WITH_EXTRA_TCP_STACKS
deleted file mode 100644
index 03fec9881bc2..000000000000
--- a/tools/build/options/WITH_EXTRA_TCP_STACKS
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" $FreeBSD$
-Build extra TCP stack modules.
diff --git a/tools/build/options/WITH_FDT b/tools/build/options/WITH_FDT
index 63484d91221e..102c56be241d 100644
--- a/tools/build/options/WITH_FDT
+++ b/tools/build/options/WITH_FDT
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build Flattened Device Tree support as part of the base system.
This includes the device tree compiler (dtc) and libfdt support library.
diff --git a/tools/build/options/WITH_GCC b/tools/build/options/WITH_GCC
index d4dfc3d17291..c6b38f6b1bf5 100644
--- a/tools/build/options/WITH_GCC
+++ b/tools/build/options/WITH_GCC
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build and install gcc and g++.
This option is deprecated and will be removed before
.Fx 13 .
diff --git a/tools/build/options/WITH_GCC_BOOTSTRAP b/tools/build/options/WITH_GCC_BOOTSTRAP
index 2ba53112cd1c..90d5453d08c1 100644
--- a/tools/build/options/WITH_GCC_BOOTSTRAP
+++ b/tools/build/options/WITH_GCC_BOOTSTRAP
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build gcc and g++ as part of the bootstrap process.
This option is deprecated and will be removed before
.Fx 13 .
diff --git a/tools/build/options/WITH_GCOV b/tools/build/options/WITH_GCOV
index a9f3eb68a82b..a99e6df4161d 100644
--- a/tools/build/options/WITH_GCOV
+++ b/tools/build/options/WITH_GCOV
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build and install the GNU
.Xr gcov 1
tool.
diff --git a/tools/build/options/WITH_GDB b/tools/build/options/WITH_GDB
index f65058824794..effabf4f8ff0 100644
--- a/tools/build/options/WITH_GDB
+++ b/tools/build/options/WITH_GDB
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build
.Xr gdb 1 .
diff --git a/tools/build/options/WITH_GH_BC b/tools/build/options/WITH_GH_BC
index 9bc4445fe78f..e12092c03b99 100644
--- a/tools/build/options/WITH_GH_BC
+++ b/tools/build/options/WITH_GH_BC
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Install the enhanced
.Xr bc 1
and
diff --git a/tools/build/options/WITH_GNU_DIFF b/tools/build/options/WITH_GNU_DIFF
index 41827190aa94..cc7fbf25119a 100644
--- a/tools/build/options/WITH_GNU_DIFF
+++ b/tools/build/options/WITH_GNU_DIFF
@@ -1,3 +1,4 @@
-.\" $FreeBSD$
Build and install GNU
+.Xr diff3 1
+instead of BSD
.Xr diff3 1 .
diff --git a/tools/build/options/WITH_GOOGLETEST b/tools/build/options/WITH_GOOGLETEST
index 28a59d697bb7..53832de70619 100644
--- a/tools/build/options/WITH_GOOGLETEST
+++ b/tools/build/options/WITH_GOOGLETEST
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build and install
.Lb libgmock ,
.Lb libgtest ,
diff --git a/tools/build/options/WITH_HESIOD b/tools/build/options/WITH_HESIOD
index d42bde2f2aca..30eff2ddd4ef 100644
--- a/tools/build/options/WITH_HESIOD
+++ b/tools/build/options/WITH_HESIOD
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build Hesiod support.
diff --git a/tools/build/options/WITH_HYPERV b/tools/build/options/WITH_HYPERV
index 22d2728138d6..8cf3b5520422 100644
--- a/tools/build/options/WITH_HYPERV
+++ b/tools/build/options/WITH_HYPERV
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build or install HyperV utilities.
diff --git a/tools/build/options/WITH_INIT_ALL_PATTERN b/tools/build/options/WITH_INIT_ALL_PATTERN
deleted file mode 100644
index f84037cdbae4..000000000000
--- a/tools/build/options/WITH_INIT_ALL_PATTERN
+++ /dev/null
@@ -1,5 +0,0 @@
-.\" $FreeBSD$
-Build the base system or kernel with stack variables initialized to
-.Pq compiler defined
-debugging patterns on function entry.
-This option requires the clang compiler.
diff --git a/tools/build/options/WITH_INIT_ALL_ZERO b/tools/build/options/WITH_INIT_ALL_ZERO
deleted file mode 100644
index 046af704f268..000000000000
--- a/tools/build/options/WITH_INIT_ALL_ZERO
+++ /dev/null
@@ -1,4 +0,0 @@
-.\" $FreeBSD$
-Build the base system or kernel with stack variables initialized
-to zero on function entry.
-This option requires that the clang compiler be used.
diff --git a/tools/build/options/WITH_INSTALL_AS_USER b/tools/build/options/WITH_INSTALL_AS_USER
index 8e4a3f358429..9567b7162b2e 100644
--- a/tools/build/options/WITH_INSTALL_AS_USER
+++ b/tools/build/options/WITH_INSTALL_AS_USER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Make install targets succeed for non-root users by installing
files with owner and group attributes set to that of the user running
the
diff --git a/tools/build/options/WITH_KERNEL_BIN b/tools/build/options/WITH_KERNEL_BIN
new file mode 100644
index 000000000000..b5e008dbd6f0
--- /dev/null
+++ b/tools/build/options/WITH_KERNEL_BIN
@@ -0,0 +1,8 @@
+Generate and install kernel.bin from kernel as part of the normal build and
+install processes for the kernel. Available only on arm and arm64.
+
+Usually this will be added to the kernel config file with:
+
+makeoptions WITH_KERNEL_BIN=1
+
+though it can also be used on the command line.
diff --git a/tools/build/options/WITH_KERNEL_RETPOLINE b/tools/build/options/WITH_KERNEL_RETPOLINE
index 6d101d82593f..c682e5594470 100644
--- a/tools/build/options/WITH_KERNEL_RETPOLINE
+++ b/tools/build/options/WITH_KERNEL_RETPOLINE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Enable the "retpoline" mitigation for CVE-2017-5715 in the kernel
build.
diff --git a/tools/build/options/WITH_LIB32 b/tools/build/options/WITH_LIB32
new file mode 100644
index 000000000000..3c621483a60d
--- /dev/null
+++ b/tools/build/options/WITH_LIB32
@@ -0,0 +1,3 @@
+On 64-bit platforms, build the 32-bit library set and a
+.Nm ld-elf32.so.1
+runtime linker.
diff --git a/tools/build/options/WITH_LIBSOFT b/tools/build/options/WITH_LIBSOFT
index 81c66bdc700f..6fec6f3cb037 100644
--- a/tools/build/options/WITH_LIBSOFT
+++ b/tools/build/options/WITH_LIBSOFT
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
On armv6 only, enable soft float ABI compatibility libraries.
This option is for transitioning to the new hard float ABI.
diff --git a/tools/build/options/WITH_LLD b/tools/build/options/WITH_LLD
index fa863fbb18af..88bdcc34c49b 100644
--- a/tools/build/options/WITH_LLD
+++ b/tools/build/options/WITH_LLD
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build LLVM's lld linker.
diff --git a/tools/build/options/WITH_LLDB b/tools/build/options/WITH_LLDB
index b0287e08f69a..16e4b26f0239 100644
--- a/tools/build/options/WITH_LLDB
+++ b/tools/build/options/WITH_LLDB
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build the LLDB debugger.
diff --git a/tools/build/options/WITH_LLD_BOOTSTRAP b/tools/build/options/WITH_LLD_BOOTSTRAP
index 6539bb8a9779..87e333a6d6d7 100644
--- a/tools/build/options/WITH_LLD_BOOTSTRAP
+++ b/tools/build/options/WITH_LLD_BOOTSTRAP
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build the LLD linker during the bootstrap phase of the build,
and use it during buildworld and buildkernel.
diff --git a/tools/build/options/WITH_LLD_IS_LD b/tools/build/options/WITH_LLD_IS_LD
deleted file mode 100644
index 05f9c1d6ffe3..000000000000
--- a/tools/build/options/WITH_LLD_IS_LD
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" $FreeBSD$
-Use LLVM's LLD as the system linker.
diff --git a/tools/build/options/WITH_LLVM_ASSERTIONS b/tools/build/options/WITH_LLVM_ASSERTIONS
index 26f20a3827b3..0e7fbfbda0a3 100644
--- a/tools/build/options/WITH_LLVM_ASSERTIONS
+++ b/tools/build/options/WITH_LLVM_ASSERTIONS
@@ -1,2 +1 @@
-.\" $FreeBSD$
Enable debugging assertions in LLVM.
diff --git a/tools/build/options/WITH_LLVM_BINUTILS b/tools/build/options/WITH_LLVM_BINUTILS
index 8fa2c55f31a9..164e6e8ffabd 100644
--- a/tools/build/options/WITH_LLVM_BINUTILS
+++ b/tools/build/options/WITH_LLVM_BINUTILS
@@ -1,2 +1,18 @@
-.\" $FreeBSD$
-Install LLVM's binutils (ar, addr2line, nm, etc.) instead of ELF Tool Chain's.
+Install LLVM's binutils (without an llvm- prefix),
+instead of ELF Tool Chain's tools.
+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/WITH_LLVM_COV b/tools/build/options/WITH_LLVM_COV
index 046199d81c35..8cfe078ee231 100644
--- a/tools/build/options/WITH_LLVM_COV
+++ b/tools/build/options/WITH_LLVM_COV
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build the
.Xr llvm-cov 1
tool.
diff --git a/tools/build/options/WITH_LLVM_CXXFILT b/tools/build/options/WITH_LLVM_CXXFILT
index e80c0e9c1f35..f6ac38b20af7 100644
--- a/tools/build/options/WITH_LLVM_CXXFILT
+++ b/tools/build/options/WITH_LLVM_CXXFILT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Install LLVM's llvm-cxxfilt as c++filt, instead of ELF Tool Chain's cxxfilt.
diff --git a/tools/build/options/WITH_LLVM_FULL_DEBUGINFO b/tools/build/options/WITH_LLVM_FULL_DEBUGINFO
new file mode 100644
index 000000000000..4362de9eb762
--- /dev/null
+++ b/tools/build/options/WITH_LLVM_FULL_DEBUGINFO
@@ -0,0 +1,2 @@
+Generate full debug information for LLVM libraries and tools, which uses
+more disk space and build resources, but allows for easier debugging.
diff --git a/tools/build/options/WITH_LLVM_TARGET_AARCH64 b/tools/build/options/WITH_LLVM_TARGET_AARCH64
index a1b4a3e4999a..4761f687b839 100644
--- a/tools/build/options/WITH_LLVM_TARGET_AARCH64
+++ b/tools/build/options/WITH_LLVM_TARGET_AARCH64
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build LLVM target support for AArch64.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITH_LLVM_TARGET_ALL b/tools/build/options/WITH_LLVM_TARGET_ALL
index c2b744ece467..4345767b3350 100644
--- a/tools/build/options/WITH_LLVM_TARGET_ALL
+++ b/tools/build/options/WITH_LLVM_TARGET_ALL
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build support for all LLVM targets.
This option is always applied to the bootstrap compiler for buildworld when
LLVM is used.
diff --git a/tools/build/options/WITH_LLVM_TARGET_ARM b/tools/build/options/WITH_LLVM_TARGET_ARM
index 50bb47b9a104..5b2ef752ecda 100644
--- a/tools/build/options/WITH_LLVM_TARGET_ARM
+++ b/tools/build/options/WITH_LLVM_TARGET_ARM
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build LLVM target support for ARM.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITH_LLVM_TARGET_BPF b/tools/build/options/WITH_LLVM_TARGET_BPF
index 1c01641de5a1..664cc85a52b9 100644
--- a/tools/build/options/WITH_LLVM_TARGET_BPF
+++ b/tools/build/options/WITH_LLVM_TARGET_BPF
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build LLVM target support for BPF.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITH_LLVM_TARGET_MIPS b/tools/build/options/WITH_LLVM_TARGET_MIPS
index 2f625a5ede4b..4cc2a85cd34c 100644
--- a/tools/build/options/WITH_LLVM_TARGET_MIPS
+++ b/tools/build/options/WITH_LLVM_TARGET_MIPS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build LLVM target support for MIPS.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITH_LLVM_TARGET_POWERPC b/tools/build/options/WITH_LLVM_TARGET_POWERPC
index 6c513e6cf20d..0ba82d255b8b 100644
--- a/tools/build/options/WITH_LLVM_TARGET_POWERPC
+++ b/tools/build/options/WITH_LLVM_TARGET_POWERPC
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build LLVM target support for PowerPC.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITH_LLVM_TARGET_RISCV b/tools/build/options/WITH_LLVM_TARGET_RISCV
index 6aa100ac010b..1ad61b787b33 100644
--- a/tools/build/options/WITH_LLVM_TARGET_RISCV
+++ b/tools/build/options/WITH_LLVM_TARGET_RISCV
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build LLVM target support for RISC-V.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITH_LLVM_TARGET_SPARC b/tools/build/options/WITH_LLVM_TARGET_SPARC
deleted file mode 100644
index d0590c570f40..000000000000
--- a/tools/build/options/WITH_LLVM_TARGET_SPARC
+++ /dev/null
@@ -1,5 +0,0 @@
-.\" $FreeBSD$
-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_LLVM_TARGET_X86 b/tools/build/options/WITH_LLVM_TARGET_X86
index 48886740d414..2b7c2aff945a 100644
--- a/tools/build/options/WITH_LLVM_TARGET_X86
+++ b/tools/build/options/WITH_LLVM_TARGET_X86
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build LLVM target support for X86.
The
.Va LLVM_TARGET_ALL
diff --git a/tools/build/options/WITH_LOADER_EFI_SECUREBOOT b/tools/build/options/WITH_LOADER_EFI_SECUREBOOT
index 501f673dea68..08c7dc774b31 100644
--- a/tools/build/options/WITH_LOADER_EFI_SECUREBOOT
+++ b/tools/build/options/WITH_LOADER_EFI_SECUREBOOT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Enable building
.Xr loader 8
with support for verification based on certificates obtained from UEFI.
diff --git a/tools/build/options/WITH_LOADER_FIREWIRE b/tools/build/options/WITH_LOADER_FIREWIRE
deleted file mode 100644
index 0204357f4345..000000000000
--- a/tools/build/options/WITH_LOADER_FIREWIRE
+++ /dev/null
@@ -1,3 +0,0 @@
-.\" $FreeBSD$
-Enable firewire support in /boot/loader on x86.
-This option is a nop on all other platforms.
diff --git a/tools/build/options/WITH_LOADER_GELI b/tools/build/options/WITH_LOADER_GELI
index cf588dba70f3..e6a5f10112bd 100644
--- a/tools/build/options/WITH_LOADER_GELI
+++ b/tools/build/options/WITH_LOADER_GELI
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build GELI bootloader support.
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_LUA b/tools/build/options/WITH_LOADER_LUA
index a20cf237af63..08e996d8d494 100644
--- a/tools/build/options/WITH_LOADER_LUA
+++ b/tools/build/options/WITH_LOADER_LUA
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build LUA bindings for the boot loader.
diff --git a/tools/build/options/WITH_LOADER_OFW b/tools/build/options/WITH_LOADER_OFW
index b050c06406f9..d6912709b690 100644
--- a/tools/build/options/WITH_LOADER_OFW
+++ b/tools/build/options/WITH_LOADER_OFW
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build openfirmware bootloader components.
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_UBOOT b/tools/build/options/WITH_LOADER_UBOOT
index 0750d635e495..437f452960f8 100644
--- a/tools/build/options/WITH_LOADER_UBOOT
+++ b/tools/build/options/WITH_LOADER_UBOOT
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build ubldr.
diff --git a/tools/build/options/WITH_LOADER_VERBOSE b/tools/build/options/WITH_LOADER_VERBOSE
index 8c6064d86180..b06f88dce33e 100644
--- a/tools/build/options/WITH_LOADER_VERBOSE
+++ b/tools/build/options/WITH_LOADER_VERBOSE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build with extra verbose debugging in the loader.
May explode already nearly too large loader over the limit.
Use with care.
diff --git a/tools/build/options/WITH_LOADER_VERIEXEC b/tools/build/options/WITH_LOADER_VERIEXEC
index e44732075525..d784df968949 100644
--- a/tools/build/options/WITH_LOADER_VERIEXEC
+++ b/tools/build/options/WITH_LOADER_VERIEXEC
@@ -1,7 +1,8 @@
-.\" $FreeBSD$
Enable building
.Xr loader 8
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_LOADER_VERIEXEC_PASS_MANIFEST b/tools/build/options/WITH_LOADER_VERIEXEC_PASS_MANIFEST
index 32dd8525e824..b0a7e8f30975 100644
--- a/tools/build/options/WITH_LOADER_VERIEXEC_PASS_MANIFEST
+++ b/tools/build/options/WITH_LOADER_VERIEXEC_PASS_MANIFEST
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Enable building
.Xr loader 8
with support to pass a verified manifest to the kernel.
diff --git a/tools/build/options/WITH_LOADER_VERIEXEC_VECTX b/tools/build/options/WITH_LOADER_VERIEXEC_VECTX
new file mode 100644
index 000000000000..b1fc6c815ed8
--- /dev/null
+++ b/tools/build/options/WITH_LOADER_VERIEXEC_VECTX
@@ -0,0 +1,7 @@
+Enable building
+.Xr loader 8
+with support for hashing and verifying kernel and modules as a side effect
+of loading.
+.Pp
+Depends on
+.Va WITH_LOADER_VERIEXEC .
diff --git a/tools/build/options/WITH_MALLOC_PRODUCTION b/tools/build/options/WITH_MALLOC_PRODUCTION
index ae24de10ee7c..ac267bdc48a6 100644
--- a/tools/build/options/WITH_MALLOC_PRODUCTION
+++ b/tools/build/options/WITH_MALLOC_PRODUCTION
@@ -1,4 +1,8 @@
-.\" $FreeBSD$
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_MANSPLITPKG b/tools/build/options/WITH_MANSPLITPKG
index be9280f90b61..3c04b590aade 100644
--- a/tools/build/options/WITH_MANSPLITPKG
+++ b/tools/build/options/WITH_MANSPLITPKG
@@ -1,2 +1 @@
-.\" $FreeBSD$
Split man pages into their own packages during make package.
diff --git a/tools/build/options/WITH_META_ERROR_TARGET b/tools/build/options/WITH_META_ERROR_TARGET
new file mode 100644
index 000000000000..25a7ea479e80
--- /dev/null
+++ b/tools/build/options/WITH_META_ERROR_TARGET
@@ -0,0 +1,13 @@
+Enable the META_MODE .ERROR target.
+.Pp
+This target will copy the meta file of a failed target
+to
+.Va ERROR_LOGDIR
+(default is
+.Ql ${SRCTOP:H}/error )
+to help with failure analysis.
+Depends on
+.Va WITH_META_MODE .
+This default when
+.Va WITH_DIRDEPS_BUILD
+is set.
diff --git a/tools/build/options/WITH_META_MODE b/tools/build/options/WITH_META_MODE
index a1c79b4ec6a2..a8a26e427f45 100644
--- a/tools/build/options/WITH_META_MODE
+++ b/tools/build/options/WITH_META_MODE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Create
.Xr make 1
meta files when building, which can provide a reliable incremental build when
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_MLX5TOOL b/tools/build/options/WITH_MLX5TOOL
index f0e45f321b47..2a6aea44bcfe 100644
--- a/tools/build/options/WITH_MLX5TOOL
+++ b/tools/build/options/WITH_MLX5TOOL
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build
.Xr mlx5tool 8
diff --git a/tools/build/options/WITH_MODULE_DRM b/tools/build/options/WITH_MODULE_DRM
index 0034dd6af550..bf74dd6d2a90 100644
--- a/tools/build/options/WITH_MODULE_DRM
+++ b/tools/build/options/WITH_MODULE_DRM
@@ -1,2 +1 @@
-.\" $FreeBSD$
Enable creation of old drm video modules.
diff --git a/tools/build/options/WITH_MODULE_DRM2 b/tools/build/options/WITH_MODULE_DRM2
index 68e304d48296..d7593a8d83ad 100644
--- a/tools/build/options/WITH_MODULE_DRM2
+++ b/tools/build/options/WITH_MODULE_DRM2
@@ -1,2 +1 @@
-.\" $FreeBSD$
Enable creation of old drm2 video modules.
diff --git a/tools/build/options/WITH_NETLINK b/tools/build/options/WITH_NETLINK
new file mode 100644
index 000000000000..a59f0650dc84
--- /dev/null
+++ b/tools/build/options/WITH_NETLINK
@@ -0,0 +1,3 @@
+Build the
+.Xr genl 1
+utility.
diff --git a/tools/build/options/WITH_NETLINK_SUPPORT b/tools/build/options/WITH_NETLINK_SUPPORT
new file mode 100644
index 000000000000..cf161db07218
--- /dev/null
+++ b/tools/build/options/WITH_NETLINK_SUPPORT
@@ -0,0 +1,4 @@
+Make libraries and programs use
+.Xr snl 3
+interfaces instead of rtsock and
+.Xr sysctl 3 .
diff --git a/tools/build/options/WITH_NVME b/tools/build/options/WITH_NVME
deleted file mode 100644
index 78814749cc78..000000000000
--- a/tools/build/options/WITH_NVME
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" $FreeBSD$
-Build nvme related tools and kernel modules.
diff --git a/tools/build/options/WITH_OFED b/tools/build/options/WITH_OFED
new file mode 100644
index 000000000000..5c978418f001
--- /dev/null
+++ b/tools/build/options/WITH_OFED
@@ -0,0 +1,3 @@
+Build the
+.Dq "OpenFabrics Enterprise Distribution"
+InfiniBand software stack, including kernel modules and userspace libraries.
diff --git a/tools/build/options/WITH_OFED_EXTRA b/tools/build/options/WITH_OFED_EXTRA
index ed3a9515bc8e..5c72c19ef799 100644
--- a/tools/build/options/WITH_OFED_EXTRA
+++ b/tools/build/options/WITH_OFED_EXTRA
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build the non-essential components of the
.Dq "OpenFabrics Enterprise Distribution"
Infiniband software stack, mostly examples.
diff --git a/tools/build/options/WITH_OPENLDAP b/tools/build/options/WITH_OPENLDAP
index c815e6160726..93c9b2c14269 100644
--- a/tools/build/options/WITH_OPENLDAP
+++ b/tools/build/options/WITH_OPENLDAP
@@ -1,2 +1 @@
-.\" $FreeBSD$
Enable building LDAP support for kerberos using an openldap client from ports.
diff --git a/tools/build/options/WITH_OPENMP b/tools/build/options/WITH_OPENMP
index 03158075daed..1219c46edce7 100644
--- a/tools/build/options/WITH_OPENMP
+++ b/tools/build/options/WITH_OPENMP
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build LLVM's OpenMP runtime.
diff --git a/tools/build/options/WITH_PIE b/tools/build/options/WITH_PIE
index c328a79e07cc..35430ef3d737 100644
--- a/tools/build/options/WITH_PIE
+++ b/tools/build/options/WITH_PIE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build dynamically linked binaries as
Position-Independent Executable (PIE).
diff --git a/tools/build/options/WITH_PROFILE b/tools/build/options/WITH_PROFILE
index 3445c82f946f..fa7a88e87d6a 100644
--- a/tools/build/options/WITH_PROFILE
+++ b/tools/build/options/WITH_PROFILE
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build profiled libraries for use with
.Xr gprof 8 .
This option is deprecated and may not be present in a future version of
diff --git a/tools/build/options/WITH_RATELIMIT b/tools/build/options/WITH_RATELIMIT
index 0566fadcf22e..fb42dd7817c7 100644
--- a/tools/build/options/WITH_RATELIMIT
+++ b/tools/build/options/WITH_RATELIMIT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build the system with rate limit support.
.Pp
This makes
diff --git a/tools/build/options/WITH_REPRODUCIBLE_BUILD b/tools/build/options/WITH_REPRODUCIBLE_BUILD
index 22a615593699..46080d9ffd28 100644
--- a/tools/build/options/WITH_REPRODUCIBLE_BUILD
+++ b/tools/build/options/WITH_REPRODUCIBLE_BUILD
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Exclude build metadata (such as the build time, user, or host)
from the kernel, boot loaders, and uname output, so that builds produce
bit-for-bit identical output.
diff --git a/tools/build/options/WITH_RETPOLINE b/tools/build/options/WITH_RETPOLINE
index aa0019edaee3..f8e42dd54ccc 100644
--- a/tools/build/options/WITH_RETPOLINE
+++ b/tools/build/options/WITH_RETPOLINE
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build the base system with the retpoline speculative execution
vulnerability mitigation for CVE-2017-5715.
diff --git a/tools/build/options/WITH_RPCBIND_WARMSTART_SUPPORT b/tools/build/options/WITH_RPCBIND_WARMSTART_SUPPORT
index be1e4d1a3b91..7eba885cdd39 100644
--- a/tools/build/options/WITH_RPCBIND_WARMSTART_SUPPORT
+++ b/tools/build/options/WITH_RPCBIND_WARMSTART_SUPPORT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build
.Xr rpcbind 8
with warmstart support.
diff --git a/tools/build/options/WITH_RUN_TESTS b/tools/build/options/WITH_RUN_TESTS
new file mode 100644
index 000000000000..91b30522a3d3
--- /dev/null
+++ b/tools/build/options/WITH_RUN_TESTS
@@ -0,0 +1 @@
+Run tests as part of the build.
diff --git a/tools/build/options/WITH_SENDMAIL b/tools/build/options/WITH_SENDMAIL
index ca399c968fe1..7c74b81f5b30 100644
--- a/tools/build/options/WITH_SENDMAIL
+++ b/tools/build/options/WITH_SENDMAIL
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build and install
.Xr sendmail 8
and related programs.
diff --git a/tools/build/options/WITH_SHARED_TOOLCHAIN b/tools/build/options/WITH_SHARED_TOOLCHAIN
deleted file mode 100644
index 12956c3ff933..000000000000
--- a/tools/build/options/WITH_SHARED_TOOLCHAIN
+++ /dev/null
@@ -1,6 +0,0 @@
-.\" $FreeBSD$
-Build the toolchain binaries as dynamically linked executables.
-The set includes
-.Xr cc 1 ,
-.Xr make 1
-and necessary utilities like assembler, linker and library archive manager.
diff --git a/tools/build/options/WITH_SORT_THREADS b/tools/build/options/WITH_SORT_THREADS
index 0aa579b4b29a..f687157b352e 100644
--- a/tools/build/options/WITH_SORT_THREADS
+++ b/tools/build/options/WITH_SORT_THREADS
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Enable threads in
.Xr sort 1 .
diff --git a/tools/build/options/WITH_SSP b/tools/build/options/WITH_SSP
index 2f0c2c06c9dc..910fdc9b3b1a 100644
--- a/tools/build/options/WITH_SSP
+++ b/tools/build/options/WITH_SSP
@@ -1,2 +1,4 @@
-.\" $FreeBSD$
-Build world with propolice stack smashing protection.
+Build world with stack smashing protection.
+See
+.Xr mitigations 7
+for more information.
diff --git a/tools/build/options/WITH_STAGING b/tools/build/options/WITH_STAGING
index e6bb304a5397..2ee71d1ea723 100644
--- a/tools/build/options/WITH_STAGING
+++ b/tools/build/options/WITH_STAGING
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Enable staging of files to a stage tree.
This can be best thought of as auto-install to
.Va DESTDIR
diff --git a/tools/build/options/WITH_STAGING_MAN b/tools/build/options/WITH_STAGING_MAN
index 5cd75abd98c2..5675c992ab67 100644
--- a/tools/build/options/WITH_STAGING_MAN
+++ b/tools/build/options/WITH_STAGING_MAN
@@ -1,2 +1 @@
-.\" $FreeBSD$
Enable staging of man pages to stage tree.
diff --git a/tools/build/options/WITH_STAGING_PROG b/tools/build/options/WITH_STAGING_PROG
index 2e401baac55f..716e08ff21af 100644
--- a/tools/build/options/WITH_STAGING_PROG
+++ b/tools/build/options/WITH_STAGING_PROG
@@ -1,2 +1 @@
-.\" $FreeBSD$
Enable staging of PROGs to stage tree.
diff --git a/tools/build/options/WITH_STALE_STAGED b/tools/build/options/WITH_STALE_STAGED
index 8bd874e5df98..2c80965809fe 100644
--- a/tools/build/options/WITH_STALE_STAGED
+++ b/tools/build/options/WITH_STALE_STAGED
@@ -1,2 +1 @@
-.\" $FreeBSD$
Check staged files are not stale.
diff --git a/tools/build/options/WITH_STATS b/tools/build/options/WITH_STATS
index 0ad24a169db2..2ab603935243 100644
--- a/tools/build/options/WITH_STATS
+++ b/tools/build/options/WITH_STATS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build and install
.Lb libstats
and dependent binaries.
diff --git a/tools/build/options/WITH_SYSROOT b/tools/build/options/WITH_SYSROOT
index 49a1f36320ec..4078a78cff44 100644
--- a/tools/build/options/WITH_SYSROOT
+++ b/tools/build/options/WITH_SYSROOT
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Enable use of sysroot during build.
Depends on
.Va WITH_DIRDEPS_BUILD .
diff --git a/tools/build/options/WITH_SYSTEM_COMPILER b/tools/build/options/WITH_SYSTEM_COMPILER
index 34818b8c9594..5dcb490b9d3c 100644
--- a/tools/build/options/WITH_SYSTEM_COMPILER
+++ b/tools/build/options/WITH_SYSTEM_COMPILER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Opportunistically skip building a cross-compiler during the
bootstrap phase of the build.
If the currently installed compiler matches the planned bootstrap compiler
diff --git a/tools/build/options/WITH_SYSTEM_LINKER b/tools/build/options/WITH_SYSTEM_LINKER
index 9313dc70e436..ea03c2f9105b 100644
--- a/tools/build/options/WITH_SYSTEM_LINKER
+++ b/tools/build/options/WITH_SYSTEM_LINKER
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Opportunistically skip building a cross-linker during the
bootstrap phase of the build.
If the currently installed linker matches the planned bootstrap linker
diff --git a/tools/build/options/WITH_TCP_WRAPPERS b/tools/build/options/WITH_TCP_WRAPPERS
index 8fd8e2aa6c56..f17e3a38a193 100644
--- a/tools/build/options/WITH_TCP_WRAPPERS
+++ b/tools/build/options/WITH_TCP_WRAPPERS
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Build and install
.Xr tcpd 8 ,
and related utilities.
diff --git a/tools/build/options/WITH_TOOLCHAIN b/tools/build/options/WITH_TOOLCHAIN
new file mode 100644
index 000000000000..62624bf9e28b
--- /dev/null
+++ b/tools/build/options/WITH_TOOLCHAIN
@@ -0,0 +1,2 @@
+Install programs used for software development such as
+compilers, debuggers, linkers etc.
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_UNIFIED_OBJDIR b/tools/build/options/WITH_UNIFIED_OBJDIR
index 8fe8229c597c..536b99eec9a5 100644
--- a/tools/build/options/WITH_UNIFIED_OBJDIR
+++ b/tools/build/options/WITH_UNIFIED_OBJDIR
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Use the unified object directory format for
.Xr build 7
targets.
diff --git a/tools/build/options/WITH_USB_GADGET_EXAMPLES b/tools/build/options/WITH_USB_GADGET_EXAMPLES
index 57e2c044c09d..f783c17e2dac 100644
--- a/tools/build/options/WITH_USB_GADGET_EXAMPLES
+++ b/tools/build/options/WITH_USB_GADGET_EXAMPLES
@@ -1,2 +1 @@
-.\" $FreeBSD$
Build USB gadget kernel modules.
diff --git a/tools/build/options/WITH_VERIEXEC b/tools/build/options/WITH_VERIEXEC
index 579209bcd17f..f0fc471a8f79 100644
--- a/tools/build/options/WITH_VERIEXEC
+++ b/tools/build/options/WITH_VERIEXEC
@@ -1,4 +1,3 @@
-.\" $FreeBSD$
Enable building
.Xr veriexec 8
which loads the contents of verified manifests into the kernel
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_ZFS b/tools/build/options/WITH_ZFS
new file mode 100644
index 000000000000..4b1aea6df534
--- /dev/null
+++ b/tools/build/options/WITH_ZFS
@@ -0,0 +1,3 @@
+Build the ZFS file system kernel module, libraries, and user commands.
+Also enable ZFS support in utilities and libraries which implement
+ZFS-specific functionality.
diff --git a/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT b/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
index efa830c7f2e2..32aadf6d46c9 100644
--- a/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
+++ b/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
@@ -1,2 +1,6 @@
-.\" $FreeBSD$
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/WITH_ZONEINFO_OLD_TIMEZONES_SUPPORT b/tools/build/options/WITH_ZONEINFO_OLD_TIMEZONES_SUPPORT
index 6d22fe1055a8..6cb2d5eb10d7 100644
--- a/tools/build/options/WITH_ZONEINFO_OLD_TIMEZONES_SUPPORT
+++ b/tools/build/options/WITH_ZONEINFO_OLD_TIMEZONES_SUPPORT
@@ -1,3 +1,2 @@
-.\" $FreeBSD$
Build backward compatibility timezone aliases in to the timezone
database.
diff --git a/tools/build/options/makeman b/tools/build/options/makeman
index 328b9faed881..ddd08443e61c 100755
--- a/tools/build/options/makeman
+++ b/tools/build/options/makeman
@@ -1,7 +1,6 @@
#!/bin/sh
#
# This file is in the public domain.
-# $FreeBSD$
#
# This script creates the src.conf.5 man page using template text contained
# herein and the contents of the WITH_* and WITHOUT_* files in the same
@@ -53,21 +52,32 @@ show_options()
__MAKE_CONF=/dev/null \
TARGET_ARCH=${target#*/} TARGET=${target%/*} |
while read var _ val ; do
- opt=${var#MK_}
- if [ $opt = "$prev_opt" ]; then
- echo "$target: ignoring duplicate option $opt" >&2
- continue
- fi
- prev_opt=$opt
- case ${val} in
- yes)
- echo ${opt} ${target}
+ case $var in
+ MK_*)
+ opt=${var#MK_}
+ if [ $opt = "$prev_opt" ]; then
+ echo "$target: ignoring duplicate option $opt" >&2
+ continue
+ fi
+ prev_opt=$opt
+ case ${val} in
+ yes)
+ echo ${opt} ${target}
+ ;;
+ no)
+ echo ${opt}
+ ;;
+ *)
+ echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
+ exit 1
+ ;;
+ esac
;;
- no)
- echo ${opt}
+ OPT_*)
+ # ignore
;;
*)
- echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
+ echo "make showconfig broken: ${var} ${_} ${val} not MK_ or OPT_" >&2
exit 1
;;
esac
@@ -117,19 +127,58 @@ show()
exit 1
;;
esac
+ requireds=$(env -i ${make} -f ${srcdir}/share/mk/src.opts.mk \
+ -V 'REQUIRED_OPTIONS:ts,')
env -i ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null \
SRCCONF=/dev/null |
while read var _ val ; do
- opt=${var#MK_}
- case ${val} in
- yes)
- echo ${yes_prefix}_${opt}
+ case ${var} in
+ MK_*)
+ opt=${var#MK_}
+ case ,${requireds}, in
+ *,${opt},*)
+ continue
+ ;;
+ esac
+ case ${val} in
+ yes)
+ echo ${yes_prefix}_${opt}
+ ;;
+ no)
+ echo ${no_prefix}_${opt}
+ ;;
+ *)
+ echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
+ exit 1
+ ;;
+ esac
;;
- no)
- echo ${no_prefix}_${opt}
+ OPT_*)
+ # ignore
;;
*)
- echo "make showconfig broken: ${var} ${_} ${val} (not yes or no)" >&2
+ echo "make showconfig broken: ${var} ${_} ${val} not MK_ or OPT_" >&2
+ exit 1
+ ;;
+ esac
+ done
+}
+
+show_group_options()
+{
+ env -i ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null \
+ SRCCONF=/dev/null |
+ while read var _ val ; do
+ case ${var} in
+ MK_*)
+ # ignore
+ ;;
+ OPT_*)
+ opt=${var#OPT_}
+ echo ${opt}
+ ;;
+ *)
+ echo "make showconfig broken: ${var} ${_} ${val} not MK_ or OPT_" >&2
exit 1
;;
esac
@@ -140,11 +189,9 @@ main()
{
echo "building src.conf.5 man page from files in ${PWD}" >&2
- fbsdid='$'FreeBSD'$'
- generated='@'generated
+ generated='@'generated
cat <<EOF
.\" DO NOT EDIT-- this file is $generated by tools/build/options/makeman.
-.\" ${fbsdid}
.Dd $(echo $(LC_TIME=C date +'%B %e, %Y'))
.Dt SRC.CONF 5
.Os
@@ -224,7 +271,11 @@ and
.Va MAKEOBJDIRPREFIX
as they are environment-only variables.
.Pp
-The values of variables are ignored regardless of their setting;
+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
@@ -319,7 +370,30 @@ EOF
;;
esac
- twiddle >&2
+ printf "." >&2
+ done
+ printf "\n" >&2
+ cat <<EOF
+.El
+.Pp
+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}
done
cat <<EOF
.El
@@ -345,13 +419,4 @@ This manual page was autogenerated by
EOF
}
-twiddle_pos=0
-twiddle()
-{
- local c0='|' c1='/' c2='-' c3='\'
-
- eval printf '%c\\b' '$c'${twiddle_pos}
- twiddle_pos=$(((twiddle_pos+1)%4))
-}
-
main
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/stat.h b/tools/build/stat.h
index 18d1460fcf67..1eeea36629b2 100644
--- a/tools/build/stat.h
+++ b/tools/build/stat.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _LEGACY_SYS_STAT_H_
diff --git a/tools/build/stdlib.h b/tools/build/stdlib.h
index 5f9b90bc3d50..87d54c722144 100644
--- a/tools/build/stdlib.h
+++ b/tools/build/stdlib.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _LEGACY_STDLIB_H_
diff --git a/tools/build/strings.h b/tools/build/strings.h
index 5dfb9596aaf6..0c5c5639ae54 100644
--- a/tools/build/strings.h
+++ b/tools/build/strings.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _LEGACY_STRINGS_H_
diff --git a/tools/build/test-includes/Makefile b/tools/build/test-includes/Makefile
index 174c4341331c..5c45fd7daa4f 100644
--- a/tools/build/test-includes/Makefile
+++ b/tools/build/test-includes/Makefile
@@ -22,6 +22,13 @@ NO_PIC= yes
# Some files have to be clean for extra defines too...
CFLAGS.event.c= -D_WANT_KEVENT32 -D_WANT_FREEBSD11_KEVENT
+# We currently support C89 and newer compilers. Catch the odd little fussy
+# 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/build/utimensat.c b/tools/build/utimensat.c
index 210599303cb6..49c389d13fb1 100644
--- a/tools/build/utimensat.c
+++ b/tools/build/utimensat.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/stat.h>
#include <errno.h>
diff --git a/tools/bus_space/C/Makefile b/tools/bus_space/C/Makefile
index 5fd64c790277..914441227318 100644
--- a/tools/bus_space/C/Makefile
+++ b/tools/bus_space/C/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
LIB= bus
SHLIB_MAJOR= 0
SRCS= lang.c
diff --git a/tools/bus_space/C/lang.c b/tools/bus_space/C/lang.c
index 3ef454466f9d..e6d242b5a7f8 100644
--- a/tools/bus_space/C/lang.c
+++ b/tools/bus_space/C/lang.c
@@ -24,9 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <errno.h>
diff --git a/tools/bus_space/C/libbus.h b/tools/bus_space/C/libbus.h
index 1f0c3f176516..420aa4563e94 100644
--- a/tools/bus_space/C/libbus.h
+++ b/tools/bus_space/C/libbus.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _LIBBUS_SPACE_H_
diff --git a/tools/bus_space/Makefile b/tools/bus_space/Makefile
index b13e3cfd7146..5f75db0103a5 100644
--- a/tools/bus_space/Makefile
+++ b/tools/bus_space/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= \
C \
Python
diff --git a/tools/bus_space/Makefile.inc b/tools/bus_space/Makefile.inc
index 080689ade4a0..06fc95199ab6 100644
--- a/tools/bus_space/Makefile.inc
+++ b/tools/bus_space/Makefile.inc
@@ -1,4 +1,2 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/..
SRCS+= bus.c busdma.c
diff --git a/tools/bus_space/Python/Makefile b/tools/bus_space/Python/Makefile
index 2097c8e3824a..23e5b00c152d 100644
--- a/tools/bus_space/Python/Makefile
+++ b/tools/bus_space/Python/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SHLIB_NAME= bus.so
SRCS= lang.c
diff --git a/tools/bus_space/Python/lang.c b/tools/bus_space/Python/lang.c
index 4fe3e6ee3d13..4af26da373bf 100644
--- a/tools/bus_space/Python/lang.c
+++ b/tools/bus_space/Python/lang.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <Python.h>
#include "bus.h"
diff --git a/tools/bus_space/bus.c b/tools/bus_space/bus.c
index 1b0d2ca59c3d..d562f5c04374 100644
--- a/tools/bus_space/bus.c
+++ b/tools/bus_space/bus.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <errno.h>
diff --git a/tools/bus_space/bus.h b/tools/bus_space/bus.h
index a1835d74e2b5..0298a74599ef 100644
--- a/tools/bus_space/bus.h
+++ b/tools/bus_space/bus.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _TOOLS_BUS_SPACE_H_
diff --git a/tools/bus_space/busdma.c b/tools/bus_space/busdma.c
index 04a9da8b2ef4..eec9a1e05ffd 100644
--- a/tools/bus_space/busdma.c
+++ b/tools/bus_space/busdma.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <assert.h>
diff --git a/tools/bus_space/busdma.h b/tools/bus_space/busdma.h
index ec4890dd201f..2868723da86e 100644
--- a/tools/bus_space/busdma.h
+++ b/tools/bus_space/busdma.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _TOOLS_BUS_DMA_H_
diff --git a/tools/bus_space/examples/am79c900_diag.py b/tools/bus_space/examples/am79c900_diag.py
index 3a15f60a91b8..7c72e2b6dbe2 100644
--- a/tools/bus_space/examples/am79c900_diag.py
+++ b/tools/bus_space/examples/am79c900_diag.py
@@ -24,7 +24,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
'''
diff --git a/tools/debugscripts/README b/tools/debugscripts/README
index a218368cc399..eb301c93d993 100644
--- a/tools/debugscripts/README
+++ b/tools/debugscripts/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This directory contains gdb macros for kernel debugging. When you
build a debug kernel, the target "gdbinit" in the kernel Makefile will
diff --git a/tools/debugscripts/dot.gdbinit b/tools/debugscripts/dot.gdbinit
index 1a340c08ab8c..4923f2254e3b 100644
--- a/tools/debugscripts/dot.gdbinit
+++ b/tools/debugscripts/dot.gdbinit
@@ -1,4 +1,3 @@
-# $FreeBSD$
# .gdbinit file for remote serial debugging.
#
# XXX Do not use this file directly. It contains parameters which are
diff --git a/tools/debugscripts/gdbinit.i386 b/tools/debugscripts/gdbinit.i386
index 95dbf6e93c87..19c97f619a85 100644
--- a/tools/debugscripts/gdbinit.i386
+++ b/tools/debugscripts/gdbinit.i386
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Assembler-level macros for i386
# Disassemble the next 10 instructions.
define xi
diff --git a/tools/debugscripts/gdbinit.kernel b/tools/debugscripts/gdbinit.kernel
index 274eb73d743b..5fa3efc7e7df 100644
--- a/tools/debugscripts/gdbinit.kernel
+++ b/tools/debugscripts/gdbinit.kernel
@@ -1,4 +1,3 @@
-# $FreeBSD$
# General kernel macros
# Print the command name of the current process
diff --git a/tools/debugscripts/netstat-anr.gdb b/tools/debugscripts/netstat-anr.gdb
index d27ae65a94f6..2c1faaf86a98 100644
--- a/tools/debugscripts/netstat-anr.gdb
+++ b/tools/debugscripts/netstat-anr.gdb
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
document netstat-anr
diff --git a/tools/diag/README b/tools/diag/README
index 689c998b719e..57e6773a104a 100644
--- a/tools/diag/README
+++ b/tools/diag/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This directory is for diagnostic programs.
diff --git a/tools/diag/dumpvfscache/Makefile b/tools/diag/dumpvfscache/Makefile
index 3cd9c5d71ae8..4ab0e2b59061 100644
--- a/tools/diag/dumpvfscache/Makefile
+++ b/tools/diag/dumpvfscache/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= dumpvfscache
LIBADD= kvm
diff --git a/tools/diag/dumpvfscache/dumpvfscache.c b/tools/diag/dumpvfscache/dumpvfscache.c
index 3f5eb5793a8a..44c2021a5a42 100644
--- a/tools/diag/dumpvfscache/dumpvfscache.c
+++ b/tools/diag/dumpvfscache/dumpvfscache.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/diag/localeck/Makefile b/tools/diag/localeck/Makefile
index 0dc7b0fe19b3..b8642a70af4e 100644
--- a/tools/diag/localeck/Makefile
+++ b/tools/diag/localeck/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= localeck
MAN=
WARNS?= 4
diff --git a/tools/diag/localeck/docheck.sh b/tools/diag/localeck/docheck.sh
index 7f47851f7bdf..14ca26970fb3 100644
--- a/tools/diag/localeck/docheck.sh
+++ b/tools/diag/localeck/docheck.sh
@@ -3,7 +3,6 @@
# Validate all locales installed in specified directory
# (by default check system locales)
#
-# $FreeBSD$
#
LOCALEDIR=/usr/share/locale
diff --git a/tools/diag/localeck/localeck.c b/tools/diag/localeck/localeck.c
index 4ce7e458f147..c2fb1f5a5599 100644
--- a/tools/diag/localeck/localeck.c
+++ b/tools/diag/localeck/localeck.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <locale.h>
diff --git a/tools/diag/prtblknos/Makefile b/tools/diag/prtblknos/Makefile
index 385692c820ca..9e4f8b4a55bc 100644
--- a/tools/diag/prtblknos/Makefile
+++ b/tools/diag/prtblknos/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
BINDIR?= /usr/bin
PROG= prtblknos
diff --git a/tools/diag/prtblknos/README b/tools/diag/prtblknos/README
index 8d3474483383..2970a638c0dd 100644
--- a/tools/diag/prtblknos/README
+++ b/tools/diag/prtblknos/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
This is a little C-program that can be used to print out the list
of blocks used by a requested list of inodes.
diff --git a/tools/diag/prtblknos/main.c b/tools/diag/prtblknos/main.c
index 25a717760922..bfd28206a555 100644
--- a/tools/diag/prtblknos/main.c
+++ b/tools/diag/prtblknos/main.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <ufs/ffs/fs.h>
@@ -34,19 +32,12 @@
#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;
int
-main(argc, argv)
- int argc;
- char *argv[];
+main(int argc, char *argv[])
{
union dinodep dp;
struct fs *fs;
@@ -56,7 +47,6 @@ main(argc, argv)
char ibuf[64];
char *fsname, *filename;
ino_t inonum;
- int error;
filename = NULL;
if (argc == 2) {
@@ -83,9 +73,10 @@ main(argc, argv)
fsname = *++argv;
/* get the superblock. */
- if ((error = ufs_disk_fillout(&disk, fsname)) < 0)
+ 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) {
@@ -99,7 +90,7 @@ main(argc, argv)
(void)printf("%s (inode #%jd): ", filename,
(intmax_t)inonum);
- if ((error = getinode(&disk, &dp, inonum)) < 0)
+ if (getinode(&disk, &dp, inonum) < 0)
warn("Read of inode %jd on %s failed: %s",
(intmax_t)inonum, fsname, disk.d_error);
diff --git a/tools/diag/prtblknos/prtblknos.c b/tools/diag/prtblknos/prtblknos.c
index ae53471156a6..acd0c1e1a61d 100644
--- a/tools/diag/prtblknos/prtblknos.c
+++ b/tools/diag/prtblknos/prtblknos.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
@@ -35,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>
@@ -53,9 +47,7 @@ static void indirprt(struct fs *, int, ufs_lbn_t, ufs_lbn_t, ufs2_daddr_t,
ufs_lbn_t);
void
-prtblknos(fs, dp)
- struct fs *fs;
- union dinode *dp;
+prtblknos(struct fs *fs, union dinode *dp)
{
int i, mode, frags;
ufs_lbn_t lbn, lastlbn, len, blksperindir;
@@ -154,13 +146,8 @@ prtblknos(fs, dp)
}
static void
-indirprt(fs, level, blksperindir, lbn, blkno, lastlbn)
- struct fs *fs;
- int level;
- ufs_lbn_t blksperindir;
- ufs_lbn_t lbn;
- ufs2_daddr_t blkno;
- ufs_lbn_t lastlbn;
+indirprt(struct fs *fs, int level, ufs_lbn_t blksperindir, ufs_lbn_t lbn,
+ ufs2_daddr_t blkno, ufs_lbn_t lastlbn)
{
char indir[MAXBSIZE];
ufs_lbn_t i, last;
@@ -209,10 +196,7 @@ indirprt(fs, level, blksperindir, lbn, blkno, lastlbn)
}
static const char *
-distance(fs, lastblk, firstblk)
- struct fs *fs;
- ufs2_daddr_t lastblk;
- ufs2_daddr_t firstblk;
+distance(struct fs *fs, ufs2_daddr_t lastblk, ufs2_daddr_t firstblk)
{
ufs2_daddr_t delta;
int firstcg, lastcg;
@@ -237,12 +221,8 @@ distance(fs, lastblk, firstblk)
static const char *indirname[UFS_NIADDR] = { "First", "Second", "Third" };
static void
-printblk(fs, lbn, blkno, numfrags, lastlbn)
- struct fs *fs;
- ufs_lbn_t lbn;
- ufs2_daddr_t blkno;
- int numfrags;
- ufs_lbn_t lastlbn;
+printblk(struct fs *fs, ufs_lbn_t lbn, ufs2_daddr_t blkno, int numfrags,
+ ufs_lbn_t lastlbn)
{
static int seq;
static ufs2_daddr_t totfrags, lastindirblk, lastblk, firstblk;
diff --git a/tools/ifnet/convert_drvapi.sh b/tools/ifnet/convert_ifapi.sh
index dd30c7a229e0..13509cd7182c 100755
--- a/tools/ifnet/convert_drvapi.sh
+++ b/tools/ifnet/convert_ifapi.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (c) 2014 Juniper Networks, Inc.
+# Copyright (c) 2014, 2019, 2020 Juniper Networks, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
@@ -35,6 +34,8 @@
# Author: Sreekanth Rupavatharam
#
+MAX_PASSES=100
+
if [ $# -lt 1 ]
then
echo " $0 <driver source (e.g., if_em.c)>";
@@ -47,40 +48,24 @@ __ifp__="ifp";
file=$1
rotateCursor() {
- case $toggle
- in
- 1)
- printf " \\ "
- printf "\b\b"
- toggle="2"
- ;;
-
- 2)
- printf " | "
- printf "\b\b\b"
- toggle="3"
- ;;
-
- 3)
- printf " / "
- printf "\b\b\b"
- toggle="4"
- ;;
-
- *)
- printf " - "
- printf "\b\b\b"
- toggle="1"
- ;;
- esac
+ case $toggle in
+ 1) c="\\" ;;
+ 2) c="|" ;;
+ 3) c="/" ;;
+ *) c="-" ;;
+ esac
+ toggle=$(((toggle + 1) % 4))
+ printf " %s \b\b\b" $c
}
-handle_set() {
# Handle the case where $__ifp__->if_blah = XX;
- line=$1
- set=`echo $line| grep "$__ifp__->.* = "`
- if [ ! -z "$set" ]
+handle_set() {
+ if echo $line | grep "$__ifp__->.* = " > /dev/null 2>&1
then
+ if echo $line | grep "\[$__ifp__->.* = " > /dev/null 2>&1; then
+ # Special case of array[ifp->member] = value
+ return 1
+ fi
word=`echo $line | awk -F "if_" ' { print $2 }' | awk -F" =" '{ print $1 }'`
value=`echo $line | awk -F "=" '{ print $2 }' | sed -e 's/;//g'`
new=`echo if_set$word"\($__ifp__,"$value");"`
@@ -93,9 +78,7 @@ handle_set() {
}
handle_inc() {
- line=$1
- inc=`echo $line | grep "$__ifp__->.*++\|++$__ifp__->.*"`
- if [ ! -z "$inc" ]
+ if echo $line | grep "$__ifp__->.*++\|++$__ifp__->.*" > /dev/null 2>&1
then
word=`echo $line | awk -F"if_" '{ print $2 }'|awk -F"\+" '{ print $1}'`
value=' 1';
@@ -104,14 +87,12 @@ handle_inc() {
new=`echo $new | sed -e 's/&/\\\&/'`
line=`echo $line| sed -e's/'$old'/'$new'/g'`
return 0;
- fi
+ fi
return 1;
}
handle_add() {
- line=$1
- add=`echo $line|grep "$__ifp__->.*+= "`
- if [ ! -z "$add" ]
+ if echo $line | grep "$__ifp__->.*+= " > /dev/null 2>&1
then
word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'`
value=`echo $line | awk -F"=" '{ print $2}' | sed -e 's/;//g'`
@@ -126,14 +107,12 @@ handle_add() {
}
handle_or() {
- line=$1
- or=`echo $line|grep "$__ifp__->.*|= "`
- if [ ! -z "$or" ]
+ if echo $line | grep "$__ifp__->.*|= " > /dev/null 2>&1
then
- word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'`
+ word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'`
value=`echo $line | awk -F"=" '{ print $2}' | sed -e 's/;//g'`
new=`echo if_set${word}bit"($__ifp__,$value, 0);"`
- new=`echo $new | sed -e 's/&/\\\&/'`
+ new=`echo $new | sed -e 's/&/\\\&/'`
#line=`echo $line|sed -e 's/&/\\&/'`
old=`echo $line|sed -e 's/^[ ]*//'`
line=`echo $line| sed -e's/'$old'/'$new'/g'`
@@ -144,11 +123,9 @@ handle_or() {
}
handle_and() {
- line=$1
- or=`echo $line|grep "$__ifp__->.*&= "`
- if [ ! -z "$or" ]
+ if echo $line |grep "$__ifp__->.*&= " > /dev/null 2>&1
then
- word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'`
+ word=`echo $line | awk -F"if_" '{ print $2 }'|awk '{ print $1}'`
value=`echo $line | awk -F"=" '{ print $2}' | sed -e 's/;//g'`
value=`echo $value | sed -e's/~//g'`
new=`echo if_set${word}bit"\($__ifp__, 0,$value);"`
@@ -162,8 +139,7 @@ handle_and() {
}
handle_toggle() {
- line=$1
- if [ ! -z `echo $line | grep "\^="` ]
+ if echo $line | grep "\^=" > /dev/null 2>&1
then
line=`echo $line | sed -e 's/'"$__ifp__"'->if_\(.*\) ^=\(.*\);/if_toggle\1('"$__ifp__"',\2);/g'`
return 0;
@@ -174,16 +150,14 @@ handle_toggle() {
# XXX - this needs updating
handle_misc() {
- line=$1
- get=`echo $line | grep "if_capabilities\|if_flags\|if_softc\|if_capenable\|if_mtu\|if_drv_flags"`
- if [ ! -z "$get" ]
+ if echo $line | grep "$__ifp__->\(if_capabilities\|if_flags\|if_softc\|if_capenable\|if_hwassist\|if_mtu\|if_drv_flags\|if_index\|if_alloctype\|if_dname\|if_xname\|if_addr\|if_hw_tsomax\|if_hw_tsomaxsegcount\|if_hw_tsomaxsegsize\)" > /dev/null 2>&1
then
word=`echo $line |awk -F"$__ifp__->if_" '{ print $2 }' | \
sed -e's/[^a-zA-Z0-9_]/\@/'|awk -F"\@" '{ print $1}'`
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;
@@ -192,31 +166,66 @@ handle_misc() {
replace_str ()
{
- line=$1
- orig=$2
- new=$3
- line=`echo $line | sed -e 's/'"$orig"'\(.*\)/'"$new"'\1/g'`
- return 0;
+ orig=$1
+ new=$2
+
+ if echo $line | grep "$orig" > /dev/null 2>&1
+ then
+ line=`echo $line | sed -e "s|$orig|$new|"`
+ else
+ return 1
+ fi
}
-# Handle special cases which do not fall under regular patterns
handle_special ()
{
- line=$1
- replace_str $line "(\*$__ifp__->if_input)" "if_input"
- replace_str $line "if_setinit" "if_setinitfn"
- replace_str $line "if_setioctl" "if_setioctlfn"
- replace_str $line "if_getdrv_flags" "if_getdrvflags"
- replace_str $line "if_setdrv_flagsbit" "if_setdrvflagbits"
- replace_str $line "if_setstart" "if_setstartfn"
- replace_str $line "if_sethwassistbit" "if_sethwassistbits"
- replace_str $line "ifmedia_init" "ifmedia_init_drv"
- replace_str $line "IFQ_DRV_IS_EMPTY(&$__ifp__->if_snd)" "if_sendq_empty($__ifp__)"
- replace_str $line "IFQ_DRV_PREPEND(&$__ifp__->if_snd" "if_sendq_prepend($__ifp__"
- replace_str $line "IFQ_SET_READY(&ifp->if_snd)" "if_setsendqready($__ifp__)"
- line=`echo $line | sed -e 's/IFQ_SET_MAXLEN(&'$__ifp__'->if_snd, \(.*\))/if_setsendqlen('$__ifp__', \1)/g'`
- line=`echo $line | sed -e 's/IFQ_DRV_DEQUEUE(&'$__ifp__'->if_snd, \(.*\))/\1 = if_dequeue('$__ifp__')/g'`
- return 0
+ replace_str "(\*$__ifp__->if_input)" "if_input" || \
+ replace_str "IFQ_DRV_IS_EMPTY(&$__ifp__->if_snd)" \
+ "if_sendq_empty($__ifp__)" || \
+ replace_str "IFQ_DRV_PREPEND(&$__ifp__->if_snd" \
+ "if_sendq_prepend($__ifp__" || \
+ replace_str "IFQ_SET_READY(&$__ifp__->if_snd)" \
+ "if_setsendqready($__ifp__)" || \
+ replace_str "VLAN_CAPABILITIES($__ifp__)" \
+ "if_vlancap($__ifp__)" || \
+ replace_str "IFQ_SET_MAXLEN(&$__ifp__->if_snd," \
+ "if_setsendqlen($__ifp__," || \
+ replace_str "IFQ_DRV_DEQUEUE(&$__ifp__->if_snd, \(.*\))" \
+ "\1 = if_dequeue($__ifp__)"
+ replace_str "$__ifp__->if_vlantrunk != NULL" \
+ "if_vlantrunkinuse($__ifp__)"
+}
+
+handle_ifps() {
+ handle_set || handle_inc || handle_add || handle_or || handle_and || \
+ handle_toggle || handle_misc || handle_special
+}
+
+handle_renames ()
+{
+ replace_str "if_setinit(" "if_setinitfn(" || \
+ replace_str "if_setioctl(" "if_setioctlfn(" || \
+ replace_str "if_setqflush(" "if_setqflushfn(" || \
+ replace_str "if_settransmit(" "if_settransmitfn(" || \
+ replace_str "if_getdrv_flags(" "if_getdrvflags(" || \
+ replace_str "if_setdrv_flagsbit(" "if_setdrvflagbits(" || \
+ replace_str "if_setstart(" "if_setstartfn(" || \
+ replace_str "if_sethwassistbit(" "if_sethwassistbits(" || \
+ replace_str "ifmedia_init(" "ifmedia_init_drv("
+}
+
+check_ifp()
+{
+ case "$line" in
+ *"${__ifp__}->"*) return 0;; # Still an ifp to convert
+ esac
+ return 1
+}
+
+add_failed ()
+{
+ line="$line /* ${FAIL_PAT} */"
+ return 1
}
if [ -e $file.tmp ]
@@ -225,76 +234,44 @@ then
fi
IFS=
echo -n "Conversion for $file started, please wait: "
-FAIL_PAT="XXX - DRVAPI"
+FAIL_PAT="XXX - IFAPI"
count=0
-cat $1 | while read -r line
-do
-count=`expr $count + 1`
-rotateCursor
-pat=`echo $line | grep "$__ifp__->"`
-while [ "$pat" != "" ]
+while read -r line
do
- pat=`echo $line | grep "$__ifp__->"`
- if [ ! -z `echo $pat | grep "$FAIL_PAT"` ]
- then
- break;
- fi
-
- handle_set $line
-
- if [ $? != 0 ]
- then
- handle_inc $line
- fi
-
- if [ $? != 0 ]
- then
- handle_add $line
- fi
-
- if [ $? != 0 ]
- then
- handle_or $line
- fi
+ rotateCursor
- if [ $? != 0 ]
- then
- handle_and $line
- fi
+ # There is an ifp, we need to process it
+ passes=0
+ while check_ifp
+ do
+ if handle_ifps
+ then
+ handle_renames
+ else
+ add_failed
+ break
+ fi
+ passes=$((passes + 1))
+ if [ $passes -ge $MAX_PASSES ]; then
+ add_failed
+ break
+ fi
+ done
- if [ $? != 0 ]
- then
- handle_toggle $line
- fi
-
- if [ $? != 0 ]
- then
- handle_misc $line
- fi
-
- if [ $? != 0 ]
- then
- handle_special $line
- fi
-
- if [ ! -z `echo $line | grep "$__ifp__->"` ]
- then
- line=`echo $line | sed -e 's:$: \/* '${FAIL_PAT}' *\/:g'`
- fi
-done
- line=`echo "$line" | sed -e 's:VLAN_CAPABILITIES('$__ifp__'):if_vlancap('$__ifp__'):g'`
# Replace the ifnet * with if_t
- if [ ! -z `echo $line | grep "struct ifnet"` ]
- then
- line=`echo $line | sed -e 's/struct ifnet[ \t]*\*/if_t /g'`
- fi
- echo "$line" >> $file.tmp
-done
+ case "$line" in
+ *"struct ifnet"*)
+ line=`echo $line | sed -e 's/struct ifnet[ \t]*\*/if_t /g'` ;;
+ *"IF_LLADDR("*)
+ line=`echo $line | sed -e 's/IF_LLADDR(/if_getlladdr(/g'` ;;
+ esac
+ printf "%s\n" "$line" >> $file.tmp
+done < $1
echo ""
count=`grep $FAIL_PAT $file.tmp | wc -l`
if [ $count -gt 0 ]
then
- echo "$count lines could not be converted to DRVAPI"
+ echo "$count lines could not be converted to IFAPI"
echo "Look for /* $FAIL_PAT */ in the converted file"
fi
echo "original $file has been moved to $file.orig"
diff --git a/tools/install.sh b/tools/install.sh
index 8e7fd2ef1300..c0a6715670d9 100644
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -26,7 +26,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
# parse install's options and ignore them completely.
dirmode=""
diff --git a/tools/kerneldoc/Doxyfile b/tools/kerneldoc/Doxyfile
index 146afc32ba0f..aac7f3da4846 100644
--- a/tools/kerneldoc/Doxyfile
+++ b/tools/kerneldoc/Doxyfile
@@ -1,5 +1,4 @@
# Doxyfile 1.3.6
-# $FreeBSD$
#---------------------------------------------------------------------------
# Project related configuration options
diff --git a/tools/kerneldoc/Makefile b/tools/kerneldoc/Makefile
index ec665a7b0256..36739c42ed15 100644
--- a/tools/kerneldoc/Makefile
+++ b/tools/kerneldoc/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../kern
SRCS+= kern
diff --git a/tools/kerneldoc/subsys/Dependencies b/tools/kerneldoc/subsys/Dependencies
index 537bdbaa1799..3f771693fa86 100644
--- a/tools/kerneldoc/subsys/Dependencies
+++ b/tools/kerneldoc/subsys/Dependencies
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# makefile dependencies for doxygen tag files
#
diff --git a/tools/kerneldoc/subsys/Doxyfile-cam b/tools/kerneldoc/subsys/Doxyfile-cam
index 7646cc06d145..bb3b12b29f11 100644
--- a/tools/kerneldoc/subsys/Doxyfile-cam
+++ b/tools/kerneldoc/subsys/Doxyfile-cam
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-crypto b/tools/kerneldoc/subsys/Doxyfile-crypto
index 404993d51716..c57b71bd7f37 100644
--- a/tools/kerneldoc/subsys/Doxyfile-crypto
+++ b/tools/kerneldoc/subsys/Doxyfile-crypto
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_aac b/tools/kerneldoc/subsys/Doxyfile-dev_aac
index c86bf0bbbd6e..41187eb6d784 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_aac
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_aac
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_aacraid b/tools/kerneldoc/subsys/Doxyfile-dev_aacraid
index c0a52df4a116..2189e8cd85df 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_aacraid
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_aacraid
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_acpi_support b/tools/kerneldoc/subsys/Doxyfile-dev_acpi_support
index 2fd72fe13255..94518065c71c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_acpi_support
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_acpi_support
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_acpica b/tools/kerneldoc/subsys/Doxyfile-dev_acpica
index 8e55e6f85e8c..26507f49b1c4 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_acpica
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_acpica
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_adb b/tools/kerneldoc/subsys/Doxyfile-dev_adb
index 8c9c19634808..84269f6569c3 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_adb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_adb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_adlink b/tools/kerneldoc/subsys/Doxyfile-dev_adlink
index de0fbde68af9..72c07af03d69 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_adlink
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_adlink
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ae b/tools/kerneldoc/subsys/Doxyfile-dev_ae
index 2862022def81..5058739cb132 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ae
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ae
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_age b/tools/kerneldoc/subsys/Doxyfile-dev_age
index 583dbaaf8c38..f8e07a8b853c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_age
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_age
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_agp b/tools/kerneldoc/subsys/Doxyfile-dev_agp
index e9e4c418dcd9..06759bfac9c8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_agp
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_agp
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ahci b/tools/kerneldoc/subsys/Doxyfile-dev_ahci
index 684c0bdbf350..e5675a900248 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ahci
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ahci
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_aic7xxx b/tools/kerneldoc/subsys/Doxyfile-dev_aic7xxx
index 525c9ba083c6..bfe40d40485f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_aic7xxx
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_aic7xxx
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_al_eth b/tools/kerneldoc/subsys/Doxyfile-dev_al_eth
index 6c2ed7a9161f..c7373f03e6b1 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_al_eth
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_al_eth
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_alc b/tools/kerneldoc/subsys/Doxyfile-dev_alc
index c779a19a8b0b..b6369f9d1e7d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_alc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_alc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ale b/tools/kerneldoc/subsys/Doxyfile-dev_ale
index 200a666edcb9..fd8fbcbf76e8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ale
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ale
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_alpm b/tools/kerneldoc/subsys/Doxyfile-dev_alpm
index fb1cac442b90..5f215813db61 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_alpm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_alpm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_altera b/tools/kerneldoc/subsys/Doxyfile-dev_altera
deleted file mode 100644
index 8ba54b9bf616..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_altera
+++ /dev/null
@@ -1,21 +0,0 @@
-# Doxyfile 1.5.2
-
-# $FreeBSD$
-
-#---------------------------------------------------------------------------
-# 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_amd_ecc_inject b/tools/kerneldoc/subsys/Doxyfile-dev_amd_ecc_inject
index 9784b4a293c1..893573f61bb3 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_amd_ecc_inject
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_amd_ecc_inject
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_amdgpio b/tools/kerneldoc/subsys/Doxyfile-dev_amdgpio
index b36c12d442e5..e11d1c4f18c5 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_amdgpio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_amdgpio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_amdpm b/tools/kerneldoc/subsys/Doxyfile-dev_amdpm
index ff3e803e6b0c..96723d1f9cb7 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_amdpm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_amdpm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_amdsbwd b/tools/kerneldoc/subsys/Doxyfile-dev_amdsbwd
index aa064e757e61..305951270df2 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_amdsbwd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_amdsbwd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_amdsmb b/tools/kerneldoc/subsys/Doxyfile-dev_amdsmb
index 9c7edcad0739..15d2d6c48b11 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_amdsmb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_amdsmb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_amdsmn b/tools/kerneldoc/subsys/Doxyfile-dev_amdsmn
index 4dbbb6a04820..3a94c9a65f46 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_amdsmn
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_amdsmn
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_amdtemp b/tools/kerneldoc/subsys/Doxyfile-dev_amdtemp
index 45ab23747ca9..e4b7d313c611 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_amdtemp
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_amdtemp
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_an b/tools/kerneldoc/subsys/Doxyfile-dev_an
index 2f383d455a8c..9bd49f1783bc 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_an
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_an
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_arcmsr b/tools/kerneldoc/subsys/Doxyfile-dev_arcmsr
index 061867ab1739..645e427a2be8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_arcmsr
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_arcmsr
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_asmc b/tools/kerneldoc/subsys/Doxyfile-dev_asmc
index 29a0e553b7ba..f61a88571667 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_asmc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_asmc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ata b/tools/kerneldoc/subsys/Doxyfile-dev_ata
index 7e602b2ff7d0..d8392aadf3c8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ata
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ata
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ath b/tools/kerneldoc/subsys/Doxyfile-dev_ath
index 3b71b6bd377e..b5ffd6c4d66a 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ath
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ath
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_atkbdc b/tools/kerneldoc/subsys/Doxyfile-dev_atkbdc
index 6206eaadbcdd..aced3d6893a1 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_atkbdc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_atkbdc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_axgbe b/tools/kerneldoc/subsys/Doxyfile-dev_axgbe
index d3750f16601b..ba9247ee2abf 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_axgbe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_axgbe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bce b/tools/kerneldoc/subsys/Doxyfile-dev_bce
index 04bc6483da5d..1f8e2429b406 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bce
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bce
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_beri b/tools/kerneldoc/subsys/Doxyfile-dev_beri
deleted file mode 100644
index abb8bdf2a8e6..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_beri
+++ /dev/null
@@ -1,21 +0,0 @@
-# Doxyfile 1.5.2
-
-# $FreeBSD$
-
-#---------------------------------------------------------------------------
-# 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/kerneldoc/subsys/Doxyfile-dev_bfe b/tools/kerneldoc/subsys/Doxyfile-dev_bfe
index f4caac59158d..27ed9c955d0a 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bfe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bfe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bge b/tools/kerneldoc/subsys/Doxyfile-dev_bge
index 50da5c90eaf1..df9b1f623a00 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bhnd b/tools/kerneldoc/subsys/Doxyfile-dev_bhnd
index 3c8d448993bc..6a40353c2714 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bhnd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bhnd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bnxt b/tools/kerneldoc/subsys/Doxyfile-dev_bnxt
index e5b86c7c184d..0fb8ccdba563 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bnxt
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bnxt
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bvm b/tools/kerneldoc/subsys/Doxyfile-dev_bvm
index 6cc7ed31062b..49cc654c02fb 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bvm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bvm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bwi b/tools/kerneldoc/subsys/Doxyfile-dev_bwi
index be772e6a0d4a..92dad1e44d2c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bwi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bwi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bwn b/tools/kerneldoc/subsys/Doxyfile-dev_bwn
index fa87dbdd17d8..d40541514e4a 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bwn
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bwn
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_bxe b/tools/kerneldoc/subsys/Doxyfile-dev_bxe
index 56713b48099f..be694aea06e4 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_bxe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_bxe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cadence b/tools/kerneldoc/subsys/Doxyfile-dev_cadence
index 4fe3b1487f1e..9d25567749ed 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cadence
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cadence
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cardbus b/tools/kerneldoc/subsys/Doxyfile-dev_cardbus
index df1ef50b1033..b6d76fa289d0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cardbus
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cardbus
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cas b/tools/kerneldoc/subsys/Doxyfile-dev_cas
index e08d4c1a5443..c5e828b599c8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cas
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cas
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ce b/tools/kerneldoc/subsys/Doxyfile-dev_ce
index cb68367a5e5a..dcfd9d3478a2 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ce
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ce
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cesa b/tools/kerneldoc/subsys/Doxyfile-dev_cesa
index d284d68330af..0af7b735780b 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cesa
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cesa
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cfe b/tools/kerneldoc/subsys/Doxyfile-dev_cfe
index 64dafd59640d..e3f4ae9090b1 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cfe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cfe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cfi b/tools/kerneldoc/subsys/Doxyfile-dev_cfi
index 0eae28500b85..1f9bb0891dca 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cfi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cfi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_chromebook_platform b/tools/kerneldoc/subsys/Doxyfile-dev_chromebook_platform
index d9f434f0503c..a030ea90d18a 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_chromebook_platform
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_chromebook_platform
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ciss b/tools/kerneldoc/subsys/Doxyfile-dev_ciss
index 95d32b64a43b..9c341bf35e0c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ciss
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ciss
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_coretemp b/tools/kerneldoc/subsys/Doxyfile-dev_coretemp
index 0d53dd1a4c12..1958deca2a86 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_coretemp
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_coretemp
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cp b/tools/kerneldoc/subsys/Doxyfile-dev_cp
index de0ae88629f9..b65a94cf64bd 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cp
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cp
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cpuctl b/tools/kerneldoc/subsys/Doxyfile-dev_cpuctl
index 40ac722b3a85..ed42ad9c92b5 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cpuctl
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cpuctl
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cpufreq b/tools/kerneldoc/subsys/Doxyfile-dev_cpufreq
index b6c112b548f8..3d8f25182b5d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cpufreq
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cpufreq
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cxgb b/tools/kerneldoc/subsys/Doxyfile-dev_cxgb
index af683c53d7a9..05d4cb812c81 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cxgb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cxgb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cxgbe b/tools/kerneldoc/subsys/Doxyfile-dev_cxgbe
index bd92d046bfdc..2c9e8f0e20a8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cxgbe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cxgbe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_cyapa b/tools/kerneldoc/subsys/Doxyfile-dev_cyapa
index 60280bd285b9..0db4ff3ae4cd 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_cyapa
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_cyapa
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_dc b/tools/kerneldoc/subsys/Doxyfile-dev_dc
index c4e178cbf9e0..710fcd8cc9a6 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_dc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_dc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_dcons b/tools/kerneldoc/subsys/Doxyfile-dev_dcons
index 2a69a87407b0..5b61263240ef 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_dcons
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_dcons
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_dme b/tools/kerneldoc/subsys/Doxyfile-dev_dme
deleted file mode 100644
index c5465c30c99e..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_dme
+++ /dev/null
@@ -1,21 +0,0 @@
-# Doxyfile 1.5.2
-
-# $FreeBSD$
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = "FreeBSD kernel dme device code"
-OUTPUT_DIRECTORY = $(DOXYGEN_DEST_PATH)/dev_dme/
-EXTRACT_ALL = YES # for undocumented src, no warnings enabled
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = $(DOXYGEN_SRC_PATH)/dev/dme/ \
- $(NOTREVIEWED)
-
-GENERATE_TAGFILE = dev_dme/dev_dme.tag
-
-@INCLUDE_PATH = $(DOXYGEN_INCLUDE_PATH)
-@INCLUDE = common-Doxyfile
-
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_dpaa b/tools/kerneldoc/subsys/Doxyfile-dev_dpaa
index a3da742e7062..5fb878c5a690 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_dpaa
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_dpaa
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_dpms b/tools/kerneldoc/subsys/Doxyfile-dev_dpms
index 4bc8c74dc4d9..30070f01246e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_dpms
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_dpms
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_dwc b/tools/kerneldoc/subsys/Doxyfile-dev_dwc
index f62629e42ba1..ebfcfb71d3c2 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_dwc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_dwc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_e1000 b/tools/kerneldoc/subsys/Doxyfile-dev_e1000
index c0532c5ce1a9..00d4450be374 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_e1000
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_e1000
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_efidev b/tools/kerneldoc/subsys/Doxyfile-dev_efidev
index 607ac073c1f3..caaa4dfa2ebf 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_efidev
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_efidev
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ena b/tools/kerneldoc/subsys/Doxyfile-dev_ena
index 0b31e9a1f035..1bcffe061031 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ena
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ena
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_et b/tools/kerneldoc/subsys/Doxyfile-dev_et
index 1267ef500f7b..537018bd8f67 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_et
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_et
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_etherswitch b/tools/kerneldoc/subsys/Doxyfile-dev_etherswitch
index 3dd10cb4ea51..f7b4d3baf7cf 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_etherswitch
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_etherswitch
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_evdev b/tools/kerneldoc/subsys/Doxyfile-dev_evdev
index c42bba615a1e..25e863633758 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_evdev
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_evdev
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_exca b/tools/kerneldoc/subsys/Doxyfile-dev_exca
index 775a3de3bda9..143a9defd460 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_exca
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_exca
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_extres b/tools/kerneldoc/subsys/Doxyfile-dev_extres
index 8e0639276406..2a724f5bfb97 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_extres
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_extres
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_fb b/tools/kerneldoc/subsys/Doxyfile-dev_fb
index 5f45b7b8e4bb..a0e036a58751 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_fb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_fb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_fdc b/tools/kerneldoc/subsys/Doxyfile-dev_fdc
index 72b0d9f59a31..2304bad2d225 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_fdc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_fdc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_fdt b/tools/kerneldoc/subsys/Doxyfile-dev_fdt
index 30c00d343c66..633b6e3522e7 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_fdt
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_fdt
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ffec b/tools/kerneldoc/subsys/Doxyfile-dev_ffec
index 0efe4883a893..204df93b78ae 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ffec
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ffec
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_filemon b/tools/kerneldoc/subsys/Doxyfile-dev_filemon
index 1549fba02441..fbc2935e6ece 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_filemon
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_filemon
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_firewire b/tools/kerneldoc/subsys/Doxyfile-dev_firewire
index eea3e3a3e2ca..f9c86c7ea491 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_firewire
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_firewire
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_flash b/tools/kerneldoc/subsys/Doxyfile-dev_flash
index 79993dce84bb..aaea8156de6b 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_flash
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_flash
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_fxp b/tools/kerneldoc/subsys/Doxyfile-dev_fxp
index 4c8a53adfe56..1f3e8a154a65 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_fxp
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_fxp
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_gem b/tools/kerneldoc/subsys/Doxyfile-dev_gem
index 5583a205c40b..dae0e653db8f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_gem
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_gem
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_glxiic b/tools/kerneldoc/subsys/Doxyfile-dev_glxiic
index 0f7d3c86c0f7..1dfdf1903cf8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_glxiic
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_glxiic
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_glxsb b/tools/kerneldoc/subsys/Doxyfile-dev_glxsb
index 3f10d1f51607..6be208d31edf 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_glxsb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_glxsb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_gpio b/tools/kerneldoc/subsys/Doxyfile-dev_gpio
index 180af3cb8aba..9e7ff9924a04 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_gpio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_gpio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_gxemul b/tools/kerneldoc/subsys/Doxyfile-dev_gxemul
deleted file mode 100644
index bc4dea6e25fe..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_gxemul
+++ /dev/null
@@ -1,21 +0,0 @@
-# Doxyfile 1.5.2
-
-# $FreeBSD$
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = "FreeBSD kernel gxemul device code"
-OUTPUT_DIRECTORY = $(DOXYGEN_DEST_PATH)/dev_gxemul/
-EXTRACT_ALL = YES # for undocumented src, no warnings enabled
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = $(DOXYGEN_SRC_PATH)/dev/gxemul/ \
- $(NOTREVIEWED)
-
-GENERATE_TAGFILE = dev_gxemul/dev_gxemul.tag
-
-@INCLUDE_PATH = $(DOXYGEN_INCLUDE_PATH)
-@INCLUDE = common-Doxyfile
-
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hdmi b/tools/kerneldoc/subsys/Doxyfile-dev_hdmi
index b6bc8c89c7e4..013bbce0b54e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hdmi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hdmi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hifn b/tools/kerneldoc/subsys/Doxyfile-dev_hifn
index 594b0f203830..2a6402c1eee2 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hifn
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hifn
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hpt27xx b/tools/kerneldoc/subsys/Doxyfile-dev_hpt27xx
index 775e9ab0b4a7..c30aa2749c3c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hpt27xx
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hpt27xx
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hptiop b/tools/kerneldoc/subsys/Doxyfile-dev_hptiop
index 5ecce983920d..d347957a6c45 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hptiop
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hptiop
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hptmv b/tools/kerneldoc/subsys/Doxyfile-dev_hptmv
index 8251227793b8..a5048b3cd18f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hptmv
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hptmv
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hptnr b/tools/kerneldoc/subsys/Doxyfile-dev_hptnr
index 5defaddd9316..4d44d041782f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hptnr
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hptnr
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hptrr b/tools/kerneldoc/subsys/Doxyfile-dev_hptrr
index e86c819bd2b9..fb1efd8c8cc8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hptrr
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hptrr
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hwpmc b/tools/kerneldoc/subsys/Doxyfile-dev_hwpmc
index 54f742b46a76..97141d0ebbaa 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hwpmc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hwpmc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_hyperv b/tools/kerneldoc/subsys/Doxyfile-dev_hyperv
index d8325a6d18bb..c62dc11ac240 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_hyperv
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_hyperv
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ic b/tools/kerneldoc/subsys/Doxyfile-dev_ic
index 5a166794bb8f..c090ebdb107e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ic
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ic
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ice b/tools/kerneldoc/subsys/Doxyfile-dev_ice
index e597f87711b0..d9b693ad5664 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ice
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ice
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ichiic b/tools/kerneldoc/subsys/Doxyfile-dev_ichiic
index e3973429935b..288317bae475 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ichiic
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ichiic
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ichsmb b/tools/kerneldoc/subsys/Doxyfile-dev_ichsmb
index f7b35dee69af..ef9c5eb47d63 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ichsmb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ichsmb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ichwd b/tools/kerneldoc/subsys/Doxyfile-dev_ichwd
index 81b5c64fa76d..e4565b34eed0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ichwd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ichwd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ida b/tools/kerneldoc/subsys/Doxyfile-dev_ida
index 54dc48b3bc22..df4d698a56c3 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ida
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ida
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_iicbus b/tools/kerneldoc/subsys/Doxyfile-dev_iicbus
index 3f443508683c..f28ce10bd7bd 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_iicbus
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_iicbus
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_imcsmb b/tools/kerneldoc/subsys/Doxyfile-dev_imcsmb
index ede8d02b3833..f1119db66a34 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_imcsmb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_imcsmb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_intel b/tools/kerneldoc/subsys/Doxyfile-dev_intel
index 663949a787fa..0db9acf5a432 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_intel
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_intel
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_intpm b/tools/kerneldoc/subsys/Doxyfile-dev_intpm
index ce79f71bf6f8..9f7d81c0f114 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_intpm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_intpm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_io b/tools/kerneldoc/subsys/Doxyfile-dev_io
index f47046db58cd..e334f0cbf497 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_io
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_io
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ioat b/tools/kerneldoc/subsys/Doxyfile-dev_ioat
index 49df520b6dd4..495c9bf860c9 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ioat
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ioat
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ipmi b/tools/kerneldoc/subsys/Doxyfile-dev_ipmi
index 198918a15417..1b679030ad6c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ipmi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ipmi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ips b/tools/kerneldoc/subsys/Doxyfile-dev_ips
index 4d649963c120..90192682f503 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ips
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ips
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ipw b/tools/kerneldoc/subsys/Doxyfile-dev_ipw
index f3f151eae87b..cc3e039528e0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ipw
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ipw
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_isci b/tools/kerneldoc/subsys/Doxyfile-dev_isci
index 75a931b398e0..7f6ded2b00cd 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_isci
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_isci
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_iscsi b/tools/kerneldoc/subsys/Doxyfile-dev_iscsi
index 353034898869..c31f3547bbcb 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_iscsi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_iscsi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_iser b/tools/kerneldoc/subsys/Doxyfile-dev_iser
index e5dd49bdc8d8..f98e3efeb788 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_iser
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_iser
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_isl b/tools/kerneldoc/subsys/Doxyfile-dev_isl
index 31a9ad325784..149bd1d813fc 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_isl
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_isl
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ismt b/tools/kerneldoc/subsys/Doxyfile-dev_ismt
index edd64eca760d..138741bcfc25 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ismt
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ismt
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_isp b/tools/kerneldoc/subsys/Doxyfile-dev_isp
index cd2df711fae1..60a6e83b3997 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_isp
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_isp
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ispfw b/tools/kerneldoc/subsys/Doxyfile-dev_ispfw
index a4e5ad5331aa..18a09863ad9a 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ispfw
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ispfw
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_iwi b/tools/kerneldoc/subsys/Doxyfile-dev_iwi
index 11cf21c2fa8d..6853ba5a301e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_iwi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_iwi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_iwm b/tools/kerneldoc/subsys/Doxyfile-dev_iwm
index f97c74050448..6ca206227766 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_iwm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_iwm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_iwn b/tools/kerneldoc/subsys/Doxyfile-dev_iwn
index aa066d61e4e8..06a6c4b5cd05 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_iwn
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_iwn
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ixgbe b/tools/kerneldoc/subsys/Doxyfile-dev_ixgbe
index bfc8344ac7ac..777524a14b75 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ixgbe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ixgbe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ixl b/tools/kerneldoc/subsys/Doxyfile-dev_ixl
index 23bef0bb6765..ffcc400ecc5f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ixl
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ixl
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_jedec_dimm b/tools/kerneldoc/subsys/Doxyfile-dev_jedec_dimm
index 0396d3fb1190..35d22d5ecdd8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_jedec_dimm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_jedec_dimm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_jme b/tools/kerneldoc/subsys/Doxyfile-dev_jme
index 95f66945fe70..149c181f8fd7 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_jme
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_jme
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_kbd b/tools/kerneldoc/subsys/Doxyfile-dev_kbd
index 98353a718b93..a4d17c25dc6f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_kbd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_kbd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_kbdmux b/tools/kerneldoc/subsys/Doxyfile-dev_kbdmux
index beda561fb53a..8a60be303ec4 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_kbdmux
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_kbdmux
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ksyms b/tools/kerneldoc/subsys/Doxyfile-dev_ksyms
index 5b1124252be4..79b9437789ca 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ksyms
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ksyms
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_le b/tools/kerneldoc/subsys/Doxyfile-dev_le
index f58635425164..6a4da00f519d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_le
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_le
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_led b/tools/kerneldoc/subsys/Doxyfile-dev_led
index 86a44d7f8eba..f6aed5db4f76 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_led
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_led
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_lge b/tools/kerneldoc/subsys/Doxyfile-dev_lge
index 3b4aa09fa312..8715a7d5455b 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_lge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_lge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_liquidio b/tools/kerneldoc/subsys/Doxyfile-dev_liquidio
index a6cb7712c81e..03355b2a1130 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_liquidio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_liquidio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_malo b/tools/kerneldoc/subsys/Doxyfile-dev_malo
index 4e442f721329..068567c7d1c8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_malo
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_malo
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mbox b/tools/kerneldoc/subsys/Doxyfile-dev_mbox
index e9bfa5486353..d21b98637116 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mbox
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mbox
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_md b/tools/kerneldoc/subsys/Doxyfile-dev_md
index 538f35c59160..53a04c72cfee 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_md
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_md
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mdio b/tools/kerneldoc/subsys/Doxyfile-dev_mdio
index 428030c6396b..f4a666d0d0ae 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mdio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mdio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mem b/tools/kerneldoc/subsys/Doxyfile-dev_mem
index f7d12151f316..90e1f469047f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mem
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mem
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mfi b/tools/kerneldoc/subsys/Doxyfile-dev_mfi
index f986c08d789c..922a179ed83f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mfi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mfi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mge b/tools/kerneldoc/subsys/Doxyfile-dev_mge
index 254e0749eead..8c1590afcfd2 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mii b/tools/kerneldoc/subsys/Doxyfile-dev_mii
index abf9d3cae259..cbaf89d908bf 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mii
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mii
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mlx b/tools/kerneldoc/subsys/Doxyfile-dev_mlx
index afbaac9f4f71..6585f845c459 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mlx
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mlx
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mlx4 b/tools/kerneldoc/subsys/Doxyfile-dev_mlx4
index b361d115d5c3..3fffbc9fbb29 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mlx4
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mlx4
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mlx5 b/tools/kerneldoc/subsys/Doxyfile-dev_mlx5
index 630e80b764f4..47b4c58d1659 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mlx5
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mlx5
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mmc b/tools/kerneldoc/subsys/Doxyfile-dev_mmc
index a3df81b32cb8..afd7b30501ad 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mmc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mmc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mmcnull b/tools/kerneldoc/subsys/Doxyfile-dev_mmcnull
index b8661444fa8a..d4ea1decdf0d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mmcnull
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mmcnull
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mn b/tools/kerneldoc/subsys/Doxyfile-dev_mn
index 2d25f7cefb07..bc5d33356e42 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mn
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mn
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mpr b/tools/kerneldoc/subsys/Doxyfile-dev_mpr
index d63e8a6f28ae..4c460122241e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mpr
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mpr
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mps b/tools/kerneldoc/subsys/Doxyfile-dev_mps
index aec660939a5a..27d1526ef30f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mps
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mps
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mpt b/tools/kerneldoc/subsys/Doxyfile-dev_mpt
index 1db15f6b6993..7cd7ace1ed6b 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mpt
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mpt
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mrsas b/tools/kerneldoc/subsys/Doxyfile-dev_mrsas
index c372615f1c18..b0a46e689367 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mrsas
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mrsas
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_msk b/tools/kerneldoc/subsys/Doxyfile-dev_msk
index 75f23bd3e489..4db8a2607171 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_msk
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_msk
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mthca b/tools/kerneldoc/subsys/Doxyfile-dev_mthca
index 565a0d32b923..8d37a1cf5026 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mthca
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mthca
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mvs b/tools/kerneldoc/subsys/Doxyfile-dev_mvs
index 9861a70f57f5..e973fc1f3a9d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mvs
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mvs
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mwl b/tools/kerneldoc/subsys/Doxyfile-dev_mwl
index 3d37ad670eff..ef76aa9aaece 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mwl
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mwl
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_mxge b/tools/kerneldoc/subsys/Doxyfile-dev_mxge
index 12e8d4e78517..c1dda0a9733e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_mxge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_mxge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_my b/tools/kerneldoc/subsys/Doxyfile-dev_my
index 560ebdad64ee..1fd536f7c73e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_my
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_my
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nctgpio b/tools/kerneldoc/subsys/Doxyfile-dev_nctgpio
index 37d7d1852327..17005ae29653 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nctgpio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nctgpio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_neta b/tools/kerneldoc/subsys/Doxyfile-dev_neta
index 06c78640fa95..3c5fa722c1db 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_neta
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_neta
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_netfpga10g b/tools/kerneldoc/subsys/Doxyfile-dev_netfpga10g
index c4617f68e2e0..74cbb1080514 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_netfpga10g
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_netfpga10g
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_netmap b/tools/kerneldoc/subsys/Doxyfile-dev_netmap
index aa1845798ff6..ac9a0d34dca2 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_netmap
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_netmap
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nfe b/tools/kerneldoc/subsys/Doxyfile-dev_nfe
index d1522f22cbda..6cc35bff7644 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nfe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nfe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nfsmb b/tools/kerneldoc/subsys/Doxyfile-dev_nfsmb
index c15b4c64bea5..d31484346b8b 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nfsmb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nfsmb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nge b/tools/kerneldoc/subsys/Doxyfile-dev_nge
index f47318f74637..8b68f59c7a77 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nmdm b/tools/kerneldoc/subsys/Doxyfile-dev_nmdm
index 1ae77c763144..412500014f35 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nmdm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nmdm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ntb b/tools/kerneldoc/subsys/Doxyfile-dev_ntb
index 89e03822a543..d76db6cae0cb 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ntb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ntb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_null b/tools/kerneldoc/subsys/Doxyfile-dev_null
index ebfc33c7111d..a2c2be9a3f4a 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_null
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_null
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nvd b/tools/kerneldoc/subsys/Doxyfile-dev_nvd
index 960677caaea6..242335b4b7d7 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nvd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nvd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nvdimm b/tools/kerneldoc/subsys/Doxyfile-dev_nvdimm
index 464b59f961a2..89529498aa53 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nvdimm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nvdimm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nvme b/tools/kerneldoc/subsys/Doxyfile-dev_nvme
index fe09c9d6a61b..e6cf5d4791d0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nvme
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nvme
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nvram b/tools/kerneldoc/subsys/Doxyfile-dev_nvram
index 470ae1890e24..5eadcc9423c4 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nvram
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_nvram
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_nvram2env b/tools/kerneldoc/subsys/Doxyfile-dev_nvram2env
deleted file mode 100644
index 8398f855da62..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_nvram2env
+++ /dev/null
@@ -1,21 +0,0 @@
-# Doxyfile 1.5.2
-
-# $FreeBSD$
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = "FreeBSD kernel NVRAM2ENV device code"
-OUTPUT_DIRECTORY = $(DOXYGEN_DEST_PATH)/dev_nvram2env/
-EXTRACT_ALL = YES # for undocumented src, no warnings enabled
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = $(DOXYGEN_SRC_PATH)/dev/nvram2env/ \
- $(NOTREVIEWED)
-
-GENERATE_TAGFILE = dev_nvram2env/dev_nvram2env.tag
-
-@INCLUDE_PATH = $(DOXYGEN_INCLUDE_PATH)
-@INCLUDE = common-Doxyfile
-
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_oce b/tools/kerneldoc/subsys/Doxyfile-dev_oce
index 5aa2b1a636be..b9ce3479acf2 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_oce
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_oce
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ocs_fc b/tools/kerneldoc/subsys/Doxyfile-dev_ocs_fc
index dc7088ef4d96..dcf16f3c7171 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ocs_fc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ocs_fc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ofw b/tools/kerneldoc/subsys/Doxyfile-dev_ofw
index 182ac09a33fe..f9700f5bd6a0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ofw
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ofw
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_otus b/tools/kerneldoc/subsys/Doxyfile-dev_otus
index c0c87085e3b9..577d693af9d9 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_otus
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_otus
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ow b/tools/kerneldoc/subsys/Doxyfile-dev_ow
index 13a73e54e036..00344332b69f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ow
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ow
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pbio b/tools/kerneldoc/subsys/Doxyfile-dev_pbio
index 086595fd5fa8..22e91d02f65e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pbio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pbio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pccard b/tools/kerneldoc/subsys/Doxyfile-dev_pccard
index 28a5f9fac1dd..3205b4bb4c8d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pccard
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pccard
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pccbb b/tools/kerneldoc/subsys/Doxyfile-dev_pccbb
index 358d2e32d13a..2e1619d6bbdc 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pccbb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pccbb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pcf b/tools/kerneldoc/subsys/Doxyfile-dev_pcf
index 76e3758e4a78..8ac463d53483 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pcf
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pcf
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pci b/tools/kerneldoc/subsys/Doxyfile-dev_pci
index 6b6f96460ccf..e0f5328385b8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pci
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pci
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pms b/tools/kerneldoc/subsys/Doxyfile-dev_pms
index 2efb7e9eeaa9..9293f9cf0746 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pms
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pms
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_powermac_nvram b/tools/kerneldoc/subsys/Doxyfile-dev_powermac_nvram
index 02c56e815c76..95692aef8316 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_powermac_nvram
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_powermac_nvram
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ppbus b/tools/kerneldoc/subsys/Doxyfile-dev_ppbus
index 6b2c53b7abe2..04bf84c04e66 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ppbus
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ppbus
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ppc b/tools/kerneldoc/subsys/Doxyfile-dev_ppc
index 4ebc24224e34..dcb7122556f4 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ppc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ppc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_proto b/tools/kerneldoc/subsys/Doxyfile-dev_proto
index a09da9655f61..2756b402c508 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_proto
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_proto
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_psci b/tools/kerneldoc/subsys/Doxyfile-dev_psci
index ceb894ee8290..e018054d97a3 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_psci
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_psci
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pst b/tools/kerneldoc/subsys/Doxyfile-dev_pst
index daef47196cac..aaa49e4938c0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pst
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pst
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pty b/tools/kerneldoc/subsys/Doxyfile-dev_pty
index 32b3de53f517..b42bfe5ca281 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pty
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pty
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_puc b/tools/kerneldoc/subsys/Doxyfile-dev_puc
index 376196acf463..e46eb8dcb7ad 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_puc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_puc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_pwm b/tools/kerneldoc/subsys/Doxyfile-dev_pwm
index 7741437ff75f..2e12e706a138 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_pwm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_pwm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_qlnx b/tools/kerneldoc/subsys/Doxyfile-dev_qlnx
index 9ca69d4a5610..83aff08f2387 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_qlnx
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_qlnx
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_qlxgb b/tools/kerneldoc/subsys/Doxyfile-dev_qlxgb
index d8a30054516c..7b6afbe18f89 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_qlxgb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_qlxgb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_qlxgbe b/tools/kerneldoc/subsys/Doxyfile-dev_qlxgbe
index 1a14cdc18877..6ad748880e01 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_qlxgbe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_qlxgbe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_qlxge b/tools/kerneldoc/subsys/Doxyfile-dev_qlxge
index 510f8efd4343..bc21f5d96a62 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_qlxge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_qlxge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_quicc b/tools/kerneldoc/subsys/Doxyfile-dev_quicc
index 1baaa6cd5549..e6404bdc3b7c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_quicc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_quicc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ral b/tools/kerneldoc/subsys/Doxyfile-dev_ral
index b13eef8d094e..0c5ea2a55134 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ral
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ral
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_random b/tools/kerneldoc/subsys/Doxyfile-dev_random
index b6ba4cd7207f..72c0ed7825e6 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_random
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_random
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_rccgpio b/tools/kerneldoc/subsys/Doxyfile-dev_rccgpio
index 292adda05733..3f79a724e77e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_rccgpio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_rccgpio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_re b/tools/kerneldoc/subsys/Doxyfile-dev_re
index 36086f6a7ff0..1c909d6b506f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_re
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_re
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_rl b/tools/kerneldoc/subsys/Doxyfile-dev_rl
index f8d0a4a99d2a..b0ad53c956ee 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_rl
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_rl
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_rndtest b/tools/kerneldoc/subsys/Doxyfile-dev_rndtest
index ae1fb792a9c7..fc5ccbf52e9f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_rndtest
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_rndtest
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_rt b/tools/kerneldoc/subsys/Doxyfile-dev_rt
deleted file mode 100644
index 35efce958419..000000000000
--- a/tools/kerneldoc/subsys/Doxyfile-dev_rt
+++ /dev/null
@@ -1,21 +0,0 @@
-# Doxyfile 1.5.2
-
-# $FreeBSD$
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = "FreeBSD kernel RT device code"
-OUTPUT_DIRECTORY = $(DOXYGEN_DEST_PATH)/dev_rt/
-EXTRACT_ALL = YES # for undocumented src, no warnings enabled
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = $(DOXYGEN_SRC_PATH)/dev/rt/ \
- $(NOTREVIEWED)
-
-GENERATE_TAGFILE = dev_rt/dev_rt.tag
-
-@INCLUDE_PATH = $(DOXYGEN_INCLUDE_PATH)
-@INCLUDE = common-Doxyfile
-
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_rtwn b/tools/kerneldoc/subsys/Doxyfile-dev_rtwn
index a6b3d9affd71..8aee67176975 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_rtwn
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_rtwn
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_safe b/tools/kerneldoc/subsys/Doxyfile-dev_safe
index 2411869bfd41..2e8a3cf69346 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_safe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_safe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sbni b/tools/kerneldoc/subsys/Doxyfile-dev_sbni
index 2c1faac9c2f7..a57cd458558a 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sbni
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sbni
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_scc b/tools/kerneldoc/subsys/Doxyfile-dev_scc
index 218fbdce9ba9..481a8b18d94d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_scc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_scc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sdhci b/tools/kerneldoc/subsys/Doxyfile-dev_sdhci
index 1a112ee31096..b14d77129993 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sdhci
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sdhci
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sec b/tools/kerneldoc/subsys/Doxyfile-dev_sec
index c7360da52159..991d0a3f6110 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sec
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sec
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sfxge b/tools/kerneldoc/subsys/Doxyfile-dev_sfxge
index dffac3536896..5a9e8f9085fb 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sfxge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sfxge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sge b/tools/kerneldoc/subsys/Doxyfile-dev_sge
index 7ef3062d4101..fc591b20b9d8 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_siis b/tools/kerneldoc/subsys/Doxyfile-dev_siis
index 42756af2b07e..797416008b20 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_siis
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_siis
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sis b/tools/kerneldoc/subsys/Doxyfile-dev_sis
index 156a449f2a9a..4202405e6022 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sis
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sis
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sk b/tools/kerneldoc/subsys/Doxyfile-dev_sk
index e1a268cba565..d4840fbb9304 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sk
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sk
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_smartpqi b/tools/kerneldoc/subsys/Doxyfile-dev_smartpqi
index d23cc03d3e54..05f747f9a8eb 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_smartpqi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_smartpqi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_smbus b/tools/kerneldoc/subsys/Doxyfile-dev_smbus
index d14e3be5457e..a523766a9ba5 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_smbus
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_smbus
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_smc b/tools/kerneldoc/subsys/Doxyfile-dev_smc
index 505223f3f24e..e80ca91f141c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_smc
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_smc
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_snp b/tools/kerneldoc/subsys/Doxyfile-dev_snp
index 28dad8ccd302..dfff6a630ba5 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_snp
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_snp
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sound b/tools/kerneldoc/subsys/Doxyfile-dev_sound
index 724b6f9396f4..50020322ac15 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sound
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sound
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_speaker b/tools/kerneldoc/subsys/Doxyfile-dev_speaker
index 12e99a30ffdf..61bdf1108b6b 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_speaker
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_speaker
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_spibus b/tools/kerneldoc/subsys/Doxyfile-dev_spibus
index 3cbf4667f57f..5a85036b6651 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_spibus
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_spibus
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ste b/tools/kerneldoc/subsys/Doxyfile-dev_ste
index 432d4980cf61..f073dc2ab484 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ste
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ste
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_stge b/tools/kerneldoc/subsys/Doxyfile-dev_stge
index c21e710db74e..51d009c3b82d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_stge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_stge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_sym b/tools/kerneldoc/subsys/Doxyfile-dev_sym
index 2421632a63a8..ef84973ae671 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_sym
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_sym
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_syscons b/tools/kerneldoc/subsys/Doxyfile-dev_syscons
index c8d5da3f17ad..5f70527d4cea 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_syscons
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_syscons
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_tcp_log b/tools/kerneldoc/subsys/Doxyfile-dev_tcp_log
index 044182d54f84..24c7f88d5846 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_tcp_log
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_tcp_log
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_tdfx b/tools/kerneldoc/subsys/Doxyfile-dev_tdfx
index 3f5c6e24a35f..1fca5b99490e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_tdfx
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_tdfx
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_terasic b/tools/kerneldoc/subsys/Doxyfile-dev_terasic
index fcbc10ef42fe..e3a8995eb071 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_terasic
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_terasic
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_ti b/tools/kerneldoc/subsys/Doxyfile-dev_ti
index 402697655f83..4cbbde0cc8bf 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_ti
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_ti
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_tpm b/tools/kerneldoc/subsys/Doxyfile-dev_tpm
index 673dbd0cc50b..fbba66dc456d 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_tpm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_tpm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_tsec b/tools/kerneldoc/subsys/Doxyfile-dev_tsec
index 46e4742334ba..50ed39369001 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_tsec
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_tsec
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_twe b/tools/kerneldoc/subsys/Doxyfile-dev_twe
index 7b8af559fbc3..d79c6fc91244 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_twe
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_twe
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_tws b/tools/kerneldoc/subsys/Doxyfile-dev_tws
index 919f4f167d2c..73a28c191912 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_tws
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_tws
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_uart b/tools/kerneldoc/subsys/Doxyfile-dev_uart
index e48799b8e20a..431bbe7994ef 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_uart
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_uart
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_usb b/tools/kerneldoc/subsys/Doxyfile-dev_usb
index ad84bb5fa278..937bec5e4f3b 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_usb
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_usb
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_veriexec b/tools/kerneldoc/subsys/Doxyfile-dev_veriexec
index adc0e41374d2..ac2ec0293ed4 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_veriexec
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_veriexec
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_vge b/tools/kerneldoc/subsys/Doxyfile-dev_vge
index 27a5ef9758a3..3b785a1ff918 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_vge
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_vge
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_viapm b/tools/kerneldoc/subsys/Doxyfile-dev_viapm
index c640452f5220..ca5568730188 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_viapm
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_viapm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_viawd b/tools/kerneldoc/subsys/Doxyfile-dev_viawd
index 2827352f27c4..4134b15f9103 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_viawd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_viawd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_videomode b/tools/kerneldoc/subsys/Doxyfile-dev_videomode
index 7c6eec454e68..34dd586fad56 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_videomode
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_videomode
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_virtio b/tools/kerneldoc/subsys/Doxyfile-dev_virtio
index 081d16f539a9..e3ec3ee19e55 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_virtio
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_virtio
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_vkbd b/tools/kerneldoc/subsys/Doxyfile-dev_vkbd
index 40ed99d57db4..1692fe0ab0cf 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_vkbd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_vkbd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_vmware b/tools/kerneldoc/subsys/Doxyfile-dev_vmware
index fc77b0cf80ca..abc74988bba1 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_vmware
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_vmware
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_vnic b/tools/kerneldoc/subsys/Doxyfile-dev_vnic
index a41df5263450..ba72dc179fb0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_vnic
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_vnic
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_vr b/tools/kerneldoc/subsys/Doxyfile-dev_vr
index 96838db5d3ff..e3d48a9cd60c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_vr
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_vr
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_vt b/tools/kerneldoc/subsys/Doxyfile-dev_vt
index 48eae34d1a2b..1f51a469c0a0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_vt
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_vt
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_vte b/tools/kerneldoc/subsys/Doxyfile-dev_vte
index 3662cb43446f..d080102cab26 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_vte
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_vte
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_watchdog b/tools/kerneldoc/subsys/Doxyfile-dev_watchdog
index 7bbf81eb44f7..83de2ab13605 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_watchdog
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_watchdog
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_wbwd b/tools/kerneldoc/subsys/Doxyfile-dev_wbwd
index ec855581cb6b..64fd8734495f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_wbwd
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_wbwd
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_wpi b/tools/kerneldoc/subsys/Doxyfile-dev_wpi
index 5d444f524b0d..b722fa896400 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_wpi
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_wpi
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_wtap b/tools/kerneldoc/subsys/Doxyfile-dev_wtap
index 8ec37ac6d2ab..2181979d1027 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_wtap
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_wtap
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_xdma b/tools/kerneldoc/subsys/Doxyfile-dev_xdma
index f394ac7eb635..50bf4c7235b3 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_xdma
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_xdma
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_xen b/tools/kerneldoc/subsys/Doxyfile-dev_xen
index 9ecea22a6037..ab111e79778f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_xen
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_xen
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_xilinx b/tools/kerneldoc/subsys/Doxyfile-dev_xilinx
index 3b863fd5bd55..559958a4eff5 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_xilinx
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_xilinx
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-dev_xl b/tools/kerneldoc/subsys/Doxyfile-dev_xl
index 6890f1bbd890..d33cfdf9bc5f 100644
--- a/tools/kerneldoc/subsys/Doxyfile-dev_xl
+++ b/tools/kerneldoc/subsys/Doxyfile-dev_xl
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-geom b/tools/kerneldoc/subsys/Doxyfile-geom
index d7e4041f13c9..a16015694623 100644
--- a/tools/kerneldoc/subsys/Doxyfile-geom
+++ b/tools/kerneldoc/subsys/Doxyfile-geom
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-kern b/tools/kerneldoc/subsys/Doxyfile-kern
index 87f3c5a4e277..3a64cfca42f0 100644
--- a/tools/kerneldoc/subsys/Doxyfile-kern
+++ b/tools/kerneldoc/subsys/Doxyfile-kern
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-libkern b/tools/kerneldoc/subsys/Doxyfile-libkern
index f0f38d6caa96..98e45581d99c 100644
--- a/tools/kerneldoc/subsys/Doxyfile-libkern
+++ b/tools/kerneldoc/subsys/Doxyfile-libkern
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-linux b/tools/kerneldoc/subsys/Doxyfile-linux
index a239d55496a7..7a8855abd5b5 100644
--- a/tools/kerneldoc/subsys/Doxyfile-linux
+++ b/tools/kerneldoc/subsys/Doxyfile-linux
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-net80211 b/tools/kerneldoc/subsys/Doxyfile-net80211
index 7e622cf937d3..f9ce81e4ca06 100644
--- a/tools/kerneldoc/subsys/Doxyfile-net80211
+++ b/tools/kerneldoc/subsys/Doxyfile-net80211
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-netgraph b/tools/kerneldoc/subsys/Doxyfile-netgraph
index 585725edfb60..e75d96d0b262 100644
--- a/tools/kerneldoc/subsys/Doxyfile-netgraph
+++ b/tools/kerneldoc/subsys/Doxyfile-netgraph
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-netinet b/tools/kerneldoc/subsys/Doxyfile-netinet
index c9ed7e0df09a..86bdfb5ee3ad 100644
--- a/tools/kerneldoc/subsys/Doxyfile-netinet
+++ b/tools/kerneldoc/subsys/Doxyfile-netinet
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-netinet6 b/tools/kerneldoc/subsys/Doxyfile-netinet6
index 0c9e5d2bf0c9..d714b54210d7 100644
--- a/tools/kerneldoc/subsys/Doxyfile-netinet6
+++ b/tools/kerneldoc/subsys/Doxyfile-netinet6
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-netipsec b/tools/kerneldoc/subsys/Doxyfile-netipsec
index 75f4685e0a6a..52105e50f176 100644
--- a/tools/kerneldoc/subsys/Doxyfile-netipsec
+++ b/tools/kerneldoc/subsys/Doxyfile-netipsec
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-opencrypto b/tools/kerneldoc/subsys/Doxyfile-opencrypto
index d27501b5bf08..fc334a2f6551 100644
--- a/tools/kerneldoc/subsys/Doxyfile-opencrypto
+++ b/tools/kerneldoc/subsys/Doxyfile-opencrypto
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-vm b/tools/kerneldoc/subsys/Doxyfile-vm
index daa4224db367..9574acc4607e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-vm
+++ b/tools/kerneldoc/subsys/Doxyfile-vm
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Doxyfile-xen b/tools/kerneldoc/subsys/Doxyfile-xen
index 51b59f7003f5..8eee91f1156e 100644
--- a/tools/kerneldoc/subsys/Doxyfile-xen
+++ b/tools/kerneldoc/subsys/Doxyfile-xen
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/Makefile b/tools/kerneldoc/subsys/Makefile
index b8397f810a0f..f8101d73b3e1 100644
--- a/tools/kerneldoc/subsys/Makefile
+++ b/tools/kerneldoc/subsys/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
_ALL!= cd ${.CURDIR} && ls Doxyfile-*
diff --git a/tools/kerneldoc/subsys/README b/tools/kerneldoc/subsys/README
index 9a70bf0b577e..6679d5cb9055 100644
--- a/tools/kerneldoc/subsys/README
+++ b/tools/kerneldoc/subsys/README
@@ -29,4 +29,3 @@ Programs needed to generate the API docs:
- graphics/graphviz
--
-$FreeBSD$
diff --git a/tools/kerneldoc/subsys/common-Doxyfile b/tools/kerneldoc/subsys/common-Doxyfile
index 36cb92bd6fa6..8e194c85e621 100644
--- a/tools/kerneldoc/subsys/common-Doxyfile
+++ b/tools/kerneldoc/subsys/common-Doxyfile
@@ -1,7 +1,5 @@
# Doxyfile 1.5.2
-# $FreeBSD$
-
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
diff --git a/tools/kerneldoc/subsys/notreviewed.dox b/tools/kerneldoc/subsys/notreviewed.dox
index bcc4bed1f61a..29a868e27c1f 100644
--- a/tools/kerneldoc/subsys/notreviewed.dox
+++ b/tools/kerneldoc/subsys/notreviewed.dox
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/** @mainpage
* <b>IMPORTANT:</b> This API documentation may contain both functions which
diff --git a/tools/lua/template.lua b/tools/lua/template.lua
index 3662953b0f2e..6c7d33c8ab0f 100644
--- a/tools/lua/template.lua
+++ b/tools/lua/template.lua
@@ -28,7 +28,6 @@ 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.
]]--
--- $FreeBSD$
local setmetatable = setmetatable
local loadstring = loadstring
diff --git a/tools/make_libdeps.sh b/tools/make_libdeps.sh
index 77525093bbd7..648dc1589b59 100644
--- a/tools/make_libdeps.sh
+++ b/tools/make_libdeps.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
export PATH=/bin:/usr/bin
diff --git a/tools/pkgbase/README.md b/tools/pkgbase/README.md
index 98bb37ed32e1..e81fc49c843f 100644
--- a/tools/pkgbase/README.md
+++ b/tools/pkgbase/README.md
@@ -1,4 +1,4 @@
-`metalog.lua` is a script that reads METALOG file created by pkgbase
+`metalog_reader.lua` is a script that reads METALOG file created by pkgbase
(make packages) and generates reports about the installed system
and issues
diff --git a/tools/pkgbase/metalog_reader.lua b/tools/pkgbase/metalog_reader.lua
index c3b5b6039873..6a5b33f308ae 100644
--- a/tools/pkgbase/metalog_reader.lua
+++ b/tools/pkgbase/metalog_reader.lua
@@ -1,6 +1,6 @@
#!/usr/libexec/flua
--- SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+-- SPDX-License-Identifier: BSD-2-Clause
--
-- Copyright(c) 2020 The FreeBSD Foundation.
--
@@ -25,7 +25,6 @@
-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-- SUCH DAMAGE.
--- $FreeBSD$
function main(args)
if #args == 0 then usage() end
@@ -86,13 +85,14 @@ function main(args)
local sess = Analysis_session(filename, verbose, w_notagdirs)
+ local errors
if printall then
io.write('--- PACKAGE REPORTS ---\n')
io.write(sess.pkg_report_full())
io.write('--- LINTING REPORTS ---\n')
- print_lints(sess)
+ errors = print_lints(sess)
elseif checkonly then
- print_lints(sess)
+ errors = print_lints(sess)
elseif pkgonly then
io.write(sess.pkg_report_simple(dcount, dsize, {
fuid and sess.pkg_issetuid or nil,
@@ -103,6 +103,10 @@ function main(args)
io.stderr:write('This text should not be displayed.')
usage()
end
+
+ if errors then
+ return 1
+ end
end
--- @param man boolean
@@ -151,6 +155,7 @@ function print_lints(sess)
local inodewarn, inodeerr = sess.inode_report()
io.write(inodewarn)
io.write(inodeerr)
+ return #duperr > 0 or #inodeerr > 0
end
--- @param t table
@@ -257,6 +262,7 @@ end
--- @param verbose boolean
--- @param w_notagdirs boolean turn on to also check directories
function Analysis_session(metalog, verbose, w_notagdirs)
+ local stage_root = {}
local files = {} -- map<string, MetalogRow[]>
-- set is map<elem, bool>. if bool is true then elem exists
local pkgs = {} -- map<string, set<string>>
@@ -385,11 +391,17 @@ function Analysis_session(metalog, verbose, w_notagdirs)
if #rows == 1 then goto continue end
local iseq, offby = metalogrows_all_equal(rows)
if iseq then -- repeated line, just a warning
- warn[#warn+1] = 'warning: '..filename
- ..' repeated with same meta: line '
- ..table.concat(
- table_map(rows, function(e) return e.linenum end), ',')
- warn[#warn+1] = '\n'
+ local dupmsg = filename .. ' ' ..
+ rows[1].attrs.type ..
+ ' repeated with same meta: line ' ..
+ table.concat(table_map(rows, function(e) return e.linenum end), ',')
+ if rows[1].attrs.type == "dir" then
+ if verbose then
+ warn[#warn+1] = 'warning: ' .. dupmsg .. '\n'
+ end
+ else
+ errs[#errs+1] = 'error: ' .. dupmsg .. '\n'
+ end
elseif not metalogrows_all_equal(rows, false, true) then
-- same filename (possibly different tags), different metadata, an error
errs[#errs+1] = 'error: '..filename
@@ -418,17 +430,14 @@ function Analysis_session(metalog, verbose, w_notagdirs)
if files[filename][1].attrs.type ~= 'file' then
goto continue
end
- -- make ./xxx become /xxx so that we can stat
- filename = filename:sub(2)
- local fs = attributes(filename)
+ local fs = attributes(stage_root .. filename)
if fs == nil then
unstatables[#unstatables+1] = filename
goto continue
end
local inode = fs.ino
inm[inode] = inm[inode] or {}
- -- add back the dot prefix
- table.insert(inm[inode], '.'..filename)
+ table.insert(inm[inode], filename)
::continue::
end
@@ -462,6 +471,9 @@ function Analysis_session(metalog, verbose, w_notagdirs)
return table.concat(warn, ''), table.concat(errs, '')
end
+ -- The METALOG file is assumed to be at the top of the stage directory.
+ stage_root = string.gsub(metalog, '/[^/]*$', '/')
+
do
local fp, errmsg, errcode = io.open(metalog, 'r')
if fp == nil then
@@ -518,4 +530,4 @@ function Analysis_session(metalog, verbose, w_notagdirs)
}
end
-main(arg)
+os.exit(main(arg))
diff --git a/tools/regression/README b/tools/regression/README
index a2de3721f834..21db27d9d9aa 100644
--- a/tools/regression/README
+++ b/tools/regression/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This directory is for regression test programs.
diff --git a/tools/regression/TODO b/tools/regression/TODO
index e8fb9f73c673..22fcf55cf295 100644
--- a/tools/regression/TODO
+++ b/tools/regression/TODO
@@ -1,4 +1,3 @@
-$FreeBSD$
---
A lot of the tests written in C use assert(), only printing 'ok' at the end
diff --git a/tools/regression/aio/aiop/Makefile b/tools/regression/aio/aiop/Makefile
index aac9a3b89e45..e5d835cb2763 100644
--- a/tools/regression/aio/aiop/Makefile
+++ b/tools/regression/aio/aiop/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= aiop
MAN=
diff --git a/tools/regression/aio/aiop/aiop.c b/tools/regression/aio/aiop/aiop.c
index 36fe3463d465..4b6bc986600b 100644
--- a/tools/regression/aio/aiop/aiop.c
+++ b/tools/regression/aio/aiop/aiop.c
@@ -38,9 +38,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/disk.h>
#include <sys/ioctl.h>
diff --git a/tools/regression/atm/Funcs.sh b/tools/regression/atm/Funcs.sh
deleted file mode 100644
index c981f101df94..000000000000
--- a/tools/regression/atm/Funcs.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-fatal() {
- echo -e "$*" >&2
- exit 1
-}
-
-msg() {
- echo -e "$*" >&2
-}
-
-usage1() {
- msg "Usage: RunTest.sh [-hq] [-b <localbase>]"
- msg "Options:"
- msg " -h show this info"
- msg " -b <localbase> localbase if not /usr/local"
- msg " -q be quite"
- msg " -u run user space test, not kernel"
- exit 0
-}
-
-parse_options() {
- args=`getopt b:hqu $*`
- if [ $? -ne 0 ] ; then
- fatal "Usage: $0 [-qu] [-b <localbase>]"
- fi
-
- options=""
- set -- $args
- for i
- do
- case "$i"
- in
-
- -h) usage1;;
- -u|-q) options="$options $i"; shift;;
- -b) LOCALBASE="$2"; shift; shift;;
- --) shift; break;;
- esac
- done
-
- if [ "$LOCALBASE" = "" ] ; then
- LOCALBASE="/usr/local"
-
- pkg_info -I atmsupport-\* 2>/dev/null >/dev/null
- if [ $? -ne 0 ] ; then
- fatal "Atmsupport package not installed. \
-Goto /usr/ports/net/atmsupport,\ntype 'make ; make install ; make clean' \
-and re-run this script"
- fi
- fi
-}
diff --git a/tools/regression/atm/README b/tools/regression/atm/README
deleted file mode 100644
index 4c7f28a15a11..000000000000
--- a/tools/regression/atm/README
+++ /dev/null
@@ -1,14 +0,0 @@
-$FreeBSD$
-
-This directory contains tests for the ATM stuff. All tests can be run
-from the top-level or from their sub-directories by starting RunTest.sh.
-
-These tests require ports/net/atmsupport to be installed - the
-scripts will remind you if they cannot find the package.
-
-proto_sscfu test suite for the SSCF at the user interface
-proto_sscop test suite for the SSCOP protocol
-proto_uni test suite for the UNI protocol
-proto_cc test suite for the call control function
-
-harti@freebsd.org
diff --git a/tools/regression/atm/RunTest.sh b/tools/regression/atm/RunTest.sh
deleted file mode 100644
index 90f69658d4aa..000000000000
--- a/tools/regression/atm/RunTest.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. ./Funcs.sh
-
-#
-# Just check the legality of the options and pass them along
-#
-args=`getopt b:hq $*`
-if [ $? -ne 0 ] ; then
- fatal "Usage: $0 [-q] [-b <localbase>]"
-fi
-
-usage() {
- msg "Usage: RunTest.sh [-hq] [-b <localbase>]"
- msg "Options:"
- msg " -h show this info"
- msg " -b <localbase> localbase if not /usr/local"
- msg " -q be quite"
- exit 0
-}
-
-options=""
-set -- $args
-for i
-do
- case "$i"
- in
-
- -h) usage;;
- -b) options="$options $i $2" ; shift; shift;;
- -q) options="$options $i" ; shift;;
- --) shift; break;;
- esac
-done
-
-(cd proto_sscop ; sh ./RunTest.sh -u $options)
-(cd proto_sscfu ; sh ./RunTest.sh -u $options)
-(cd proto_uni ; sh ./RunTest.sh -u $options)
-(cd proto_cc ; sh ./RunTest.sh -u $options)
-
-(cd proto_sscop ; sh ./RunTest.sh $options)
-(cd proto_sscfu ; sh ./RunTest.sh $options)
-(cd proto_uni ; sh ./RunTest.sh $options)
-(cd proto_cc ; sh ./RunTest.sh $options)
diff --git a/tools/regression/atm/proto_cc/RunTest.sh b/tools/regression/atm/proto_cc/RunTest.sh
deleted file mode 100644
index f6c7ce00d336..000000000000
--- a/tools/regression/atm/proto_cc/RunTest.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. ../Funcs.sh
-
-parse_options $*
-
-DATA=$LOCALBASE/share/atmsupport/testsuite_cc
-
-$LOCALBASE/bin/ats_cc $options $DATA/CC_Funcs $DATA/CC_??_??
diff --git a/tools/regression/atm/proto_sscfu/RunTest.sh b/tools/regression/atm/proto_sscfu/RunTest.sh
deleted file mode 100644
index 2f0865937224..000000000000
--- a/tools/regression/atm/proto_sscfu/RunTest.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. ../Funcs.sh
-
-parse_options $*
-
-DATA=$LOCALBASE/share/atmsupport/testsuite_sscfu
-
-$LOCALBASE/bin/ats_sscfu $options $DATA/Funcs $DATA/EST* $DATA/REL* \
-$DATA/REC* $DATA/RES* $DATA/DATA* $DATA/UDATA*
diff --git a/tools/regression/atm/proto_sscop/RunTest.sh b/tools/regression/atm/proto_sscop/RunTest.sh
deleted file mode 100644
index 60812deeb6ed..000000000000
--- a/tools/regression/atm/proto_sscop/RunTest.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. ../Funcs.sh
-
-parse_options $*
-
-DATA=$LOCALBASE/share/atmsupport/testsuite_sscop
-
-$LOCALBASE/bin/ats_sscop $options $DATA/Funcs $DATA/S*
diff --git a/tools/regression/atm/proto_uni/RunTest.sh b/tools/regression/atm/proto_uni/RunTest.sh
deleted file mode 100644
index 8b9c9e5e38c9..000000000000
--- a/tools/regression/atm/proto_uni/RunTest.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. ../Funcs.sh
-
-parse_options $*
-
-DATA=$LOCALBASE/share/atmsupport/testsuite_uni
-
-$LOCALBASE/bin/ats_sig $options $DATA/Funcs $DATA/L3MU_Funcs $DATA/Restart.??? \
- $DATA/Unknown.??? $DATA/Incoming.??? $DATA/MpOut.??? $DATA/MpIn.??? \
- $DATA/L???_??_??
diff --git a/tools/regression/audit/audit_pipe_ioctl/Makefile b/tools/regression/audit/audit_pipe_ioctl/Makefile
index 083e25d35d9f..04ccfe596bb8 100644
--- a/tools/regression/audit/audit_pipe_ioctl/Makefile
+++ b/tools/regression/audit/audit_pipe_ioctl/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= audit_pipe_ioctl
diff --git a/tools/regression/audit/audit_pipe_ioctl/audit_pipe_ioctl.c b/tools/regression/audit/audit_pipe_ioctl/audit_pipe_ioctl.c
index 7594ca843259..ca8cc8f302b3 100644
--- a/tools/regression/audit/audit_pipe_ioctl/audit_pipe_ioctl.c
+++ b/tools/regression/audit/audit_pipe_ioctl/audit_pipe_ioctl.c
@@ -24,8 +24,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/bpf/Makefile b/tools/regression/bpf/Makefile
index 8fac0b461be7..7bb25728d9ff 100644
--- a/tools/regression/bpf/Makefile
+++ b/tools/regression/bpf/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= bpf_filter
.include <bsd.subdir.mk>
diff --git a/tools/regression/bpf/bpf_filter/Makefile b/tools/regression/bpf/bpf_filter/Makefile
index e01a54e26cb3..4daecb73ebcb 100644
--- a/tools/regression/bpf/bpf_filter/Makefile
+++ b/tools/regression/bpf/bpf_filter/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
TEST_CASES?= test0001 test0002 test0003 test0004 \
test0005 test0006 test0007 test0008 \
test0009 test0010 test0011 test0012 \
@@ -65,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/bpf/bpf_filter/bpf_test.c b/tools/regression/bpf/bpf_filter/bpf_test.c
index b62ca774d21d..b3fd88befdb4 100644
--- a/tools/regression/bpf/bpf_filter/bpf_test.c
+++ b/tools/regression/bpf/bpf_filter/bpf_test.c
@@ -24,8 +24,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/tools/regression/bpf/bpf_filter/tests/test0001.h b/tools/regression/bpf/bpf_filter/tests/test0001.h
index 5640f9a1cb22..79c40d34d822 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0001.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0001.h
@@ -1,7 +1,5 @@
/*-
* Test 0001: Catch illegal instruction.
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0002.h b/tools/regression/bpf/bpf_filter/tests/test0002.h
index 15935505d849..d687e253dbb0 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0002.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0002.h
@@ -1,7 +1,5 @@
/*-
* Test 0002: BPF_RET+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0003.h b/tools/regression/bpf/bpf_filter/tests/test0003.h
index 9ab083a48623..a85f19da4500 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0003.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0003.h
@@ -1,7 +1,5 @@
/*-
* Test 0003: BPF_LD+BPF_IMM & BPF_RET+BPF_A
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0004.h b/tools/regression/bpf/bpf_filter/tests/test0004.h
index 7eb42a125ca3..06440b0dd963 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0004.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0004.h
@@ -1,7 +1,5 @@
/*-
* Test 0004: BPF_LD+BPF_W+BPF_ABS
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0005.h b/tools/regression/bpf/bpf_filter/tests/test0005.h
index 4dae935d1357..e4be9aec98c7 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0005.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0005.h
@@ -1,7 +1,5 @@
/*-
* Test 0005: BPF_LD+BPF_H+BPF_ABS
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0006.h b/tools/regression/bpf/bpf_filter/tests/test0006.h
index 2c7485db6ad7..65fd5dabf028 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0006.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0006.h
@@ -1,7 +1,5 @@
/*-
* Test 0006: BPF_LD+BPF_B+BPF_ABS
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0007.h b/tools/regression/bpf/bpf_filter/tests/test0007.h
index 026c6f7d9725..b8197c73b67d 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0007.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0007.h
@@ -1,7 +1,5 @@
/*-
* Test 0007: BPF_LD+BPF_W+BPF_LEN
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0008.h b/tools/regression/bpf/bpf_filter/tests/test0008.h
index 80e1eb0f812b..ebedc35e7059 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0008.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0008.h
@@ -1,7 +1,5 @@
/*-
* Test 0008: BPF_LDX+BPF_W+BPF_LEN & BPF_MISC+BPF_TXA
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0009.h b/tools/regression/bpf/bpf_filter/tests/test0009.h
index 7053450c4893..38fc482d9359 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0009.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0009.h
@@ -1,7 +1,5 @@
/*-
* Test 0009: BPF_LDX+BPF_IMM & BPF_LD+BPF_W+BPF_IND
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0010.h b/tools/regression/bpf/bpf_filter/tests/test0010.h
index 8377804d4abb..bd1161a926d1 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0010.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0010.h
@@ -1,7 +1,5 @@
/*-
* Test 0010: BPF_LD+BPF_H+BPF_IND
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0011.h b/tools/regression/bpf/bpf_filter/tests/test0011.h
index 057c224eaec4..64e26089ab3a 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0011.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0011.h
@@ -1,7 +1,5 @@
/*-
* Test 0011: BPF_LD+BPF_B+BPF_IND
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0012.h b/tools/regression/bpf/bpf_filter/tests/test0012.h
index b1ef2b73da7d..eb4b13be3988 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0012.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0012.h
@@ -1,7 +1,5 @@
/*-
* Test 0012: BPF_LDX+BPF_MSH+BPF_B
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0013.h b/tools/regression/bpf/bpf_filter/tests/test0013.h
index 004e517b3296..64f8d8357eed 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0013.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0013.h
@@ -1,7 +1,5 @@
/*-
* Test 0013: BPF_ST & BPF_LDX+BPF_MEM
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0014.h b/tools/regression/bpf/bpf_filter/tests/test0014.h
index ff1799f29eb1..d4f4918b28e4 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0014.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0014.h
@@ -1,7 +1,5 @@
/*-
* Test 0014: BPF_STX & BPF_LD+BPF_MEM
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0015.h b/tools/regression/bpf/bpf_filter/tests/test0015.h
index 903f7325d772..4cb097bf721c 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0015.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0015.h
@@ -1,7 +1,5 @@
/*-
* Test 0015: BPF_JMP+BPF_JA
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0016.h b/tools/regression/bpf/bpf_filter/tests/test0016.h
index eeb26fa7b33c..a1d9bb76fd38 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0016.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0016.h
@@ -1,7 +1,5 @@
/*-
* Test 0016: BPF_JMP+BPF_JGT+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0017.h b/tools/regression/bpf/bpf_filter/tests/test0017.h
index 7a38d06940f2..7df1e3c3f565 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0017.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0017.h
@@ -1,7 +1,5 @@
/*-
* Test 0017: BPF_JMP+BPF_JGE+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0018.h b/tools/regression/bpf/bpf_filter/tests/test0018.h
index 11f3927c4e72..738eff861aea 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0018.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0018.h
@@ -1,7 +1,5 @@
/*-
* Test 0018: BPF_JMP+BPF_JEQ+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0019.h b/tools/regression/bpf/bpf_filter/tests/test0019.h
index a2c27c08403c..00e91eb59af8 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0019.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0019.h
@@ -1,7 +1,5 @@
/*-
* Test 0019: BPF_JMP+BPF_JSET+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0020.h b/tools/regression/bpf/bpf_filter/tests/test0020.h
index 58384c66a875..bee47e183094 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0020.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0020.h
@@ -1,7 +1,5 @@
/*-
* Test 0020: BPF_JMP+BPF_JGT+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0021.h b/tools/regression/bpf/bpf_filter/tests/test0021.h
index da092b8abb78..af0fae31f45d 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0021.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0021.h
@@ -1,7 +1,5 @@
/*-
* Test 0021: BPF_JMP+BPF_JGE+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0022.h b/tools/regression/bpf/bpf_filter/tests/test0022.h
index 9fa0d94b32d1..a94790cdb5a3 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0022.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0022.h
@@ -1,7 +1,5 @@
/*-
* Test 0022: BPF_JMP+BPF_JEQ+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0023.h b/tools/regression/bpf/bpf_filter/tests/test0023.h
index ac9bf25e6c85..b4d8d8394d23 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0023.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0023.h
@@ -1,7 +1,5 @@
/*-
* Test 0023: BPF_JMP+BPF_JSET+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0024.h b/tools/regression/bpf/bpf_filter/tests/test0024.h
index 511378e7a781..a41ef400a40c 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0024.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0024.h
@@ -1,7 +1,5 @@
/*-
* Test 0024: BPF_ALU+BPF_ADD+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0025.h b/tools/regression/bpf/bpf_filter/tests/test0025.h
index 91acfe47536a..ac0581b2f6e1 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0025.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0025.h
@@ -1,7 +1,5 @@
/*-
* Test 0025: BPF_ALU+BPF_SUB+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0026.h b/tools/regression/bpf/bpf_filter/tests/test0026.h
index f881c0f8eb46..a0f2a31af66f 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0026.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0026.h
@@ -1,7 +1,5 @@
/*-
* Test 0026: BPF_ALU+BPF_MUL+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0027.h b/tools/regression/bpf/bpf_filter/tests/test0027.h
index bf41904368eb..54756fbbd313 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0027.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0027.h
@@ -1,7 +1,5 @@
/*-
* Test 0027: BPF_ALU+BPF_DIV+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0028.h b/tools/regression/bpf/bpf_filter/tests/test0028.h
index f205e143ca13..47bf4d7f1fe8 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0028.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0028.h
@@ -1,7 +1,5 @@
/*-
* Test 0028: BPF_ALU+BPF_AND+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0029.h b/tools/regression/bpf/bpf_filter/tests/test0029.h
index f9a26a9d86f8..dbbd0276fcb8 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0029.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0029.h
@@ -1,7 +1,5 @@
/*-
* Test 0029: BPF_ALU+BPF_OR+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0030.h b/tools/regression/bpf/bpf_filter/tests/test0030.h
index 5574264d3eee..3cdccf13016d 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0030.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0030.h
@@ -1,7 +1,5 @@
/*-
* Test 0030: BPF_ALU+BPF_LSH+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0031.h b/tools/regression/bpf/bpf_filter/tests/test0031.h
index ff5fc1950a28..43afa36428b1 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0031.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0031.h
@@ -1,7 +1,5 @@
/*-
* Test 0031: BPF_ALU+BPF_RSH+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0032.h b/tools/regression/bpf/bpf_filter/tests/test0032.h
index 7bde40237394..c20a40d99726 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0032.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0032.h
@@ -1,7 +1,5 @@
/*-
* Test 0032: BPF_ALU+BPF_ADD+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0033.h b/tools/regression/bpf/bpf_filter/tests/test0033.h
index 615021839522..c7066c24a5a5 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0033.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0033.h
@@ -1,7 +1,5 @@
/*-
* Test 0033: BPF_ALU+BPF_SUB+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0034.h b/tools/regression/bpf/bpf_filter/tests/test0034.h
index 0219eb025478..37674d8ca11a 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0034.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0034.h
@@ -1,7 +1,5 @@
/*-
* Test 0034: BPF_ALU+BPF_MUL+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0035.h b/tools/regression/bpf/bpf_filter/tests/test0035.h
index 0c6b69e3eaeb..3ebae2dad401 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0035.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0035.h
@@ -1,7 +1,5 @@
/*-
* Test 0035: BPF_ALU+BPF_DIV+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0036.h b/tools/regression/bpf/bpf_filter/tests/test0036.h
index 8bee25b78a74..d9014c98c25b 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0036.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0036.h
@@ -1,7 +1,5 @@
/*-
* Test 0036: BPF_ALU+BPF_AND+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0037.h b/tools/regression/bpf/bpf_filter/tests/test0037.h
index 66682c4ff8bf..722cb429ad66 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0037.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0037.h
@@ -1,7 +1,5 @@
/*-
* Test 0037: BPF_ALU+BPF_OR+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0038.h b/tools/regression/bpf/bpf_filter/tests/test0038.h
index b9307bb73966..71f041dd920b 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0038.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0038.h
@@ -1,7 +1,5 @@
/*-
* Test 0038: BPF_ALU+BPF_LSH+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0039.h b/tools/regression/bpf/bpf_filter/tests/test0039.h
index 51cfed53711c..710202eb9b09 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0039.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0039.h
@@ -1,7 +1,5 @@
/*-
* Test 0039: BPF_ALU+BPF_RSH+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0040.h b/tools/regression/bpf/bpf_filter/tests/test0040.h
index 11b71cd1c369..fc03b50d4cf7 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0040.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0040.h
@@ -1,7 +1,5 @@
/*-
* Test 0040: BPF_ALU+BPF_NEG
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0041.h b/tools/regression/bpf/bpf_filter/tests/test0041.h
index 28008de347d9..89455522a9eb 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0041.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0041.h
@@ -1,7 +1,5 @@
/*-
* Test 0041: BPF_MISC+BPF_TAX
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0042.h b/tools/regression/bpf/bpf_filter/tests/test0042.h
index c5b5928db85a..97c6cbe72a79 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0042.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0042.h
@@ -1,7 +1,5 @@
/*-
* Test 0042: Check boundary conditions (BPF_LD+BPF_W+BPF_ABS)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0043.h b/tools/regression/bpf/bpf_filter/tests/test0043.h
index be1855d3d892..5395faa4197c 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0043.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0043.h
@@ -1,7 +1,5 @@
/*-
* Test 0043: Check boundary conditions (BPF_LD+BPF_H+BPF_ABS)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0044.h b/tools/regression/bpf/bpf_filter/tests/test0044.h
index b46632ad802b..66084f599b92 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0044.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0044.h
@@ -1,7 +1,5 @@
/*-
* Test 0044: Check boundary conditions (BPF_LD+BPF_B+BPF_ABS)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0045.h b/tools/regression/bpf/bpf_filter/tests/test0045.h
index 97ae975ba37d..510e52ab1d00 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0045.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0045.h
@@ -1,7 +1,5 @@
/*-
* Test 0045: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0046.h b/tools/regression/bpf/bpf_filter/tests/test0046.h
index a45204d06b9e..cb8a44d89ecd 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0046.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0046.h
@@ -1,7 +1,5 @@
/*-
* Test 0046: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0047.h b/tools/regression/bpf/bpf_filter/tests/test0047.h
index f0d39d86dac2..7f0e883b36e0 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0047.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0047.h
@@ -1,7 +1,5 @@
/*-
* Test 0047: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0048.h b/tools/regression/bpf/bpf_filter/tests/test0048.h
index 6736d5a9fc29..2bdcb75b8dae 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0048.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0048.h
@@ -1,7 +1,5 @@
/*-
* Test 0048: Check boundary conditions (BPF_LDX+BPF_MSH+BPF_B)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0049.h b/tools/regression/bpf/bpf_filter/tests/test0049.h
index d4091998ad84..75d00c97a6e9 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0049.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0049.h
@@ -1,7 +1,5 @@
/*-
* Test 0049: Check boundary conditions (BPF_LD+BPF_W+BPF_ABS)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0050.h b/tools/regression/bpf/bpf_filter/tests/test0050.h
index 9a5dff68eea6..952c3fdb4109 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0050.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0050.h
@@ -1,7 +1,5 @@
/*-
* Test 0050: Check boundary conditions (BPF_LD+BPF_H+BPF_ABS)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0051.h b/tools/regression/bpf/bpf_filter/tests/test0051.h
index ab48c339e6d1..49306f27ab8d 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0051.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0051.h
@@ -1,7 +1,5 @@
/*-
* Test 0051: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0052.h b/tools/regression/bpf/bpf_filter/tests/test0052.h
index ec7016f67560..914dd6d16e19 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0052.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0052.h
@@ -1,7 +1,5 @@
/*-
* Test 0052: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0053.h b/tools/regression/bpf/bpf_filter/tests/test0053.h
index df81ce0e9209..ded72d61d912 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0053.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0053.h
@@ -1,7 +1,5 @@
/*-
* Test 0053: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0054.h b/tools/regression/bpf/bpf_filter/tests/test0054.h
index 45dd64ff36b5..0b43efe7db5c 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0054.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0054.h
@@ -1,7 +1,5 @@
/*-
* Test 0054: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0055.h b/tools/regression/bpf/bpf_filter/tests/test0055.h
index 4312102028db..13db5b9c581f 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0055.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0055.h
@@ -1,7 +1,5 @@
/*-
* Test 0055: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0056.h b/tools/regression/bpf/bpf_filter/tests/test0056.h
index cc3103db2fd4..359c44d350db 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0056.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0056.h
@@ -1,7 +1,5 @@
/*-
* Test 0056: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0057.h b/tools/regression/bpf/bpf_filter/tests/test0057.h
index ba355a3749eb..25a1b7dca804 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0057.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0057.h
@@ -1,7 +1,5 @@
/*-
* Test 0057: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0058.h b/tools/regression/bpf/bpf_filter/tests/test0058.h
index 9ea693ea8f03..9a530875903c 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0058.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0058.h
@@ -1,7 +1,5 @@
/*-
* Test 0058: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0059.h b/tools/regression/bpf/bpf_filter/tests/test0059.h
index 0292787f6ee5..bb2a43d716b5 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0059.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0059.h
@@ -1,7 +1,5 @@
/*-
* Test 0059: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0060.h b/tools/regression/bpf/bpf_filter/tests/test0060.h
index 6792fcf9c296..f9e3244c2cac 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0060.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0060.h
@@ -1,7 +1,5 @@
/*-
* Test 0060: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0061.h b/tools/regression/bpf/bpf_filter/tests/test0061.h
index f1557a16676d..79e6f0f6a413 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0061.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0061.h
@@ -1,7 +1,5 @@
/*-
* Test 0061: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0062.h b/tools/regression/bpf/bpf_filter/tests/test0062.h
index 5689b9c4a19e..1ec92aff3a91 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0062.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0062.h
@@ -1,7 +1,5 @@
/*-
* Test 0062: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0063.h b/tools/regression/bpf/bpf_filter/tests/test0063.h
index b9d666130532..068ad6b39f45 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0063.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0063.h
@@ -1,7 +1,5 @@
/*-
* Test 0063: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0064.h b/tools/regression/bpf/bpf_filter/tests/test0064.h
index 0f43c3690fe9..b2ac924e3561 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0064.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0064.h
@@ -1,7 +1,5 @@
/*-
* Test 0064: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0065.h b/tools/regression/bpf/bpf_filter/tests/test0065.h
index b782a8ef4c49..e4326ff54d04 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0065.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0065.h
@@ -1,7 +1,5 @@
/*-
* Test 0065: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0066.h b/tools/regression/bpf/bpf_filter/tests/test0066.h
index 1d828e150b07..49cea78005cd 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0066.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0066.h
@@ -1,7 +1,5 @@
/*-
* Test 0066: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0067.h b/tools/regression/bpf/bpf_filter/tests/test0067.h
index 665ce0e21b60..023aa08550ab 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0067.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0067.h
@@ -1,7 +1,5 @@
/*-
* Test 0067: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0068.h b/tools/regression/bpf/bpf_filter/tests/test0068.h
index d2f811eda740..e3235a72b705 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0068.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0068.h
@@ -1,7 +1,5 @@
/*-
* Test 0068: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0069.h b/tools/regression/bpf/bpf_filter/tests/test0069.h
index 86fdcad4caa0..a8ce609788f2 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0069.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0069.h
@@ -1,7 +1,5 @@
/*-
* Test 0069: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0070.h b/tools/regression/bpf/bpf_filter/tests/test0070.h
index 3c279c4677d8..982015b7bc68 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0070.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0070.h
@@ -1,7 +1,5 @@
/*-
* Test 0070: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0071.h b/tools/regression/bpf/bpf_filter/tests/test0071.h
index bca754934100..ae23745a1bf5 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0071.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0071.h
@@ -1,7 +1,5 @@
/*-
* Test 0071: Check boundary conditions (BPF_LD+BPF_W+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0072.h b/tools/regression/bpf/bpf_filter/tests/test0072.h
index 9bf97ea5158e..fcfe9a57a3f0 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0072.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0072.h
@@ -1,7 +1,5 @@
/*-
* Test 0072: Check boundary conditions (BPF_LD+BPF_H+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0073.h b/tools/regression/bpf/bpf_filter/tests/test0073.h
index 50b3f5693f1f..7433a4b94c62 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0073.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0073.h
@@ -1,7 +1,5 @@
/*-
* Test 0073: Check boundary conditions (BPF_LD+BPF_B+BPF_IND)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0074.h b/tools/regression/bpf/bpf_filter/tests/test0074.h
index febd27525e98..f4b8ce73dac1 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0074.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0074.h
@@ -1,7 +1,5 @@
/*-
* Test 0074: Divide by 0 (BPF_ALU+BPF_DIV+BPF_X)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0075.h b/tools/regression/bpf/bpf_filter/tests/test0075.h
index c20614b7fec9..d3b29ccc0e82 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0075.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0075.h
@@ -1,7 +1,5 @@
/*-
* Test 0075: Check boundary conditions (BPF_LD+BPF_MEM)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0076.h b/tools/regression/bpf/bpf_filter/tests/test0076.h
index d2b210e00cc2..75c4cf2a2ef5 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0076.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0076.h
@@ -1,7 +1,5 @@
/*-
* Test 0076: Check boundary conditions (BPF_LDX+BPF_MEM)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0077.h b/tools/regression/bpf/bpf_filter/tests/test0077.h
index 5170c003eaaf..08d4c3f0154b 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0077.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0077.h
@@ -1,7 +1,5 @@
/*-
* Test 0077: Check boundary conditions (BPF_ST)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0078.h b/tools/regression/bpf/bpf_filter/tests/test0078.h
index ba830359be49..16da9f6122e0 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0078.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0078.h
@@ -1,7 +1,5 @@
/*-
* Test 0078: Check boundary conditions (BPF_STX)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0079.h b/tools/regression/bpf/bpf_filter/tests/test0079.h
index 7c65fbe42cc4..2d0b824a7d25 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0079.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0079.h
@@ -1,7 +1,5 @@
/*-
* Test 0079: An empty filter program.
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0080.h b/tools/regression/bpf/bpf_filter/tests/test0080.h
index a4829085d20d..c586e1875082 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0080.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0080.h
@@ -1,7 +1,5 @@
/*-
* Test 0080: Check uninitialized scratch memory (obsolete).
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0081.h b/tools/regression/bpf/bpf_filter/tests/test0081.h
index d6ce04ff83be..309e31f6597e 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0081.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0081.h
@@ -1,7 +1,5 @@
/*-
* Test 0081: Check unconditional jump range.
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0082.h b/tools/regression/bpf/bpf_filter/tests/test0082.h
index e74171e1f0f2..d0c64c2e6f92 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0082.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0082.h
@@ -1,7 +1,5 @@
/*-
* Test 0082: Check conditional jump ranges.
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0083.h b/tools/regression/bpf/bpf_filter/tests/test0083.h
index 3ebf1cc6d39c..7beb6be58de9 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0083.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0083.h
@@ -1,7 +1,5 @@
/*-
* Test 0083: Check that the last instruction is BPF_RET.
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0084.h b/tools/regression/bpf/bpf_filter/tests/test0084.h
index f6a777712099..c184d95db2a7 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0084.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0084.h
@@ -1,7 +1,5 @@
/*-
* Test 0084: Check very long BPF program.
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0085.h b/tools/regression/bpf/bpf_filter/tests/test0085.h
index 3a9f77951d58..defed70c443a 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0085.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0085.h
@@ -1,7 +1,5 @@
/*-
* Test 0085: BPF_ALU+BPF_MOD+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0086.h b/tools/regression/bpf/bpf_filter/tests/test0086.h
index 44311bcf2ae6..b6483403376c 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0086.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0086.h
@@ -1,7 +1,5 @@
/*-
* Test 0086: BPF_ALU+BPF_XOR+BPF_X
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0087.h b/tools/regression/bpf/bpf_filter/tests/test0087.h
index 5b102278e8aa..56f1fc890730 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0087.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0087.h
@@ -1,7 +1,5 @@
/*-
* Test 0087: BPF_ALU+BPF_MOD+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0088.h b/tools/regression/bpf/bpf_filter/tests/test0088.h
index 9126ac020b27..f886169dc5a3 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0088.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0088.h
@@ -1,7 +1,5 @@
/*-
* Test 0088: BPF_ALU+BPF_XOR+BPF_K
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0089.h b/tools/regression/bpf/bpf_filter/tests/test0089.h
index a7b1cfaf2103..ea7f3f341892 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0089.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0089.h
@@ -1,7 +1,5 @@
/*-
* Test 0089: Divide by 0 (BPF_ALU+BPF_MOD+BPF_X)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0090.h b/tools/regression/bpf/bpf_filter/tests/test0090.h
index 70ccf1e2b0dc..c339e1af03a8 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0090.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0090.h
@@ -1,7 +1,5 @@
/*-
* Test 0090: Divide by 0 (BPF_ALU+BPF_DIV+BPF_K)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/bpf/bpf_filter/tests/test0091.h b/tools/regression/bpf/bpf_filter/tests/test0091.h
index 1e148e9d783c..36a629f94294 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0091.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0091.h
@@ -1,7 +1,5 @@
/*-
* Test 0091: Divide by 0 (BPF_ALU+BPF_MOD+BPF_K)
- *
- * $FreeBSD$
*/
/* BPF program */
diff --git a/tools/regression/capsicum/syscalls/Makefile b/tools/regression/capsicum/syscalls/Makefile
index 2380193d7d7a..7f5a40752136 100644
--- a/tools/regression/capsicum/syscalls/Makefile
+++ b/tools/regression/capsicum/syscalls/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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 e3a05bf66149..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.
@@ -27,9 +26,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/capsicum.h>
#include <sys/procdesc.h>
diff --git a/tools/regression/capsicum/syscalls/cap_getmode.c b/tools/regression/capsicum/syscalls/cap_getmode.c
index 32037c3c13de..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.
@@ -27,9 +26,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/capsicum.h>
#include <sys/procdesc.h>
diff --git a/tools/regression/capsicum/syscalls/cap_ioctls_limit.c b/tools/regression/capsicum/syscalls/cap_ioctls_limit.c
index 2ed00f175469..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.
@@ -27,9 +26,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/capsicum.h>
#include <sys/ioctl.h>
diff --git a/tools/regression/capsicum/syscalls/misc.c b/tools/regression/capsicum/syscalls/misc.c
index 303a9117910c..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.
@@ -27,9 +26,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
diff --git a/tools/regression/capsicum/syscalls/misc.h b/tools/regression/capsicum/syscalls/misc.h
index 4968c3e059b4..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.
@@ -25,8 +24,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _MISC_H_
diff --git a/tools/regression/ccd/layout/Makefile b/tools/regression/ccd/layout/Makefile
index 1e6b4dfe59e8..e593f6efc079 100644
--- a/tools/regression/ccd/layout/Makefile
+++ b/tools/regression/ccd/layout/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Regression test for ccd's layout.
#
diff --git a/tools/regression/ccd/layout/a.c b/tools/regression/ccd/layout/a.c
index 33eea10f2a3c..0feb1f28c093 100644
--- a/tools/regression/ccd/layout/a.c
+++ b/tools/regression/ccd/layout/a.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <unistd.h>
static uint32_t buf[512/4];
diff --git a/tools/regression/ccd/layout/b.c b/tools/regression/ccd/layout/b.c
index 5b4ae8ed6a9e..eea078db37d2 100644
--- a/tools/regression/ccd/layout/b.c
+++ b/tools/regression/ccd/layout/b.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <unistd.h>
#include <fcntl.h>
diff --git a/tools/regression/ccd/layout/ccd.sh b/tools/regression/ccd/layout/ccd.sh
index 62d4726528a8..16e62a3b3d43 100644
--- a/tools/regression/ccd/layout/ccd.sh
+++ b/tools/regression/ccd/layout/ccd.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
set -e
diff --git a/tools/regression/ccd/layout/ccd0.sh b/tools/regression/ccd/layout/ccd0.sh
index 0f71b18dc96e..2edc02b83fc6 100644
--- a/tools/regression/ccd/layout/ccd0.sh
+++ b/tools/regression/ccd/layout/ccd0.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
set -e
diff --git a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_0 b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_0
index 470f2dce2c0a..644b7d3fd577 100644
--- a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_0
+++ b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_0
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 960 blocks concatenated
76089c8ed2249882ae0bb260dcb4a913
4cc57a9dd953d032ae7e07edaef31203
diff --git a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_4 b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_4
index 470f2dce2c0a..644b7d3fd577 100644
--- a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_4
+++ b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_0_4
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 960 blocks concatenated
76089c8ed2249882ae0bb260dcb4a913
4cc57a9dd953d032ae7e07edaef31203
diff --git a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_0 b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_0
index 593c413f5966..d1aaba5cfd60 100644
--- a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_0
+++ b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_0
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 960 blocks interleaved at 4 blocks
c3019ef8e08259f8748931f225e5cebf
ddef760dcef4784565cfe7d76e5aa3ce
diff --git a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_2 b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_2
index 593c413f5966..d1aaba5cfd60 100644
--- a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_2
+++ b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_2
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 960 blocks interleaved at 4 blocks
c3019ef8e08259f8748931f225e5cebf
ddef760dcef4784565cfe7d76e5aa3ce
diff --git a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_4 b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_4
index 9f8aebc12269..b0bea3946e71 100644
--- a/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_4
+++ b/tools/regression/ccd/layout/ref.128k_128k_128k_128k_4_4
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 480 blocks interleaved at 4 blocks
a77c5edd8917abb32dc165750f1af781
8db0b90ec1fa54feca98ad8fd292b07c
diff --git a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_0 b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_0
index 44a28186e4a1..c120b1ef2749 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_0
+++ b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_0
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 1216 blocks concatenated
50ca80e7defff2928b09d9e6c22d14ff
a5f4fb6b17d948b83b8685b3adfe0926
diff --git a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_4 b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_4
index 44a28186e4a1..c120b1ef2749 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_4
+++ b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_0_4
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 1216 blocks concatenated
50ca80e7defff2928b09d9e6c22d14ff
a5f4fb6b17d948b83b8685b3adfe0926
diff --git a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_0 b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_0
index 6fc421a38ea6..1b858172606b 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_0
+++ b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_0
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 1216 blocks interleaved at 4 blocks
85853375739fe031c97c20e6226aae0e
ddef760dcef4784565cfe7d76e5aa3ce
diff --git a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_2 b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_2
index 53cfc7985466..aa8680270267 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_2
+++ b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_2
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 960 blocks interleaved at 4 blocks
c7d32c7a0aacde7259cac3ab214bda77
ddef760dcef4784565cfe7d76e5aa3ce
diff --git a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_4 b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_4
index ba42742e6745..07f5dd27fa0b 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_4
+++ b/tools/regression/ccd/layout/ref.256k_128k_128k_128k_4_4
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 480 blocks interleaved at 4 blocks
ab2274c3b7241753a015c243417c0c29
8db0b90ec1fa54feca98ad8fd292b07c
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_0 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_0
index 12de5a4b7df4..889f45cda58f 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_0
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_0
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 1728 blocks concatenated
50ca80e7defff2928b09d9e6c22d14ff
a5f4fb6b17d948b83b8685b3adfe0926
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_4 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_4
index 12de5a4b7df4..889f45cda58f 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_4
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_0_4
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 1728 blocks concatenated
50ca80e7defff2928b09d9e6c22d14ff
a5f4fb6b17d948b83b8685b3adfe0926
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_0 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_0
index caf85b195ec9..6e5d2a24cb40 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_0
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_0
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 1728 blocks interleaved at 16 blocks
9f63a6ab2d5bd7c183e338387d9c4b59
89518c095e85649516fa08fe98bf0a3e
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_2 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_2
index e00fa6c6caec..942818ba0da6 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_2
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_2
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 960 blocks interleaved at 16 blocks
ebe23f400e868c343240761b0b52c2fd
89518c095e85649516fa08fe98bf0a3e
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_4 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_4
index 06c4890d96e1..cb2662e6f312 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_4
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_16_4
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 480 blocks interleaved at 16 blocks
f3f609d828a50cca082f6b6f499ca4b5
721d9967a8e2608d111cfc24304255ca
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_0 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_0
index 3b57123ba46f..2ecaaa70a081 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_0
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_0
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 1728 blocks interleaved at 4 blocks
50f78fd6083bea22e664f78350e24f2f
ddef760dcef4784565cfe7d76e5aa3ce
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_2 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_2
index 7cccecf330e7..a61996a460b8 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_2
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_2
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 960 blocks interleaved at 4 blocks
c7d32c7a0aacde7259cac3ab214bda77
ddef760dcef4784565cfe7d76e5aa3ce
diff --git a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_4 b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_4
index db2dcd80af23..6aef59a90e7e 100644
--- a/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_4
+++ b/tools/regression/ccd/layout/ref.256k_128k_384k_128k_4_4
@@ -1,4 +1,3 @@
-$FreeBSD$
ccd3: 4 components (md90, md91, md92, md93), 480 blocks interleaved at 4 blocks
ab2274c3b7241753a015c243417c0c29
8db0b90ec1fa54feca98ad8fd292b07c
diff --git a/tools/regression/compat32/aarch64/Makefile b/tools/regression/compat32/aarch64/Makefile
new file mode 100644
index 000000000000..34428a58caa1
--- /dev/null
+++ b/tools/regression/compat32/aarch64/Makefile
@@ -0,0 +1,4 @@
+ACFLAGS= -target armv7-unknown-freebsd${OS_REVISION} -nostdlib -Wl,-e -Wl,main -static -mhwdiv=arm
+
+swp_test_impl: swp_test_impl.S
+ ${CC} ${ACFLAGS} -o ${.TARGET} ${.ALLSRC}
diff --git a/tools/regression/compat32/aarch64/swp_test_impl.S b/tools/regression/compat32/aarch64/swp_test_impl.S
new file mode 100644
index 000000000000..9f28ab17748e
--- /dev/null
+++ b/tools/regression/compat32/aarch64/swp_test_impl.S
@@ -0,0 +1,410 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2021 Warner Losh
+ * Copyright (c) 2023 Stormshield
+ * Copyright (c) 2023 Klara, Inc.
+ */
+
+#include <sys/syscall.h>
+
+#define STDOUT_FILENO 1
+
+#define MUTEX_LOCKED 0x01
+#define MUTEX_UNLOCKED 0x00
+
+#define STACK_SIZE 4096
+#define TLS_SIZE 4096
+
+ .text
+ .file "swp_test.S"
+ .syntax unified
+ .globl main
+ .p2align 2
+ .type main,%function
+ .code 32
+
+main:
+ /*
+ * Stack slots:
+ * 0 - Sync word
+ * 1 - Thread id
+ * 2 - Shared word
+ */
+ sub sp, sp, #12
+
+ /* Print a message */
+ movw r0, :lower16:.L.mainmsg
+ movt r0, :upper16:.L.mainmsg
+ ldr r1, =(.L.mainmsgEnd - .L.mainmsg - 1)
+ bl print
+
+ /* Create two secondary threads */
+ mov r0, #1
+ str r0, [sp, #4] /* Thread ID */
+ movw r0, :lower16:secondary_thread
+ movt r0, :upper16:secondary_thread
+ mov r1, sp
+ movw r2, :lower16:stack1
+ movt r2, :upper16:stack1
+ movw r3, :lower16:tls1
+ movt r3, :upper16:tls1
+ bl create_thr
+
+1:
+ /*
+ * Wait for the first new thread to ack its existence by
+ * incrementing the thread id.
+ */
+ ldr r0, [sp, #4]
+ cmp r0, #1
+ bne 2f
+ ldr r7, =SYS_sched_yield
+ swi 0
+ b 1b
+
+2:
+ /* Create thread #2 */
+ movw r0, :lower16:secondary_thread
+ movt r0, :upper16:secondary_thread
+ mov r1, sp
+ movw r2, :lower16:stack2
+ movt r2, :upper16:stack2
+ movw r3, :lower16:tls2
+ movt r3, :upper16:tls2
+ bl create_thr
+
+3:
+ /*
+ * Wait for the first new thread to ack its existence by
+ * incrementing the thread id.
+ */
+ ldr r0, [sp, #4]
+ cmp r0, #2
+ bne 4f
+ ldr r7, =SYS_sched_yield
+ swi 0
+ b 3b
+
+ /* Loop */
+4:
+ mov r0, sp
+ mov r1, #0 /* Thread loop */
+ add r2, sp, #8
+ bl thread_loop
+ b 4b
+
+ /* UNREACHABLE */
+ mov r0, #0
+ ldr r7, =SYS_exit
+ swi 0
+
+ .p2align 2
+ .type secondary_thread,%function
+ .code 32
+secondary_thread:
+ /*
+ * On entry, r0 is where we stashed our sync word and
+ * ack word (thread ID).
+ *
+ * Stash the sync word in r4, thread ID in r5.
+ */
+ mov r4, r0
+ ldr r5, [r0, #4]
+
+ /* Print a message */
+ movw r0, :lower16:.L.secondarymsg
+ movt r0, :upper16:.L.secondarymsg
+ ldr r1, =(.L.secondarymsgEnd - .L.secondarymsg - 1)
+ bl print
+
+ /* Acknowledge that we started */
+ add r0, r5, #1
+ str r0, [r4, #4]
+
+1:
+ mov r0, r4
+ mov r1, r5
+ add r2, r4, #8
+ bl thread_loop
+ b 1b
+
+ .p2align 2
+ .type thread_loop,%function
+ .code 32
+thread_loop:
+ push {r4, r5, r6, r7, r8, lr}
+
+ /*
+ * r0 == sync word
+ * r1 == thread ID
+ * r2 == shared word
+ */
+ mov r4, r0
+ mov r5, r1
+ mov r6, r2
+ bl lock_mutex_swp
+ str r5, [r6] /* Write the thread ID */
+ bl random_cycles
+
+ # Save off the now cycle count */
+ mov r8, r0
+
+ /* Print the thread ID and cycle count */
+ mov r0, r5
+ mov r1, #0
+ bl printnum
+
+ /* Separator */
+ movw r0, :lower16:.L.idsep
+ movt r0, :upper16:.L.idsep
+ ldr r1, =(.L.idsepEnd - .L.idsep - 1)
+ bl print
+
+ /* Cycle count */
+ mov r0, r8
+ mov r1, #1
+ bl printnum
+
+1:
+ ldr r0, [r6]
+ cmp r0, r5 /* Check against the thread ID */
+ bne 2f
+ str r5, [r6]
+
+ /*
+ * Check if the count hit 0, otherwise go again.
+ */
+ cmp r8, #0
+ beq 3f
+ sub r8, r8, #1
+ b 1b
+
+2:
+ /* exit(1) */
+ mov r0, #1
+ ldr r7, =SYS_exit
+ swi 0
+
+3:
+ mov r0, r4
+ bl unlock_mutex_swp
+
+ /*
+ * Yield to lower the chance that we end up re-acquiring, the other two
+ * threads are still actively trying to acquire the lock.
+ */
+ ldr r7, =SYS_sched_yield
+ swi 0
+
+ pop {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ .p2align 2
+ .type random_cycles,%function
+ .code 32
+random_cycles:
+ /* Return a random number < 4k */
+ sub sp, sp, #4
+ mov r0, sp
+ mov r1, #4
+ mov r2, #0
+ ldr r7, =SYS_getrandom
+ swi 0
+
+ /*
+ * Just truncate the result of getrandom(2)
+ * to put us within range. Naive, but functional.
+ */
+ ldr r0, [sp]
+ mov r1, #0xfff
+ and r0, r0, r1
+ add sp, sp, #4
+ bx lr
+
+ /*
+ * lock_mutex_swp and unlock_mutex_swp lifted from
+ * ARM documentation on SWP/SWPB.
+ */
+ .p2align 2
+ .type lock_mutex_swp,%function
+ .code 32
+lock_mutex_swp:
+ mov r2, #MUTEX_LOCKED
+ swp r1, r2, [r0] /* Swap in lock value. */
+ cmp r1, r2 /* Check if we were locked already. */
+ beq lock_mutex_swp /* Retry if so */
+ bx lr /* Return locked */
+
+ .p2align 2
+ .type unlock_mutex_swp,%function
+ .code 32
+unlock_mutex_swp:
+ mov r1, #MUTEX_UNLOCKED
+ str r1, [r0] /* Move in unlocked */
+ bx lr
+
+ .p2align 2
+ .type create_thr,%function
+ .code 32
+create_thr:
+ /*
+ * r0 == start_func
+ * r1 == arg
+ * r2 == stack_base
+ * r3 == tls_base
+ */
+ sub sp, sp, #56
+ str r0, [sp, #4] /* start_func */
+ str r1, [sp, #8] /* arg */
+ str r2, [sp, #12] /* stack_base */
+ mov r0, #STACK_SIZE
+ str r0, [sp, #16] /* stack_size */
+ str r3, [sp, #20] /* tls_base */
+ mov r0, #TLS_SIZE
+ str r0, [sp, #24] /* tls_size */
+ mov r0, #0
+ str r0, [sp, #28]
+ str r0, [sp, #32]
+ str r0, [sp, #36]
+ str r0, [sp, #40]
+
+ add r0, sp, #4 /* &thrp */
+ mov r1, #52 /* sizeof(thrp) */
+ ldr r7, =SYS_thr_new
+ swi 0
+
+ add sp, sp, #56
+ bx lr
+
+ .p2align 2
+ .type printnum,%function
+ .code 32
+printnum:
+ push {r4, r5, r6, r7, r8, r10, lr}
+ sub sp, #4
+
+ /* 1000000000 */
+ movw r6, #0xca00
+ movt r6, #0x3b9a
+
+ udiv r5, r0, r6
+ cmp r5, #9
+ bhi abort
+
+ /* r4 is our accumulator */
+ mov r4, r0
+ /* r5 to be used as our "significant bit" */
+ mov r5, #0
+ /* r10 is "output_newline" */
+ mov r10, r1
+
+1:
+ cmp r6, #0
+ beq 4f
+
+ /* Divide by current place */
+ udiv r0, r4, r6
+ /* Significant already? print anyways */
+ cmp r5, #0
+ bne 2f
+
+ /*
+ * Not significant, maybe print. If we made it all the way to 1, we
+ * need to just print the 0 anyways.
+ */
+ cmp r6, #1
+ beq 2f
+
+ cmp r0, #0
+ bne 2f
+ b 3f /* Proceed */
+
+ /* Print */
+2:
+ mov r5, #1
+ mov r8, r0
+ add r0, r0, #0x30
+ str r0, [sp]
+ mov r0, sp
+ mov r1, #1
+ bl print
+
+ /* Multiply back into place and subtract from accumulator */
+ mul r0, r8, r6
+ sub r4, r4, r0
+
+3:
+ mov r3, #10
+ udiv r6, r6, r3
+ b 1b
+
+4:
+ cmp r10, #0
+ beq 5f
+
+ /* newline */
+ mov r0, #0x0a
+ str r0, [sp]
+ mov r0, sp
+ mov r1, #1
+ bl print
+
+5:
+ add sp, sp, #4
+ pop {r4, r5, r6, r7, r8, r10, lr}
+ bx lr
+
+abort:
+ movw r0, :lower16:.L.badnum
+ movt r0, :upper16:.L.badnum
+ ldr r1, =(.L.badnumEnd - .L.badnum - 1)
+ bl print
+
+ mov r0, #1
+ ldr r7, =SYS_exit
+ swi 0
+
+ .p2align 2
+ .type print,%function
+ .code 32
+print:
+ /* r0 - string, r1 = size */
+ mov r2, r1
+ mov r1, r0
+ ldr r0, =STDOUT_FILENO
+ ldr r7, =SYS_write
+ swi 0
+
+ bx lr
+
+.L.mainmsg:
+ .asciz "Main thread\n"
+.L.mainmsgEnd:
+ .size .L.mainmsg, .L.mainmsgEnd - .L.mainmsg
+.L.secondarymsg:
+ .asciz "Secondary thread\n"
+.L.secondarymsgEnd:
+ .size .L.secondarymsg, .L.secondarymsgEnd - .L.secondarymsg
+.L.badnum:
+ .asciz "Bad number\n"
+.L.badnumEnd:
+ .size .L.badnum, .L.badnumEnd - .L.badnum
+.L.idsep:
+ .asciz " - cycles "
+.L.idsepEnd:
+ .size .L.idsep, .L.idsepEnd - .L.idsep
+
+ .type stack1,%object
+ .local stack1
+ .comm stack1,STACK_SIZE,1
+ .type tls1,%object
+ .local tls1
+ .comm tls1,TLS_SIZE,1
+
+ .type stack2,%object
+ .local stack2
+ .comm stack2,STACK_SIZE,1
+ .type tls2,%object
+ .local tls2
+ .comm tls2,TLS_SIZE,1
diff --git a/tools/regression/doat/Makefile b/tools/regression/doat/Makefile
index c31ca53f4579..f102e7dd6437 100644
--- a/tools/regression/doat/Makefile
+++ b/tools/regression/doat/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= doat
MAN=
diff --git a/tools/regression/doat/README b/tools/regression/doat/README
index c5ebe805c757..dc4ba6370939 100644
--- a/tools/regression/doat/README
+++ b/tools/regression/doat/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This is a simple testing program for *at family of syscalls. It creates
"tmp" subdirectory in a current directory and creates files etc. in it.
diff --git a/tools/regression/doat/doat.c b/tools/regression/doat/doat.c
index d71648d8f0ff..decdf558de28 100644
--- a/tools/regression/doat/doat.c
+++ b/tools/regression/doat/doat.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/environ/Makefile b/tools/regression/environ/Makefile
index 62720d28abd1..00796304b60d 100644
--- a/tools/regression/environ/Makefile
+++ b/tools/regression/environ/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROGS= envctl retention timings
diff --git a/tools/regression/environ/Makefile.envctl b/tools/regression/environ/Makefile.envctl
index 16b42414371f..37fac012cd2e 100644
--- a/tools/regression/environ/Makefile.envctl
+++ b/tools/regression/environ/Makefile.envctl
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
SRCS= envctl.c
PROG= envctl
diff --git a/tools/regression/environ/Makefile.retention b/tools/regression/environ/Makefile.retention
index a69abe72dfdc..90eb544c5afc 100644
--- a/tools/regression/environ/Makefile.retention
+++ b/tools/regression/environ/Makefile.retention
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
SRCS= retention.c
PROG= retention
diff --git a/tools/regression/environ/Makefile.timings b/tools/regression/environ/Makefile.timings
index adc2a987d534..4d48eb44d386 100644
--- a/tools/regression/environ/Makefile.timings
+++ b/tools/regression/environ/Makefile.timings
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
SRCS= timings.c
PROG= timings
diff --git a/tools/regression/environ/envctl.c b/tools/regression/environ/envctl.c
index 586314bc0855..06071f642cc1 100644
--- a/tools/regression/environ/envctl.c
+++ b/tools/regression/environ/envctl.c
@@ -33,9 +33,6 @@
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-
extern char **environ;
diff --git a/tools/regression/environ/envtest.t b/tools/regression/environ/envtest.t
index 2c540179f68c..5532c2ee7860 100644
--- a/tools/regression/environ/envtest.t
+++ b/tools/regression/environ/envtest.t
@@ -24,7 +24,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
# Initialization.
diff --git a/tools/regression/environ/retention.c b/tools/regression/environ/retention.c
index 7f75cd100e15..3edaf8ca1d0a 100644
--- a/tools/regression/environ/retention.c
+++ b/tools/regression/environ/retention.c
@@ -29,9 +29,6 @@
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-
extern char **environ;
const char *envName = "FOOBAR";
const char *envValSmall = "Hi";
diff --git a/tools/regression/environ/timings.c b/tools/regression/environ/timings.c
index 7999fa156d7e..ac7dfcaa658f 100644
--- a/tools/regression/environ/timings.c
+++ b/tools/regression/environ/timings.c
@@ -34,9 +34,6 @@
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-
const char value1[] = "Large ------------------ value";
const char value2[] = "Small -- value";
char nameValuePair[] = "less=more";
diff --git a/tools/regression/ethernet/ethermulti/Makefile b/tools/regression/ethernet/ethermulti/Makefile
index 0b179518999a..a079cd6fcf4e 100644
--- a/tools/regression/ethernet/ethermulti/Makefile
+++ b/tools/regression/ethernet/ethermulti/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ethermulti
SRCS+= ethermulti.c
MAN=
diff --git a/tools/regression/ethernet/ethermulti/ethermulti.c b/tools/regression/ethernet/ethermulti/ethermulti.c
index 61f0cddb4a10..4b1b00c78cab 100644
--- a/tools/regression/ethernet/ethermulti/ethermulti.c
+++ b/tools/regression/ethernet/ethermulti/ethermulti.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
diff --git a/tools/regression/fsx/Makefile b/tools/regression/fsx/Makefile
index bf7b0233b919..78f6dd970cf5 100644
--- a/tools/regression/fsx/Makefile
+++ b/tools/regression/fsx/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= fsx
MAN=
diff --git a/tools/regression/fsx/fsx.c b/tools/regression/fsx/fsx.c
index 9bf61ffadb09..a4301570d8d5 100644
--- a/tools/regression/fsx/fsx.c
+++ b/tools/regression/fsx/fsx.c
@@ -36,8 +36,6 @@
*
* Updated license to APSL 2.0, 2004/7/27 - Jordan Hubbard
*
- * $FreeBSD$
- *
*/
#include <sys/types.h>
@@ -105,13 +103,13 @@ int fd; /* fd for our test file */
off_t file_size = 0;
off_t biggest = 0;
char state[256];
-unsigned long testcalls = 0; /* calls to function "test" */
+long testcalls = 0; /* calls to function "test" */
-unsigned long simulatedopcount = 0; /* -b flag */
+long simulatedopcount = 0; /* -b flag */
int closeprob = 0; /* -c flag */
int invlprob = 0; /* -i flag */
int debug = 0; /* -d flag */
-unsigned long debugstart = 0; /* -D flag */
+long debugstart = 0; /* -D flag */
off_t maxfilelen = 256 * 1024; /* -l flag */
int sizechecks = 1; /* -n flag disables them */
int maxoplen = 64 * 1024; /* -o flag */
@@ -910,7 +908,7 @@ usage(void)
-c P: 1 in P chance of file close+open at each op (default infinity)\n\
-d: debug output for all operations\n\
-i P: 1 in P chance of calling msync(MS_INVALIDATE) (default infinity)\n\
- -l flen: the upper bound on file size (default 262144)\n\
+ -l flen: the upper bound on file size (default 262144, max 2147483647)\n\
-m startop:endop: monitor (print debug output) specified byte range (default 0:infinity)\n\
-n: no verifications of file size\n\
-o oplen: the upper bound on operation size (default 65536)\n\
@@ -937,32 +935,43 @@ usage(void)
int
getnum(char *s, char **e)
{
- int ret = -1;
+ long long ret = -1;
*e = (char *) 0;
- ret = strtol(s, e, 0);
+ ret = strtoll(s, e, 0);
if (*e)
switch (**e) {
case 'b':
case 'B':
+ if (ret > INT_MAX / 512)
+ return (-1);
ret *= 512;
*e = *e + 1;
break;
case 'k':
case 'K':
+ if (ret > INT_MAX / 1024)
+ return (-1);
ret *= 1024;
*e = *e + 1;
break;
case 'm':
case 'M':
+ if (ret > INT_MAX / 1024 / 1024)
+ return (-1);
ret *= 1024*1024;
*e = *e + 1;
break;
case 'w':
case 'W':
+ if (ret > INT_MAX / 4)
+ return (-1);
ret *= 4;
*e = *e + 1;
break;
+ default:
+ if (ret > INT_MAX)
+ return (-1);
}
return (ret);
}
@@ -1095,6 +1104,8 @@ main(int argc, char **argv)
break;
case 'R':
mapped_reads = 0;
+ if (!quiet)
+ fprintf(stdout, "mapped reads DISABLED\n");
break;
case 'S':
seed = getnum(optarg, &endp);
diff --git a/tools/regression/gaithrstress/Makefile b/tools/regression/gaithrstress/Makefile
index 9c5cdd5c215b..fd1a7e821019 100644
--- a/tools/regression/gaithrstress/Makefile
+++ b/tools/regression/gaithrstress/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= gaithrstress
LIBADD= pthread
diff --git a/tools/regression/gaithrstress/gaithrstress.c b/tools/regression/gaithrstress/gaithrstress.c
index 25066250189f..7eb92474cbf2 100644
--- a/tools/regression/gaithrstress/gaithrstress.c
+++ b/tools/regression/gaithrstress/gaithrstress.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/geom/ConfCmp/ConfCmp.c b/tools/regression/geom/ConfCmp/ConfCmp.c
index 599a953b1b89..ec22a2a6a97f 100644
--- a/tools/regression/geom/ConfCmp/ConfCmp.c
+++ b/tools/regression/geom/ConfCmp/ConfCmp.c
@@ -31,8 +31,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/regression/geom/ConfCmp/Makefile b/tools/regression/geom/ConfCmp/Makefile
index c34cf650479d..a03de0e9bcd4 100644
--- a/tools/regression/geom/ConfCmp/Makefile
+++ b/tools/regression/geom/ConfCmp/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ConfCmp
SRCS+= ConfCmp.c
SRCS+= subr_sbuf.c
diff --git a/tools/regression/geom/Data/disk.beast.da0.xml b/tools/regression/geom/Data/disk.beast.da0.xml
index 96ad5f74ddef..8a3ab6ec020b 100644
--- a/tools/regression/geom/Data/disk.beast.da0.xml
+++ b/tools/regression/geom/Data/disk.beast.da0.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
alpha BSD label from beast.freebsd.org
</comment>
<sectorsize>512</sectorsize>
diff --git a/tools/regression/geom/Data/disk.critter.ad0.xml b/tools/regression/geom/Data/disk.critter.ad0.xml
index 9e93b2414345..ff56d2e17c57 100644
--- a/tools/regression/geom/Data/disk.critter.ad0.xml
+++ b/tools/regression/geom/Data/disk.critter.ad0.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
This image contains the MBR and disklabel sectors from my Asus M1300
laptop.
</comment>
diff --git a/tools/regression/geom/Data/disk.empty.flp.xml b/tools/regression/geom/Data/disk.empty.flp.xml
index 88c603ac9567..7e3c827167b4 100644
--- a/tools/regression/geom/Data/disk.empty.flp.xml
+++ b/tools/regression/geom/Data/disk.empty.flp.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
An empty floppy disk
</comment>
<sectorsize>512</sectorsize>
diff --git a/tools/regression/geom/Data/disk.far.ad0.xml b/tools/regression/geom/Data/disk.far.ad0.xml
index 0a8d3ca9379b..597d6ee1e190 100644
--- a/tools/regression/geom/Data/disk.far.ad0.xml
+++ b/tools/regression/geom/Data/disk.far.ad0.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
A Windows laptop.
</comment>
<sectorsize>512</sectorsize>
diff --git a/tools/regression/geom/Data/disk.flat.da1.xml b/tools/regression/geom/Data/disk.flat.da1.xml
index 2302a7c66c99..63e919c20988 100644
--- a/tools/regression/geom/Data/disk.flat.da1.xml
+++ b/tools/regression/geom/Data/disk.flat.da1.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
This image contains an interesting setup: there is an MBR+BSD
but also another BSD at sector one which is valid but bogus.
</comment>
diff --git a/tools/regression/geom/Data/disk.kern.flp.xml b/tools/regression/geom/Data/disk.kern.flp.xml
index 6640c4875167..3d5db26469ca 100644
--- a/tools/regression/geom/Data/disk.kern.flp.xml
+++ b/tools/regression/geom/Data/disk.kern.flp.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
A FreeBSD kern.flp image.
</comment>
<sectorsize>512</sectorsize>
diff --git a/tools/regression/geom/Data/disk.msdos.ext.xml b/tools/regression/geom/Data/disk.msdos.ext.xml
index 868a88f78237..64edc5c75141 100644
--- a/tools/regression/geom/Data/disk.msdos.ext.xml
+++ b/tools/regression/geom/Data/disk.msdos.ext.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
A MSDOS 6.22 disk with maximal number of extended partitions.
</comment>
<sectorsize>512</sectorsize>
diff --git a/tools/regression/geom/Data/disk.msdos.flp.xml b/tools/regression/geom/Data/disk.msdos.flp.xml
index d057d1ac75d5..8bc9210c5170 100644
--- a/tools/regression/geom/Data/disk.msdos.flp.xml
+++ b/tools/regression/geom/Data/disk.msdos.flp.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
A MSDOS floppy image.
</comment>
<sectorsize>512</sectorsize>
diff --git a/tools/regression/geom/Data/disk.typo.ad0.xml b/tools/regression/geom/Data/disk.typo.ad0.xml
index 56383abf1c4c..6c7ae72a88cb 100644
--- a/tools/regression/geom/Data/disk.typo.ad0.xml
+++ b/tools/regression/geom/Data/disk.typo.ad0.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<DISKIMAGE>
<comment>
- $FreeBSD$
A multislice FreeBSD disk
</comment>
<sectorsize>512</sectorsize>
diff --git a/tools/regression/geom/MdLoad/Makefile b/tools/regression/geom/MdLoad/Makefile
index 61637b85d4ba..0a5473ee9b91 100644
--- a/tools/regression/geom/MdLoad/Makefile
+++ b/tools/regression/geom/MdLoad/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= MdLoad
LIBADD= sbuf bsdxml
NO_OBJ= t
diff --git a/tools/regression/geom/MdLoad/MdLoad.c b/tools/regression/geom/MdLoad/MdLoad.c
index c2e5a8af66f4..b5d75d4a8267 100644
--- a/tools/regression/geom/MdLoad/MdLoad.c
+++ b/tools/regression/geom/MdLoad/MdLoad.c
@@ -31,8 +31,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/regression/geom/Ref/disk.apple.xml b/tools/regression/geom/Ref/disk.apple.xml
index a2a0f984b47e..6fe9a799fde1 100644
--- a/tools/regression/geom/Ref/disk.apple.xml
+++ b/tools/regression/geom/Ref/disk.apple.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 366530560 715880
/dev/md34s1 512 366481408 715784
/dev/md34s2 512 32256 63
diff --git a/tools/regression/geom/Ref/disk.beast.da0.xml b/tools/regression/geom/Ref/disk.beast.da0.xml
index b6aa32e2e031..800b42f31952 100644
--- a/tools/regression/geom/Ref/disk.beast.da0.xml
+++ b/tools/regression/geom/Ref/disk.beast.da0.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 5120 10
/dev/md34a 512 4064280576 7938048
/dev/md34b 512 270925824 529152
diff --git a/tools/regression/geom/Ref/disk.critter.ad0.xml b/tools/regression/geom/Ref/disk.critter.ad0.xml
index 0620bfebb1a4..08dc395fe570 100644
--- a/tools/regression/geom/Ref/disk.critter.ad0.xml
+++ b/tools/regression/geom/Ref/disk.critter.ad0.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 2671841280 5218440
/dev/md34s1 512 20003848704 39070017
/dev/md34s1a 512 1073741824 2097152
diff --git a/tools/regression/geom/Ref/disk.empty.flp.xml b/tools/regression/geom/Ref/disk.empty.flp.xml
index d0a1b497cc5e..6bf22524e439 100644
--- a/tools/regression/geom/Ref/disk.empty.flp.xml
+++ b/tools/regression/geom/Ref/disk.empty.flp.xml
@@ -1,2 +1 @@
-$FreeBSD$
/dev/md34 512 1474560 2880 0 0 80 2 18
diff --git a/tools/regression/geom/Ref/disk.far.ad0.xml b/tools/regression/geom/Ref/disk.far.ad0.xml
index 629816a448cd..146d4995d83e 100644
--- a/tools/regression/geom/Ref/disk.far.ad0.xml
+++ b/tools/regression/geom/Ref/disk.far.ad0.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 5632 11
/dev/md34s1 512 296821760 579730
/dev/md34s2 512 4564740096 8915508
diff --git a/tools/regression/geom/Ref/disk.flat.da1.xml b/tools/regression/geom/Ref/disk.flat.da1.xml
index 89e2df4941af..d3264958c920 100644
--- a/tools/regression/geom/Ref/disk.flat.da1.xml
+++ b/tools/regression/geom/Ref/disk.flat.da1.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 37888 74
/dev/md34a 512 37748736 73728
/dev/md34b 512 268435456 524288
diff --git a/tools/regression/geom/Ref/disk.kern.flp.xml b/tools/regression/geom/Ref/disk.kern.flp.xml
index 6ff67a03c135..90ddf2276ba1 100644
--- a/tools/regression/geom/Ref/disk.kern.flp.xml
+++ b/tools/regression/geom/Ref/disk.kern.flp.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 5632 11
/dev/md34a 512 1474560 2880
/dev/md34b 512 1474560 2880
diff --git a/tools/regression/geom/Ref/disk.msdos.ext.xml b/tools/regression/geom/Ref/disk.msdos.ext.xml
index dc2aced40157..97deb1bae302 100644
--- a/tools/regression/geom/Ref/disk.msdos.ext.xml
+++ b/tools/regression/geom/Ref/disk.msdos.ext.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 2327759360 4546405
/dev/md34s1 512 2146765824 4192902
/dev/md34s10 512 8193024 16002
diff --git a/tools/regression/geom/Ref/disk.msdos.flp.xml b/tools/regression/geom/Ref/disk.msdos.flp.xml
index c176c587ff43..a74c766dcf1d 100644
--- a/tools/regression/geom/Ref/disk.msdos.flp.xml
+++ b/tools/regression/geom/Ref/disk.msdos.flp.xml
@@ -1,2 +1 @@
-$FreeBSD$
/dev/md34 512 5632 11
diff --git a/tools/regression/geom/Ref/disk.typo.ad0.xml b/tools/regression/geom/Ref/disk.typo.ad0.xml
index 6d537ddc2650..df2279fc674b 100644
--- a/tools/regression/geom/Ref/disk.typo.ad0.xml
+++ b/tools/regression/geom/Ref/disk.typo.ad0.xml
@@ -1,4 +1,3 @@
-$FreeBSD$
/dev/md34 512 8585262592 16768091
/dev/md34s1 512 3220406784 6289857
/dev/md34s1a 512 104857600 204800
diff --git a/tools/regression/geom/RunTest.sh b/tools/regression/geom/RunTest.sh
index 46a14b4ab828..d8d6f7cf3232 100644
--- a/tools/regression/geom/RunTest.sh
+++ b/tools/regression/geom/RunTest.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
MD=34
TMP=/tmp/$$
diff --git a/tools/regression/geom/RunTest.t b/tools/regression/geom/RunTest.t
index 1948132f5eac..83ef47635c05 100644
--- a/tools/regression/geom/RunTest.t
+++ b/tools/regression/geom/RunTest.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
MD=34
TMP=/tmp/$$
diff --git a/tools/regression/geom_gpt/Makefile b/tools/regression/geom_gpt/Makefile
index eb5a9659ff4f..603ceb0d61b7 100644
--- a/tools/regression/geom_gpt/Makefile
+++ b/tools/regression/geom_gpt/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= gctl_test_helper
MAN=
diff --git a/tools/regression/geom_gpt/gctl_test.t b/tools/regression/geom_gpt/gctl_test.t
index f8bceaa2f52e..96d232e63999 100644
--- a/tools/regression/geom_gpt/gctl_test.t
+++ b/tools/regression/geom_gpt/gctl_test.t
@@ -24,7 +24,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
use strict;
use warnings;
diff --git a/tools/regression/geom_gpt/gctl_test_helper.c b/tools/regression/geom_gpt/gctl_test_helper.c
index 870266e1e1b3..1ac8dceb50fd 100644
--- a/tools/regression/geom_gpt/gctl_test_helper.c
+++ b/tools/regression/geom_gpt/gctl_test_helper.c
@@ -24,9 +24,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <assert.h>
#include <err.h>
diff --git a/tools/regression/include/stdatomic/Makefile b/tools/regression/include/stdatomic/Makefile
index 2bc346a7d6fc..d0bbc93a2a26 100644
--- a/tools/regression/include/stdatomic/Makefile
+++ b/tools/regression/include/stdatomic/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= logic
MAN=
diff --git a/tools/regression/include/stdatomic/Makefile.depend b/tools/regression/include/stdatomic/Makefile.depend
index 8d409f5263ac..6ef78fac5cbf 100644
--- a/tools/regression/include/stdatomic/Makefile.depend
+++ b/tools/regression/include/stdatomic/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
diff --git a/tools/regression/include/stdatomic/logic.c b/tools/regression/include/stdatomic/logic.c
index 96599833afad..e5534851417d 100644
--- a/tools/regression/include/stdatomic/logic.c
+++ b/tools/regression/include/stdatomic/logic.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <assert.h>
#include <stdatomic.h>
#include <stdint.h>
diff --git a/tools/regression/include/tgmath/Makefile b/tools/regression/include/tgmath/Makefile
index 04116c0fa3a3..aebd7e1b81e2 100644
--- a/tools/regression/include/tgmath/Makefile
+++ b/tools/regression/include/tgmath/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tgmath
CSTD= c99
CFLAGS+= -fno-builtin
diff --git a/tools/regression/include/tgmath/tgmath.c b/tools/regression/include/tgmath/tgmath.c
index 037810ad9df0..5f257783688d 100644
--- a/tools/regression/include/tgmath/tgmath.c
+++ b/tools/regression/include/tgmath/tgmath.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/cdefs.h>
diff --git a/tools/regression/include/tgmath/tgmath.t b/tools/regression/include/tgmath/tgmath.t
index 8bdfd03be81b..74eb8c9c581d 100644
--- a/tools/regression/include/tgmath/tgmath.t
+++ b/tools/regression/include/tgmath/tgmath.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
diff --git a/tools/regression/ipfw/fwd/vimage-fwd.sh b/tools/regression/ipfw/fwd/vimage-fwd.sh
index 5dbfcd77b453..c9ef0501147c 100755
--- a/tools/regression/ipfw/fwd/vimage-fwd.sh
+++ b/tools/regression/ipfw/fwd/vimage-fwd.sh
@@ -25,7 +25,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/ipsec/ipsec.t b/tools/regression/ipsec/ipsec.t
index 6446bf5869e3..121c8d96448b 100644
--- a/tools/regression/ipsec/ipsec.t
+++ b/tools/regression/ipsec/ipsec.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
#
# IPsec regression test.
#
diff --git a/tools/regression/ipsec/ipsec6.t b/tools/regression/ipsec/ipsec6.t
index a13edd361185..15e553338fd7 100644
--- a/tools/regression/ipsec/ipsec6.t
+++ b/tools/regression/ipsec/ipsec6.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
#
# IPv6 IPsec test based on ipsec.t, in this same directory, which tests
# IPsec by setting up a set of tunnels and then sending ICMPv6 packets,
diff --git a/tools/regression/iscsi/initiator-instructions.txt b/tools/regression/iscsi/initiator-instructions.txt
index 11c3311cddb2..e99ff87fe379 100644
--- a/tools/regression/iscsi/initiator-instructions.txt
+++ b/tools/regression/iscsi/initiator-instructions.txt
@@ -3,9 +3,9 @@ How to prepare initiator virtual machines for iSCSI target testing
1. Install operating systems.
- - FreeBSD: Use default settings for everything. Don't install
- ports from the system installer, use "portsnap fetch extract"
- after installation instead.
+ - FreeBSD: Use default settings for everything. Don't install ports
+ from the system installer, fetch a new ports tree after
+ installation instead.
- Fedora: Change the environment to "Minimal install".
diff --git a/tools/regression/iscsi/iscsi-test.sh b/tools/regression/iscsi/iscsi-test.sh
index 9626e7dac431..a52b98a0f8e7 100644
--- a/tools/regression/iscsi/iscsi-test.sh
+++ b/tools/regression/iscsi/iscsi-test.sh
@@ -26,7 +26,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/kgssapi/Makefile b/tools/regression/kgssapi/Makefile
index 203b688462a5..582658663d3f 100644
--- a/tools/regression/kgssapi/Makefile
+++ b/tools/regression/kgssapi/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= gsstest
MAN=
WARNS?= 2
diff --git a/tools/regression/kgssapi/gsstest.c b/tools/regression/kgssapi/gsstest.c
index acebf4ce1e9b..585d259aa438 100644
--- a/tools/regression/kgssapi/gsstest.c
+++ b/tools/regression/kgssapi/gsstest.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/kthread/kld/Makefile b/tools/regression/kthread/kld/Makefile
index b21848183abb..8ed2dabb4230 100644
--- a/tools/regression/kthread/kld/Makefile
+++ b/tools/regression/kthread/kld/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}
KMOD= kthrdlk
diff --git a/tools/regression/kthread/kld/kthrdlk.c b/tools/regression/kthread/kld/kthrdlk.c
index 67825b6daf19..5d970b95959d 100644
--- a/tools/regression/kthread/kld/kthrdlk.c
+++ b/tools/regression/kthread/kld/kthrdlk.c
@@ -32,9 +32,6 @@
*
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
diff --git a/tools/regression/lib/libc/regex/Makefile b/tools/regression/lib/libc/regex/Makefile
index f91bef24ffe9..9b070b75cfb6 100644
--- a/tools/regression/lib/libc/regex/Makefile
+++ b/tools/regression/lib/libc/regex/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
GROT= ../../../../../lib/libc/regex/grot
.PHONY: tests
diff --git a/tools/regression/mlock/Makefile b/tools/regression/mlock/Makefile
index 69fe099466e8..77d295ceb7c7 100644
--- a/tools/regression/mlock/Makefile
+++ b/tools/regression/mlock/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= mlock
MAN=
diff --git a/tools/regression/mlock/mlock.c b/tools/regression/mlock/mlock.c
index d371b2bee1d7..86997d14d534 100644
--- a/tools/regression/mlock/mlock.c
+++ b/tools/regression/mlock/mlock.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/msdosfs/msdosfstest-2.sh b/tools/regression/msdosfs/msdosfstest-2.sh
index 2262af803a5d..38790ad06c88 100644
--- a/tools/regression/msdosfs/msdosfstest-2.sh
+++ b/tools/regression/msdosfs/msdosfstest-2.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# A really simple script to create a swap-backed msdosfs filesystem, then test to
# make sure the case conversion issue described in msdosfs_lookup.c rev 1.46
# is fixed.
diff --git a/tools/regression/msdosfs/msdosfstest-3.sh b/tools/regression/msdosfs/msdosfstest-3.sh
index bfffc586f6c2..e64233dc637e 100644
--- a/tools/regression/msdosfs/msdosfstest-3.sh
+++ b/tools/regression/msdosfs/msdosfstest-3.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# A really simple script to create a swap-backed msdosfs filesystem, then
# test to make sure the mbnambuf optimisation(msdosfs_conv.c rev 1.40)
# doesn't break multi-byte characters.
diff --git a/tools/regression/msdosfs/msdosfstest-4.sh b/tools/regression/msdosfs/msdosfstest-4.sh
index 5e3c88e54d0a..e5d2e336c95c 100644
--- a/tools/regression/msdosfs/msdosfstest-4.sh
+++ b/tools/regression/msdosfs/msdosfstest-4.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# A really simple script to create a swap-backed msdosfs filesystem, then
# test to see if msdosfs_conv.c rev 1.45[1] works properly.
diff --git a/tools/regression/msdosfs/msdosfstest-5.sh b/tools/regression/msdosfs/msdosfstest-5.sh
index 6c8a45d8c974..24dad565f4e2 100644
--- a/tools/regression/msdosfs/msdosfstest-5.sh
+++ b/tools/regression/msdosfs/msdosfstest-5.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# A really simple script to create a swap-backed msdosfs filesystem, then
# test to see if msdosfs_conv.c rev 1.45[2] works properly.
# Note that this is a requisite condition but far away from sufficient condition.
diff --git a/tools/regression/msdosfs/msdosfstest-6.sh b/tools/regression/msdosfs/msdosfstest-6.sh
index c580b3ed6f4c..0eecf3e02568 100644
--- a/tools/regression/msdosfs/msdosfstest-6.sh
+++ b/tools/regression/msdosfs/msdosfstest-6.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# A really simple script to create a swap-backed msdosfs filesystem, then
# test to make sure the nmount conversion(mount_msdosfs.c rev 1.37)
# doesn't break multi-byte characters.
diff --git a/tools/regression/msdosfs/msdosfstest.sh b/tools/regression/msdosfs/msdosfstest.sh
index ba2a434ce5ab..54e3b4bf4fb8 100644
--- a/tools/regression/msdosfs/msdosfstest.sh
+++ b/tools/regression/msdosfs/msdosfstest.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# A really simple script to create a swap-backed msdosfs filesystem, copy a few
# files to it, unmount/remount the filesystem, and make sure all is well.
#
diff --git a/tools/regression/net/if_tap/test-tap.sh b/tools/regression/net/if_tap/test-tap.sh
index 372155656280..2788271df705 100644
--- a/tools/regression/net/if_tap/test-tap.sh
+++ b/tools/regression/net/if_tap/test-tap.sh
@@ -23,7 +23,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
tap_exists()
{
diff --git a/tools/regression/net80211/ccmp/Makefile b/tools/regression/net80211/ccmp/Makefile
index 0d918b1427ab..298e41836f24 100644
--- a/tools/regression/net80211/ccmp/Makefile
+++ b/tools/regression/net80211/ccmp/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/net80211
KMOD= test_ccmp
diff --git a/tools/regression/net80211/ccmp/test_ccmp.c b/tools/regression/net80211/ccmp/test_ccmp.c
index ffe4b7caf70a..d87695099296 100644
--- a/tools/regression/net80211/ccmp/test_ccmp.c
+++ b/tools/regression/net80211/ccmp/test_ccmp.c
@@ -27,8 +27,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/net80211/tkip/Makefile b/tools/regression/net80211/tkip/Makefile
index 1a1f7cacb4d4..e6295bc1eea7 100644
--- a/tools/regression/net80211/tkip/Makefile
+++ b/tools/regression/net80211/tkip/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/net80211
KMOD= test_tkip
diff --git a/tools/regression/net80211/tkip/test_tkip.c b/tools/regression/net80211/tkip/test_tkip.c
index 70d2e385407d..690e2a4294fc 100644
--- a/tools/regression/net80211/tkip/test_tkip.c
+++ b/tools/regression/net80211/tkip/test_tkip.c
@@ -27,8 +27,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/net80211/wep/Makefile b/tools/regression/net80211/wep/Makefile
index 1ab4712b9477..dd742a45401b 100644
--- a/tools/regression/net80211/wep/Makefile
+++ b/tools/regression/net80211/wep/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/net80211
KMOD= test_wep
diff --git a/tools/regression/net80211/wep/test_wep.c b/tools/regression/net80211/wep/test_wep.c
index c156863e668c..27ec33174e39 100644
--- a/tools/regression/net80211/wep/test_wep.c
+++ b/tools/regression/net80211/wep/test_wep.c
@@ -27,8 +27,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/netinet/arphold/Makefile b/tools/regression/netinet/arphold/Makefile
index 6b679d39815a..97cedfc3f9d1 100644
--- a/tools/regression/netinet/arphold/Makefile
+++ b/tools/regression/netinet/arphold/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= arphold
MAN=
CFLAGS+= -Wall
diff --git a/tools/regression/netinet/arphold/arphold.c b/tools/regression/netinet/arphold/arphold.c
index 417a2d8c15d5..c49166ed4bc4 100644
--- a/tools/regression/netinet/arphold/arphold.c
+++ b/tools/regression/netinet/arphold/arphold.c
@@ -39,8 +39,6 @@
* CAVEAT: The ARP timer will flush the queue after 1 second so it is
* important not to run this code in a fast loop or the test will
* fail.
- *
- * $FreeBSD$
*/
#include <unistd.h>
diff --git a/tools/regression/netinet/arphold/arphold.t b/tools/regression/netinet/arphold/arphold.t
index eb1b2a8c5ad3..a56784c8ea78 100644
--- a/tools/regression/netinet/arphold/arphold.t
+++ b/tools/regression/netinet/arphold/arphold.t
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
make arphold 2>&1 > /dev/null
diff --git a/tools/regression/netinet/ip_id_period/ip_id_period.py b/tools/regression/netinet/ip_id_period/ip_id_period.py
index c04f5a4b133b..2e97df499ae2 100644
--- a/tools/regression/netinet/ip_id_period/ip_id_period.py
+++ b/tools/regression/netinet/ip_id_period/ip_id_period.py
@@ -21,7 +21,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
# This is a regression test to verify the proper behavior of IP ID generation
# code. It will push 200000 packets, then report back what the min and max
diff --git a/tools/regression/netinet/ipbroadcast/Makefile b/tools/regression/netinet/ipbroadcast/Makefile
index c1e5bba93dcf..2036936e8da6 100644
--- a/tools/regression/netinet/ipbroadcast/Makefile
+++ b/tools/regression/netinet/ipbroadcast/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= ipbroadcast
diff --git a/tools/regression/netinet/ipbroadcast/ipbroadcast.c b/tools/regression/netinet/ipbroadcast/ipbroadcast.c
index 8d6f2479aabf..9315ebe2b6ad 100644
--- a/tools/regression/netinet/ipbroadcast/ipbroadcast.c
+++ b/tools/regression/netinet/ipbroadcast/ipbroadcast.c
@@ -28,9 +28,6 @@
* Test utility for IPv4 broadcast sockets.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/types.h>
#include <sys/ioctl.h>
@@ -94,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");
@@ -112,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;
@@ -124,7 +116,6 @@ main(int argc, char *argv[])
int dobroadcast;
int dontroute;
int doonesbcast;
- int dorandom;
int dorawip;
size_t buflen;
ssize_t nbytes;
@@ -139,7 +130,6 @@ main(int argc, char *argv[])
dobroadcast = 0;
dontroute = 0;
doonesbcast = 0;
- dorandom = 0;
dorawip = 0;
ifname = NULL;
@@ -153,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;
@@ -182,9 +172,6 @@ main(int argc, char *argv[])
case 'R':
dorawip = 1;
break;
- case 'r':
- dorandom = 1;
- break;
case 's':
srcaddr_s = optarg;
break;
@@ -314,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) {
@@ -330,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/ipdivert/Makefile b/tools/regression/netinet/ipdivert/Makefile
index 59a0bc909f70..211741520165 100644
--- a/tools/regression/netinet/ipdivert/Makefile
+++ b/tools/regression/netinet/ipdivert/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= ipdivert
diff --git a/tools/regression/netinet/ipdivert/ipdivert.c b/tools/regression/netinet/ipdivert/ipdivert.c
index 0d5849159a9a..80870c297d26 100644
--- a/tools/regression/netinet/ipdivert/ipdivert.c
+++ b/tools/regression/netinet/ipdivert/ipdivert.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -76,7 +74,7 @@ ipdivert_create(const char *test)
{
int s;
- s = socket(PF_INET, SOCK_RAW, IPPROTO_DIVERT);
+ s = socket(PF_DIVERT, SOCK_RAW, 0);
if (s < 0)
fail(test, "socket");
return (s);
diff --git a/tools/regression/netinet/ipmulticast/Makefile b/tools/regression/netinet/ipmulticast/Makefile
index c0291e7072eb..0c12831aa399 100644
--- a/tools/regression/netinet/ipmulticast/Makefile
+++ b/tools/regression/netinet/ipmulticast/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= ipmulticast
diff --git a/tools/regression/netinet/ipmulticast/ipmulticast.c b/tools/regression/netinet/ipmulticast/ipmulticast.c
index af67fcfb150a..eb06c544a7ea 100644
--- a/tools/regression/netinet/ipmulticast/ipmulticast.c
+++ b/tools/regression/netinet/ipmulticast/ipmulticast.c
@@ -32,9 +32,6 @@
* TODO: Merge multicast socket option tests from ipsockopt.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/types.h>
#include <sys/ioctl.h>
diff --git a/tools/regression/netinet/ipsockopt/Makefile b/tools/regression/netinet/ipsockopt/Makefile
index f142412c74ba..a6b084118f04 100644
--- a/tools/regression/netinet/ipsockopt/Makefile
+++ b/tools/regression/netinet/ipsockopt/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= ipsockopt
diff --git a/tools/regression/netinet/ipsockopt/ipsockopt.c b/tools/regression/netinet/ipsockopt/ipsockopt.c
index 16805b9e6412..fe74cedc5728 100644
--- a/tools/regression/netinet/ipsockopt/ipsockopt.c
+++ b/tools/regression/netinet/ipsockopt/ipsockopt.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/netinet/ipsockopt/ipsockopt.t b/tools/regression/netinet/ipsockopt/ipsockopt.t
index 8bdfd03be81b..74eb8c9c581d 100644
--- a/tools/regression/netinet/ipsockopt/ipsockopt.t
+++ b/tools/regression/netinet/ipsockopt/ipsockopt.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
diff --git a/tools/regression/netinet/msocket/Makefile b/tools/regression/netinet/msocket/Makefile
index 21dd84f0c185..221b27d0dbf4 100644
--- a/tools/regression/netinet/msocket/Makefile
+++ b/tools/regression/netinet/msocket/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= msocket
MAN=
CFLAGS+= -Wall
diff --git a/tools/regression/netinet/msocket/msocket.c b/tools/regression/netinet/msocket/msocket.c
index 534e9f4b6041..4c1033491637 100644
--- a/tools/regression/netinet/msocket/msocket.c
+++ b/tools/regression/netinet/msocket/msocket.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/netinet/msocket_ifnet_remove/Makefile b/tools/regression/netinet/msocket_ifnet_remove/Makefile
index 0c35c6906dac..08640d862ce4 100644
--- a/tools/regression/netinet/msocket_ifnet_remove/Makefile
+++ b/tools/regression/netinet/msocket_ifnet_remove/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= msocket_ifnet_remove
WARNS?= 3
MAN=
diff --git a/tools/regression/netinet/msocket_ifnet_remove/msocket_ifnet_remove.c b/tools/regression/netinet/msocket_ifnet_remove/msocket_ifnet_remove.c
index 51788eff14c7..f75ae3630569 100644
--- a/tools/regression/netinet/msocket_ifnet_remove/msocket_ifnet_remove.c
+++ b/tools/regression/netinet/msocket_ifnet_remove/msocket_ifnet_remove.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/regression/netinet/rawconnect/Makefile b/tools/regression/netinet/rawconnect/Makefile
index 4f8ba1b4edfd..bd19e1c3bfe7 100644
--- a/tools/regression/netinet/rawconnect/Makefile
+++ b/tools/regression/netinet/rawconnect/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= rawconnect
diff --git a/tools/regression/netinet/rawconnect/rawconnect.c b/tools/regression/netinet/rawconnect/rawconnect.c
index 95f8fc463179..fbdb80db92dc 100644
--- a/tools/regression/netinet/rawconnect/rawconnect.c
+++ b/tools/regression/netinet/rawconnect/rawconnect.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/netinet/rawconnect/rawconnect.t b/tools/regression/netinet/rawconnect/rawconnect.t
index 03f249dda237..2c4f9de40dd1 100644
--- a/tools/regression/netinet/rawconnect/rawconnect.t
+++ b/tools/regression/netinet/rawconnect/rawconnect.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
diff --git a/tools/regression/netinet/tcpconnect/Makefile b/tools/regression/netinet/tcpconnect/Makefile
index a6b9d71de224..1326489ded89 100644
--- a/tools/regression/netinet/tcpconnect/Makefile
+++ b/tools/regression/netinet/tcpconnect/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= tcpconnect
diff --git a/tools/regression/netinet/tcpconnect/README.tcp-md5 b/tools/regression/netinet/tcpconnect/README.tcp-md5
index c5090234b1c6..a3f6fbfbbe00 100644
--- a/tools/regression/netinet/tcpconnect/README.tcp-md5
+++ b/tools/regression/netinet/tcpconnect/README.tcp-md5
@@ -1,4 +1,3 @@
-# $FreeBSD$
To test tcp-md5 do:
diff --git a/tools/regression/netinet/tcpconnect/tcpconnect.c b/tools/regression/netinet/tcpconnect/tcpconnect.c
index 1257f6689464..6de76e803e50 100644
--- a/tools/regression/netinet/tcpconnect/tcpconnect.c
+++ b/tools/regression/netinet/tcpconnect/tcpconnect.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/netinet/tcpdrop/Makefile b/tools/regression/netinet/tcpdrop/Makefile
index 1bd01aa0e07d..30c51c21909f 100644
--- a/tools/regression/netinet/tcpdrop/Makefile
+++ b/tools/regression/netinet/tcpdrop/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= tcpdrop
diff --git a/tools/regression/netinet/tcpdrop/tcpdrop.c b/tools/regression/netinet/tcpdrop/tcpdrop.c
index 7cfc65860d71..95052f909fd4 100644
--- a/tools/regression/netinet/tcpdrop/tcpdrop.c
+++ b/tools/regression/netinet/tcpdrop/tcpdrop.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/netinet/tcpfullwindowrst/Makefile b/tools/regression/netinet/tcpfullwindowrst/Makefile
index 52333897f6fb..ad401e9df1cd 100644
--- a/tools/regression/netinet/tcpfullwindowrst/Makefile
+++ b/tools/regression/netinet/tcpfullwindowrst/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tcpfullwindowrsttest
MAN=
diff --git a/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrst.t b/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrst.t
index 49acbccf6e80..457255e2a76b 100644
--- a/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrst.t
+++ b/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrst.t
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
make tcpfullwindowrsttest 2>&1 > /dev/null
diff --git a/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrsttest.c b/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrsttest.c
index 6e4ac0356a36..964892f5e380 100644
--- a/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrsttest.c
+++ b/tools/regression/netinet/tcpfullwindowrst/tcpfullwindowrsttest.c
@@ -24,8 +24,6 @@ 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.
-$FreeBSD$
-
*/
#include <sys/types.h>
diff --git a/tools/regression/netinet/tcpsockclosebeforeaccept/Makefile b/tools/regression/netinet/tcpsockclosebeforeaccept/Makefile
index dfc0691f37ef..ad26320b6529 100644
--- a/tools/regression/netinet/tcpsockclosebeforeaccept/Makefile
+++ b/tools/regression/netinet/tcpsockclosebeforeaccept/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= tcpsockclosebeforeaccept
diff --git a/tools/regression/netinet/tcpsockclosebeforeaccept/tcpsockclosebeforeaccept.c b/tools/regression/netinet/tcpsockclosebeforeaccept/tcpsockclosebeforeaccept.c
index b7ef7656b9b7..b9180108a823 100644
--- a/tools/regression/netinet/tcpsockclosebeforeaccept/tcpsockclosebeforeaccept.c
+++ b/tools/regression/netinet/tcpsockclosebeforeaccept/tcpsockclosebeforeaccept.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/netinet/tcpsocktimewait/Makefile b/tools/regression/netinet/tcpsocktimewait/Makefile
index 63cb6359c32b..5ab67d506bf0 100644
--- a/tools/regression/netinet/tcpsocktimewait/Makefile
+++ b/tools/regression/netinet/tcpsocktimewait/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= tcpsocktimewait
diff --git a/tools/regression/netinet/tcpsocktimewait/tcpsocktimewait.c b/tools/regression/netinet/tcpsocktimewait/tcpsocktimewait.c
index 302546885419..2b54aa925eb8 100644
--- a/tools/regression/netinet/tcpsocktimewait/tcpsocktimewait.c
+++ b/tools/regression/netinet/tcpsocktimewait/tcpsocktimewait.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/netinet/tcpstream/Makefile b/tools/regression/netinet/tcpstream/Makefile
index 37cbcc030c88..e5bfa82b5ddf 100644
--- a/tools/regression/netinet/tcpstream/Makefile
+++ b/tools/regression/netinet/tcpstream/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
CFLAGS+= -Wall
diff --git a/tools/regression/netinet/tcpstream/README b/tools/regression/netinet/tcpstream/README
index df2e9b1a21da..4ac11ae0e70d 100644
--- a/tools/regression/netinet/tcpstream/README
+++ b/tools/regression/netinet/tcpstream/README
@@ -16,5 +16,3 @@ Now run the client on a second machine with the server's IP, port 8080, and
seed of 100:
tcpstream client 192.168.10.10 8080 100
-
-$FreeBSD$
diff --git a/tools/regression/netinet/tcpstream/tcpstream.c b/tools/regression/netinet/tcpstream/tcpstream.c
index c8fe9a3fe098..8bdd2bd2e305 100644
--- a/tools/regression/netinet/tcpstream/tcpstream.c
+++ b/tools/regression/netinet/tcpstream/tcpstream.c
@@ -22,14 +22,12 @@
* 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.
- *
- * $FreeBSD$
*/
/*
* tcpstream sets up a simple TCP client and server, and then streams a
* predictable pseudo-random byte sequence through it using variable block
- * sizes. The intent is to to detect corruption of data in the TCP stream.
+ * sizes. The intent is to detect corruption of data in the TCP stream.
*/
#include <sys/types.h>
diff --git a/tools/regression/netinet/udpconnectjail/Makefile b/tools/regression/netinet/udpconnectjail/Makefile
index 10688691c322..88a14afb91d8 100644
--- a/tools/regression/netinet/udpconnectjail/Makefile
+++ b/tools/regression/netinet/udpconnectjail/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= udpconnectjail
MAN=
WARNS?= 2
diff --git a/tools/regression/netinet/udpconnectjail/udpconnectjail.c b/tools/regression/netinet/udpconnectjail/udpconnectjail.c
index 718836cbe99b..28d81aa1b1db 100644
--- a/tools/regression/netinet/udpconnectjail/udpconnectjail.c
+++ b/tools/regression/netinet/udpconnectjail/udpconnectjail.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/regression/netinet/udpzerobyte/Makefile b/tools/regression/netinet/udpzerobyte/Makefile
index 35bd4c12e545..3cba327d2bd3 100644
--- a/tools/regression/netinet/udpzerobyte/Makefile
+++ b/tools/regression/netinet/udpzerobyte/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= udpzerobyte
MAN=
WARNS?= 2
diff --git a/tools/regression/netinet/udpzerobyte/udpzerobyte.c b/tools/regression/netinet/udpzerobyte/udpzerobyte.c
index c19149233deb..98f31598ea35 100644
--- a/tools/regression/netinet/udpzerobyte/udpzerobyte.c
+++ b/tools/regression/netinet/udpzerobyte/udpzerobyte.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/regression/netinet6/icmp6_filter/Makefile b/tools/regression/netinet6/icmp6_filter/Makefile
index a28ad743cebe..3743da2a604e 100644
--- a/tools/regression/netinet6/icmp6_filter/Makefile
+++ b/tools/regression/netinet6/icmp6_filter/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= icmp6_filter
diff --git a/tools/regression/netinet6/icmp6_filter/icmp6_filter.c b/tools/regression/netinet6/icmp6_filter/icmp6_filter.c
index 68e3b3314140..1e94d178a7d5 100644
--- a/tools/regression/netinet6/icmp6_filter/icmp6_filter.c
+++ b/tools/regression/netinet6/icmp6_filter/icmp6_filter.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/netinet6/inet6_rth/Makefile b/tools/regression/netinet6/inet6_rth/Makefile
index 6a3c04b01c76..d23141f5ba95 100644
--- a/tools/regression/netinet6/inet6_rth/Makefile
+++ b/tools/regression/netinet6/inet6_rth/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
PROG= inet6_rth-segments
SRCS= test_subr.c inet6_rth-segments.c
diff --git a/tools/regression/netinet6/inet6_rth/inet6_rth-segments.c b/tools/regression/netinet6/inet6_rth/inet6_rth-segments.c
index 5ac1d9768565..5ca6bfcdde76 100644
--- a/tools/regression/netinet6/inet6_rth/inet6_rth-segments.c
+++ b/tools/regression/netinet6/inet6_rth/inet6_rth-segments.c
@@ -25,9 +25,6 @@
*
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
diff --git a/tools/regression/netinet6/inet6_rth/test_subr.c b/tools/regression/netinet6/inet6_rth/test_subr.c
index ab09ec803851..59d4e43fff6d 100644
--- a/tools/regression/netinet6/inet6_rth/test_subr.c
+++ b/tools/regression/netinet6/inet6_rth/test_subr.c
@@ -25,9 +25,6 @@
*
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <stdio.h>
diff --git a/tools/regression/netinet6/inet6_rth/test_subr.h b/tools/regression/netinet6/inet6_rth/test_subr.h
index f0463daed51c..3890043fd2df 100644
--- a/tools/regression/netinet6/inet6_rth/test_subr.h
+++ b/tools/regression/netinet6/inet6_rth/test_subr.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/netinet6/ip6_sockets/Makefile b/tools/regression/netinet6/ip6_sockets/Makefile
index bf9b740794ef..c6f797fbc56d 100644
--- a/tools/regression/netinet6/ip6_sockets/Makefile
+++ b/tools/regression/netinet6/ip6_sockets/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= ip6_sockets
diff --git a/tools/regression/netinet6/ip6_sockets/ip6_sockets.c b/tools/regression/netinet6/ip6_sockets/ip6_sockets.c
index 07e6209297c5..71da53458a8f 100644
--- a/tools/regression/netinet6/ip6_sockets/ip6_sockets.c
+++ b/tools/regression/netinet6/ip6_sockets/ip6_sockets.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/socket.h>
diff --git a/tools/regression/nfsmmap/Makefile b/tools/regression/nfsmmap/Makefile
index 959725694229..c731d428f7c1 100644
--- a/tools/regression/nfsmmap/Makefile
+++ b/tools/regression/nfsmmap/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= test1 test2
.include <bsd.subdir.mk>
diff --git a/tools/regression/nfsmmap/README b/tools/regression/nfsmmap/README
index 055ed652ecd6..1dc8b9cfd8ca 100644
--- a/tools/regression/nfsmmap/README
+++ b/tools/regression/nfsmmap/README
@@ -1,4 +1,3 @@
-$FreeBSD$
These tests are intended to make sure that NFS's use of the
b_{valid,dirty}{off,end} fields of struct buf is consistent with the
VM system's use of the underlying VM pages.
diff --git a/tools/regression/nfsmmap/test1/Makefile b/tools/regression/nfsmmap/test1/Makefile
index 5802538d2ced..97b2b6553211 100644
--- a/tools/regression/nfsmmap/test1/Makefile
+++ b/tools/regression/nfsmmap/test1/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= test1
MAN=
NFSSERVER?= herring.nlsystems.com
diff --git a/tools/regression/nfsmmap/test2/Makefile b/tools/regression/nfsmmap/test2/Makefile
index 5f09d02ce588..6d785a140dcb 100644
--- a/tools/regression/nfsmmap/test2/Makefile
+++ b/tools/regression/nfsmmap/test2/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= test2
MAN=
NFSSERVER?= herring.nlsystems.com
diff --git a/tools/regression/p1003_1b/Makefile b/tools/regression/p1003_1b/Makefile
index 902666c2ec39..b5e7034792b4 100644
--- a/tools/regression/p1003_1b/Makefile
+++ b/tools/regression/p1003_1b/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG=p1003_1b
SRCS=\
diff --git a/tools/regression/p1003_1b/README b/tools/regression/p1003_1b/README
index e0b703754927..206f2dc06b90 100644
--- a/tools/regression/p1003_1b/README
+++ b/tools/regression/p1003_1b/README
@@ -1,4 +1,3 @@
-$FreeBSD$
p1003_1b: Regression tests for the scheduling facilities.
The following should always work as of the release of 4.0:
diff --git a/tools/regression/p1003_1b/fifo.c b/tools/regression/p1003_1b/fifo.c
index bf8fae0bb262..614781f8d4fb 100644
--- a/tools/regression/p1003_1b/fifo.c
+++ b/tools/regression/p1003_1b/fifo.c
@@ -30,8 +30,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/mman.h>
diff --git a/tools/regression/p1003_1b/main.c b/tools/regression/p1003_1b/main.c
index 5cf3183955f8..7333b64bd455 100644
--- a/tools/regression/p1003_1b/main.c
+++ b/tools/regression/p1003_1b/main.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <sys/param.h>
diff --git a/tools/regression/p1003_1b/memlock.c b/tools/regression/p1003_1b/memlock.c
index 3033fbbacfd5..dd0996134011 100644
--- a/tools/regression/p1003_1b/memlock.c
+++ b/tools/regression/p1003_1b/memlock.c
@@ -30,8 +30,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <unistd.h>
#include <stdio.h>
diff --git a/tools/regression/p1003_1b/p26.c b/tools/regression/p1003_1b/p26.c
index ae869bffddf3..9ae35fbbbe40 100644
--- a/tools/regression/p1003_1b/p26.c
+++ b/tools/regression/p1003_1b/p26.c
@@ -30,8 +30,6 @@
* 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.
- *
- * $FreeBSD$
*/
#define _POSIX_SOURCE
#define _POSIX_C_SOURCE 199309L
diff --git a/tools/regression/p1003_1b/prutil.c b/tools/regression/p1003_1b/prutil.c
index 2910b7fdd2c3..be8c6588e1a9 100644
--- a/tools/regression/p1003_1b/prutil.c
+++ b/tools/regression/p1003_1b/prutil.c
@@ -9,7 +9,6 @@
#include "prutil.h"
/*
- * $FreeBSD$
*/
void quit(const char *text)
{
diff --git a/tools/regression/p1003_1b/prutil.h b/tools/regression/p1003_1b/prutil.h
index 3387b994b151..5eaaa784920a 100644
--- a/tools/regression/p1003_1b/prutil.h
+++ b/tools/regression/p1003_1b/prutil.h
@@ -2,7 +2,6 @@
#define _PRUTIL_H_
/*
- * $FreeBSD$
*/
struct sched_param;
diff --git a/tools/regression/p1003_1b/sched.c b/tools/regression/p1003_1b/sched.c
index ea6fcc7a461f..b9340db89235 100644
--- a/tools/regression/p1003_1b/sched.c
+++ b/tools/regression/p1003_1b/sched.c
@@ -30,7 +30,6 @@
* 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.
- * $FreeBSD$
*
*/
diff --git a/tools/regression/p1003_1b/yield.c b/tools/regression/p1003_1b/yield.c
index 479ce50ef886..f25e71b48b31 100644
--- a/tools/regression/p1003_1b/yield.c
+++ b/tools/regression/p1003_1b/yield.c
@@ -30,7 +30,6 @@
* 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.
- * $FreeBSD$
*
*/
#include <sys/types.h>
diff --git a/tools/regression/poll/Makefile b/tools/regression/poll/Makefile
index 45f743f17ae6..bbf019d65c8b 100644
--- a/tools/regression/poll/Makefile
+++ b/tools/regression/poll/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
# This makefile has been uglified for portability.
# Nothing yet works with gmake for the path to the sources.
.PATH: ..
diff --git a/tools/regression/poll/Readme b/tools/regression/poll/Readme
index 658379486e4f..34c037c5af8d 100644
--- a/tools/regression/poll/Readme
+++ b/tools/regression/poll/Readme
@@ -1,4 +1,3 @@
-$FreeBSD$
The directory contains poll(2) and select(2) compliance (and more) tests
from Bruce Evans, together with canned test results from several systems
diff --git a/tools/regression/poll/pipepoll.c b/tools/regression/poll/pipepoll.c
index 5ca064bf6bf3..9fcf450adeba 100644
--- a/tools/regression/poll/pipepoll.c
+++ b/tools/regression/poll/pipepoll.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <sys/poll.h>
#include <sys/socket.h>
diff --git a/tools/regression/poll/pipeselect.c b/tools/regression/poll/pipeselect.c
index fe6e8ed33daa..7e16ec071ede 100644
--- a/tools/regression/poll/pipeselect.c
+++ b/tools/regression/poll/pipeselect.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <sys/socket.h>
#include <sys/select.h>
diff --git a/tools/regression/poll/sockpoll.c b/tools/regression/poll/sockpoll.c
index 31ebcaf9bcb2..ea3c91c3affb 100644
--- a/tools/regression/poll/sockpoll.c
+++ b/tools/regression/poll/sockpoll.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#define _GNU_SOURCE /* expose POLLRDHUP when testing on Linux */
diff --git a/tools/regression/posixsem/Makefile b/tools/regression/posixsem/Makefile
index 5f73a72376d4..2054d64afa45 100644
--- a/tools/regression/posixsem/Makefile
+++ b/tools/regression/posixsem/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= posixsem
SRCS= posixsem.c test.c
LIBADD= kvm
diff --git a/tools/regression/posixsem/posixsem.c b/tools/regression/posixsem/posixsem.c
index 9d0465682951..0668a0d4f4fb 100644
--- a/tools/regression/posixsem/posixsem.c
+++ b/tools/regression/posixsem/posixsem.c
@@ -30,9 +30,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/_semaphore.h>
diff --git a/tools/regression/posixsem/posixsem.t b/tools/regression/posixsem/posixsem.t
index 198d2be6c89c..499ac4733c46 100644
--- a/tools/regression/posixsem/posixsem.t
+++ b/tools/regression/posixsem/posixsem.t
@@ -1,5 +1,4 @@
#!/bin/sh
#
-# $FreeBSD$
./posixsem
diff --git a/tools/regression/posixsem/test.c b/tools/regression/posixsem/test.c
index bd309733c568..3d8fd0532baa 100644
--- a/tools/regression/posixsem/test.c
+++ b/tools/regression/posixsem/test.c
@@ -31,8 +31,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdarg.h>
#include <stdio.h>
diff --git a/tools/regression/posixsem/test.h b/tools/regression/posixsem/test.h
index 39f3c2ff74af..3ef37cbae54a 100644
--- a/tools/regression/posixsem/test.h
+++ b/tools/regression/posixsem/test.h
@@ -28,8 +28,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef __TEST_H__
diff --git a/tools/regression/posixsem2/Makefile b/tools/regression/posixsem2/Makefile
index d9859087b94e..3e8227a1c952 100644
--- a/tools/regression/posixsem2/Makefile
+++ b/tools/regression/posixsem2/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= semtest
SRCS= semtest.c
MAN=
diff --git a/tools/regression/posixsem2/semtest.c b/tools/regression/posixsem2/semtest.c
index 0879ff9fda78..5ff2d3e9a888 100644
--- a/tools/regression/posixsem2/semtest.c
+++ b/tools/regression/posixsem2/semtest.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <sys/types.h>
#include <sys/wait.h>
diff --git a/tools/regression/priv/Makefile b/tools/regression/priv/Makefile
index 32a4a74fdd53..43fc46236035 100644
--- a/tools/regression/priv/Makefile
+++ b/tools/regression/priv/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
.include <src.opts.mk>
diff --git a/tools/regression/priv/main.c b/tools/regression/priv/main.c
index 74b7b2f47775..dbcb5759f6b9 100644
--- a/tools/regression/priv/main.c
+++ b/tools/regression/priv/main.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/main.h b/tools/regression/priv/main.h
index 475a47ebbd17..bb46f910096c 100644
--- a/tools/regression/priv/main.h
+++ b/tools/regression/priv/main.h
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
#define UID_ROOT 0
diff --git a/tools/regression/priv/priv_acct.c b/tools/regression/priv/priv_acct.c
index d1324bbeb49c..2762ff23d899 100644
--- a/tools/regression/priv/priv_acct.c
+++ b/tools/regression/priv/priv_acct.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_adjtime.c b/tools/regression/priv/priv_adjtime.c
index 65fbfac48dbe..f2eb2ca4aa92 100644
--- a/tools/regression/priv/priv_adjtime.c
+++ b/tools/regression/priv/priv_adjtime.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_audit_control.c b/tools/regression/priv/priv_audit_control.c
index a6618192d95b..e900c8ef2417 100644
--- a/tools/regression/priv/priv_audit_control.c
+++ b/tools/regression/priv/priv_audit_control.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_audit_getaudit.c b/tools/regression/priv/priv_audit_getaudit.c
index cccabeda28c6..66d0f91b88c5 100644
--- a/tools/regression/priv/priv_audit_getaudit.c
+++ b/tools/regression/priv/priv_audit_getaudit.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_audit_setaudit.c b/tools/regression/priv/priv_audit_setaudit.c
index 0b6d8dbaf173..df0e5e562728 100644
--- a/tools/regression/priv/priv_audit_setaudit.c
+++ b/tools/regression/priv/priv_audit_setaudit.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_audit_submit.c b/tools/regression/priv/priv_audit_submit.c
index 915f6e6cc6f5..b11ddd274b26 100644
--- a/tools/regression/priv/priv_audit_submit.c
+++ b/tools/regression/priv/priv_audit_submit.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_clock_settime.c b/tools/regression/priv/priv_clock_settime.c
index 84b8bebfc8a2..4e7609dcb188 100644
--- a/tools/regression/priv/priv_clock_settime.c
+++ b/tools/regression/priv/priv_clock_settime.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_cred.c b/tools/regression/priv/priv_cred.c
index 2fd0e2c0befd..245dec26482d 100644
--- a/tools/regression/priv/priv_cred.c
+++ b/tools/regression/priv/priv_cred.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_io.c b/tools/regression/priv/priv_io.c
index 31e60a0c20e5..801b2192d976 100644
--- a/tools/regression/priv/priv_io.c
+++ b/tools/regression/priv/priv_io.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_kenv_set.c b/tools/regression/priv/priv_kenv_set.c
index 1e750e03f33f..24d6da7751a2 100644
--- a/tools/regression/priv/priv_kenv_set.c
+++ b/tools/regression/priv/priv_kenv_set.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_kenv_unset.c b/tools/regression/priv/priv_kenv_unset.c
index 02004da78276..dde340d3a8ac 100644
--- a/tools/regression/priv/priv_kenv_unset.c
+++ b/tools/regression/priv/priv_kenv_unset.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_msgbuf.c b/tools/regression/priv/priv_msgbuf.c
index c8db210a4c22..17bf1a09c6f4 100644
--- a/tools/regression/priv/priv_msgbuf.c
+++ b/tools/regression/priv/priv_msgbuf.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_netinet_ipsec.c b/tools/regression/priv/priv_netinet_ipsec.c
index a485886b8fe2..72ccc076a493 100644
--- a/tools/regression/priv/priv_netinet_ipsec.c
+++ b/tools/regression/priv/priv_netinet_ipsec.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_netinet_raw.c b/tools/regression/priv/priv_netinet_raw.c
index 75f66c07d6b2..3e79d0a4e826 100644
--- a/tools/regression/priv/priv_netinet_raw.c
+++ b/tools/regression/priv/priv_netinet_raw.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_proc_setlogin.c b/tools/regression/priv/priv_proc_setlogin.c
index f04b79feaa45..450a3262bc32 100644
--- a/tools/regression/priv/priv_proc_setlogin.c
+++ b/tools/regression/priv/priv_proc_setlogin.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_proc_setrlimit.c b/tools/regression/priv/priv_proc_setrlimit.c
index 590f55f0685b..021350e49b31 100644
--- a/tools/regression/priv/priv_proc_setrlimit.c
+++ b/tools/regression/priv/priv_proc_setrlimit.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*-
diff --git a/tools/regression/priv/priv_sched_rtprio.c b/tools/regression/priv/priv_sched_rtprio.c
index 2498f3faa32a..7652a51bac18 100644
--- a/tools/regression/priv/priv_sched_rtprio.c
+++ b/tools/regression/priv/priv_sched_rtprio.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_sched_setpriority.c b/tools/regression/priv/priv_sched_setpriority.c
index 219fd8c68b1c..6e2097ced83b 100644
--- a/tools/regression/priv/priv_sched_setpriority.c
+++ b/tools/regression/priv/priv_sched_setpriority.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_settimeofday.c b/tools/regression/priv/priv_settimeofday.c
index df9300ecd887..fc7ef35a8a2c 100644
--- a/tools/regression/priv/priv_settimeofday.c
+++ b/tools/regression/priv/priv_settimeofday.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_sysctl_write.c b/tools/regression/priv/priv_sysctl_write.c
index 25e02f91c189..7202f30f54b7 100644
--- a/tools/regression/priv/priv_sysctl_write.c
+++ b/tools/regression/priv/priv_sysctl_write.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_chflags.c b/tools/regression/priv/priv_vfs_chflags.c
index 469b12b125fb..4a1366547abe 100644
--- a/tools/regression/priv/priv_vfs_chflags.c
+++ b/tools/regression/priv/priv_vfs_chflags.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_chmod.c b/tools/regression/priv/priv_vfs_chmod.c
index 6a64871f5973..f7e0e79d92ec 100644
--- a/tools/regression/priv/priv_vfs_chmod.c
+++ b/tools/regression/priv/priv_vfs_chmod.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_chown.c b/tools/regression/priv/priv_vfs_chown.c
index c0c10e640c0d..c126f4c0e207 100644
--- a/tools/regression/priv/priv_vfs_chown.c
+++ b/tools/regression/priv/priv_vfs_chown.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_chroot.c b/tools/regression/priv/priv_vfs_chroot.c
index 4ba15e5a73f0..a5122994fd54 100644
--- a/tools/regression/priv/priv_vfs_chroot.c
+++ b/tools/regression/priv/priv_vfs_chroot.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_clearsugid.c b/tools/regression/priv/priv_vfs_clearsugid.c
index b62a9283c778..5cba16f35a42 100644
--- a/tools/regression/priv/priv_vfs_clearsugid.c
+++ b/tools/regression/priv/priv_vfs_clearsugid.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_extattr_system.c b/tools/regression/priv/priv_vfs_extattr_system.c
index a766a04c7930..64e1ffb9093a 100644
--- a/tools/regression/priv/priv_vfs_extattr_system.c
+++ b/tools/regression/priv/priv_vfs_extattr_system.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_fhopen.c b/tools/regression/priv/priv_vfs_fhopen.c
index 32b32f98a232..b399e2464c03 100644
--- a/tools/regression/priv/priv_vfs_fhopen.c
+++ b/tools/regression/priv/priv_vfs_fhopen.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_fhstat.c b/tools/regression/priv/priv_vfs_fhstat.c
index 18506fa190f1..481d082ba1ed 100644
--- a/tools/regression/priv/priv_vfs_fhstat.c
+++ b/tools/regression/priv/priv_vfs_fhstat.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_fhstatfs.c b/tools/regression/priv/priv_vfs_fhstatfs.c
index f814989423c1..58e4a3ebce02 100644
--- a/tools/regression/priv/priv_vfs_fhstatfs.c
+++ b/tools/regression/priv/priv_vfs_fhstatfs.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_generation.c b/tools/regression/priv/priv_vfs_generation.c
index 0ac58c537ce4..e0e17b4050d1 100644
--- a/tools/regression/priv/priv_vfs_generation.c
+++ b/tools/regression/priv/priv_vfs_generation.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_getfh.c b/tools/regression/priv/priv_vfs_getfh.c
index d2904dfc225a..619c6f814ab1 100644
--- a/tools/regression/priv/priv_vfs_getfh.c
+++ b/tools/regression/priv/priv_vfs_getfh.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_read_write.c b/tools/regression/priv/priv_vfs_read_write.c
index 5bf5a0306a20..8d26320ab978 100644
--- a/tools/regression/priv/priv_vfs_read_write.c
+++ b/tools/regression/priv/priv_vfs_read_write.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_setgid.c b/tools/regression/priv/priv_vfs_setgid.c
index 62ebf8c3a7c3..0f2139f0f1be 100644
--- a/tools/regression/priv/priv_vfs_setgid.c
+++ b/tools/regression/priv/priv_vfs_setgid.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_stickyfile.c b/tools/regression/priv/priv_vfs_stickyfile.c
index 5dcf350105b0..da04155b9170 100644
--- a/tools/regression/priv/priv_vfs_stickyfile.c
+++ b/tools/regression/priv/priv_vfs_stickyfile.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vfs_utimes.c b/tools/regression/priv/priv_vfs_utimes.c
index 78fe6916c4f4..23ff5e3880be 100644
--- a/tools/regression/priv/priv_vfs_utimes.c
+++ b/tools/regression/priv/priv_vfs_utimes.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vm_madv_protect.c b/tools/regression/priv/priv_vm_madv_protect.c
index 008e531dbe5e..06422a98dc88 100644
--- a/tools/regression/priv/priv_vm_madv_protect.c
+++ b/tools/regression/priv/priv_vm_madv_protect.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vm_mlock.c b/tools/regression/priv/priv_vm_mlock.c
index 5cdbc706de50..b50903231eb5 100644
--- a/tools/regression/priv/priv_vm_mlock.c
+++ b/tools/regression/priv/priv_vm_mlock.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/priv/priv_vm_munlock.c b/tools/regression/priv/priv_vm_munlock.c
index d5a474ad3b8e..267a98dd21be 100644
--- a/tools/regression/priv/priv_vm_munlock.c
+++ b/tools/regression/priv/priv_vm_munlock.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/pthread/cv_cancel1/Makefile b/tools/regression/pthread/cv_cancel1/Makefile
index be2ffaaa3f5b..1a27b8adfe78 100644
--- a/tools/regression/pthread/cv_cancel1/Makefile
+++ b/tools/regression/pthread/cv_cancel1/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= cv_cancel1
MAN=
LIBADD= pthread
diff --git a/tools/regression/pthread/cv_cancel1/cv_cancel1.c b/tools/regression/pthread/cv_cancel1/cv_cancel1.c
index fdc50a866411..c61a785628c1 100644
--- a/tools/regression/pthread/cv_cancel1/cv_cancel1.c
+++ b/tools/regression/pthread/cv_cancel1/cv_cancel1.c
@@ -23,8 +23,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD$
- *
*/
#include <pthread.h>
#include <stdio.h>
diff --git a/tools/regression/pthread/mutex_isowned_np/Makefile b/tools/regression/pthread/mutex_isowned_np/Makefile
index 88270530e6ae..31dbd470d7d5 100644
--- a/tools/regression/pthread/mutex_isowned_np/Makefile
+++ b/tools/regression/pthread/mutex_isowned_np/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= mutex_isowned_np
MAN=
LIBADD= pthread
diff --git a/tools/regression/pthread/mutex_isowned_np/mutex_isowned_np.c b/tools/regression/pthread/mutex_isowned_np/mutex_isowned_np.c
index 381921c38a06..9032c7dd3968 100644
--- a/tools/regression/pthread/mutex_isowned_np/mutex_isowned_np.c
+++ b/tools/regression/pthread/mutex_isowned_np/mutex_isowned_np.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2008 Dag-Erling Coïdan Smørgrav
+ * Copyright (c) 2008 Dag-Erling Smørgrav
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <pthread.h>
diff --git a/tools/regression/pthread/unwind/Makefile b/tools/regression/pthread/unwind/Makefile
index c4f9ac84d9fb..33d3787c0ee3 100644
--- a/tools/regression/pthread/unwind/Makefile
+++ b/tools/regression/pthread/unwind/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
all: main_thread_exit thread_normal_exit sem_wait_cancel \
cond_wait_cancel cond_wait_cancel2 catch_pthread_exit
diff --git a/tools/regression/pthread/unwind/Test.cpp b/tools/regression/pthread/unwind/Test.cpp
index 46e451c390b6..bad63be44798 100644
--- a/tools/regression/pthread/unwind/Test.cpp
+++ b/tools/regression/pthread/unwind/Test.cpp
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
static int destructed;
static int destructed2;
diff --git a/tools/regression/pthread/unwind/catch_pthread_exit.cpp b/tools/regression/pthread/unwind/catch_pthread_exit.cpp
index db0e875ccaeb..b5074cd4beb1 100644
--- a/tools/regression/pthread/unwind/catch_pthread_exit.cpp
+++ b/tools/regression/pthread/unwind/catch_pthread_exit.cpp
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* try to catch thread exiting, and rethrow the exception */
#include <pthread.h>
diff --git a/tools/regression/pthread/unwind/cond_wait_cancel.cpp b/tools/regression/pthread/unwind/cond_wait_cancel.cpp
index 4dfa57746552..d241b55909b6 100644
--- a/tools/regression/pthread/unwind/cond_wait_cancel.cpp
+++ b/tools/regression/pthread/unwind/cond_wait_cancel.cpp
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* Test stack unwinding for pthread_cond_wait function */
#include <pthread.h>
diff --git a/tools/regression/pthread/unwind/cond_wait_cancel2.cpp b/tools/regression/pthread/unwind/cond_wait_cancel2.cpp
index ba71289fad98..1763e115435b 100644
--- a/tools/regression/pthread/unwind/cond_wait_cancel2.cpp
+++ b/tools/regression/pthread/unwind/cond_wait_cancel2.cpp
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*
* Test stack unwinding for mixed pthread_cleanup_push/pop and C++
* object, both should work together.
diff --git a/tools/regression/pthread/unwind/main_thread_exit.cpp b/tools/regression/pthread/unwind/main_thread_exit.cpp
index 182c194b07af..c3ee859a5f0f 100644
--- a/tools/regression/pthread/unwind/main_thread_exit.cpp
+++ b/tools/regression/pthread/unwind/main_thread_exit.cpp
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* check unwinding for main thread */
#include <pthread.h>
diff --git a/tools/regression/pthread/unwind/sem_wait_cancel.cpp b/tools/regression/pthread/unwind/sem_wait_cancel.cpp
index 2086de6037cb..45f881c521fe 100644
--- a/tools/regression/pthread/unwind/sem_wait_cancel.cpp
+++ b/tools/regression/pthread/unwind/sem_wait_cancel.cpp
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* Test stack unwinding for libc's sem */
#include <pthread.h>
diff --git a/tools/regression/pthread/unwind/thread_normal_exit.cpp b/tools/regression/pthread/unwind/thread_normal_exit.cpp
index 70768265be70..3549db432f38 100644
--- a/tools/regression/pthread/unwind/thread_normal_exit.cpp
+++ b/tools/regression/pthread/unwind/thread_normal_exit.cpp
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* test stack unwinding for a new thread */
#include <pthread.h>
diff --git a/tools/regression/redzone9/Makefile b/tools/regression/redzone9/Makefile
index 6de15357488f..a7e56e1bd506 100644
--- a/tools/regression/redzone9/Makefile
+++ b/tools/regression/redzone9/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
KMOD= redzone
SRCS= redzone.c
diff --git a/tools/regression/redzone9/README b/tools/regression/redzone9/README
index 87ca49a08633..efdd4b22b1e2 100644
--- a/tools/regression/redzone9/README
+++ b/tools/regression/redzone9/README
@@ -1,4 +1,3 @@
-$FreeBSD$
To verify that redzone(9) works properly:
diff --git a/tools/regression/redzone9/redzone.c b/tools/regression/redzone9/redzone.c
index 101373892188..579e5a08cda7 100644
--- a/tools/regression/redzone9/redzone.c
+++ b/tools/regression/redzone9/redzone.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
diff --git a/tools/regression/redzone9/test.sh b/tools/regression/redzone9/test.sh
index b38245807e04..eb995a1e841d 100644
--- a/tools/regression/redzone9/test.sh
+++ b/tools/regression/redzone9/test.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
sysctl debug.redzone.malloc_underflow=1
sysctl debug.redzone.malloc_overflow=1
diff --git a/tools/regression/rpcsec_gss/Makefile b/tools/regression/rpcsec_gss/Makefile
index 6f9debb7c2c3..6697fd9eaf99 100644
--- a/tools/regression/rpcsec_gss/Makefile
+++ b/tools/regression/rpcsec_gss/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= rpctest
MAN=
LIBADD= rpcsec_gss
diff --git a/tools/regression/rpcsec_gss/rpctest.c b/tools/regression/rpcsec_gss/rpctest.c
index 847ae3bea9e3..a179c82c6b1a 100644
--- a/tools/regression/rpcsec_gss/rpctest.c
+++ b/tools/regression/rpcsec_gss/rpctest.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifdef __FreeBSD__
diff --git a/tools/regression/security/access/Makefile b/tools/regression/security/access/Makefile
index 70437110ceeb..59f52230e0e5 100644
--- a/tools/regression/security/access/Makefile
+++ b/tools/regression/security/access/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= testaccess
MAN=
diff --git a/tools/regression/security/access/testaccess.c b/tools/regression/security/access/testaccess.c
index 46bb01c4150d..61e1b62f28b7 100644
--- a/tools/regression/security/access/testaccess.c
+++ b/tools/regression/security/access/testaccess.c
@@ -28,8 +28,6 @@
*
* Work sponsored by Defense Advanced Research Projects Agency under the
* CHATS research program, CBOSS project.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/security/cap_test/Makefile b/tools/regression/security/cap_test/Makefile
index 344effae0460..0fdc274edbed 100644
--- a/tools/regression/security/cap_test/Makefile
+++ b/tools/regression/security/cap_test/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= cap_test
SRCS= cap_test.c \
cap_test_capmode.c \
diff --git a/tools/regression/security/cap_test/cap_test.c b/tools/regression/security/cap_test/cap_test.c
index 580ce4e27b39..3544bf690214 100644
--- a/tools/regression/security/cap_test/cap_test.c
+++ b/tools/regression/security/cap_test/cap_test.c
@@ -23,13 +23,9 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/wait.h>
#include <err.h>
diff --git a/tools/regression/security/cap_test/cap_test.h b/tools/regression/security/cap_test/cap_test.h
index 202b998bd0e0..da06fab0ef76 100644
--- a/tools/regression/security/cap_test/cap_test.h
+++ b/tools/regression/security/cap_test/cap_test.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef CAP_TEST_H
diff --git a/tools/regression/security/cap_test/cap_test.t b/tools/regression/security/cap_test/cap_test.t
index 8185161f702a..a13e1b204fb4 100644
--- a/tools/regression/security/cap_test/cap_test.t
+++ b/tools/regression/security/cap_test/cap_test.t
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
if test -z "${DIR}" ; then DIR=$( make -V .OBJDIR ); fi
diff --git a/tools/regression/security/cap_test/cap_test_capabilities.c b/tools/regression/security/cap_test/cap_test_capabilities.c
index 1ffac9a519cf..b22749360bb1 100644
--- a/tools/regression/security/cap_test/cap_test_capabilities.c
+++ b/tools/regression/security/cap_test/cap_test_capabilities.c
@@ -34,9 +34,6 @@
* various object types.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/capsicum.h>
#include <sys/errno.h>
diff --git a/tools/regression/security/cap_test/cap_test_capmode.c b/tools/regression/security/cap_test/cap_test_capmode.c
index d0c915c61327..9d1eaf45ea85 100644
--- a/tools/regression/security/cap_test/cap_test_capmode.c
+++ b/tools/regression/security/cap_test/cap_test_capmode.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -33,9 +31,6 @@
* whether or not they return the expected ECAPMODE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/capsicum.h>
#include <sys/errno.h>
diff --git a/tools/regression/security/cap_test/cap_test_fcntl.c b/tools/regression/security/cap_test/cap_test_fcntl.c
index 626abe7a95b6..5ef9c55a3e4d 100644
--- a/tools/regression/security/cap_test/cap_test_fcntl.c
+++ b/tools/regression/security/cap_test/cap_test_fcntl.c
@@ -29,9 +29,6 @@
* Test that fcntl works in capability mode.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/capsicum.h>
#include <sys/errno.h>
diff --git a/tools/regression/security/cap_test/cap_test_pdfork.c b/tools/regression/security/cap_test/cap_test_pdfork.c
index 8becee04a1a8..fdd0b5d6ad04 100644
--- a/tools/regression/security/cap_test/cap_test_pdfork.c
+++ b/tools/regression/security/cap_test/cap_test_pdfork.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -33,9 +31,6 @@
* whether or not they return the expected ECAPMODE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/capsium.h>
diff --git a/tools/regression/security/cap_test/cap_test_pdkill.c b/tools/regression/security/cap_test/cap_test_pdkill.c
index 2018eddbc394..2f2a18b3baa7 100644
--- a/tools/regression/security/cap_test/cap_test_pdkill.c
+++ b/tools/regression/security/cap_test/cap_test_pdkill.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -33,9 +31,6 @@
* whether or not they return the expected ECAPMODE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/capsicum.h>
diff --git a/tools/regression/security/cap_test/cap_test_relative.c b/tools/regression/security/cap_test/cap_test_relative.c
index 284cf7852c6c..ef2e561b0158 100644
--- a/tools/regression/security/cap_test/cap_test_relative.c
+++ b/tools/regression/security/cap_test/cap_test_relative.c
@@ -23,13 +23,8 @@
* 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.
- *
- * $FreeBSD$
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/capsicum.h>
#include <sys/errno.h>
diff --git a/tools/regression/security/cap_test/cap_test_sysctl.c b/tools/regression/security/cap_test/cap_test_sysctl.c
index a31b4241670e..dcc6970606da 100644
--- a/tools/regression/security/cap_test/cap_test_sysctl.c
+++ b/tools/regression/security/cap_test/cap_test_sysctl.c
@@ -23,17 +23,12 @@
* 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.
- *
- * $FreeBSD$
*/
/*
* Test that various sysctls are (and aren't) available on capability mode.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/capsicum.h>
#include <sys/errno.h>
diff --git a/tools/regression/security/open_to_operation/Makefile b/tools/regression/security/open_to_operation/Makefile
index fbc0dc7c12b8..e319e4f78675 100644
--- a/tools/regression/security/open_to_operation/Makefile
+++ b/tools/regression/security/open_to_operation/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= open_to_operation
MAN=
WARNS?= 3
diff --git a/tools/regression/security/open_to_operation/open_to_operation.c b/tools/regression/security/open_to_operation/open_to_operation.c
index c8c816becab9..235b785b5993 100644
--- a/tools/regression/security/open_to_operation/open_to_operation.c
+++ b/tools/regression/security/open_to_operation/open_to_operation.c
@@ -89,9 +89,6 @@
* XXXRW: message queue and shared memory fds?
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/mman.h>
#include <sys/mount.h>
diff --git a/tools/regression/security/proc_to_proc/Makefile b/tools/regression/security/proc_to_proc/Makefile
index aa0770227c92..984791c299b6 100644
--- a/tools/regression/security/proc_to_proc/Makefile
+++ b/tools/regression/security/proc_to_proc/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= testuid
MAN=
diff --git a/tools/regression/security/proc_to_proc/README b/tools/regression/security/proc_to_proc/README
index 01857b834dce..9fe1e8cd35c8 100644
--- a/tools/regression/security/proc_to_proc/README
+++ b/tools/regression/security/proc_to_proc/README
@@ -1,4 +1,3 @@
-$FreeBSD$
Inter-Process Authorization Test Suite
Robert Watson, TrustedBSD Project
diff --git a/tools/regression/security/proc_to_proc/scenario.c b/tools/regression/security/proc_to_proc/scenario.c
index 0e3e476df54b..5419058cce8f 100644
--- a/tools/regression/security/proc_to_proc/scenario.c
+++ b/tools/regression/security/proc_to_proc/scenario.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/regression/security/proc_to_proc/scenario.h b/tools/regression/security/proc_to_proc/scenario.h
index da087207c5a7..4bc8b33a9f71 100644
--- a/tools/regression/security/proc_to_proc/scenario.h
+++ b/tools/regression/security/proc_to_proc/scenario.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _SCENARIO_H
#define _SCENARIO_H
diff --git a/tools/regression/security/proc_to_proc/testuid.c b/tools/regression/security/proc_to_proc/testuid.c
index a9b81a08541c..0f499ede771c 100644
--- a/tools/regression/security/proc_to_proc/testuid.c
+++ b/tools/regression/security/proc_to_proc/testuid.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sigqueue/Makefile b/tools/regression/sigqueue/Makefile
index 3533723b61cb..a35b2305815c 100644
--- a/tools/regression/sigqueue/Makefile
+++ b/tools/regression/sigqueue/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR=sigqtest1 sigqtest2
.include <bsd.subdir.mk>
diff --git a/tools/regression/sigqueue/sigqtest1/Makefile b/tools/regression/sigqueue/sigqtest1/Makefile
index 66ad799895cb..9efd0c2eec2a 100644
--- a/tools/regression/sigqueue/sigqtest1/Makefile
+++ b/tools/regression/sigqueue/sigqtest1/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG=sigqtest1
MAN=
DEBUG_FLAGS=-g
diff --git a/tools/regression/sigqueue/sigqtest1/sigqtest1.c b/tools/regression/sigqueue/sigqtest1/sigqtest1.c
index f0201c37af86..074f140f11c8 100644
--- a/tools/regression/sigqueue/sigqtest1/sigqtest1.c
+++ b/tools/regression/sigqueue/sigqtest1/sigqtest1.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <err.h>
#include <errno.h>
#include <signal.h>
diff --git a/tools/regression/sigqueue/sigqtest2/Makefile b/tools/regression/sigqueue/sigqtest2/Makefile
index 30ae7840ebc5..9eea81bb59e8 100644
--- a/tools/regression/sigqueue/sigqtest2/Makefile
+++ b/tools/regression/sigqueue/sigqtest2/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG=sigqtest2
MAN=
DEBUG_FLAGS=-g
diff --git a/tools/regression/sigqueue/sigqtest2/sigqtest2.c b/tools/regression/sigqueue/sigqtest2/sigqtest2.c
index 50b579d0a42c..50ab140dbd9a 100644
--- a/tools/regression/sigqueue/sigqtest2/sigqtest2.c
+++ b/tools/regression/sigqueue/sigqtest2/sigqtest2.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <sys/types.h>
#include <sys/wait.h>
#include <err.h>
diff --git a/tools/regression/sockets/accept_fd_leak/Makefile b/tools/regression/sockets/accept_fd_leak/Makefile
index d3b3f42ce2a8..2614e92a1d17 100644
--- a/tools/regression/sockets/accept_fd_leak/Makefile
+++ b/tools/regression/sockets/accept_fd_leak/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= accept_fd_leak
diff --git a/tools/regression/sockets/accept_fd_leak/accept_fd_leak.c b/tools/regression/sockets/accept_fd_leak/accept_fd_leak.c
index 659c22d29564..f1de967a9f39 100644
--- a/tools/regression/sockets/accept_fd_leak/accept_fd_leak.c
+++ b/tools/regression/sockets/accept_fd_leak/accept_fd_leak.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/regression/sockets/accept_fd_leak/accept_fd_leak.t b/tools/regression/sockets/accept_fd_leak/accept_fd_leak.t
index 8bdfd03be81b..74eb8c9c581d 100644
--- a/tools/regression/sockets/accept_fd_leak/accept_fd_leak.t
+++ b/tools/regression/sockets/accept_fd_leak/accept_fd_leak.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
diff --git a/tools/regression/sockets/accf_data_attach/Makefile b/tools/regression/sockets/accf_data_attach/Makefile
index e7942ced5d02..0df72455fa69 100644
--- a/tools/regression/sockets/accf_data_attach/Makefile
+++ b/tools/regression/sockets/accf_data_attach/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= accf_data_attach
diff --git a/tools/regression/sockets/accf_data_attach/accf_data_attach.c b/tools/regression/sockets/accf_data_attach/accf_data_attach.c
index 9d2a5d152114..68a8d278f825 100644
--- a/tools/regression/sockets/accf_data_attach/accf_data_attach.c
+++ b/tools/regression/sockets/accf_data_attach/accf_data_attach.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/accf_data_attach/accf_data_attach.t b/tools/regression/sockets/accf_data_attach/accf_data_attach.t
index 8bdfd03be81b..74eb8c9c581d 100644
--- a/tools/regression/sockets/accf_data_attach/accf_data_attach.t
+++ b/tools/regression/sockets/accf_data_attach/accf_data_attach.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
diff --git a/tools/regression/sockets/fstat/Makefile b/tools/regression/sockets/fstat/Makefile
index d5cb72419969..ee36f797b5e1 100644
--- a/tools/regression/sockets/fstat/Makefile
+++ b/tools/regression/sockets/fstat/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= fstat
diff --git a/tools/regression/sockets/fstat/fstat.c b/tools/regression/sockets/fstat/fstat.c
index 6ea931de4660..be370e983089 100644
--- a/tools/regression/sockets/fstat/fstat.c
+++ b/tools/regression/sockets/fstat/fstat.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/kqueue/Makefile b/tools/regression/sockets/kqueue/Makefile
index e37eadfbb203..142330b97e6e 100644
--- a/tools/regression/sockets/kqueue/Makefile
+++ b/tools/regression/sockets/kqueue/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= kqueue
diff --git a/tools/regression/sockets/kqueue/kqueue.c b/tools/regression/sockets/kqueue/kqueue.c
index f73704a9fef3..bc75ce38e7c9 100644
--- a/tools/regression/sockets/kqueue/kqueue.c
+++ b/tools/regression/sockets/kqueue/kqueue.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/kqueue/kqueue.t b/tools/regression/sockets/kqueue/kqueue.t
index 8bdfd03be81b..74eb8c9c581d 100644
--- a/tools/regression/sockets/kqueue/kqueue.t
+++ b/tools/regression/sockets/kqueue/kqueue.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
diff --git a/tools/regression/sockets/listen_backlog/Makefile b/tools/regression/sockets/listen_backlog/Makefile
index 091d7a420c76..c7414442582e 100644
--- a/tools/regression/sockets/listen_backlog/Makefile
+++ b/tools/regression/sockets/listen_backlog/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= listen_backlog
MAN=
diff --git a/tools/regression/sockets/listen_backlog/listen_backlog.c b/tools/regression/sockets/listen_backlog/listen_backlog.c
index 2276393ee6f1..843c36ad3543 100644
--- a/tools/regression/sockets/listen_backlog/listen_backlog.c
+++ b/tools/regression/sockets/listen_backlog/listen_backlog.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
@@ -44,7 +42,7 @@
*
* Future things to test:
*
- * - That if we change the value of kern.ipc.somaxconn, the limits really
+ * - That if we change the value of kern.ipc.soacceptqueue, the limits really
* do change.
*
* - That limits are, approximately, enforced and implemented.
@@ -55,7 +53,7 @@
*/
/*
- * We retrieve kern.ipc.somaxconn before running the tests in order to use a
+ * We retrieve kern.ipc.soacceptqueue before running the tests in order to use a
* run-time set value of SOMAXCONN, rather than compile-time set. We assume
* that no other process will be simultaneously frobbing it, and these tests
* may fail if that assumption is not held.
@@ -371,9 +369,9 @@ main(void)
size_t len;
len = sizeof(somaxconn);
- if (sysctlbyname("kern.ipc.somaxconn", &somaxconn, &len, NULL, 0)
+ if (sysctlbyname("kern.ipc.soacceptqueue", &somaxconn, &len, NULL, 0)
< 0)
- err(-1, "sysctlbyname(kern.ipc.somaxconn)");
+ err(-1, "sysctlbyname(kern.ipc.soacceptqueue)");
test_defaults();
test_listen_update();
diff --git a/tools/regression/sockets/listen_kqueue/Makefile b/tools/regression/sockets/listen_kqueue/Makefile
index a506f262d06a..e67350d9ff14 100644
--- a/tools/regression/sockets/listen_kqueue/Makefile
+++ b/tools/regression/sockets/listen_kqueue/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= listen_kqueue
MAN=
diff --git a/tools/regression/sockets/listen_kqueue/listen_kqueue.c b/tools/regression/sockets/listen_kqueue/listen_kqueue.c
index dd36a0f53296..29de5f7745a0 100644
--- a/tools/regression/sockets/listen_kqueue/listen_kqueue.c
+++ b/tools/regression/sockets/listen_kqueue/listen_kqueue.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/listenclose/Makefile b/tools/regression/sockets/listenclose/Makefile
index ee147dad8cef..a2a09a02a3bf 100644
--- a/tools/regression/sockets/listenclose/Makefile
+++ b/tools/regression/sockets/listenclose/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= listenclose
diff --git a/tools/regression/sockets/listenclose/listenclose.c b/tools/regression/sockets/listenclose/listenclose.c
index f920846de309..5aa7090a1676 100644
--- a/tools/regression/sockets/listenclose/listenclose.c
+++ b/tools/regression/sockets/listenclose/listenclose.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/pr_atomic/Makefile b/tools/regression/sockets/pr_atomic/Makefile
index a52433c6ef26..e9e5a2fa2e55 100644
--- a/tools/regression/sockets/pr_atomic/Makefile
+++ b/tools/regression/sockets/pr_atomic/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= pr_atomic
MAN=
diff --git a/tools/regression/sockets/pr_atomic/pr_atomic.c b/tools/regression/sockets/pr_atomic/pr_atomic.c
index e902cf7e9263..cb7e24cdc972 100644
--- a/tools/regression/sockets/pr_atomic/pr_atomic.c
+++ b/tools/regression/sockets/pr_atomic/pr_atomic.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/reconnect/Makefile b/tools/regression/sockets/reconnect/Makefile
index 285d075bca4b..2b3eba0e8db4 100644
--- a/tools/regression/sockets/reconnect/Makefile
+++ b/tools/regression/sockets/reconnect/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= reconnect
diff --git a/tools/regression/sockets/reconnect/reconnect.c b/tools/regression/sockets/reconnect/reconnect.c
index 985d6d709e64..033d03369637 100644
--- a/tools/regression/sockets/reconnect/reconnect.c
+++ b/tools/regression/sockets/reconnect/reconnect.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/rtsocket/Makefile b/tools/regression/sockets/rtsocket/Makefile
index fcb2e40acca1..31120210ee2a 100644
--- a/tools/regression/sockets/rtsocket/Makefile
+++ b/tools/regression/sockets/rtsocket/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= rtsocket
MAN=
diff --git a/tools/regression/sockets/rtsocket/rtsocket.c b/tools/regression/sockets/rtsocket/rtsocket.c
index f189cdcdd0aa..68003768223b 100644
--- a/tools/regression/sockets/rtsocket/rtsocket.c
+++ b/tools/regression/sockets/rtsocket/rtsocket.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/sblock/Makefile b/tools/regression/sockets/sblock/Makefile
index 1992a0a652ac..724259c8615f 100644
--- a/tools/regression/sockets/sblock/Makefile
+++ b/tools/regression/sockets/sblock/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= sblock
diff --git a/tools/regression/sockets/sblock/sblock.c b/tools/regression/sockets/sblock/sblock.c
index 415c4d4eb8da..e7788d943033 100644
--- a/tools/regression/sockets/sblock/sblock.c
+++ b/tools/regression/sockets/sblock/sblock.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/sendfile/Makefile b/tools/regression/sockets/sendfile/Makefile
index f1ba7a1cf596..31ae7b9124bb 100644
--- a/tools/regression/sockets/sendfile/Makefile
+++ b/tools/regression/sockets/sendfile/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= sendfile
diff --git a/tools/regression/sockets/sendfile/sendfile.c b/tools/regression/sockets/sendfile/sendfile.c
index 3a5923487dec..40af5a67982e 100644
--- a/tools/regression/sockets/sendfile/sendfile.c
+++ b/tools/regression/sockets/sendfile/sendfile.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/shutdown/Makefile b/tools/regression/sockets/shutdown/Makefile
index c36398c5af24..87706eb23450 100644
--- a/tools/regression/sockets/shutdown/Makefile
+++ b/tools/regression/sockets/shutdown/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= shutdown
diff --git a/tools/regression/sockets/shutdown/shutdown.c b/tools/regression/sockets/shutdown/shutdown.c
index 3d23c943015b..95c0120801e2 100644
--- a/tools/regression/sockets/shutdown/shutdown.c
+++ b/tools/regression/sockets/shutdown/shutdown.c
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/sigpipe/Makefile b/tools/regression/sockets/sigpipe/Makefile
index bd7720fbcbed..d6cb19b7f88f 100644
--- a/tools/regression/sockets/sigpipe/Makefile
+++ b/tools/regression/sockets/sigpipe/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= sigpipe
diff --git a/tools/regression/sockets/sigpipe/sigpipe.c b/tools/regression/sockets/sigpipe/sigpipe.c
index 894d9de6255f..d3c52356f4b1 100644
--- a/tools/regression/sockets/sigpipe/sigpipe.c
+++ b/tools/regression/sockets/sigpipe/sigpipe.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/so_setfib/Makefile b/tools/regression/sockets/so_setfib/Makefile
index eadb3efb1c36..3670514e6c42 100644
--- a/tools/regression/sockets/so_setfib/Makefile
+++ b/tools/regression/sockets/so_setfib/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.include <src.opts.mk>
PROG= so_setfib
diff --git a/tools/regression/sockets/so_setfib/so_setfib.c b/tools/regression/sockets/so_setfib/so_setfib.c
index ab1255bcc662..9d3110a92499 100644
--- a/tools/regression/sockets/so_setfib/so_setfib.c
+++ b/tools/regression/sockets/so_setfib/so_setfib.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/udp_pingpong/Makefile b/tools/regression/sockets/udp_pingpong/Makefile
index 61e92ed73ce8..72090d725e75 100644
--- a/tools/regression/sockets/udp_pingpong/Makefile
+++ b/tools/regression/sockets/udp_pingpong/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= udp_pingpong
MAN=
diff --git a/tools/regression/sockets/udp_pingpong/udp_pingpong.c b/tools/regression/sockets/udp_pingpong/udp_pingpong.c
index fc585d275db4..2fe342debdc6 100644
--- a/tools/regression/sockets/udp_pingpong/udp_pingpong.c
+++ b/tools/regression/sockets/udp_pingpong/udp_pingpong.c
@@ -34,9 +34,6 @@
* sure it makes sense.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
diff --git a/tools/regression/sockets/unix_bindconnect/Makefile b/tools/regression/sockets/unix_bindconnect/Makefile
index 4bb4fc011ba4..0e5c32e67b92 100644
--- a/tools/regression/sockets/unix_bindconnect/Makefile
+++ b/tools/regression/sockets/unix_bindconnect/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= unix_bindconnect
MAN=
diff --git a/tools/regression/sockets/unix_bindconnect/unix_bindconnect.c b/tools/regression/sockets/unix_bindconnect/unix_bindconnect.c
index 079dc4d1cae4..11487c70dc9c 100644
--- a/tools/regression/sockets/unix_bindconnect/unix_bindconnect.c
+++ b/tools/regression/sockets/unix_bindconnect/unix_bindconnect.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/regression/sockets/unix_close_race/Makefile b/tools/regression/sockets/unix_close_race/Makefile
index 690929edc2bc..ca151dc7af48 100644
--- a/tools/regression/sockets/unix_close_race/Makefile
+++ b/tools/regression/sockets/unix_close_race/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= unix_close_race
MAN=
diff --git a/tools/regression/sockets/unix_close_race/unix_close_race.c b/tools/regression/sockets/unix_close_race/unix_close_race.c
index 89c1b20d62dc..fd7675576ae6 100644
--- a/tools/regression/sockets/unix_close_race/unix_close_race.c
+++ b/tools/regression/sockets/unix_close_race/unix_close_race.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/unix_cmsg/Makefile b/tools/regression/sockets/unix_cmsg/Makefile
index 137b146f8553..24ca702e0a94 100644
--- a/tools/regression/sockets/unix_cmsg/Makefile
+++ b/tools/regression/sockets/unix_cmsg/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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_cmsg/README b/tools/regression/sockets/unix_cmsg/README
index df51723b76fa..ca9fa3c1b3b3 100644
--- a/tools/regression/sockets/unix_cmsg/README
+++ b/tools/regression/sockets/unix_cmsg/README
@@ -1,4 +1,3 @@
-$FreeBSD$
About unix_cmsg
===============
diff --git a/tools/regression/sockets/unix_cmsg/t_cmsg_len.c b/tools/regression/sockets/unix_cmsg/t_cmsg_len.c
index 3a88cebf1645..d9e4b6fb99ae 100644
--- a/tools/regression/sockets/unix_cmsg/t_cmsg_len.c
+++ b/tools/regression/sockets/unix_cmsg/t_cmsg_len.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
diff --git a/tools/regression/sockets/unix_cmsg/t_cmsg_len.h b/tools/regression/sockets/unix_cmsg/t_cmsg_len.h
index 5ec735144439..d526dc306cc9 100644
--- a/tools/regression/sockets/unix_cmsg/t_cmsg_len.h
+++ b/tools/regression/sockets/unix_cmsg/t_cmsg_len.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef __LP64__
diff --git a/tools/regression/sockets/unix_cmsg/t_cmsgcred.c b/tools/regression/sockets/unix_cmsg/t_cmsgcred.c
index 3e3653c15179..a1f6dc43e1db 100644
--- a/tools/regression/sockets/unix_cmsg/t_cmsgcred.c
+++ b/tools/regression/sockets/unix_cmsg/t_cmsgcred.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
diff --git a/tools/regression/sockets/unix_cmsg/t_cmsgcred.h b/tools/regression/sockets/unix_cmsg/t_cmsgcred.h
index 2aee226161df..2a459260da41 100644
--- a/tools/regression/sockets/unix_cmsg/t_cmsgcred.h
+++ b/tools/regression/sockets/unix_cmsg/t_cmsgcred.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
int t_cmsgcred_client(int fd);
diff --git a/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.c b/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.c
index 72110b32af64..af4232470812 100644
--- a/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.c
+++ b/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
diff --git a/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.h b/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.h
index df849c65afd7..ed0fecac4b2f 100644
--- a/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.h
+++ b/tools/regression/sockets/unix_cmsg/t_cmsgcred_sockcred.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
int t_cmsgcred_sockcred(void);
diff --git a/tools/regression/sockets/unix_cmsg/t_generic.c b/tools/regression/sockets/unix_cmsg/t_generic.c
index 02a65255011d..8b4e251e92fe 100644
--- a/tools/regression/sockets/unix_cmsg/t_generic.c
+++ b/tools/regression/sockets/unix_cmsg/t_generic.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
diff --git a/tools/regression/sockets/unix_cmsg/t_generic.h b/tools/regression/sockets/unix_cmsg/t_generic.h
index a9b3d1be703c..25bfc1540d3e 100644
--- a/tools/regression/sockets/unix_cmsg/t_generic.h
+++ b/tools/regression/sockets/unix_cmsg/t_generic.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
int t_generic(int (*client_func)(int), int (*server_func)(int));
diff --git a/tools/regression/sockets/unix_cmsg/t_peercred.c b/tools/regression/sockets/unix_cmsg/t_peercred.c
index 9b6e14868fcb..cbea69eaea97 100644
--- a/tools/regression/sockets/unix_cmsg/t_peercred.c
+++ b/tools/regression/sockets/unix_cmsg/t_peercred.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ucred.h>
diff --git a/tools/regression/sockets/unix_cmsg/t_peercred.h b/tools/regression/sockets/unix_cmsg/t_peercred.h
index 1200734722ac..7a2ac010487b 100644
--- a/tools/regression/sockets/unix_cmsg/t_peercred.h
+++ b/tools/regression/sockets/unix_cmsg/t_peercred.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
int t_peercred(void);
diff --git a/tools/regression/sockets/unix_cmsg/t_sockcred.c b/tools/regression/sockets/unix_cmsg/t_sockcred.c
index 45ac5bfe823c..d5171946f988 100644
--- a/tools/regression/sockets/unix_cmsg/t_sockcred.c
+++ b/tools/regression/sockets/unix_cmsg/t_sockcred.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
diff --git a/tools/regression/sockets/unix_cmsg/t_sockcred.h b/tools/regression/sockets/unix_cmsg/t_sockcred.h
index c0c52b90fb65..1f4bf6ab57e9 100644
--- a/tools/regression/sockets/unix_cmsg/t_sockcred.h
+++ b/tools/regression/sockets/unix_cmsg/t_sockcred.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
int t_sockcred_1(void);
diff --git a/tools/regression/sockets/unix_cmsg/t_xxxtime.c.in b/tools/regression/sockets/unix_cmsg/t_xxxtime.c.in
index 8bed032a5e23..332bab621fbf 100644
--- a/tools/regression/sockets/unix_cmsg/t_xxxtime.c.in
+++ b/tools/regression/sockets/unix_cmsg/t_xxxtime.c.in
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
diff --git a/tools/regression/sockets/unix_cmsg/t_xxxtime.h.in b/tools/regression/sockets/unix_cmsg/t_xxxtime.h.in
index fcd6348524de..e304ffb7c373 100644
--- a/tools/regression/sockets/unix_cmsg/t_xxxtime.h.in
+++ b/tools/regression/sockets/unix_cmsg/t_xxxtime.h.in
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#if defined(%%SCM_TTYPE%%)
diff --git a/tools/regression/sockets/unix_cmsg/uc_check_time.c b/tools/regression/sockets/unix_cmsg/uc_check_time.c
index 682cd442077d..abc20e84ade9 100644
--- a/tools/regression/sockets/unix_cmsg/uc_check_time.c
+++ b/tools/regression/sockets/unix_cmsg/uc_check_time.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/time.h>
#include <time.h>
diff --git a/tools/regression/sockets/unix_cmsg/uc_check_time.h b/tools/regression/sockets/unix_cmsg/uc_check_time.h
index 61c52b05996d..2190d244e33e 100644
--- a/tools/regression/sockets/unix_cmsg/uc_check_time.h
+++ b/tools/regression/sockets/unix_cmsg/uc_check_time.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
struct bintime;
diff --git a/tools/regression/sockets/unix_cmsg/uc_common.c b/tools/regression/sockets/unix_cmsg/uc_common.c
index 0799df2e0d73..bcb18a808d99 100644
--- a/tools/regression/sockets/unix_cmsg/uc_common.c
+++ b/tools/regression/sockets/unix_cmsg/uc_common.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/socket.h>
#include <sys/un.h>
#include <err.h>
diff --git a/tools/regression/sockets/unix_cmsg/uc_common.h b/tools/regression/sockets/unix_cmsg/uc_common.h
index 5e119cabc7e9..626ae659119e 100644
--- a/tools/regression/sockets/unix_cmsg/uc_common.h
+++ b/tools/regression/sockets/unix_cmsg/uc_common.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
struct uc_cfg {
diff --git a/tools/regression/sockets/unix_cmsg/unix_cmsg.c b/tools/regression/sockets/unix_cmsg/unix_cmsg.c
index 1d1dfbfc4b07..bd3753140b46 100644
--- a/tools/regression/sockets/unix_cmsg/unix_cmsg.c
+++ b/tools/regression/sockets/unix_cmsg/unix_cmsg.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/limits.h>
#include <sys/socket.h>
diff --git a/tools/regression/sockets/unix_cmsg/unix_cmsg.t b/tools/regression/sockets/unix_cmsg/unix_cmsg.t
index 70d92770d6e4..a267800922b3 100644
--- a/tools/regression/sockets/unix_cmsg/unix_cmsg.t
+++ b/tools/regression/sockets/unix_cmsg/unix_cmsg.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
cmd="./`basename $0 .t`"
diff --git a/tools/regression/sockets/unix_gc/Makefile b/tools/regression/sockets/unix_gc/Makefile
index 09ba07ae65ee..c9f98fca8710 100644
--- a/tools/regression/sockets/unix_gc/Makefile
+++ b/tools/regression/sockets/unix_gc/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= unix_gc
MAN=
diff --git a/tools/regression/sockets/unix_gc/unix_gc.c b/tools/regression/sockets/unix_gc/unix_gc.c
index e378f3aee0ec..63b1e45e5284 100644
--- a/tools/regression/sockets/unix_gc/unix_gc.c
+++ b/tools/regression/sockets/unix_gc/unix_gc.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/unix_sendtorace/Makefile b/tools/regression/sockets/unix_sendtorace/Makefile
index 7d26fc8b1383..1e7b53d40379 100644
--- a/tools/regression/sockets/unix_sendtorace/Makefile
+++ b/tools/regression/sockets/unix_sendtorace/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= unix_sendtorace
MAN=
diff --git a/tools/regression/sockets/unix_sendtorace/unix_sendtorace.c b/tools/regression/sockets/unix_sendtorace/unix_sendtorace.c
index 9fd748d6f7bb..6a6db010314e 100644
--- a/tools/regression/sockets/unix_sendtorace/unix_sendtorace.c
+++ b/tools/regression/sockets/unix_sendtorace/unix_sendtorace.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/unix_socket/Makefile b/tools/regression/sockets/unix_socket/Makefile
index 7ebc03fc22f3..61612323e98e 100644
--- a/tools/regression/sockets/unix_socket/Makefile
+++ b/tools/regression/sockets/unix_socket/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= unix_socket
MAN=
diff --git a/tools/regression/sockets/unix_socket/unix_socket.c b/tools/regression/sockets/unix_socket/unix_socket.c
index ca7225b49ce0..487668ab4701 100644
--- a/tools/regression/sockets/unix_socket/unix_socket.c
+++ b/tools/regression/sockets/unix_socket/unix_socket.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sockets/unix_sorflush/Makefile b/tools/regression/sockets/unix_sorflush/Makefile
index 879dcc8ef533..b41cb474f94a 100644
--- a/tools/regression/sockets/unix_sorflush/Makefile
+++ b/tools/regression/sockets/unix_sorflush/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= unix_sorflush
MAN=
diff --git a/tools/regression/sockets/unix_sorflush/unix_sorflush.c b/tools/regression/sockets/unix_sorflush/unix_sorflush.c
index e0deb00a389d..082db5a02d17 100644
--- a/tools/regression/sockets/unix_sorflush/unix_sorflush.c
+++ b/tools/regression/sockets/unix_sorflush/unix_sorflush.c
@@ -36,8 +36,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/socket.h>
#include <err.h>
diff --git a/tools/regression/sockets/zerosend/Makefile b/tools/regression/sockets/zerosend/Makefile
index 9706b25ea899..2f270d05cfa2 100644
--- a/tools/regression/sockets/zerosend/Makefile
+++ b/tools/regression/sockets/zerosend/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= zerosend
MAN=
diff --git a/tools/regression/sockets/zerosend/zerosend.c b/tools/regression/sockets/zerosend/zerosend.c
index ac9542a93617..347574a2e569 100644
--- a/tools/regression/sockets/zerosend/zerosend.c
+++ b/tools/regression/sockets/zerosend/zerosend.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/select.h>
diff --git a/tools/regression/sysvmsg/Makefile b/tools/regression/sysvmsg/Makefile
index c4c09e991cb0..a51353632e7a 100644
--- a/tools/regression/sysvmsg/Makefile
+++ b/tools/regression/sysvmsg/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
# SysV Message Queue Regression Utility
# Obtained from: $NetBSD: Makefile,v 1.3 2002/03/05 21:56:59 thorpej Exp $
diff --git a/tools/regression/sysvmsg/README b/tools/regression/sysvmsg/README
index f115b9967ed1..cfa585772b50 100644
--- a/tools/regression/sysvmsg/README
+++ b/tools/regression/sysvmsg/README
@@ -1,4 +1,3 @@
-$FreeBSD$
SysV IPC Message Queue Regression Utility.
diff --git a/tools/regression/sysvmsg/msgtest.c b/tools/regression/sysvmsg/msgtest.c
index 058a32106642..164fcf692017 100644
--- a/tools/regression/sysvmsg/msgtest.c
+++ b/tools/regression/sysvmsg/msgtest.c
@@ -28,7 +28,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* Obtained from: $NetBSD: msgtest.c,v 1.7 2002/07/20 08:36:25 grant Exp $
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sysvsem/Makefile b/tools/regression/sysvsem/Makefile
index d5c3e9fe4b7c..bbc87a377ecd 100644
--- a/tools/regression/sysvsem/Makefile
+++ b/tools/regression/sysvsem/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
# SysV Semaphores Regression Utility
# Obtained from: $NetBSD: Makefile,v 1.3 2002/03/05 21:57:00 thorpej Exp $
diff --git a/tools/regression/sysvsem/README b/tools/regression/sysvsem/README
index 33b9706817da..04cd208f2a15 100644
--- a/tools/regression/sysvsem/README
+++ b/tools/regression/sysvsem/README
@@ -1,4 +1,3 @@
-$FreeBSD$
SysV IPC Semaphore Regression Utility.
diff --git a/tools/regression/sysvsem/semtest.c b/tools/regression/sysvsem/semtest.c
index 39c416403c63..f4ab8e876ec4 100644
--- a/tools/regression/sysvsem/semtest.c
+++ b/tools/regression/sysvsem/semtest.c
@@ -28,7 +28,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* Obtained from: $NetBSD: semtest.c,v 1.4 2002/07/20 08:36:25 grant Exp $
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/sysvshm/Makefile b/tools/regression/sysvshm/Makefile
index 382de0370d2f..6db232517d91 100644
--- a/tools/regression/sysvshm/Makefile
+++ b/tools/regression/sysvshm/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
# SysV Shared Memory Regression Utility
# Obtained from: $NetBSD: Makefile,v 1.3 2002/03/05 21:57:00 thorpej Exp $
diff --git a/tools/regression/sysvshm/README b/tools/regression/sysvshm/README
index 4e0125eec8ef..bcb0c5fb91b1 100644
--- a/tools/regression/sysvshm/README
+++ b/tools/regression/sysvshm/README
@@ -1,4 +1,3 @@
-$FreeBSD$
SysV IPC Shared Memory Regression Utility.
diff --git a/tools/regression/sysvshm/shmtest.c b/tools/regression/sysvshm/shmtest.c
index c3e5962d9fa1..edac85b21bda 100644
--- a/tools/regression/sysvshm/shmtest.c
+++ b/tools/regression/sysvshm/shmtest.c
@@ -28,7 +28,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* Obtained from: $NetBSD: shmtest.c,v 1.3 2002/07/20 08:36:26 grant Exp $
- * $FreeBSD$
*/
/*
@@ -54,7 +53,7 @@ static void sigsys_handler(int);
static void sigchld_handler(int);
static void cleanup(void);
static void receiver(void);
-static void usage(void);
+static void usage(void) __dead2;
static const char *m_str = "The quick brown fox jumped over the lazy dog.";
diff --git a/tools/regression/tls/Makefile b/tools/regression/tls/Makefile
index 76def9685e75..063e3dec7d8d 100644
--- a/tools/regression/tls/Makefile
+++ b/tools/regression/tls/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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 cf4e68069f23..18195384ad9c 100644
--- a/tools/regression/tls/libxx/Makefile
+++ b/tools/regression/tls/libxx/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SHLIB_NAME= libxx.so
SRCS= xx.c
diff --git a/tools/regression/tls/libxx/xx.c b/tools/regression/tls/libxx/xx.c
index 6d1e73f79a05..bc81531e2ce0 100644
--- a/tools/regression/tls/libxx/xx.c
+++ b/tools/regression/tls/libxx/xx.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
extern int __thread yy1;
int __thread xx1 = 1;
diff --git a/tools/regression/tls/libyy/Makefile b/tools/regression/tls/libyy/Makefile
index b7a7198cb319..05ecfc735c62 100644
--- a/tools/regression/tls/libyy/Makefile
+++ b/tools/regression/tls/libyy/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SHLIB_NAME= libyy.so
SRCS= yy.c
diff --git a/tools/regression/tls/libyy/yy.c b/tools/regression/tls/libyy/yy.c
index c00cb8770ec4..e7265829b93a 100644
--- a/tools/regression/tls/libyy/yy.c
+++ b/tools/regression/tls/libyy/yy.c
@@ -1,3 +1,2 @@
-/* $FreeBSD$ */
int __thread yy1 = 101;
diff --git a/tools/regression/tls/ttls1/Makefile b/tools/regression/tls/ttls1/Makefile
index a4535e0213d1..8560de58cc9a 100644
--- a/tools/regression/tls/ttls1/Makefile
+++ b/tools/regression/tls/ttls1/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ttls1
LDFLAGS+= -L../libxx -lxx -Wl,--rpath=${.OBJDIR}/../libxx
LDFLAGS+= -L../libyy -lyy -Wl,--rpath=${.OBJDIR}/../libyy
diff --git a/tools/regression/tls/ttls1/ttls1.c b/tools/regression/tls/ttls1/ttls1.c
index 9c514aeecf7a..24e4b1636e7d 100644
--- a/tools/regression/tls/ttls1/ttls1.c
+++ b/tools/regression/tls/ttls1/ttls1.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <stdio.h>
diff --git a/tools/regression/tls/ttls2/Makefile b/tools/regression/tls/ttls2/Makefile
index cbebbe769e2f..782808823efe 100644
--- a/tools/regression/tls/ttls2/Makefile
+++ b/tools/regression/tls/ttls2/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ttls2
LIBADD= pthread
MAN=
diff --git a/tools/regression/tls/ttls2/ttls2.c b/tools/regression/tls/ttls2/ttls2.c
index 15eb640e3e3c..6fe316e15128 100644
--- a/tools/regression/tls/ttls2/ttls2.c
+++ b/tools/regression/tls/ttls2/ttls2.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <pthread.h>
#include <stdio.h>
diff --git a/tools/regression/tls/ttls3/Makefile b/tools/regression/tls/ttls3/Makefile
index b171181e74fb..03413ea8e1d6 100644
--- a/tools/regression/tls/ttls3/Makefile
+++ b/tools/regression/tls/ttls3/Makefile
@@ -1,8 +1,6 @@
-# $FreeBSD$
-
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/ttls3/elftls.S b/tools/regression/tls/ttls3/elftls.S
index 0fad08d90a7c..b13d286c264c 100644
--- a/tools/regression/tls/ttls3/elftls.S
+++ b/tools/regression/tls/ttls3/elftls.S
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
.file "elftls.S"
diff --git a/tools/regression/tls/ttls3/tls-test-lib.c b/tools/regression/tls/ttls3/tls-test-lib.c
index bc88ad1383dd..ebdd27c83302 100644
--- a/tools/regression/tls/ttls3/tls-test-lib.c
+++ b/tools/regression/tls/ttls3/tls-test-lib.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/regression/tls/ttls3/tls-test.c b/tools/regression/tls/ttls3/tls-test.c
index 539b6ce1ed11..0f2c3fdb79f3 100644
--- a/tools/regression/tls/ttls3/tls-test.c
+++ b/tools/regression/tls/ttls3/tls-test.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/regression/tls/ttls4/Makefile b/tools/regression/tls/ttls4/Makefile
index ab6ca6fe753c..b87343ecdd00 100644
--- a/tools/regression/tls/ttls4/Makefile
+++ b/tools/regression/tls/ttls4/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ttls4
LIBADD= pthread
MAN=
diff --git a/tools/regression/tls/ttls4/ttls4.c b/tools/regression/tls/ttls4/ttls4.c
index 914b220f5e7e..60cd91d4542a 100644
--- a/tools/regression/tls/ttls4/ttls4.c
+++ b/tools/regression/tls/ttls4/ttls4.c
@@ -3,8 +3,6 @@
* is clean.
*
* David Xu <davidxu@freebsd.org>
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/regression/tmpfs/Makefile b/tools/regression/tmpfs/Makefile
index 49f7b8c8941e..20d56371e17f 100644
--- a/tools/regression/tmpfs/Makefile
+++ b/tools/regression/tmpfs/Makefile
@@ -1,5 +1,4 @@
# $NetBSD: Makefile,v 1.4 2006/11/09 15:25:37 jmmv Exp $
-# $FreeBSD$
tests= t_mount
tests+= t_statvfs
diff --git a/tools/regression/tmpfs/h_funcs.subr b/tools/regression/tmpfs/h_funcs.subr
index 3d6eb4fe1b09..d316176f308a 100644
--- a/tools/regression/tmpfs/h_funcs.subr
+++ b/tools/regression/tmpfs/h_funcs.subr
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/h_tools.c b/tools/regression/tmpfs/h_tools.c
index 6f3b87fc4dfd..4c3ea966db2e 100644
--- a/tools/regression/tmpfs/h_tools.c
+++ b/tools/regression/tmpfs/h_tools.c
@@ -28,8 +28,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/regression/tmpfs/t_create b/tools/regression/tmpfs/t_create
index 1a635829d53e..92119be8e187 100644
--- a/tools/regression/tmpfs/t_create
+++ b/tools/regression/tmpfs/t_create
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_dots b/tools/regression/tmpfs/t_dots
index 6282ad6ae9ad..8cf553418e64 100644
--- a/tools/regression/tmpfs/t_dots
+++ b/tools/regression/tmpfs/t_dots
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_exec b/tools/regression/tmpfs/t_exec
index 95939cd331e3..1b0cdbb735e9 100644
--- a/tools/regression/tmpfs/t_exec
+++ b/tools/regression/tmpfs/t_exec
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_link b/tools/regression/tmpfs/t_link
index 640391c009be..a50b24265294 100644
--- a/tools/regression/tmpfs/t_link
+++ b/tools/regression/tmpfs/t_link
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_mkdir b/tools/regression/tmpfs/t_mkdir
index 5c4b6d44a753..c1e8899df326 100644
--- a/tools/regression/tmpfs/t_mkdir
+++ b/tools/regression/tmpfs/t_mkdir
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_mount b/tools/regression/tmpfs/t_mount
index 318d8927d6bf..cc68458d3d0c 100644
--- a/tools/regression/tmpfs/t_mount
+++ b/tools/regression/tmpfs/t_mount
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_pipes b/tools/regression/tmpfs/t_pipes
index c1a62011fddf..9cda290dde6c 100644
--- a/tools/regression/tmpfs/t_pipes
+++ b/tools/regression/tmpfs/t_pipes
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_read_write b/tools/regression/tmpfs/t_read_write
index d2e997dbec29..82e9c6d74471 100644
--- a/tools/regression/tmpfs/t_read_write
+++ b/tools/regression/tmpfs/t_read_write
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_readdir b/tools/regression/tmpfs/t_readdir
index c6e8d263dcf8..a992cfa23778 100644
--- a/tools/regression/tmpfs/t_readdir
+++ b/tools/regression/tmpfs/t_readdir
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_remove b/tools/regression/tmpfs/t_remove
index e54e1059696a..1946ace4b250 100644
--- a/tools/regression/tmpfs/t_remove
+++ b/tools/regression/tmpfs/t_remove
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_rename b/tools/regression/tmpfs/t_rename
index af81a5c733e4..c534a5ca7d8e 100644
--- a/tools/regression/tmpfs/t_rename
+++ b/tools/regression/tmpfs/t_rename
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_rmdir b/tools/regression/tmpfs/t_rmdir
index 860fdb2409c9..cbc29ad8c4c1 100644
--- a/tools/regression/tmpfs/t_rmdir
+++ b/tools/regression/tmpfs/t_rmdir
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_setattr b/tools/regression/tmpfs/t_setattr
index a25015a25900..5a5942cf4d37 100644
--- a/tools/regression/tmpfs/t_setattr
+++ b/tools/regression/tmpfs/t_setattr
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_sizes b/tools/regression/tmpfs/t_sizes
index 6623ee53feff..d129ef076949 100644
--- a/tools/regression/tmpfs/t_sizes
+++ b/tools/regression/tmpfs/t_sizes
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_sockets b/tools/regression/tmpfs/t_sockets
index 24f9844e9675..9dc23b2252bd 100644
--- a/tools/regression/tmpfs/t_sockets
+++ b/tools/regression/tmpfs/t_sockets
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_statvfs b/tools/regression/tmpfs/t_statvfs
index 98eb80cfaca4..d6fcd987cc17 100644
--- a/tools/regression/tmpfs/t_statvfs
+++ b/tools/regression/tmpfs/t_statvfs
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_symlink b/tools/regression/tmpfs/t_symlink
index 218429de0530..9b706d4c00d0 100644
--- a/tools/regression/tmpfs/t_symlink
+++ b/tools/regression/tmpfs/t_symlink
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_times b/tools/regression/tmpfs/t_times
index 11e2014b6b31..fa5430eb3d23 100644
--- a/tools/regression/tmpfs/t_times
+++ b/tools/regression/tmpfs/t_times
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_trail_slash b/tools/regression/tmpfs/t_trail_slash
index 131beb7cd246..09e5547d1bd2 100644
--- a/tools/regression/tmpfs/t_trail_slash
+++ b/tools/regression/tmpfs/t_trail_slash
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_truncate b/tools/regression/tmpfs/t_truncate
index 74d7e53030cc..71de76c9461a 100644
--- a/tools/regression/tmpfs/t_truncate
+++ b/tools/regression/tmpfs/t_truncate
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_vnd b/tools/regression/tmpfs/t_vnd
index 7065a3d3a1e5..07d6b4887a31 100644
--- a/tools/regression/tmpfs/t_vnd
+++ b/tools/regression/tmpfs/t_vnd
@@ -29,7 +29,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/tmpfs/t_vnode_leak b/tools/regression/tmpfs/t_vnode_leak
index e71a57c102f4..fd0a4a5e88af 100644
--- a/tools/regression/tmpfs/t_vnode_leak
+++ b/tools/regression/tmpfs/t_vnode_leak
@@ -30,7 +30,6 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/regression/ufs/uprintf/Makefile b/tools/regression/ufs/uprintf/Makefile
index a798971f7984..c1a7c4de03ae 100644
--- a/tools/regression/ufs/uprintf/Makefile
+++ b/tools/regression/ufs/uprintf/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ufs_uprintf
WARNS?= 3
MAN=
diff --git a/tools/regression/ufs/uprintf/ufs_uprintf.c b/tools/regression/ufs/uprintf/ufs_uprintf.c
index 17aa71ec0668..4034643fe4c9 100644
--- a/tools/regression/ufs/uprintf/ufs_uprintf.c
+++ b/tools/regression/ufs/uprintf/ufs_uprintf.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <err.h>
diff --git a/tools/regression/usb/usb_enum.t b/tools/regression/usb/usb_enum.t
index fe3e754c0351..2e23f97d9624 100755
--- a/tools/regression/usb/usb_enum.t
+++ b/tools/regression/usb/usb_enum.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
#
# About:
diff --git a/tools/regression/usr.bin/cc/Makefile b/tools/regression/usr.bin/cc/Makefile
index e5b1b90908f1..1f8b5d8f03fd 100644
--- a/tools/regression/usr.bin/cc/Makefile
+++ b/tools/regression/usr.bin/cc/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
TESTS= float
CFLAGS+=-lm
diff --git a/tools/regression/usr.bin/cc/float.c b/tools/regression/usr.bin/cc/float.c
index 9bdd7d959c16..e08e0f5a6174 100644
--- a/tools/regression/usr.bin/cc/float.c
+++ b/tools/regression/usr.bin/cc/float.c
@@ -29,8 +29,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <fenv.h>
#include <float.h>
#include <math.h>
diff --git a/tools/regression/usr.bin/cc/float.t b/tools/regression/usr.bin/cc/float.t
index 8bdfd03be81b..74eb8c9c581d 100644
--- a/tools/regression/usr.bin/cc/float.t
+++ b/tools/regression/usr.bin/cc/float.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
diff --git a/tools/regression/usr.bin/env/Makefile b/tools/regression/usr.bin/env/Makefile
index c20fedd56c0b..06f1fbe82e23 100644
--- a/tools/regression/usr.bin/env/Makefile
+++ b/tools/regression/usr.bin/env/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
TESTPGM?=TestProgramNotSpecifed
all:
diff --git a/tools/regression/usr.bin/env/regress-env.rgdata b/tools/regression/usr.bin/env/regress-env.rgdata
index 90c296e5c604..490ae1c84089 100644
--- a/tools/regression/usr.bin/env/regress-env.rgdata
+++ b/tools/regression/usr.bin/env/regress-env.rgdata
@@ -23,7 +23,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
testpgm=/usr/bin/env
diff --git a/tools/regression/usr.bin/env/regress-sb.rb b/tools/regression/usr.bin/env/regress-sb.rb
index b43ddd3b6aa4..b784dcec3e50 100644
--- a/tools/regression/usr.bin/env/regress-sb.rb
+++ b/tools/regression/usr.bin/env/regress-sb.rb
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# -------+---------+---------+-------- + --------+---------+---------+---------+
-# $FreeBSD$
# -------+---------+---------+-------- + --------+---------+---------+---------+
# This script was written to provide a battery of regression-tests for some
# changes I am making to the `env' command. I wrote a new script for this
diff --git a/tools/regression/zfs/LICENSE b/tools/regression/zfs/LICENSE
index 45b9cac44ee3..5f030f03ff92 100644
--- a/tools/regression/zfs/LICENSE
+++ b/tools/regression/zfs/LICENSE
@@ -1,4 +1,3 @@
-$FreeBSD$
License for all ZFS regression tests:
diff --git a/tools/regression/zfs/misc.sh b/tools/regression/zfs/misc.sh
index b52481e86e8d..33f1cc3a8eb7 100755
--- a/tools/regression/zfs/misc.sh
+++ b/tools/regression/zfs/misc.sh
@@ -1,4 +1,3 @@
-# $FreeBSD$
ntest=1
os=`uname -s`
diff --git a/tools/regression/zfs/zpool/add/cache.t b/tools/regression/zfs/zpool/add/cache.t
index abaaf41bc4d8..af5e4936341e 100644
--- a/tools/regression/zfs/zpool/add/cache.t
+++ b/tools/regression/zfs/zpool/add/cache.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/disks.t b/tools/regression/zfs/zpool/add/disks.t
index e12f5feaefdd..0a1e9658351f 100644
--- a/tools/regression/zfs/zpool/add/disks.t
+++ b/tools/regression/zfs/zpool/add/disks.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/doesnt_exist.t b/tools/regression/zfs/zpool/add/doesnt_exist.t
index d099afc255cd..589dd31b4097 100644
--- a/tools/regression/zfs/zpool/add/doesnt_exist.t
+++ b/tools/regression/zfs/zpool/add/doesnt_exist.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/files.t b/tools/regression/zfs/zpool/add/files.t
index 59014aafd912..624bb7893069 100644
--- a/tools/regression/zfs/zpool/add/files.t
+++ b/tools/regression/zfs/zpool/add/files.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/log.t b/tools/regression/zfs/zpool/add/log.t
index 516ab1b14438..289468801a75 100644
--- a/tools/regression/zfs/zpool/add/log.t
+++ b/tools/regression/zfs/zpool/add/log.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/mirror.t b/tools/regression/zfs/zpool/add/mirror.t
index 25ff59ea2034..34a89cff3bf0 100644
--- a/tools/regression/zfs/zpool/add/mirror.t
+++ b/tools/regression/zfs/zpool/add/mirror.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/option-f_inuse.t b/tools/regression/zfs/zpool/add/option-f_inuse.t
index 5cc86c31f32e..2d5a7db480dc 100644
--- a/tools/regression/zfs/zpool/add/option-f_inuse.t
+++ b/tools/regression/zfs/zpool/add/option-f_inuse.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_0.t b/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_0.t
index 83b0a59559c5..5d3a649b2205 100644
--- a/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_0.t
+++ b/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_0.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_1.t b/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_1.t
index 6b19b0aa7bbb..97258f2ed770 100644
--- a/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_1.t
+++ b/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_1.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/option-f_size_mismatch.t b/tools/regression/zfs/zpool/add/option-f_size_mismatch.t
index 79281e522c27..e16258e956aa 100644
--- a/tools/regression/zfs/zpool/add/option-f_size_mismatch.t
+++ b/tools/regression/zfs/zpool/add/option-f_size_mismatch.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/option-f_type_mismatch.t b/tools/regression/zfs/zpool/add/option-f_type_mismatch.t
index a79bce98ac35..7187001d2fba 100644
--- a/tools/regression/zfs/zpool/add/option-f_type_mismatch.t
+++ b/tools/regression/zfs/zpool/add/option-f_type_mismatch.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/option-n.t b/tools/regression/zfs/zpool/add/option-n.t
index 5f8b5c0b7b65..001a596137f0 100644
--- a/tools/regression/zfs/zpool/add/option-n.t
+++ b/tools/regression/zfs/zpool/add/option-n.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/raidz1.t b/tools/regression/zfs/zpool/add/raidz1.t
index cd004a226765..ae986e5b54fc 100644
--- a/tools/regression/zfs/zpool/add/raidz1.t
+++ b/tools/regression/zfs/zpool/add/raidz1.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/raidz2.t b/tools/regression/zfs/zpool/add/raidz2.t
index 20fca8a1e693..20a9fb5ae7d1 100644
--- a/tools/regression/zfs/zpool/add/raidz2.t
+++ b/tools/regression/zfs/zpool/add/raidz2.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/add/spare.t b/tools/regression/zfs/zpool/add/spare.t
index 816e385c47f2..ddefd55a0ea7 100644
--- a/tools/regression/zfs/zpool/add/spare.t
+++ b/tools/regression/zfs/zpool/add/spare.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/attach/log.t b/tools/regression/zfs/zpool/attach/log.t
index dde59956f160..8ef6fd972b8a 100644
--- a/tools/regression/zfs/zpool/attach/log.t
+++ b/tools/regression/zfs/zpool/attach/log.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/attach/mirror.t b/tools/regression/zfs/zpool/attach/mirror.t
index ac3fe2d2c91d..ce7b8d57d5f9 100644
--- a/tools/regression/zfs/zpool/attach/mirror.t
+++ b/tools/regression/zfs/zpool/attach/mirror.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/attach/option-f_inuse.t b/tools/regression/zfs/zpool/attach/option-f_inuse.t
index a62d360582b0..f99e196df3e1 100644
--- a/tools/regression/zfs/zpool/attach/option-f_inuse.t
+++ b/tools/regression/zfs/zpool/attach/option-f_inuse.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/already_exists.t b/tools/regression/zfs/zpool/create/already_exists.t
index f3005804073e..7bb098b54de2 100644
--- a/tools/regression/zfs/zpool/create/already_exists.t
+++ b/tools/regression/zfs/zpool/create/already_exists.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/automount.t b/tools/regression/zfs/zpool/create/automount.t
index 175f2abd7963..12fae937c41c 100644
--- a/tools/regression/zfs/zpool/create/automount.t
+++ b/tools/regression/zfs/zpool/create/automount.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/cache.t b/tools/regression/zfs/zpool/create/cache.t
index 13af7f170b8a..b95fccdc6603 100644
--- a/tools/regression/zfs/zpool/create/cache.t
+++ b/tools/regression/zfs/zpool/create/cache.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/disks.t b/tools/regression/zfs/zpool/create/disks.t
index b6b722ce0a41..5b3513484d91 100644
--- a/tools/regression/zfs/zpool/create/disks.t
+++ b/tools/regression/zfs/zpool/create/disks.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/files.t b/tools/regression/zfs/zpool/create/files.t
index 06107b29b141..1a06689173ea 100644
--- a/tools/regression/zfs/zpool/create/files.t
+++ b/tools/regression/zfs/zpool/create/files.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/log.t b/tools/regression/zfs/zpool/create/log.t
index 18105fbc7490..ff09667aa18a 100644
--- a/tools/regression/zfs/zpool/create/log.t
+++ b/tools/regression/zfs/zpool/create/log.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/mirror.t b/tools/regression/zfs/zpool/create/mirror.t
index 49572e8e1fd3..a5b93fad52a5 100644
--- a/tools/regression/zfs/zpool/create/mirror.t
+++ b/tools/regression/zfs/zpool/create/mirror.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-R.t b/tools/regression/zfs/zpool/create/option-R.t
index 75182a0eb954..cf20d0f12882 100644
--- a/tools/regression/zfs/zpool/create/option-R.t
+++ b/tools/regression/zfs/zpool/create/option-R.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-f_inuse.t b/tools/regression/zfs/zpool/create/option-f_inuse.t
index 344b9c1328d7..b9905fb86b2c 100644
--- a/tools/regression/zfs/zpool/create/option-f_inuse.t
+++ b/tools/regression/zfs/zpool/create/option-f_inuse.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_0.t b/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_0.t
index 27ffede5f471..fcaf7a9c55a6 100644
--- a/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_0.t
+++ b/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_0.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_1.t b/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_1.t
index d64db3a76af6..92f4bbc89f89 100644
--- a/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_1.t
+++ b/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_1.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-f_size_mismatch.t b/tools/regression/zfs/zpool/create/option-f_size_mismatch.t
index 74af3909ef8e..d0fda7af192e 100644
--- a/tools/regression/zfs/zpool/create/option-f_size_mismatch.t
+++ b/tools/regression/zfs/zpool/create/option-f_size_mismatch.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-f_type_mismatch.t b/tools/regression/zfs/zpool/create/option-f_type_mismatch.t
index 7739eb807fa1..b0b69d935bd4 100644
--- a/tools/regression/zfs/zpool/create/option-f_type_mismatch.t
+++ b/tools/regression/zfs/zpool/create/option-f_type_mismatch.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-m.t b/tools/regression/zfs/zpool/create/option-m.t
index 357959e26849..d5ed832e6f4d 100644
--- a/tools/regression/zfs/zpool/create/option-m.t
+++ b/tools/regression/zfs/zpool/create/option-m.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-n.t b/tools/regression/zfs/zpool/create/option-n.t
index 0cb3e7fa5a5f..8fddf383488c 100644
--- a/tools/regression/zfs/zpool/create/option-n.t
+++ b/tools/regression/zfs/zpool/create/option-n.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/option-o.t b/tools/regression/zfs/zpool/create/option-o.t
index 3305323a0e41..6278b37d9134 100644
--- a/tools/regression/zfs/zpool/create/option-o.t
+++ b/tools/regression/zfs/zpool/create/option-o.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/raidz1.t b/tools/regression/zfs/zpool/create/raidz1.t
index 382f7e749b2e..7aa684c23339 100644
--- a/tools/regression/zfs/zpool/create/raidz1.t
+++ b/tools/regression/zfs/zpool/create/raidz1.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/raidz2.t b/tools/regression/zfs/zpool/create/raidz2.t
index 587d3dc3753b..ad6c28b6684c 100644
--- a/tools/regression/zfs/zpool/create/raidz2.t
+++ b/tools/regression/zfs/zpool/create/raidz2.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/create/spare.t b/tools/regression/zfs/zpool/create/spare.t
index 46f47da32516..b87de5856172 100644
--- a/tools/regression/zfs/zpool/create/spare.t
+++ b/tools/regression/zfs/zpool/create/spare.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/offline/io.t b/tools/regression/zfs/zpool/offline/io.t
index 8faeb8a2dde0..d2fe640997dc 100644
--- a/tools/regression/zfs/zpool/offline/io.t
+++ b/tools/regression/zfs/zpool/offline/io.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/offline/log.t b/tools/regression/zfs/zpool/offline/log.t
index 2a741ba4f5f7..f4d8fada03e8 100644
--- a/tools/regression/zfs/zpool/offline/log.t
+++ b/tools/regression/zfs/zpool/offline/log.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/offline/mirror.t b/tools/regression/zfs/zpool/offline/mirror.t
index 37778fcdcc54..2863b9cc2dcf 100644
--- a/tools/regression/zfs/zpool/offline/mirror.t
+++ b/tools/regression/zfs/zpool/offline/mirror.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/offline/option-t.t b/tools/regression/zfs/zpool/offline/option-t.t
index c4087961edc2..652160dc2cff 100644
--- a/tools/regression/zfs/zpool/offline/option-t.t
+++ b/tools/regression/zfs/zpool/offline/option-t.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/offline/raidz1.t b/tools/regression/zfs/zpool/offline/raidz1.t
index d6827cad606b..e377ed07d5c4 100644
--- a/tools/regression/zfs/zpool/offline/raidz1.t
+++ b/tools/regression/zfs/zpool/offline/raidz1.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/offline/raidz2.t b/tools/regression/zfs/zpool/offline/raidz2.t
index 299649d0f7fd..cce59dbd02a2 100644
--- a/tools/regression/zfs/zpool/offline/raidz2.t
+++ b/tools/regression/zfs/zpool/offline/raidz2.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/remove/cache.t b/tools/regression/zfs/zpool/remove/cache.t
index fd55451e274e..af3aa9ade4c1 100644
--- a/tools/regression/zfs/zpool/remove/cache.t
+++ b/tools/regression/zfs/zpool/remove/cache.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/remove/spare.t b/tools/regression/zfs/zpool/remove/spare.t
index c52f220b7fb6..179363b5e192 100644
--- a/tools/regression/zfs/zpool/remove/spare.t
+++ b/tools/regression/zfs/zpool/remove/spare.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/replace/cache.t b/tools/regression/zfs/zpool/replace/cache.t
index 23abc3769191..cd9fec9aeaa2 100644
--- a/tools/regression/zfs/zpool/replace/cache.t
+++ b/tools/regression/zfs/zpool/replace/cache.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/replace/disk.t b/tools/regression/zfs/zpool/replace/disk.t
index 51029e6d8a68..572c5f9694ee 100644
--- a/tools/regression/zfs/zpool/replace/disk.t
+++ b/tools/regression/zfs/zpool/replace/disk.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/replace/log.t b/tools/regression/zfs/zpool/replace/log.t
index 6eed8bdc9926..d1f7b4fd5f75 100644
--- a/tools/regression/zfs/zpool/replace/log.t
+++ b/tools/regression/zfs/zpool/replace/log.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/replace/mirror.t b/tools/regression/zfs/zpool/replace/mirror.t
index 6e9dafead23f..0de1e3330335 100644
--- a/tools/regression/zfs/zpool/replace/mirror.t
+++ b/tools/regression/zfs/zpool/replace/mirror.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/replace/raidz1.t b/tools/regression/zfs/zpool/replace/raidz1.t
index 79bcf8e3060c..6b8467a3fae2 100644
--- a/tools/regression/zfs/zpool/replace/raidz1.t
+++ b/tools/regression/zfs/zpool/replace/raidz1.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/replace/raidz2.t b/tools/regression/zfs/zpool/replace/raidz2.t
index d961e3c32ff3..29bacda5a0e9 100644
--- a/tools/regression/zfs/zpool/replace/raidz2.t
+++ b/tools/regression/zfs/zpool/replace/raidz2.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/regression/zfs/zpool/replace/spare.t b/tools/regression/zfs/zpool/replace/spare.t
index 5899305c6a30..7359d2234f02 100644
--- a/tools/regression/zfs/zpool/replace/spare.t
+++ b/tools/regression/zfs/zpool/replace/spare.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
dir=`dirname $0`
. ${dir}/../../misc.sh
diff --git a/tools/sched/make_ktr.sh b/tools/sched/make_ktr.sh
index 44aff7b37b12..e21df10eeca0 100755
--- a/tools/sched/make_ktr.sh
+++ b/tools/sched/make_ktr.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
if [ "$#" -ne 2 ]
diff --git a/tools/sched/schedgraph.d b/tools/sched/schedgraph.d
index 129c50d25325..9f29d2889f0d 100755
--- a/tools/sched/schedgraph.d
+++ b/tools/sched/schedgraph.d
@@ -24,8 +24,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/sched/schedgraph.py b/tools/sched/schedgraph.py
index bfd4339f6633..00ad1bfec99e 100644
--- a/tools/sched/schedgraph.py
+++ b/tools/sched/schedgraph.py
@@ -24,7 +24,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
from __future__ import print_function
import sys
diff --git a/tools/test/README b/tools/test/README
index 5512fd5203ba..894aa051c6c1 100644
--- a/tools/test/README
+++ b/tools/test/README
@@ -1,5 +1,3 @@
-$FreeBSD$
-
This directory is for standalone test programs. For the FreeBSD
Test Suite, which uses Kyua, please see /usr/src/tests/
@@ -8,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 f40c81d87652..e1edd843bd59 100644
--- a/tools/test/auxinfo/Makefile
+++ b/tools/test/auxinfo/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= auxinfo
MAN=
diff --git a/tools/test/auxinfo/auxinfo.c b/tools/test/auxinfo/auxinfo.c
index a855b543f270..f155777ec121 100644
--- a/tools/test/auxinfo/auxinfo.c
+++ b/tools/test/auxinfo/auxinfo.c
@@ -1,8 +1,6 @@
/*
* This file is in public domain.
* Written by Konstantin Belousov <kib@freebsd.org>
- *
- * $FreeBSD$
*/
#include <sys/mman.h>
diff --git a/tools/test/avx_sig/avx_sig.c b/tools/test/avx_sig/avx_sig.c
deleted file mode 100644
index 711d40f2c231..000000000000
--- a/tools/test/avx_sig/avx_sig.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* $Id: avx_sig.c,v 1.12 2021/12/11 22:47:09 kostik Exp $ */
-/*
- * Naive test to check that context switches and signal delivery do
- * not corrupt AVX registers file (%xmm). Run until some
- * inconsistency detected, then aborts.
- *
- * FreeBSD:
- * ${CC} -Wall -Wextra -O -g -o avx_sig avx_sig.c -lpthread
- * Linux
- * ${CC} -D_GNU_SOURCE -Wall -Wextra -O -g -o avx_sig avx_sig.c -lbsd -lpthread
- */
-
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/syscall.h>
-#include <errno.h>
-#include <pthread.h>
-#ifdef __FreeBSD__
-#include <pthread_np.h>
-#endif
-#ifdef __linux__
-#include <bsd/stdlib.h>
-#endif
-#include <signal.h>
-#include <stdatomic.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#ifndef __unused
-#define __unused __attribute__((__unused__))
-#endif
-#ifndef nitems
-#define nitems(x) (sizeof((x)) / sizeof((x)[0]))
-#endif
-
-struct xmmreg {
- uint8_t xmm_bytes[16];
-};
-
-struct xmm {
- struct xmmreg xmmreg[16];
-};
-
-#define X2C(r) asm("movdqu %0, %%xmm" #r : "=m" (xmm->xmmreg[r]))
-#define C2X(r) asm("movdqu %%xmm" #r ", %0" : : "m" (xmm->xmmreg[r]) : "xmm" #r)
-
-static void
-cpu_to_xmm(struct xmm *xmm)
-{
- C2X(0); C2X(1); C2X(2); C2X(3); C2X(4); C2X(5); C2X(6); C2X(7);
- C2X(8); C2X(9); C2X(10); C2X(11); C2X(12); C2X(13); C2X(14); C2X(15);
-}
-
-static void
-xmm_to_cpu(struct xmm *xmm)
-{
- X2C(0); X2C(1); X2C(2); X2C(3); X2C(4); X2C(5); X2C(6); X2C(7);
- X2C(8); X2C(9); X2C(10); X2C(11); X2C(12); X2C(13); X2C(14); X2C(15);
-}
-
-#undef C2X
-#undef X2C
-
-static atomic_uint sigs;
-
-static void
-sigusr1_handler(int sig __unused, siginfo_t *si __unused, void *m __unused)
-{
- atomic_fetch_add_explicit(&sigs, 1, memory_order_relaxed);
-}
-
-#ifdef SIGINFO
-static void
-siginfo_handler(int sig __unused)
-{
- struct rusage r;
-
- if (getrusage(RUSAGE_SELF, &r) == 0) {
- printf("%lu vctx %lu nvctx %lu nsigs ",
- r.ru_nvcsw, r.ru_nivcsw, r.ru_nsignals);
- }
- printf("%u SIGUSR1\n", sigs);
-}
-#endif
-
-static struct xmm zero_xmm = {};
-
-static void
-fill_xmm(struct xmm *xmm)
-{
- arc4random_buf(xmm, sizeof(*xmm));
-}
-
-static void
-dump_xmm(const struct xmmreg *r)
-{
- unsigned k;
-
- for (k = 0; k < nitems(r->xmm_bytes); k++) {
- if (k != 0)
- printf(" ");
- printf("%02x", r->xmm_bytes[k]);
- }
- printf("\n");
-}
-
-static pthread_mutex_t show_lock;
-
-static void
-show_diff(const struct xmm *xmm1, const struct xmm *xmm2)
-{
- const struct xmmreg *r1, *r2;
- unsigned i, j;
-
-#if defined(__FreeBSD__)
- printf("thr %d\n", pthread_getthreadid_np());
-#elif defined(__linux__)
- printf("thr %ld\n", syscall(SYS_gettid));
-#endif
- for (i = 0; i < nitems(xmm1->xmmreg); i++) {
- r1 = &xmm1->xmmreg[i];
- r2 = &xmm2->xmmreg[i];
- for (j = 0; j < nitems(r1->xmm_bytes); j++) {
- if (r1->xmm_bytes[j] != r2->xmm_bytes[j]) {
- printf("xmm%u\n", i);
- dump_xmm(r1);
- dump_xmm(r2);
- break;
- }
- }
- }
-}
-
-static void
-my_pause(void)
-{
- usleep(0);
-}
-
-static void *
-worker_thread(void *arg __unused)
-{
- struct xmm xmm, xmm_cpu;
-
- fill_xmm(&xmm);
- for (;;) {
- xmm_to_cpu(&xmm);
- my_pause();
- cpu_to_xmm(&xmm_cpu);
- if (memcmp(&xmm, &xmm_cpu, sizeof(struct xmm)) != 0) {
- pthread_mutex_lock(&show_lock);
- show_diff(&xmm, &xmm_cpu);
- abort();
- pthread_mutex_unlock(&show_lock);
- }
-
- xmm_to_cpu(&zero_xmm);
- my_pause();
- cpu_to_xmm(&xmm_cpu);
- if (memcmp(&zero_xmm, &xmm_cpu, sizeof(struct xmm)) != 0) {
- pthread_mutex_lock(&show_lock);
- show_diff(&zero_xmm, &xmm_cpu);
- abort();
- pthread_mutex_unlock(&show_lock);
- }
- }
- return (NULL);
-}
-
-int
-main(void)
-{
- struct sigaction sa;
- int error, i, ncpu;
-
-#ifdef SIGINFO
- bzero(&sa, sizeof(sa));
- sa.sa_handler = siginfo_handler;
- if (sigaction(SIGINFO, &sa, NULL) == -1) {
- fprintf(stderr, "sigaction SIGINFO %s\n", strerror(errno));
- exit(1);
- }
-#endif
-
- bzero(&sa, sizeof(sa));
- sa.sa_sigaction = sigusr1_handler;
- sa.sa_flags = SA_SIGINFO;
- if (sigaction(SIGUSR1, &sa, NULL) == -1) {
- fprintf(stderr, "sigaction SIGUSR1 %s\n", strerror(errno));
- exit(1);
- }
-
- error = pthread_mutex_init(&show_lock, NULL);
- if (error != 0) {
- fprintf(stderr, "pthread_mutex_init %s\n", strerror(error));
- exit(1);
- }
-
- ncpu = sysconf(_SC_NPROCESSORS_ONLN);
- ncpu *= 2;
- pthread_t wt[ncpu];
- for (i = 0; i < ncpu; i++) {
- error = pthread_create(&wt[i], NULL, worker_thread, NULL);
- if (error != 0) {
- fprintf(stderr, "pthread_create %s\n", strerror(error));
- }
- }
-
- for (;;) {
- for (i = 0; i < ncpu; i++) {
- my_pause();
- pthread_kill(wt[i], SIGUSR1);
- }
- }
-}
diff --git a/tools/test/bsnmp/Makefile b/tools/test/bsnmp/Makefile
index 52f67be70164..88bfcfd3c069 100644
--- a/tools/test/bsnmp/Makefile
+++ b/tools/test/bsnmp/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
CONTRIB=${SRCTOP}/contrib/bsnmp
.PATH: ${CONTRIB}/tests
@@ -7,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 ee17d752b820..6421c072c5b9 100644
--- a/tools/test/callout_free/Makefile
+++ b/tools/test/callout_free/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
KMOD= callout_free
SRCS= callout_free.c
diff --git a/tools/test/callout_free/callout_free.c b/tools/test/callout_free/callout_free.c
index 4556687e06f6..8a22d0768341 100644
--- a/tools/test/callout_free/callout_free.c
+++ b/tools/test/callout_free/callout_free.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/test/devrandom/hammer.random b/tools/test/devrandom/hammer.random
index ea4cb5f64032..f6c823986029 100644
--- a/tools/test/devrandom/hammer.random
+++ b/tools/test/devrandom/hammer.random
@@ -5,7 +5,6 @@
# Read and display random numbers.
# Try tapping shift/alt/ctrl to get more randomness.
#
-# $FreeBSD$
#
for (;;) {
diff --git a/tools/test/devrandom/hammer.urandom b/tools/test/devrandom/hammer.urandom
index d0b6aa89da58..892cd3697492 100644
--- a/tools/test/devrandom/hammer.urandom
+++ b/tools/test/devrandom/hammer.urandom
@@ -5,7 +5,6 @@
# Read and display random numbers.
# This also reads /dev/zero to make sure there is no brokenness there.
#
-# $FreeBSD$
#
open(ZERO, "/dev/zero") || die "Cannot open /dev/zero - $!\n";
diff --git a/tools/test/devrandom/stat.16bit b/tools/test/devrandom/stat.16bit
index 32a6a9caf550..b30b10c81b3f 100644
--- a/tools/test/devrandom/stat.16bit
+++ b/tools/test/devrandom/stat.16bit
@@ -8,7 +8,6 @@
# Redirect the output from this to a file - and go to the movies while
# it runs. This program is a CPU Hog!
#
-# $FreeBSD$
#
for ($i = 0; $i < (1024*64); $i++) {
diff --git a/tools/test/devrandom/stat.8bit b/tools/test/devrandom/stat.8bit
index 03fdbdd5b39d..63cf396bb72d 100644
--- a/tools/test/devrandom/stat.8bit
+++ b/tools/test/devrandom/stat.8bit
@@ -8,7 +8,6 @@
# Redirect the output from this to a file - and make a cup of coffee while
# it runs. This program is a CPU Hog!
#
-# $FreeBSD$
#
for ($i = 0; $i < (1024*32); $i++) {
diff --git a/tools/test/gpioevents/Makefile b/tools/test/gpioevents/Makefile
index 89edfefa87ea..8d256534447b 100644
--- a/tools/test/gpioevents/Makefile
+++ b/tools/test/gpioevents/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= gpioevents
SRCS= gpioevents.c
@@ -9,4 +7,6 @@ MK_MAN= no
BINDIR= /usr/bin
+CWARNFLAGS += -Wno-gnu-folding-constant
+
.include <bsd.prog.mk>
diff --git a/tools/test/gpioevents/gpioevents.c b/tools/test/gpioevents/gpioevents.c
index 20d18257f4a8..43bad610cb68 100644
--- a/tools/test/gpioevents/gpioevents.c
+++ b/tools/test/gpioevents/gpioevents.c
@@ -1,5 +1,5 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2018 Christian Kramer
* Copyright (c) 2020 Ian Lepore <ian@FreeBSD.org>
@@ -25,8 +25,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
- *
* make LDFLAGS+=-lgpio gpioevents
*/
@@ -63,10 +61,10 @@ sigio_handler(int sig __unused){
}
static void
-usage()
+usage(void)
{
fprintf(stderr, "usage: %s [-f ctldev] [-m method] [-s] [-n] [-S] [-u]"
- "[-t timeout] [-d delay-usec] pin intr-config [pin intr-config ...]\n\n",
+ "[-t timeout] [-d delay-usec] pin intr-config pin-mode [pin intr-config pin-mode ...]\n\n",
getprogname());
fprintf(stderr, " -d delay before each call to read/poll/select/etc\n");
fprintf(stderr, " -n Non-blocking IO\n");
@@ -85,7 +83,11 @@ usage()
fprintf(stderr, " no\t no interrupt\n");
fprintf(stderr, " er\t edge rising\n");
fprintf(stderr, " ef\t edge falling\n");
- fprintf(stderr, " eb\t edge both\n");
+ fprintf(stderr, " eb\t edge both\n\n");
+ fprintf(stderr, "Possible options for pin-mode:\n\n");
+ fprintf(stderr, " ft\t floating\n");
+ fprintf(stderr, " pd\t pull-down\n");
+ fprintf(stderr, " pu\t pull-up\n");
}
static void
@@ -150,7 +152,7 @@ print_poll_events(short event)
}
static void
-calc_utc_offset()
+calc_utc_offset(void)
{
struct timespec monotime, utctime;
@@ -454,7 +456,7 @@ run_sigio(bool loop, int handle, const char *file)
do {
if (sigio == 1) {
sigio = 0;
- printf("%s: recieved SIGIO on %s\n", getprogname(),
+ printf("%s: received SIGIO on %s\n", getprogname(),
file);
run_read(false, handle, file, 0);
}
@@ -539,8 +541,15 @@ main(int argc, char *argv[])
return EXIT_FAILURE;
}
- if (argc % 2 == 1) {
- fprintf(stderr, "%s: Invalid number of pin intr-conf pairs.\n",
+ if (argc == 1) {
+ fprintf(stderr, "%s: No trigger type specified.\n",
+ getprogname());
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ if (argc % 3 != 0) {
+ fprintf(stderr, "%s: Invalid number of (pin intr-conf mode) triplets.\n",
getprogname());
usage();
return EXIT_FAILURE;
@@ -567,7 +576,7 @@ main(int argc, char *argv[])
err(EXIT_FAILURE, "cannot set O_NONBLOCK on %s", file);
}
- for (int i = 0; i <= argc - 2; i += 2) {
+ for (int i = 0; i <= argc - 3; i += 3) {
errno = 0;
pin_config.g_pin = strtol(argv[i], NULL, 10);
@@ -604,7 +613,31 @@ main(int argc, char *argv[])
return EXIT_FAILURE;
}
- pin_config.g_flags |= GPIO_PIN_INPUT | GPIO_PIN_PULLUP;
+ if (strnlen(argv[i + 2], 2) < 2) {
+ fprintf(stderr, "%s: Invalid pin mode (argument "
+ "too short).\n", getprogname());
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ switch((argv[i + 2][0] << 8) + argv[i + 2][1]) {
+ case ('f' << 8) + 't':
+ /* no changes to pin_config */
+ break;
+ case ('p' << 8) + 'd':
+ pin_config.g_flags |= GPIO_PIN_PULLDOWN;
+ break;
+ case ('p' << 8) + 'u':
+ pin_config.g_flags |= GPIO_PIN_PULLUP;
+ break;
+ default:
+ fprintf(stderr, "%s: Invalid pin mode.\n",
+ getprogname());
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ pin_config.g_flags |= GPIO_PIN_INPUT;
res = gpio_pin_set_flags(handle, &pin_config);
if (res < 0)
diff --git a/tools/test/hwpmc/pmctest.py b/tools/test/hwpmc/pmctest.py
index 51f58311a62b..4bd4910b00a9 100755
--- a/tools/test/hwpmc/pmctest.py
+++ b/tools/test/hwpmc/pmctest.py
@@ -33,7 +33,6 @@
#
# Author: George V. Neville-Neil
#
-# $FreeBSD$
# Description: A program to run a simple program against every available
# pmc counter present in a system.
diff --git a/tools/test/iconv/Makefile b/tools/test/iconv/Makefile
index 6f390d4deb4d..0d152df97c94 100644
--- a/tools/test/iconv/Makefile
+++ b/tools/test/iconv/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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/const-gnuism.c b/tools/test/iconv/const-gnuism.c
index fdf130fc215a..957f7e0786c7 100644
--- a/tools/test/iconv/const-gnuism.c
+++ b/tools/test/iconv/const-gnuism.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <err.h>
diff --git a/tools/test/iconv/gnu/Makefile b/tools/test/iconv/gnu/Makefile
index d52876e3aa18..a90b2fea6918 100644
--- a/tools/test/iconv/gnu/Makefile
+++ b/tools/test/iconv/gnu/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= gnu
MAN=
diff --git a/tools/test/iconv/gnu/gnu.c b/tools/test/iconv/gnu/gnu.c
index ecf180d23b98..1640bdc631fe 100644
--- a/tools/test/iconv/gnu/gnu.c
+++ b/tools/test/iconv/gnu/gnu.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/endian.h>
#include <sys/types.h>
diff --git a/tools/test/iconv/posix/Makefile b/tools/test/iconv/posix/Makefile
index aafaadebafe7..6e15a6fa74e4 100644
--- a/tools/test/iconv/posix/Makefile
+++ b/tools/test/iconv/posix/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= posix
MAN=
diff --git a/tools/test/iconv/posix/posix.c b/tools/test/iconv/posix/posix.c
index 7faed92416a3..36e662f882f7 100644
--- a/tools/test/iconv/posix/posix.c
+++ b/tools/test/iconv/posix/posix.c
@@ -24,11 +24,8 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
+#include <sys/param.h>
#include <sys/endian.h>
-#include <sys/types.h>
#include <err.h>
#include <errno.h>
@@ -66,18 +63,22 @@ static int
open_2(void)
{
iconv_t cd[MAX_LIMIT];
- int i, ret;
+ size_t i;
+ int ret;
errno = 0;
+ ret = 1;
for (i = 0; i < MAX_LIMIT; i++) {
cd[i] = iconv_open("ASCII", "UTF8");
- if (cd[i] == (iconv_t)-1)
+ if (cd[i] == (iconv_t)-1) {
+ if (errno == ENFILE || errno == EMFILE)
+ ret = 0;
+ cd[i] = NULL;
break;
+ }
}
- ret = (cd[i] == (iconv_t)-1) && ((errno == ENFILE) ||
- (errno == EMFILE)) ? 0 : 1;
- for (; i > 0; i--)
+ for (i = MIN(i, nitems(cd) - 1); i > 0; i--)
iconv_close(cd[i]);
return (ret);
}
diff --git a/tools/test/iconv/ref/ARMSCII-8 b/tools/test/iconv/ref/ARMSCII-8
index fd9c484df2a7..7e492cae00e5 100644
--- a/tools/test/iconv/ref/ARMSCII-8
+++ b/tools/test/iconv/ref/ARMSCII-8
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ARMSCII-8-rev b/tools/test/iconv/ref/ARMSCII-8-rev
index c9d066dfe41c..e84930931237 100644
--- a/tools/test/iconv/ref/ARMSCII-8-rev
+++ b/tools/test/iconv/ref/ARMSCII-8-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ASCII b/tools/test/iconv/ref/ASCII
index a662b865d087..b6ed8fce32cd 100644
--- a/tools/test/iconv/ref/ASCII
+++ b/tools/test/iconv/ref/ASCII
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ASCII-rev b/tools/test/iconv/ref/ASCII-rev
index 48ad5796743c..2dcb854dc624 100644
--- a/tools/test/iconv/ref/ASCII-rev
+++ b/tools/test/iconv/ref/ASCII-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ATARIST b/tools/test/iconv/ref/ATARIST
index 260578ffdb94..13f6397a4407 100644
--- a/tools/test/iconv/ref/ATARIST
+++ b/tools/test/iconv/ref/ATARIST
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ATARIST-rev b/tools/test/iconv/ref/ATARIST-rev
index fa68aa8ce1cc..01a49cb2317d 100644
--- a/tools/test/iconv/ref/ATARIST-rev
+++ b/tools/test/iconv/ref/ATARIST-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/BIG5 b/tools/test/iconv/ref/BIG5
index ac272eb21707..08c5ab03ee53 100644
--- a/tools/test/iconv/ref/BIG5
+++ b/tools/test/iconv/ref/BIG5
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/BIG5-2003 b/tools/test/iconv/ref/BIG5-2003
index 82621cd08ab9..68d00d395971 100644
--- a/tools/test/iconv/ref/BIG5-2003
+++ b/tools/test/iconv/ref/BIG5-2003
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/BIG5-2003-rev b/tools/test/iconv/ref/BIG5-2003-rev
index 08f73f9208f5..3f8a103855e7 100644
--- a/tools/test/iconv/ref/BIG5-2003-rev
+++ b/tools/test/iconv/ref/BIG5-2003-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/BIG5-HKSCS b/tools/test/iconv/ref/BIG5-HKSCS
index 99ff08bd28a5..931b1206ce03 100644
--- a/tools/test/iconv/ref/BIG5-HKSCS
+++ b/tools/test/iconv/ref/BIG5-HKSCS
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/BIG5-HKSCS-rev b/tools/test/iconv/ref/BIG5-HKSCS-rev
index 68d825aa41d9..d22cc99357b0 100644
--- a/tools/test/iconv/ref/BIG5-HKSCS-rev
+++ b/tools/test/iconv/ref/BIG5-HKSCS-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/BIG5-rev b/tools/test/iconv/ref/BIG5-rev
index f41d13b2a73d..02491de94687 100644
--- a/tools/test/iconv/ref/BIG5-rev
+++ b/tools/test/iconv/ref/BIG5-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/BIG5HKSCS b/tools/test/iconv/ref/BIG5HKSCS
index 688b0c8e734b..0cf43c4610de 100644
--- a/tools/test/iconv/ref/BIG5HKSCS
+++ b/tools/test/iconv/ref/BIG5HKSCS
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/BIG5HKSCS-rev b/tools/test/iconv/ref/BIG5HKSCS-rev
index 7ba58d96b3df..172c866072b2 100644
--- a/tools/test/iconv/ref/BIG5HKSCS-rev
+++ b/tools/test/iconv/ref/BIG5HKSCS-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/C99 b/tools/test/iconv/ref/C99
index ebb056a7ced7..5e846e73784f 100644
--- a/tools/test/iconv/ref/C99
+++ b/tools/test/iconv/ref/C99
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/C99-rev b/tools/test/iconv/ref/C99-rev
index e1f1b9bab983..327aa9097cf9 100644
--- a/tools/test/iconv/ref/C99-rev
+++ b/tools/test/iconv/ref/C99-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1046 b/tools/test/iconv/ref/CP1046
index c4f1772a0f94..cfe69aa77d8d 100644
--- a/tools/test/iconv/ref/CP1046
+++ b/tools/test/iconv/ref/CP1046
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1046-rev b/tools/test/iconv/ref/CP1046-rev
index 68161434b9f0..5729410e2511 100644
--- a/tools/test/iconv/ref/CP1046-rev
+++ b/tools/test/iconv/ref/CP1046-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1124 b/tools/test/iconv/ref/CP1124
index 6df07a9391ac..c5d2ceab54a4 100644
--- a/tools/test/iconv/ref/CP1124
+++ b/tools/test/iconv/ref/CP1124
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1124-rev b/tools/test/iconv/ref/CP1124-rev
index 6023d6e52b2d..368fb7e6c537 100644
--- a/tools/test/iconv/ref/CP1124-rev
+++ b/tools/test/iconv/ref/CP1124-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1125 b/tools/test/iconv/ref/CP1125
index 1f28652fa7eb..c62a784f3958 100644
--- a/tools/test/iconv/ref/CP1125
+++ b/tools/test/iconv/ref/CP1125
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1125-rev b/tools/test/iconv/ref/CP1125-rev
index ca927423ef39..49814be21b8d 100644
--- a/tools/test/iconv/ref/CP1125-rev
+++ b/tools/test/iconv/ref/CP1125-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1129 b/tools/test/iconv/ref/CP1129
index 67deb59f0392..52f14141ff46 100644
--- a/tools/test/iconv/ref/CP1129
+++ b/tools/test/iconv/ref/CP1129
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1129-rev b/tools/test/iconv/ref/CP1129-rev
index 82b9db792893..e10727c0892d 100644
--- a/tools/test/iconv/ref/CP1129-rev
+++ b/tools/test/iconv/ref/CP1129-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1131 b/tools/test/iconv/ref/CP1131
index a8e2b9f7d7f5..86226a298431 100644
--- a/tools/test/iconv/ref/CP1131
+++ b/tools/test/iconv/ref/CP1131
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1131-rev b/tools/test/iconv/ref/CP1131-rev
index 9e7c3dd88898..ba0ca711e51d 100644
--- a/tools/test/iconv/ref/CP1131-rev
+++ b/tools/test/iconv/ref/CP1131-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1133 b/tools/test/iconv/ref/CP1133
index 1cd2eb4ec42d..7f56a34e54be 100644
--- a/tools/test/iconv/ref/CP1133
+++ b/tools/test/iconv/ref/CP1133
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1133-rev b/tools/test/iconv/ref/CP1133-rev
index 72fd143b91a4..6f72ba75c335 100644
--- a/tools/test/iconv/ref/CP1133-rev
+++ b/tools/test/iconv/ref/CP1133-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1161 b/tools/test/iconv/ref/CP1161
index 423effdc2312..433cc494bc9e 100644
--- a/tools/test/iconv/ref/CP1161
+++ b/tools/test/iconv/ref/CP1161
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1161-rev b/tools/test/iconv/ref/CP1161-rev
index d2514a685012..7485aba47759 100644
--- a/tools/test/iconv/ref/CP1161-rev
+++ b/tools/test/iconv/ref/CP1161-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1162 b/tools/test/iconv/ref/CP1162
index f2b8c32653d0..a2fed926b341 100644
--- a/tools/test/iconv/ref/CP1162
+++ b/tools/test/iconv/ref/CP1162
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1162-rev b/tools/test/iconv/ref/CP1162-rev
index a85544f945c7..85b189e53cba 100644
--- a/tools/test/iconv/ref/CP1162-rev
+++ b/tools/test/iconv/ref/CP1162-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1163 b/tools/test/iconv/ref/CP1163
index 9e1e76baf16b..4c42c4d3f8f0 100644
--- a/tools/test/iconv/ref/CP1163
+++ b/tools/test/iconv/ref/CP1163
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1163-rev b/tools/test/iconv/ref/CP1163-rev
index 6a38fd206acf..4a408d1e2ac6 100644
--- a/tools/test/iconv/ref/CP1163-rev
+++ b/tools/test/iconv/ref/CP1163-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1250 b/tools/test/iconv/ref/CP1250
index 67d9c75a6702..d712c57bd9a7 100644
--- a/tools/test/iconv/ref/CP1250
+++ b/tools/test/iconv/ref/CP1250
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1250-rev b/tools/test/iconv/ref/CP1250-rev
index 15e812a1ad89..299cf9ff48eb 100644
--- a/tools/test/iconv/ref/CP1250-rev
+++ b/tools/test/iconv/ref/CP1250-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1251 b/tools/test/iconv/ref/CP1251
index d171fdd847be..1934ee8981f7 100644
--- a/tools/test/iconv/ref/CP1251
+++ b/tools/test/iconv/ref/CP1251
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1251-rev b/tools/test/iconv/ref/CP1251-rev
index 97050b37b76e..99ae6ff8d11f 100644
--- a/tools/test/iconv/ref/CP1251-rev
+++ b/tools/test/iconv/ref/CP1251-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1252 b/tools/test/iconv/ref/CP1252
index 4096a1d1a42a..af800dc86b8e 100644
--- a/tools/test/iconv/ref/CP1252
+++ b/tools/test/iconv/ref/CP1252
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1252-rev b/tools/test/iconv/ref/CP1252-rev
index 1fb9195bf721..f1f5643d11f0 100644
--- a/tools/test/iconv/ref/CP1252-rev
+++ b/tools/test/iconv/ref/CP1252-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1253 b/tools/test/iconv/ref/CP1253
index 03b740a22f91..492a0b10e99f 100644
--- a/tools/test/iconv/ref/CP1253
+++ b/tools/test/iconv/ref/CP1253
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1253-rev b/tools/test/iconv/ref/CP1253-rev
index 668a59ae7959..d4e82f50df53 100644
--- a/tools/test/iconv/ref/CP1253-rev
+++ b/tools/test/iconv/ref/CP1253-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1254 b/tools/test/iconv/ref/CP1254
index c28e20bcde1a..18b4bb1ccaff 100644
--- a/tools/test/iconv/ref/CP1254
+++ b/tools/test/iconv/ref/CP1254
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1254-rev b/tools/test/iconv/ref/CP1254-rev
index 815b99edbf07..c28b451bdbc3 100644
--- a/tools/test/iconv/ref/CP1254-rev
+++ b/tools/test/iconv/ref/CP1254-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1255 b/tools/test/iconv/ref/CP1255
index d1dff480d404..4e74635600fc 100644
--- a/tools/test/iconv/ref/CP1255
+++ b/tools/test/iconv/ref/CP1255
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1255-rev b/tools/test/iconv/ref/CP1255-rev
index ed393f569313..2abbf20878f7 100644
--- a/tools/test/iconv/ref/CP1255-rev
+++ b/tools/test/iconv/ref/CP1255-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1256 b/tools/test/iconv/ref/CP1256
index 5b74e2ef9573..c32203702635 100644
--- a/tools/test/iconv/ref/CP1256
+++ b/tools/test/iconv/ref/CP1256
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1256-rev b/tools/test/iconv/ref/CP1256-rev
index 95c2e0a1f972..3716a30f3e69 100644
--- a/tools/test/iconv/ref/CP1256-rev
+++ b/tools/test/iconv/ref/CP1256-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1257 b/tools/test/iconv/ref/CP1257
index 1626de0a7985..fdddd3bc2889 100644
--- a/tools/test/iconv/ref/CP1257
+++ b/tools/test/iconv/ref/CP1257
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1257-rev b/tools/test/iconv/ref/CP1257-rev
index b458c9e095b5..cbeab3f0c43c 100644
--- a/tools/test/iconv/ref/CP1257-rev
+++ b/tools/test/iconv/ref/CP1257-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1258 b/tools/test/iconv/ref/CP1258
index 6230428c815f..76ce8b78890a 100644
--- a/tools/test/iconv/ref/CP1258
+++ b/tools/test/iconv/ref/CP1258
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP1258-rev b/tools/test/iconv/ref/CP1258-rev
index 143212b02cbd..fe44a2c28733 100644
--- a/tools/test/iconv/ref/CP1258-rev
+++ b/tools/test/iconv/ref/CP1258-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP437 b/tools/test/iconv/ref/CP437
index 277f1096352f..e5a5de4c2320 100644
--- a/tools/test/iconv/ref/CP437
+++ b/tools/test/iconv/ref/CP437
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP437-rev b/tools/test/iconv/ref/CP437-rev
index 219623833ba1..73a1fec7fac0 100644
--- a/tools/test/iconv/ref/CP437-rev
+++ b/tools/test/iconv/ref/CP437-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP737 b/tools/test/iconv/ref/CP737
index 3b78c1b44e0b..f61c661e4be2 100644
--- a/tools/test/iconv/ref/CP737
+++ b/tools/test/iconv/ref/CP737
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP737-rev b/tools/test/iconv/ref/CP737-rev
index c498414d1aa6..8f4066986909 100644
--- a/tools/test/iconv/ref/CP737-rev
+++ b/tools/test/iconv/ref/CP737-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP775 b/tools/test/iconv/ref/CP775
index 1521bfb51671..accb2b16b85e 100644
--- a/tools/test/iconv/ref/CP775
+++ b/tools/test/iconv/ref/CP775
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP775-rev b/tools/test/iconv/ref/CP775-rev
index 1aa7ae2e3e6d..794580be7aba 100644
--- a/tools/test/iconv/ref/CP775-rev
+++ b/tools/test/iconv/ref/CP775-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP850 b/tools/test/iconv/ref/CP850
index 06843d1fb55e..e7f36597f691 100644
--- a/tools/test/iconv/ref/CP850
+++ b/tools/test/iconv/ref/CP850
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP850-rev b/tools/test/iconv/ref/CP850-rev
index b30db6aaf275..dd7d564892d4 100644
--- a/tools/test/iconv/ref/CP850-rev
+++ b/tools/test/iconv/ref/CP850-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP852 b/tools/test/iconv/ref/CP852
index 7ce9895ea2c3..14c6c3818c21 100644
--- a/tools/test/iconv/ref/CP852
+++ b/tools/test/iconv/ref/CP852
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP852-rev b/tools/test/iconv/ref/CP852-rev
index 75ea141d9896..df8d6eb09bdd 100644
--- a/tools/test/iconv/ref/CP852-rev
+++ b/tools/test/iconv/ref/CP852-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP853 b/tools/test/iconv/ref/CP853
index 218469bde9d4..31c276750768 100644
--- a/tools/test/iconv/ref/CP853
+++ b/tools/test/iconv/ref/CP853
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP853-rev b/tools/test/iconv/ref/CP853-rev
index 1387a2a42855..13e83a8c4646 100644
--- a/tools/test/iconv/ref/CP853-rev
+++ b/tools/test/iconv/ref/CP853-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP855 b/tools/test/iconv/ref/CP855
index f7b976e5fb59..f6084c7b4bb5 100644
--- a/tools/test/iconv/ref/CP855
+++ b/tools/test/iconv/ref/CP855
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP855-rev b/tools/test/iconv/ref/CP855-rev
index fd4c48393e1f..11ae795fbdb8 100644
--- a/tools/test/iconv/ref/CP855-rev
+++ b/tools/test/iconv/ref/CP855-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP856 b/tools/test/iconv/ref/CP856
index d5c8841e71c2..cd9bf9244082 100644
--- a/tools/test/iconv/ref/CP856
+++ b/tools/test/iconv/ref/CP856
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP856-rev b/tools/test/iconv/ref/CP856-rev
index c7be5238a09c..a4079c307d35 100644
--- a/tools/test/iconv/ref/CP856-rev
+++ b/tools/test/iconv/ref/CP856-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP857 b/tools/test/iconv/ref/CP857
index 863504dbbf01..e7d188889441 100644
--- a/tools/test/iconv/ref/CP857
+++ b/tools/test/iconv/ref/CP857
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP857-rev b/tools/test/iconv/ref/CP857-rev
index 6691da5bd66b..67157d578fa8 100644
--- a/tools/test/iconv/ref/CP857-rev
+++ b/tools/test/iconv/ref/CP857-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP858 b/tools/test/iconv/ref/CP858
index b2a76ac44c59..024c9793de03 100644
--- a/tools/test/iconv/ref/CP858
+++ b/tools/test/iconv/ref/CP858
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP858-rev b/tools/test/iconv/ref/CP858-rev
index 6ec7fb3ce7a3..d9ffd1c1acf6 100644
--- a/tools/test/iconv/ref/CP858-rev
+++ b/tools/test/iconv/ref/CP858-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP860 b/tools/test/iconv/ref/CP860
index b9fc527fb033..157d999e07a3 100644
--- a/tools/test/iconv/ref/CP860
+++ b/tools/test/iconv/ref/CP860
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP860-rev b/tools/test/iconv/ref/CP860-rev
index 54584faf60f3..3ddd4f591c1a 100644
--- a/tools/test/iconv/ref/CP860-rev
+++ b/tools/test/iconv/ref/CP860-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP861 b/tools/test/iconv/ref/CP861
index 5581fbe6f687..bfde74aa6a63 100644
--- a/tools/test/iconv/ref/CP861
+++ b/tools/test/iconv/ref/CP861
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP861-rev b/tools/test/iconv/ref/CP861-rev
index d0ef1c0ddf11..2ba1d1ddfff2 100644
--- a/tools/test/iconv/ref/CP861-rev
+++ b/tools/test/iconv/ref/CP861-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP862 b/tools/test/iconv/ref/CP862
index 272055e0879e..61f965d313c9 100644
--- a/tools/test/iconv/ref/CP862
+++ b/tools/test/iconv/ref/CP862
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP862-rev b/tools/test/iconv/ref/CP862-rev
index 02ff78fd188d..9adf72afdd03 100644
--- a/tools/test/iconv/ref/CP862-rev
+++ b/tools/test/iconv/ref/CP862-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP863 b/tools/test/iconv/ref/CP863
index 988b9f73f68d..763a24ad1a95 100644
--- a/tools/test/iconv/ref/CP863
+++ b/tools/test/iconv/ref/CP863
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP863-rev b/tools/test/iconv/ref/CP863-rev
index 7966aa7dc6c1..417cefad85cf 100644
--- a/tools/test/iconv/ref/CP863-rev
+++ b/tools/test/iconv/ref/CP863-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP864 b/tools/test/iconv/ref/CP864
index 9f1f00881a84..dc1a9489072e 100644
--- a/tools/test/iconv/ref/CP864
+++ b/tools/test/iconv/ref/CP864
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP864-rev b/tools/test/iconv/ref/CP864-rev
index 7ffb33278274..448f5d5f6d5d 100644
--- a/tools/test/iconv/ref/CP864-rev
+++ b/tools/test/iconv/ref/CP864-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP865 b/tools/test/iconv/ref/CP865
index fa11e3a189bb..d483b4207b8a 100644
--- a/tools/test/iconv/ref/CP865
+++ b/tools/test/iconv/ref/CP865
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP865-rev b/tools/test/iconv/ref/CP865-rev
index 28539bdf1e5f..25dea226dc68 100644
--- a/tools/test/iconv/ref/CP865-rev
+++ b/tools/test/iconv/ref/CP865-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP866 b/tools/test/iconv/ref/CP866
index 7d533a93c968..b54ca02264c1 100644
--- a/tools/test/iconv/ref/CP866
+++ b/tools/test/iconv/ref/CP866
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP866-rev b/tools/test/iconv/ref/CP866-rev
index d56f2af5acf3..06defed08d4a 100644
--- a/tools/test/iconv/ref/CP866-rev
+++ b/tools/test/iconv/ref/CP866-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP869 b/tools/test/iconv/ref/CP869
index 2f5718e86dda..a40e4646cc43 100644
--- a/tools/test/iconv/ref/CP869
+++ b/tools/test/iconv/ref/CP869
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP869-rev b/tools/test/iconv/ref/CP869-rev
index 964d3e6fe661..a8d4c9bcf65b 100644
--- a/tools/test/iconv/ref/CP869-rev
+++ b/tools/test/iconv/ref/CP869-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP874 b/tools/test/iconv/ref/CP874
index 15f889e7c793..97448659c9be 100644
--- a/tools/test/iconv/ref/CP874
+++ b/tools/test/iconv/ref/CP874
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP874-rev b/tools/test/iconv/ref/CP874-rev
index abc65cdfdaf9..9509d30f5c69 100644
--- a/tools/test/iconv/ref/CP874-rev
+++ b/tools/test/iconv/ref/CP874-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP922 b/tools/test/iconv/ref/CP922
index 6561ddce12a6..b80f4d5df5fc 100644
--- a/tools/test/iconv/ref/CP922
+++ b/tools/test/iconv/ref/CP922
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP922-rev b/tools/test/iconv/ref/CP922-rev
index fd8b16c05f4c..8e844e0d2e00 100644
--- a/tools/test/iconv/ref/CP922-rev
+++ b/tools/test/iconv/ref/CP922-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP932 b/tools/test/iconv/ref/CP932
index 95bc393e4082..6db1bdde5f16 100644
--- a/tools/test/iconv/ref/CP932
+++ b/tools/test/iconv/ref/CP932
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP932-rev b/tools/test/iconv/ref/CP932-rev
index 888a7c298789..ba9918fb2c49 100644
--- a/tools/test/iconv/ref/CP932-rev
+++ b/tools/test/iconv/ref/CP932-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP936 b/tools/test/iconv/ref/CP936
index a64cbcf03b6b..4e2e4a2b7642 100644
--- a/tools/test/iconv/ref/CP936
+++ b/tools/test/iconv/ref/CP936
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP936-rev b/tools/test/iconv/ref/CP936-rev
index abb97a2e8dcb..89b4128d21b8 100644
--- a/tools/test/iconv/ref/CP936-rev
+++ b/tools/test/iconv/ref/CP936-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP943 b/tools/test/iconv/ref/CP943
index 95bc393e4082..6db1bdde5f16 100644
--- a/tools/test/iconv/ref/CP943
+++ b/tools/test/iconv/ref/CP943
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP943-rev b/tools/test/iconv/ref/CP943-rev
index 888a7c298789..ba9918fb2c49 100644
--- a/tools/test/iconv/ref/CP943-rev
+++ b/tools/test/iconv/ref/CP943-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP949 b/tools/test/iconv/ref/CP949
index 3ce0bffd06ae..02af49f67431 100644
--- a/tools/test/iconv/ref/CP949
+++ b/tools/test/iconv/ref/CP949
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP949-rev b/tools/test/iconv/ref/CP949-rev
index 8def35fd3e36..c0608a781d30 100644
--- a/tools/test/iconv/ref/CP949-rev
+++ b/tools/test/iconv/ref/CP949-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP950 b/tools/test/iconv/ref/CP950
index 6ad866030e23..0f25fe04ddb0 100644
--- a/tools/test/iconv/ref/CP950
+++ b/tools/test/iconv/ref/CP950
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/CP950-rev b/tools/test/iconv/ref/CP950-rev
index eb9d674e70d5..c869fff18b07 100644
--- a/tools/test/iconv/ref/CP950-rev
+++ b/tools/test/iconv/ref/CP950-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/DEC-HANYU b/tools/test/iconv/ref/DEC-HANYU
index 6f077bc5fe3c..5def52a5ecae 100644
--- a/tools/test/iconv/ref/DEC-HANYU
+++ b/tools/test/iconv/ref/DEC-HANYU
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/DEC-HANYU-rev b/tools/test/iconv/ref/DEC-HANYU-rev
index 55e8ab89db1f..c0e23cc2e408 100644
--- a/tools/test/iconv/ref/DEC-HANYU-rev
+++ b/tools/test/iconv/ref/DEC-HANYU-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-CN b/tools/test/iconv/ref/EUC-CN
index acda0fe71996..c9f14c0fa14c 100644
--- a/tools/test/iconv/ref/EUC-CN
+++ b/tools/test/iconv/ref/EUC-CN
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-CN-rev b/tools/test/iconv/ref/EUC-CN-rev
index fbd76d71e6ca..b256c26f770b 100644
--- a/tools/test/iconv/ref/EUC-CN-rev
+++ b/tools/test/iconv/ref/EUC-CN-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-JIS-2004 b/tools/test/iconv/ref/EUC-JIS-2004
index 818cfe76c6ae..ac0880226782 100644
--- a/tools/test/iconv/ref/EUC-JIS-2004
+++ b/tools/test/iconv/ref/EUC-JIS-2004
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-JIS-2004-rev b/tools/test/iconv/ref/EUC-JIS-2004-rev
index 31ad7b6842a0..ca13e39667bb 100644
--- a/tools/test/iconv/ref/EUC-JIS-2004-rev
+++ b/tools/test/iconv/ref/EUC-JIS-2004-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-JP b/tools/test/iconv/ref/EUC-JP
index 1964a574f635..45d1b76c86bf 100644
--- a/tools/test/iconv/ref/EUC-JP
+++ b/tools/test/iconv/ref/EUC-JP
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-JP-rev b/tools/test/iconv/ref/EUC-JP-rev
index 6a459d01b5c3..d0ec07d20823 100644
--- a/tools/test/iconv/ref/EUC-JP-rev
+++ b/tools/test/iconv/ref/EUC-JP-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-KR b/tools/test/iconv/ref/EUC-KR
index 4bcfb5de5f36..f70a7409fe9e 100644
--- a/tools/test/iconv/ref/EUC-KR
+++ b/tools/test/iconv/ref/EUC-KR
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-KR-rev b/tools/test/iconv/ref/EUC-KR-rev
index d723e22fb425..f73289e4af91 100644
--- a/tools/test/iconv/ref/EUC-KR-rev
+++ b/tools/test/iconv/ref/EUC-KR-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-TW b/tools/test/iconv/ref/EUC-TW
index f763bba7d268..429de556d0ad 100644
--- a/tools/test/iconv/ref/EUC-TW
+++ b/tools/test/iconv/ref/EUC-TW
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/EUC-TW-rev b/tools/test/iconv/ref/EUC-TW-rev
index 5f41059b27d4..5f7eb9c56384 100644
--- a/tools/test/iconv/ref/EUC-TW-rev
+++ b/tools/test/iconv/ref/EUC-TW-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GB18030 b/tools/test/iconv/ref/GB18030
index a84793f2aed5..66dc913f8dd0 100644
--- a/tools/test/iconv/ref/GB18030
+++ b/tools/test/iconv/ref/GB18030
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GB18030-rev b/tools/test/iconv/ref/GB18030-rev
index 127c469cd91a..75612431535d 100644
--- a/tools/test/iconv/ref/GB18030-rev
+++ b/tools/test/iconv/ref/GB18030-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GB2312 b/tools/test/iconv/ref/GB2312
index acda0fe71996..c9f14c0fa14c 100644
--- a/tools/test/iconv/ref/GB2312
+++ b/tools/test/iconv/ref/GB2312
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GB2312-rev b/tools/test/iconv/ref/GB2312-rev
index fbd76d71e6ca..b256c26f770b 100644
--- a/tools/test/iconv/ref/GB2312-rev
+++ b/tools/test/iconv/ref/GB2312-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GBK b/tools/test/iconv/ref/GBK
index 6ecb254bb565..b7f6a13c960f 100644
--- a/tools/test/iconv/ref/GBK
+++ b/tools/test/iconv/ref/GBK
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GBK-rev b/tools/test/iconv/ref/GBK-rev
index 95841e350c23..662ac14e773c 100644
--- a/tools/test/iconv/ref/GBK-rev
+++ b/tools/test/iconv/ref/GBK-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GEORGIAN-ACADEMY b/tools/test/iconv/ref/GEORGIAN-ACADEMY
index f7b6ccd2f27a..28bdfab3d486 100644
--- a/tools/test/iconv/ref/GEORGIAN-ACADEMY
+++ b/tools/test/iconv/ref/GEORGIAN-ACADEMY
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GEORGIAN-ACADEMY-rev b/tools/test/iconv/ref/GEORGIAN-ACADEMY-rev
index 50d3e6d6e0c2..15a53fb35bc4 100644
--- a/tools/test/iconv/ref/GEORGIAN-ACADEMY-rev
+++ b/tools/test/iconv/ref/GEORGIAN-ACADEMY-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GEORGIAN-PS b/tools/test/iconv/ref/GEORGIAN-PS
index 79ccf40fe774..7da1b4c2920c 100644
--- a/tools/test/iconv/ref/GEORGIAN-PS
+++ b/tools/test/iconv/ref/GEORGIAN-PS
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/GEORGIAN-PS-rev b/tools/test/iconv/ref/GEORGIAN-PS-rev
index 9751937f7fa5..a5a6780e2553 100644
--- a/tools/test/iconv/ref/GEORGIAN-PS-rev
+++ b/tools/test/iconv/ref/GEORGIAN-PS-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/HP-ROMAN8 b/tools/test/iconv/ref/HP-ROMAN8
index afd105294f17..6ba10479e305 100644
--- a/tools/test/iconv/ref/HP-ROMAN8
+++ b/tools/test/iconv/ref/HP-ROMAN8
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/HP-ROMAN8-rev b/tools/test/iconv/ref/HP-ROMAN8-rev
index d80abadc9706..7a1b7d5f99ac 100644
--- a/tools/test/iconv/ref/HP-ROMAN8-rev
+++ b/tools/test/iconv/ref/HP-ROMAN8-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/HZ b/tools/test/iconv/ref/HZ
index 48bc0e47ecb1..41f47bc1d911 100644
--- a/tools/test/iconv/ref/HZ
+++ b/tools/test/iconv/ref/HZ
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/HZ-rev b/tools/test/iconv/ref/HZ-rev
index a0d2e59f7821..f691e8a12760 100644
--- a/tools/test/iconv/ref/HZ-rev
+++ b/tools/test/iconv/ref/HZ-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-CN b/tools/test/iconv/ref/ISO-2022-CN
index 74d743efe3a7..ded2adbc83c3 100644
--- a/tools/test/iconv/ref/ISO-2022-CN
+++ b/tools/test/iconv/ref/ISO-2022-CN
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-CN-EXT b/tools/test/iconv/ref/ISO-2022-CN-EXT
index 74d743efe3a7..ded2adbc83c3 100644
--- a/tools/test/iconv/ref/ISO-2022-CN-EXT
+++ b/tools/test/iconv/ref/ISO-2022-CN-EXT
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-CN-EXT-rev b/tools/test/iconv/ref/ISO-2022-CN-EXT-rev
index 75c7e9c786bd..221b4fc2045e 100644
--- a/tools/test/iconv/ref/ISO-2022-CN-EXT-rev
+++ b/tools/test/iconv/ref/ISO-2022-CN-EXT-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-CN-rev b/tools/test/iconv/ref/ISO-2022-CN-rev
index e9b740e6d05c..eb7220e3d211 100644
--- a/tools/test/iconv/ref/ISO-2022-CN-rev
+++ b/tools/test/iconv/ref/ISO-2022-CN-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP b/tools/test/iconv/ref/ISO-2022-JP
index 03097d6e40e6..7f659bdceb61 100644
--- a/tools/test/iconv/ref/ISO-2022-JP
+++ b/tools/test/iconv/ref/ISO-2022-JP
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP-1 b/tools/test/iconv/ref/ISO-2022-JP-1
index 03097d6e40e6..7f659bdceb61 100644
--- a/tools/test/iconv/ref/ISO-2022-JP-1
+++ b/tools/test/iconv/ref/ISO-2022-JP-1
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP-1-rev b/tools/test/iconv/ref/ISO-2022-JP-1-rev
index 94ce0cf08aa1..e22640a1ec5f 100644
--- a/tools/test/iconv/ref/ISO-2022-JP-1-rev
+++ b/tools/test/iconv/ref/ISO-2022-JP-1-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP-2 b/tools/test/iconv/ref/ISO-2022-JP-2
index 03097d6e40e6..7f659bdceb61 100644
--- a/tools/test/iconv/ref/ISO-2022-JP-2
+++ b/tools/test/iconv/ref/ISO-2022-JP-2
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP-2-rev b/tools/test/iconv/ref/ISO-2022-JP-2-rev
index b2d6ce7d61e4..d56f3803da0f 100644
--- a/tools/test/iconv/ref/ISO-2022-JP-2-rev
+++ b/tools/test/iconv/ref/ISO-2022-JP-2-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP-2004 b/tools/test/iconv/ref/ISO-2022-JP-2004
index 03097d6e40e6..7f659bdceb61 100644
--- a/tools/test/iconv/ref/ISO-2022-JP-2004
+++ b/tools/test/iconv/ref/ISO-2022-JP-2004
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP-2004-rev b/tools/test/iconv/ref/ISO-2022-JP-2004-rev
index 99d35271277e..f3039df18cad 100644
--- a/tools/test/iconv/ref/ISO-2022-JP-2004-rev
+++ b/tools/test/iconv/ref/ISO-2022-JP-2004-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-JP-rev b/tools/test/iconv/ref/ISO-2022-JP-rev
index b536a5a78be6..02b4d0a6bc21 100644
--- a/tools/test/iconv/ref/ISO-2022-JP-rev
+++ b/tools/test/iconv/ref/ISO-2022-JP-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-KR b/tools/test/iconv/ref/ISO-2022-KR
index 74d743efe3a7..ded2adbc83c3 100644
--- a/tools/test/iconv/ref/ISO-2022-KR
+++ b/tools/test/iconv/ref/ISO-2022-KR
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-2022-KR-rev b/tools/test/iconv/ref/ISO-2022-KR-rev
index b56886d0737a..a761273b7d76 100644
--- a/tools/test/iconv/ref/ISO-2022-KR-rev
+++ b/tools/test/iconv/ref/ISO-2022-KR-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-IR-14 b/tools/test/iconv/ref/ISO-IR-14
index c8c63f6d8a01..8d13a9783d2c 100644
--- a/tools/test/iconv/ref/ISO-IR-14
+++ b/tools/test/iconv/ref/ISO-IR-14
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-IR-14-rev b/tools/test/iconv/ref/ISO-IR-14-rev
index 03bdf662817e..58172f944369 100644
--- a/tools/test/iconv/ref/ISO-IR-14-rev
+++ b/tools/test/iconv/ref/ISO-IR-14-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-IR-165 b/tools/test/iconv/ref/ISO-IR-165
index fcbd709b2caf..a22473f638cd 100644
--- a/tools/test/iconv/ref/ISO-IR-165
+++ b/tools/test/iconv/ref/ISO-IR-165
@@ -1,4 +1,3 @@
-$FreeBSD$
0x2121 = 0x3000
0x2123 = 0xFF01
0x2124 = 0x3041
diff --git a/tools/test/iconv/ref/ISO-IR-165-rev b/tools/test/iconv/ref/ISO-IR-165-rev
index f78699062f8b..8b6ccdb9b657 100644
--- a/tools/test/iconv/ref/ISO-IR-165-rev
+++ b/tools/test/iconv/ref/ISO-IR-165-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0021 = 0x212A
0x0022 = 0x222A
0x0023 = 0x232A
diff --git a/tools/test/iconv/ref/ISO-IR-57 b/tools/test/iconv/ref/ISO-IR-57
index 746af64b25ef..a4f1711ce883 100644
--- a/tools/test/iconv/ref/ISO-IR-57
+++ b/tools/test/iconv/ref/ISO-IR-57
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO-IR-57-rev b/tools/test/iconv/ref/ISO-IR-57-rev
index 8b34dfcfb7e6..3564400f0189 100644
--- a/tools/test/iconv/ref/ISO-IR-57-rev
+++ b/tools/test/iconv/ref/ISO-IR-57-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-1 b/tools/test/iconv/ref/ISO8859-1
index 6691b5b53b28..e8ee2263280a 100644
--- a/tools/test/iconv/ref/ISO8859-1
+++ b/tools/test/iconv/ref/ISO8859-1
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-1-rev b/tools/test/iconv/ref/ISO8859-1-rev
index 9186725c4bd0..d568cf406a36 100644
--- a/tools/test/iconv/ref/ISO8859-1-rev
+++ b/tools/test/iconv/ref/ISO8859-1-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-10 b/tools/test/iconv/ref/ISO8859-10
index aad86f4d918e..e3f801d57c0f 100644
--- a/tools/test/iconv/ref/ISO8859-10
+++ b/tools/test/iconv/ref/ISO8859-10
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-10-rev b/tools/test/iconv/ref/ISO8859-10-rev
index 370ef3e2548f..f4665e47fb0b 100644
--- a/tools/test/iconv/ref/ISO8859-10-rev
+++ b/tools/test/iconv/ref/ISO8859-10-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-11 b/tools/test/iconv/ref/ISO8859-11
index 8d396e98423b..a85eac9eeaaa 100644
--- a/tools/test/iconv/ref/ISO8859-11
+++ b/tools/test/iconv/ref/ISO8859-11
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-11-rev b/tools/test/iconv/ref/ISO8859-11-rev
index bf0568e75c66..2c6729c6e9c3 100644
--- a/tools/test/iconv/ref/ISO8859-11-rev
+++ b/tools/test/iconv/ref/ISO8859-11-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-13 b/tools/test/iconv/ref/ISO8859-13
index 3dcaf6901edb..03afcad2acea 100644
--- a/tools/test/iconv/ref/ISO8859-13
+++ b/tools/test/iconv/ref/ISO8859-13
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-13-rev b/tools/test/iconv/ref/ISO8859-13-rev
index 9f8f7f29bc23..64d19029e567 100644
--- a/tools/test/iconv/ref/ISO8859-13-rev
+++ b/tools/test/iconv/ref/ISO8859-13-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-14 b/tools/test/iconv/ref/ISO8859-14
index 004252b17b3d..cb8c353a1221 100644
--- a/tools/test/iconv/ref/ISO8859-14
+++ b/tools/test/iconv/ref/ISO8859-14
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-14-rev b/tools/test/iconv/ref/ISO8859-14-rev
index 896677b36e9c..059bee72aaba 100644
--- a/tools/test/iconv/ref/ISO8859-14-rev
+++ b/tools/test/iconv/ref/ISO8859-14-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-15 b/tools/test/iconv/ref/ISO8859-15
index be6b53b19fe1..3549db9e5326 100644
--- a/tools/test/iconv/ref/ISO8859-15
+++ b/tools/test/iconv/ref/ISO8859-15
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-15-rev b/tools/test/iconv/ref/ISO8859-15-rev
index 5353d41bc5fb..6f3b5f14cabd 100644
--- a/tools/test/iconv/ref/ISO8859-15-rev
+++ b/tools/test/iconv/ref/ISO8859-15-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-16 b/tools/test/iconv/ref/ISO8859-16
index d9af580afedb..7204e3718845 100644
--- a/tools/test/iconv/ref/ISO8859-16
+++ b/tools/test/iconv/ref/ISO8859-16
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-16-rev b/tools/test/iconv/ref/ISO8859-16-rev
index e20fac090988..c266d09638e1 100644
--- a/tools/test/iconv/ref/ISO8859-16-rev
+++ b/tools/test/iconv/ref/ISO8859-16-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-2 b/tools/test/iconv/ref/ISO8859-2
index 0f7db231acd5..56e85f2aa7f6 100644
--- a/tools/test/iconv/ref/ISO8859-2
+++ b/tools/test/iconv/ref/ISO8859-2
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-2-rev b/tools/test/iconv/ref/ISO8859-2-rev
index db10375f2e90..54db89e41dae 100644
--- a/tools/test/iconv/ref/ISO8859-2-rev
+++ b/tools/test/iconv/ref/ISO8859-2-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-3 b/tools/test/iconv/ref/ISO8859-3
index 91ba5f24946a..d04d0865f0cc 100644
--- a/tools/test/iconv/ref/ISO8859-3
+++ b/tools/test/iconv/ref/ISO8859-3
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-3-rev b/tools/test/iconv/ref/ISO8859-3-rev
index 67cbffbfe92a..4ff1ee88b1ea 100644
--- a/tools/test/iconv/ref/ISO8859-3-rev
+++ b/tools/test/iconv/ref/ISO8859-3-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-4 b/tools/test/iconv/ref/ISO8859-4
index 8a4eb2ad476d..9dbd77c9428e 100644
--- a/tools/test/iconv/ref/ISO8859-4
+++ b/tools/test/iconv/ref/ISO8859-4
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-4-rev b/tools/test/iconv/ref/ISO8859-4-rev
index b7685b8247b4..4d39f39f877e 100644
--- a/tools/test/iconv/ref/ISO8859-4-rev
+++ b/tools/test/iconv/ref/ISO8859-4-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-5 b/tools/test/iconv/ref/ISO8859-5
index 4612c3020a9c..61d0818829ca 100644
--- a/tools/test/iconv/ref/ISO8859-5
+++ b/tools/test/iconv/ref/ISO8859-5
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-5-rev b/tools/test/iconv/ref/ISO8859-5-rev
index b0910277b452..ce6103bcdd97 100644
--- a/tools/test/iconv/ref/ISO8859-5-rev
+++ b/tools/test/iconv/ref/ISO8859-5-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-6 b/tools/test/iconv/ref/ISO8859-6
index 6a7094f195ca..a05e460d3656 100644
--- a/tools/test/iconv/ref/ISO8859-6
+++ b/tools/test/iconv/ref/ISO8859-6
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-6-rev b/tools/test/iconv/ref/ISO8859-6-rev
index 81929d9fa41e..025b95bdc570 100644
--- a/tools/test/iconv/ref/ISO8859-6-rev
+++ b/tools/test/iconv/ref/ISO8859-6-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-7 b/tools/test/iconv/ref/ISO8859-7
index d9bc089ca277..cd37f793b89c 100644
--- a/tools/test/iconv/ref/ISO8859-7
+++ b/tools/test/iconv/ref/ISO8859-7
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-7-rev b/tools/test/iconv/ref/ISO8859-7-rev
index f9764d24fa36..03640a621d84 100644
--- a/tools/test/iconv/ref/ISO8859-7-rev
+++ b/tools/test/iconv/ref/ISO8859-7-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-8 b/tools/test/iconv/ref/ISO8859-8
index 15c71c9ff346..61676a77d8cb 100644
--- a/tools/test/iconv/ref/ISO8859-8
+++ b/tools/test/iconv/ref/ISO8859-8
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-8-rev b/tools/test/iconv/ref/ISO8859-8-rev
index 40558b892cfd..039fa697649b 100644
--- a/tools/test/iconv/ref/ISO8859-8-rev
+++ b/tools/test/iconv/ref/ISO8859-8-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-9 b/tools/test/iconv/ref/ISO8859-9
index b987f09e01f4..6b194d6be76b 100644
--- a/tools/test/iconv/ref/ISO8859-9
+++ b/tools/test/iconv/ref/ISO8859-9
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/ISO8859-9-rev b/tools/test/iconv/ref/ISO8859-9-rev
index 745c652829be..4233cac27371 100644
--- a/tools/test/iconv/ref/ISO8859-9-rev
+++ b/tools/test/iconv/ref/ISO8859-9-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/JAVA b/tools/test/iconv/ref/JAVA
index 487404d4c6ec..d6d293af62a1 100644
--- a/tools/test/iconv/ref/JAVA
+++ b/tools/test/iconv/ref/JAVA
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/JAVA-rev b/tools/test/iconv/ref/JAVA-rev
index a662b865d087..b6ed8fce32cd 100644
--- a/tools/test/iconv/ref/JAVA-rev
+++ b/tools/test/iconv/ref/JAVA-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/JIS_X0201 b/tools/test/iconv/ref/JIS_X0201
index a305b3c7fc4f..054a01d90de4 100644
--- a/tools/test/iconv/ref/JIS_X0201
+++ b/tools/test/iconv/ref/JIS_X0201
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/JIS_X0201-rev b/tools/test/iconv/ref/JIS_X0201-rev
index fbf1566e8a15..aa62e1fca178 100644
--- a/tools/test/iconv/ref/JIS_X0201-rev
+++ b/tools/test/iconv/ref/JIS_X0201-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/JIS_X0208-1990 b/tools/test/iconv/ref/JIS_X0208-1990
index b2bdce5af479..e37aca486d24 100644
--- a/tools/test/iconv/ref/JIS_X0208-1990
+++ b/tools/test/iconv/ref/JIS_X0208-1990
@@ -1,4 +1,3 @@
-$FreeBSD$
0x2121 = 0x3000
0x2122 = 0x25C6
0x2124 = 0x3041
diff --git a/tools/test/iconv/ref/JIS_X0208-1990-rev b/tools/test/iconv/ref/JIS_X0208-1990-rev
index 891a896f7d11..c4699642d0e2 100644
--- a/tools/test/iconv/ref/JIS_X0208-1990-rev
+++ b/tools/test/iconv/ref/JIS_X0208-1990-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00A2 = 0x7121
0x00A3 = 0x7221
0x00A7 = 0x7821
diff --git a/tools/test/iconv/ref/JOHAB b/tools/test/iconv/ref/JOHAB
index c795e608f0b4..19117d225bdc 100644
--- a/tools/test/iconv/ref/JOHAB
+++ b/tools/test/iconv/ref/JOHAB
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/JOHAB-rev b/tools/test/iconv/ref/JOHAB-rev
index 95e2972bd507..0e7b3f0c30fd 100644
--- a/tools/test/iconv/ref/JOHAB-rev
+++ b/tools/test/iconv/ref/JOHAB-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-R b/tools/test/iconv/ref/KOI8-R
index b9753b6b2088..f99b32a2055c 100644
--- a/tools/test/iconv/ref/KOI8-R
+++ b/tools/test/iconv/ref/KOI8-R
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-R-rev b/tools/test/iconv/ref/KOI8-R-rev
index 5e85165350de..d5a4779c7a72 100644
--- a/tools/test/iconv/ref/KOI8-R-rev
+++ b/tools/test/iconv/ref/KOI8-R-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-RU b/tools/test/iconv/ref/KOI8-RU
index 96d3948904e4..84e683a8f711 100644
--- a/tools/test/iconv/ref/KOI8-RU
+++ b/tools/test/iconv/ref/KOI8-RU
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-RU-rev b/tools/test/iconv/ref/KOI8-RU-rev
index 226413b32d59..4bcac70fc8bf 100644
--- a/tools/test/iconv/ref/KOI8-RU-rev
+++ b/tools/test/iconv/ref/KOI8-RU-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-T b/tools/test/iconv/ref/KOI8-T
index ddec36cb8cf4..958d324a0a47 100644
--- a/tools/test/iconv/ref/KOI8-T
+++ b/tools/test/iconv/ref/KOI8-T
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-T-rev b/tools/test/iconv/ref/KOI8-T-rev
index 5b2b7fdc8928..b2792cd75b5d 100644
--- a/tools/test/iconv/ref/KOI8-T-rev
+++ b/tools/test/iconv/ref/KOI8-T-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-U b/tools/test/iconv/ref/KOI8-U
index 505139966ff8..704ed9dc919e 100644
--- a/tools/test/iconv/ref/KOI8-U
+++ b/tools/test/iconv/ref/KOI8-U
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KOI8-U-rev b/tools/test/iconv/ref/KOI8-U-rev
index f434495df1a5..db26ef366fd9 100644
--- a/tools/test/iconv/ref/KOI8-U-rev
+++ b/tools/test/iconv/ref/KOI8-U-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KZ-1048 b/tools/test/iconv/ref/KZ-1048
index 40e932592054..b77c15e5b946 100644
--- a/tools/test/iconv/ref/KZ-1048
+++ b/tools/test/iconv/ref/KZ-1048
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/KZ-1048-rev b/tools/test/iconv/ref/KZ-1048-rev
index 0c3d77425489..5b65cfeb5ab0 100644
--- a/tools/test/iconv/ref/KZ-1048-rev
+++ b/tools/test/iconv/ref/KZ-1048-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/MACARABIC b/tools/test/iconv/ref/MACARABIC
index aeb23281d419..8798b80ea291 100644
--- a/tools/test/iconv/ref/MACARABIC
+++ b/tools/test/iconv/ref/MACARABIC
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACARABIC-rev b/tools/test/iconv/ref/MACARABIC-rev
index c30d8b68ec39..83eb43c41aae 100644
--- a/tools/test/iconv/ref/MACARABIC-rev
+++ b/tools/test/iconv/ref/MACARABIC-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACCENTRALEUROPE b/tools/test/iconv/ref/MACCENTRALEUROPE
index f9cc030d968b..1e8dd0a63df9 100644
--- a/tools/test/iconv/ref/MACCENTRALEUROPE
+++ b/tools/test/iconv/ref/MACCENTRALEUROPE
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACCENTRALEUROPE-rev b/tools/test/iconv/ref/MACCENTRALEUROPE-rev
index 4f1500788a05..7485b8ccfd23 100644
--- a/tools/test/iconv/ref/MACCENTRALEUROPE-rev
+++ b/tools/test/iconv/ref/MACCENTRALEUROPE-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACCROATIAN b/tools/test/iconv/ref/MACCROATIAN
index 7f217df1bc9c..56e12e702f73 100644
--- a/tools/test/iconv/ref/MACCROATIAN
+++ b/tools/test/iconv/ref/MACCROATIAN
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACCROATIAN-rev b/tools/test/iconv/ref/MACCROATIAN-rev
index b5709ec307ae..05592351eced 100644
--- a/tools/test/iconv/ref/MACCROATIAN-rev
+++ b/tools/test/iconv/ref/MACCROATIAN-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACCYRILLIC b/tools/test/iconv/ref/MACCYRILLIC
index e45f6bca97c2..4cc5bcd30814 100644
--- a/tools/test/iconv/ref/MACCYRILLIC
+++ b/tools/test/iconv/ref/MACCYRILLIC
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACCYRILLIC-rev b/tools/test/iconv/ref/MACCYRILLIC-rev
index 5b89eb348fdc..c0dc224278e1 100644
--- a/tools/test/iconv/ref/MACCYRILLIC-rev
+++ b/tools/test/iconv/ref/MACCYRILLIC-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACGREEK b/tools/test/iconv/ref/MACGREEK
index 0298654a406c..9a3817e39422 100644
--- a/tools/test/iconv/ref/MACGREEK
+++ b/tools/test/iconv/ref/MACGREEK
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACGREEK-rev b/tools/test/iconv/ref/MACGREEK-rev
index 9f74db7543a4..1acfa7bcadcd 100644
--- a/tools/test/iconv/ref/MACGREEK-rev
+++ b/tools/test/iconv/ref/MACGREEK-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACHEBREW b/tools/test/iconv/ref/MACHEBREW
index 7a4c980f638b..df6a8b93a899 100644
--- a/tools/test/iconv/ref/MACHEBREW
+++ b/tools/test/iconv/ref/MACHEBREW
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACHEBREW-rev b/tools/test/iconv/ref/MACHEBREW-rev
index 79cedb5c8135..c7396c339be8 100644
--- a/tools/test/iconv/ref/MACHEBREW-rev
+++ b/tools/test/iconv/ref/MACHEBREW-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACICELAND b/tools/test/iconv/ref/MACICELAND
index 5f2c943afee7..656a84a840b3 100644
--- a/tools/test/iconv/ref/MACICELAND
+++ b/tools/test/iconv/ref/MACICELAND
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACICELAND-rev b/tools/test/iconv/ref/MACICELAND-rev
index af342e7a5347..b5139c5173fd 100644
--- a/tools/test/iconv/ref/MACICELAND-rev
+++ b/tools/test/iconv/ref/MACICELAND-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACROMAN b/tools/test/iconv/ref/MACROMAN
index 740ed4598774..408da3a36f99 100644
--- a/tools/test/iconv/ref/MACROMAN
+++ b/tools/test/iconv/ref/MACROMAN
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACROMAN-rev b/tools/test/iconv/ref/MACROMAN-rev
index 86614676bf30..675fa569dad0 100644
--- a/tools/test/iconv/ref/MACROMAN-rev
+++ b/tools/test/iconv/ref/MACROMAN-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACROMANIA b/tools/test/iconv/ref/MACROMANIA
index 9bae2905c61c..d8d0ecd6547f 100644
--- a/tools/test/iconv/ref/MACROMANIA
+++ b/tools/test/iconv/ref/MACROMANIA
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACROMANIA-rev b/tools/test/iconv/ref/MACROMANIA-rev
index ade273e3d9e2..8da939e0f4b8 100644
--- a/tools/test/iconv/ref/MACROMANIA-rev
+++ b/tools/test/iconv/ref/MACROMANIA-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACTHAI b/tools/test/iconv/ref/MACTHAI
index d4813d1712a5..77ef36fd0674 100644
--- a/tools/test/iconv/ref/MACTHAI
+++ b/tools/test/iconv/ref/MACTHAI
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACTHAI-rev b/tools/test/iconv/ref/MACTHAI-rev
index 3234d6e4a93a..e184bc8a048a 100644
--- a/tools/test/iconv/ref/MACTHAI-rev
+++ b/tools/test/iconv/ref/MACTHAI-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACTURKISH b/tools/test/iconv/ref/MACTURKISH
index 78bda1e65589..4a0b7b6588ce 100644
--- a/tools/test/iconv/ref/MACTURKISH
+++ b/tools/test/iconv/ref/MACTURKISH
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACTURKISH-rev b/tools/test/iconv/ref/MACTURKISH-rev
index c4593ac72c0e..9fca844c336a 100644
--- a/tools/test/iconv/ref/MACTURKISH-rev
+++ b/tools/test/iconv/ref/MACTURKISH-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MACUKRAINE b/tools/test/iconv/ref/MACUKRAINE
index ff09d1a2af28..19c04bec8c9a 100644
--- a/tools/test/iconv/ref/MACUKRAINE
+++ b/tools/test/iconv/ref/MACUKRAINE
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/MACUKRAINE-rev b/tools/test/iconv/ref/MACUKRAINE-rev
index 8839fa24016f..f1a5d3187662 100644
--- a/tools/test/iconv/ref/MACUKRAINE-rev
+++ b/tools/test/iconv/ref/MACUKRAINE-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/MULELAO-1 b/tools/test/iconv/ref/MULELAO-1
index 205b7c1ad257..7f4b16e53e69 100644
--- a/tools/test/iconv/ref/MULELAO-1
+++ b/tools/test/iconv/ref/MULELAO-1
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/MULELAO-1-rev b/tools/test/iconv/ref/MULELAO-1-rev
index 68e4ffb26c39..6b1e1d186f78 100644
--- a/tools/test/iconv/ref/MULELAO-1-rev
+++ b/tools/test/iconv/ref/MULELAO-1-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/NEXTSTEP b/tools/test/iconv/ref/NEXTSTEP
index 464335d3e613..ef29d09660b9 100644
--- a/tools/test/iconv/ref/NEXTSTEP
+++ b/tools/test/iconv/ref/NEXTSTEP
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/NEXTSTEP-rev b/tools/test/iconv/ref/NEXTSTEP-rev
index 2a8abddbc8b9..90eefabe5383 100644
--- a/tools/test/iconv/ref/NEXTSTEP-rev
+++ b/tools/test/iconv/ref/NEXTSTEP-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/PT154 b/tools/test/iconv/ref/PT154
index bd3ad8b6b105..72d74edb14c5 100644
--- a/tools/test/iconv/ref/PT154
+++ b/tools/test/iconv/ref/PT154
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/PT154-rev b/tools/test/iconv/ref/PT154-rev
index e2ddbf6c30ac..5b369fb3483f 100644
--- a/tools/test/iconv/ref/PT154-rev
+++ b/tools/test/iconv/ref/PT154-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/RISCOS-LATIN1 b/tools/test/iconv/ref/RISCOS-LATIN1
index ef5fc3f0f6e3..44dd3b2016dc 100644
--- a/tools/test/iconv/ref/RISCOS-LATIN1
+++ b/tools/test/iconv/ref/RISCOS-LATIN1
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/RISCOS-LATIN1-rev b/tools/test/iconv/ref/RISCOS-LATIN1-rev
index 09174a3b2d8b..f3c71631c9b0 100644
--- a/tools/test/iconv/ref/RISCOS-LATIN1-rev
+++ b/tools/test/iconv/ref/RISCOS-LATIN1-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/SHIFT_JIS b/tools/test/iconv/ref/SHIFT_JIS
index 71cade1d30e8..2dcc80facac5 100644
--- a/tools/test/iconv/ref/SHIFT_JIS
+++ b/tools/test/iconv/ref/SHIFT_JIS
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/SHIFT_JIS-rev b/tools/test/iconv/ref/SHIFT_JIS-rev
index f40678bda52d..644358644740 100644
--- a/tools/test/iconv/ref/SHIFT_JIS-rev
+++ b/tools/test/iconv/ref/SHIFT_JIS-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/TCVN5712-1 b/tools/test/iconv/ref/TCVN5712-1
index 644332d33364..4d248667ae5b 100644
--- a/tools/test/iconv/ref/TCVN5712-1
+++ b/tools/test/iconv/ref/TCVN5712-1
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0000
0x0002 = 0x1EE4
diff --git a/tools/test/iconv/ref/TCVN5712-1-rev b/tools/test/iconv/ref/TCVN5712-1-rev
index 76ea067330c6..c1b4433d6889 100644
--- a/tools/test/iconv/ref/TCVN5712-1-rev
+++ b/tools/test/iconv/ref/TCVN5712-1-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0003 = 0x0003
0x0007 = 0x0007
diff --git a/tools/test/iconv/ref/TDS565 b/tools/test/iconv/ref/TDS565
index 862437ad5a64..c9083b5a69a8 100644
--- a/tools/test/iconv/ref/TDS565
+++ b/tools/test/iconv/ref/TDS565
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/TDS565-rev b/tools/test/iconv/ref/TDS565-rev
index 95d34d36c475..d8ca976674fb 100644
--- a/tools/test/iconv/ref/TDS565-rev
+++ b/tools/test/iconv/ref/TDS565-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x0002
diff --git a/tools/test/iconv/ref/UTF-16BE b/tools/test/iconv/ref/UTF-16BE
index 15154fcea265..fa3accbaea5f 100644
--- a/tools/test/iconv/ref/UTF-16BE
+++ b/tools/test/iconv/ref/UTF-16BE
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0100 = 0x00000001
0x0101 = 0x00000101
0x0102 = 0x00000201
diff --git a/tools/test/iconv/ref/UTF-16BE-rev b/tools/test/iconv/ref/UTF-16BE-rev
index 47fa7388ef59..6cfc8ac7b27c 100644
--- a/tools/test/iconv/ref/UTF-16BE-rev
+++ b/tools/test/iconv/ref/UTF-16BE-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x0000
0x01 = 0x0100
0x02 = 0x0200
diff --git a/tools/test/iconv/ref/UTF-16LE b/tools/test/iconv/ref/UTF-16LE
index 382ac2d2e315..970104f233d8 100644
--- a/tools/test/iconv/ref/UTF-16LE
+++ b/tools/test/iconv/ref/UTF-16LE
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0100 = 0x00000100
0x0101 = 0x00000101
0x0102 = 0x00000102
diff --git a/tools/test/iconv/ref/UTF-16LE-rev b/tools/test/iconv/ref/UTF-16LE-rev
index 734e13713525..641e3f39e1da 100644
--- a/tools/test/iconv/ref/UTF-16LE-rev
+++ b/tools/test/iconv/ref/UTF-16LE-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x0000
0x01 = 0x0001
0x02 = 0x0002
diff --git a/tools/test/iconv/ref/UTF-32BE b/tools/test/iconv/ref/UTF-32BE
index 5873eb0512d2..e69de29bb2d1 100644
--- a/tools/test/iconv/ref/UTF-32BE
+++ b/tools/test/iconv/ref/UTF-32BE
@@ -1 +0,0 @@
-$FreeBSD$
diff --git a/tools/test/iconv/ref/UTF-32BE-rev b/tools/test/iconv/ref/UTF-32BE-rev
index dee81c225681..64a15179c34b 100644
--- a/tools/test/iconv/ref/UTF-32BE-rev
+++ b/tools/test/iconv/ref/UTF-32BE-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x01000000
0x02 = 0x02000000
diff --git a/tools/test/iconv/ref/UTF-32LE b/tools/test/iconv/ref/UTF-32LE
index 5873eb0512d2..e69de29bb2d1 100644
--- a/tools/test/iconv/ref/UTF-32LE
+++ b/tools/test/iconv/ref/UTF-32LE
@@ -1 +0,0 @@
-$FreeBSD$
diff --git a/tools/test/iconv/ref/UTF-32LE-rev b/tools/test/iconv/ref/UTF-32LE-rev
index 8796936dab6e..3c081e062888 100644
--- a/tools/test/iconv/ref/UTF-32LE-rev
+++ b/tools/test/iconv/ref/UTF-32LE-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/UTF-7 b/tools/test/iconv/ref/UTF-7
index 8fd8f892e04c..f662b182f0a0 100644
--- a/tools/test/iconv/ref/UTF-7
+++ b/tools/test/iconv/ref/UTF-7
@@ -1,4 +1,3 @@
-$FreeBSD$
0x09 = 0x00000009
0x0A = 0x0000000A
0x0D = 0x0000000D
diff --git a/tools/test/iconv/ref/UTF-7-rev b/tools/test/iconv/ref/UTF-7-rev
index 06862e9b66a6..4024cc1238ed 100644
--- a/tools/test/iconv/ref/UTF-7-rev
+++ b/tools/test/iconv/ref/UTF-7-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x41412B
0x01 = 0x41412B
0x02 = 0x41412B
diff --git a/tools/test/iconv/ref/UTF-8 b/tools/test/iconv/ref/UTF-8
index 6c6614995eed..67c884221c23 100644
--- a/tools/test/iconv/ref/UTF-8
+++ b/tools/test/iconv/ref/UTF-8
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00000000
0x01 = 0x00000001
0x02 = 0x00000002
diff --git a/tools/test/iconv/ref/UTF-8-rev b/tools/test/iconv/ref/UTF-8-rev
index 3358fcb8c400..5186ffbe6cbc 100644
--- a/tools/test/iconv/ref/UTF-8-rev
+++ b/tools/test/iconv/ref/UTF-8-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
diff --git a/tools/test/iconv/ref/VISCII b/tools/test/iconv/ref/VISCII
index 6b7e0097546d..53ff9380ff90 100644
--- a/tools/test/iconv/ref/VISCII
+++ b/tools/test/iconv/ref/VISCII
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0002 = 0x1EB2
diff --git a/tools/test/iconv/ref/VISCII-rev b/tools/test/iconv/ref/VISCII-rev
index a061ee82b79f..9fc24e8f3cff 100644
--- a/tools/test/iconv/ref/VISCII-rev
+++ b/tools/test/iconv/ref/VISCII-rev
@@ -1,4 +1,3 @@
-$FreeBSD$
0x0000 = 0x0000
0x0001 = 0x0001
0x0003 = 0x0003
diff --git a/tools/test/iconv/refgen/Makefile b/tools/test/iconv/refgen/Makefile
index 6ac215101de3..6052bd3604f8 100644
--- a/tools/test/iconv/refgen/Makefile
+++ b/tools/test/iconv/refgen/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../tablegen
PROG= refgen
diff --git a/tools/test/iconv/tablegen/Makefile b/tools/test/iconv/tablegen/Makefile
index cdac44f5b585..66362a70c12e 100644
--- a/tools/test/iconv/tablegen/Makefile
+++ b/tools/test/iconv/tablegen/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tablegen
MAN=
diff --git a/tools/test/iconv/tablegen/cmp.sh b/tools/test/iconv/tablegen/cmp.sh
index 349c08f6e038..dca7284060d4 100755
--- a/tools/test/iconv/tablegen/cmp.sh
+++ b/tools/test/iconv/tablegen/cmp.sh
@@ -1,4 +1,3 @@
#!/bin/sh
-# $FreeBSD$
diff -I\$\FreeBSD $1 $2 | grep '^-' >/dev/null && printf "\tDIFFER: $1 $2\n" && exit 0 || exit 0
diff --git a/tools/test/iconv/tablegen/tablegen.c b/tools/test/iconv/tablegen/tablegen.c
index 12d44ae753ff..ecc1c7fdb44d 100644
--- a/tools/test/iconv/tablegen/tablegen.c
+++ b/tools/test/iconv/tablegen/tablegen.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/endian.h>
#include <sys/types.h>
@@ -256,7 +254,6 @@ main (int argc, char *argv[])
if (dflag && iconvctl(cd, ICONV_SET_FALLBACKS, &fbs) != 0)
err(1, NULL);
if (cflag) {
- printf("# $FreeBSD$\n\n");
printf("TYPE\t\tROWCOL\n");
printf("NAME\t\tUCS/%s\n", argv[0]);
printf("%s", citrus_common);
@@ -268,7 +265,6 @@ main (int argc, char *argv[])
if (dflag && (iconvctl(cd, ICONV_SET_FALLBACKS, &fbs) != 0))
err(1, NULL);
if (cflag) {
- printf("# $FreeBSD$\n\n");
printf("TYPE\t\tROWCOL\n");
printf("NAME\t\t%s/UCS\n", argv[0]);
printf("%s", citrus_common);
diff --git a/tools/test/malloc/Makefile b/tools/test/malloc/Makefile
index ac3fdd89486b..8944bf2da79a 100644
--- a/tools/test/malloc/Makefile
+++ b/tools/test/malloc/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
PROG= malloc
SRCS= main.c
.PATH: ${.CURDIR}/../../../lib/libc/stdlib
diff --git a/tools/test/malloc/main.c b/tools/test/malloc/main.c
index 5fef9a92f4da..7c5bf14924de 100644
--- a/tools/test/malloc/main.c
+++ b/tools/test/malloc/main.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/tools/test/net/Makefile b/tools/test/net/Makefile
index 4fe5fb155cd1..b07506d9838b 100644
--- a/tools/test/net/Makefile
+++ b/tools/test/net/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROGS= listen connect
MAN=
diff --git a/tools/test/net/connect.c b/tools/test/net/connect.c
index a1245f1e8b3a..5c187c164fbd 100644
--- a/tools/test/net/connect.c
+++ b/tools/test/net/connect.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <err.h>
diff --git a/tools/test/net/listen.c b/tools/test/net/listen.c
index 2c09bb699b76..f14fffe726f8 100644
--- a/tools/test/net/listen.c
+++ b/tools/test/net/listen.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <err.h>
diff --git a/tools/test/netfibs/Makefile b/tools/test/netfibs/Makefile
index 7262a21356c8..5e870a0d19d2 100644
--- a/tools/test/netfibs/Makefile
+++ b/tools/test/netfibs/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= reflect
MAN=
diff --git a/tools/test/netfibs/README b/tools/test/netfibs/README
index 64c238895c68..9c6d8bb63513 100644
--- a/tools/test/netfibs/README
+++ b/tools/test/netfibs/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
This directory holds scripts and a support program for multiple test cases
exercising multi-IP FIBs. At this time only IPv6 test cases are provided.
diff --git a/tools/test/netfibs/forwarding.sh b/tools/test/netfibs/forwarding.sh
index 3d63d7454cc4..1b639b65d7f3 100755
--- a/tools/test/netfibs/forwarding.sh
+++ b/tools/test/netfibs/forwarding.sh
@@ -27,7 +27,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Test setup:
diff --git a/tools/test/netfibs/initiator.sh b/tools/test/netfibs/initiator.sh
index 3a409a7da1bc..bde3c88b7a2d 100755
--- a/tools/test/netfibs/initiator.sh
+++ b/tools/test/netfibs/initiator.sh
@@ -27,7 +27,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# We will use the RFC5180 (and Errata) benchmarking working group prefix
diff --git a/tools/test/netfibs/reflect.c b/tools/test/netfibs/reflect.c
index 47c7846948df..8b34343409f6 100644
--- a/tools/test/netfibs/reflect.c
+++ b/tools/test/netfibs/reflect.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/socket.h>
diff --git a/tools/test/netfibs/reflector.sh b/tools/test/netfibs/reflector.sh
index 3f8c43ae4f26..a68019532010 100755
--- a/tools/test/netfibs/reflector.sh
+++ b/tools/test/netfibs/reflector.sh
@@ -27,7 +27,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# We will use the RFC5180 (and Errata) benchmarking working group prefix
@@ -898,7 +897,7 @@ testrx_run_test()
*) _opts="-d" ;;
esac
- # Convert netcat options to reflect aguments.
+ # Convert netcat options to reflect arguments.
case "${_o}" in
-i) _opts="${_opts} -T TCP6" ;; # Use TCP for START/DONE.
-u) _opts="${_opts} -T UDP6" ;;
diff --git a/tools/test/popss/popss.c b/tools/test/popss/popss.c
index b41f2a32ae91..bb66f050beb1 100644
--- a/tools/test/popss/popss.c
+++ b/tools/test/popss/popss.c
@@ -1,8 +1,7 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * 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.
@@ -29,7 +28,6 @@
* SUCH DAMAGE.
*
* $Id: popss.c,v 1.28 2018/05/09 21:35:29 kostik Exp kostik $
- * $FreeBSD$
*
* cc -m32 -Wall -Wextra -O2 -g -o popss popss.c
* Use as "popss <instruction>", where instruction is one of
diff --git a/tools/test/ppsapi/Makefile b/tools/test/ppsapi/Makefile
index 0474b9979363..056a1fc31d6c 100644
--- a/tools/test/ppsapi/Makefile
+++ b/tools/test/ppsapi/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ppsapitest
MAN=
diff --git a/tools/test/ppsapi/README b/tools/test/ppsapi/README
index ea0c3e86e1b5..57ced89e64ce 100644
--- a/tools/test/ppsapi/README
+++ b/tools/test/ppsapi/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
This is a small test program which I have had around since we wrote
the RFC 2783 API.
diff --git a/tools/test/ppsapi/ppsapitest.c b/tools/test/ppsapi/ppsapitest.c
index ef655e96d6df..598411d7af6a 100644
--- a/tools/test/ppsapi/ppsapitest.c
+++ b/tools/test/ppsapi/ppsapitest.c
@@ -6,8 +6,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
diff --git a/tools/test/pthread_vfork/pthread_vfork_test.c b/tools/test/pthread_vfork/pthread_vfork_test.c
index 925c86255738..6525e51fe6f7 100644
--- a/tools/test/pthread_vfork/pthread_vfork_test.c
+++ b/tools/test/pthread_vfork/pthread_vfork_test.c
@@ -26,9 +26,6 @@
*
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/wait.h>
#include <err.h>
diff --git a/tools/test/ptrace/Makefile b/tools/test/ptrace/Makefile
index 46e0aee6b53f..ebc329a343bb 100644
--- a/tools/test/ptrace/Makefile
+++ b/tools/test/ptrace/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= scescx
MAN=
diff --git a/tools/test/ptrace/scescx.c b/tools/test/ptrace/scescx.c
index 582d1734427e..27a00b40f737 100644
--- a/tools/test/ptrace/scescx.c
+++ b/tools/test/ptrace/scescx.c
@@ -23,11 +23,9 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/ptrace.h>
+#include <sys/syscall.h>
#include <sys/sysctl.h>
#include <sys/wait.h>
#include <assert.h>
@@ -213,9 +211,13 @@ wait_info(int pid, int status, struct ptrace_lwpinfo *lwpinfo)
printf("\n");
}
+static int trace_syscalls = 1;
+static int remote_getpid = 0;
+
static int
trace_sc(int pid)
{
+ struct ptrace_sc_remote pscr;
struct ptrace_lwpinfo lwpinfo;
int status;
@@ -269,6 +271,24 @@ trace_sc(int pid)
wait_info(pid, status, &lwpinfo);
assert(lwpinfo.pl_flags & PL_FLAG_SCX);
+ if (remote_getpid) {
+ memset(&pscr, 0, sizeof(pscr));
+ pscr.pscr_syscall = SYS_getpid;
+ pscr.pscr_nargs = 0;
+ if (ptrace(PT_SC_REMOTE, pid, (caddr_t)&pscr,
+ sizeof(pscr)) < 0) {
+ perror("PT_SC_REMOTE");
+ ptrace(PT_KILL, pid, NULL, 0);
+ return (-1);
+ } else {
+ printf(TRACE "remote getpid %ld errno %d\n",
+ pscr.pscr_ret.sr_retval[0], pscr.pscr_ret.sr_error);
+ if (waitpid(pid, &status, 0) == -1) {
+ perror("waitpid");
+ return (-1);
+ }
+ }
+ }
if (lwpinfo.pl_flags & PL_FLAG_EXEC)
get_pathname(pid);
@@ -322,8 +342,6 @@ trace_cont(int pid)
return (0);
}
-static int trace_syscalls = 1;
-
static int
trace(pid_t pid)
{
@@ -340,12 +358,16 @@ main(int argc, char *argv[])
pid_t pid, pid1;
trace_syscalls = 1;
+ remote_getpid = 0;
use_vfork = 0;
- while ((c = getopt(argc, argv, "csv")) != -1) {
+ while ((c = getopt(argc, argv, "crsv")) != -1) {
switch (c) {
case 'c':
trace_syscalls = 0;
break;
+ case 'r':
+ remote_getpid = 1;
+ break;
case 's':
trace_syscalls = 1;
break;
@@ -354,7 +376,8 @@ main(int argc, char *argv[])
break;
default:
case '?':
- fprintf(stderr, "Usage: %s [-c] [-s] [-v]\n", argv[0]);
+ fprintf(stderr, "Usage: %s [-c] [-r] [-s] [-v]\n",
+ argv[0]);
return (2);
}
}
diff --git a/tools/test/sort/bigtest/kcmd b/tools/test/sort/bigtest/kcmd
index f853fd609230..41aa080139f7 100755
--- a/tools/test/sort/bigtest/kcmd
+++ b/tools/test/sort/bigtest/kcmd
@@ -1,7 +1,5 @@
#!/bin/sh
-# $FreeBSD$
-
rm -rf siks
mkdir -p siks
diff --git a/tools/test/sort/regression/Makefile b/tools/test/sort/regression/Makefile
index e7cc101f354f..81dc44d8ef70 100644
--- a/tools/test/sort/regression/Makefile
+++ b/tools/test/sort/regression/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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/sort/regression/cmp.sh b/tools/test/sort/regression/cmp.sh
index 44c406a3dc65..cd840af27952 100755
--- a/tools/test/sort/regression/cmp.sh
+++ b/tools/test/sort/regression/cmp.sh
@@ -1,4 +1,3 @@
#!/bin/sh
-# $FreeBSD$
diff $1 $2 | grep '^-' >/dev/null && echo DIFFER: $1 $2 && exit 0 || exit 0
diff --git a/tools/test/stress2/default.cfg b/tools/test/stress2/default.cfg
index f7748b55fa04..bff7f3f168a9 100644
--- a/tools/test/stress2/default.cfg
+++ b/tools/test/stress2/default.cfg
@@ -88,6 +88,7 @@ checkfs () {
# BMODE=1 ./all.sh -on `grep -lw mycc *.sh`
# BMODE=2 STRESS2BIN=/home/pho/stress2/bin.i386.r276368 ./all.sh
+BMODE=${BMODE:-0}
CC=${CC:-cc}
top=`dirname $(pwd)` # cwd for the all.sh script
STRESS2BIN=${STRESS2BIN:-$top/bin}
diff --git a/tools/test/stress2/lib/resources.c b/tools/test/stress2/lib/resources.c
index 935a085a58de..1888d1fba87f 100644
--- a/tools/test/stress2/lib/resources.c
+++ b/tools/test/stress2/lib/resources.c
@@ -149,7 +149,7 @@ usermem(void)
}
static void
-cleanupdf()
+cleanupdf(void)
{
unlink(dfpath);
}
diff --git a/tools/test/stress2/misc/1st.sh b/tools/test/stress2/misc/1st.sh
index 00602d67e803..59edb7957bfb 100755
--- a/tools/test/stress2/misc/1st.sh
+++ b/tools/test/stress2/misc/1st.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/aesni.sh b/tools/test/stress2/misc/aesni.sh
index c25694fa002a..0fe7390d2fbd 100755
--- a/tools/test/stress2/misc/aesni.sh
+++ b/tools/test/stress2/misc/aesni.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
@@ -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.debug.inc b/tools/test/stress2/misc/all.debug.inc
index ea0f2d6a5c58..4042ca1f7718 100644
--- a/tools/test/stress2/misc/all.debug.inc
+++ b/tools/test/stress2/misc/all.debug.inc
@@ -1,5 +1,5 @@
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Example debug include file for misc/all.sh
diff --git a/tools/test/stress2/misc/all.exclude b/tools/test/stress2/misc/all.exclude
index 029a77b9b094..f9b32db95799 100644
--- a/tools/test/stress2/misc/all.exclude
+++ b/tools/test/stress2/misc/all.exclude
@@ -1,40 +1,43 @@
-# 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
backingstore2.sh panic: 43 vncache entries remaining 20111220
backingstore3.sh g_vfs_done():md6a[WRITE(offset=...)]error = 28 20111230
dd.sh CAM stuck in vmwait 20200116
+force13.sh https://people.freebsd.org/~pho/stress/log/log0376.txt 20221113
+force14.sh Waiting for fix 20230319
+force15.sh Waiting for fix 20230319
force4.sh https://people.freebsd.org/~pho/stress/log/log0082.txt 20210328
force7.sh https://people.freebsd.org/~pho/stress/log/log0266.txt 20220207
+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
-getrandom.sh Known DoS issue 20201107
-getrandom2.sh Known DoS issue 20200302
+fuse.sh https://people.freebsd.org/~pho/stress/log/log0546.txt 20240828
+fuse2.sh https://people.freebsd.org/~pho/stress/log/log0547.txt 20240828
gjournal.sh panic: Journal overflow 20190626
gjournal2.sh panic: Journal overflow 20180125
gjournal3.sh panic: Bio not on queue 20171225
gjournal4.sh CAM stuck in vmwait 20180517
+gnop10.sh Waiting for fix 20230319
+gnop13.sh https://people.freebsd.org/~pho/stress/log/log0386.txt 20221113
gnop7.sh Waiting for patch commit 20190820
gnop8.sh Waiting for patch commit 20201214
gnop9.sh Waiting for patch commit 20201214
graid1_8.sh Known issue 20170909
graid1_9.sh panic: Bad effnlink 20180212
-gunion.sh Waiting for fix 20220308
-gunion2.sh Waiting for fix 20220308
-ifconfig.sh Bug 253824 20210322
-ifconfig2.sh https://people.freebsd.org/~pho/stress/log/log0051.txt 20210210
lockf5.sh Spinning threads seen 20160718
maxvnodes2.sh https://people.freebsd.org/~pho/stress/log/log0083.txt 20210329
memguard.sh https://people.freebsd.org/~pho/stress/log/log0088.txt 20210402
memguard2.sh Waiting for fix commit
memguard3.sh Waiting for fix commit
+mount7.sh https://people.freebsd.org/~pho/stress/log/log0549.txt 20240912
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 to domainset_fixed 20210104
-newfs4.sh watchdog fired. newbuf 20190225
+msetdomain.sh May change policy for random threads to domainset_fixed 20210104
+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
@@ -42,53 +45,48 @@ nfs16.sh panic: Failed to register NFS lock locally - error=11 20160608
nullfs28.sh Hang in "mount drain" seen 20220111
oom2.sh Hang in pfault 20180324
overcommit2.sh CAM stuck in vmwait seen 20200112
-pageout.sh panic: handle_written_filepage: not started 20190218
+pmc4.sh https://people.freebsd.org/~pho/stress/log/log0548.txt 20240904
pmc8.sh panic: [pmc,2749] (ri21, rc1) waiting too long for pmc to ... 20210621
-rename14.sh https://people.freebsd.org/~pho/stress/log/log0279.txt 20220415
+rename14.sh https://people.freebsd.org/~pho/stress/log/log0433.txt 20230409
sctp2.sh panic: Queues are not empty when handling SHUTDOWN-COMPLETE 20210211
sctp3.sh panic: Queues are not empty when handling SHUTDOWN-COMPLETE 20210211
-sendfile25.sh WiP 20200611
signal.sh Timing issues. Needs fixing 20171116
snap8.sh https://people.freebsd.org/~pho/stress/log/log0123.txt 20211008
+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
-syzkaller15.sh WiP 20200712
-syzkaller16.sh WiP 20210722
-syzkaller25.sh WiP 20201116
-syzkaller27.sh watchdogd fires 20220512
-syzkaller28.sh WiP 20201120
-syzkaller50.sh panic: Assertion done != job_total_nbytes failed at ... 20220405
-syzkaller54.sh panic: td 0xfffffe014f7193a0 is not suspended 20220527
-syzkaller55.sh panic: Counter goes negative 20220525
+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
+syzkaller80.sh panic 20250711
+syzkaller81.sh panic 20250711
+syzkaller82.sh panic: m_apply, length > size of mbuf chain 20250724
+quota3.sh https://people.freebsd.org/~pho/stress/log/log0604.txt 20250728
+quota6.sh https://people.freebsd.org/~pho/stress/log/log0456.txt 20240707
truss3.sh WiP 20200915
-unionfs14.sh WiP 20220111
-unionfs9.sh https://people.freebsd.org/~pho/stress/log/log0226.txt 20220111
+zfs18.sh https://people.freebsd.org/~pho/stress/log/log0560.txt 20241118
+zfs9.sh panic: sacked_bytes < 0 20250711
# Test not to run for other reasons:
-fuzz.sh A know issue
marcus3.sh OK, but runs for a long time
statfs.sh Not very interesting
vunref.sh No problems ever seen
vunref2.sh No problems ever seen
-# Snapshots has been disabled on SU+J
-suj15.sh
-suj16.sh
-suj19.sh
-suj20.sh
-suj21.sh
-suj22.sh
-suj24.sh
-suj25.sh
-suj26.sh
-suj27.sh
-suj28.sh
-
# Exclude NFS loopback tests
nfs2.sh panic: wrong diroffset 20140219
nfs5.sh
diff --git a/tools/test/stress2/misc/all.sh b/tools/test/stress2/misc/all.sh
index 58bf3a630294..86d986099dbb 100755
--- a/tools/test/stress2/misc/all.sh
+++ b/tools/test/stress2/misc/all.sh
@@ -42,14 +42,15 @@ alloutput=$sdir/output # Output from current test
allexcess=$sdir/excessive # Tests with excessive runtime
allelapsed=$sdir/elapsed # Test runtime
alllocal=$sdir/all.exclude # Local exclude list
+exitonerror=0 # -e option
loops=0 # Times to run the tests
# Get kernel config + revision
rev=`uname -a | awk '{print $7}' | sed 's/://'`
rev="`uname -a | sed 's#.*/compile/##; s/ .*//'` $rev"
-args=`getopt acl:m:no "$@"`
+args=`getopt acel:m:no "$@"`
[ $? -ne 0 ] &&
- echo "Usage $0 [-a] [-c] [-l <val>] [-m <min.>] [-n] [-o] [<tests>]" &&
+ echo "Usage $0 [-a] [-c] [-e] [-l <val>] [-m <min.>] [-n] [-o] [<tests>]" &&
exit 1
set -- $args
for i; do
@@ -62,6 +63,9 @@ for i; do
rm -f $alllist
shift
;;
+ -e) exitonerror=1
+ shift
+ ;;
-l) loops=$2 # Number of time to run
shift; shift
;;
@@ -160,6 +164,7 @@ trap intr INT
[ -f all.debug.inc ] && . all.debug.inc
s1=`date +%s`
+touch $sdir/starttime
while true; do
exclude=`cat all.exclude $alllocal 2>/dev/null | sed '/^#/d' |
grep "^[a-zA-Z].*\.sh" | awk '{print $1}'`
@@ -226,6 +231,7 @@ while true; do
[ $e -ne 0 ] &&
echo "FAIL $i exit code $e"
) 2>&1 | tee $alloutput
+ grep -qw FAIL $alloutput && e=1 || e=0
ts=`date '+%Y%m%d %T'`
grep -qw FAIL $alloutput &&
echo "$ts $rev $i" >> $allfaillog &&
@@ -237,9 +243,8 @@ while true; do
[ -f ../tools/ministat.sh ] &&
../tools/ministat.sh $allelapsed $i
[ $((`date '+%s'` - start)) -gt 1980 ] &&
- printf "$ts *** Excessive run time: %s %d min\r\n" $i, \
- $(((`date '+%s'` - start) / 60)) |
- tee $console >> $allexcess
+ printf "$ts $rev $i %d min\n" \
+ $(((`date '+%s'` - start) / 60)) >> $allexcess
while pgrep -q "^swap$"; do
echo "swap still running"
sleep 2
@@ -248,6 +253,7 @@ while true; do
[ $all_debug ] && post_debug
[ $minutes ] && [ $((`date +%s` - s1)) -ge $minutes ] &&
break 2
+ [ $exitonerror -eq 1 -a $e -ne 0 ] && break 2
done
[ $((loops -= 1)) -eq 0 ] && break
done
diff --git a/tools/test/stress2/misc/arp.sh b/tools/test/stress2/misc/arp.sh
index ef66ce351e24..5c4d997ba975 100755
--- a/tools/test/stress2/misc/arp.sh
+++ b/tools/test/stress2/misc/arp.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/aslr.sh b/tools/test/stress2/misc/aslr.sh
index 6261fae4546b..686b2b414030 100755
--- a/tools/test/stress2/misc/aslr.sh
+++ b/tools/test/stress2/misc/aslr.sh
@@ -1,7 +1,7 @@
#/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/badcode2.sh b/tools/test/stress2/misc/badcode2.sh
index 8e47a74a87d1..dbf2cadbc4cd 100755
--- a/tools/test/stress2/misc/badcode2.sh
+++ b/tools/test/stress2/misc/badcode2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Peter Holm
#
diff --git a/tools/test/stress2/misc/badcode3.sh b/tools/test/stress2/misc/badcode3.sh
index e0a10d0074a4..da4f811bff6d 100755
--- a/tools/test/stress2/misc/badcode3.sh
+++ b/tools/test/stress2/misc/badcode3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Peter Holm
#
@@ -39,13 +39,18 @@ mdconfig -a -t swap -s 1g -u $mdstart
newfs $newfs_flags md$mdstart > /dev/null
mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
+export badcodeLOAD=100
+export RUNDIR=$mntpoint/stressX
+mkdir -p $RUNDIR
+chmod 0777 $RUNDIR
here=`pwd`
cd $mntpoint
(cd $here/../testcases/swap; ./swap -t 5m -i 20) &
sleep 2
while pgrep -q swap; do
- timeout 1m limits -c 0 $here/../testcases/badcode/badcode -t 1m -i 20
+ su $testuser -c \
+ "timeout 1m limits -c 0 $here/../testcases/badcode/badcode -t 1m -i 20"
done
wait
cd $here
diff --git a/tools/test/stress2/misc/beneath.sh b/tools/test/stress2/misc/beneath.sh
index 5f61dbd5e383..29c7ce967197 100755
--- a/tools/test/stress2/misc/beneath.sh
+++ b/tools/test/stress2/misc/beneath.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/beneath2.sh b/tools/test/stress2/misc/beneath2.sh
index ad1f5c538258..5cbe3c160e00 100755
--- a/tools/test/stress2/misc/beneath2.sh
+++ b/tools/test/stress2/misc/beneath2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/beneath3.sh b/tools/test/stress2/misc/beneath3.sh
index 9e7493a2322c..aac7079e284b 100755
--- a/tools/test/stress2/misc/beneath3.sh
+++ b/tools/test/stress2/misc/beneath3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/beneath4.sh b/tools/test/stress2/misc/beneath4.sh
index 0f51980cb75a..48458f088a96 100755
--- a/tools/test/stress2/misc/beneath4.sh
+++ b/tools/test/stress2/misc/beneath4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/buildkernel.sh b/tools/test/stress2/misc/buildkernel.sh
index fe8d530dfab7..e0aa85617f9b 100755
--- a/tools/test/stress2/misc/buildkernel.sh
+++ b/tools/test/stress2/misc/buildkernel.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -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 a5dc642ce876..e3bce2764c0c 100755
--- a/tools/test/stress2/misc/buildworld3.sh
+++ b/tools/test/stress2/misc/buildworld3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
@@ -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 98d4904ec4bd..d1d162120952 100755
--- a/tools/test/stress2/misc/buildworld4.sh
+++ b/tools/test/stress2/misc/buildworld4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
@@ -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/chain.sh b/tools/test/stress2/misc/chain.sh
index 46d2f32cd7c4..ebc3f118e1bf 100755
--- a/tools/test/stress2/misc/chain.sh
+++ b/tools/test/stress2/misc/chain.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Jeremy <peterj@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/chroot.sh b/tools/test/stress2/misc/chroot.sh
index 176b249312f0..35e2d2f11e0e 100755
--- a/tools/test/stress2/misc/chroot.sh
+++ b/tools/test/stress2/misc/chroot.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/compare.sh b/tools/test/stress2/misc/compare.sh
index c983046384b5..9ca6542d1af5 100755
--- a/tools/test/stress2/misc/compare.sh
+++ b/tools/test/stress2/misc/compare.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
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/core5.sh b/tools/test/stress2/misc/core5.sh
index 856b01608f2e..c7928a7cf1dc 100755
--- a/tools/test/stress2/misc/core5.sh
+++ b/tools/test/stress2/misc/core5.sh
@@ -34,7 +34,7 @@
# 20150714 Slowdown seen with core5 waiting in vlruwk.
# sysctl vfs.vlru_allow_cache_src=1 used to resolve this.
-# For now change MAXVNODES from 1.000 to 4.000.
+# For now change MAXVNODES from 1.000 to 5.000.
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
. ../default.cfg
@@ -131,7 +131,7 @@ EOF
#include <time.h>
#include <unistd.h>
-#define MAXVNODES 4000
+#define MAXVNODES 5000
#define NBFILES 10000
#define PARALLEL 4
#define RTIME (10 * 60)
diff --git a/tools/test/stress2/misc/cpuset.sh b/tools/test/stress2/misc/cpuset.sh
index ad9f8569f386..359974a4bd87 100755
--- a/tools/test/stress2/misc/cpuset.sh
+++ b/tools/test/stress2/misc/cpuset.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/creat.sh b/tools/test/stress2/misc/creat.sh
new file mode 100755
index 000000000000..1abab774ed7f
--- /dev/null
+++ b/tools/test/stress2/misc/creat.sh
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Demonstrate incorrect "out of inodes" message with SU enabled.
+# No issue seen with SU+J
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+s=0
+mount | grep -q "on $mntpoint " && umount $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+
+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
+
+ifree1=`df -i $mntpoint | tail -1 | awk '{print $7}'`
+before=`df -i $mntpoint`
+n=$(((ifree1 - 5) / 10))
+jot 10 | xargs -I% mkdir $mntpoint/%
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 60 ]; do
+ for j in `jot 10`; do
+ (
+ jot $n | xargs -P0 -I% touch $mntpoint/$j/%
+ jot $n | xargs -P0 -I% rm $mntpoint/$j/%
+ ) &
+ done
+ wait
+done 2>&1 | tee $log | head -5
+[ -s $log ] && s=3
+jot 10 | xargs -I% rmdir $mntpoint/%
+umount $mntpoint; mount /dev/md$mdstart $mntpoint
+
+ifree2=`df -i $mntpoint | tail -1 | awk '{print $7}'`
+after=`df -i $mntpoint | tail -1`
+if [ $ifree1 -ne $ifree2 ]; then
+ echo "$before"
+ echo "$after"
+ s=1
+ ls -alsrt $mntpoint | head -20
+fi
+
+umount $mntpoint
+fsck -fy /dev/md$mdstart > $log 2>&1
+grep -Eq "WAS MODIFIED" $log && { s=2; cat $log; }
+
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
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/datagram.sh b/tools/test/stress2/misc/datagram.sh
index 5a5715886a88..0eec052823b7 100755
--- a/tools/test/stress2/misc/datagram.sh
+++ b/tools/test/stress2/misc/datagram.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/datagram2.sh b/tools/test/stress2/misc/datagram2.sh
index 66cfd44711c2..746ea33cb734 100755
--- a/tools/test/stress2/misc/datagram2.sh
+++ b/tools/test/stress2/misc/datagram2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/datagram3.sh b/tools/test/stress2/misc/datagram3.sh
index ca54377befcc..a5e141702139 100755
--- a/tools/test/stress2/misc/datagram3.sh
+++ b/tools/test/stress2/misc/datagram3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/datamove.sh b/tools/test/stress2/misc/datamove.sh
index a27a53e5e31b..67de998f3816 100755
--- a/tools/test/stress2/misc/datamove.sh
+++ b/tools/test/stress2/misc/datamove.sh
@@ -194,7 +194,7 @@ int startIO(int fd,char *buffer)
return 0;
}
-int main(int argc,char *argv[],char *envp[])
+int main(void)
{
int fdA,fdB,fdDelayA,fdDelayB;
diff --git a/tools/test/stress2/misc/datamove2.sh b/tools/test/stress2/misc/datamove2.sh
index 1b4c964a1f12..e503edf152a4 100755
--- a/tools/test/stress2/misc/datamove2.sh
+++ b/tools/test/stress2/misc/datamove2.sh
@@ -194,7 +194,7 @@ startIO(int fd, char *buffer)
}
int
-main(int argc, char *argv[], char *envp[])
+main(void)
{
int fdA, fdB, fdDelayA, fdDelayB;
diff --git a/tools/test/stress2/misc/datamove3.sh b/tools/test/stress2/misc/datamove3.sh
index 19beffc00655..0cdd4b5c0c3c 100755
--- a/tools/test/stress2/misc/datamove3.sh
+++ b/tools/test/stress2/misc/datamove3.sh
@@ -192,7 +192,7 @@ startIO(int fd, char *buffer)
}
int
-main(int argc, char *argv[], char *envp[])
+main(void)
{
int fdA, fdB, fdDelayA, fdDelayB;
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/devfs4.sh b/tools/test/stress2/misc/devfs4.sh
index 3ca8f44eb036..03a9f8cc8ca3 100755
--- a/tools/test/stress2/misc/devfs4.sh
+++ b/tools/test/stress2/misc/devfs4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/devfs5.sh b/tools/test/stress2/misc/devfs5.sh
index b0b1d98fc83e..5a72d7db9efb 100755
--- a/tools/test/stress2/misc/devfs5.sh
+++ b/tools/test/stress2/misc/devfs5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
@@ -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/dtrace_fault.sh b/tools/test/stress2/misc/dtrace_fault.sh
index 508cfc48cd59..6de6c058a998 100755
--- a/tools/test/stress2/misc/dtrace_fault.sh
+++ b/tools/test/stress2/misc/dtrace_fault.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/dup.sh b/tools/test/stress2/misc/dup.sh
index 7223709d09c4..89b4e637a737 100755
--- a/tools/test/stress2/misc/dup.sh
+++ b/tools/test/stress2/misc/dup.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/elf.sh b/tools/test/stress2/misc/elf.sh
index eb6650c9c088..5d7cbaaf9952 100755
--- a/tools/test/stress2/misc/elf.sh
+++ b/tools/test/stress2/misc/elf.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/execpath.sh b/tools/test/stress2/misc/execpath.sh
index 22613a948e6b..0e88472ae356 100755
--- a/tools/test/stress2/misc/execpath.sh
+++ b/tools/test/stress2/misc/execpath.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/exlock2.sh b/tools/test/stress2/misc/exlock2.sh
index 94e3f88f48e3..811fd96f502c 100755
--- a/tools/test/stress2/misc/exlock2.sh
+++ b/tools/test/stress2/misc/exlock2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -68,6 +68,7 @@ EOF
#include <unistd.h>
static _Atomic(int) *share;
+static int debug; /* Set to "1" for debug output */
static int quit;
static char file[80];
@@ -101,9 +102,8 @@ test1(void)
; /* wait for test2 to signal "done" */
close(fd);
}
-#if defined(DEBUG)
- fprintf(stderr, "%s: n = %d\n", __func__, n);
-#endif
+ if (debug != 0)
+ fprintf(stderr, "%s: n = %d\n", __func__, n);
_exit(0);
}
@@ -114,17 +114,15 @@ test2(void)
struct flock fl;
struct stat st;
time_t start;
- int e, fd, n;
+ int e, fd;
e = 0;
fd = 0;
- n = 0;
start = time(NULL);
while (time(NULL) - start < RUNTIME) {
share[SYNC] = 1;
if ((fd = open(file, O_RDWR)) == -1)
goto out;
- n++;
memset(&fl, 0, sizeof(fl));
fl.l_start = 0;
fl.l_len = 0;
@@ -151,12 +149,9 @@ out:
share[SYNC] = 0;
usleep(100);
}
-#if defined(DEBUG)
- if (e != 0) {
- system("ps -Uroot | grep -v grep | grep /tmp/exlock2 | "\
+ if (debug != 0 && e != 0)
+ system("ps -x | grep -v grep | grep /tmp/exlock2 | "\
"awk '{print $1}' | xargs procstat -f");
- }
-#endif
share[SYNC] = 0;
_exit(e);
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 826317857f85..210008ce3942 100755
--- a/tools/test/stress2/misc/ext3fs.sh
+++ b/tools/test/stress2/misc/ext3fs.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
@@ -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 610351352501..2e2ac8d77440 100755
--- a/tools/test/stress2/misc/ext4fs.sh
+++ b/tools/test/stress2/misc/ext4fs.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
@@ -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/extattr2.sh b/tools/test/stress2/misc/extattr2.sh
index 3ce10dfbc894..64cd73dcce47 100755
--- a/tools/test/stress2/misc/extattr2.sh
+++ b/tools/test/stress2/misc/extattr2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/extattr3.sh b/tools/test/stress2/misc/extattr3.sh
index 84b5e1821473..82d404400b7d 100755
--- a/tools/test/stress2/misc/extattr3.sh
+++ b/tools/test/stress2/misc/extattr3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/fcntl.sh b/tools/test/stress2/misc/fcntl.sh
index 39f7f87dc005..237cacdf6de8 100755
--- a/tools/test/stress2/misc/fcntl.sh
+++ b/tools/test/stress2/misc/fcntl.sh
@@ -26,7 +26,7 @@
# SUCH DAMAGE.
#
-# fcntl(2) locking scenario. No problems seen.
+# fcntl(2) locking scenario.
. ../default.cfg
@@ -45,6 +45,8 @@ rm -f /tmp/fcntl
exit $status
EOF
#include <sys/types.h>
+#include <sys/wait.h>
+
#include <err.h>
#include <errno.h>
#include <fcntl.h>
@@ -52,7 +54,6 @@ EOF
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/wait.h>
#include <unistd.h>
#define PARALLEL 16
@@ -80,9 +81,10 @@ add(int n, int increment)
{
struct flock fl;
off_t pos;
- long val, oval __unused;
- int r;
+ long val, oval;
+ int debug, r;
+ debug = 0; /* set to "1" for debug output. */
pos = n * sizeof(val);
memset(&fl, 0, sizeof(fl));
fl.l_start = pos;
@@ -107,10 +109,9 @@ add(int n, int increment)
}
oval = val;
val = val + increment;
-#if defined(DEBUG)
- fprintf(stderr, "add(%d, %d) @ pos %ld: %ld = %ld + %d\n",
- n, increment, (long)pos, val, oval, increment);
-#endif
+ if (debug != 0)
+ fprintf(stderr, "add(%d, %d) @ pos %ld: %ld = %ld + %d\n",
+ n, increment, (long)pos, val, oval, increment);
if (lseek(fd, pos, SEEK_SET) == -1)
err(1, "lseek");
while ((r = write(fd, &val, sizeof(val)) != sizeof(val))) {
@@ -178,9 +179,9 @@ down(void)
int
main(void)
{
- int flags, i;
- long val, sum;
off_t len;
+ long val, sum;
+ int flags, i;
signal(SIGHUP, handler);
signal(SIGALRM, ahandler);
diff --git a/tools/test/stress2/misc/fcntl2.sh b/tools/test/stress2/misc/fcntl2.sh
index 5f276ae81ccc..acb161fd0523 100755
--- a/tools/test/stress2/misc/fcntl2.sh
+++ b/tools/test/stress2/misc/fcntl2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
@@ -150,6 +150,8 @@ test(void)
}
close(fd);
unlink(file);
+ if (success == 0)
+ fprintf(stderr, "No calls to fcntl() succeeded.\n");
_exit(0);
}
diff --git a/tools/test/stress2/misc/fcntl3.sh b/tools/test/stress2/misc/fcntl3.sh
index 8892a9d5670b..650619b43762 100755
--- a/tools/test/stress2/misc/fcntl3.sh
+++ b/tools/test/stress2/misc/fcntl3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Mark Johnston <markj@freebsd.org>
#
diff --git a/tools/test/stress2/misc/fexecve.sh b/tools/test/stress2/misc/fexecve.sh
index 01ff0b723134..432945061c64 100755
--- a/tools/test/stress2/misc/fexecve.sh
+++ b/tools/test/stress2/misc/fexecve.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/fifo2.sh b/tools/test/stress2/misc/fifo2.sh
index 9e4a7e632e9d..4a7b986931d9 100755
--- a/tools/test/stress2/misc/fifo2.sh
+++ b/tools/test/stress2/misc/fifo2.sh
@@ -96,6 +96,7 @@ EOF
#include <unistd.h>
#define N (128 * 1024 / (int)sizeof(u_int32_t))
+static int debug; /* Set to 1 for debug output */
u_int32_t r[N];
static void
@@ -143,11 +144,10 @@ calls(void *arg __unused)
arg6 = makearg();
arg7 = makearg();
-#if 0
- fprintf(stderr, "%2d : syscall(%3d, %lx, %lx, %lx, %lx, %lx, %lx, %lx)\n",
- i, SYS_open, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+ if (debug != 0)
+ fprintf(stderr, "%2d : syscall(%3d, %lx, %lx, %lx, %lx, %lx, %lx, %lx)\n",
+ i, SYS_open, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
usleep(100000);
-#endif
alarm(1);
syscall(SYS_open, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
diff --git a/tools/test/stress2/misc/fifo4.sh b/tools/test/stress2/misc/fifo4.sh
index 7f46f8537dc6..1578b8786d43 100755
--- a/tools/test/stress2/misc/fifo4.sh
+++ b/tools/test/stress2/misc/fifo4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
@@ -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/force.sh b/tools/test/stress2/misc/force.sh
index 4c5cd6c255f6..61f15b0d5b8b 100755
--- a/tools/test/stress2/misc/force.sh
+++ b/tools/test/stress2/misc/force.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/force10.sh b/tools/test/stress2/misc/force10.sh
new file mode 100755
index 000000000000..d0ff36ae2ef9
--- /dev/null
+++ b/tools/test/stress2/misc/force10.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm
+#
+# 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.
+#
+
+# "mdconfig -o force" test scenario. Simplification of force7.sh
+
+# panic: buf_alloc: BUF_LOCK on free buf 0xfffffe0038652410: 16.
+# https://people.freebsd.org/~pho/stress/log/log0270.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+log=/tmp/force10.sh.log
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+truncate -s 1g $diskimage
+mdconfig -a -t vnode -f $diskimage -s 1g -u $mdstart
+flags=$newfs_flags
+echo "newfs $flags md$mdstart"
+newfs $flags md$mdstart > /dev/null 2>&1
+
+#export TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
+# egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp"`
+export TESTPROGS='
+testcases/creat/creat
+testcases/swap/swap
+'
+export runRUNTIME=3m
+export RUNDIR=$mntpoint/stressX
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount /dev/md$mdstart $mntpoint
+ rm -fr $mntpoint/lost+found
+ chmod 777 $mntpoint
+
+ su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
+ /dev/null 2>&1 &
+
+ sleep `jot -r 1 5 9`
+ while mdconfig -l | grep -q md$mdstart; do
+ mdconfig -d -u $mdstart -o force || sleep 1
+ done
+ sleep 1
+ ../tools/killall.sh
+ wait
+ 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 -a -t vnode -f $diskimage -s 1g -u $mdstart
+ for i in `jot 10`; do
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1
+ grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
+ done
+ [ $i -gt 2 ] && echo "Ran fsck $i times"
+ [ $i -eq 10 ] && { s=1; break; }
+done
+if [ $s -eq 0 ]; then
+ mdconfig -d -u $mdstart
+ rm -f $diskimage $log
+else
+ cat $log
+fi
+exit $s
diff --git a/tools/test/stress2/misc/force11.sh b/tools/test/stress2/misc/force11.sh
new file mode 100755
index 000000000000..229a83ce69fe
--- /dev/null
+++ b/tools/test/stress2/misc/force11.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+backup=`dirname $diskimage`/force11.sh.diskimage.`date +%Y%m%dT%H%M%S`
+log=/tmp/force11.sh.log
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+truncate -s 10g $diskimage
+mdconfig -a -t vnode -f $diskimage -u $mdstart
+flags=$newfs_flags
+[ `jot -r 1 0 1` -eq 1 ] && flags="-j"
+echo "newfs $flags md$mdstart"
+newfs $flags md$mdstart > /dev/null 2>&1
+
+export TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
+ egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp|rename"`
+export runRUNTIME=3m
+export RUNDIR=$mntpoint/stressX
+export CTRLDIR=$mntpoint/stressX.control
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do
+ mount /dev/md$mdstart $mntpoint
+ rm -fr $mntpoint/lost+found
+ chmod 777 $mntpoint
+
+ su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
+ /dev/null 2>&1 &
+
+ sleep `jot -r 1 30 60`
+ while mdconfig -l | grep -q md$mdstart; do
+ mdconfig -d -u $mdstart -o force || sleep 1
+ done
+ sleep 1
+ ../tools/killall.sh
+ wait
+ dd if=$diskimage of=$backup bs=1m conv=sparse,sync status=none
+ sync; sleep .5; sync; sleep .5; sync
+ 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 -a -t vnode -f $diskimage -u $mdstart
+ c=0
+ for i in `jot 5`; do
+ fsck_ffs -fyR /dev/md$mdstart > $log 2>&1; s=$?
+ grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1))
+ grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; }
+ [ $s -ne 0 ] && break
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=100; break; }
+ break # For now, only once
+done
+if [ $s -eq 0 ]; then
+ mount /dev/md$mdstart $mntpoint
+ cp -R /usr/include $mntpoint || s=1
+ dd if=/dev/zero of=$mntpoint/big bs=1m count=10 status=none || s=2
+ ls -lR $mntpoint > /dev/null || s=3
+ find $mntpoint/* -delete || s=4
+ umount $mntpoint
+ [ $s -eq 0 ] &&
+ rm -f $diskimage $log $backup
+else
+ tail -10 $log
+fi
+mdconfig -d -u $mdstart
+[ -f $backup ] && xz -T0 $backup
+exit $s
diff --git a/tools/test/stress2/misc/force12.sh b/tools/test/stress2/misc/force12.sh
new file mode 100755
index 000000000000..c030adb16d86
--- /dev/null
+++ b/tools/test/stress2/misc/force12.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# rename() livelock seen with a forced unmount of a FS
+# https://people.freebsd.org/~pho/stress/log/log0375.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+echo "Known issue. Skipping ..."; exit 0
+
+set -u
+log=/tmp/force12.sh.log
+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
+flags=$newfs_flags
+[ `jot -r 1 0 1` -eq 1 ] && flags="-j"
+echo "newfs $flags md$mdstart"
+newfs $flags md$mdstart > /dev/null 2>&1
+
+export TESTPROGS='
+testcases/dirnprename/dirnprename
+testcases/dirrename/dirrename
+testcases/fts/fts
+testcases/mkdir/mkdir
+testcases/rename/rename
+testcases/rw/rw
+testcases/swap/swap
+'
+
+export runRUNTIME=3m
+export RUNDIR=$mntpoint/stressX
+export CTRLDIR=$mntpoint/stressX.control
+
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+export dirnprenameLOAD=100
+export dirrenameLOAD=100
+
+su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
+ /dev/null 2>&1 &
+
+sleep `jot -r 1 60 180`
+while mdconfig -l | grep -q md$mdstart; do
+ mdconfig -d -u $mdstart -o force || sleep 1
+done
+sleep 1
+../tools/killall.sh
+wait
+n=0
+while mount | grep $mntpoint | grep -q /dev/md; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 30 ] && { echo FAIL; exit 1; }
+done
+mdconfig -d -u $mdstart > /dev/null 2>&1
+rm -f $log
+exit 0
diff --git a/tools/test/stress2/misc/force13.sh b/tools/test/stress2/misc/force13.sh
new file mode 100755
index 000000000000..ac32ee90e38c
--- /dev/null
+++ b/tools/test/stress2/misc/force13.sh
@@ -0,0 +1,129 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Snapshot test
+
+# "panic: flush_pagedep_deps: failed to flush inodedep 0xfff..." seen:
+# https://people.freebsd.org/~pho/stress/log/log0376.txt
+
+# watchdog fired:
+# https://people.freebsd.org/~pho/stress/log/log0377.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+log=/tmp/force13.sh.log
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+truncate -s 10g $diskimage
+mdconfig -a -t vnode -f $diskimage -u $mdstart
+flags=$newfs_flags
+[ `jot -r 1 0 1` -eq 1 ] && flags="-j"
+
+echo "newfs $flags md$mdstart"
+newfs $flags md$mdstart > /dev/null 2>&1
+
+# Exclude rename for now due to log0374.txt
+export TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
+ egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp|rename"`
+export runRUNTIME=3m
+export RUNDIR=$mntpoint/stressX
+export CTRLDIR=$mntpoint/stressX.control
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do
+ mount /dev/md$mdstart $mntpoint
+ rm -fr $mntpoint/lost+found
+ chmod 777 $mntpoint
+
+ su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
+ /dev/null 2>&1 &
+
+ t=`jot -r 1 60 180`
+ start=`date +%s`
+ mkdir -p $mntpoint/.snap
+ for i in `jot 10`; do
+ rm -f $mntpoint/.snap/$i
+ mksnap_ffs $mntpoint $mntpoint/.snap/$i ||
+ { ../tools/killall.sh; break; }
+ sleep `jot -r 1 1 5`
+ [ $((`date +%s` - start)) -ge $t ] && break
+ done &
+ sleep `jot -r 1 60 180`
+ while mdconfig -l | grep -q md$mdstart; do
+ mdconfig -d -u $mdstart -o force || sleep 1
+ done
+ sleep 1
+ ../tools/killall.sh
+ wait
+ n=0
+ while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
+ done
+ mdconfig -a -t vnode -f $diskimage -u $mdstart
+ c=0
+ # Run fsck minimum two times
+ for i in `jot 5`; do
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1))
+ grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; }
+ [ $s -ne 0 ] && break
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=102; break; }
+done
+[ $s -eq 101 ] && s=0 # Ignore CLEANish problem for now
+if [ $s -eq 0 ]; then
+ mount /dev/md$mdstart $mntpoint
+ cp -R /usr/include $mntpoint
+ dd if=/dev/zero of=$mntpoint/big bs=1m count=10 status=none
+ find $mntpoint/* -delete
+
+ # Check the snapshots
+ for f in $mntpoint/.snap/*; do
+ c=0
+ for i in `jot 5`; do
+ echo "fsck_ffs -fy $f"
+ fsck_ffs -fy $f > $log 2>&1; s=$?
+ grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1))
+ grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: snapshot $i marked clean+modified $c times out of $i fsck runs"; s=201; }
+ [ $s -ne 0 ] && break
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log ||
+ { s=202; tail -10 $log; break; }
+ done
+ umount $mntpoint
+ mdconfig -d -u $mdstart
+ rm -f $diskimage $log
+fi
+exit $s
diff --git a/tools/test/stress2/misc/force14.sh b/tools/test/stress2/misc/force14.sh
new file mode 100755
index 000000000000..eec850c50891
--- /dev/null
+++ b/tools/test/stress2/misc/force14.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# SU+J Snapshot test with a 50G file system
+
+# "panic: handle_jwork: Unknown type jnewblk" seen:
+# https://people.freebsd.org/~pho/stress/log/log0422.txt
+
+# "panic: flush_pagedep_deps: failed to flush inodedep..." seen:
+# https://people.freebsd.org/~pho/stress/log/log0423.txt
+
+# "panic: softdep_deallocate_dependencies: dangling deps" seen:
+# https://people.freebsd.org/~pho/stress/log/log0424.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+log=/tmp/force14.sh.log
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+truncate -s 50g $diskimage
+mdconfig -a -t vnode -f $diskimage -u $mdstart
+flags="-j"
+
+newfs $flags md$mdstart > /dev/null 2>&1
+
+# Exclude rename for now due to log0374.txt
+export TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
+ egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp|rename"`
+export runRUNTIME=3m
+export RUNDIR=$mntpoint/stressX
+export CTRLDIR=$mntpoint/stressX.control
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do
+ mount /dev/md$mdstart $mntpoint
+ rm -fr $mntpoint/lost+found
+ chmod 777 $mntpoint
+
+ su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
+ /dev/null 2>&1 &
+
+ t=`jot -r 1 60 180`
+ st=`date +%s`
+ mkdir -p $mntpoint/.snap
+ for i in `jot 10`; do
+ rm -f $mntpoint/.snap/$i
+ mksnap_ffs $mntpoint $mntpoint/.snap/$i ||
+ { ../tools/killall.sh; break; }
+ sleep `jot -r 1 1 5`
+ [ $((`date +%s` - st)) -ge $t ] && break
+ done &
+ sleep `jot -r 1 60 180`
+ while mdconfig -l | grep -q md$mdstart; do
+ mdconfig -d -u $mdstart -o force || sleep 1
+ done
+ sleep 1
+ ../tools/killall.sh
+ wait
+ n=0
+ while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
+ done
+ mdconfig -a -t vnode -f $diskimage -u $mdstart
+ c=0
+ # Process the journal
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep 'INTERNAL ERROR: GOT TO reply' $log
+ for i in `jot 4`; do
+ [ $i -ne 1 ] &&
+ echo "fsck_ffs -fy /dev/md$mdstart"
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep 'INTERNAL ERROR: GOT TO reply' $log
+ grep -q CLEAN $log && c=$((c+=1))
+ grep -Eq "WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; }
+ [ $s -ne 0 ] && break
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=102; break; }
+done
+if [ $s -eq 0 ]; then
+ mount /dev/md$mdstart $mntpoint
+ cp -R /usr/include $mntpoint
+ dd if=/dev/zero of=$mntpoint/big bs=1m count=10 status=none
+ find $mntpoint/* -delete
+
+ umount $mntpoint
+ mdconfig -d -u $mdstart
+ rm -f $diskimage $log
+fi
+exit $s
diff --git a/tools/test/stress2/misc/force15.sh b/tools/test/stress2/misc/force15.sh
new file mode 100755
index 000000000000..955025cd98c6
--- /dev/null
+++ b/tools/test/stress2/misc/force15.sh
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# FFS+SU with snapshots and forced unmounts
+
+# "panic: flush_pagedep_deps: failed to flush inodedep ..." seen
+# https://people.freebsd.org/~pho/stress/log/log0427.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+prog=$(basename "$0" .sh)
+diskimage=/tmp/diskimage
+log=/tmp/$prog.log
+mdstart=10
+mntpoint=/mnt
+newfs_flags="-U"
+
+set -u
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+dd if=/dev/zero of=$diskimage bs=1m count=1k status=none
+mdconfig -a -t vnode -f $diskimage -u $mdstart
+flags="-U"
+
+newfs $flags md$mdstart > /dev/null 2>&1
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt $((5 * 60)) ]; do
+ mount /dev/md$mdstart $mntpoint
+ rm -fr $mntpoint/lost+found
+
+ jot 10 | xargs -I% mkdir -p $mntpoint/%
+ n=5000
+ for j in `jot 10`; do
+ (
+ jot $n | xargs -P0 -I% touch $mntpoint/$j/%
+ jot $n | xargs -P0 -I% rm $mntpoint/$j/%
+ ) > /dev/null 2>&1 &
+ done
+
+ sleep `jot -r 1 5 20`
+ t=`jot -r 1 60 180`
+ st=`date +%s`
+ mkdir -p $mntpoint/.snap
+ for i in `jot 10`; do
+ rm -f $mntpoint/.snap/$i
+ mksnap_ffs $mntpoint $mntpoint/.snap/$i > /dev/null 2>&1 || break
+ sleep `jot -r 1 1 5`
+ [ $((`date +%s` - st)) -ge $t ] && break
+ done &
+ sleep `jot -r 1 2 5`
+ while mdconfig -l | grep -q md$mdstart; do
+ mdconfig -d -u $mdstart -o force || sleep 1
+ done
+ sleep 1
+ wait
+ n=0
+ while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
+ done
+ mdconfig -a -t vnode -f $diskimage -u $mdstart
+ c=0
+ for i in `jot 5`; do
+ [ $i -ne 1 ] &&
+ echo "$i: fsck_ffs -fy /dev/md$mdstart"
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep 'INTERNAL ERROR: GOT TO reply' $log
+ grep -q CLEAN $log && grep -q MODIFIED && c=$((c+=1))
+ grep -Eq "WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; }
+ [ $s -ne 0 ] && break
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=102; break; }
+done
+if [ $s -eq 0 ]; then
+ mount /dev/md$mdstart $mntpoint
+ cp -R /usr/include $mntpoint
+ dd if=/dev/zero of=$mntpoint/big bs=1m count=10 status=none
+ find $mntpoint/* -delete
+
+ umount $mntpoint
+ mdconfig -d -u $mdstart
+ rm -f $diskimage $log
+fi
+exit $s
diff --git a/tools/test/stress2/misc/force2.sh b/tools/test/stress2/misc/force2.sh
index 35e448afbbba..cd947ef7d13d 100755
--- a/tools/test/stress2/misc/force2.sh
+++ b/tools/test/stress2/misc/force2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/force3.sh b/tools/test/stress2/misc/force3.sh
index 4bfb0011cbef..2fc947bb0af6 100755
--- a/tools/test/stress2/misc/force3.sh
+++ b/tools/test/stress2/misc/force3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/force4.sh b/tools/test/stress2/misc/force4.sh
index 72932aec1fe6..69bbb7f4c978 100755
--- a/tools/test/stress2/misc/force4.sh
+++ b/tools/test/stress2/misc/force4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/force5.sh b/tools/test/stress2/misc/force5.sh
index c0aa6436fc1f..263761211148 100755
--- a/tools/test/stress2/misc/force5.sh
+++ b/tools/test/stress2/misc/force5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/force6.sh b/tools/test/stress2/misc/force6.sh
index 5c7d508241ec..22b362d51573 100755
--- a/tools/test/stress2/misc/force6.sh
+++ b/tools/test/stress2/misc/force6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/force7.sh b/tools/test/stress2/misc/force7.sh
index 0f2e6e9a0e9e..e828b0090f7b 100755
--- a/tools/test/stress2/misc/force7.sh
+++ b/tools/test/stress2/misc/force7.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/force8.sh b/tools/test/stress2/misc/force8.sh
index 77a8e6fd97bf..26361890f02f 100755
--- a/tools/test/stress2/misc/force8.sh
+++ b/tools/test/stress2/misc/force8.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/force9.sh b/tools/test/stress2/misc/force9.sh
index a62e00242a67..54a17f20e036 100755
--- a/tools/test/stress2/misc/force9.sh
+++ b/tools/test/stress2/misc/force9.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -34,9 +34,12 @@
# "panic: softdep_update_inodeblock inconsistent ip ..." seen:
# https://people.freebsd.org/~pho/stress/log/log0184.txt
+# Watchdog fired: https://people.freebsd.org/~pho/stress/log/log0374.txt
+
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
. ../default.cfg
+set -u
log=/tmp/force7.sh.log
mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
@@ -46,22 +49,22 @@ flags=$newfs_flags
echo "newfs $flags md$mdstart"
newfs $flags md$mdstart > /dev/null 2>&1
+# Exclude rename for now due to log0374.txt
export TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
- egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp"`
+ egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp|rename"`
export runRUNTIME=3m
export RUNDIR=$mntpoint/stressX
+export CTRLDIR=$mntpoint/stressX.control
start=`date +%s`
while [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do
mount /dev/md$mdstart $mntpoint
rm -fr $mntpoint/lost+found
chmod 777 $mntpoint
- echo "Start tests"
su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
/dev/null 2>&1 &
sleep `jot -r 1 60 180`
- echo "Force destroy MD disk"
while mdconfig -l | grep -q md$mdstart; do
mdconfig -d -u $mdstart -o force || sleep 1
done
@@ -74,9 +77,17 @@ while [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do
[ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
done
mdconfig -a -t vnode -f $diskimage -u $mdstart
- fsck_ffs -fyR /dev/md$mdstart > $log 2>&1; s=$?
+ c=0
+ # Run fsck minimum two times
+ for i in `jot 5`; do
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1))
+ grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; }
[ $s -ne 0 ] && break
- grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=100; break; }
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=102; break; }
done
if [ $s -eq 0 ]; then
mount /dev/md$mdstart $mntpoint
@@ -87,6 +98,6 @@ if [ $s -eq 0 ]; then
mdconfig -d -u $mdstart
rm -f $diskimage $log
else
- cat $log
+ tail -10 $log
fi
exit $s
diff --git a/tools/test/stress2/misc/fork2.sh b/tools/test/stress2/misc/fork2.sh
new file mode 100755
index 000000000000..4dbe2de3f6d1
--- /dev/null
+++ b/tools/test/stress2/misc/fork2.sh
@@ -0,0 +1,134 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm
+#
+# 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.
+#
+
+# Regression test for D36069
+# thread_create(): call cpu_copy_thread() after td_pflags is zeroed
+
+# Seen before fix:
+# cc: error: unable to execute command: Segmentation fault (core dumped)
+# cc: error: linker command failed due to signal (use -v to see invocation)
+# Aug 9 18:27:47 freebsd-vm kernel: pid 32094 (ld.lld), jid 0, uid 0: exited on signal 11 (core dumped)
+
+. ../default.cfg
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+dir=/tmp
+odir=`pwd`
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/fork2.c
+mycc -o fork2 -Wall -Wextra -O0 -g fork2.c || exit 1
+cd $odir
+
+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 2g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+cd $mntpoint
+$dir/fork2
+s=$?
+pkill fork2
+[ -f fork2.core -a $s -eq 0 ] &&
+ { ls -l fork2.core; mv fork2.core $dir; s=1; }
+cd $odir
+
+for i in `jot 6`; do
+ mount | grep -q "on $mntpoint " || break
+ umount $mntpoint && break || sleep 10
+ [ $i -eq 6 ] &&
+ { echo FATAL; fstat -mf $mntpoint; exit 1; }
+done
+mdconfig -d -u $mdstart
+cd $dir
+mycc -o $dir/fork2 -Wall -Wextra -O0 -g $dir/fork2.c; s=$?
+rm -rf $dir/fork2 $dir/fork2.c
+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 <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+static volatile u_int *share;
+
+#define MX 5000
+#define RUNTIME (1 * 60)
+#define SYNC 0
+
+int
+main(void)
+{
+ pid_t pid;
+ size_t len;
+ time_t start;
+ int n;
+
+ 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;
+ signal(SIGCHLD, SIG_IGN);
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME) {
+ while ((atomic_load_int(&share[SYNC])) > MX)
+ usleep(100);
+ n++;
+ pid = fork();
+ if (pid == -1)
+ err(1, "fork)");
+ if (pid == 0) {
+ atomic_add_int(&share[SYNC], 1);
+ while (atomic_load_int(&share[SYNC]) <= MX)
+ usleep(10000);
+ usleep(arc4random() % 1000);
+ atomic_add_int(&share[SYNC], -1);
+ raise(SIGHUP);
+ _exit(0);
+ }
+ }
+ atomic_add_int(&share[SYNC], MX * 2);
+ fprintf(stderr, "%d fork() calls\n", n);
+}
diff --git a/tools/test/stress2/misc/forkbomb.sh b/tools/test/stress2/misc/forkbomb.sh
index 73a3c5f37fe2..caaaa27db281 100755
--- a/tools/test/stress2/misc/forkbomb.sh
+++ b/tools/test/stress2/misc/forkbomb.sh
@@ -81,7 +81,7 @@ volatile u_int *share;
#define R4 4 /* fork failed */
//#define DEBUG
-#define MXFAIL 100
+#define MXFAIL 2
#define MAXPROC 40000 /* Arbitrary cap */
#define PARALLEL 200
@@ -93,7 +93,7 @@ test(void)
alarm(1200);
atomic_add_int(&share[R1], 1);
while (share[R1] != PARALLEL)
- ;
+ usleep(100);
atomic_add_int(&share[R2], 1);
for (;;) {
@@ -103,6 +103,7 @@ test(void)
if ((r = fork()) == -1) {
atomic_add_int(&share[R4], 1);
atomic_add_int(&share[R2], -1);
+ usleep(arc4random() % 100000);
break;
}
}
diff --git a/tools/test/stress2/misc/fsck.sh b/tools/test/stress2/misc/fsck.sh
index 826c31f733c3..4af41df037e9 100755
--- a/tools/test/stress2/misc/fsck.sh
+++ b/tools/test/stress2/misc/fsck.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
@@ -49,9 +49,12 @@ u2=$((mdstart + 1))
mp1=${mntpoint}$u1
mp2=${mntpoint}$u2
mkdir -p $mp1 $mp2
-log=$mp1/fsck.sh.log
-diskimage=$mp1/fsck.sh.diskimage
+
backup=/tmp/fsck.sh.diskimage.`date +%Y%m%dT%H%M%S`.gz
+core=/tmp/fsck.sh.core.`date +%Y%m%dT%H%M%S`
+diskimage=$mp1/fsck.sh.diskimage
+log=$mp1/fsck.sh.log
+
asbs=0
cleans=0
reruns=0
@@ -71,6 +74,7 @@ mount /dev/md$u1 $mp1
[ -c /dev/md$u2 ] && mdconfig -d -u $u2
dd if=/dev/zero of=$diskimage bs=$max count=1 status=none
mdconfig -a -t vnode -f $diskimage -u $u2
+[ "$newfs_flags" = "-U" ] && [ `jot -r 1 0 1` -eq 1 ] && newfs_flags="-j"
backups=`newfs -N $newfs_flags md$u2 | grep -A1 "super-block backups" | \
tail -1 | sed 's/,//g'`
newfs $newfs_flags md$u2 > /dev/null
@@ -86,13 +90,13 @@ chk() {
waccess=0
fsck_ffs -fy $1 > $log 2>&1
r=$?
- if grep -qE "Cannot find file system superblock|Superblock check-hash failed" $log; then
+ if grep -qiE "super-?block.*failed" $log; then
for b in $backups; do
echo "Using alternate SB $b"
asbs=$((asbs + 1))
fsck_ffs -b $b -fy $1 > $log 2>&1
r=$?
- grep -qE "Cannot find file system superblock|Superblock check-hash failed" $log ||
+ grep -qiE "super-?block.*failed" $log ||
break
done
usedasb=1
@@ -144,7 +148,8 @@ while [ $((`date +%s` - start)) -lt 60 ]; do
break
done
mount | grep -q "on $mp2 " && umount $mp2
-mdconfig -d -u $u2 || exit 1
+mdconfig -l | grep -q "md$u2" &&
+ mdconfig -d -u $u2
echo "$cleans cleans, $reruns reruns, $asbs alternate SBs."
if [ $clean -ne 1 ]; then
@@ -153,8 +158,9 @@ if [ $clean -ne 1 ]; then
cp -v $log /tmp
[ $s -eq 0 ] && s=106
fi
-echo * | grep -q core && { ls -l *.core; cp $log /tmp; exit 106; } ||
- rm -f $backup
+[ -f fsck_ffs.core ] &&
+ mv fsck_ffs.core $core
+[ $s -eq 0 ] && rm -f $backup
cd /tmp
umount $mp1
mdconfig -d -u $u1
diff --git a/tools/test/stress2/misc/fsck10.sh b/tools/test/stress2/misc/fsck10.sh
new file mode 100755
index 000000000000..33ad35f65f11
--- /dev/null
+++ b/tools/test/stress2/misc/fsck10.sh
@@ -0,0 +1,172 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Variation of fsck9.sh with smaller disk size and newfs options '', 'U' and 'O1'
+# fsck_ffs core dump 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 -e
+prog=$(basename "$0" .sh)
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+mp2=${mntpoint}$u2
+mkdir -p $mp1 $mp2
+log=$mp1/$prog.sh.log
+diskimage=$mp1/$prog.sh.diskimage
+backup=/tmp/$prog.sh.diskimage.`date +%Y%m%dT%H%M%S`.gz
+cleans=0
+reruns=0
+
+# Pick a random newfs flag
+newfs_flags=$(echo "" "-U" "-O1" | awk -v N=`jot -r 1 1 3` '{print $N}')
+[ $# -eq 1 ] && newfs_flags="$1" # or use script argument
+max=$((512 * 1024))
+
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 1g -u $u1
+newfs $newfs_flags -n /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$max count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+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() {
+ local i
+
+ clean=0
+ rerun=0
+ fsck_ffs -fy $1 > $log 2>&1
+ r=$?
+ if grep -qiE "super-?block.*failed" $log; then
+ for b in $backups; do
+ echo "fsck_ffs -b $b -fy $1"
+ fsck_ffs -b $b -fy $1 > $log 2>&1
+ r=$?
+ grep -qiE "super-?block.*failed" $log ||
+ break
+ echo "Checking next SB"
+ done
+ usedasb=1
+ else
+ usedasb=0
+ fi
+ LANG=C egrep -q "[A-Z][A-Z]" $log && clean=0
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log && clean=1
+ grep -q RERUN $log && rerun=1
+ [ $r -ne 0 -a $clean -eq 1 ] && echo "Exit code $r w/ clean == 1"
+}
+
+cd $mp1
+clean=0
+errors=0
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount /dev/md$u2 $mp2 || break
+ if ! ls -lR $mp2 > /dev/null; then
+ s=102
+ echo "ls failed"; grep "core dumped" /var/log/messages | tail -1
+ break
+ fi
+ rm -f $mp2/????????
+ touch $mp2/`jot -rc 8 a z | tr -d '\n'`
+ mkdir -p $mp2/dir/dir/dir/dir
+ echo "abc" > $mp2/dir/dir/dir/dir/f
+ while mount | grep -q "on $mp2 "; do umount $mp2; done
+ echo * | grep -q core && break
+ mdconfig -d -u $u2
+
+ # Introduce 5 random single bit errors to the file system image
+ /tmp/flip -n 5 $diskimage
+
+ sync; sleep .1
+ if [ `stat -f%z $diskimage` -gt $max ]; then
+ ls -lh $diskimage
+ truncate -s $max $diskimage
+ else
+ gzip < $diskimage > $backup
+ fi
+ fsync $backup
+ sync; sleep .1
+
+ for i in `jot 5`; do
+ [ $i -gt 2 ] && echo "fsck run #$i"
+ chk $diskimage
+ [ $rerun -eq 1 ] && { reruns=$((reruns + 1)); continue; }
+ [ $clean -eq 1 ] && { cleans=$((cleans + 1)); break; }
+ if [ -f fsck_ffs.core ]; then
+ tstamp=`date +%Y%m%dT%H%M%S`
+ gzip < $backup > /tmp/fsck_ffs.core.diskimage.$tstamp
+ gzip < fsck_ffs.core > /tmp/fsck_ffs.core.$tstamp
+ break 2
+ fi
+ done
+ if [ $clean -eq 1 ]; then
+ fsck_ffs -fy $diskimage > $log 2>&1
+ if grep -q MODIFIED $log; then
+ echo "*** fsck of \"clean\" FS found more issues:"
+ cat $log
+ errors=$((errors + 1))
+ s=1
+ break
+ fi
+ fi
+ [ $clean -ne 1 ] && break
+ mdconfig -a -t vnode -f $diskimage -u $u2
+done
+for i in `jot 5`; do
+ mount | grep -q "on $mp2 " || break
+ umount $mp2 && break
+ sleep 2
+done
+mdconfig -l | grep -q $u2 && mdconfig -d -u $u2
+
+[ $s -eq 0 ] && rm -f $backup || echo "Preserved $backup due to status code $s"
+cd /tmp
+for i in `jot 5`; do
+ umount $mp1 && break
+ sleep 2
+done
+mdconfig -d -u $u1
+rm -f /tmp/flip
+exit $s
diff --git a/tools/test/stress2/misc/fsck11.sh b/tools/test/stress2/misc/fsck11.sh
new file mode 100755
index 000000000000..de4cf2536dad
--- /dev/null
+++ b/tools/test/stress2/misc/fsck11.sh
@@ -0,0 +1,171 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Demonstrate how the "CLEAN" message and the exit code can be misleading
+
+# "panic: softdep_update_inodeblock inconsistent ip ..." seen:
+# https://people.freebsd.org/~pho/stress/log/log0421.txt
+# https://people.freebsd.org/~pho/fsck11.sh.diskimage.20230228T064402.gz
+
+. ../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 -e
+prog=$(basename "$0" .sh)
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+mp2=${mntpoint}$u2
+mkdir -p $mp1 $mp2
+log=$mp1/$prog.sh.log
+diskimage=$mp1/$prog.sh.diskimage
+backup=/tmp/$prog.sh.diskimage.`date +%Y%m%dT%H%M%S`.gz
+cleans=0
+reruns=0
+
+# Pick a random newfs flag
+newfs_flags=$(echo "" "-U" "-O1" | awk -v N=`jot -r 1 1 3` '{print $N}')
+[ $# -eq 1 ] && newfs_flags="$1" # or use script argument
+max=$((2 * 1024 * 1024))
+[ "$newfs_flags" = "-j" ] && max=$((20 * 1024 * 1024)) # Make room for the journal file
+
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 1g -u $u1
+newfs $newfs_flags -n /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$max count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+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() {
+ local i
+
+ clean=0
+ rerun=0
+ fsck_ffs -fy $1 > $log 2>&1
+ r=$?
+ if grep -qiE "super-?block.*failed" $log; then
+ for b in $backups; do
+ echo "fsck_ffs -b $b -fy $1"
+ fsck_ffs -b $b -fy $1 > $log 2>&1
+ r=$?
+ grep -qiE "super-?block.*failed" $log ||
+ break
+ echo "Checking next SB"
+ done
+ usedasb=1
+ else
+ usedasb=0
+ fi
+ LANG=C egrep -q "[A-Z][A-Z]" $log && clean=0
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log && clean=1
+ grep -q RERUN $log && rerun=1
+ [ $r -ne 0 -a $clean -eq 1 ] && echo "Exit code $r w/ clean == 1"
+}
+
+cd $mp1
+clean=0
+errors=0
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount /dev/md$u2 $mp2 || break
+ if ! ls -lR $mp2 > /dev/null; then
+ s=102
+ echo "ls failed"; grep "core dumped" /var/log/messages | tail -1
+ break
+ fi
+
+ find $mp2 -type f | xargs cat > /dev/null
+ for j in `jot 9`; do
+ rm -rf $mp2/$j
+ mkdir $mp2/$j
+ jot 10 | xargs -P0 -I% cp /etc/group $mp2/$j/%
+ done 2>/dev/null
+
+ while mount | grep -q "on $mp2 "; do umount $mp2; done
+ echo * | grep -q core && break
+ mdconfig -d -u $u2
+
+ # Introduce 5 random single bit errors to the file system image
+ /tmp/flip -n 5 $diskimage
+
+ if [ `stat -f%z $diskimage` -gt $max ]; then
+ ls -lh $diskimage
+ truncate -s $max $diskimage
+ else
+ gzip < $diskimage > $backup
+ fi
+ fsync $backup
+ sync; sleep 1
+
+ [ "$newfs_flags" = "-j" ] &&
+ fsck -fy $diskimage > $log 2>&1 # process the journal file
+ for i in `jot 5`; do
+ [ $i -gt 2 ] && echo "fsck run #$i"
+ chk $diskimage
+ [ $rerun -eq 1 ] && { reruns=$((reruns + 1)); continue; }
+ [ $clean -eq 1 ] && { cleans=$((cleans + 1)); break; }
+ if [ -f fsck_ffs.core ]; then
+ tstamp=`date +%Y%m%dT%H%M%S`
+ gzip < $backup > /tmp/fsck_ffs.core.diskimage.$tstamp
+ gzip < fsck_ffs.core > /tmp/fsck_ffs.core.$tstamp
+ break 2
+ fi
+ done
+ [ $clean -ne 1 ] && { s=99; break; } # broken image?
+ mdconfig -a -t vnode -f $diskimage -u $u2
+done
+for i in `jot 5`; do
+ mount | grep -q "on $mp2 " || break
+ umount $mp2 && break
+ sleep 2
+done
+mdconfig -l | grep -q $u2 && mdconfig -d -u $u2
+
+[ $s -eq 0 ] && rm -f $backup || echo "Preserved $backup due to status code $s"
+cd /tmp
+for i in `jot 5`; do
+ umount $mp1 && break
+ sleep 2
+done
+mdconfig -d -u $u1
+rm -f /tmp/flip
+exit $s
diff --git a/tools/test/stress2/misc/fsck12.sh b/tools/test/stress2/misc/fsck12.sh
new file mode 100755
index 000000000000..da4629991705
--- /dev/null
+++ b/tools/test/stress2/misc/fsck12.sh
@@ -0,0 +1,175 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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: ffs_copyonwrite: bad copy block" seen:
+# Hunt for fsck_ffs's INTERNAL ERROR message
+
+# https://people.freebsd.org/~pho/stress/log/log0426.txt
+
+. ../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 -e
+prog=$(basename "$0" .sh)
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+mp2=${mntpoint}$u2
+mkdir -p $mp1 $mp2
+log=$mp1/$prog.sh.log
+diskimage=$mp1/$prog.sh.diskimage
+backup=/tmp/$prog.sh.diskimage.`date +%Y%m%dT%H%M%S`.gz
+cleans=0
+reruns=0
+
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 1g -u $u1
+newfs $newfs_flags -n /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+newfs_flags='-j'
+[ $# -eq 1 ] && newfs_flags="$1" # or use script argument
+max=$((2 * 1024 * 1024))
+[ "$newfs_flags" = "-j" ] && max=$((20 * 1024 * 1024)) # Make room for the journal file
+
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$max count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+backups=`newfs -N $newfs_flags md$u2 | grep -A1 "super-block backups" | \
+ tail -1 | sed 's/,//g'`
+echo "newfs $newfs_flags md$u2"
+newfs $newfs_flags md$u2 > /dev/null
+set +e
+
+chk() {
+ local i
+
+ clean=0
+ rerun=0
+ fsck_ffs -fy $1 > $log 2>&1
+ r=$?
+ grep "GOT TO reply" $log && exit 1
+ if grep -qiE "super-?block.*failed" $log; then
+ for b in $backups; do
+ echo "fsck_ffs -b $b -fy $1"
+ fsck_ffs -b $b -fy $1 > $log 2>&1
+ r=$?
+ grep "GOT TO reply" $log && exit 1
+ grep -qiE "super-?block.*failed" $log ||
+ break
+ echo "Checking next SB"
+ done
+ usedasb=1
+ else
+ usedasb=0
+ fi
+ LANG=C egrep -q "[A-Z][A-Z]" $log && clean=0
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log && clean=1
+ grep -q RERUN $log && rerun=1
+ [ $r -ne 0 -a $clean -eq 1 ] && echo "Exit code $r w/ clean == 1"
+}
+
+cd $mp1
+clean=0
+errors=0
+s=0
+sno=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount /dev/md$u2 $mp2 || break
+ if ! ls -lR $mp2 > /dev/null; then
+ s=102
+ echo "ls failed"; grep "core dumped" /var/log/messages | tail -1
+ break
+ fi
+ mkdir -p $mp2/d/d/d/d/d
+ cp /etc/group $mp2/d/d/d/d/d/f
+ for i in `jot 20`; do
+ cp -r $mp2/d $i
+ done
+
+ rm -f $mp2/.snap/$sno
+ mksnap_ffs $mp2 $mp2/.snap/$sno &
+ sno=$(((sno + 1) % 10))
+
+ sleep 1
+ rm -rf $mp/?
+ wait
+ while mount | grep -q "on $mp2 "; do umount $mp2; done
+ echo * | grep -q core && break
+ mdconfig -d -u $u2
+
+ # Introduce 5 random single bit errors to the file system image
+ /tmp/flip -n 5 $diskimage
+
+ if [ `stat -f%z $diskimage` -gt $max ]; then
+ ls -lh $diskimage
+ truncate -s $max $diskimage
+ else
+ gzip < $diskimage > $backup
+ fi
+ fsync $backup
+ sync; sleep 1
+
+ [ $newfs_flags = "-j" ] &&
+ fsck -fy $diskimage > $log 2>&1 # process the journal file
+ for i in `jot 5`; do
+ [ $i -gt 2 ] && echo "fsck run #$i"
+ chk $diskimage
+ [ $rerun -eq 1 ] && { reruns=$((reruns + 1)); continue; }
+ grep -q "MODIFIED" $log && continue # For now, do not trust CLEAN
+ [ $clean -eq 1 ] && { cleans=$((cleans + 1)); break; }
+ if [ -f fsck_ffs.core ]; then
+ s=1
+ break 2
+ fi
+ done
+ [ $clean -ne 1 ] && { s=99; break; } # broken image?
+ mdconfig -a -t vnode -f $diskimage -u $u2
+done
+for i in `jot 5`; do
+ mount | grep -q "on $mp2 " || break
+ umount $mp2 && break
+ sleep 2
+done
+mdconfig -l | grep -q $u2 && mdconfig -d -u $u2
+
+[ $s -eq 0 ] && rm -f $backup || echo "Preserved $backup due to status code $s"
+cd /tmp
+for i in `jot 5`; do
+ umount $mp1 && break
+ sleep 2
+done
+mdconfig -d -u $u1
+rm -f /tmp/flip
+exit $s
diff --git a/tools/test/stress2/misc/fsck13.sh b/tools/test/stress2/misc/fsck13.sh
new file mode 100755
index 000000000000..3b8dc64d12b9
--- /dev/null
+++ b/tools/test/stress2/misc/fsck13.sh
@@ -0,0 +1,153 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# fsck_ffs(8) disk image fuzz test.
+# Test without mount(8) and umount(8)
+
+. ../default.cfg
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+cc -o /tmp/flip -Wall -Wextra -O2 ../tools/flip.c || exit 1
+
+# Disable the calls to sync(2) in fsck_ffs(8) to speed up the test
+echo 'int sync(void) { return (0); }' > /tmp/fsck_preload.c
+mycc -o /tmp/fsck_preload.so -shared -fpic /tmp/fsck_preload.c || exit 1
+rm /tmp/fsck_preload.c
+
+set -eu
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+prog=$(basename "$0" .sh)
+mkdir -p $mp1
+
+max=$((2 * 1024 * 1024)) # Two alternate super blocks @ 192 and 2240
+i=`jot -r 1 1 3`
+[ $i -eq 1 ] && flags="-O2"
+[ $i -eq 2 ] && flags="-U"
+[ $i -eq 3 ] && { flags="-j"; max=$((8 * 1024 * 1024)); }
+
+backup=$mp1/$prog.diskimage.$flags.`date +%Y%m%dT%H%M%S`
+core=/tmp/$prog.core.`date +%Y%m%dT%H%M%S`
+diskimage=$mp1/$prog.diskimage
+log=$mp1/$prog.log
+
+asbs=0
+cleans=0
+reruns=0
+waccess=0
+
+set +e
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 10g -u $u1
+newfs $newfs_flags /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$max count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+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() {
+ local i
+
+ clean=0
+ rerun=0
+ waccess=0
+ LD_PRELOAD=/tmp/fsck_preload.so \
+ timeout 2m fsck_ffs -fy $1 > $log 2>&1
+ r=$?
+ if grep -qiE "super-?block.*failed" $log; then
+ for b in $backups; do
+ asbs=$((asbs + 1))
+ LD_PRELOAD=/tmp/fsck_preload.so \
+ timeout 2m fsck_ffs -b $b -fy $1 > $log 2>&1
+ r=$?
+ grep -qiE "super-?block.*failed" $log ||
+ break
+ done
+ usedasb=1
+ else
+ usedasb=0
+ fi
+ LANG=C egrep -q "[A-Z][A-Z]" $log && clean=0
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log && clean=1
+ # For now regard a "was modified" as a cause for a rerun,
+ # disregarding "clean" claim.
+ grep -Eq "WAS MODIFIED" $log && rerun=1
+ grep -q RERUN $log && rerun=1
+ grep -q "NO WRITE ACCESS" $log && waccess=1
+ [ $r -ne 0 -a $clean -eq 1 ] && echo "Exit code $r w/ clean == 1"
+}
+
+cd $mp1
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 60 ]; do
+ /tmp/flip -n 50 $diskimage
+
+ cp $diskimage $backup
+
+ for i in `jot 10`; do
+ chk $diskimage
+ [ $i -eq 1 -a "$flags" = "-j" ] && continue # First run processes the journal
+ [ $rerun -eq 1 ] && { reruns=$((reruns + 1)); continue; }
+ [ $clean -eq 1 ] && { cleans=$((cleans + 1)); break; }
+ [ -f fsck_ffs.core ] && { s=1; break 2; }
+ [ $r -eq 124 ] && { s=2; break 2; } # timeout
+ done
+ [ $clean -ne 1 ] && break
+ [ $r -ne 0 -a $clean -eq 1 ] &&
+ { echo "CLEAN && non zero exit code"; break; }
+ [ $clean -eq 1 ] && continue
+ [ $usedasb -eq 1 ] && { echo "Alt. SB failed"; s=104; }
+ [ $waccess -eq 1 ] && { echo "No write access"; s=105; }
+ break
+done
+
+echo "$cleans cleans, $reruns reruns, $asbs alternate SBs."
+if [ $clean -ne 1 ]; then
+ echo "FS still not clean. Last fsck_ffs exit code was $r."
+ [ $s -eq 0 ] && s=106
+fi
+grep -q "Superblock check-hash failed" $log && s=0 # Ignore for now
+grep -q "is not a file system superblock" $log && s=0 # Ignore for now
+[ $s -ne 0 ] && { gzip $backup; cp -v $backup.gz /tmp; }
+cd /tmp
+umount $mp1
+mdconfig -d -u $u1
+rm -f /tmp/flip /tmp/fsck_preload.so
+exit $s
diff --git a/tools/test/stress2/misc/fsck14.sh b/tools/test/stress2/misc/fsck14.sh
new file mode 100755
index 000000000000..ddeb45a83e96
--- /dev/null
+++ b/tools/test/stress2/misc/fsck14.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# fsck -B test scenario with SUJ. -B implies "preen mode".
+
+# 'panic: ffs_blkfree_cg: bad size' seen:
+# https://people.freebsd.org/~pho/stress/log/log0465.txt
+# Fixed by: 220427da0e9b - Set UFS/FFS file type to snapshot before changing
+# its block pointers.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+mycc -o /tmp/flip -Wall -Wextra ../tools/flip.c || exit 2
+
+set -e
+md=/dev/md$mdstart
+prog=$(basename "$0" .sh)
+backup=/tmp/$prog.sh.diskimage.`date +%Y%m%dT%H%M%S`.gz
+log=/tmp/$prog.sh.log
+[ -c $md ] && mdconfig -d -u $mdstart
+dd if=/dev/zero of=$diskimage bs=128m count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $mdstart
+backups=`newfs -N $j $md | grep -A1 "super-block backups" | \
+ tail -1 | sed 's/,//g'`
+newfs -j $md > /dev/null 2>&1
+mount $md $mntpoint
+set +e
+
+jot 5000 | xargs -P0 -I% touch $mntpoint/a%
+while ! umount $mntpoint; do :; done
+/tmp/flip -n 10 $diskimage
+gzip < $diskimage > $backup
+fsync $diskimage $backup
+
+mount -f $md $mntpoint
+
+if ! fsck_ffs -B $md > $log 2>&1; then
+ grep MANUALLY $log
+ umount $mntpoint
+ fsck_ffs -fy $md > $log 2>&1; s=$?
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log || {
+ cat $log
+ echo "fsck_ffs -f failed with exit code $s"
+ umount $mntpoint; mdconfig -d -u $mdstart
+ rm -f $log /tmp/flip $diskimage $backup
+ exit 1
+ }
+ mount $md $mntpoint
+fi
+
+jot 5000 | xargs -P0 -I% rm $mntpoint/a%
+jot 5000 | xargs -P0 -I% touch $mntpoint/b%
+
+ls -lR $mntpoint > /dev/null || {
+ echo "ls -lR $mntpoint failed after fsck -B"
+ umount $mntpoint; mdconfig -d -u $mdstart
+ rm -f $log /tmp/flip $diskimage $backup
+ exit 0 # For now, ignore non fatal errors
+}
+
+jot 5000 | xargs -P0 -I% rm $mntpoint/b% || {
+ echo "clean failed"
+ umount $mntpoint; mdconfig -d -u $mdstart
+ rm -f $log /tmp/flip $diskimage $backup
+ exit 0 # For now, ignore non fatal errors
+}
+umount $mntpoint
+
+r=0
+for i in `jot 4`; do
+ fsck_ffs -fy $diskimage > $log 2>&1; r=$?
+ if grep -qiE "super-?block.*failed" $log; then
+ for b in $backups; do
+ echo "fsck_ffs -b $b -fy $diskimage"
+ fsck_ffs -b $b -fy $diskimage > $log 2>&1
+ r=$?
+ grep -qiE "super-?block.*failed" $log ||
+ break
+ echo "Checking next SB"
+ done
+ fi
+ [ $r -ne 0 ] && continue
+ grep -Eq "WAS MODIFIED" $log && continue
+ grep -Eq "CLEAN" $log && break
+done
+mount $md $mntpoint || exit 3
+ls -lR $mntpoint > /dev/null || { umount $mntpoint; mdconfig -d -u mdstart; echo "exit 4"; exit 4; }
+umount $mntpoint
+fsck_ffs -fy $md > $log 2>&1
+grep -Eq 'IS CLEAN|MARKED CLEAN' $log && s=0 || { s=1; cat $log; }
+mdconfig -d -u $mdstart
+rm -f $log /tmp/flip $diskimage $backup
+exit $s
diff --git a/tools/test/stress2/misc/fsck2.sh b/tools/test/stress2/misc/fsck2.sh
index 313efec490d1..3287e240d338 100755
--- a/tools/test/stress2/misc/fsck2.sh
+++ b/tools/test/stress2/misc/fsck2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/fsck3.sh b/tools/test/stress2/misc/fsck3.sh
index f9bd29017e35..39ebd112fccf 100755
--- a/tools/test/stress2/misc/fsck3.sh
+++ b/tools/test/stress2/misc/fsck3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/fsck4.sh b/tools/test/stress2/misc/fsck4.sh
index 3e97f7b54340..feb955ac3231 100755
--- a/tools/test/stress2/misc/fsck4.sh
+++ b/tools/test/stress2/misc/fsck4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/fsck5.sh b/tools/test/stress2/misc/fsck5.sh
index 35381c8c55e7..5ffded87d95e 100755
--- a/tools/test/stress2/misc/fsck5.sh
+++ b/tools/test/stress2/misc/fsck5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/fsck6.sh b/tools/test/stress2/misc/fsck6.sh
index e1c5a4f36559..5d86b9d59ed2 100755
--- a/tools/test/stress2/misc/fsck6.sh
+++ b/tools/test/stress2/misc/fsck6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/fsck7.sh b/tools/test/stress2/misc/fsck7.sh
index ab83f6ad0166..9662393e1df6 100755
--- a/tools/test/stress2/misc/fsck7.sh
+++ b/tools/test/stress2/misc/fsck7.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/fsck8.sh b/tools/test/stress2/misc/fsck8.sh
new file mode 100755
index 000000000000..9613fe72173e
--- /dev/null
+++ b/tools/test/stress2/misc/fsck8.sh
@@ -0,0 +1,179 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# fsck_ffs(8) disk image fuzz test. SB focus.
+
+# panic: wrong length 4098 for sectorsize 512
+# FreeBSD 14.0-CURRENT #0 main-n255602-51adf913e8815: Fri May 13 07:55:32 CEST 2022
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+
+. ../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 -e
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+mp2=${mntpoint}$u2
+mkdir -p $mp1 $mp2
+log=$mp1/fsck8.sh.log
+diskimage=$mp1/fsck8.sh.diskimage
+backup=/tmp/fsck8.sh.diskimage.`date +%Y%m%dT%H%M%S`.gz
+asbs=0
+cleans=0
+reruns=0
+waccess=0
+
+max=$((10 * 1024 * 1024))
+# UFS1 or UFS2 SU:
+[ `jot -r 1 0 1` -eq 0 ] && newfs_flags='-O 1' || newfs_flags='-O 2 -U'
+
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 1g -u $u1
+newfs $newfs_flags -n /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$max count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+backups=`newfs -N $newfs_flags md$u2 | grep -A1 "super-block backups" | \
+ tail -1 | sed 's/,//g'`
+newfs $newfs_flags -n md$u2 > /dev/null
+mount /dev/md$u2 $mp2
+[ -d /usr/include/sys ] && cp -r /usr/include/sys $mp2
+umount $mp2
+set +e
+
+chk() {
+ local i
+
+ clean=0
+ rerun=0
+ waccess=0
+ timeout 5m fsck_ffs -fy $1 > $log 2>&1
+ r=$?
+ if grep -qiE "super-?block.*failed" $log; then
+ for b in $backups; do
+ echo "Using alternate SB $b"
+ asbs=$((asbs + 1))
+ fsck_ffs -b $b -fy $1 > $log 2>&1
+ r=$?
+ grep -qiE "super-?block.*failed" $log ||
+ break
+ done
+ usedasb=1
+ else
+ usedasb=0
+ fi
+ LANG=C egrep -q "[A-Z][A-Z]" $log && clean=0
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log && clean=1
+ # For now regard a "was modified" as a cause for a rerun,
+ # disregarding the "clean" claim.
+ grep -Eq "WAS MODIFIED" $log && rerun=1
+ grep -q RERUN $log && rerun=1
+ grep -q "NO WRITE ACCESS" $log && waccess=1
+ [ $r -ne 0 -a $clean -eq 1 ] && echo "Exit code $r w/ clean == 1"
+}
+
+cd $mp1
+clean=0
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount /dev/md$u2 $mp2 || break
+ ls -lR $mp2 > /dev/null || { s=102; echo "ls failed"; break; }
+ touch $mp2/`jot -rc 8 a z | tr -d '\n'`
+ while mount | grep -q "on $mp2 "; do umount $mp2; done
+ echo * | grep -q core && break
+ sync
+ mdconfig -d -u $u2
+ # SBLOCK = 64k, SBLOCKSIZE = 8k
+ /tmp/flip -n 5 -s $(((64 + 8) * 1024)) $diskimage
+
+ sync
+ if [ `stat -f%z $diskimage` -gt $max ]; then
+ ls -lh $diskimage
+ truncate -s $max $diskimage
+ else
+ gzip < $diskimage > $backup
+ fi
+ fsync $backup
+ sync
+
+ for i in `jot 5`; do
+ [ $i -gt 2 ] && echo "fsck run #$i"
+ chk $diskimage
+ [ $rerun -eq 1 ] && { reruns=$((reruns + 1)); continue; }
+ [ $clean -eq 1 ] && { cleans=$((cleans + 1)); break; }
+ [ -f fsck_ffs.core ] &&
+ { cp -v $diskimage \
+ /tmp/fsck_ffs.core.diskimage.`date +%Y%m%dT%H%M%S`; break 2; }
+ done
+ [ $clean -ne 1 ] && break
+ mdconfig -a -t vnode -f $diskimage -u $u2
+ [ $r -ne 0 -a $clean -eq 1 ] &&
+ { echo "CLEAN && non zero exit code"; break; }
+ [ $clean -eq 1 ] && continue
+ [ $usedasb -eq 1 ] && { echo "Alt. SB failed"; s=104; }
+ [ $waccess -eq 1 ] && { echo "No write access"; s=105; }
+ break
+done
+sleep 2 # Wait for /dev to catch up
+[ -c /dev/md$u2 ] && r1=1 || r1=0
+for i in `jot 5`; do
+ mount | grep -q "on $mp2 " || break
+ umount $mp2 && break
+ sleep 2
+done
+mdconfig -d -u $u2 2>/dev/null # XXX when mount fails
+
+echo "$cleans cleans, $reruns reruns, $asbs alternate SBs."
+if [ $clean -ne 1 ]; then
+ echo "FS still not clean. Last fsck_ffs exit code was $r."
+ echo =================
+ cat $log
+ echo =================
+ cp -v $log /tmp
+ [ $s -eq 0 ] && s=106
+fi
+echo * | grep -q core && { ls -l *.core; cp -v $log /tmp; exit 106; } ||
+ rm -f $backup
+[ $s -eq 101 ] && rm -f $backup # mount error breakout
+cd /tmp
+for i in `jot 5`; do
+ umount $mp1 && break
+ sleep 2
+done
+mdconfig -d -u $u1
+rm -f /tmp/flip
+exit $s
diff --git a/tools/test/stress2/misc/fsck9.sh b/tools/test/stress2/misc/fsck9.sh
new file mode 100755
index 000000000000..bbb10609ea67
--- /dev/null
+++ b/tools/test/stress2/misc/fsck9.sh
@@ -0,0 +1,168 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# fsck_ffs(8) false CLEAN claim scenario
+
+# https://people.freebsd.org/~pho/fsck9.sh.diskimage.20220716T150359.txt
+# https://people.freebsd.org/~pho/fsck9.sh.diskimage.20220716T150359.gz
+
+# https://people.freebsd.org/~pho/fsck9.sh.diskimage.20220716T172428.txt
+# https://people.freebsd.org/~pho/fsck9.sh.diskimage.20220716T172428.gz
+
+. ../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 -e
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+mp2=${mntpoint}$u2
+mkdir -p $mp1 $mp2
+log=$mp1/fsck9.sh.log
+diskimage=$mp1/fsck9.sh.diskimage
+backup=/tmp/fsck9.sh.diskimage.`date +%Y%m%dT%H%M%S`.gz
+cleans=0
+reruns=0
+
+max=$((10 * 1024 * 1024))
+newfs_flags='-U'
+
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 1g -u $u1
+newfs $newfs_flags -n /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$max count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+backups=`newfs -N $newfs_flags md$u2 | grep -A1 "super-block backups" | \
+ tail -1 | sed 's/,//g'`
+newfs $newfs_flags -n md$u2 > /dev/null
+mount /dev/md$u2 $mp2
+[ -d /usr/include/sys ] && cp -r /usr/include/sys $mp2
+umount $mp2
+set +e
+
+chk() {
+ local i
+
+ clean=0
+ rerun=0
+ fsck_ffs -fy $1 > $log 2>&1
+ r=$?
+ if grep -qiE "super-?block.*failed" $log; then
+ for b in $backups; do
+ echo "fsck_ffs -b $b -fy $1"
+ fsck_ffs -b $b -fy $1 > $log 2>&1
+ r=$?
+ grep -qiE "super-?block.*failed" $log ||
+ break
+ echo "Checking next SB"
+ done
+ usedasb=1
+ else
+ usedasb=0
+ fi
+ LANG=C egrep -q "[A-Z][A-Z]" $log && clean=0
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log && clean=1
+ grep -q RERUN $log && rerun=1
+ [ $r -ne 0 -a $clean -eq 1 ] && echo "Exit code $r w/ clean == 1"
+}
+
+cd $mp1
+clean=0
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount /dev/md$u2 $mp2 || break
+ if ! ls -lR $mp2 > /dev/null; then
+ s=102
+ echo "ls failed"; grep "core dumped" /var/log/messages | tail -1
+ break
+ fi
+ touch $mp2/`jot -rc 8 a z | tr -d '\n'`
+ while mount | grep -q "on $mp2 "; do umount $mp2; done
+ echo * | grep -q core && break
+ sync
+ mdconfig -d -u $u2
+ /tmp/flip -n 5 $diskimage
+
+ sync
+ if [ `stat -f%z $diskimage` -gt $max ]; then
+ ls -lh $diskimage
+ truncate -s $max $diskimage
+ else
+ gzip < $diskimage > $backup
+ fi
+ fsync $backup
+ sync
+
+ for i in `jot 5`; do
+ [ $i -gt 2 ] && echo "fsck run #$i"
+ chk $diskimage
+ [ $rerun -eq 1 ] && { reruns=$((reruns + 1)); continue; }
+ [ $clean -eq 1 ] && { cleans=$((cleans + 1)); break; }
+ [ -f fsck_ffs.core ] &&
+ { cp -v $diskimage \
+ /tmp/fsck_ffs.core.diskimage.`date +%Y%m%dT%H%M%S`; break 2; }
+ done
+ if [ $clean -eq 1 ]; then
+ fsck_ffs -fy $diskimage > $log 2>&1
+ if grep -q MODIFIED $log; then
+ echo "*** fsck of \"clean\" FS found more issues:"
+ cat $log
+ s=1
+ break
+ fi
+ fi
+ [ $clean -ne 1 ] && break
+ mdconfig -a -t vnode -f $diskimage -u $u2
+done
+sleep 2 # Wait for /dev to catch up
+[ -c /dev/md$u2 ] && r1=1 || r1=0
+for i in `jot 5`; do
+ mount | grep -q "on $mp2 " || break
+ umount $mp2 && break
+ sleep 2
+done
+mdconfig -d -u $u2 2>/dev/null # XXX when mount fails
+
+[ $s -eq 0 ] && rm -f $backup || echo "Preserved $backup due to status code $s"
+cd /tmp
+for i in `jot 5`; do
+ umount $mp1 && break
+ sleep 2
+done
+mdconfig -d -u $u1
+rm -f /tmp/flip
+exit $s
diff --git a/tools/test/stress2/misc/fstat.sh b/tools/test/stress2/misc/fstat.sh
index 441065f8e769..72e90d631e6d 100755
--- a/tools/test/stress2/misc/fstat.sh
+++ b/tools/test/stress2/misc/fstat.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/fsync2.sh b/tools/test/stress2/misc/fsync2.sh
index f2e846c4aa20..009fe9542f07 100755
--- a/tools/test/stress2/misc/fsync2.sh
+++ b/tools/test/stress2/misc/fsync2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/fsync3.sh b/tools/test/stress2/misc/fsync3.sh
new file mode 100755
index 000000000000..f220d19b8c24
--- /dev/null
+++ b/tools/test/stress2/misc/fsync3.sh
@@ -0,0 +1,156 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Regression test for D37997: ffs_syncvnode(): avoid a LoR for SU
+# https://people.freebsd.org/~pho/stress/log/log0402.txt
+# Fixed by 6e1eabadcb1d - main - ffs_syncvnode(): avoid a LoR for SU
+
+# Test scenario based on report by jkim
+
+. ../default.cfg
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+dir=/tmp
+odir=`pwd`
+prog=$(basename "$0" .sh)
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/$prog.c
+mycc -o $prog -Wall -Wextra -O0 -g $prog.c -lpthread || exit 1
+rm -f $prog.c
+cd $odir
+
+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 1g -u $mdstart
+newfs -U md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+cd $odir
+../testcases/swap/swap -t 1m -i 20 -l 100 > /dev/null &
+sleep .5
+cd $mntpoint
+mkdir -p d1/d2/d3/d4/d5
+for i in `jot 8`; do
+ $dir/$prog $i &
+done
+cd $odir
+wait
+
+for i in `jot 6`; do
+ mount | grep -q "on $mntpoint " || break
+ umount $mntpoint && break || sleep 10
+ [ $i -eq 6 ] &&
+ { echo FATAL; fstat -mf $mntpoint; exit 1; }
+done
+mdconfig -d -u $mdstart
+rm -rf $dir/$prog
+exit 0
+EOF
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <pthread_np.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define RUNTIME 60
+
+static time_t start;
+static volatile int fd, n;
+static char buf[4096];
+
+static void *
+t1(void *data __unused)
+{
+ char *path = "d1/d2/d3/d4/d5";
+ char d1[1024], d2[1024], file[1024];
+
+ pthread_set_name_np(pthread_self(), __func__);
+ snprintf(d1, sizeof(d1), "%s/dir.%d", path, getpid());
+ snprintf(d2, sizeof(d2), "%s/new.%d", path, getpid());
+ snprintf(file, sizeof(file), "%s/../file.%d", path, getpid());
+ while (time(NULL) - start < RUNTIME) {
+ if (mkdir(d1, 0740) == -1)
+ err(1, "mkdir(%s)", d1);
+ if (rename(d1, d2) == -1)
+ err(1, "rename(%s, %s)", d1, d2);
+ if ((fd = open(file, O_RDWR | O_CREAT | O_TRUNC, 0600)) == -1)
+ err(1, "open%s()", file);
+ if (write(fd, buf, sizeof(buf)) != sizeof(buf))
+ err(1, "write()");
+ close(fd);
+ if (rename(d2, d1) == -1)
+ err(1, "rename(%s, %s)", d2, d1);
+ if (rmdir(d1) == -1)
+ err(1, "rmdir(%s)", d1);
+ }
+
+ return (NULL);
+}
+
+static void *
+t2(void *data __unused)
+{
+ pthread_set_name_np(pthread_self(), __func__);
+ while (time(NULL) - start < RUNTIME) {
+ fsync(fd);
+ usleep(arc4random() % 500);
+ }
+
+ return (NULL);
+}
+
+int
+main(int argc __unused, char *argv[])
+{
+ pthread_t tid[2];
+ int r;
+
+ n = atoi(argv[1]);
+ start = time(NULL);
+ if ((r = pthread_create(&tid[0], NULL, t1, NULL)) != 0)
+ errc(1, r, "pthread_create");
+ if ((r = pthread_create(&tid[1], NULL, t2, NULL)) != 0)
+ errc(1, r, "pthread_create");
+
+ if ((r = pthread_join(tid[0], NULL)) != 0)
+ errc(1, r, "pthread_join");
+ if ((r = pthread_join(tid[1], NULL)) != 0)
+ errc(1, r, "pthread_join");
+
+ return (0);
+}
diff --git a/tools/test/stress2/misc/fsync4.sh b/tools/test/stress2/misc/fsync4.sh
new file mode 100755
index 000000000000..ac08dd6dff49
--- /dev/null
+++ b/tools/test/stress2/misc/fsync4.sh
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Regression test for D38114: Handle ERELOOKUP from VOP_FSYNC()
+
+# "fsync4: msync(0x82d3cc000), file d1/d2/d3/d4/d5/../file.92660:
+# Input/output error" seen
+
+# Fixed by: 6189672e6008 - main - Handle ERELOOKUP from VOP_FSYNC() in
+# several other places
+
+. ../default.cfg
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+dir=/tmp
+odir=`pwd`
+pids=""
+prog=$(basename "$0" .sh)
+s=0
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/$prog.c
+mycc -o $prog -Wall -Wextra -O0 -g $prog.c || exit 1
+rm -f $prog.c
+cd $odir
+
+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 1g -u $mdstart
+newfs -U md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+cd $odir
+../testcases/swap/swap -t 1m -i 20 -l 100 > /dev/null &
+sleep .5
+cd $mntpoint
+mkdir -p d1/d2/d3/d4/d5
+for i in `jot 8`; do
+ $dir/$prog $i &
+ pids="$pids $!"
+done
+cd $odir
+for pid in $pids; do
+ wait $pid
+ [ $? -ne 0 ] && s=1
+done
+
+for i in `jot 6`; do
+ mount | grep -q "on $mntpoint " || break
+ umount $mntpoint && break || sleep 10
+ [ $i -eq 6 ] &&
+ { echo FATAL; fstat -mf $mntpoint; exit 1; }
+done
+mdconfig -d -u $mdstart
+rm -rf $dir/$prog
+exit $s
+EOF
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+
+
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define RUNTIME 60
+#define SIZ (1024 * 1024)
+
+static time_t start;
+
+int
+main(void)
+{
+ size_t len;
+ int fd, i, ps;
+ char *cp;
+ char *path = "d1/d2/d3/d4/d5";
+ char d1[1024], d2[1024], file[1024];
+
+ snprintf(d1, sizeof(d1), "%s/dir.%d", path, getpid());
+ snprintf(d2, sizeof(d2), "%s/new.%d", path, getpid());
+ snprintf(file, sizeof(file), "%s/../file.%d", path, getpid());
+
+ start = time(NULL);
+ while (time(NULL) - start < RUNTIME) {
+ if (mkdir(d1, 0740) == -1)
+ err(1, "mkdir(%s)", d1);
+ if (rename(d1, d2) == -1)
+ err(1, "rename(%s, %s)", d1, d2);
+ if ((fd = open(file, O_RDWR | O_CREAT | O_TRUNC, 0600)) == -1)
+ err(1, "open%s()", file);
+ len = SIZ;
+ if (ftruncate(fd, len) == -1)
+ err(1, "ftruncate");
+ cp = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_SHARED, fd, 0);
+ if (cp == MAP_FAILED)
+ err(1, "mmap()");
+ ps = getpagesize();
+ for (i = 0; i < SIZ; i += ps)
+ cp[i] = 1;
+ if (msync(cp, 0, MS_SYNC) == -1)
+ err(1, "msync(%p), file %s", cp, file);
+ if (munmap(cp, len) == -1)
+ err(1, "unmap()");
+ close(fd);
+ if (rename(d2, d1) == -1)
+ err(1, "rename(%s, %s)", d2, d1);
+ if (rmdir(d1) == -1)
+ err(1, "rmdir(%s)", d1);
+ }
+
+ return (0);
+}
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/fullpath2.sh b/tools/test/stress2/misc/fullpath2.sh
index e4024c32f317..413f832420d4 100755
--- a/tools/test/stress2/misc/fullpath2.sh
+++ b/tools/test/stress2/misc/fullpath2.sh
@@ -123,7 +123,7 @@ static volatile u_int *share;
#define NB 1024
#define RUNTIME 300
-/* dtrace -w -n 'fbt::*vn_fullpath1:entry {@rw[execname,probefunc] = count(); }' */
+/* dtrace -n 'fbt::vn_fullpath:entry {@rw[execname,probefunc] = count(); }' */
static void
getfiles(pid_t pid)
diff --git a/tools/test/stress2/misc/geomleak2.sh b/tools/test/stress2/misc/geomleak2.sh
index 19b6f03d6333..1fc2405da66b 100755
--- a/tools/test/stress2/misc/geomleak2.sh
+++ b/tools/test/stress2/misc/geomleak2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/getrandom.sh b/tools/test/stress2/misc/getrandom.sh
index 3b2de3ec2a7a..402ff8a40544 100755
--- a/tools/test/stress2/misc/getrandom.sh
+++ b/tools/test/stress2/misc/getrandom.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/getrandom2.sh b/tools/test/stress2/misc/getrandom2.sh
index 941ffb737a6d..23eaa5aedb8e 100755
--- a/tools/test/stress2/misc/getrandom2.sh
+++ b/tools/test/stress2/misc/getrandom2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/gnop10.sh b/tools/test/stress2/misc/gnop10.sh
index 012104cbf9ed..5ab05280279c 100755
--- a/tools/test/stress2/misc/gnop10.sh
+++ b/tools/test/stress2/misc/gnop10.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -32,6 +32,10 @@
# Copy of gnop9.sh. Uses SU instead of SUJ.
+# https://people.freebsd.org/~pho/stress/log/log0269.txt
+# https://people.freebsd.org/~pho/stress/log/log0370.txt
+# https://people.freebsd.org/~pho/stress/log/log0396.txt
+
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
. ../default.cfg
diff --git a/tools/test/stress2/misc/gnop11.sh b/tools/test/stress2/misc/gnop11.sh
index 4d4f936bd8c6..48da18f1c425 100755
--- a/tools/test/stress2/misc/gnop11.sh
+++ b/tools/test/stress2/misc/gnop11.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Kirk McKusick <mckusick@mckusick.com>
#
diff --git a/tools/test/stress2/misc/gnop12.sh b/tools/test/stress2/misc/gnop12.sh
index d22a82b35a7e..1b5d311d7723 100755
--- a/tools/test/stress2/misc/gnop12.sh
+++ b/tools/test/stress2/misc/gnop12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/gnop13.sh b/tools/test/stress2/misc/gnop13.sh
new file mode 100755
index 000000000000..45668b9d8e82
--- /dev/null
+++ b/tools/test/stress2/misc/gnop13.sh
@@ -0,0 +1,138 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Snapshot test
+# Variation of force13.sh, but uses "gnop -f destroy"
+
+# Seen:
+# UFS: forcibly unmounting /dev/md10.nop from /mnt
+# panic: flush_pagedep_deps: failed to flush inodedep
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+log=/tmp/gnop13.sh.log
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+truncate -s 10g $diskimage
+mdconfig -a -t vnode -f $diskimage -u $mdstart
+flags=$newfs_flags
+[ `jot -r 1 0 1` -eq 1 ] && flags="-j"
+
+echo "newfs $flags md$mdstart"
+newfs $flags md$mdstart > /dev/null 2>&1
+
+# Exclude rename for now due to log0374.txt
+export TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
+ egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp|rename"`
+export runRUNTIME=3m
+export RUNDIR=$mntpoint/stressX
+export CTRLDIR=$mntpoint/stressX.control
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do
+ gnop create /dev/md$mdstart || exit 1
+ mount /dev/md$mdstart.nop $mntpoint || exit 1
+ rm -fr $mntpoint/lost+found
+ chmod 777 $mntpoint
+
+ su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
+ /dev/null 2>&1 &
+
+ t=`jot -r 1 60 120`
+ st=`date +%s`
+ for i in `jot 10`; do
+ [ -d $mntpoint/.snap ] || break
+ rm -f $mntpoint/.snap/$i
+ echo "mksnap_ffs $mntpoint $mntpoint/.snap/$i"
+ mksnap_ffs $mntpoint $mntpoint/.snap/$i
+ sleep `jot -r 1 1 5`
+ [ $((`date +%s` - st)) -ge $t ] && break
+ done &
+ sleep `jot -r 1 60 120`
+ while [ -c /dev/md$mdstart.nop ]; do
+ echo "gnop destroy -f /dev/md$mdstart.nop"
+ gnop destroy -f /dev/md$mdstart.nop || sleep 1
+ done
+ n=0
+ st=`date +%s`
+ while mount | grep -q "on $mntpoint "; do
+ [ $n -eq 0 ] && /bin/echo -n "Waiting for $mntpoint to force umount ..."
+ n=$((n + 1))
+ sleep 2
+ if [ $((`date +%s` - st)) -ge 180 ]; then
+ echo "Giving up on waiting for umount of $mntpoint"
+ umount $mntpoint || umount -f $mntpoint
+ break
+ fi
+ done
+ [ $n -ne 0 ] && echo
+
+ ../tools/killall.sh
+ wait
+ mount | grep -q "on $mntpoint " && umount -f $mntpoint
+ c=0
+ # Run fsck minimum two times
+ for i in `jot 5`; do
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1))
+ grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; }
+ [ $s -ne 0 ] && break
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=102; break; }
+done
+[ $s -eq 101 ] && s=0 # Ignore CLEANish problem for now
+if [ $s -eq 0 ]; then
+ mount /dev/md$mdstart.nop $mntpoint
+ cp -R /usr/include $mntpoint
+ dd if=/dev/zero of=$mntpoint/big bs=1m count=10 status=none
+ find $mntpoint/* -delete
+
+ # Check the RO snapshots
+ for f in $mntpoint/.snap/*; do
+ c=0
+ for i in `jot 5`; do
+ echo "fsck_ffs -fy $f"
+ fsck_ffs -fy $f > $log 2>&1; s=$?
+ grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1))
+ grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
+ done
+ [ $c -gt 1 ] &&
+ { echo "Note: snapshot $i marked clean+modified $c times out of $i fsck runs"; s=201; }
+ [ $s -ne 0 ] && break
+ grep -Eq "IS CLEAN|MARKED CLEAN" $log ||
+ { s=202; tail -10 $log; break; }
+ done
+ umount $mntpoint
+ mdconfig -d -u $mdstart
+ rm -f $diskimage $log
+fi
+exit $s
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/gnop6.sh b/tools/test/stress2/misc/gnop6.sh
index 63301d8fe841..4d32f584662e 100755
--- a/tools/test/stress2/misc/gnop6.sh
+++ b/tools/test/stress2/misc/gnop6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/gnop7.sh b/tools/test/stress2/misc/gnop7.sh
index 3f3118ff0fab..76008aabe925 100755
--- a/tools/test/stress2/misc/gnop7.sh
+++ b/tools/test/stress2/misc/gnop7.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/gnop8.sh b/tools/test/stress2/misc/gnop8.sh
index 6916c14e41f4..e9067c8c8066 100755
--- a/tools/test/stress2/misc/gnop8.sh
+++ b/tools/test/stress2/misc/gnop8.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Kirk McKusick <mckusick@mckusick.com>
#
diff --git a/tools/test/stress2/misc/gnop9.sh b/tools/test/stress2/misc/gnop9.sh
index 0389391398f3..12c6fff0a3bf 100755
--- a/tools/test/stress2/misc/gnop9.sh
+++ b/tools/test/stress2/misc/gnop9.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/gpt.sh b/tools/test/stress2/misc/gpt.sh
index 51b4ba39afda..5c1818921321 100755
--- a/tools/test/stress2/misc/gpt.sh
+++ b/tools/test/stress2/misc/gpt.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/growfs2.sh b/tools/test/stress2/misc/growfs2.sh
new file mode 100755
index 000000000000..0990f71423a3
--- /dev/null
+++ b/tools/test/stress2/misc/growfs2.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# growfs(8) test with output to FS to be grown.
+# A regression test for D37896 ufs/suspend: deny suspension if calling
+# process has file from mp opened for write
+# Before D37896 this would result in growfs(8) hanging.
+
+. ../default.cfg
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+log=/tmp/growfs2.sh.log
+s=0
+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 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 $newfs_flags md${mdstart}p1 > /dev/null
+mount /dev/md${mdstart}p1 $mntpoint
+cp -r /usr/include $mntpoint/inc1
+
+gpart resize -i 1 -s 31g -a 4k md$mdstart
+echo "Expect: growfs: UFSSUSPEND: Resource deadlock avoided"
+growfs -y md${mdstart}p1 > $mntpoint/log && s=1 || s=0
+
+cp -r /usr/include $mntpoint/inc2
+umount $mntpoint
+fsck -fy /dev/md${mdstart}p1 > $log 2>&1
+grep -q "WAS MODIFIED" $log && s=2
+grep -q CLEAN $log || s=3
+[ $s -ne 0 ] && cat $log
+
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
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/gunion.sh b/tools/test/stress2/misc/gunion.sh
index c7d376e5409e..ceecc55b2f13 100755
--- a/tools/test/stress2/misc/gunion.sh
+++ b/tools/test/stress2/misc/gunion.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -50,7 +50,10 @@ cp -r ../../stress2 $mp1
umount $mp1
mdconfig -a -t swap -s 5g -u $md2
-gunion create -v /dev/md$md2 /dev/md$md1
+set +e
+gunion create -v /dev/md$md2 /dev/md$md1; s=$?
+[ $s -ne 0 ] && echo "gunion create returned $s"
+set -e
mount /dev/md$md2-md$md1.union $mntpoint
export RUNDIR=$mntpoint/stressX
@@ -71,7 +74,7 @@ for i in `jot 6`; do
done
fsck_ffs -fyR /dev/md$md2-md$md1.union > $log 2>&1
grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=2; cat $log; }
-set +e
+set -e
gunion commit /dev/md$md2-md$md1.union
gunion list | egrep Block\|Current | egrep -v 0 && s=3
gunion destroy /dev/md$md2-md$md1.union
diff --git a/tools/test/stress2/misc/gunion2.sh b/tools/test/stress2/misc/gunion2.sh
index a8fe180c48af..0d14c17b24eb 100755
--- a/tools/test/stress2/misc/gunion2.sh
+++ b/tools/test/stress2/misc/gunion2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -50,7 +50,10 @@ cp -r ../../stress2 $mp1
umount $mp1
mdconfig -a -t swap -s 5g -u $md2
-gunion create -v /dev/md$md2 /dev/md$md1
+set +e
+gunion create -v /dev/md$md2 /dev/md$md1; s=$?
+[ $s -ne 0 ] && echo "gunion create returned $s"
+set -e
mount /dev/md$md2-md$md1.union $mntpoint
export CTRLDIR=$mntpoint/stressX.control
@@ -79,7 +82,7 @@ testcases/swap/swap
"
export TESTPROGS=`echo $TESTPROGS | sed 's/\n/ /g'`
-set +e
+set -e
chmod 777 $mntpoint
su $testuser -c \
"(cd $mntpoint/stress2; ./testcases/run/run $TESTPROGS)"
diff --git a/tools/test/stress2/misc/holdcnt05.sh b/tools/test/stress2/misc/holdcnt05.sh
index efafa984bdd8..fa6c7b4bd628 100755
--- a/tools/test/stress2/misc/holdcnt05.sh
+++ b/tools/test/stress2/misc/holdcnt05.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/ifconfig.sh b/tools/test/stress2/misc/ifconfig.sh
index 7b3c7e317ec3..0fe768d8c53c 100755
--- a/tools/test/stress2/misc/ifconfig.sh
+++ b/tools/test/stress2/misc/ifconfig.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/ifconfig2.sh b/tools/test/stress2/misc/ifconfig2.sh
index 273db43a329d..77b0d4860647 100755
--- a/tools/test/stress2/misc/ifconfig2.sh
+++ b/tools/test/stress2/misc/ifconfig2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/indir.sh b/tools/test/stress2/misc/indir.sh
index d2d28cd650ab..1f0b873833ee 100755
--- a/tools/test/stress2/misc/indir.sh
+++ b/tools/test/stress2/misc/indir.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/indir_trunc.sh b/tools/test/stress2/misc/indir_trunc.sh
index 64c11f3570ee..e7f1b7cb4fe6 100755
--- a/tools/test/stress2/misc/indir_trunc.sh
+++ b/tools/test/stress2/misc/indir_trunc.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/jexec.sh b/tools/test/stress2/misc/jexec.sh
index c5c2ab605e08..00fb17a27a92 100755
--- a/tools/test/stress2/misc/jexec.sh
+++ b/tools/test/stress2/misc/jexec.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/jumbo.sh b/tools/test/stress2/misc/jumbo.sh
index 8dcc5aa7aca3..a2d09bafaa82 100755
--- a/tools/test/stress2/misc/jumbo.sh
+++ b/tools/test/stress2/misc/jumbo.sh
@@ -131,7 +131,7 @@ reader(void) {
if ((buf = malloc(MX)) == NULL)
err(1, "malloc(%d), %s:%d", MX, __FILE__, __LINE__);
setproctitle("reader");
- for (i = 4096; i < MX; i += 1024) {
+ for (i = sysconf(_SC_PAGESIZE); i < MX; i += 1024) {
alarm(TIMEOUT);
if ((n = recvfrom(msgsock, buf, i, MSG_WAITALL, NULL,
NULL)) < 0) {
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/kern_umtx_inf_loop.sh b/tools/test/stress2/misc/kern_umtx_inf_loop.sh
index b8088814d7b2..2c4d99149480 100755
--- a/tools/test/stress2/misc/kern_umtx_inf_loop.sh
+++ b/tools/test/stress2/misc/kern_umtx_inf_loop.sh
@@ -46,7 +46,6 @@ EOF
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
#include <sys/types.h>
#include <machine/cpufunc.h>
diff --git a/tools/test/stress2/misc/kevent10.sh b/tools/test/stress2/misc/kevent10.sh
index 6efdedfc28cd..b7f74f487cec 100755
--- a/tools/test/stress2/misc/kevent10.sh
+++ b/tools/test/stress2/misc/kevent10.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/kevent12.sh b/tools/test/stress2/misc/kevent12.sh
index 3ae0085f1e5d..1a022e2d1b47 100755
--- a/tools/test/stress2/misc/kevent12.sh
+++ b/tools/test/stress2/misc/kevent12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/kevent13.sh b/tools/test/stress2/misc/kevent13.sh
index 82a7a10b983c..0e2f8982f4ab 100755
--- a/tools/test/stress2/misc/kevent13.sh
+++ b/tools/test/stress2/misc/kevent13.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/kevent14.sh b/tools/test/stress2/misc/kevent14.sh
index 2531b15caecf..3cf88fd87ba7 100755
--- a/tools/test/stress2/misc/kevent14.sh
+++ b/tools/test/stress2/misc/kevent14.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/kevent15.sh b/tools/test/stress2/misc/kevent15.sh
index 52925365c865..56a3bc4fbd0a 100755
--- a/tools/test/stress2/misc/kevent15.sh
+++ b/tools/test/stress2/misc/kevent15.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/killpg2.sh b/tools/test/stress2/misc/killpg2.sh
new file mode 100755
index 000000000000..5e986f059637
--- /dev/null
+++ b/tools/test/stress2/misc/killpg2.sh
@@ -0,0 +1,197 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# killpg(2) version of reaper.sh. No problems seen.
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/wait.h>
+
+#include <err.h>
+#include <errno.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+static volatile u_int *share;
+
+#define CONT 0
+#define GID 1
+#define SYNC 2
+#define MAXP 10000
+
+static void
+hand(int i __unused) {
+ _exit(0);
+}
+
+static void
+looper(void)
+{
+ struct sigaction sa;
+ time_t start;
+ struct passwd *pw;
+ pid_t pids[MAXP];
+ int i, parallel;
+
+ setproctitle("looper");
+ sa.sa_handler = SIG_IGN;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
+ if (sigaction(SIGUSR1, &sa, NULL) == -1)
+ err(1, "sigaction");
+
+ if ((pw = getpwnam("TUSER")) == NULL)
+ err(1, "no such user: TUSER");
+
+ if (setgroups(1, &pw->pw_gid) ||
+ setegid(pw->pw_gid) || setgid(pw->pw_gid) ||
+ seteuid(pw->pw_uid) || setuid(pw->pw_uid))
+ err(1, "Can't drop privileges to \"TUSER\"");
+ endpwent();
+ setpgrp(0, 0);
+ share[GID] = getpgrp();
+ share[SYNC] = 1;
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ parallel = arc4random() % MAXP + 1;
+ for (i = 0; i < parallel; i++) {
+ if ((pids[i] = fork()) == 0) {
+ sa.sa_handler = hand;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
+ if (sigaction(SIGUSR1, &sa, NULL) == -1)
+ err(1, "sigaction");
+ setproctitle("child");
+ for (;;)
+ pause();
+ _exit(0); /* never reached */
+ }
+ if (pids[i] == -1)
+ err(1, "fork()");
+ }
+ for (i = 0; i < parallel; i++) {
+ if (waitpid(pids[i], NULL, 0) != pids[i])
+ err(1, "waitpid(%d) in looper", pids[i]);
+ }
+ }
+ _exit(0);
+}
+
+static void
+killer(void)
+{
+ int e, gid;
+
+ while (share[SYNC] == 0)
+ ;
+ gid = share[GID];
+ while (share[CONT] == 1) {
+ usleep(arc4random() % 50000);
+ gid = share[GID];
+ if (gid != 0) {
+ e = 0;
+ while (e == 0) {
+ if (killpg(gid, SIGUSR1) == -1) {
+ e = 1;
+ if (errno != ESRCH)
+ err(1, "pgkill(%d)", gid);
+ }
+ usleep(5000 + arc4random() % 5000);
+ }
+ }
+ }
+ _exit(0);
+}
+
+int
+main(void)
+{
+ size_t len;
+ time_t start;
+ int lpid, kpid, s1, s2;
+
+ 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 < 120) {
+ share[CONT] = 1;
+ share[GID] = 0;
+ share[SYNC] = 0;
+ if ((lpid = fork()) == 0)
+ looper();
+ usleep(arc4random() % 100000);
+ if ((kpid = fork()) == 0)
+ killer();
+
+ if (waitpid(lpid, &s1, 0) != lpid)
+ err(1, "waitpid looper");
+ usleep(arc4random() % 1000);
+ share[CONT] = 0;
+ waitpid(kpid, &s2, 0);
+ }
+
+ return (0);
+}
+EOF
+sed -i '' "s#TUSER#$testuser#" /tmp/$prog.c
+cc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+rm /tmp/$prog.c
+
+n=1
+start=`date +%s`
+while true; do
+ /tmp/$prog
+ for i in `jot 50`; do
+ pgrep -q $prog || break
+ sleep .5
+ done
+ if pgrep -q $prog; then
+ e=$((`date +%s` - start))
+ echo "Failed in loop #$n after $e seconds."
+ pgrep "$prog|timeout" | xargs ps -jp
+ pkill $prog
+ rm -f /tmp/$prog
+ exit 1
+ fi
+ [ $((`date +%s` - start)) -ge 600 ] && break
+ n=$((n + 1))
+done
+rm /tmp/$prog
+exit 0
diff --git a/tools/test/stress2/misc/killpg3.sh b/tools/test/stress2/misc/killpg3.sh
new file mode 100755
index 000000000000..304b3e320f2f
--- /dev/null
+++ b/tools/test/stress2/misc/killpg3.sh
@@ -0,0 +1,192 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# killpg(2) version of reaper.sh. No problems seen.
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/wait.h>
+
+
+#include <err.h>
+#include <errno.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdatomic.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+static _Atomic(int) *share;
+
+#define GID 0
+#define PARALLEL 10
+#define RDY 1
+#define MAXP 7000
+
+static void
+hand(int i __unused) {
+ _exit(0);
+}
+
+static void
+innerloop(int parallel)
+{
+ pid_t pids[MAXP];
+ struct sigaction sa;
+ int i;
+
+ usleep(1000);
+ for (i = 0; i < parallel; i++) {
+ if ((pids[i] = fork()) == 0) {
+ sa.sa_handler = hand;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
+ if (sigaction(SIGUSR1, &sa, NULL) == -1)
+ err(1, "sigaction");
+ atomic_fetch_add(&share[RDY], 1);
+ setproctitle("child");
+ for (;;)
+ pause();
+ _exit(0); /* never reached */
+ }
+ if (pids[i] == -1)
+ err(1, "fork()");
+ }
+ for (i = 0; i < parallel; i++) {
+ if (waitpid(pids[i], NULL, 0) != pids[i])
+ err(1, "waitpid(%d) in looper", pids[i]);
+ }
+ _exit(0);
+}
+
+static void
+looper(void)
+{
+ struct sigaction sa;
+ struct passwd *pw;
+ pid_t pids[MAXP];
+ int i, parallel;
+
+ setproctitle("looper");
+ sa.sa_handler = SIG_IGN;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
+ if (sigaction(SIGUSR1, &sa, NULL) == -1)
+ err(1, "sigaction");
+
+ if ((pw = getpwnam("TUSER")) == NULL)
+ err(1, "no such user: TUSER");
+
+ if (setgroups(1, &pw->pw_gid) ||
+ setegid(pw->pw_gid) || setgid(pw->pw_gid) ||
+ seteuid(pw->pw_uid) || setuid(pw->pw_uid))
+ err(1, "Can't drop privileges to \"TUSER\"");
+ endpwent();
+ setpgrp(0, 0);
+ share[GID] = getpgrp();
+ parallel = arc4random() % MAXP + 1;
+ parallel = parallel / PARALLEL * PARALLEL;
+ for (i = 0; i < PARALLEL; i++) {
+ if ((pids[i] = fork()) == 0)
+ innerloop(parallel / PARALLEL);
+ }
+ while (atomic_load(&share[RDY]) != parallel)
+ usleep(10000);
+ if (killpg(share[GID], SIGUSR1) == -1)
+ err(1, "pgkill(%d)", share[GID]);
+ for (i = 0; i < 4; i++) {
+ if (waitpid(pids[i], NULL, 0) != pids[i])
+ err(1, "waitpid(%d) in looper", pids[i]);
+ }
+ _exit(0);
+}
+
+int
+main(void)
+{
+ size_t len;
+ time_t start;
+ int lpid, s1;
+
+ 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 < 120) {
+ share[GID] = 0;
+ share[RDY] = 0;
+ if ((lpid = fork()) == 0)
+ looper();
+ if (waitpid(lpid, &s1, 0) != lpid)
+ err(1, "waitpid looper");
+ }
+
+ return (0);
+}
+EOF
+sed -i '' "s#TUSER#$testuser#" /tmp/$prog.c
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+rm /tmp/$prog.c
+
+export MAXSWAPPCT=70
+n=1
+start=`date +%s`
+while true; do
+ ../testcases/swap/swap -t 2m -i 20 > /dev/null &
+ /tmp/$prog & pid=$!
+ st=`date +%s`
+ while kill -0 $pid > /dev/null 2>&1; do
+ e=$((`date +%s` - st))
+ if [ $e -ge 120 ]; then
+ while pgrep -q swap; do pkill swap; done
+ fi
+ if [ $e -ge 600 ]; then
+ echo "Failed in loop #$n after $e seconds."
+ ps -jU$testuser | head -20
+ kill $pid
+ pkill -U$testuser
+ wait
+ rm -f /tmp/$prog
+ exit 1
+ fi
+ done
+ wait
+ [ $((`date +%s` - start)) -ge 300 ] && break
+ n=$((n + 1))
+done
+rm /tmp/$prog
+exit 0
diff --git a/tools/test/stress2/misc/killpg4.sh b/tools/test/stress2/misc/killpg4.sh
new file mode 100755
index 000000000000..448a7f60dd4b
--- /dev/null
+++ b/tools/test/stress2/misc/killpg4.sh
@@ -0,0 +1,114 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Another killpg(2) test scenario. No problems seen.
+
+. ../default.cfg
+export prog=$(basename "$0" .sh)
+set -u
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/wait.h>
+#include <err.h>
+#include <time.h>
+#include <stdlib.h>
+#include <unistd.h>
+#define PARALLEL 2
+
+int
+test(void)
+{
+ pid_t pid;
+ time_t start;
+
+ start = time(NULL);
+ while (time(NULL) - start < 300) {
+ if ((pid = fork()) == -1)
+ err(1, "fork()");
+ if (pid == 0) {
+ if (arc4random() % 100 < 20)
+ usleep(arc4random() % 5000);
+ _exit(0); /* Not reached */
+ }
+ if (waitpid(pid, NULL, 0) != pid)
+ err(1, "waitpid()");
+ }
+ _exit(0);
+}
+
+int
+main(void)
+{
+ pid_t pids[PARALLEL];
+ int i;
+
+ for (i = 0; i < PARALLEL; i++) {
+ test();
+ }
+ for (i = 0; i < PARALLEL; i++) {
+ if (waitpid(pids[i], NULL, 0) != pids[i])
+ err(1, "waotpid() main");
+ }
+
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O2 /tmp/$prog.c || exit 1
+
+export MAXSWAPPCT=80
+../testcases/swap/swap -t 2m -i 5 > /dev/null 2>&1 &
+sleep .5
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ for i in `jot 200 100`; do
+ (
+ sl=$prog.$i
+ sleep=/tmp/$sl
+ cp /tmp/$prog $sleep
+ su $testuser -c "$sleep & $sleep & $sleep &" & pid=$!
+ for j in `jot 10`; do
+ pgrep -q "$sl" && break
+ sleep .5
+ done
+ pgrep -q "$sl" || { echo "No start"; exit 1; }
+ pgid=`pgrep "$sl" | xargs ps -jp | sed 1d | \
+ tail -1 | awk '{print $4}'`
+ [ -z "$pgid" ] && { echo "Zero pgid:$pgid"; ps aj | \
+ sed -n "1p;/$sl/p"; exit 1; }
+ sleep 1.`jot -r 1 2 9`
+ kill -- -$pgid || { echo "kill -$pgid failed"; exit 1; }
+ wait $pid
+ rm -f $sleep
+ ) &
+ done
+ while [ `ps -U$testuser | wc -l` -gt 1 ] ; do sleep 2; done
+done
+while pkill swap; do :; done
+wait
+rm /tmp/$prog /tmp/$prog.c
+exit 0
diff --git a/tools/test/stress2/misc/kpti.sh b/tools/test/stress2/misc/kpti.sh
index c5ca254a48d6..fdd516197482 100755
--- a/tools/test/stress2/misc/kpti.sh
+++ b/tools/test/stress2/misc/kpti.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/largepage.sh b/tools/test/stress2/misc/largepage.sh
index 7e492de748fa..6e7baeca0bfc 100755
--- a/tools/test/stress2/misc/largepage.sh
+++ b/tools/test/stress2/misc/largepage.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/ldt.sh b/tools/test/stress2/misc/ldt.sh
index 21c7055d76fe..7b23548c9eea 100755
--- a/tools/test/stress2/misc/ldt.sh
+++ b/tools/test/stress2/misc/ldt.sh
@@ -284,7 +284,6 @@ EOF
cat > fault.c <<EOF
/* \$Id: fault.c,v 1.5 2008/10/28 17:39:16 kostik Exp \$ */
-#include <sys/cdefs.h>
#include <sys/types.h>
#include <sys/ucontext.h>
#include <errno.h>
diff --git a/tools/test/stress2/misc/linux.sh b/tools/test/stress2/misc/linux.sh
index 1cbbfb8b27a1..9f5a14d8324f 100755
--- a/tools/test/stress2/misc/linux.sh
+++ b/tools/test/stress2/misc/linux.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mapwrite.sh b/tools/test/stress2/misc/mapwrite.sh
new file mode 100755
index 000000000000..1fef81942b64
--- /dev/null
+++ b/tools/test/stress2/misc/mapwrite.sh
@@ -0,0 +1,189 @@
+#!/bin/sh
+
+# File corruption scenario
+
+# Test program by Rob Norris <rob norris klarasystems com>
+# Test program obtained from: https://gist.github.com/robn/9804c60cd0275086d26893d73e7af35c
+# https://github.com/openzfs/zfs/issues/15654
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+/*
+ * Some kind of clone-related crasher. Not sure if legit or just outdated
+ * assertion.
+ *
+ * Creates clone, maps it, writes from map back into itself.
+ *
+ * Compile a recent (2.2+) ZFS with --enable-debug.
+ *
+ * cc -o mapwrite mapwrite.c
+ *
+ * echo 1 > /sys/modules/zfs/parameters/zfs_bclone_enabled
+ * zpool create tank ...
+ * cd /tank
+ * mapwrite
+ *
+ * [ 7.666305] VERIFY(arc_released(db->db_buf)) failed
+ * [ 7.666443] PANIC at dbuf.c:2150:dbuf_redirty()
+ * [ 7.666489] Showing stack for process 608
+ * [ 7.666534] CPU: 1 PID: 608 Comm: mapwrite Tainted: P O 5.10.170 #3
+ * [ 7.666610] Call Trace:
+ * [ 7.666646] dump_stack+0x57/0x6e
+ * [ 7.666717] spl_panic+0xd3/0xfb [spl]
+ * [ 7.667113] ? zfs_btree_find+0x16a/0x300 [zfs]
+ * [ 7.667278] ? range_tree_find_impl+0x55/0xa0 [zfs]
+ * [ 7.667333] ? _cond_resched+0x1a/0x50
+ * [ 7.667371] ? __kmalloc_node+0x14a/0x2b0
+ * [ 7.667415] ? spl_kmem_alloc_impl+0xb0/0xd0 [spl]
+ * [ 7.667555] ? __list_add+0x12/0x30 [zfs]
+ * [ 7.667681] spl_assert+0x17/0x20 [zfs]
+ * [ 7.667807] dbuf_redirty+0xad/0xb0 [zfs]
+ * [ 7.667963] dbuf_dirty+0xe76/0x1310 [zfs]
+ * [ 7.668011] ? mutex_lock+0xe/0x30
+ * [ 7.668133] ? dbuf_noread+0x112/0x240 [zfs]
+ * [ 7.668271] dmu_write_uio_dnode+0x101/0x1b0 [zfs]
+ * [ 7.668411] dmu_write_uio_dbuf+0x4a/0x70 [zfs]
+ * [ 7.668555] zfs_write+0x500/0xc80 [zfs]
+ * [ 7.668610] ? page_add_file_rmap+0xe/0xb0
+ * [ 7.668740] zpl_iter_write+0xe4/0x130 [zfs]
+ * [ 7.668803] new_sync_write+0x119/0x1b0
+ * [ 7.668843] vfs_write+0x1ce/0x260
+ * [ 7.668880] __x64_sys_pwrite64+0x91/0xc0
+ * [ 7.668918] do_syscall_64+0x30/0x40
+ * [ 7.668957] entry_SYSCALL_64_after_hwframe+0x61/0xc6
+ */
+
+#define _GNU_SOURCE
+
+#include <fcntl.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#define DATASIZE (1024*1024)
+char data[DATASIZE];
+
+#define NDATA (512)
+
+#define FILE_NAME "file"
+#define CLONE_NAME "clone"
+
+static int
+_create_file(void)
+{
+ memset(data, 0x5a, DATASIZE);
+
+ int fd;
+ if ((fd = open(FILE_NAME, O_RDWR | O_CREAT | O_APPEND,
+ S_IRUSR | S_IWUSR)) < 0) {
+ perror("open '" FILE_NAME "'");
+ abort();
+ }
+
+ for (int i = 0; i < NDATA; i++) {
+ int nwr = write(fd, data, DATASIZE);
+ if (nwr < 0) {
+ perror("write");
+ abort();
+ }
+ if (nwr < DATASIZE) {
+ fprintf(stderr, "short write\n");
+ abort();
+ }
+ }
+
+ if (lseek(fd, 0, SEEK_SET) < 0) {
+ perror("lseek");
+ abort();
+ }
+
+ sync();
+
+ return (fd);
+}
+
+static int
+_clone_file(int sfd)
+{
+ int dfd;
+ if ((dfd = open(CLONE_NAME, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) < 0) {
+ perror("open '" CLONE_NAME "'");
+ abort();
+ }
+
+ if (copy_file_range(sfd, 0, dfd, 0, DATASIZE * NDATA, 0) < 0) {
+ perror("copy_file_range");
+ abort();
+ }
+
+ return (dfd);
+}
+
+static void *
+_map_file(int fd)
+{
+ void *p = mmap(NULL, DATASIZE*NDATA, PROT_READ, MAP_SHARED, fd, 0);
+ if (p == MAP_FAILED) {
+ perror("mmap");
+ abort();
+ }
+
+ return (p);
+}
+
+static void
+_map_write(void *p, int fd)
+{
+ if (pwrite(fd, p, DATASIZE, 0) < 0) {
+ perror("pwrite");
+ abort();
+ }
+}
+
+int
+main(void)
+{
+ int sfd = _create_file();
+ int dfd = _clone_file(sfd);
+ void *p = _map_file(dfd);
+ _map_write(p, dfd);
+ return (0);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O2 /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 5g -u $mdstart
+
+newfs -n $newfs_flags /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+mycc -o /tmp/swap -Wall -Wextra -O0 ../tools/swap.c || exit 1
+timeout -k 90 60 /tmp/swap -d 100 &
+for i in `jot 10`; do
+ capacity=`swapinfo | tail -1 | sed 's/.* //; s/%//'`
+ [ $capacity -gt 1 ] && break
+ sleep 2 # Wait for swapping
+done
+
+cd $mntpoint
+/tmp/$prog; s=$?
+pkill swap
+wait
+cmp $mntpoint/file $mntpoint/clone || { echo Fail; s=1; }
+cd -
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/marcus6.sh b/tools/test/stress2/misc/marcus6.sh
index 1a209b2256ee..e541a552233e 100755
--- a/tools/test/stress2/misc/marcus6.sh
+++ b/tools/test/stress2/misc/marcus6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/marcus7.sh b/tools/test/stress2/misc/marcus7.sh
index e196a1e60269..ac34c5419a14 100755
--- a/tools/test/stress2/misc/marcus7.sh
+++ b/tools/test/stress2/misc/marcus7.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
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/mdconfig3.sh b/tools/test/stress2/misc/mdconfig3.sh
index 7fbdcbc1a5ff..5c145e34cc6d 100755
--- a/tools/test/stress2/misc/mdconfig3.sh
+++ b/tools/test/stress2/misc/mdconfig3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mdconfig4.sh b/tools/test/stress2/misc/mdconfig4.sh
index c8e0530741c0..284ce1b08045 100755
--- a/tools/test/stress2/misc/mdconfig4.sh
+++ b/tools/test/stress2/misc/mdconfig4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/mdconfig5.sh b/tools/test/stress2/misc/mdconfig5.sh
index b0b25cc5d64b..b3ecd913bc4b 100755
--- a/tools/test/stress2/misc/mdconfig5.sh
+++ b/tools/test/stress2/misc/mdconfig5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm
#
diff --git a/tools/test/stress2/misc/midi.sh b/tools/test/stress2/misc/midi.sh
index 47594734b4e0..de9161e262ca 100755
--- a/tools/test/stress2/misc/midi.sh
+++ b/tools/test/stress2/misc/midi.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Mark Johnston <markj@freebsd.org>
#
diff --git a/tools/test/stress2/misc/midi2.sh b/tools/test/stress2/misc/midi2.sh
index 91f15aa3cc3b..80a485437dbb 100755
--- a/tools/test/stress2/misc/midi2.sh
+++ b/tools/test/stress2/misc/midi2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mincore.sh b/tools/test/stress2/misc/mincore.sh
index 85c09cc0ceaf..8f42971144a7 100755
--- a/tools/test/stress2/misc/mincore.sh
+++ b/tools/test/stress2/misc/mincore.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/minherit.sh b/tools/test/stress2/misc/minherit.sh
index facb018a0337..ba5b0d9d1aeb 100755
--- a/tools/test/stress2/misc/minherit.sh
+++ b/tools/test/stress2/misc/minherit.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Peter Holm
#
diff --git a/tools/test/stress2/misc/mkdir.sh b/tools/test/stress2/misc/mkdir.sh
new file mode 100755
index 000000000000..734b8994ad4e
--- /dev/null
+++ b/tools/test/stress2/misc/mkdir.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Demonstrate incorrect "out of inodes" message with SU enabled.
+# No issue seen with SU+J
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+s=0
+mount | grep -q "on $mntpoint " && umount $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+
+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
+
+ifree1=`df -i $mntpoint | tail -1 | awk '{print $7}'`
+before=`df -i $mntpoint`
+n=$(((ifree1 - 5) / 10))
+jot 10 | xargs -I% mkdir $mntpoint/%
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 180 ]; do
+ for j in `jot 10`; do
+ jot $n | xargs -P0 -I% mkdir $mntpoint/$j/%
+ jot $n | xargs -P0 -I% rmdir $mntpoint/$j/%
+ done
+done 2>&1 | tee $log | head -5
+[ -s $log ] && s=3
+jot 10 | xargs -I% rmdir $mntpoint/%
+umount $mntpoint; mount /dev/md$mdstart $mntpoint
+
+ifree2=`df -i $mntpoint | tail -1 | awk '{print $7}'`
+after=`df -i $mntpoint | tail -1`
+if [ $ifree1 -ne $ifree2 ]; then
+ echo "$before"
+ echo "$after"
+ s=1
+ ls -alsrt $mntpoint | head -20
+fi
+
+umount $mntpoint
+fsck -fy /dev/md$mdstart > $log 2>&1
+grep -Eq "WAS MODIFIED" $log && { s=2; cat $log; }
+
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
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/mkfifo8.sh b/tools/test/stress2/misc/mkfifo8.sh
index 6227070f016e..eeed86bd98ec 100755
--- a/tools/test/stress2/misc/mkfifo8.sh
+++ b/tools/test/stress2/misc/mkfifo8.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
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/mlockall6.sh b/tools/test/stress2/misc/mlockall6.sh
index 33b20ce3137a..b47f9be9bb1e 100755
--- a/tools/test/stress2/misc/mlockall6.sh
+++ b/tools/test/stress2/misc/mlockall6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
@@ -30,6 +30,9 @@
# "panic: Lock (rw) vm object not locked @ vm/vm_page.c:1013" seen:
# https://people.freebsd.org/~pho/stress/log/mlockall6-2.txt
+# "panic: vm_page_unwire: wire count underflow for page..." seen:
+# https://people.freebsd.org/~pho/stress/log/log0430.txt
+
. ../default.cfg
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/mmap10.sh b/tools/test/stress2/misc/mmap10.sh
index a29768c36691..0bb7845f4d15 100755
--- a/tools/test/stress2/misc/mmap10.sh
+++ b/tools/test/stress2/misc/mmap10.sh
@@ -40,18 +40,22 @@ sed '1,/^EOF/d' < $here/$0 > mmap10.c
mycc -o mmap10 -Wall -Wextra -O2 -g mmap10.c -lpthread || exit 1
rm -f mmap10.c
-daemon sh -c "(cd $here/../testcases/swap; ./swap -t 2m -i 20 -k)"
+daemon sh -c "(cd $here/../testcases/swap; ./swap -t 2m -i 20 -k > /dev/null)"
+ulimit -c 0
sleep `jot -r 1 0 9`
for i in `jot 2`; do
- /tmp/mmap10 &
+ su $testuser -c /tmp/mmap10 &
done
-sleep 300
+start=`date +%s`
while pgrep -q mmap10; do
- pkill -9 mmap10
+ [ $((`date +%s` - start)) -ge 300 ] && break
+ sleep 2
+done
+while pgrep -q 'mmap10|swap'; do
+ pkill -9 mmap10 swap
sleep 2
done
wait
-killall -q swap
rm -f /tmp/mmap10 /tmp/mmap10.core
exit 0
@@ -76,6 +80,7 @@ EOF
#define N (128 * 1024 / (int)sizeof(u_int32_t))
#define PARALLEL 50
+static int debug = 0; /* set to "1" for debug output */
void *p;
u_int32_t r[N];
@@ -169,7 +174,7 @@ tmlock(void *arg __unused)
if (munlock(makeptr(), len) == 0)
n++;
}
- if (n < 10)
+ if (debug == 1 && n < 10)
fprintf(stderr, "Note: tmlock() only succeeded %d times.\n",
n);
@@ -193,7 +198,7 @@ tmprotect(void *arg __unused)
n++;
usleep(1000);
}
- if (n < 10)
+ if (debug == 1 && n < 10)
fprintf(stderr, "Note: tmprotect() only succeeded %d times.\n",
n);
@@ -215,7 +220,7 @@ tmlockall(void *arg __unused)
munlockall();
usleep(1000);
}
- if (n < 10)
+ if (debug == 1 && n < 10)
fprintf(stderr, "Note: tmlockall() only succeeded %d times.\n",
n);
diff --git a/tools/test/stress2/misc/mmap18.sh b/tools/test/stress2/misc/mmap18.sh
index 065b5bb7df6c..f2b19c07fe60 100755
--- a/tools/test/stress2/misc/mmap18.sh
+++ b/tools/test/stress2/misc/mmap18.sh
@@ -89,6 +89,7 @@ EOF
static u_int32_t r[N];
static void *p;
+static int debug; /* set to 1 for debug output */
static unsigned long
makearg(void)
@@ -176,11 +177,9 @@ tmlock(void *arg __unused)
if (munlock(makeptr(), len) == 0)
n++;
}
-#if defined(DEBUG)
- if (n < 10)
+ if (debug != 0 && n < 10)
fprintf(stderr, "Note: tmlock() only succeeded %d "
"times.\n", n);
-#endif
return (NULL);
}
@@ -202,11 +201,9 @@ tmprotect(void *arg __unused)
n++;
usleep(1000);
}
-#if defined(DEBUG)
- if (n < 10)
+ if (debug != 0 && n < 10)
fprintf(stderr, "Note: tmprotect() only succeeded %d "
"times.\n", n);
-#endif
return (NULL);
}
@@ -226,11 +223,9 @@ tmlockall(void *arg __unused)
munlockall();
usleep(1000);
}
-#if defined(DEBUG)
- if (n < 10)
+ if (debug != 0 && n < 10)
fprintf(stderr, "Note: tmlockall() only succeeded %d "
"times.\n", n);
-#endif
return (NULL);
}
diff --git a/tools/test/stress2/misc/mmap32.sh b/tools/test/stress2/misc/mmap32.sh
index a775b756084e..334327a85989 100755
--- a/tools/test/stress2/misc/mmap32.sh
+++ b/tools/test/stress2/misc/mmap32.sh
@@ -62,6 +62,7 @@ EOF
#include <unistd.h>
#define N 4096
+static int debug; /* set to 1 for debug output */
static uint32_t r[N];
static unsigned long
@@ -133,10 +134,8 @@ fuzz(int arg, void *addr, size_t len, int prot, int flags, int fd,
n++;
}
}
-#if defined(DEBUG)
- if (n == 0 && arg != 5)
+ if (debug != 0 &&n == 0 && arg != 5)
fprintf(stderr, "%s(%d) failed\n", __func__, arg);
-#endif
exit(0);
}
diff --git a/tools/test/stress2/misc/mmap33.sh b/tools/test/stress2/misc/mmap33.sh
index de7262c1bf1f..8ecd9e22180b 100755
--- a/tools/test/stress2/misc/mmap33.sh
+++ b/tools/test/stress2/misc/mmap33.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/mmap34.sh b/tools/test/stress2/misc/mmap34.sh
index 02bd193421b9..f1bf09200d8a 100755
--- a/tools/test/stress2/misc/mmap34.sh
+++ b/tools/test/stress2/misc/mmap34.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mmap35.sh b/tools/test/stress2/misc/mmap35.sh
index 6e76434e77ec..f613b7006a89 100755
--- a/tools/test/stress2/misc/mmap35.sh
+++ b/tools/test/stress2/misc/mmap35.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mmap36.sh b/tools/test/stress2/misc/mmap36.sh
index 89fc6721fbeb..4a38d5073344 100755
--- a/tools/test/stress2/misc/mmap36.sh
+++ b/tools/test/stress2/misc/mmap36.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mmap37.sh b/tools/test/stress2/misc/mmap37.sh
index f5e25a282927..9d5f9d74c1c7 100755
--- a/tools/test/stress2/misc/mmap37.sh
+++ b/tools/test/stress2/misc/mmap37.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mmap38.sh b/tools/test/stress2/misc/mmap38.sh
index b4cf60afe25b..06ff8770f36f 100755
--- a/tools/test/stress2/misc/mmap38.sh
+++ b/tools/test/stress2/misc/mmap38.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/mmap39.sh b/tools/test/stress2/misc/mmap39.sh
index f4b97717624b..d94b40593a10 100755
--- a/tools/test/stress2/misc/mmap39.sh
+++ b/tools/test/stress2/misc/mmap39.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/mmap40.sh b/tools/test/stress2/misc/mmap40.sh
index 4bf60fc8f44d..2314596e2f5d 100755
--- a/tools/test/stress2/misc/mmap40.sh
+++ b/tools/test/stress2/misc/mmap40.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
@@ -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/mmap41.sh b/tools/test/stress2/misc/mmap41.sh
new file mode 100755
index 000000000000..5051681aaf31
--- /dev/null
+++ b/tools/test/stress2/misc/mmap41.sh
@@ -0,0 +1,160 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Based on code from https://syzkaller.appspot.com/text?tag=ReproC&x=15d9baada80000
+# No problems seen
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+odir=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $odir/$0 > $prog.c
+mycc -o $prog -Wall -Wextra -O0 $prog.c -lpthread || exit 1
+rm -f $prog.c
+
+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 2g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+$odir/../testcases/swap/swap -t 2m -i 10 > /dev/null &
+cd $mntpoint
+/tmp/$prog
+cd $odir
+while pkill swap; do :; done
+wait
+
+for i in `jot 6`; do
+ mount | grep -q "on $mntpoint " || break
+ umount $mntpoint && break || sleep 10
+ [ $i -eq 6 ] &&
+ { echo FATAL; fstat -mf $mntpoint; exit 1; }
+done
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog
+exit 0
+
+EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/uio.h>
+#include <sys/wait.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define DEBUG 0 /* 1 to enable */
+#define THREADS 2
+
+static volatile int go;
+static int fd;
+static char *p, path[128];
+
+#define ADDR (void *) 0x20000000ul
+#define LEN 0x1000000ul
+
+void *
+thr(void *arg)
+{
+ struct iovec iov;
+ long n, w;
+ char *p1;
+
+ if (*(int *)arg == 0) {
+ while (go == 0)
+ usleep(100);
+ while (go == 1) {
+ if ((p1 = mmap(ADDR, LEN, PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0)) == MAP_FAILED)
+ err(1, "mmap() in %s", __func__);
+ usleep(arc4random() % 50);
+ if ((p1 = mmap(ADDR, LEN, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0)) == MAP_FAILED)
+ err(1, "mmap() in %s", __func__);
+ usleep(arc4random() % 10000);
+ }
+ } else {
+ while (go == 0)
+ usleep(100);
+ n = w = 0;
+ while (go == 1) {
+ iov.iov_base = p;
+ iov.iov_len = 0x100000;
+ if (pwritev(fd, &iov, 1, 0) != -1)
+ w++;
+ n++;
+ }
+ if (DEBUG == 1)
+ fprintf(stderr, "%ld out of %ld writes (%ld%%)\n", w, n, w * 100 / n);
+ }
+
+
+ return (0);
+}
+
+void
+test(void)
+{
+ pthread_t threads[THREADS];
+ int nr[THREADS];
+ int i, r;
+
+ sprintf(path, "mmap.%06d", getpid());
+ if ((fd = open(path, O_CREAT | O_TRUNC | O_RDWR, 0622)) == -1)
+ err(1,"open()");
+
+
+ if ((p = mmap(ADDR, LEN, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0)) == MAP_FAILED)
+ err(1, "mmap() in %s", __func__);
+
+ go = 0;
+ for (i = 0; i < THREADS; i++) {
+ nr[i] = i;
+ if ((r = pthread_create(&threads[i], NULL, thr,
+ (void *)&nr[i])) != 0)
+ errc(1, r, "pthread_create()");
+ }
+
+ go = 1;
+ sleep(60);
+ go = 2;
+
+ for (i = 0; i < THREADS; i++) {
+ if ((r = pthread_join(threads[i], NULL)) != 0)
+ errc(1, r, "pthread_join(%d)", i);
+ }
+ close(fd);
+ if (DEBUG == 0) {
+ if (unlink(path) == -1)
+ err(1, "unlink(%s)", path);
+ }
+
+ _exit(0);
+}
+
+int
+main(void)
+{
+ pid_t pid;
+ int i;
+
+ for (i = 0; i < 2; i++) {
+ if ((pid = fork()) == 0)
+ test();
+ if (waitpid(pid, NULL, 0) != pid)
+ err(1, "waitpid()");
+ }
+}
diff --git a/tools/test/stress2/misc/mmap42.sh b/tools/test/stress2/misc/mmap42.sh
new file mode 100755
index 000000000000..11235e581e73
--- /dev/null
+++ b/tools/test/stress2/misc/mmap42.sh
@@ -0,0 +1,101 @@
+#!/bin/sh
+
+# Test scenario by: kib@
+# Test program obtained from Kyle Evans <kevans@FreeBSD.org>
+
+# Demonstrate UFS SU file corruption:
+# ffs: on write into a buffer without content
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+s=0
+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 "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
+
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 32m -u $mdstart
+
+pagesize=$(sysctl -n hw.pagesize)
+newfs -Un -b $pagesize /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+dd if=/dev/random of=/mnt/file.orig bs=${pagesize} count=1 status=none
+cp $mntpoint/file.orig $mntpoint/file
+cat $mntpoint/file $mntpoint/file > $mntpoint/file.post
+umount $mntpoint
+
+mount /dev/md$mdstart $mntpoint
+(cd $mntpoint; /tmp/$prog)
+
+if ! cmp $mntpoint/file $mntpoint/file.post; then
+ echo "Files differ"
+ ls -l $mntpoint/file $mntpoint/file.post
+ s=1
+fi
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/mmap43.sh b/tools/test/stress2/misc/mmap43.sh
new file mode 100755
index 000000000000..8508d5865aef
--- /dev/null
+++ b/tools/test/stress2/misc/mmap43.sh
@@ -0,0 +1,187 @@
+#!/bin/sh
+
+# Test program obtained from Kyle Evans <kevans@FreeBSD.org>
+
+# Demonstrate UFS SU file corruption
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+log=`dirname $diskimage`/$prog.log
+rm -f $log
+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 "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
+
+cat > /tmp/$prog.serial.c <<EOF
+/* Fill a file with sequential numbers */
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, char *argv[])
+{
+ size_t i, size;
+ long ix, *lp;
+ int fd;
+ char *file;
+
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <file> <file length in bytes>\n", argv[0]);
+ exit(1);
+ }
+ file = argv[1];
+ size = atol(argv[2]);
+
+ if ((fd = open(file, O_RDWR | O_CREAT | O_TRUNC, 0600)) < 0)
+ err(1, "%s", file);
+
+ if (lseek(fd, size - 1, SEEK_SET) == -1)
+ err(1, "lseek error");
+
+ /* write a dummy byte at the last location */
+ if (write(fd, "\0", 1) != 1)
+ err(1, "write error");
+
+ if ((lp = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED)
+ err(1, "mmap()");
+
+ for (i = 0, ix = 0; i < size; i += sizeof(long), ix++)
+ lp[ix] = ix;
+
+ if (munmap(lp, size) == -1)
+ err(1, "munmap");
+ close(fd);
+}
+EOF
+mycc -o /tmp/$prog.serial -Wall -Wextra -O0 /tmp/$prog.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
+
+here=`pwd`
+cd $mntpoint
+
+size=875998990
+pagesize=`sysctl -n hw.pagesize`
+tail=$((size % pagesize))
+/tmp/$prog.serial file $size
+
+cat file file > file.post
+mv file file.orig
+md5=`md5 < file.post`
+
+cp /usr/bin/sort /tmp/$prog.sort
+counter=1
+n=$((`sysctl -n hw.ncpu`))
+[ $n -gt 10 ] && n=10
+s=0
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ st=`date +%s`
+ cp file.orig file || {
+ # Workaround for known UFS SU ENOSPC issue
+ echo "Flush file system buffers and retry."
+ (cd $mntpoint; umount $mntpoint) > /dev/null 2>&1 # busy umount
+ cp file.orig file || exit 1
+ }
+ for i in `jot $n`; do
+ timeout -k 70s 1m /tmp/$prog.sort /dev/zero &
+ done
+ sleep $n
+ /tmp/$prog
+ while pkill $prog.sort; do sleep .2; done
+ wait
+ m=`md5 < file`
+ if [ $md5 != $m ]; then
+ echo "Failed @ iteration $counter"
+ ls -l
+ od -t x8 file > /var/tmp/$prog.file1
+ od -t x8 file.post > /var/tmp/$prog.file2
+ diff /var/tmp/$prog.file1 /var/tmp/$prog.file2 > $log
+ head -10 $log
+ rm /var/tmp/$prog.file1 /var/tmp/$prog.file2
+ s=1
+ break
+ fi
+ echo "`date +%T` Loop #$counter, elapsed $((`date +%s` - st)) seconds."
+ counter=$((counter + 1))
+done
+cd $here
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm /tmp/$prog /tmp/$prog.c /tmp/$prog.sort
+[ $s -eq 0 ] &&
+ printf "OK File size is %9d, tail is %4d bytes. (%3d loops)\n" $size $tail $counter ||
+ printf "FAIL File size is %9d, tail is %4d bytes. (%3d loops)\n" $size $tail $counter
+exit $s
diff --git a/tools/test/stress2/misc/mmap44.sh b/tools/test/stress2/misc/mmap44.sh
new file mode 100755
index 000000000000..f5999ac62536
--- /dev/null
+++ b/tools/test/stress2/misc/mmap44.sh
@@ -0,0 +1,255 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Demonstrate issue described in:
+# [Bug 276002] nfscl: data corruption using both copy_file_range and mmap'd I/O
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+grep -q $mntpoint /etc/exports ||
+ { echo "$mntpoint missing from /etc/exports"; 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);
+}
+
+static void *
+tr(void *arg __unused)
+{
+ int i, s;
+ char buf[1024];
+
+ memset(buf, 0x5a, sizeof(buf));
+ while (go == 1) {
+ pthread_mutex_lock(&write_mutex);
+ if (lseek(fd, arc4random() % siz, SEEK_END) == -1)
+ err(1, "lseek() END");
+ s = sizeof(buf);
+ for (i = 0; i < 50; i++) {
+ if (write(fd, buf, s) != s)
+ warn("write()");
+ }
+ if (ftruncate(fd, siz) == -1)
+ err(1, "truncate()");
+ pthread_mutex_unlock(&write_mutex);
+ usleep(arc4random() % 400);
+ }
+ return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ pthread_t tp[6];
+ 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, memread, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[2], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[3], NULL, s1, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[4], NULL, s2, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ if ((e = pthread_create(&tp[5], NULL, tr, 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 /tmp/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`
+mount | grep $mntpoint
+cd $mp2
+$here/../testcases/swap/swap -t 5m -i 20 > /dev/null &
+sleep 2
+
+size=262144
+/tmp/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 /tmp/serial /tmp/$prog /tmp/$prog.c $log
+exit $s
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/vmstat2.sh b/tools/test/stress2/misc/mount7.sh
index db3cb1a697e2..2489421c544d 100755
--- a/tools/test/stress2/misc/vmstat2.sh
+++ b/tools/test/stress2/misc/mount7.sh
@@ -1,9 +1,8 @@
#!/bin/sh
-
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
-# Copyright (c) 2019 Dell EMC Isilon
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -27,15 +26,40 @@
# SUCH DAMAGE.
#
-# "0xFFFFFFFFFFFFFFFF in vmstat output" seen.
+# 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
-(cd ../testcases/swap; ./swap -t 2m -i 20 -h -l 100 &)
-sleep .5
-s=0
-while pgrep -q swap; do
- vmstat -z | awk '{if (length($4) > 11) { print $0; exit 1}}' ||
- { pkill swap; s=1; }
- sleep 2
+mounts=15
+
+../testcases/swap/swap -t 2m -i 20 &
+for i in `jot $mounts $mdstart`; do
+ mdconfig -a -s 50m -u $i
+ newfs -U /dev/md$i > /dev/null
+ mkdir -p $mntpoint$i
+ start=`date +%s`
+ while [ $((`date +%s` - start)) -lt 120 ]; do
+ mount /dev/md$i $mntpoint$i && cp /etc/passwd $mntpoint$i
+ while mount | grep -q " on $mntpoint$i "; do
+ umount $mntpoint$i > /dev/null 2>&1
+ done
+ done &
+ while [ $((`date +%s` - start)) -lt 120 ]; do
+ find $mntpoint$i -ls > /dev/null 2>&1
+ done &
done
wait
+
+for i in `jot $mounts $mdstart`; do
+ mdconfig -d -u $i
+ rmdir $mntpoint$i
+done
exit $s
diff --git a/tools/test/stress2/misc/mountro4.sh b/tools/test/stress2/misc/mountro4.sh
index eddc345c85af..906639d9dc3a 100755
--- a/tools/test/stress2/misc/mountro4.sh
+++ b/tools/test/stress2/misc/mountro4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mountro5.sh b/tools/test/stress2/misc/mountro5.sh
index 67663df54145..bcc77694b6d0 100755
--- a/tools/test/stress2/misc/mountro5.sh
+++ b/tools/test/stress2/misc/mountro5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mountro6.sh b/tools/test/stress2/misc/mountro6.sh
index 398cbeed4fea..d19a73d76c4c 100755
--- a/tools/test/stress2/misc/mountro6.sh
+++ b/tools/test/stress2/misc/mountro6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/mountu.sh b/tools/test/stress2/misc/mountu.sh
index 838850ef3e96..abd3c744d160 100755
--- a/tools/test/stress2/misc/mountu.sh
+++ b/tools/test/stress2/misc/mountu.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2012 Peter Holm <pho@FreeBSD.org>
# Copyright (c) 2019 Dell EMC Isilon
diff --git a/tools/test/stress2/misc/mprotect.sh b/tools/test/stress2/misc/mprotect.sh
index e3e6e765c331..cdb3b2cccd13 100755
--- a/tools/test/stress2/misc/mprotect.sh
+++ b/tools/test/stress2/misc/mprotect.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Mark Johnston <markj@freebsd.org>
#
diff --git a/tools/test/stress2/misc/mprotect2.sh b/tools/test/stress2/misc/mprotect2.sh
index c5cdc44a0f39..6f8d0c3ce6fd 100755
--- a/tools/test/stress2/misc/mprotect2.sh
+++ b/tools/test/stress2/misc/mprotect2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
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/msdos11.sh b/tools/test/stress2/misc/msdos11.sh
index c14ef55f1f7c..023a16af08c7 100755
--- a/tools/test/stress2/misc/msdos11.sh
+++ b/tools/test/stress2/misc/msdos11.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/msdos12.sh b/tools/test/stress2/misc/msdos12.sh
index da5c8104c3a6..8e3984305cd7 100755
--- a/tools/test/stress2/misc/msdos12.sh
+++ b/tools/test/stress2/misc/msdos12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/msdos13.sh b/tools/test/stress2/misc/msdos13.sh
index 52c3d9ece686..2f714ba120a8 100755
--- a/tools/test/stress2/misc/msdos13.sh
+++ b/tools/test/stress2/misc/msdos13.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/msdos14.sh b/tools/test/stress2/misc/msdos14.sh
index 0f5b5b9ab736..aaa95144c14e 100755
--- a/tools/test/stress2/misc/msdos14.sh
+++ b/tools/test/stress2/misc/msdos14.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
@@ -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/msdos15.sh b/tools/test/stress2/misc/msdos15.sh
index 79e60972e34b..b07defd677af 100755
--- a/tools/test/stress2/misc/msdos15.sh
+++ b/tools/test/stress2/misc/msdos15.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/msdos16.sh b/tools/test/stress2/misc/msdos16.sh
index e188795e1851..965be8233881 100755
--- a/tools/test/stress2/misc/msdos16.sh
+++ b/tools/test/stress2/misc/msdos16.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
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/msdos18.sh b/tools/test/stress2/misc/msdos18.sh
new file mode 100755
index 000000000000..faeed9dca944
--- /dev/null
+++ b/tools/test/stress2/misc/msdos18.sh
@@ -0,0 +1,250 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# D38549: msdosfs deextend: validate pages of the partial buffer
+
+# https://people.freebsd.org/~pho/stress/log/log0420.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -eu
+prog=$(basename "$0" .sh)
+mkdir -p $mntpoint
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 1g -u $mdstart
+newfs_msdos /dev/md$mdstart > /dev/null 2>&1
+mount -t msdosfs /dev/md$mdstart $mntpoint
+mount | grep $mntpoint
+set +e
+
+odir=`pwd`
+
+cd /tmp
+sed '1,/^EOF/d' < $odir/$0 > $prog.c
+cc -o $prog -Wall -O0 $prog.c -pthread || exit 1
+rm -f $prog.c
+cd $mntpoint
+
+in=inputFile
+out=outputFile
+
+/tmp/$prog $in $out 12345
+ls -al
+
+cd $odir
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog
+exit
+EOF
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <pthread.h>
+#include <pthread_np.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+int fd, port;
+volatile int go;
+char *inputFile;
+char *outputFile;
+
+#define FSIZE 936374
+char buf[FSIZE];
+
+static void
+reader(void) {
+ struct sockaddr_in inetaddr, inetpeer;
+ socklen_t len;
+ int on, n, tcpsock, msgsock;
+
+ on = 1;
+ if ((tcpsock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+ err(1, "socket(), %s:%d", __FILE__, __LINE__);
+
+ if (setsockopt(tcpsock,
+ SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
+ err(1, "setsockopt(), %s:%d", __FILE__, __LINE__);
+
+ inetaddr.sin_family = AF_INET;
+ inetaddr.sin_addr.s_addr = INADDR_ANY;
+ inetaddr.sin_port = htons(port);
+ inetaddr.sin_len = sizeof(inetaddr);
+
+ if (bind(tcpsock,
+ (struct sockaddr *)&inetaddr, sizeof (inetaddr)) < 0)
+ err(1, "bind(), %s:%d", __FILE__, __LINE__);
+
+ if (listen(tcpsock, 5) < 0)
+ err(1, "listen(), %s:%d", __FILE__, __LINE__);
+
+ len = sizeof(inetpeer);
+ if ((msgsock = accept(tcpsock,
+ (struct sockaddr *)&inetpeer, &len)) < 0)
+ err(1, "accept(), %s:%d", __FILE__, __LINE__);
+
+ if ((fd = open(outputFile, O_RDWR | O_CREAT | O_TRUNC, 0640)) == -1)
+ err(1, "open(%s)", outputFile);
+
+ usleep(arc4random() % 1000);
+ for (;;) {
+ if ((n = read(msgsock, buf, FSIZE)) < 0)
+ err(1, "read(), %s:%d", __FILE__, __LINE__);
+ if (n == 0)
+ break;
+
+ }
+ close(msgsock);
+ close(tcpsock);
+ close(fd);
+ return;
+}
+
+static void *
+thr(void *data __unused)
+{
+ pthread_set_name_np(pthread_self(), __func__);
+ go = 1;
+ while (go == 1) {
+ ftruncate(fd, FSIZE / 2);
+ ftruncate(fd, FSIZE);
+ }
+
+ return (NULL);
+}
+
+static void
+writer(void) {
+ struct hostent *hostent;
+ struct sockaddr_in inetaddr;
+ pthread_t tid;
+ off_t off = 0;
+ size_t size;
+ int i, on, r, tcpsock;
+
+ on = 1;
+ for (i = 1; i < 5; i++) {
+ if ((tcpsock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+ err(1, "socket(), %s:%d", __FILE__, __LINE__);
+
+ if (setsockopt(tcpsock,
+ SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
+ err(1, "setsockopt(), %s:%d", __FILE__, __LINE__);
+
+ size = getpagesize();
+ if (setsockopt(tcpsock, SOL_SOCKET, SO_SNDBUF, (void *)&size,
+ sizeof(size)) < 0)
+ err(1, "setsockopt(SO_SNDBUF), %s:%d",
+ __FILE__, __LINE__);
+
+ hostent = gethostbyname ("localhost");
+ memcpy (&inetaddr.sin_addr.s_addr, hostent->h_addr,
+ sizeof (struct in_addr));
+
+ inetaddr.sin_family = AF_INET;
+ inetaddr.sin_port = htons(port);
+ inetaddr.sin_len = sizeof(inetaddr);
+
+ r = connect(tcpsock, (struct sockaddr *) &inetaddr,
+ sizeof(inetaddr));
+ if (r == 0)
+ break;
+ sleep(1);
+ close(tcpsock);
+ }
+ if (r < 0)
+ err(1, "connect(), %s:%d", __FILE__, __LINE__);
+
+ if ((fd = open(inputFile, O_RDWR | O_CREAT | O_TRUNC, 0640)) == -1)
+ err(1, "open(%s)", inputFile);
+
+ if (write(fd, buf, sizeof(buf)) != sizeof(buf))
+ err(1, "write()");
+
+ r = pthread_create(&tid, NULL, thr, NULL);
+ if (r)
+ errc(1, r, "pthread_create");
+
+ usleep(5000);
+ if (sendfile(fd, tcpsock, 0, FSIZE, NULL, &off, 0) == -1)
+ err(1, "sendfile");
+
+ usleep(arc4random() % 20000);
+ go = 0;
+ if ((r = pthread_join(tid, NULL)) != 0)
+ errc(1, r, "pthread_join");
+
+ _exit(0);
+}
+
+int
+main(int argc, char **argv)
+{
+ pid_t pid;
+ time_t start;
+
+ if (argc != 4) {
+ fprintf(stderr, "Usage: %s <inputFile outputFile portNumber\n",
+ argv[0]);
+ return (1);
+ }
+ inputFile = argv[1];
+ outputFile = argv[2];
+ port = atoi(argv[3]);
+ pthread_set_name_np(pthread_self(), __func__);
+
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ if ((pid = fork()) == 0) {
+ writer();
+ } else if (pid > 0) {
+ reader();
+ kill(pid, SIGINT);
+ if (waitpid(pid, NULL, 0) != pid)
+ err(1, "waitpid()");
+ } else
+ err(1, "fork(), %s:%d", __FILE__, __LINE__);
+ }
+
+ return (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/newfs.sh b/tools/test/stress2/misc/newfs.sh
index 44c76f78b599..252629c04b90 100755
--- a/tools/test/stress2/misc/newfs.sh
+++ b/tools/test/stress2/misc/newfs.sh
@@ -78,8 +78,8 @@ for opt in -O1 -O2 -U -j; do
done
blocksize=$((blocksize * 2))
done
- if [ $((`date '+%s'` - start)) -gt 1200 ]; then
- echo "Timed out"
+ if [ $((`date '+%s'` - start)) -gt 1800 ]; then
+ echo "Timed out in $opt"
s=4
break
fi
diff --git a/tools/test/stress2/misc/md4.sh b/tools/test/stress2/misc/newfs6.sh
index 0d760b99b058..cf481569ee9c 100755
--- a/tools/test/stress2/misc/md4.sh
+++ b/tools/test/stress2/misc/newfs6.sh
@@ -1,8 +1,9 @@
#!/bin/sh
#
-# Copyright (c) 2013 Peter Holm <pho@FreeBSD.org>
-# All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -26,19 +27,38 @@
# SUCH DAMAGE.
#
-# Demonstrate data corruption on the swap-backed md.
-# Test scenario by Nigel Williams <njwilliams swin edu au>.
-# Fixed in r250966.
+# A fast version of newfs.sh
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
-[ -z "`which bsdlabel`" ] && exit 0
-status=0
-MD_DEV=`mdconfig -an -t swap -s 1m -x 63 -y 16`
-fdisk -I md$MD_DEV > /dev/null 2>&1
-bsdlabel -w -B md${MD_DEV}s1 || exit 1
-dd if=/dev/md$MD_DEV of=/dev/null bs=64k status=none
-bsdlabel md${MD_DEV}s1 > /dev/null ||
- { echo FAIL; status=1; }
-mdconfig -d -u $MD_DEV
-exit $status
+. ../default.cfg
+
+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 1g -u $mdstart || exit 1
+
+log=/tmp/newfs6.sh.log
+s=0
+for opt in -O1 -O2 -U -j; do
+ bs=4096
+ while [ $bs -le 65536 ]; do
+ for i in 8 4 2 1; do
+ fragsize=$((bs / i))
+ echo "newfs $opt -b $bs -f $fragsize md$mdstart "
+ newfs $opt -b $bs -f $fragsize \
+ md$mdstart > /dev/null || { s=1; continue; }
+ mount /dev/md$mdstart $mntpoint || s=2 &&
+ umount $mntpoint
+ fsck -fy /dev/md$mdstart > $log 2>&1
+ grep -q "WAS MODIFIED" $log && {
+ s=3
+ cat $log
+ }
+ done
+ bs=$((bs * 2))
+ done
+done
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/gbde.sh b/tools/test/stress2/misc/newfs7.sh
index f47d8e9e15bf..1456d1360bc1 100755
--- a/tools/test/stress2/misc/gbde.sh
+++ b/tools/test/stress2/misc/newfs7.sh
@@ -1,8 +1,9 @@
#!/bin/sh
#
-# Copyright (c) 2012 Peter Holm <pho@FreeBSD.org>
-# All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -26,30 +27,27 @@
# 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
+# "mount: /dev/md10: Invalid fstype: Invalid argument" seen.
+# Reported by: soralx@cydem.org
+# Fixed by: 017367c1146a
+
+set -eu
+prog=`basename ${0%.sh}`
+log=/tmp/$prog.log
+s=0
+mdconfig -a -t swap -s 32T -u $mdstart
+newfs -L tst0 -U -b 65536 -f 8192 -d 1048576 -g 131072 -h 16 -i 1048576 \
+ /dev/md$mdstart > /dev/null || s=1
+set +e
+mount /dev/md$mdstart $mntpoint && umount $mntpoint || s=$((s | 2))
+fsck_ffs -fy md$mdstart > $log 2>&1 || s=$((s | 4))
+grep -Eq "IS CLEAN|MARKED CLEAN" $log || s=$((s | 8))
+grep -Eq "WAS MODIFIED" $log && s=$((s | 16))
+[ $s -ne 0 ] && tail -10 $log
mdconfig -d -u $mdstart
+rm -f $log
+
+exit $s
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/nfs17.sh b/tools/test/stress2/misc/nfs17.sh
index 2a012e476e55..86f045a34bdf 100755
--- a/tools/test/stress2/misc/nfs17.sh
+++ b/tools/test/stress2/misc/nfs17.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/nfs18.sh b/tools/test/stress2/misc/nfs18.sh
index 46330a0290a1..b1432dd355d2 100755
--- a/tools/test/stress2/misc/nfs18.sh
+++ b/tools/test/stress2/misc/nfs18.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/nfs_halfpage.sh b/tools/test/stress2/misc/nfs_halfpage.sh
index b665e84d7ddf..8d02ca8ebbcf 100755
--- a/tools/test/stress2/misc/nfs_halfpage.sh
+++ b/tools/test/stress2/misc/nfs_halfpage.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2017 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/nfs_halfpage2.sh b/tools/test/stress2/misc/nfs_halfpage2.sh
index 15895da2da21..b916531c7a9d 100755
--- a/tools/test/stress2/misc/nfs_halfpage2.sh
+++ b/tools/test/stress2/misc/nfs_halfpage2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2017 Konstantin Belousov <kib@FreeBSD.org>
#
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/nlink.sh b/tools/test/stress2/misc/nlink.sh
index 1d3bde8c7d42..f06752290ac3 100755
--- a/tools/test/stress2/misc/nlink.sh
+++ b/tools/test/stress2/misc/nlink.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/nlink2.sh b/tools/test/stress2/misc/nlink2.sh
index 41cdaa676fc9..559ad5cfa417 100755
--- a/tools/test/stress2/misc/nlink2.sh
+++ b/tools/test/stress2/misc/nlink2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/nlink3.sh b/tools/test/stress2/misc/nlink3.sh
index 2484e8569928..55557124c9c2 100755
--- a/tools/test/stress2/misc/nlink3.sh
+++ b/tools/test/stress2/misc/nlink3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
@@ -52,7 +52,7 @@ main (void) {
err(1, "creat(%s)", file);
close(fd);
- mx = UFS_LINK_MAX - 1; /* UFS_LINK_MAX = 32767 */
+ mx = UFS_LINK_MAX - 1;
for (i = 0; i < mx; i++) {
snprintf(file, sizeof(file), "%d", i);
if (link("f", file) == -1)
diff --git a/tools/test/stress2/misc/nlink4.sh b/tools/test/stress2/misc/nlink4.sh
index 12412666b182..cce8bb06985a 100755
--- a/tools/test/stress2/misc/nlink4.sh
+++ b/tools/test/stress2/misc/nlink4.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
@@ -51,7 +51,7 @@ main (void) {
err(1, "creat(%s)", file);
close(fd);
- mx = UFS_LINK_MAX - 1; /* UFS_LINK_MAX = 32767 */
+ mx = UFS_LINK_MAX - 1;
for (i = 0; i < mx; i++) {
snprintf(file, sizeof(file), "%d", i);
if (link("f", file) == -1)
diff --git a/tools/test/stress2/misc/nlink5.sh b/tools/test/stress2/misc/nlink5.sh
index c90f43b35dd5..0738bc7548bf 100755
--- a/tools/test/stress2/misc/nlink5.sh
+++ b/tools/test/stress2/misc/nlink5.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
@@ -33,6 +33,9 @@
. ../default.cfg
+UFS_LINK_MAX=`grep UFS_LINK_MAX /usr/include/ufs/ufs/dinode.h 2>/dev/null`
+[ -z "$UFS_LINK_MAX" ] && exit 0
+UFS_LINK_MAX=`echo $UFS_LINK_MAX | awk '{print $3}'`
cat > /tmp/nlink5.c <<EOF
#include <sys/stat.h>
#include <ufs/ufs/dinode.h>
@@ -46,7 +49,7 @@ main (void) {
int i, mx;
char dir[100];
- mx = UFS_LINK_MAX - 2; /* UFS_LINK_MAX = 32767 */
+ mx = UFS_LINK_MAX - 2;
for (i = 0; i < mx; i++) {
snprintf(dir, sizeof(dir), "%d", i);
if (mkdir(dir, 0700) == -1)
@@ -111,7 +114,7 @@ set +e
cd $mntpoint
/tmp/nlink5; s=$?
n=`find . -type d -maxdepth 1 | wc -l`
-[ $n -ne 32766 ] && s=2
+[ $n -ne $((UFS_LINK_MAX - 1)) ] && s=2
cd $here
umount $mntpoint
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/nullfs25.sh b/tools/test/stress2/misc/nullfs25.sh
index 57f63c6d2330..b98d4599a7ad 100755
--- a/tools/test/stress2/misc/nullfs25.sh
+++ b/tools/test/stress2/misc/nullfs25.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/nullfs26.sh b/tools/test/stress2/misc/nullfs26.sh
index 720021e9e199..ae3dfa23dc2b 100755
--- a/tools/test/stress2/misc/nullfs26.sh
+++ b/tools/test/stress2/misc/nullfs26.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/nullfs27.sh b/tools/test/stress2/misc/nullfs27.sh
index 907e9de14253..bf7b2a5fea61 100755
--- a/tools/test/stress2/misc/nullfs27.sh
+++ b/tools/test/stress2/misc/nullfs27.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/nullfs28.sh b/tools/test/stress2/misc/nullfs28.sh
index 3e313de6f64c..6ebb47974ffe 100755
--- a/tools/test/stress2/misc/nullfs28.sh
+++ b/tools/test/stress2/misc/nullfs28.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/nullfs30.sh b/tools/test/stress2/misc/nullfs30.sh
new file mode 100755
index 000000000000..8b8f35aed4c0
--- /dev/null
+++ b/tools/test/stress2/misc/nullfs30.sh
@@ -0,0 +1,112 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Parallel mount and umount test of file mounts,
+# mounting over non-directories
+
+# panic: free: address 0xffffffff80b229b4 ... has not been allocated
+# https://people.freebsd.org/~pho/stress/log/log0454.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+cont=/tmp/nullfs30.continue
+mounts=3 # Number of parallel scripts
+
+set -eu
+md1=$mdstart
+md2=$((md1 + 1))
+mp1=$mntpoint$md1
+mp2=$mntpoint$md2
+mkdir -p $mp1 $mp2
+
+mdconfig -a -t swap -s 256m -u $md1
+newfs $newfs_flags -n md$md1 > /dev/null
+mount /dev/md$md1 $mp1
+mdconfig -a -t swap -s 256m -u $md2
+newfs $newfs_flags -n md$md2 > /dev/null
+mount /dev/md$md2 $mp2
+
+for i in `jot $mounts`; do
+ cp /etc/group $mp1/f$i
+ touch $mp2/m$i
+done
+set +e
+
+mount -t nullfs $mp1/f1 $mp2/m1 || {
+ umount $mp2
+ umount $mp1
+ mdconfig -d -u $md2
+ mdconfig -d -u $md1
+ echo "File mount not implemented"
+ exit 0
+}
+
+(cd ../testcases/swap; ./swap -t 5m -i 20 > /dev/null) &
+
+# Start the parallel tests
+touch $cont
+while [ -f $cont ]; do
+ while mount | grep -q "on $mp2/m1 "; do umount $mp2/m1; done 2> /dev/null
+ mount -t nullfs $mp1/f1 $mp2/m1
+done &
+while [ -f $cont ]; do
+ while mount | grep -q "on $mp2/m2 "; do umount $mp2/m2; done 2> /dev/null
+ mount -t nullfs $mp1/f2 $mp2/m2
+done &
+while [ -f $cont ]; do
+ while mount | grep -q "on $mp2/m3 "; do umount $mp2/m3; done 2> /dev/null
+ mount -t nullfs $mp1/f3 $mp2/m3
+done &
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 300 ]; do
+ cat $mp2/m1 $mp2/m2 $mp2/m3 > /dev/null
+done
+rm -f $cont
+while pgrep -q swap; do pkill swap; done
+wait
+
+for i in 1 2 3; do
+ while mount | grep -q "on $mp2/m$i "; do umount $mp2/m$i; done 2> /dev/null
+done
+
+# Check error handling
+mount -t nullfs $mp1/f1 $mp2/m1
+mount -t nullfs $mp1/f1 $mp2/m1 2>/dev/null && s=1 || s=0
+while mount | grep -q "on $mp2/m1 "; do umount $mp2/m1; done 2> /dev/null
+
+mkdir $mp2/dir
+mount -t nullfs $mp1/f1 $mp2/dir 2>/dev/null && s=2
+
+umount $mp2
+umount $mp1
+mdconfig -d -u $md2
+mdconfig -d -u $md1
+exit $s
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/numa.sh b/tools/test/stress2/misc/numa.sh
index 048eb1201714..afa153ec1ed1 100755
--- a/tools/test/stress2/misc/numa.sh
+++ b/tools/test/stress2/misc/numa.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/open2.sh b/tools/test/stress2/misc/open2.sh
index 7c0994bfd4e4..fc3f7c9b05eb 100755
--- a/tools/test/stress2/misc/open2.sh
+++ b/tools/test/stress2/misc/open2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/overflow3.sh b/tools/test/stress2/misc/overflow3.sh
index a5a29721a30b..d09794e57bca 100755
--- a/tools/test/stress2/misc/overflow3.sh
+++ b/tools/test/stress2/misc/overflow3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Mark Johnston <markj@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/pageout.sh b/tools/test/stress2/misc/pageout.sh
index eafeb22d3417..92eb899880ac 100755
--- a/tools/test/stress2/misc/pageout.sh
+++ b/tools/test/stress2/misc/pageout.sh
@@ -33,6 +33,10 @@
# "panic: handle_written_filepage: not started" seen:
# https://people.freebsd.org/~pho/stress/log/pageout-2.txt
+# "panic: ffs_geom_strategy: bad I/O" seen:
+# https://people.freebsd.org/~pho/stress/log/log0434.txt
+# Fixed by: 7aeea73e3078
+
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
. ../default.cfg
@@ -49,6 +53,8 @@ mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
mdconfig -a -t swap -s 2g -u $mdstart || exit 1
+[ "$newfs_flags" = "-U" ] && [ `jot -r 1 0 1` -eq 1 ] && newfs_flags="-j"
+[ $# -eq 1 ] && newfs_flags="$1" # or use script argument
newfs $newfs_flags md$mdstart > /dev/null
mount /dev/md$mdstart $mntpoint
@@ -61,8 +67,8 @@ daemon sh -c "(cd ../testcases/swap; ./swap -t 5m -i 20 -l 100 -h)" > /dev/null
(cd /tmp; /tmp/pageout $f1) &
sleep .2
while kill -0 $! 2> /dev/null; do
- mksnap_ffs $mntpoint $mntpoint/.snap/stress2 &&
- rm -f $mntpoint/.snap/stress2
+ rm -f $mntpoint/.snap/stress2
+ mksnap_ffs $mntpoint $mntpoint/.snap/stress2
done
while pgrep -q swap; do
pkill swap
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 89e9dd8d371c..de6c20028c59 100755
--- a/tools/test/stress2/misc/perf.sh
+++ b/tools/test/stress2/misc/perf.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -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/ping.sh b/tools/test/stress2/misc/ping.sh
index 2594c6d5e43c..29ed6dec955f 100755
--- a/tools/test/stress2/misc/ping.sh
+++ b/tools/test/stress2/misc/ping.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/pipe3.sh b/tools/test/stress2/misc/pipe3.sh
index 6208e1a52f90..654b94e3caaf 100755
--- a/tools/test/stress2/misc/pipe3.sh
+++ b/tools/test/stress2/misc/pipe3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Peter Holm
#
diff --git a/tools/test/stress2/misc/pipe_enomem.sh b/tools/test/stress2/misc/pipe_enomem.sh
index 92558b164336..9a00aac5cb6b 100755
--- a/tools/test/stress2/misc/pipe_enomem.sh
+++ b/tools/test/stress2/misc/pipe_enomem.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Konstantin Belousov
#
diff --git a/tools/test/stress2/misc/pkru.sh b/tools/test/stress2/misc/pkru.sh
index 9ac0a5000daf..047b7f8f8745 100755
--- a/tools/test/stress2/misc/pkru.sh
+++ b/tools/test/stress2/misc/pkru.sh
@@ -1,6 +1,6 @@
#/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/pmc6.sh b/tools/test/stress2/misc/pmc6.sh
index 4cbdf278125f..f0869333b0ff 100755
--- a/tools/test/stress2/misc/pmc6.sh
+++ b/tools/test/stress2/misc/pmc6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/poll2.sh b/tools/test/stress2/misc/poll2.sh
index 13db2d0d22d3..aa5ad5f995dd 100755
--- a/tools/test/stress2/misc/poll2.sh
+++ b/tools/test/stress2/misc/poll2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
@@ -136,11 +136,11 @@ static void *
pl(void *data __unused)
{
struct pollfd pfd;
- int i, r;
+ int r;
pfd.fd = fds[0];
pfd.events = POLLIN;
- for (i = 0; done == 0; i++) {
+ while (done == 0) {
pfd.fd = fds[0];
pfd.events = POLLIN;
pthread_set_name_np(pthread_self(), "pl-idle");
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/proccontrol.sh b/tools/test/stress2/misc/proccontrol.sh
index 52f7cc824372..cea8c0dc0f0a 100755
--- a/tools/test/stress2/misc/proccontrol.sh
+++ b/tools/test/stress2/misc/proccontrol.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
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/procfs4.sh b/tools/test/stress2/misc/procfs4.sh
index ffa812a7f73d..18e5c0a6f803 100755
--- a/tools/test/stress2/misc/procfs4.sh
+++ b/tools/test/stress2/misc/procfs4.sh
@@ -68,6 +68,7 @@ EOF
#define MAXRUN 1200
#define PARALLEL 10
+static int debug; /* Set to 1 for debug output */
char *files[] = {
"cmdline",
"ctl",
@@ -116,10 +117,8 @@ test(void)
close(fd);
}
kill(p, SIGHUP);
-#if 0
- if (opens < 1)
- fprintf(stderr, "Warn %d open(s) for pid %d\n", opens, getpid());
-#endif
+ if (debug != 0 && opens == 0)
+ fprintf(stderr, "No ioctl() calls succeeded.\n");
}
for (i = 0; i < 64; i++)
diff --git a/tools/test/stress2/misc/procfs6.sh b/tools/test/stress2/misc/procfs6.sh
index b4cc4c1eb4c0..24ea6ae47588 100755
--- a/tools/test/stress2/misc/procfs6.sh
+++ b/tools/test/stress2/misc/procfs6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/procstat.sh b/tools/test/stress2/misc/procstat.sh
index 91a846ba91ee..c760583c8bbd 100755
--- a/tools/test/stress2/misc/procstat.sh
+++ b/tools/test/stress2/misc/procstat.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/procstat2.sh b/tools/test/stress2/misc/procstat2.sh
index 712f53c11b3b..758b684dbf0a 100755
--- a/tools/test/stress2/misc/procstat2.sh
+++ b/tools/test/stress2/misc/procstat2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
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/ptrace10.sh b/tools/test/stress2/misc/ptrace10.sh
index c2dec736a240..205efe2cc27a 100755
--- a/tools/test/stress2/misc/ptrace10.sh
+++ b/tools/test/stress2/misc/ptrace10.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Mark Johnston <markj@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/ptrace11.sh b/tools/test/stress2/misc/ptrace11.sh
index 9fbd44481624..f5231bc1850f 100755
--- a/tools/test/stress2/misc/ptrace11.sh
+++ b/tools/test/stress2/misc/ptrace11.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/ptrace12.sh b/tools/test/stress2/misc/ptrace12.sh
index b7381c4937e1..b80ba69b1327 100755
--- a/tools/test/stress2/misc/ptrace12.sh
+++ b/tools/test/stress2/misc/ptrace12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/ptrace9.sh b/tools/test/stress2/misc/ptrace9.sh
index ac1329fd1a2a..ffd5fce0d646 100755
--- a/tools/test/stress2/misc/ptrace9.sh
+++ b/tools/test/stress2/misc/ptrace9.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2016 Mark Johnston <markj@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/pts2.sh b/tools/test/stress2/misc/pts2.sh
index 84f7bbd78255..32adb98f2cfe 100755
--- a/tools/test/stress2/misc/pts2.sh
+++ b/tools/test/stress2/misc/pts2.sh
@@ -40,11 +40,11 @@ sed '1,/^EOF/d' < $here/$0 > pts2.c
mycc -o pts2 -Wall -Wextra -O2 pts2.c || exit 1
rm -f pts2.c
-pts=`vmstat -m | grep pts | awk '{print $2}'`
+pts=`vmstat -m | awk '/ pts / {print $2}'`
for i in `jot 10`; do
/tmp/pts2
done
-new=`vmstat -m | grep pts | awk '{print $2}'`
+new=`vmstat -m | awk '/ pts / {print $2}'`
s=0
[ $((new - pts)) -gt 1 ] && { s=1; echo "Leaked $((new - pts)) pts."; }
diff --git a/tools/test/stress2/misc/pts3.sh b/tools/test/stress2/misc/pts3.sh
index b398e92916af..ebd854b82bf7 100755
--- a/tools/test/stress2/misc/pts3.sh
+++ b/tools/test/stress2/misc/pts3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/quota12.sh b/tools/test/stress2/misc/quota12.sh
index 2b2094f22460..cd0855b07584 100755
--- a/tools/test/stress2/misc/quota12.sh
+++ b/tools/test/stress2/misc/quota12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/quota5.sh b/tools/test/stress2/misc/quota5.sh
index 050ea4a822d9..ee69dac4be01 100755
--- a/tools/test/stress2/misc/quota5.sh
+++ b/tools/test/stress2/misc/quota5.sh
@@ -39,6 +39,6 @@ edquota -g -f /tmp -e /tmp:1500000:1400000:200000:180000 $testuser
quotaon /tmp
su $testuser -c "export runRUNTIME=60m; cd ../testcases/mkdir; \
- ./mkdir -t 30m -i 200 -v -v"
+ ./mkdir -t 10m -i 200 -v -v"
quotaoff /tmp
diff --git a/tools/test/stress2/misc/r335171.sh b/tools/test/stress2/misc/r335171.sh
index 2d2e9ad72fee..09a11f304198 100755
--- a/tools/test/stress2/misc/r335171.sh
+++ b/tools/test/stress2/misc/r335171.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/radix.sh b/tools/test/stress2/misc/radix.sh
index fa85512c79c5..b102c09aca92 100755
--- a/tools/test/stress2/misc/radix.sh
+++ b/tools/test/stress2/misc/radix.sh
@@ -46,14 +46,14 @@ mycc -o radix -Wall -Wextra radix.c || exit 1
rm -f radix.c
cd $odir
-set -e
+set -u
trap "rm -f rendezvous" EXIT INT
parallel=1
usermem=`sysctl hw.usermem | sed 's/.* //'`
pagesize=`pagesize`
start=`date +%s`
while true; do
- timeout 2m /tmp/radix $parallel > $log; s=$?
+ timeout 20m /tmp/radix $parallel > $log; s=$?
[ $s -eq 124 ] && { echo "Timed out"; break; }
[ $s -ne 0 ] && cat $log
used=`awk '{print $4}' < $log`
@@ -63,7 +63,7 @@ while true; do
[ $parallel -eq 1 ] &&
parallel=$((usermem / pagesize / used))
parallel=$((parallel + 1))
- echo "`date +%T` parallel=$parallel" # XXX
+ [ $parallel -gt 10 ] && parallel=10
done
cat /tmp/radix.log
diff --git a/tools/test/stress2/misc/random.sh b/tools/test/stress2/misc/random.sh
index 04a0075d0c2c..100d9d9b88d0 100755
--- a/tools/test/stress2/misc/random.sh
+++ b/tools/test/stress2/misc/random.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
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/rdgsbase.sh b/tools/test/stress2/misc/rdgsbase.sh
index 66a44592d419..3c5597e3f9c2 100755
--- a/tools/test/stress2/misc/rdgsbase.sh
+++ b/tools/test/stress2/misc/rdgsbase.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2017 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/rdwr.sh b/tools/test/stress2/misc/rdwr.sh
index c77c955dc210..893056558560 100755
--- a/tools/test/stress2/misc/rdwr.sh
+++ b/tools/test/stress2/misc/rdwr.sh
@@ -28,6 +28,11 @@
# Test with read/write length of INT_MAX (i386) or INT_MAX+1 (amd64)
+# Seen:
+# rdwr: readv(). Expected 2147483648 (80000000), got -2147483648 (ffffffff80000000) bytes: No error: 0
+# rdwr: writev(). Expected 2147483648 (80000000), got -2147483648 (ffffffff80000000) bytes: No error: 0
+# Fixed by: 78101d437a92
+
. ../default.cfg
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
@@ -61,11 +66,22 @@ EOF
#include <fcntl.h>
#include <unistd.h>
+static int s;
+
+static void
+er(char * syscall, size_t len, ssize_t ret)
+{
+ warn("%8s. Expected %zu (%zx), got %zd (%zx) bytes",
+ syscall, len, len, ret, ret);
+ s=1;
+}
+
int
main(int argc, char **argv)
{
int fd1, fd2;
size_t len;
+ ssize_t r;
void *p;
struct iovec iov;
@@ -85,34 +101,34 @@ main(int argc, char **argv)
MAP_FAILED)
err(1, "mmap");
- if (read(fd2, p, len) != len)
- err(1, "read");
+ if ((r = read(fd2, p, len)) != len)
+ er("read()", len, r);
- if (write(fd1, p, len) != len)
- err(1, "write");
+ if ((r = write(fd1, p, len)) != len)
+ er("write()", len, r);
- if (pread(fd2, p, len, 0) != len)
- err(1, "pread");
+ if ((r = pread(fd2, p, len, 0)) != len)
+ er("pread()", len, r);
- if (pwrite(fd1, p, len, 0) != len)
- err(1, "pwrite");
+ if ((r = pwrite(fd1, p, len, 0)) != len)
+ er("pwrite()", len, r);
iov.iov_base = p;
iov.iov_len = len;
- if (readv(fd2, &iov, 1) != len)
- err(1, "readv");
+ if ((r = readv(fd2, &iov, 1)) != len)
+ er("readv()", len, r);
- if (writev(fd1, &iov, 1) != len)
- err(1, "writev");
+ if ((r = writev(fd1, &iov, 1)) != len)
+ er("writev()", len, r);
- if (preadv(fd2, &iov, 1, 0) != len)
- err(1, "preadv");
+ if ((r = preadv(fd2, &iov, 1, 0)) != len)
+ er("preadv()", len, r);
- if (pwritev(fd1, &iov, 1, 0) != len)
- err(1, "pwritev");
+ if ((r = pwritev(fd1, &iov, 1, 0)) != len)
+ er("pwritev()", len, r);
close(fd1);
close(fd2);
- return (0);
+ return (s);
}
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/reaper.sh b/tools/test/stress2/misc/reaper.sh
index 1d2d5ade8c6e..5ad19a55d60b 100755
--- a/tools/test/stress2/misc/reaper.sh
+++ b/tools/test/stress2/misc/reaper.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/reaper2.sh b/tools/test/stress2/misc/reaper2.sh
index 8290e38d34e4..ee9cf927f1d9 100755
--- a/tools/test/stress2/misc/reaper2.sh
+++ b/tools/test/stress2/misc/reaper2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
@@ -65,8 +65,9 @@ test(void) {
struct procctl_reaper_kill killemall;
pid_t pid;
time_t start;
- int data[20], e, n, m;
+ int data[20], debug, e, n, m;
+ debug = 0; /* set to 1 for debug output */
n = m = 0;
if (procctl(P_PID, getpid(), PROC_REAP_ACQUIRE, NULL) == -1)
err(EXIT_FAILURE, "Fail to acquire the reaper");
@@ -94,9 +95,8 @@ test(void) {
if (waitpid(pid, NULL, 0) != pid)
err(1, "waitpid()");
}
-#if defined(DEBUG)
- fprintf(stderr, "n = %d out of %d\n", n, m);
-#endif
+ if (debug == 1)
+ fprintf(stderr, "n = %d out of %d\n", n, m);
_exit(0);
}
diff --git a/tools/test/stress2/misc/reaper3.sh b/tools/test/stress2/misc/reaper3.sh
index fdf715fa7b0b..59012d2c45ca 100755
--- a/tools/test/stress2/misc/reaper3.sh
+++ b/tools/test/stress2/misc/reaper3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
@@ -59,14 +59,13 @@ flip(void *ap, size_t len)
{
unsigned char *cp;
int byte;
- unsigned char bit, buf, mask, old __unused;
+ unsigned char bit, buf, mask;
cp = (unsigned char *)ap;
byte = random_long(0, len);
bit = random_long(0,7);
mask = ~(1 << bit);
buf = cp[byte];
- old = cp[byte];
buf = (buf & mask) | (~buf & ~mask);
cp[byte] = buf;
}
@@ -86,8 +85,9 @@ test(void) {
struct procctl_reaper_kill killemall;
pid_t pid;
time_t start;
- int data[20], e, n, m;
+ int data[20], debug, e, n, m;
+ debug = 0; /* set to 1 for debug output */
n = m = 0;
if (procctl(P_PID, getpid(), PROC_REAP_ACQUIRE, NULL) == -1)
err(EXIT_FAILURE, "Fail to acquire the reaper");
@@ -118,9 +118,8 @@ test(void) {
if (waitpid(pid, NULL, 0) != pid)
err(1, "waitpid()");
}
-#if defined(DEBUG)
- fprintf(stderr, "n = %d out of %d\n", n, m);
-#endif
+ if (debug == 1)
+ fprintf(stderr, "n = %d out of %d\n", n, m);
_exit(0);
}
diff --git a/tools/test/stress2/misc/reaper4.sh b/tools/test/stress2/misc/reaper4.sh
index bf400e396e63..0fdb3f75ccff 100755
--- a/tools/test/stress2/misc/reaper4.sh
+++ b/tools/test/stress2/misc/reaper4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
@@ -59,14 +59,13 @@ flip(void *ap, size_t len)
{
unsigned char *cp;
int byte;
- unsigned char bit, buf, mask, old __unused;
+ unsigned char bit, buf, mask;
cp = (unsigned char *)ap;
byte = random_long(0, len);
bit = random_long(0,7);
mask = ~(1 << bit);
buf = cp[byte];
- old = cp[byte];
buf = (buf & mask) | (~buf & ~mask);
cp[byte] = buf;
}
@@ -85,8 +84,9 @@ test(void) {
struct procctl_reaper_kill killemall;
pid_t pid;
time_t start;
- int data[20], e, n, m;
+ int data[20], debug, e, n, m;
+ debug = 0; /* set to 1 for debug output */
n = m = 0;
if (procctl(P_PID, getpid(), PROC_REAP_ACQUIRE, NULL) == -1)
err(EXIT_FAILURE, "Fail to acquire the reaper");
@@ -117,9 +117,8 @@ test(void) {
if (waitpid(pid, NULL, 0) != pid)
err(1, "waitpid()");
}
-#if defined(DEBUG)
- fprintf(stderr, "n = %d out of %d\n", n, m);
-#endif
+ if (debug == 1)
+ fprintf(stderr, "n = %d out of %d\n", n, m);
_exit(0);
}
diff --git a/tools/test/stress2/misc/reaper5.sh b/tools/test/stress2/misc/reaper5.sh
index eec58c36713a..944475479e2c 100755
--- a/tools/test/stress2/misc/reaper5.sh
+++ b/tools/test/stress2/misc/reaper5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/rename14.sh b/tools/test/stress2/misc/rename14.sh
index 83612a2632df..cf7f5f6d8148 100755
--- a/tools/test/stress2/misc/rename14.sh
+++ b/tools/test/stress2/misc/rename14.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
@@ -33,6 +33,9 @@
# Based on a syzkaller scenario reported by tuexen@freebsd.org
+# "panic: journal_jremref: Lost inodedep":
+# https://people.freebsd.org/~pho/stress/log/log0279.txt
+
. ../default.cfg
[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
diff --git a/tools/test/stress2/misc/rename15.sh b/tools/test/stress2/misc/rename15.sh
index aa884e045010..0831343101e5 100755
--- a/tools/test/stress2/misc/rename15.sh
+++ b/tools/test/stress2/misc/rename15.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
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/seekhole.sh b/tools/test/stress2/misc/seekhole.sh
new file mode 100755
index 000000000000..40c397b04521
--- /dev/null
+++ b/tools/test/stress2/misc/seekhole.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# A SEEK_HOLE / SEEK_DATA test scenario
+
+[ `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
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 2g -u $mdstart
+newfs -U /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+file=$mntpoint/file
+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
+/tmp/lsholes $file > $log 2>&1; s1=$?
+
+cat $log
+cmp -s $exp $log || s2=1
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/lsholes $exp $log
+exit $((s1 + s2))
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/segnp.sh b/tools/test/stress2/misc/segnp.sh
index 3dbe91e04550..96f163070db7 100755
--- a/tools/test/stress2/misc/segnp.sh
+++ b/tools/test/stress2/misc/segnp.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2017 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/segregs.sh b/tools/test/stress2/misc/segregs.sh
index 0ecc3565546a..63aa3abb5354 100755
--- a/tools/test/stress2/misc/segregs.sh
+++ b/tools/test/stress2/misc/segregs.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2017 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sem_post.sh b/tools/test/stress2/misc/sem_post.sh
index 2f1d7c4c004f..7fc2ffdd8778 100755
--- a/tools/test/stress2/misc/sem_post.sh
+++ b/tools/test/stress2/misc/sem_post.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/sem_timedwait.sh b/tools/test/stress2/misc/sem_timedwait.sh
index 33e5c1933f37..86c33f7e2ac3 100755
--- a/tools/test/stress2/misc/sem_timedwait.sh
+++ b/tools/test/stress2/misc/sem_timedwait.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/sem_wait.sh b/tools/test/stress2/misc/sem_wait.sh
index 6d8bc49c9199..2a4474eff4d5 100755
--- a/tools/test/stress2/misc/sem_wait.sh
+++ b/tools/test/stress2/misc/sem_wait.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/sendfile15.sh b/tools/test/stress2/misc/sendfile15.sh
index 90cbdd86ada6..c5f46d72c280 100755
--- a/tools/test/stress2/misc/sendfile15.sh
+++ b/tools/test/stress2/misc/sendfile15.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/sendfile17.sh b/tools/test/stress2/misc/sendfile17.sh
index 560cb6b83081..3ebd992fcd8e 100755
--- a/tools/test/stress2/misc/sendfile17.sh
+++ b/tools/test/stress2/misc/sendfile17.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/sendfile18.sh b/tools/test/stress2/misc/sendfile18.sh
index 3b13292932f1..f8bb111e2986 100755
--- a/tools/test/stress2/misc/sendfile18.sh
+++ b/tools/test/stress2/misc/sendfile18.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Mark Johnston <markj@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sendfile19.sh b/tools/test/stress2/misc/sendfile19.sh
index 0254a495d5cf..faf08ca87d85 100755
--- a/tools/test/stress2/misc/sendfile19.sh
+++ b/tools/test/stress2/misc/sendfile19.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sendfile20.sh b/tools/test/stress2/misc/sendfile20.sh
index 88c0a344a926..aefbb58eeb6c 100755
--- a/tools/test/stress2/misc/sendfile20.sh
+++ b/tools/test/stress2/misc/sendfile20.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sendfile21.sh b/tools/test/stress2/misc/sendfile21.sh
index c50c0f0ccdab..88b59c018c81 100755
--- a/tools/test/stress2/misc/sendfile21.sh
+++ b/tools/test/stress2/misc/sendfile21.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sendfile22.sh b/tools/test/stress2/misc/sendfile22.sh
index d948d8c001b6..a9bff35d8662 100755
--- a/tools/test/stress2/misc/sendfile22.sh
+++ b/tools/test/stress2/misc/sendfile22.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sendfile23.sh b/tools/test/stress2/misc/sendfile23.sh
index 02c354cdf48e..f7079eabc5f2 100755
--- a/tools/test/stress2/misc/sendfile23.sh
+++ b/tools/test/stress2/misc/sendfile23.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sendfile24.sh b/tools/test/stress2/misc/sendfile24.sh
index b9f7d7ac89c2..363008f69cb3 100755
--- a/tools/test/stress2/misc/sendfile24.sh
+++ b/tools/test/stress2/misc/sendfile24.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sendfile25.sh b/tools/test/stress2/misc/sendfile25.sh
index dba0378d547a..ae755bf1d4df 100755
--- a/tools/test/stress2/misc/sendfile25.sh
+++ b/tools/test/stress2/misc/sendfile25.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
@@ -105,7 +105,7 @@ reader(void) {
int on;
socklen_t len;
struct sockaddr_in inetaddr, inetpeer;
- int n, t, *buf, fd;
+ int n, *buf, fd;
on = 1;
if ((tcpsock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
@@ -132,7 +132,6 @@ reader(void) {
(struct sockaddr *)&inetpeer, &len)) < 0)
err(1, "accept(), %s:%d", __FILE__, __LINE__);
- t = 0;
if ((buf = malloc(bufsize)) == NULL)
err(1, "malloc(%d), %s:%d", bufsize, __FILE__, __LINE__);
@@ -142,7 +141,6 @@ reader(void) {
for (;;) {
if ((n = read(msgsock, buf, bufsize)) < 0)
err(1, "read(), %s:%d", __FILE__, __LINE__);
- t += n;
if (n == 0)
break;
diff --git a/tools/test/stress2/misc/sendfile26.sh b/tools/test/stress2/misc/sendfile26.sh
index da9aa52d5f3c..cecf2547a182 100755
--- a/tools/test/stress2/misc/sendfile26.sh
+++ b/tools/test/stress2/misc/sendfile26.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>
#
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/setrlimit.sh b/tools/test/stress2/misc/setrlimit.sh
new file mode 100755
index 000000000000..ca7a2d7f5364
--- /dev/null
+++ b/tools/test/stress2/misc/setrlimit.sh
@@ -0,0 +1,193 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+# Test setrlimit() max file size and ftruncate()
+
+# Problem seen:
+# Testing UFS -O1
+# setrlimit: ftruncate(5413) did not fail. limit = 2791
+# Testing FFS -U
+# setrlimit: ftruncate(9956) did not fail. limit = 7880
+# Testing msdosfs
+# setrlimit: ftruncate(9033) did not fail. limit = 5884
+# Testing tmpfs
+# setrlimit: ftruncate(123) did not fail. limit = 86
+
+. ../default.cfg
+
+cat > /tmp/setrlimit.c <<EOF
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static int signals;
+
+static void
+handler(int sig __unused)
+{
+#if defined(DEBUG)
+ fprintf(stderr, "Got signal SIGXFSZ\n");
+#endif
+ signals++;
+}
+
+void
+test(int argc, char *argv[])
+{
+ struct rlimit rlim;
+ rlim_t limit, sz;
+ struct sigaction act;
+ long pos;
+ int e, expected, fd;
+ char file[] = "setrlimit.file";
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <FS size>\n", argv[0]);
+ exit(1);
+ }
+ expected = signals = 0;
+ sz = atol(argv[1]);
+ arc4random_buf(&limit, sizeof(limit));
+ if (limit < 0)
+ limit = -limit;
+ limit = limit % sz + 1;
+ rlim.rlim_cur = rlim.rlim_max = limit;
+ if (setrlimit(RLIMIT_FSIZE, &rlim) == -1)
+ err(1, "setrlimit(%ld)", limit);
+
+ act.sa_handler = handler;
+ act.sa_flags = 0;
+ sigemptyset(&act.sa_mask);
+ if (sigaction(SIGXFSZ, &act, NULL) != 0)
+ err(1, "sigaction");
+
+ if ((fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, DEFFILEMODE)) == -1)
+ err(1, "open(%s)", file);
+
+ e = 0;
+ arc4random_buf(&pos, sizeof(pos));
+ if (pos < 0)
+ pos = -pos;
+ pos = pos % (limit * 2);
+ if (pos > limit)
+ expected = 1;
+ if (ftruncate(fd, pos) == -1) {
+ e = errno;
+ if (pos <= limit)
+ errc(1, e, "ftruncate(%ld), limit = %ld", pos, limit);
+ } else {
+ if (pos > limit)
+ errx(1, "ftruncate(%ld) did not fail. limit = %ld", pos, limit);
+ }
+
+ if (lseek(fd, limit - 1, SEEK_SET) == -1)
+ err(1, "lseek(limit - 1)");
+ if (write(fd, "a", 1) != 1)
+ err(1, "write() at limit - 1. limit = %ld", limit);
+
+ if (write(fd, "b", 1) != -1)
+ err(1, "write() at limit. limit = %ld", limit);
+ expected++;
+
+ /* Partial write test. No signal is expected */
+ if (lseek(fd, limit - 1, SEEK_SET) == -1)
+ err(1, "lseek(limit - 1)");
+ if (write(fd, "12", 2) != 1)
+ err(1, "write() at limit - 1. limit = %ld", limit);
+
+ if (signals != expected)
+ errx(1, "Expected %d signals, got %d", expected, signals);
+
+ close(fd);
+ unlink(file);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int i;
+
+ for (i = 0; i < 100; i++)
+ test(argc, argv);
+
+}
+EOF
+
+here=`pwd`
+s=0
+cc -o /tmp/setrlimit -Wall -Wextra -O0 -g /tmp/setrlimit.c || exit 1
+
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+
+echo "Testing UFS -O1"
+mdconfig -t swap -s 1g -u $mdstart
+newfs -O1 /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+cd $mntpoint; /tmp/setrlimit 10000 || s=1
+cd $here
+umount $mntpoint
+mdconfig -d -u $mdstart
+
+echo "Testing FFS -U"
+mdconfig -t swap -s 1g -u $mdstart
+newfs -U /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+cd $mntpoint; /tmp/setrlimit 10000 || s=$((s + 2))
+cd $here
+umount $mntpoint
+mdconfig -d -u $mdstart
+
+echo "Testing msdosfs"
+mdconfig -t swap -s 1g -u $mdstart
+newfs_msdos -F 32 -b 8192 /dev/md$mdstart > /dev/null 2>&1
+mount -t msdosfs /dev/md$mdstart $mntpoint
+cd $mntpoint; /tmp/setrlimit 10000 || s=$((s + 4))
+cd $here
+umount $mntpoint
+mdconfig -d -u $mdstart
+
+echo "Testing tmpfs"
+mount -o size=20000 -t tmpfs dummy $mntpoint
+cd $mntpoint; /tmp/setrlimit 10000 || s=$((s + 8))
+cd $here
+umount $mntpoint
+
+rm -f /tmp/setrlimit /tmp/setrlimit.c
+exit $s
diff --git a/tools/test/stress2/misc/setrlimit2.sh b/tools/test/stress2/misc/setrlimit2.sh
new file mode 100755
index 000000000000..4eea25ef3ee4
--- /dev/null
+++ b/tools/test/stress2/misc/setrlimit2.sh
@@ -0,0 +1,118 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Demonstrate that a mapped SHARED file can be updated past LIMIT_FSIZE
+
+# Kostik wrote:
+# This one should be reproducible when you
+# - have file larger than e.g. RLIMIT_FSIZE
+# - mmaped it without closing the file descriptor
+# - dirty its pages beyond the limit
+# - then unmap
+# - then close the file descriptor.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+cat > /tmp/setrlimit2.c <<EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static int signals;
+
+static void
+handler(int sig __unused)
+{
+ signals++;
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct rlimit rlim;
+ struct sigaction act;
+ struct stat st;
+ size_t len;
+ int error, fd, ps;
+ char *file, *p;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <data file>\n", argv[0]);
+ exit(1);
+ }
+ act.sa_handler = handler;
+ act.sa_flags = 0;
+ sigemptyset(&act.sa_mask);
+ if (sigaction(SIGXFSZ, &act, NULL) != 0)
+ err(1, "sigaction");
+
+ file = argv[1];
+ ps = getpagesize();
+ if ((fd = open(file, O_RDWR)) == -1)
+ err(1, "open(%s)", file);
+ if ((error = fstat(fd, &st)) == -1)
+ err(1, "stat(%s)", file);
+ len = round_page(st.st_size);
+ if ((p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED)
+ err(1, "mmap");
+ rlim.rlim_cur = rlim.rlim_max = len / 2;;
+ if (setrlimit(RLIMIT_FSIZE, &rlim) == -1)
+ err(1, "setrlimit(%ld)", len / 2);
+
+ p[len / 2 + ps] = 'a';
+
+ if (munmap(p, len) == -1)
+ err(1, "unmap()");
+ close(fd);
+
+}
+EOF
+here=`pwd`
+cd /tmp
+mycc -o setrlimit2 -Wall -Wextra -O0 -g setrlimit2.c || exit 1
+data=/tmp/setrlimit2.data
+dd if=/dev/zero of=$data bs=1m count=1 status=none
+h1=`md5 < $data`
+
+./setrlimit2 $data
+
+h2=`md5 < $data`
+rm -f /tmp/setrlimit2 /tmp/setrlimit2.c
+[ $h1 = $h2 ] && exit 1 || exit 0
diff --git a/tools/test/stress2/misc/setsockopt.sh b/tools/test/stress2/misc/setsockopt.sh
index 969c7b23069b..439b1984cb3c 100755
--- a/tools/test/stress2/misc/setsockopt.sh
+++ b/tools/test/stress2/misc/setsockopt.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/setsockopt2.sh b/tools/test/stress2/misc/setsockopt2.sh
index d032c68f77c4..13cc3175cce3 100755
--- a/tools/test/stress2/misc/setsockopt2.sh
+++ b/tools/test/stress2/misc/setsockopt2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
@@ -86,6 +86,7 @@ EOF
#include <time.h>
#include <unistd.h>
+static int debug; /* set to 1 for debug output */
static volatile u_int *share;
#define PARALLEL 128
@@ -165,6 +166,8 @@ bad:
if (waitpid(pid, NULL, 0) != pid)
err(1, "waitpid(%d)", pid);
}
+ if (debug != 0 && success == 0)
+ fprintf(stderr, "No calls to connect() succeded.\n");
_exit(0);
}
diff --git a/tools/test/stress2/misc/shm2.sh b/tools/test/stress2/misc/shm2.sh
index 55d63b19f462..e45f9f45ac4f 100755
--- a/tools/test/stress2/misc/shm2.sh
+++ b/tools/test/stress2/misc/shm2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/shm_super.sh b/tools/test/stress2/misc/shm_super.sh
index 8437eb5be92f..59d142002264 100755
--- a/tools/test/stress2/misc/shm_super.sh
+++ b/tools/test/stress2/misc/shm_super.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Konstantin Belousov <kib@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/sigfastblock.sh b/tools/test/stress2/misc/sigfastblock.sh
index 403dbde31553..ce655a611e6d 100755
--- a/tools/test/stress2/misc/sigfastblock.sh
+++ b/tools/test/stress2/misc/sigfastblock.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Konstantin Belousov
#
diff --git a/tools/test/stress2/misc/sigfastblock2.sh b/tools/test/stress2/misc/sigfastblock2.sh
index 8354307f6f7a..c8474333cbca 100755
--- a/tools/test/stress2/misc/sigfastblock2.sh
+++ b/tools/test/stress2/misc/sigfastblock2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 corydoras@ridiculousfish.com
#
diff --git a/tools/test/stress2/misc/signal2.sh b/tools/test/stress2/misc/signal2.sh
new file mode 100755
index 000000000000..2cb0589f1dce
--- /dev/null
+++ b/tools/test/stress2/misc/signal2.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+# Test scenario from:
+# Bug 265889 - sys.kern.basic_signal.trap_signal_test crashes bhyve in i386 VM
+# Test scenario by: Li-Wen Hsu <lwhsu@FreeBSD.org>
+
+cat > /tmp/signal2.c <<EOF
+#include <stdio.h>
+#include <signal.h>
+
+#include <machine/psl.h>
+#define SET_TRACE_FLAG(ucp) (ucp)->uc_mcontext.mc_eflags |= PSL_T
+#define CLR_TRACE_FLAG(ucp) (ucp)->uc_mcontext.mc_eflags &= ~PSL_T
+
+static volatile sig_atomic_t trap_signal_fired = 0;
+
+static void
+trap_sig_handler(int signo __unused, siginfo_t *info __unused, void *_ucp)
+{
+ ucontext_t *ucp = _ucp;
+
+ if (trap_signal_fired < 9) {
+ SET_TRACE_FLAG(ucp);
+ } else {
+ CLR_TRACE_FLAG(ucp);
+ }
+ trap_signal_fired++;
+}
+
+int main() {
+ struct sigaction sa = {
+ .sa_sigaction = trap_sig_handler,
+ .sa_flags = SA_SIGINFO,
+ };
+
+ sigemptyset(&sa.sa_mask);
+ sigaction(SIGTRAP, &sa, NULL);
+
+ raise(SIGTRAP);
+
+ printf("test\n");
+}
+EOF
+cc -o /tmp/signal2 -Wall -Wextra -O0 -m32 /tmp/signal2.c || exit 1
+
+/tmp/signal2; s=$?
+for i in `jot 30`; do
+ /tmp/signal2 &
+done > /dev/null
+wait
+
+rm -f /tmp/signal2 /tmp/signal2.c
+exit $s
diff --git a/tools/test/stress2/misc/sigreturn2.sh b/tools/test/stress2/misc/sigreturn2.sh
new file mode 100755
index 000000000000..8960b9b3958c
--- /dev/null
+++ b/tools/test/stress2/misc/sigreturn2.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# A sigreturn(2) syscall fuzzer
+
+# panic: vm_fault_lookup: fault on nofault entry, addr: 0
+# cpuid = 0
+# time = 1661248103
+# KDB: stack backtrace:
+# db_trace_self_wrapper(e,27e1dae0,27e1dae2,ffc07db8,c1f0490,...) at db_trace_self_wrapper+0x28/frame 0xffc07d24
+# vpanic(150b260,ffc07d60,ffc07d60,ffc07e20,12cb565,...) at vpanic+0xf4/frame 0xffc07d40
+# panic(150b260,14ec2f3,0,149349d,1430,...) at panic+0x14/frame 0xffc07d54
+# vm_fault(1e37000,0,4,0,0) at vm_fault+0x1725/frame 0xffc07e20
+# vm_fault_trap(1e37000,3b,4,0,0,0) at vm_fault_trap+0x52/frame 0xffc07e48
+# trap_pfault(3b,0,0) at trap_pfault+0x176/frame 0xffc07e94
+# trap(ffc07f6c,8,28,28,1915b000,...) at trap+0x2d9/frame 0xffc07f60
+# calltrap() at 0xffc031ef/frame 0xffc07f60
+# --- trap 0xc, eip = 0x3b, esp = 0xffc07fac, ebp = 0xffc0340c ---
+# (null)() at 0x3b/frame 0xffc0340c
+# KDB: enter: panic
+# [ thread pid 26126 tid 120029 ]
+# Stopped at kdb_enter+0x34: movl $0,kdb_why
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 ast-n257558-eb20af97a66-dirty: Mon Aug 22 17:53:22 CEST 2022
+# pho@mercat1.netperf.freebsd.org:/media/obj/var/tmp/deviant3/i386.i386/sys/PHO
+# db>
+
+inc=/usr/include/sys/syscall.h
+[ -f $inc ] || exit 0
+num=`awk '/SYS_sigreturn/ {print $NF}' < $inc`
+old=`grep -E 'sigreturn \*' < $inc | \
+ sed 's/.* \([0-9]\{1,3\}\) .*/\1/' | tr '\n' ' '`
+num="$num $old"
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 180 ]; do
+ for i in $num; do
+ echo "noswap=1 ./syscall4.sh $i"
+ noswap=1 ./syscall4.sh $i
+ done
+done
+
+exit 0
diff --git a/tools/test/stress2/misc/sigreturn3.sh b/tools/test/stress2/misc/sigreturn3.sh
new file mode 100755
index 000000000000..271ade287e9a
--- /dev/null
+++ b/tools/test/stress2/misc/sigreturn3.sh
@@ -0,0 +1,181 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Fatal trap -4186856: UNKNOWN while in kernel mode
+# cpuid = 1; apic id = 01
+# error code = 0xfbafcf8c
+# instruction pointer = 0x79e4:0x4
+# stack pointer = 0x28:0xffc0aff0
+# frame pointer = 0x28:0x204620d4
+# code segment = base 0x0, limit 0x0, type 0x0
+# = DPL 0, pres 0, def32 0, gran 0
+# processor eflags = trace trap, at 0x3b/frame 0xffc0340c
+# KDB: enter: panic
+# [ thread pid 15631 tid 114622 ]
+# Stopped at kdb_enter+0x34: movl $0,kdb_why
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+prog=sigreturn3
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libutil.h>
+#include <pthread.h>
+#include <pthread_np.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define N 4096
+#define RUNTIME 120
+#define THREADS 1
+
+static uint32_t r[N];
+
+static void
+hand(int i __unused) { /* handler */
+ exit(1);
+}
+
+static void *
+churn(void *arg __unused)
+{
+ time_t start;
+
+ pthread_set_name_np(pthread_self(), __func__);
+ start = time(NULL);
+ while (time(NULL) - start < 10) {
+ arc4random_buf(r, sizeof(r));
+ usleep(100);
+ }
+ return(NULL);
+}
+
+static void *
+calls(void *arg __unused)
+{
+ time_t start;
+
+ start = time(NULL);
+ while (time(NULL) - start < 10) {
+ arc4random_buf(r, sizeof(r));
+ alarm(1);
+ syscall(SYS_sigreturn, r);
+ }
+
+ return (NULL);
+}
+
+int
+main(int argc, char **argv)
+{
+ struct passwd *pw;
+ struct rlimit limit;
+ pid_t pid;
+ pthread_t rp, cp[THREADS];
+ time_t start;
+ int e, j;
+
+ if ((pw = getpwnam("nobody")) == NULL)
+ err(1, "failed to resolve nobody");
+
+ if (getenv("USE_ROOT") && argc == 2)
+ fprintf(stderr, "Running syscall4 as root for %s.\n",
+ argv[1]);
+ else {
+ if (setgroups(1, &pw->pw_gid) ||
+ setegid(pw->pw_gid) || setgid(pw->pw_gid) ||
+ seteuid(pw->pw_uid) || setuid(pw->pw_uid))
+ err(1, "Can't drop privileges to \"nobody\"");
+ endpwent();
+ }
+
+ limit.rlim_cur = limit.rlim_max = 1000;
+#if defined(RLIMIT_NPTS)
+ if (setrlimit(RLIMIT_NPTS, &limit) < 0)
+ err(1, "setrlimit");
+#endif
+
+ signal(SIGALRM, hand);
+ signal(SIGILL, hand);
+ signal(SIGFPE, hand);
+ signal(SIGSEGV, hand);
+ signal(SIGBUS, hand);
+ signal(SIGURG, hand);
+ signal(SIGSYS, hand);
+ signal(SIGTRAP, hand);
+
+ if (daemon(1, 1) == -1)
+ err(1, "daemon()");
+
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME) {
+ if ((pid = fork()) == 0) {
+ if ((e = pthread_create(&rp, NULL, churn, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ for (j = 0; j < THREADS; j++)
+ if ((e = pthread_create(&cp[j], NULL, calls,
+ NULL)) != 0)
+ errc(1, e, "pthread_create");
+ for (j = 0; j < THREADS; j++)
+ pthread_join(cp[j], NULL);
+
+ if ((e = pthread_kill(rp, SIGINT)) != 0)
+ errc(1, e, "pthread_kill");
+ if ((e = pthread_join(rp, NULL)) != 0)
+ errc(1, e, "pthread_join");
+ _exit(0);
+ }
+ waitpid(pid, NULL, 0);
+ }
+
+ return (0);
+}
+EOF
+
+cd /tmp
+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
+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
new file mode 100755
index 000000000000..9e2a6a32715c
--- /dev/null
+++ b/tools/test/stress2/misc/sigreturn4.sh
@@ -0,0 +1,207 @@
+#!/bin/sh
+
+# panic: vm_fault_lookup: fault on nofault entry, addr: 0
+# cpuid = 2
+# time = 1661698922
+# KDB: stack backtrace:
+# db_trace_self_wrapper(b,2931e740,2931e742,ffc0ddb8,190431,...) at db_trace_self_wrapper+0x28/frame 0xffc0dd24
+# vpanic(150acba,ffc0dd60,ffc0dd60,ffc0de20,12cc155,...) at vpanic+0xf4/frame 0xffc0dd40
+# panic(150acba,14ec1ab,0,146253d,1430,...) at panic+0x14/frame 0xffc0dd54
+# vm_fault(1e360c8,0,4,0,0) at vm_fault+0x1725/frame 0xffc0de20
+# vm_fault_trap(1e360c8,3b,4,0,0,0) at vm_fault_trap+0x52/frame 0xffc0de48
+# trap_pfault(3b,0,0) at trap_pfault+0x176/frame 0xffc0de94
+# trap(ffc0df6c,8,28,28,19156000,...) at trap+0x2d9/frame 0xffc0df60
+# calltrap() at 0xffc031ef/frame 0xffc0df60
+# --- trap 0xc, eip = 0x3b, esp = 0xffc0dfac, ebp = 0xffc0340c ---
+# (null)() at 0x3b/frame 0xffc0340c
+# KDB: enter: panic
+# [ thread pid 54680 tid 102765 ]
+# Stopped at kdb_enter+0x34: movl $0,kdb_why
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 main-n257606-9ea2716b775-dirty: Thu Aug 25 10:47:45 CEST 2022
+# pho@mercat1.netperf.freebsd.org:/media/ob
+# j/usr/src/i386.i386/sys/PHO\012
+# db> show proc
+# Process 54680 (date) at 0x28905d50:
+# state: NORMAL
+# uid: 0 gids: 0, 0, 5
+# parent: pid 785 at 0x26c14000
+# ABI: FreeBSD ELF32
+# flag: 0x10004002 flag2: 0
+# arguments: date +%s
+# reaper: 0x18c710a4 reapsubtree: 1
+# sigparent: 20
+# vmspace: 0x29332100
+# (map 0x29332100)
+# (map.pmap 0x29332174)
+# (pmap 0x293321b0)
+# threads: 1
+# 102765 Run CPU 2 date
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+prog=sigreturn4
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+
+#include <ucontext.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libutil.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define RUNTIME 120
+#define THREADS 1
+
+static void
+hand(int i __unused) { /* handler */
+ _exit(1);
+}
+
+static long
+random_long(long mi, long ma)
+{
+ return (arc4random() % (ma - mi + 1) + mi);
+}
+
+static void
+flip(void *ap, size_t len)
+{
+ unsigned char *cp;
+ int byte;
+ unsigned char bit, buf, mask, old __unused;
+
+ cp = (unsigned char *)ap;
+ byte = random_long(0, len);
+ bit = random_long(0,7);
+ mask = ~(1 << bit);
+ buf = cp[byte];
+ old = cp[byte];
+ buf = (buf & mask) | (~buf & ~mask);
+ cp[byte] = buf;
+}
+
+static void *
+churn(void *arg __unused)
+{
+ time_t start;
+
+ start = time(NULL);
+ while (time(NULL) - start < 10) {
+ usleep(100);
+ }
+ return(NULL);
+}
+
+static void *
+calls(void *arg __unused)
+{
+ time_t start;
+ ucontext_t uc;
+ int n;
+
+ start = time(NULL);
+ while (time(NULL) - start < 10) {
+ n = 0;
+ if (getcontext(&uc) == -1)
+ err(1, "getcontext");
+ n++;
+
+ if (n == 1) {
+ flip(&uc, sizeof(uc));
+ alarm(1);
+ if (sigreturn(&uc) == -1)
+ err(1, "sigreturn()");
+ } else
+ break;
+ }
+ return (NULL);
+}
+
+int
+main(int argc, char **argv)
+{
+ struct passwd *pw;
+ struct rlimit limit;
+ pid_t pid;
+ pthread_t rp, cp[THREADS];
+ time_t start;
+ int e, j;
+
+ if ((pw = getpwnam("nobody")) == NULL)
+ err(1, "failed to resolve nobody");
+
+ if (getenv("USE_ROOT") && argc == 2)
+ fprintf(stderr, "Running sigreturn4 as root for %s.\n",
+ argv[1]);
+ else {
+ if (setgroups(1, &pw->pw_gid) ||
+ setegid(pw->pw_gid) || setgid(pw->pw_gid) ||
+ seteuid(pw->pw_uid) || setuid(pw->pw_uid))
+ err(1, "Can't drop privileges to \"nobody\"");
+ endpwent();
+ }
+
+ limit.rlim_cur = limit.rlim_max = 1000;
+#if defined(RLIMIT_NPTS)
+ if (setrlimit(RLIMIT_NPTS, &limit) < 0)
+ err(1, "setrlimit");
+#endif
+
+ signal(SIGALRM, hand);
+ signal(SIGILL, hand);
+ signal(SIGFPE, hand);
+ signal(SIGSEGV, hand);
+ signal(SIGBUS, hand);
+ signal(SIGURG, hand);
+ signal(SIGSYS, hand);
+ signal(SIGTRAP, hand);
+
+ if (daemon(1, 1) == -1)
+ err(1, "daemon()");
+
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME) {
+ if ((pid = fork()) == 0) {
+ if ((e = pthread_create(&rp, NULL, churn, NULL)) != 0)
+ errc(1, e, "pthread_create");
+ for (j = 0; j < THREADS; j++)
+ if ((e = pthread_create(&cp[j], NULL, calls,
+ NULL)) != 0)
+ errc(1, e, "pthread_create");
+ for (j = 0; j < THREADS; j++)
+ pthread_join(cp[j], NULL);
+
+ if ((e = pthread_kill(rp, SIGINT)) != 0)
+ errc(1, e, "pthread_kill");
+ if ((e = pthread_join(rp, NULL)) != 0)
+ errc(1, e, "pthread_join");
+ _exit(0);
+ }
+ waitpid(pid, NULL, 0);
+ }
+
+ return (0);
+}
+EOF
+
+cd /tmp
+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
+done
+rm -f /tmp/$prog /tmp/$ptog.c /tmp/$prog.core
+exit 0
diff --git a/tools/test/stress2/misc/sigstop2.sh b/tools/test/stress2/misc/sigstop2.sh
index 286936c2fb1a..640af0801318 100755
--- a/tools/test/stress2/misc/sigstop2.sh
+++ b/tools/test/stress2/misc/sigstop2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/smrstress.sh b/tools/test/stress2/misc/smrstress.sh
index 5806f9231520..b174cb5aa087 100755
--- a/tools/test/stress2/misc/smrstress.sh
+++ b/tools/test/stress2/misc/smrstress.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/smrstress2.sh b/tools/test/stress2/misc/smrstress2.sh
index 8f9f4d86a4fd..054fc922708d 100755
--- a/tools/test/stress2/misc/smrstress2.sh
+++ b/tools/test/stress2/misc/smrstress2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/snap12.sh b/tools/test/stress2/misc/snap12.sh
index 759b00be33d4..bca6af6efe5d 100755
--- a/tools/test/stress2/misc/snap12.sh
+++ b/tools/test/stress2/misc/snap12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/snap13.sh b/tools/test/stress2/misc/snap13.sh
new file mode 100755
index 000000000000..75550e76a784
--- /dev/null
+++ b/tools/test/stress2/misc/snap13.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Test mounting of snapshots for different UFS types
+
+# Seen: mount of a -O1 snapshot failed
+# Fixed by:
+# f1549d7d5229 Write out corrected superblock when creating a UFS/FFS snapshot.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+s=0
+m2=$((mdstart + 1))
+mp2=$mntpoint$m2
+[ -d $mp2 ] || mkdir -p $mp2
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+[ -c /dev/md$m2 ] && mdconfig -d -u $m2
+mdconfig -a -t swap -s 2g -u $mdstart || exit 1
+for newfs_flags in "-O2" "-U" "-j" "-O1"; do
+ echo "newfs $newfs_flags md$mdstart"
+ newfs $newfs_flags md$mdstart > /dev/null
+ mount /dev/md$mdstart $mntpoint
+ touch $mntpoint/file
+
+ rm -f $mntpoint/.snap/stress2
+ mksnap_ffs $mntpoint $mntpoint/.snap/stress2 || { s=1; break; }
+ mdconfig -a -t vnode -f $mntpoint/.snap/stress2 -u $m2 -o readonly ||
+ { s=2; break; }
+ mount -t ufs -o ro /dev/md$m2 $mp2 || {
+ echo "mount of a $newfs_flags snapshot failed"
+ dumpfs -s /dev/md$m2; s=3; break; }
+ [ -f $mp2/file ] || { s=4; ls -l $mp2; }
+ umount $mp2
+ mdconfig -d -u $m2
+ umount $mntpoint
+done
+mount | grep -q "on $mntpoint " && umount $mntpoint
+
+mdconfig -d -u $mdstart
+exit $s
diff --git a/tools/test/stress2/misc/socketpair4.sh b/tools/test/stress2/misc/socketpair4.sh
index 65fb55d975ad..c9e07b3494fc 100755
--- a/tools/test/stress2/misc/socketpair4.sh
+++ b/tools/test/stress2/misc/socketpair4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
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/sort2.sh b/tools/test/stress2/misc/sort2.sh
index ba3d5a0a01f8..fb2965ea6c02 100755
--- a/tools/test/stress2/misc/sort2.sh
+++ b/tools/test/stress2/misc/sort2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/split.sh b/tools/test/stress2/misc/split.sh
index 59e3c6f140e1..2709a38e77b5 100755
--- a/tools/test/stress2/misc/split.sh
+++ b/tools/test/stress2/misc/split.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/su.sh b/tools/test/stress2/misc/su.sh
index da29146c3ab6..c4ed6eee93ac 100755
--- a/tools/test/stress2/misc/su.sh
+++ b/tools/test/stress2/misc/su.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/suj11.sh b/tools/test/stress2/misc/suj11.sh
index 362d33caf8a4..01f3a49be087 100755
--- a/tools/test/stress2/misc/suj11.sh
+++ b/tools/test/stress2/misc/suj11.sh
@@ -42,7 +42,7 @@ newfs -j md$mdstart > /dev/null
mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
-export runRUNTIME=30m
+export runRUNTIME=10m
export RUNDIR=$mntpoint/stressX
su $testuser -c 'cd ..; ./run.sh marcus.cfg' > /dev/null 2>&1
diff --git a/tools/test/stress2/misc/suj12.sh b/tools/test/stress2/misc/suj12.sh
index d0cbecfb1a37..48b138fbd2d3 100755
--- a/tools/test/stress2/misc/suj12.sh
+++ b/tools/test/stress2/misc/suj12.sh
@@ -32,6 +32,9 @@
# OOM seen: https://people.freebsd.org/~pho/stress/log/suj12.txt
+# watchdogd fired:
+# https://people.freebsd.org/~pho/stress/log/log0428.txt
+
. ../default.cfg
gnop load || exit 0
diff --git a/tools/test/stress2/misc/suj15.sh b/tools/test/stress2/misc/suj15.sh
index 6ab9e653f12c..86bf2f4e3f1d 100755
--- a/tools/test/stress2/misc/suj15.sh
+++ b/tools/test/stress2/misc/suj15.sh
@@ -48,7 +48,7 @@ newfs -j md$mdstart > /dev/null
mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
-export runRUNTIME=30m
+export runRUNTIME=10m
export RUNDIR=$mntpoint/stressX
su $testuser -c 'cd ..; ./run.sh jeff.cfg > /dev/null' &
diff --git a/tools/test/stress2/misc/suj16.sh b/tools/test/stress2/misc/suj16.sh
index b58f406e7564..64e64dd65fbc 100755
--- a/tools/test/stress2/misc/suj16.sh
+++ b/tools/test/stress2/misc/suj16.sh
@@ -46,7 +46,7 @@ newfs -j md$mdstart > /dev/null 2>&1
mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
-export runRUNTIME=30m
+export runRUNTIME=10m
export RUNDIR=$mntpoint/stressX
export creatINCARNATIONS=2
diff --git a/tools/test/stress2/misc/suj26.sh b/tools/test/stress2/misc/suj26.sh
index 940ef5c92a29..427f94dbc664 100755
--- a/tools/test/stress2/misc/suj26.sh
+++ b/tools/test/stress2/misc/suj26.sh
@@ -45,7 +45,7 @@ newfs $opt md$mdstart > /dev/null 2>&1
mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
-export runRUNTIME=30m
+export runRUNTIME=10m
export RUNDIR=$mntpoint/stressX
export creatINCARNATIONS=2
diff --git a/tools/test/stress2/misc/suj27.sh b/tools/test/stress2/misc/suj27.sh
index 8253243f5868..02cc70af5520 100755
--- a/tools/test/stress2/misc/suj27.sh
+++ b/tools/test/stress2/misc/suj27.sh
@@ -45,7 +45,7 @@ newfs $opt md$mdstart > /dev/null 2>&1
mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
-export runRUNTIME=30m
+export runRUNTIME=10m
export RUNDIR=$mntpoint/stressX
export creatINCARNATIONS=2
diff --git a/tools/test/stress2/misc/suj36.sh b/tools/test/stress2/misc/suj36.sh
new file mode 100755
index 000000000000..686274418901
--- /dev/null
+++ b/tools/test/stress2/misc/suj36.sh
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# SU+J and snapshots
+
+# "panic: handle_disk_io_initiation: Unexpected type jnewblk" seen
+# https://people.freebsd.org/~pho/stress/log/log0392.txt
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+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 5g -u $mdstart
+[ "$newfs_flags" = "-U" ] && newfs_flags="-j"
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+
+export LOAD=80
+export rwLOAD=80
+export runRUNTIME=10m
+export RUNDIR=$mntpoint/stressX
+export CTRLDIR=$mntpoint/stressX.control
+export MAXSWAPPCT=80
+export TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
+ egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp"`
+
+su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > /dev/null &
+
+sleep 5
+for i in `jot 10`; do
+ for j in `jot 5`; do
+ rm -f $mntpoint/.snap/snap.$j
+ mksnap_ffs $mntpoint $mntpoint/.snap/snap.$j
+ sleep 10
+ done
+ sleep 10
+done
+wait
+
+../tools/killall.sh
+for i in `jot 6`; do
+ mount | grep -q "on $mntpoint " || break
+ umount $mntpoint && break || sleep 10
+ [ $i -eq 6 ] &&
+ { echo FATAL; fstat -mf $mntpoint; exit 1; }
+done
+fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+grep -q "WAS MODIFIED" $log && { tail -12 $log; s=100; }
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/suj4.sh b/tools/test/stress2/misc/suj4.sh
index 27001a64a0e5..928909077cef 100755
--- a/tools/test/stress2/misc/suj4.sh
+++ b/tools/test/stress2/misc/suj4.sh
@@ -40,7 +40,7 @@ mount /dev/md$mdstart $mntpoint
chmod 777 $mntpoint
export RUNDIR=$mntpoint/stressX
-export runRUNTIME=30m
+export runRUNTIME=10m
set `df -ik $mntpoint | tail -1 | awk '{print $4,$7}'`
export KBLOCKS=$(($1 / 2))
export INODES=$(($2 / 2))
diff --git a/tools/test/stress2/misc/suj5.sh b/tools/test/stress2/misc/suj5.sh
index 2e49e0706d6f..957065adc60c 100755
--- a/tools/test/stress2/misc/suj5.sh
+++ b/tools/test/stress2/misc/suj5.sh
@@ -28,7 +28,8 @@
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
-# Deadlock seen
+# "panic: general protection fault" seen:
+# https://people.freebsd.org/~pho/stress/log/log0398.txt
. ../default.cfg
diff --git a/tools/test/stress2/misc/swap5.sh b/tools/test/stress2/misc/swap5.sh
index a0d746e1d2e2..c9f715d57b9a 100755
--- a/tools/test/stress2/misc/swap5.sh
+++ b/tools/test/stress2/misc/swap5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/swap6.sh b/tools/test/stress2/misc/swap6.sh
index 30a3fd8e703a..a1eaea6b86a6 100755
--- a/tools/test/stress2/misc/swap6.sh
+++ b/tools/test/stress2/misc/swap6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
@@ -33,7 +33,7 @@
. ../default.cfg
[ `sysctl -n vm.swap_total` -eq 0 ] && exit 0
-min=5 # percent swap usage
+min=10 # percent swap usage
(cd ../testcases/swap; ./swap -t 10m -i 100 -l 100 -h > /dev/null) &
sleep 1
mx=0
diff --git a/tools/test/stress2/misc/swapoff3.sh b/tools/test/stress2/misc/swapoff3.sh
index 89b775a4f59c..5bd9e338a80f 100755
--- a/tools/test/stress2/misc/swapoff3.sh
+++ b/tools/test/stress2/misc/swapoff3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Mark Johnston
#
diff --git a/tools/test/stress2/misc/swapoff4.sh b/tools/test/stress2/misc/swapoff4.sh
index 8bba94faebd1..564715030478 100755
--- a/tools/test/stress2/misc/swapoff4.sh
+++ b/tools/test/stress2/misc/swapoff4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/swapoff5.sh b/tools/test/stress2/misc/swapoff5.sh
index fa4e0fe37a17..9801c5956716 100755
--- a/tools/test/stress2/misc/swapoff5.sh
+++ b/tools/test/stress2/misc/swapoff5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Mark Johnston
#
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 00ada39e5002..9332f906a3e0 100755
--- a/tools/test/stress2/misc/symlink5.sh
+++ b/tools/test/stress2/misc/symlink5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
@@ -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/syscall4.sh b/tools/test/stress2/misc/syscall4.sh
index ce7e99dcde54..3937d45c0303 100755
--- a/tools/test/stress2/misc/syscall4.sh
+++ b/tools/test/stress2/misc/syscall4.sh
@@ -260,7 +260,7 @@ static void *
calls(void *arg __unused)
{
time_t start;
- int i, j, num;
+ int i __unused, j, num;
unsigned long arg1, arg2, arg3, arg4, arg5, arg6, arg7;
#ifdef __NP__
diff --git a/tools/test/stress2/misc/systrace.sh b/tools/test/stress2/misc/systrace.sh
index aa7b8426dddf..c41675e77da3 100755
--- a/tools/test/stress2/misc/systrace.sh
+++ b/tools/test/stress2/misc/systrace.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/systrace2.sh b/tools/test/stress2/misc/systrace2.sh
index a8c4d05106a7..0ebdfd9549d1 100755
--- a/tools/test/stress2/misc/systrace2.sh
+++ b/tools/test/stress2/misc/systrace2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/syzkaller11.sh b/tools/test/stress2/misc/syzkaller11.sh
index 9586092cd5b3..788ea3a9557a 100755
--- a/tools/test/stress2/misc/syzkaller11.sh
+++ b/tools/test/stress2/misc/syzkaller11.sh
@@ -218,7 +218,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller12.sh b/tools/test/stress2/misc/syzkaller12.sh
index dc026dc348bc..f5468c6c5e1f 100755
--- a/tools/test/stress2/misc/syzkaller12.sh
+++ b/tools/test/stress2/misc/syzkaller12.sh
@@ -94,7 +94,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller14.sh b/tools/test/stress2/misc/syzkaller14.sh
index 5fa99004f838..9181fe71a2af 100755
--- a/tools/test/stress2/misc/syzkaller14.sh
+++ b/tools/test/stress2/misc/syzkaller14.sh
@@ -229,7 +229,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller15.sh b/tools/test/stress2/misc/syzkaller15.sh
index d15017d7eb12..7a13bd819f0b 100755
--- a/tools/test/stress2/misc/syzkaller15.sh
+++ b/tools/test/stress2/misc/syzkaller15.sh
@@ -112,7 +112,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller16.sh b/tools/test/stress2/misc/syzkaller16.sh
index 8671b46474ac..7035223b8f0e 100755
--- a/tools/test/stress2/misc/syzkaller16.sh
+++ b/tools/test/stress2/misc/syzkaller16.sh
@@ -273,7 +273,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller19.sh b/tools/test/stress2/misc/syzkaller19.sh
index b36b12e524f2..116ab539c152 100755
--- a/tools/test/stress2/misc/syzkaller19.sh
+++ b/tools/test/stress2/misc/syzkaller19.sh
@@ -78,7 +78,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller24.sh b/tools/test/stress2/misc/syzkaller24.sh
index 12a816598b8f..98d4f90b146f 100755
--- a/tools/test/stress2/misc/syzkaller24.sh
+++ b/tools/test/stress2/misc/syzkaller24.sh
@@ -81,7 +81,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller26.sh b/tools/test/stress2/misc/syzkaller26.sh
index f14806199ff5..857ba0eaac65 100755
--- a/tools/test/stress2/misc/syzkaller26.sh
+++ b/tools/test/stress2/misc/syzkaller26.sh
@@ -82,7 +82,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller27.sh b/tools/test/stress2/misc/syzkaller27.sh
index b003f6aec319..a84c921e462d 100755
--- a/tools/test/stress2/misc/syzkaller27.sh
+++ b/tools/test/stress2/misc/syzkaller27.sh
@@ -86,7 +86,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller28.sh b/tools/test/stress2/misc/syzkaller28.sh
index c6ba56d1e222..7062d84a8234 100755
--- a/tools/test/stress2/misc/syzkaller28.sh
+++ b/tools/test/stress2/misc/syzkaller28.sh
@@ -220,7 +220,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller29.sh b/tools/test/stress2/misc/syzkaller29.sh
index bc5dc94768d0..5976e2cc596d 100755
--- a/tools/test/stress2/misc/syzkaller29.sh
+++ b/tools/test/stress2/misc/syzkaller29.sh
@@ -26,7 +26,7 @@
# Fixed by r368116
-# May change policy for random threads to to domainset_fixed
+# May change policy for random threads to domainset_fixed
exit 0
. ../default.cfg
@@ -79,7 +79,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller30.sh b/tools/test/stress2/misc/syzkaller30.sh
index f798386a83d1..d159da78307c 100755
--- a/tools/test/stress2/misc/syzkaller30.sh
+++ b/tools/test/stress2/misc/syzkaller30.sh
@@ -29,7 +29,7 @@
# Fixed by r368462
-# May change policy for random threads to to domainset_fixed
+# May change policy for random threads to domainset_fixed
exit 0
. ../default.cfg
diff --git a/tools/test/stress2/misc/syzkaller31.sh b/tools/test/stress2/misc/syzkaller31.sh
index 12eb98bd8c57..9815ac16f404 100755
--- a/tools/test/stress2/misc/syzkaller31.sh
+++ b/tools/test/stress2/misc/syzkaller31.sh
@@ -228,7 +228,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller32.sh b/tools/test/stress2/misc/syzkaller32.sh
index 03a13738c58a..1d96f1e3deff 100755
--- a/tools/test/stress2/misc/syzkaller32.sh
+++ b/tools/test/stress2/misc/syzkaller32.sh
@@ -231,7 +231,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller33.sh b/tools/test/stress2/misc/syzkaller33.sh
index 7f017cd167f1..fac3318e4d0d 100755
--- a/tools/test/stress2/misc/syzkaller33.sh
+++ b/tools/test/stress2/misc/syzkaller33.sh
@@ -88,7 +88,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller34.sh b/tools/test/stress2/misc/syzkaller34.sh
index 247079e1cd1a..d8b89991c2f2 100755
--- a/tools/test/stress2/misc/syzkaller34.sh
+++ b/tools/test/stress2/misc/syzkaller34.sh
@@ -53,7 +53,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller4.sh b/tools/test/stress2/misc/syzkaller4.sh
index 2a14d4d2b776..06797980b2a0 100755
--- a/tools/test/stress2/misc/syzkaller4.sh
+++ b/tools/test/stress2/misc/syzkaller4.sh
@@ -215,7 +215,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller42.sh b/tools/test/stress2/misc/syzkaller42.sh
index b5b234de9cd6..e0a02e18df2d 100755
--- a/tools/test/stress2/misc/syzkaller42.sh
+++ b/tools/test/stress2/misc/syzkaller42.sh
@@ -75,7 +75,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller43.sh b/tools/test/stress2/misc/syzkaller43.sh
index ffa6e1c6857c..fb32ea77ab66 100755
--- a/tools/test/stress2/misc/syzkaller43.sh
+++ b/tools/test/stress2/misc/syzkaller43.sh
@@ -214,7 +214,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller50.sh b/tools/test/stress2/misc/syzkaller50.sh
index d50e90866b8c..e813db054458 100755
--- a/tools/test/stress2/misc/syzkaller50.sh
+++ b/tools/test/stress2/misc/syzkaller50.sh
@@ -71,7 +71,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller51.sh b/tools/test/stress2/misc/syzkaller51.sh
index bd5b5da16d9a..772d6cc556c0 100755
--- a/tools/test/stress2/misc/syzkaller51.sh
+++ b/tools/test/stress2/misc/syzkaller51.sh
@@ -78,7 +78,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller53.sh b/tools/test/stress2/misc/syzkaller53.sh
index ecb0843b8c1f..bfbabe70a571 100755
--- a/tools/test/stress2/misc/syzkaller53.sh
+++ b/tools/test/stress2/misc/syzkaller53.sh
@@ -119,7 +119,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller54.sh b/tools/test/stress2/misc/syzkaller54.sh
index dc3ce0dc876c..252ba4e0f6f4 100755
--- a/tools/test/stress2/misc/syzkaller54.sh
+++ b/tools/test/stress2/misc/syzkaller54.sh
@@ -216,7 +216,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller55.sh b/tools/test/stress2/misc/syzkaller55.sh
index 9914587926cf..e1d3e7a28121 100755
--- a/tools/test/stress2/misc/syzkaller55.sh
+++ b/tools/test/stress2/misc/syzkaller55.sh
@@ -77,7 +77,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller58.sh b/tools/test/stress2/misc/syzkaller58.sh
index 0083e13f1692..6c11cd583b9d 100755
--- a/tools/test/stress2/misc/syzkaller58.sh
+++ b/tools/test/stress2/misc/syzkaller58.sh
@@ -216,7 +216,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller59.sh b/tools/test/stress2/misc/syzkaller59.sh
index b628c25d3298..1644ce627934 100755
--- a/tools/test/stress2/misc/syzkaller59.sh
+++ b/tools/test/stress2/misc/syzkaller59.sh
@@ -94,7 +94,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter = 0;
+ int iter __unused = 0;
for (;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller61.sh b/tools/test/stress2/misc/syzkaller61.sh
new file mode 100755
index 000000000000..a25ae4cf00d8
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller61.sh
@@ -0,0 +1,319 @@
+#!/bin/sh
+
+# Seen:
+# [root@mercat1 /usr/src/tools/test/stress2/misc]# pgrep syzkaller61 | xargs procstat -k
+# PID TID COMM TDNAME KSTACK
+# 13332 106396 syzkaller61 - mi_switch thread_suspend_check ast_suspend ast_handler ast doreti_ast
+# 13332 560662 syzkaller61 - mi_switch sleepq_switch sleepq_catch_signals sleepq_wait_sig _sleep umtxq_sleep do_wait __umtx_op_wait_uint_private sys__umtx_op amd64_syscall fast_syscall_common
+# 13332 560776 syzkaller61 - mi_switch thread_suspend_switch thread_single fork1 sys_rfork amd64_syscall fast_syscall_common
+# 13662 356440 syzkaller61 - mi_switch thread_suspend_check ast_suspend ast_handler ast doreti_ast
+# 13662 561098 syzkaller61 - mi_switch sleepq_switch sleepq_catch_signals sleepq_wait_sig _sleep umtxq_sleep do_wait __umtx_op_wait_uint_private sys__umtx_op amd64_syscall fast_syscall_common
+# 13662 561160 syzkaller61 - mi_switch thread_suspend_switch thread_single fork1 sys_rfork amd64_syscall fast_syscall_common
+# [root@mercat1 /usr/src/tools/test/stress2/misc]#
+
+[ `uname -p` != "amd64" ] && exit 0
+
+. ../default.cfg
+cat > /tmp/syzkaller61.c <<EOF
+// https://syzkaller.appspot.com/bug?id=00d8ca63243899ffb67b15ec93aee4ffa2f06637
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+647212368c3f32c6f13f@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.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/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+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 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)
+{
+ int i, call, thread;
+ for (call = 0; call < 2; 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 __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;
+ }
+ }
+}
+
+void execute_call(int call)
+{
+ switch (call) {
+ case 0:
+ NONFAILING(*(uint32_t*)0x20001f00 = 0x16);
+ NONFAILING(*(uint32_t*)0x20001f04 = 0);
+ NONFAILING(*(uint32_t*)0x20001f08 = 0);
+ NONFAILING(*(uint32_t*)0x20001f0c = 0);
+ NONFAILING(*(uint32_t*)0x20001f10 = 0);
+ NONFAILING(memset((void*)0x20001f14, 0, 60));
+ syscall(SYS_procctl, 0ul, 0, 6ul, 0x20001f00ul);
+ break;
+ case 1:
+ syscall(SYS_rfork, 0x85000ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ install_segv_handler();
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/syzkaller61 -Wall -Wextra -O0 /tmp/syzkaller61.c -lpthread ||
+ exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 10 -l 100 > /dev/null 2>&1) &
+for i in `jot 300`; do
+ (cd /tmp; timeout -k 3s 2s ./syzkaller61) &
+ pids="$pids $!"
+done
+sleep 5
+pkill -9 syzkaller61 swap; sleep 1
+pgrep -q syzkaller61 && { pgrep syzkaller61 | xargs ps -lHp; exit 1; }
+for pid in $pids; do
+ wait $pid
+done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/syzkaller61 /tmp/syzkaller61.c /tmp/syzkaller61.core \
+ /tmp/syzkaller.??????
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller62.sh b/tools/test/stress2/misc/syzkaller62.sh
new file mode 100755
index 000000000000..aa2d33ebaf9e
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller62.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+# panic: Assertion sb->sb_hiwat >= sb->uxdg_cc failed at ../../../kern/uipc_usrreq.c:1099
+# cpuid = 9
+# time = 1660909804
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01401e7970
+# vpanic() at vpanic+0x151/frame 0xfffffe01401e79c0
+# panic() at panic+0x43/frame 0xfffffe01401e7a20
+# uipc_dgram_sbspace() at uipc_dgram_sbspace+0x51/frame 0xfffffe01401e7a30
+# uipc_sosend_dgram() at uipc_sosend_dgram+0x690/frame 0xfffffe01401e7ac0
+# sosend() at sosend+0x49/frame 0xfffffe01401e7af0
+# soo_write() at soo_write+0x43/frame 0xfffffe01401e7b20
+# filemon_close_log() at filemon_close_log+0xd5/frame 0xfffffe01401e7b90
+# filemon_dtr() at filemon_dtr+0x31/frame 0xfffffe01401e7bb0
+# devfs_destroy_cdevpriv() at devfs_destroy_cdevpriv+0xab/frame 0xfffffe01401e7bd0
+# devfs_close_f() at devfs_close_f+0x64/frame 0xfffffe01401e7c00
+# _fdrop() at _fdrop+0x1b/frame 0xfffffe01401e7c20
+# closef() at closef+0x1db/frame 0xfffffe01401e7cb0
+# fdescfree() at fdescfree+0x433/frame 0xfffffe01401e7d80
+# exit1() at exit1+0x4df/frame 0xfffffe01401e7df0
+# sys_exit() at sys_exit+0xd/frame 0xfffffe01401e7e00
+# amd64_syscall() at amd64_syscall+0x145/frame 0xfffffe01401e7f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01401e7f30
+# --- syscall (1, FreeBSD ELF64, sys_exit), rip = 0x82301d16a, rsp = 0x8209bf628, rbp = 0x8209bf640 ---
+# KDB: enter: panic
+# [ thread pid 2876 tid 100222 ]
+# Stopped at x32: movq $0,0x12a1323(%rip)
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 main-n257506-eed634d113d-dirty: Thu Aug 18 13:56:53 CEST 2022
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO\012
+# db>
+
+. ../default.cfg
+cat > /tmp/syzkaller62.c <<EOF
+// https://syzkaller.appspot.com/bug?id=582310beb894769fc836748eec49b8d2f905e5ef
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+6e8be1ec8d77578a3df4@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[2] = {0xffffffffffffffff, 0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ intptr_t res = 0;
+ memcpy((void*)0x20000040, "/dev/filemon\000", 13);
+ res = syscall(SYS_openat, 0xffffffffffffff9cul, 0x20000040ul, 0ul, 0ul);
+ if (res != -1)
+ r[0] = res;
+ res = syscall(SYS_socketpair, 1ul, 2ul, 0, 0x20000080ul);
+ if (res != -1)
+ r[1] = *(uint32_t*)0x20000084;
+ *(uint32_t*)0x200000c0 = r[1];
+ syscall(SYS_ioctl, r[0], 0xc0045301ul, 0x200000c0ul);
+ *(uint32_t*)0x20000040 = 3;
+ syscall(SYS_setsockopt, r[1], 0xffff, 0x1001, 0x20000040ul, 4ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/syzkaller62 -Wall -Wextra -O0 /tmp/syzkaller62.c || exit 1
+
+kldstat | grep -q filemon || { kldload filemon.ko && loaded=1; }
+
+(cd /tmp; timeout -k 3s 2s ./syzkaller62)
+
+rm -rf /tmp/syzkaller62 /tmp/syzkaller62.c /tmp/syzkaller62.core \
+ /tmp/syzkaller.??????
+# Unload causes: Fatal trap 12: page fault while in kernel mode
+#[ $loaded ] && kldunload -f filemon.ko
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller63.sh b/tools/test/stress2/misc/syzkaller63.sh
new file mode 100755
index 000000000000..647801dbdbb9
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller63.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+# Fatal trap 12: page fault while in kernel mode
+# cpuid = 1; apic id = 01
+# fault virtual address = 0x20
+# fault code = supervisor read data, page not present
+# instruction pointer = 0x20:0xfa1a2c
+# stack pointer = 0x28:0x27a41a80
+# frame pointer = 0x28:0x27a41a98
+# code segment = base 0x0, limit 0xfffff, type 0x1b
+# = DPL 0, pres 1, def32 1, gran 1
+# processor eflags = interrupt enabled, resume, IOPL = 0
+# current process = 804 (syzkaller63)
+# trap number = 12
+# panic: page fault
+# cpuid = 1
+# time = 1675071979
+# KDB: stack backtrace:
+# db_trace_self_wrapper(d,2048e3a0,27a41a40,20,c,...) at db_trace_self_wrapper+0x28/frame 0x27a418d0
+# vpanic(146c355,27a4190c,27a4190c,27a41938,141f1d6,...) at vpanic+0xf4/frame 0x27a418ec
+# panic(146c355,15010e8,0,fffff,1dfc39b,...) at panic+0x14/frame 0x27a41900
+# trap_fatal(2048e3a0,2048e3a0,27a4196c,1008e0a,18cd6638,...) at trap_fatal+0x346/frame 0x27a41938
+# trap_pfault(20,0,0) at trap_pfault+0x6f/frame 0x27a4196c
+# trap(27a41a40,8,28,28,0,...) at trap+0x31b/frame 0x27a41a34
+# calltrap() at 0xffc0321f/frame 0x27a41a34
+# --- trap 0xc, eip = 0xfa1a2c, esp = 0x27a41a80, ebp = 0x27a41a98 ---
+# kern_cpuset_getid(141f60e,0,9,0,0,0) at kern_cpuset_getid+0x10c/frame 0x27a41a98
+# sys_cpuset_getid(2048e3a0,2048e644,2048e3a0,2048e3a0,27a41b9c,...) at sys_cpuset_getid+0x32/frame 0x27a41ac0
+# syscall(27a41ba8,3b,3b,3b,ffbfe9fc,...) at syscall+0x1ef/frame 0x27a41b9c
+# Xint0x80_syscall() at 0xffc03479/frame 0x27a41b9c
+# --- syscall (486, FreeBSD ELF32, cpuset_getid), eip = 0x2056317d, esp = 0xffbfe990, ebp = 0xffbfe9b0 ---
+# KDB: enter: panic
+# [ thread pid 804 tid 100092 ]
+# Stopped at kdb_enter+0x34: movl $0,kdb_why
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 main-n260354-34b867ca30479: Mon Jan 30 07:26:30 CET 2023
+# pho@mercat1.netperf.freebsd.org:/mnt25/obj/usr/src/i386.i386/sys/PHO
+# db>
+
+. ../default.cfg
+prog=$(basename "$0" .sh)
+[ `uname -p` = "i386" ] || exit 0
+
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=69dd3c8d867306dd9f97e2dae6ab1557fd8d2679
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+331e8402e0f7347f0f2a@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>
+
+int main(void)
+{
+ syscall(SYS_mmap, 0x10000000, 0x1000000, 7, 0x1012, -1, 0);
+ syscall(SYS_cpuset_getid, 0, 9, 0ull, 0);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+(cd /tmp; timeout -k 3s 2s ./$prog)
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core \
+ /tmp/syzkaller.??????
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller64.sh b/tools/test/stress2/misc/syzkaller64.sh
new file mode 100755
index 000000000000..f13fd415087b
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller64.sh
@@ -0,0 +1,328 @@
+#!/bin/sh
+
+[ `uname -p` != "amd64" ] && exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+[ "`sysctl -in kern.features.kasan`" != "1" ] && exit 0
+
+. ../default.cfg
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=749aa1fdb67018e9c0179373a60d523511bff02c
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+5cb51285603332d9be11@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.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/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+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 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)
+{
+ int i, call, thread;
+ for (call = 0; call < 5; 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 __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;
+ }
+ }
+}
+
+void execute_call(int call)
+{
+ switch (call) {
+ case 0:
+ syscall(SYS_thr_new, 0ul, 0ul);
+ break;
+ case 1:
+ syscall(SYS_setloginclass, 0ul);
+ break;
+ case 2:
+ syscall(SYS_vfork);
+ break;
+ case 3:
+ NONFAILING(*(uint32_t*)0x20001880 = 4);
+ syscall(SYS_sysarch, 8ul, 0x20001880ul);
+ break;
+ case 4:
+ syscall(SYS_getsid, 0);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ install_segv_handler();
+ do_sandbox_none();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd /tmp; timeout 2m ./$prog)
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/syzkaller.*
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller65.sh b/tools/test/stress2/misc/syzkaller65.sh
new file mode 100755
index 000000000000..8806a55e2733
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller65.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+# panic: in_pcblookup_hash_locked: invalid local address
+# cpuid = 11
+# time = 1678303805
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0657e466d0
+# vpanic() at vpanic+0x152/frame 0xfffffe0657e46720
+# panic() at panic+0x43/frame 0xfffffe0657e46780
+# in_pcblookup_hash_locked() at in_pcblookup_hash_locked+0x4e2/frame 0xfffffe0657e467f0
+# in_pcb_lport_dest() at in_pcb_lport_dest+0x28a/frame 0xfffffe0657e468a0
+# in_pcbconnect_setup() at in_pcbconnect_setup+0x31b/frame 0xfffffe0657e46940
+# udp_send() at udp_send+0x68b/frame 0xfffffe0657e46a50
+# udp6_send() at udp6_send+0x287/frame 0xfffffe0657e46c10
+# sosend_dgram() at sosend_dgram+0x327/frame 0xfffffe0657e46c70
+# sousrsend() at sousrsend+0x7e/frame 0xfffffe0657e46cd0
+# kern_sendit() at kern_sendit+0x1bc/frame 0xfffffe0657e46d60
+# sendit() at sendit+0xba/frame 0xfffffe0657e46db0
+# sys_sendto() at sys_sendto+0x4d/frame 0xfffffe0657e46e00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe0657e46f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe0657e46f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x822a3a31a, rsp = 0x8208224d8, rbp = 0x820822500 ---
+# KDB: enter: panic
+# [ thread pid 47141 tid 357973 ]
+# Stopped at kdb_enter+0x32: movq $0,0x12906d3(%rip)
+# db> x/s version
+# FreeBSD 14.0-CURRENT #0 main-n261389-109abf744bf76: Wed Mar 8 06:10:24 CET 2023
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/a
+# db>
+
+[ `uname -p` != "amd64" ] && exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=7cae38958ddfe2c338548b4217587bd6d89b43e2
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+c8e3dac881bba85bc029@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, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ intptr_t res = 0;
+ res = syscall(SYS_socket, 0x1cul, 2ul, 0);
+ if (res != -1)
+ r[0] = res;
+ *(uint32_t*)0x200001c0 = 0;
+ syscall(SYS_setsockopt, r[0], 0x29, 0x1b, 0x200001c0ul, 4ul);
+ *(uint8_t*)0x20000000 = 0x1c;
+ *(uint8_t*)0x20000001 = 0x1c;
+ *(uint16_t*)0x20000002 = htobe16(0x4e22);
+ *(uint32_t*)0x20000004 = 0;
+ memset((void*)0x20000008, 0, 10);
+ memset((void*)0x20000012, 255, 2);
+ *(uint32_t*)0x20000014 = htobe32(0);
+ *(uint32_t*)0x20000018 = 0;
+ syscall(SYS_sendto, r[0], 0ul, 0ul, 0ul, 0x20000000ul, 0x1cul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd /tmp; timeout 2m ./$prog)
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/syzkaller.*
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller66.sh b/tools/test/stress2/misc/syzkaller66.sh
new file mode 100755
index 000000000000..8d1e9afe6f6c
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller66.sh
@@ -0,0 +1,156 @@
+#!/bin/sh
+
+# panic: in_pcbconnect: inp is already connected
+# cpuid = 2
+# time = 1687326262
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe016e604b60
+# vpanic() at vpanic+0x150/frame 0xfffffe016e604bb0
+# panic() at panic+0x43/frame 0xfffffe016e604c10
+# in_pcbconnect_setup() at in_pcbconnect_setup/frame 0xfffffe016e604c60
+# tcp_connect() at tcp_connect+0xa3/frame 0xfffffe016e604ca0
+# tcp_usr_connect() at tcp_usr_connect+0xf3/frame 0xfffffe016e604d10
+# soconnectat() at soconnectat+0xaf/frame 0xfffffe016e604d60
+# kern_connectat() at kern_connectat+0xe1/frame 0xfffffe016e604dc0
+# sys_connect() at sys_connect+0x75/frame 0xfffffe016e604e00
+# amd64_syscall() at amd64_syscall+0x157/frame 0xfffffe016e604f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe016e604f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x823c81a6a, rsp = 0x8210ed3c8, rbp = 0x8210ed3e0 ---
+# KDB: enter: panic
+# [ thread pid 46907 tid 100356 ]
+# Stopped at kdb_enter+0x32: movq $0,0xddf693(%rip)
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 main-n263725-1efa7dbc0798e: Wed Jun 21 09:13:50 CEST 2023
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO-KASAN\012
+# db>
+
+[ `uname -p` != "amd64" ] && exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=44e3d85e927362a22cc594b9d1d3072f38da7972
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+f0f7871ec5397602b446@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 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[2] = {0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_one(void)
+{
+ intptr_t res = 0;
+ res = syscall(SYS_socket, 2ul, 1ul, 0);
+ if (res != -1)
+ r[0] = res;
+ *(uint8_t*)0x200001c0 = 0x10;
+ *(uint8_t*)0x200001c1 = 2;
+ *(uint16_t*)0x200001c2 = htobe16(0x4e22);
+ *(uint32_t*)0x200001c4 = htobe32(0x7f000001);
+ memset((void*)0x200001c8, 0, 8);
+ syscall(SYS_bind, r[0], 0x200001c0ul, 0x10ul);
+ syscall(SYS_listen, r[0], 0);
+ res = syscall(SYS_socket, 2ul, 1ul, 0);
+ if (res != -1)
+ r[1] = res;
+ *(uint8_t*)0x200000c0 = 0x10;
+ *(uint8_t*)0x200000c1 = 2;
+ *(uint16_t*)0x200000c2 = htobe16(0x4e22);
+ *(uint32_t*)0x200000c4 = htobe32(0x7f000001);
+ memset((void*)0x200000c8, 0, 8);
+ syscall(SYS_connect, r[1], 0x200000c0ul, 0x10ul);
+ *(uint64_t*)0x20002580 = 0;
+ *(uint32_t*)0x20002588 = 0;
+ *(uint64_t*)0x20002590 = 0;
+ *(uint64_t*)0x20002598 = 0;
+ *(uint64_t*)0x200025a0 = 0;
+ *(uint64_t*)0x200025a8 = 0;
+ *(uint32_t*)0x200025b0 = 0;
+ syscall(SYS_sendmsg, r[1], 0x20002580ul, 0x20104ul);
+ syscall(SYS_shutdown, r[1], 1ul);
+ *(uint8_t*)0x200000c0 = 0x10;
+ *(uint8_t*)0x200000c1 = 2;
+ *(uint16_t*)0x200000c2 = htobe16(0x4e22);
+ *(uint32_t*)0x200000c4 = htobe32(0x7f000001);
+ memset((void*)0x200000c8, 0, 8);
+ syscall(SYS_connect, r[1], 0x200000c0ul, 0x10ul);
+}
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+(cd /tmp; timeout 2m ./$prog)
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/syzkaller.*
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller67.sh b/tools/test/stress2/misc/syzkaller67.sh
new file mode 100755
index 000000000000..d5dc340442ae
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller67.sh
@@ -0,0 +1,99 @@
+#!/bin/sh
+
+# panic: ASan: Invalid access, 8-byte read at 0xfffffe01fece46f8, StackMiddle(f2)
+# cpuid = 4
+# time = 1687335671
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0xa5/frame 0xfffffe01fece42f0
+# kdb_backtrace() at kdb_backtrace+0xc7/frame 0xfffffe01fece4450
+# vpanic() at vpanic+0x1d7/frame 0xfffffe01fece4510
+# panic() at panic+0xb5/frame 0xfffffe01fece45e0
+# kasan_report() at kasan_report+0xdc/frame 0xfffffe01fece46b0
+# __cap_rights_is_set() at __cap_rights_is_set+0x186/frame 0xfffffe01fece47d0
+# fget_fcntl() at fget_fcntl+0xd7/frame 0xfffffe01fece48d0
+# kern_fcntl() at kern_fcntl+0x602/frame 0xfffffe01fece4c10
+# kern_fcntl_freebsd() at kern_fcntl_freebsd+0x244/frame 0xfffffe01fece4d30
+# ia32_syscall() at ia32_syscall+0x32a/frame 0xfffffe01fece4f30
+# int0x80_syscall_common() at int0x80_syscall_common+0x9c/frame 0xffffdb38
+# KDB: enter: panic
+# [ thread pid 4224 tid 100231 ]
+# Stopped at kdb_enter+0x34: movq $0,0x1e3f7c1(%rip)
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 main-n263725-1efa7dbc0798e: Wed Jun 21 09:13:50 CEST 2023
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO-KASAN
+# db>
+
+uname -p | grep -Eq "amd64|i386" || exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=81419dc41de046ccb99da6f333074b750ac36680
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+d35497494d68b4859367@syzkaller.appspotmail.com
+// i386 + ASan
+
+#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[5] = {0x0, 0x0, 0x0, 0x0, 0x0};
+
+int main(void)
+{
+ syscall(SYS_mmap, 0x10000000, 0x1000000, 7, 0x1012, -1, 0);
+ intptr_t res = 0;
+ syscall(SYS_munmap, 0x10ffa000, 0x3000);
+ syscall(SYS_mmap, 0x10ffd000, 0x1000, 4, 0x1010, -1, 0);
+ syscall(SYS_mmap, 0x10ffc000, 0x1000, 0, 0x1010, -1, 0);
+ syscall(SYS_mmap, 0x10ffc000, 0x1000, 0, 0x1010, -1, 0);
+ syscall(SYS_mprotect, 0x10ffe000, 0x2000, 7);
+ syscall(SYS_mprotect, 0x10ffd000, 0x3000, 0);
+ syscall(SYS_fork);
+ res = syscall(SYS_fork);
+ if (res != -1)
+ r[0] = res;
+ syscall(SYS_fork);
+ res = syscall(SYS_fork);
+ if (res != -1)
+ r[1] = res;
+ syscall(SYS_sigqueue, (intptr_t)r[1], 0x2b, 0);
+ res = syscall(SYS_fork);
+ if (res != -1)
+ r[2] = res;
+ syscall(SYS_sigqueue, (intptr_t)r[2], 0x2b, 0);
+ syscall(SYS_vfork);
+ syscall(SYS_fcntl, -1, 5, 0);
+ syscall(SYS_sigqueue, 0, 0x2b, 0);
+ syscall(SYS_getpgrp, (intptr_t)r[0]);
+ syscall(SYS_fork);
+ res = syscall(SYS_fork);
+ if (res != -1)
+ r[3] = res;
+ syscall(SYS_sigqueue, (intptr_t)r[3], 0x2b, 0);
+ syscall(SYS_getpid);
+ syscall(SYS_mmap, 0x10ffc000, 0x1000, 3, 0x10, -1, 7);
+ syscall(SYS_mmap, 0x10ffc000, 0x1000, 3, 0x10, -1, 7);
+ res = syscall(SYS_fork);
+ if (res != -1)
+ r[4] = res;
+ syscall(SYS_sigqueue, (intptr_t)r[4], 0xc, 0);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 -m32 /tmp/$prog.c || exit 1
+
+(cd /tmp; timeout 2m ./$prog)
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/syzkaller.*
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller68.sh b/tools/test/stress2/misc/syzkaller68.sh
new file mode 100755
index 000000000000..3d60af5215c5
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller68.sh
@@ -0,0 +1,235 @@
+#!/bin/sh
+
+# panic: mutex Giant owned at ../../../kern/kern_thread.c:1409
+# cpuid = 0
+# time = 1688501618
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0171ba2510
+# vpanic() at vpanic+0x150/frame 0xfffffe0171ba2560
+# panic() at panic+0x43/frame 0xfffffe0171ba25c0
+# __mtx_assert() at __mtx_assert+0xc4/frame 0xfffffe0171ba25d0
+# thread_suspend_check() at thread_suspend_check+0x38/frame 0xfffffe0171ba2610
+# sig_intr() at sig_intr+0x78/frame 0xfffffe0171ba2640
+# fork1() at fork1+0x238/frame 0xfffffe0171ba26c0
+# kproc_create() at kproc_create+0x92/frame 0xfffffe0171ba2790
+# kproc_kthread_add() at kproc_kthread_add+0xdd/frame 0xfffffe0171ba28b0
+# zthr_create_timer() at zthr_create_timer+0x109/frame 0xfffffe0171ba2930
+# arc_init() at arc_init+0x1b44/frame 0xfffffe0171ba2970
+# dmu_init() at dmu_init+0x31/frame 0xfffffe0171ba2980
+# spa_init() at spa_init+0xed/frame 0xfffffe0171ba29a0
+# zfs_kmod_init() at zfs_kmod_init+0x1f/frame 0xfffffe0171ba29c0
+# zfs_modevent() at zfs_modevent+0module_register_init() at module_register_init+0xb0/frame 0xfffffe0171ba2a10
+# linker_load_module() at linker_load_module+0xbd2/frame 0xfffffe0171ba2d10
+# kern_kldload() at kern_kldload+0x16f/frame 0xfffffe0171ba2d60
+# vfs_byname_kld() at vfs_byname_kld+0x31/frame 0xfffffe0171ba2da0
+# sys_mount() at sys_mount+0xa9/frame 0xfffffe0171ba2e00
+# amd64_syscall() at amd64_syscall+0x150/frame 0xfffffe0171ba2f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe0171ba2f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x823f70e9a, rsp = 0x82513af78, rbp = 0x82513af90 KDB: enter: panic
+# [ thread pid 43886 tid 178779 ]
+# Stopped at kdb_enter+0x32: movq $0,0xde5863(%rip)
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 main-n263953-d7614c010c762: Tue Jul 4 19:29:44 CEST 2023
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+uname -p | grep -Eq "amd64|i386" || exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=85a795d15aa54816d63f71f69bfb3a2c61635472
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+dce5858451a2329877ff@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)
+{
+ int i, call, thread;
+ for (call = 0; call < 1; 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);
+}
+
+void execute_call(int call)
+{
+ switch (call) {
+ case 0:
+ memcpy((void*)0x20000440, "zfs\000", 4);
+ syscall(SYS_mount, 0x20000440ul, 0ul, 0x8300648ul, 0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd /tmp; timeout 2m ./$prog)
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/syzkaller.*
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller69.sh b/tools/test/stress2/misc/syzkaller69.sh
new file mode 100755
index 000000000000..fbaa3e5b9c9c
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller69.sh
@@ -0,0 +1,494 @@
+#!/bin/sh
+
+# Fatal trap 12: page fault while in kernel mode
+# cpuid = 6; apic id = 06
+# fault virtual address = 0xb8
+# fault code = supervisor read data, page not present
+# instruction pointer = 0x20:0xffffffff80d3c17b
+# stack pointer = 0x28:0xfffffe00e49fab80
+# frame pointer = 0x28:0xfffffe00e49facc0
+# 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 = 12 (swi1: netisr 0)
+# rdi: fffff802d2d8daa0 rsi: fffffe00e49fab48 rdx: ffffffff819d5a90
+# rcx: ffffffff819d5a98 r8: 00000000ffffffff r9: 0000000000000000
+# rax: 0000000000000000 rbx: 0000000000000002 rbp: fffffe00e49facc0
+# r10: fffff802d2d8daa0 r11: 0000000000010000 r12: 0000000000000000
+# r13: fffff802d2d8da80 r14: 0000000000000060 r15: fffff802d2d8dab8
+# trap number = 12
+# panic: page fault
+# cpuid = 6
+# time = 1689053386
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00e49fa930
+# vpanic() at vpanic+0x149/frame 0xfffffe00e49fa980
+# panic() at panic+0x43/frame 0xfffffe00e49fa9e0
+# trap_fatal() at trap_fatal+0x40c/frame 0xfffffe00e49faa40
+# trap_pfault() at trap_pfault+0xae/frame 0xfffffe00e49faab0
+# calltrap() at calltrap+0x8/frame 0xfffffe00e49faab0
+# --- trap 0xc, rip = 0xffffffff80d3c17b, rsp = 0xfffffe00e49fab80, rbp = 0xfffffe00e49facc0 ---
+# tcp_input_with_port() at tcp_input_with_port+0x70b/frame 0xfffffe00e49facc0
+# tcp6_input_with_port() at tcp6_input_with_port+0x6a/frame 0xfffffe00e49facf0
+# tcp6_input() at tcp6_input+0xb/frame 0xfffffe00e49fad00
+# ip6_input() at ip6_input+0xc97/frame 0xfffffe00e49fade0
+# swi_net() at swi_net+0x19b/frame 0xfffffe00e49fae60
+# ithread_loop() at ithread_loop+0x266/frame 0xfffffe00e49faef0
+# fork_exit() at fork_exit+0x82/frame 0xfffffe00e49faf30
+# fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00e49faf30
+# --- trap 0, rip = 0, rsp = 0, rbp = 0 ---
+# KDB: enter: panic
+# [ thread pid 12 tid 100089 ]
+# Stopped at kdb_enter+0x32: movq $0,0xde5053(%rip)
+# db> x/s version
+# version: FreeBSD 14.0-CURRENT #0 main-n264110-43ed91e00bbb1: Tue Jul 11 06:28:21 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
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=44d933862f436b628c77db28122dbfa4e00990aa
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+e7d2e451f89fb444319b@syzkaller.appspotmail.com
+
+#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>
+
+static unsigned long long procid;
+
+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)
+{
+ int i, call, thread;
+ for (call = 0; call < 7; 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);
+ if (call == 3)
+ break;
+ 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 (;;) {
+ 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;
+ }
+ remove_dir(cwdbuf);
+ }
+}
+
+uint64_t r[2] = {0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ res = syscall(SYS_socket, 0x1cul, 1ul, 0);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ NONFAILING(*(uint32_t*)0x20000080 = 9);
+ syscall(SYS_setsockopt, r[0], 0xffff, 0x10000, 0x20000080ul, 4ul);
+ break;
+ case 2:
+ NONFAILING(*(uint8_t*)0x200000c0 = 0x1c);
+ NONFAILING(*(uint8_t*)0x200000c1 = 0x1c);
+ NONFAILING(*(uint16_t*)0x200000c2 = htobe16(0x4e20 + procid * 4));
+ NONFAILING(*(uint32_t*)0x200000c4 = 0);
+ NONFAILING(memset((void*)0x200000c8, 0, 16));
+ NONFAILING(*(uint32_t*)0x200000d8 = 0);
+ syscall(SYS_bind, r[0], 0x200000c0ul, 0x1cul);
+ break;
+ case 3:
+ NONFAILING(*(uint32_t*)0x20000080 = 9);
+ syscall(SYS_setsockopt, r[0], 0xffff, 0x10000, 0x20000080ul, 4ul);
+ break;
+ case 4:
+ NONFAILING(*(uint32_t*)0x20000040 = 0x72);
+ NONFAILING(*(uint8_t*)0x20000048 = 0x10);
+ NONFAILING(*(uint8_t*)0x20000049 = 2);
+ NONFAILING(*(uint16_t*)0x2000004a = htobe16(0x4e21 + procid * 4));
+ NONFAILING(*(uint32_t*)0x2000004c = htobe32(0x7f000001));
+ NONFAILING(memset((void*)0x20000050, 0, 8));
+ NONFAILING(memset((void*)0x20000058, 0, 112));
+ syscall(SYS_setsockopt, r[0], 0, 0x51, 0x20000040ul, 0x88ul);
+ break;
+ case 5:
+ res = syscall(SYS_socket, 0x1cul, 1ul, 0);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 6:
+ NONFAILING(*(uint8_t*)0x20000140 = 0x1c);
+ NONFAILING(*(uint8_t*)0x20000141 = 0x1c);
+ NONFAILING(*(uint16_t*)0x20000142 = htobe16(0x4e20 + procid * 4));
+ NONFAILING(*(uint32_t*)0x20000144 = 0);
+ NONFAILING(memset((void*)0x20000148, 0, 16));
+ NONFAILING(*(uint32_t*)0x20000158 = 0);
+ syscall(SYS_connect, r[1], 0x20000140ul, 0x1cul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ install_segv_handler();
+ for (procid = 0; procid < 4; procid++) {
+ if (fork() == 0) {
+ use_temporary_dir();
+ do_sandbox_none();
+ }
+ }
+ sleep(1000000);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 2m -i 10 -l 100 > /dev/null 2>&1) &
+
+(cd /tmp; timeout 2m ./$prog)
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/syzkaller.*
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller7.sh b/tools/test/stress2/misc/syzkaller7.sh
index f43747006862..c03a47d8b2d2 100755
--- a/tools/test/stress2/misc/syzkaller7.sh
+++ b/tools/test/stress2/misc/syzkaller7.sh
@@ -80,7 +80,7 @@ static void execute_one(void);
static void loop(void)
{
- int iter;
+ int iter __unused;
for (iter = 0;; iter++) {
int pid = fork();
if (pid < 0)
diff --git a/tools/test/stress2/misc/syzkaller70.sh b/tools/test/stress2/misc/syzkaller70.sh
new file mode 100755
index 000000000000..7f63da7f6475
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller70.sh
@@ -0,0 +1,302 @@
+#!/bin/sh
+
+# db:1:pho1> bt
+# Tracing pid 5640 tid 102468 td 0xfffffe00e4d26ac0
+# kdb_enter() at kdb_enter+0x32/frame 0xfffffe010dbcf260
+# vpanic() at vpanic+0x163/frame 0xfffffe010dbcf390
+# panic() at panic+0x43/frame 0xfffffe010dbcf3f0
+# vm_map_insert1() at vm_map_insert1+0x147/frame 0xfffffe010dbcf4a0
+# vm_map_insert() at vm_map_insert+0x69/frame 0xfffffe010dbcf510
+# vm_map_growstack() at vm_map_growstack+0x90e/frame 0xfffffe010dbcf650
+# vm_map_lookup() at vm_map_lookup+0x15f/frame 0xfffffe010dbcf6e0
+# vm_fault() at vm_fault+0x12f/frame 0xfffffe010dbcf820
+# vm_fault_trap() at vm_fault_trap+0x6f/frame 0xfffffe010dbcf860
+# trap_pfault() at trap_pfault+0x24a/frame 0xfffffe010dbcf8d0
+# calltrap() at calltrap+0x8/frame 0xfffffe010dbcf8d0
+# --- trap 0xc, rip = 0xffffffff81057a06, rsp = 0xfffffe010dbcf9a0, rbp = 0xfffffe010dbcf9a0 ---
+# copyin_nosmap_erms() at copyin_nosmap_erms+0x156/frame 0xfffffe010dbcf9a0
+# uiomove_fromphys() at uiomove_fromphys+0x145/frame 0xfffffe010dbcfa10
+# uiomove_object_page() at uiomove_object_page+0x1dc/frame 0xfffffe010dbcfa70
+# uiomove_object() at uiomove_object+0xa4/frame 0xfffffe010dbcfac0
+# tmpfs_write() at tmpfs_write+0xe4/frame 0xfffffe010dbcfb10
+# VOP_WRITE_APV() at VOP_WRITE_APV+0xcf/frame 0xfffffe010dbcfc20
+# vn_write() at vn_write+0x2f4/frame 0xfffffe010dbcfcb0
+# vn_io_fault() at vn_io_fault+0x1e2/frame 0xfffffe010dbcfd40
+# dofilewrite() at dofilewrite+0x82/frame 0xfffffe010dbcfd90
+# kern_pwritev() at kern_pwritev+0x64/frame 0xfffffe010dbcfdd0
+# sys_pwritev() at sys_pwritev+0x3a/frame 0xfffffe010dbcfe00
+# amd64_syscall() at amd64_syscall+0x14f/frame 0xfffffe010dbcff30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe010dbcff30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x822d56fca, rsp = 0x824255f58, rbp = 0x824255f90 ---
+# FreeBSD 14.0-ALPHA1 #1 main-n264742-81b41b2ef5bfd5-dirty: Tue Aug 15 19:52:50 CEST 2023
+
+uname -p | grep -Eq "amd64" || exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=4c33ed3d5a9072d2ccaec3b2ef7a129f0997f477
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+c325d6a75e4fd0a68714@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)
+{
+ int i, call, thread;
+ for (call = 0; call < 4; 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 __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_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ memcpy((void*)0x20000240, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x20000240ul,
+ /*flags=*/0x40000400000002c2ul, /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ *(uint64_t*)0x20000080 = 0x200006c0;
+ *(uint64_t*)0x20000088 = 0x100000;
+ syscall(SYS_pwritev, /*fd=*/r[0], /*vec=*/0x20000080ul, /*vlen=*/1ul,
+ /*off=*/0ul);
+ break;
+ case 2:
+ syscall(SYS_mmap, /*addr=*/0x20000000ul, /*len=*/0x200000ul, /*prot=*/3ul,
+ /*flags=*/0x410ul, /*fd=*/-1, /*offset=*/0ul);
+ break;
+ case 3:
+ syscall(SYS_mmap, /*addr=*/0x2000c000ul, /*len=*/0x4000ul, /*prot=*/0ul,
+ /*flags=*/0x2010ul, /*fd=*/-1, /*offset=*/0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x20000000ul, /*len=*/0x1000000ul, /*prot=*/7ul,
+ /*flags=*/0x1012ul, /*fd=*/-1, /*offset=*/0ul);
+ loop();
+ 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/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/syzkaller80.sh b/tools/test/stress2/misc/syzkaller80.sh
new file mode 100755
index 000000000000..31eae210d5b3
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller80.sh
@@ -0,0 +1,320 @@
+#!/bin/sh
+
+# panic: ../../../kern/uipc_usrreq.c:1256: uipc_sosend_stream_or_seqpacket: Empty stailq 0xfffffe00ffe5fc88->stqh_last is 0xfffffe00ffe5fcd0, not head's first field address
+# cpuid = 5
+# time = 1749593630
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00ffe5fab0
+# vpanic() at vpanic+0x136/frame 0xfffffe00ffe5fbe0
+# panic() at panic+0x43/frame 0xfffffe00ffe5fc40
+# uipc_sosend_stream_or_seqpacket() at uipc_sosend_stream_or_seqpacket+0xa39/frame 0xfffffe00ffe5fd10
+# sousrsend() at sousrsend+0x79/frame 0xfffffe00ffe5fd70
+# dofilewrite() at dofilewrite+0x81/frame 0xfffffe00ffe5fdc0
+# sys_writev() at sys_writev+0x69/frame 0xfffffe00ffe5fe00
+# amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe00ffe5ff30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe00ffe5ff30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x82330181a, rsp = 0x8238dbf68, rbp = 0x8238dbf90 ---
+# KDB: enter: panic
+# [ thread pid 4484 tid 101524 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122ebc2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n277833-948078b65c27-dirty: Tue Jun 10 06:01:36 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=210ae0bfcef6324abfffbfaf10120b767106a990
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+cfcb8520b0071b548fba@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 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 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 < 5; 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);
+ if (call == 2)
+ break;
+ 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[2] = {0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0, /*fds=*/0x200000000040ul);
+ if (res != -1) {
+ r[0] = *(uint32_t*)0x200000000040;
+ r[1] = *(uint32_t*)0x200000000044;
+ }
+ break;
+ case 1:
+ memcpy((void*)0x200000000100, "\x09\x00\x10\x00", 4);
+ syscall(SYS_setsockopt, /*fd=*/r[1], /*level=*/0, /*optname=*/3,
+ /*optval=*/0x200000000100ul, /*optlen=*/4ul);
+ break;
+ case 2:
+ *(uint64_t*)0x2000000018c0 = 0;
+ *(uint32_t*)0x2000000018c8 = 0;
+ *(uint64_t*)0x2000000018d0 = 0;
+ *(uint64_t*)0x2000000018d8 = 0;
+ *(uint64_t*)0x2000000018e0 = 0x200000001880;
+ memcpy((void*)0x200000001880, "\x10\x00\x00\x00\xff\xff\x00\x00\x06", 9);
+ *(uint64_t*)0x2000000018e8 = 0x10;
+ *(uint32_t*)0x2000000018f0 = 0;
+ syscall(SYS_sendmsg, /*fd=*/r[0], /*msg=*/0x2000000018c0ul, /*f=*/0ul);
+ for (int i = 0; i < 64; i++) {
+ syscall(SYS_sendmsg, /*fd=*/r[0], /*msg=*/0x2000000018c0ul, /*f=*/0ul);
+ }
+ break;
+ case 3:
+ syscall(SYS_writev, /*fd=*/r[0], /*vec=*/0ul, /*vlen=*/0ul);
+ for (int i = 0; i < 64; i++) {
+ syscall(SYS_writev, /*fd=*/r[0], /*vec=*/0ul, /*vlen=*/0ul);
+ }
+ break;
+ case 4:
+ syscall(SYS_setsockopt, /*fd=*/(intptr_t)-1, /*level=*/0, /*optname=*/0xa,
+ /*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;
+ 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
+
+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/syzkaller81.sh b/tools/test/stress2/misc/syzkaller81.sh
new file mode 100755
index 000000000000..e3e4ec50aeea
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller81.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+# panic: kern_clock_gettime: 22
+# cpuid = 1
+# time = 1750181240
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01a6084ba0
+# vpanic() at vpanic+0x136/frame 0xfffffe01a6084cd0
+# panic() at panic+0x43/frame 0xfffffe01a6084d30
+# kern_clock_nanosleep() at kern_clock_nanosleep+0x38f/frame 0xfffffe01a6084db0
+# sys_clock_nanosleep() at sys_clock_nanosleep+0x49/frame 0xfffffe01a6084e00
+# amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe01a6084f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01a6084f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x8233d281a, rsp = 0x820bfb2b8, rbp = 0x820bfb2e0 ---
+# KDB: enter: panic
+# [ thread pid 26119 tid 104417 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122a7b2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #1 ufs-n278031-3296ff02387b: Tue Jun 17 16:40:44 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/var/tmp/deviant3/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=5eb7636bc26fcbd20412de35ec10944233b8577d
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+e17e46b1f0b65027b005@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>
+
+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;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ *(uint64_t*)0x200000000040 = 0x10000000000;
+ *(uint64_t*)0x200000000048 = 0x4000000;
+ syscall(SYS_clock_nanosleep, /*id=*/0x10ul, /*flags=TIMER_ABSTIME*/ 1ul,
+ /*rqtp=*/0x200000000040ul, /*rmtp=*/0ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || 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/syzkaller82.sh b/tools/test/stress2/misc/syzkaller82.sh
new file mode 100755
index 000000000000..c810942eb060
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller82.sh
@@ -0,0 +1,122 @@
+#!/bin/sh
+
+# panic: m_apply, length > size of mbuf chain (8 extra)
+# cpuid = 1
+# time = 1753341719
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01f00c5080
+# vpanic() at vpanic+0x136/frame 0xfffffe01f00c51b0
+# panic() at panic+0x43/frame 0xfffffe01f00c5210
+# m_apply() at m_apply+0x2d3/frame 0xfffffe01f00c5260
+# sctp_delayed_cksum() at sctp_delayed_cksum+0x4c/frame 0xfffffe01f00c5290
+# ip6_output_delayed_csum() at ip6_output_delayed_csum+0xaa/frame 0xfffffe01f00c52d0
+# ip6_output() at ip6_output+0x19e6/frame 0xfffffe01f00c5490
+# sctp_lowlevel_chunk_output() at sctp_lowlevel_chunk_output+0x104f/frame 0xfffffe01f00c55d0
+# sctp_med_chunk_output() at sctp_med_chunk_output+0x2ad2/frame 0xfffffe01f00c5fb0
+# sctp_chunk_output() at sctp_chunk_output+0x121c/frame 0xfffffe01f00c6960
+# sctp_lower_sosend() at sctp_lower_sosend+0x146c/frame 0xfffffe01f00c6b50
+# sctp_sosend() at sctp_sosend+0x333/frame 0xfffffe01f00c6c70
+# sousrsend() at sousrsend+0x79/frame 0xffkern_sendit() at kern_sendit+0x1be/frame 0xfffffe01f00c6d60
+# sendit() at sendit+0x1ab/frame 0xfffffe01f00c6db0
+# sys_sendto() at sys_sendto+0x4d/frame 0xfffffe01f00c6e00
+# amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe01f00c6f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01f00c6f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x823035b0a, rsp = 0x8208fa048, rbp = 0x8208fa060 ---
+# KDB: enter: panic
+# [ thread pid 41871 tid 736799 ]
+# Stopped at kdb_enter+0x33: movq $0,0x1231b52(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n279001-7502c1f27082-dirty: Wed Jul 23 20:31:48 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=09297b76b7db4aa29c86ac971062bc078b06c0ff
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+73fe316271df473230eb@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_socket, /*domain=*/0x1cul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0x84);
+ if (res != -1)
+ r[0] = res;
+ *(uint8_t*)0x2000000001c0 = 0x10;
+ *(uint8_t*)0x2000000001c1 = 2;
+ *(uint16_t*)0x2000000001c2 = htobe16(0x4e23);
+ *(uint32_t*)0x2000000001c4 = htobe32(0);
+ memset((void*)0x2000000001c8, 0, 8);
+ memset((void*)0x2000000001d0, 0, 112);
+ *(uint32_t*)0x200000000240 = 0;
+ *(uint32_t*)0x200000000244 = 0x5234;
+ *(uint32_t*)0x200000000248 = 0xffff;
+ *(uint32_t*)0x20000000024c = 0x314;
+ *(uint32_t*)0x200000000250 = 0x3bb;
+ *(uint16_t*)0x200000000254 = 2;
+ *(uint8_t*)0x200000000256 = 9;
+ syscall(SYS_setsockopt, /*fd=*/r[0], /*level=*/0x84, /*opt=*/0xa,
+ /*val=*/0x2000000001c0ul, /*len=*/0x98ul);
+ *(uint8_t*)0x200000000000 = 0x1c;
+ *(uint8_t*)0x200000000001 = 0x1c;
+ *(uint16_t*)0x200000000002 = htobe16(0x4e22);
+ *(uint32_t*)0x200000000004 = 0;
+ memset((void*)0x200000000008, 0, 16);
+ *(uint32_t*)0x200000000018 = 0;
+ syscall(SYS_bind, /*fd=*/r[0], /*addr=*/0x200000000000ul, /*addrlen=*/0x1cul);
+ *(uint8_t*)0x200000000180 = 0x5f;
+ *(uint8_t*)0x200000000181 = 0x1c;
+ *(uint16_t*)0x200000000182 = htobe16(0x4e22);
+ *(uint32_t*)0x200000000184 = 0;
+ *(uint64_t*)0x200000000188 = htobe64(0);
+ *(uint64_t*)0x200000000190 = htobe64(1);
+ *(uint32_t*)0x200000000198 = 0;
+ syscall(SYS_connect, /*fd=*/r[0], /*addr=*/0x200000000180ul,
+ /*addrlen=*/0x1cul);
+ memset((void*)0x2000000020c0, 209, 1);
+ syscall(SYS_sendto, /*fd=*/r[0], /*buf=*/0x2000000020c0ul, /*len=*/0xffeful,
+ /*f=MSG_NOSIGNAL|MSG_EOF|MSG_DONTWAIT|MSG_DONTROUTE*/ 0x20184ul,
+ /*addr=*/0ul, /*addrlen=*/0ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+kldstat | grep -q sctp || { kldload sctp.ko && loaded=1; }
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+[ $loaded ] && kldunload sctp.ko
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller83.sh b/tools/test/stress2/misc/syzkaller83.sh
new file mode 100755
index 000000000000..418bfd75982d
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller83.sh
@@ -0,0 +1,168 @@
+#!/bin/sh
+
+# panic: handle_workitem_remove: bad file delta
+# cpuid = 2
+# time = 1753799597
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00ffc84b70
+# vpanic() at vpanic+0x136/frame 0xfffffe00ffc84ca0
+# panic() at panic+0x43/frame 0xfffffe00ffc84d00
+# handle_workitem_remove() at handle_workitem_remove+0x68d/frame 0xfffffe00ffc84d70
+# handle_workitem_remove() at handle_workitem_remove+0x52d/frame 0xfffffe00ffc84de0
+# process_worklist_item() at process_worklist_item+0x21e/frame 0xfffffe00ffc84e70
+# softdep_process_worklist() at softdep_process_worklist+0xbd/frame 0xfffffe00ffc84eb0
+# softdep_flush() at softdep_flush+0x10f/frame 0xfffffe00ffc84ef0
+# fork_exit() at fork_exit+0x82/frame 0xfffffe00ffc84f30
+# fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00ffc84f30
+# --- trap 0, rip = 0, rsp = 0, rbp = 0 ---
+# KDB: enter: panic
+# [ thread pid 16 tid 100253 ]
+# Stopped at kdb_enter+0x33: movq $0,0x1230852(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n279158-f1f77adfd9bc-dirty: Tue Jul 29 15:49:28 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+
+[ `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=0a60b828818a364deb4721d58b2ed5167b1f6296
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+
+#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 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 = 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[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_one(void)
+{
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ memcpy((void*)0x200000000180, "./file0\000", 8);
+ syscall(SYS_mkdir, /*path=*/0x200000000180ul, /*mode=*/0ul);
+ memcpy((void*)0x200000000000, "./file0/file0\000", 14);
+ syscall(SYS_mkdir, /*path=*/0x200000000000ul, /*mode=*/0ul);
+ memcpy((void*)0x200000000080, ".\000", 2);
+ res = syscall(SYS_open, /*file=*/0x200000000080ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ memcpy((void*)0x200000000080, ".\000", 2);
+ res =
+ syscall(SYS_open, /*file=*/0x200000000080ul, /*flags=*/0ul, /*mode=*/0ul);
+ if (res != -1)
+ r[1] = res;
+ memcpy((void*)0x200000000080, ".\000", 2);
+ res = syscall(SYS_open, /*file=*/0x200000000080ul, /*flags=O_NONBLOCK*/ 4ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[2] = res;
+ memcpy((void*)0x200000000100, "./file1\000", 8);
+ syscall(SYS_mkdirat, /*fd=*/r[2], /*path=*/0x200000000100ul,
+ /*mode=S_IROTH|S_IWUSR*/ 0x84ul);
+ memcpy((void*)0x200000000340, "./file0/file0\000", 14);
+ memcpy((void*)0x200000000380, "./file1\000", 8);
+ syscall(SYS_renameat, /*oldfd=*/r[0], /*old=*/0x200000000340ul,
+ /*newfd=*/r[1], /*new=*/0x200000000380ul);
+}
+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 || 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/tcp4.sh b/tools/test/stress2/misc/tcp4.sh
index cc98a4e3d51f..da0b7c07283d 100755
--- a/tools/test/stress2/misc/tcp4.sh
+++ b/tools/test/stress2/misc/tcp4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/timeout.sh b/tools/test/stress2/misc/timeout.sh
index 079efe3006b5..90d160f6b771 100755
--- a/tools/test/stress2/misc/timeout.sh
+++ b/tools/test/stress2/misc/timeout.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
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/tmpfs19.sh b/tools/test/stress2/misc/tmpfs19.sh
index ab1e96835955..4c8843ae1522 100755
--- a/tools/test/stress2/misc/tmpfs19.sh
+++ b/tools/test/stress2/misc/tmpfs19.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
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/tmpfs20.sh b/tools/test/stress2/misc/tmpfs20.sh
index 763d70a49ae8..80fa04936c4f 100755
--- a/tools/test/stress2/misc/tmpfs20.sh
+++ b/tools/test/stress2/misc/tmpfs20.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/tmpfs21.sh b/tools/test/stress2/misc/tmpfs21.sh
index 295ba0bd20c0..936f2c125564 100755
--- a/tools/test/stress2/misc/tmpfs21.sh
+++ b/tools/test/stress2/misc/tmpfs21.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Peter Holm
#
diff --git a/tools/test/stress2/misc/tmpfs22.sh b/tools/test/stress2/misc/tmpfs22.sh
index 4439ad1bf1d5..0912b03b5848 100755
--- a/tools/test/stress2/misc/tmpfs22.sh
+++ b/tools/test/stress2/misc/tmpfs22.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/tmpfs23.sh b/tools/test/stress2/misc/tmpfs23.sh
index 2f956d512dda..170f4c10cb8b 100755
--- a/tools/test/stress2/misc/tmpfs23.sh
+++ b/tools/test/stress2/misc/tmpfs23.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/tools/nanobsd/embedded/qemu-mips.cfg b/tools/test/stress2/misc/tmpfs24.sh
index 341f7f9c1430..eb366cddc127 100644..100755
--- a/tools/tools/nanobsd/embedded/qemu-mips.cfg
+++ b/tools/test/stress2/misc/tmpfs24.sh
@@ -1,8 +1,9 @@
-# $FreeBSD$
+#!/bin/sh
-#-
-# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
-# Copyright (c) 2010-2011 iXsystems, Inc.
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -16,7 +17,7 @@
# 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
+# 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)
@@ -26,11 +27,45 @@
# SUCH DAMAGE.
#
-NANO_ARCH=mips
-NANO_KERNEL=MALTA
-NANO_DRIVE=ada0
-NANO_NAME=qemu-mips
+# A SEEK_HOLE / SEEK_DATA test scenario
+
+[ `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
+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
+/tmp/lsholes $file > $log 2>&1; s1=$?
-. common # Pull in common definitions
+cat $log
+diff -u $exp $log || s2=1
-qemu_env
+umount $mntpoint
+rm -f /tmp/lsholes $exp $log
+exit $((s1 + s2))
diff --git a/tools/test/stress2/misc/tmpfs25.sh b/tools/test/stress2/misc/tmpfs25.sh
new file mode 100755
index 000000000000..b4ee7bdeef34
--- /dev/null
+++ b/tools/test/stress2/misc/tmpfs25.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
+#
+# 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.
+#
+
+# Regression test for:
+# Bug 223015 - [tmpfs] [patch] tmpfs does not support sparse files
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -eu
+prog=$(basename "$0" .sh)
+cont=/tmp/$prog.cont
+sync=/tmp/$prog.sync
+mount | grep -q "on $mntpoint " && umount $mntpoint
+mount -t tmpfs -o size=100m dummy $mntpoint
+iused=`df $mntpoint | tail -1 | awk '{print $3}'`
+
+list="1m 10m 40m 45m 49m 50m 60m 100m 1g 4g"
+r=0
+for s in $list; do
+ truncate -s $s $mntpoint/sparse || {
+ echo "truncate -s $s failed"
+ r=1; break 2
+ }
+ rm $mntpoint/sparse || break
+ used=`df $mntpoint | tail -1 | awk '{print $3}'`
+ [ $used -ne $iused ] && {
+ echo "truncate -s $s test: $iused / $used"; r=1; break; }
+done
+
+touch $cont
+for i in `jot 1000`; do
+ [ $r -ne 0 ] && break
+ file=$mntpoint/sparse.$i
+ for s in $list; do
+ [ ! -f $cont ] && break
+ for n in `jot 300`; do [ -f $sync ] && break; sleep .2; done
+ truncate -s $s $file || {
+ echo "truncate -s $s failed"
+ rm -f $cont
+ break
+ }
+ [ -f $file ] || { echo "No file $file"; break; }
+ rm $file || break
+ done &
+done
+touch $sync
+wait
+
+used=`df $mntpoint | tail -1 | awk '{print $3}'`
+if [ $used -ne $iused ]; then
+ [ `ls -al $mntpoint | wc -l` -gt 3 ] &&
+ ls -al $mntpoint | head -10
+ df -i $mntpoint
+ fstat -f $mntpoint
+fi
+umount $mntpoint
+rm -f $cont $sync
+
+exit $r
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/trim8.sh b/tools/test/stress2/misc/trim8.sh
index f31a10b5be25..2aafac7cf5ab 100755
--- a/tools/test/stress2/misc/trim8.sh
+++ b/tools/test/stress2/misc/trim8.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/truncate8.sh b/tools/test/stress2/misc/truncate8.sh
index 132468b3ca78..e3192262e4f3 100755
--- a/tools/test/stress2/misc/truncate8.sh
+++ b/tools/test/stress2/misc/truncate8.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/truncate9.sh b/tools/test/stress2/misc/truncate9.sh
index c199605e70a8..75526dcabf19 100755
--- a/tools/test/stress2/misc/truncate9.sh
+++ b/tools/test/stress2/misc/truncate9.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/truss2.sh b/tools/test/stress2/misc/truss2.sh
index 6a5743550b04..0bf769a485ab 100755
--- a/tools/test/stress2/misc/truss2.sh
+++ b/tools/test/stress2/misc/truss2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/udp2.sh b/tools/test/stress2/misc/udp2.sh
index 3cd72d82734b..f305fc554c24 100755
--- a/tools/test/stress2/misc/udp2.sh
+++ b/tools/test/stress2/misc/udp2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/ufsbench.sh b/tools/test/stress2/misc/ufsbench.sh
index 03e8ba64e2f6..58abba0971c8 100755
--- a/tools/test/stress2/misc/ufsbench.sh
+++ b/tools/test/stress2/misc/ufsbench.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/umount3.sh b/tools/test/stress2/misc/umount3.sh
index c6920b80f99d..b28230d8b3af 100755
--- a/tools/test/stress2/misc/umount3.sh
+++ b/tools/test/stress2/misc/umount3.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/umount4.sh b/tools/test/stress2/misc/umount4.sh
index e46f319959a0..bcd062bb8106 100755
--- a/tools/test/stress2/misc/umount4.sh
+++ b/tools/test/stress2/misc/umount4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Peter Holm
#
diff --git a/tools/test/stress2/misc/umountf11.sh b/tools/test/stress2/misc/umountf11.sh
index b2a694037420..b41ec6bc5737 100755
--- a/tools/test/stress2/misc/umountf11.sh
+++ b/tools/test/stress2/misc/umountf11.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/umountf12.sh b/tools/test/stress2/misc/umountf12.sh
index 8a13f8fd480a..af74cf37a0b8 100755
--- a/tools/test/stress2/misc/umountf12.sh
+++ b/tools/test/stress2/misc/umountf12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
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/unionfs13.sh b/tools/test/stress2/misc/unionfs13.sh
index 9c2d57425053..0202e782a11c 100755
--- a/tools/test/stress2/misc/unionfs13.sh
+++ b/tools/test/stress2/misc/unionfs13.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm
#
diff --git a/tools/test/stress2/misc/unionfs14.sh b/tools/test/stress2/misc/unionfs14.sh
index ca9fa3a5b274..054e76e4b476 100755
--- a/tools/test/stress2/misc/unionfs14.sh
+++ b/tools/test/stress2/misc/unionfs14.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/unionfs15.sh b/tools/test/stress2/misc/unionfs15.sh
new file mode 100755
index 000000000000..87cea7c0b15d
--- /dev/null
+++ b/tools/test/stress2/misc/unionfs15.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# O_PATH test scenario. Variation of nullfs29.sh
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+md1=$mdstart
+md2=$((md1 + 1))
+mp1=/mnt$md1
+mp2=/mnt$md2
+mkdir -p $mp1 $mp2
+set -e
+for i in $mp1 $mp2; do
+ mount | grep -q "on $i " && umount -f $i
+done
+for i in $md1 $md2; do
+ mdconfig -l | grep -q md$i && mdconfig -d -u $i
+done
+
+mdconfig -a -t swap -s 2g -u $md1
+mdconfig -a -t swap -s 2g -u $md2
+newfs $newfs_flags -n md$md1 > /dev/null
+newfs $newfs_flags -n md$md2 > /dev/null
+mount /dev/md$md1 $mp1
+mount /dev/md$md2 $mp2
+mount -t unionfs -o noatime $mp1 $mp2
+set +e
+
+cat > /tmp/unionfs15.c <<EOF
+#include <sys/stat.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(void) {
+ int new_dir, new_file, ret;
+ struct stat sb;
+ char *dir = "test2";
+ char *path= "test2/what2";
+
+ if (mkdir(dir, 0755) == -1)
+ err(1, "mkdir(test2)");
+ new_dir = openat(AT_FDCWD, dir, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_PATH, 0700);
+ if (new_dir == -1)
+ err(1, "openat(%s)", dir);
+
+ ret = fstatat(new_dir, "what2", &sb, AT_SYMLINK_NOFOLLOW);
+ if (ret == 0)
+ errx(1, "Expected fstatat() to fail");
+ if (ret == -1 && errno != ENOENT)
+ err(1, "fstatat(%s)", dir);
+
+ close(new_dir);
+ new_file = openat(AT_FDCWD, path, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0644);
+ if (new_file== -1)
+ err(1, "openat(%s)", path);
+}
+
+EOF
+mycc -o /tmp/unionfs15 -Wall -Wextra -O2 /tmp/unionfs15.c || exit 1
+cd $mp2
+/tmp/unionfs15; s=$?
+cd $here
+umount $mp2
+
+while mount | grep -Eq "on $mp2 .*unionfs"; do
+ umount $mp2 && break
+ sleep 5
+done
+umount $mp2
+umount $mp1
+mdconfig -d -u $md2
+mdconfig -d -u $md1
+rm -f /tmp/unionfs15.c /tmp/unionfs15
+exit $s
diff --git a/tools/test/stress2/misc/unionfs16.sh b/tools/test/stress2/misc/unionfs16.sh
new file mode 100755
index 000000000000..c1c65f7d8313
--- /dev/null
+++ b/tools/test/stress2/misc/unionfs16.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# No problems seen with this test scenario
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+[ -d /usr/src/tools/test/stress2 ] || exit 0
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+md1=$mdstart
+md2=$((md1 + 1))
+mp1=/mnt$md1
+mp2=/mnt$md2
+s=0
+
+mkdir -p $mp1 $mp2
+set -e
+for i in $mp1 $mp2; do
+ mount | grep -q "on $i " && umount -f $i
+done
+for i in $md1 $md2; do
+ mdconfig -l | grep -q md$i && mdconfig -d -u $i
+done
+
+mdconfig -a -t swap -s 3g -u $md1
+mdconfig -a -t swap -s 3g -u $md2
+newfs $newfs_flags -n md$md1 > /dev/null
+newfs $newfs_flags -n md$md2 > /dev/null
+mount /dev/md$md1 $mp1
+mount /dev/md$md2 $mp2
+(cd $mp1; cp -a /usr/src/tools/test/stress2 .)
+(cd $mp2; cp -a /usr/src/tools/test/stress2 .)
+rm $mp1/stress2/testcases/run/run
+rm $mp2/stress2/testcases/swap/swap
+mount -u -o ro $mp1
+mount -t unionfs -o below $mp1 $mp2
+rm $mp2/stress2/testcases/mkdir/mkdir
+chmod 777 $mp2
+set +e
+
+(cd $mp2/stress2; make > /dev/null 2>&1)
+export RUNDIR=$mp2/stressX
+export runRUNTIME=1m
+su $testuser -c "cd $mp2/stress2; ./run.sh vfs.cfg" > /dev/null 2>&1
+umount $mp2
+
+while mount | grep -Eq "unionfs.* on $mp2 "; do
+ umount $mp2 && break
+ sleep 5
+done
+fsck_ffs -fy /dev/md$md2 > $log 2>&1
+grep -Eq "WAS MODIFIED" $log && { cat $log; s=1; }
+umount $mp2
+umount $mp1
+mdconfig -d -u $md1
+mdconfig -d -u $md2
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/unionfs17.sh b/tools/test/stress2/misc/unionfs17.sh
new file mode 100755
index 000000000000..9ddbd1cab8cb
--- /dev/null
+++ b/tools/test/stress2/misc/unionfs17.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# unionfs(4) test
+# Variation of unionfs7.sh, but with tmpfs
+
+# "mkdir: rmdir(d17) Directory not empty" seen.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+mp1=/mnt$mdstart
+mp2=/mnt$((mdstart + 1))
+mkdir -p $mp1 $mp2
+set -e
+for i in $mp1 $mp2; do
+ mount | grep -q "on $i " && umount -f $i
+done
+
+mount -o size=4g -t tmpfs dummy $mp1
+mount -o size=4g -t tmpfs dummy $mp2
+
+mount -t unionfs -o noatime $mp1 $mp2
+set +e
+export 'INODES=100000'
+
+export CTRLDIR=$mp2/stressX.control
+export INCARNATIONS=10
+export LOAD=80
+export RUNDIR=$mp2/stressX
+export runRUNTIME=5m
+export rwLOAD=80
+export symlinkLOAD=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
+"
+
+cp -r ../../stress2 $mp2
+export TESTPROGS=`echo $TESTPROGS | sed 's/\n/ /g'`
+
+set +e
+chmod 777 $mp2
+su $testuser -c \
+ "(cd $mp2/stress2; ./testcases/run/run $TESTPROGS)"
+
+while mount | grep -Eq "on $mp2 .*unionfs"; do
+ umount $mp2 && break
+ sleep 5
+done
+umount $mp2
+n=`find $mp1/stressX | wc -l`
+[ $n -eq 1 ] && s=0 || { find $mp1/stressX -ls | head -12; s=1; }
+umount $mp1
+exit $s
diff --git a/tools/test/stress2/misc/unionfs18.sh b/tools/test/stress2/misc/unionfs18.sh
new file mode 100755
index 000000000000..a7840db263e1
--- /dev/null
+++ b/tools/test/stress2/misc/unionfs18.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2024 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Simple unionfs(4) + tmpfs(4) test
+
+# "rmdir: d2: Directory not empty" seen.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+mp1=/mnt$mdstart
+mp2=/mnt$((mdstart + 1))
+mkdir -p $mp1 $mp2
+set -e
+for i in $mp1 $mp2; do
+ mount | grep -q "on $i " && umount -f $i
+done
+
+md1=$mdstart
+md2=$((md1 + 1))
+mp1=/mnt$md1
+mp2=/mnt$md2
+mkdir -p $mp1 $mp2
+for i in $mp1 $mp2; do
+ mount | grep -q "on $i " && umount -f $i
+done
+
+if [ $# -eq 0 ]; then
+ echo "tmpfs version"
+ mount -o size=4g -t tmpfs dummy $mp1
+ mount -o size=4g -t tmpfs dummy $mp2
+else
+ echo "UFS version"
+ for i in $md1 $md2; do
+ mdconfig -l | grep -q md$i && mdconfig -d -u $i
+ done
+ mdconfig -a -t swap -s 4g -u $md1
+ mdconfig -a -t swap -s 4g -u $md2
+ newfs $newfs_flags -n md$md1 > /dev/null
+ newfs $newfs_flags -n md$md2 > /dev/null
+ mount /dev/md$md1 $mp1
+ mount /dev/md$md2 $mp2
+fi
+
+mount -t unionfs -o noatime $mp1 $mp2
+set +e
+
+N=3 # Tree depth
+here=`pwd`
+cd $mp2
+mkdir dir; cd dir
+for j in `seq 1 $N`; do
+ mkdir d$j && cd d$j
+done
+for j in `seq $N 1`; do
+ cd .. && rmdir d$j
+done
+cd ..
+rmdir dir || { s=1; find dir -ls; }
+cd $here
+
+while mount | grep -Eq "on $mp2 .*unionfs"; do
+ umount $mp2 && break
+ sleep 5
+done
+umount $mp2
+umount $mp1
+exit $s
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/unionfs4.sh b/tools/test/stress2/misc/unionfs4.sh
index 2355005c1f8b..e23f90004a88 100755
--- a/tools/test/stress2/misc/unionfs4.sh
+++ b/tools/test/stress2/misc/unionfs4.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
@@ -52,6 +52,8 @@ done
mdconfig -a -t swap -s 2g -u $md1
mdconfig -a -t swap -s 2g -u $md2
+[ "$newfs_flags" = "-U" ] &&
+ newfs_flags="-j" # "out of inodes" work around
newfs $newfs_flags -n md$md1 > /dev/null
newfs $newfs_flags -n md$md2 > /dev/null
mount /dev/md$md1 $mp1
diff --git a/tools/test/stress2/misc/unionfs5.sh b/tools/test/stress2/misc/unionfs5.sh
index 5e12ffbf5abd..a45ffde5c0b2 100755
--- a/tools/test/stress2/misc/unionfs5.sh
+++ b/tools/test/stress2/misc/unionfs5.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
@@ -50,8 +50,8 @@ for i in $md1 $md2; do
mdconfig -l | grep -q md$i && mdconfig -d -u $i
done
-mdconfig -a -t swap -s 2g -u $md1
-mdconfig -a -t swap -s 2g -u $md2
+mdconfig -a -t swap -s 5g -u $md1
+mdconfig -a -t swap -s 5g -u $md2
newfs $newfs_flags -n md$md1 > /dev/null
newfs $newfs_flags -n md$md2 > /dev/null
mount /dev/md$md1 $mp1
@@ -68,11 +68,12 @@ else
echo "Using FFS"
export RUNDIR=$mp1/stressX
fi
-export runRUNTIME=2m
+export CTRLDIR=$mp2/stressX.control
+export runRUNTIME=2m
-(cd ../testcases/mkdir; ./mkdir -t 2m -i 20)
+(cd ../testcases/mkdir; ./mkdir -t 2m -i 20 -l 100)
-find $RUNDIR -ls | head -5
+find $RUNDIR -ls | grep -v 'stressX$' | head -5
while mount | grep -Eq "on $mp2 .*unionfs"; do
umount $mp2 && break
sleep 5
diff --git a/tools/test/stress2/misc/unionfs6.sh b/tools/test/stress2/misc/unionfs6.sh
index 7291a6f61fd8..cae1995a2e0d 100755
--- a/tools/test/stress2/misc/unionfs6.sh
+++ b/tools/test/stress2/misc/unionfs6.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
@@ -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
@@ -57,6 +57,10 @@ mount -t unionfs -o noatime $mp1 $mp2
set +e
mount | grep -E "$mp1|$mp2"
+set `df -ik $mp2 | tail -1 | awk '{print $4,$7}'`
+export KBLOCKS=$(($1 / 4))
+export INODES=$(($2 / 4))
+
export CTRLDIR=$mp2/stressX.control
export INCARNATIONS=10
export LOAD=80
diff --git a/tools/test/stress2/misc/unionfs7.sh b/tools/test/stress2/misc/unionfs7.sh
index ad4514c60532..6adcd01a5f83 100755
--- a/tools/test/stress2/misc/unionfs7.sh
+++ b/tools/test/stress2/misc/unionfs7.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
@@ -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.
@@ -60,6 +60,10 @@ mount -t unionfs -o noatime $mp1 $mp2
set +e
mount | grep -E "$mp1|$mp2"
+set `df -ik $mp2 | tail -1 | awk '{print $4,$7}'`
+export KBLOCKS=$(($1 / 4))
+export INODES=$(($2 / 4))
+
export CTRLDIR=$mp2/stressX.control
export INCARNATIONS=10
export LOAD=80
diff --git a/tools/test/stress2/misc/unionfs8.sh b/tools/test/stress2/misc/unionfs8.sh
index b0d9deb354d2..fdc37b16ff03 100755
--- a/tools/test/stress2/misc/unionfs8.sh
+++ b/tools/test/stress2/misc/unionfs8.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
@@ -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
@@ -51,8 +51,8 @@ for i in $md1 $md2; do
mdconfig -l | grep -q md$i && mdconfig -d -u $i
done
-mdconfig -a -t swap -s 4g -u $md1
-mdconfig -a -t swap -s 4g -u $md2
+mdconfig -a -t swap -s 5g -u $md1
+mdconfig -a -t swap -s 5g -u $md2
newfs $newfs_flags -n md$md1 > /dev/null
newfs $newfs_flags -n md$md2 > /dev/null
mount /dev/md$md1 $mp1
@@ -69,6 +69,10 @@ mount -t unionfs -o below $mp1 $mp2
set +e
mount | grep -E "$mp1|$mp2"
+set `df -ik $mp2 | tail -1 | awk '{print $4,$7}'`
+export KBLOCKS=$(($1 / 6))
+export INODES=$(($2 / 6))
+
export CTRLDIR=$mp2/stressX.control
export INCARNATIONS=10
export LOAD=80
diff --git a/tools/test/stress2/misc/unionfs9.sh b/tools/test/stress2/misc/unionfs9.sh
index 80ab45e38f88..700eed13aeb5 100755
--- a/tools/test/stress2/misc/unionfs9.sh
+++ b/tools/test/stress2/misc/unionfs9.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
@@ -33,6 +33,7 @@
# https://people.freebsd.org/~pho/stress/log/log0205.txt
# https://people.freebsd.org/~pho/stress/log/log0226.txt
+# https://people.freebsd.org/~pho/stress/log/log0404.txt
[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
. ../default.cfg
diff --git a/tools/test/stress2/misc/unix_socket.sh b/tools/test/stress2/misc/unix_socket.sh
index a5486dd7d4f0..c4283f30de0d 100755
--- a/tools/test/stress2/misc/unix_socket.sh
+++ b/tools/test/stress2/misc/unix_socket.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/unix_socket_detach.sh b/tools/test/stress2/misc/unix_socket_detach.sh
index 66670daf5639..6d201273ac05 100755
--- a/tools/test/stress2/misc/unix_socket_detach.sh
+++ b/tools/test/stress2/misc/unix_socket_detach.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2016 Mark Johnston <markj@FreeBSD.org>
#
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/vm_map.sh b/tools/test/stress2/misc/vm_map.sh
index fb2a2b75b5a5..e209d8aacb2c 100755
--- a/tools/test/stress2/misc/vm_map.sh
+++ b/tools/test/stress2/misc/vm_map.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
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/write2.sh b/tools/test/stress2/misc/write2.sh
index 82d7e1c988d7..f1f9deeef374 100755
--- a/tools/test/stress2/misc/write2.sh
+++ b/tools/test/stress2/misc/write2.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/zfs10.sh b/tools/test/stress2/misc/zfs10.sh
index 3f3fdd2622d7..9d8ae717dffa 100755
--- a/tools/test/stress2/misc/zfs10.sh
+++ b/tools/test/stress2/misc/zfs10.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/zfs11.sh b/tools/test/stress2/misc/zfs11.sh
index 97e71a5a13f7..84300aed0c0c 100755
--- a/tools/test/stress2/misc/zfs11.sh
+++ b/tools/test/stress2/misc/zfs11.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/misc/zfs12.sh b/tools/test/stress2/misc/zfs12.sh
index cfabca2b9f6f..e8f82efc9b9b 100755
--- a/tools/test/stress2/misc/zfs12.sh
+++ b/tools/test/stress2/misc/zfs12.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/zfs13.sh b/tools/test/stress2/misc/zfs13.sh
index 2ccd4388270d..33630e0f1d75 100755
--- a/tools/test/stress2/misc/zfs13.sh
+++ b/tools/test/stress2/misc/zfs13.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm
#
diff --git a/tools/test/stress2/misc/zfs14.sh b/tools/test/stress2/misc/zfs14.sh
index 750119aff941..70b97e950dff 100755
--- a/tools/test/stress2/misc/zfs14.sh
+++ b/tools/test/stress2/misc/zfs14.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
#
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/zfs8.sh b/tools/test/stress2/misc/zfs8.sh
index 7d1d9887ce29..5eb53cd78ead 100755
--- a/tools/test/stress2/misc/zfs8.sh
+++ b/tools/test/stress2/misc/zfs8.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2018 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/zfs9.sh b/tools/test/stress2/misc/zfs9.sh
index 274a42f18bdb..2b051c8cd3c3 100755
--- a/tools/test/stress2/misc/zfs9.sh
+++ b/tools/test/stress2/misc/zfs9.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/zz-combo01.sh b/tools/test/stress2/misc/zz-combo01.sh
index 8899ade3441f..19c102288c79 100755
--- a/tools/test/stress2/misc/zz-combo01.sh
+++ b/tools/test/stress2/misc/zz-combo01.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/zz-combo02.sh b/tools/test/stress2/misc/zz-combo02.sh
index 2d866858bb8f..d65caf2f3c22 100755
--- a/tools/test/stress2/misc/zz-combo02.sh
+++ b/tools/test/stress2/misc/zz-combo02.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/zz-combo03.sh b/tools/test/stress2/misc/zz-combo03.sh
index 7afaec11e861..1bc3424f9de3 100755
--- a/tools/test/stress2/misc/zz-combo03.sh
+++ b/tools/test/stress2/misc/zz-combo03.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
diff --git a/tools/test/stress2/misc/zz-combo04.sh b/tools/test/stress2/misc/zz-combo04.sh
index 69003ec73371..1cbe19b6d518 100755
--- a/tools/test/stress2/misc/zz-combo04.sh
+++ b/tools/test/stress2/misc/zz-combo04.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm
#
diff --git a/tools/test/stress2/misc/zzbuildworld.sh b/tools/test/stress2/misc/zzbuildworld.sh
index ae0956239648..e1bf867d8d5f 100755
--- a/tools/test/stress2/misc/zzbuildworld.sh
+++ b/tools/test/stress2/misc/zzbuildworld.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019 Dell EMC Isilon
#
@@ -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/testcases/swap/swap.c b/tools/test/stress2/testcases/swap/swap.c
index 75bfe7856aed..c54605a4b0fe 100644
--- a/tools/test/stress2/testcases/swap/swap.c
+++ b/tools/test/stress2/testcases/swap/swap.c
@@ -155,10 +155,8 @@ test(void)
c[i] = 0;
i += page;
}
-#if 0
- if (op->hog != 1)
- usleep(1000);
-#endif
+ if (arc4random() % 100 < 10)
+ usleep(10000);
}
free((void *)c);
diff --git a/tools/test/stress2/tools/bench.c b/tools/test/stress2/tools/bench.c
index 606c8e6ed726..71918b7b0684 100644
--- a/tools/test/stress2/tools/bench.c
+++ b/tools/test/stress2/tools/bench.c
@@ -1,5 +1,5 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2018 Dell EMC Isilon
*
diff --git a/tools/test/stress2/tools/fail.sh b/tools/test/stress2/tools/fail.sh
index 6d83d8fe0d22..a7b9c769892a 100755
--- a/tools/test/stress2/tools/fail.sh
+++ b/tools/test/stress2/tools/fail.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/tools/fast.sh b/tools/test/stress2/tools/fast.sh
index ce33eaa4c103..83809c8baf55 100755
--- a/tools/test/stress2/tools/fast.sh
+++ b/tools/test/stress2/tools/fast.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/tools/flip.c b/tools/test/stress2/tools/flip.c
index 8d01e9d78ea1..f2a4d86e115b 100644
--- a/tools/test/stress2/tools/flip.c
+++ b/tools/test/stress2/tools/flip.c
@@ -1,5 +1,5 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
* All rights reserved.
@@ -57,7 +57,7 @@ flip(void *ap, size_t len)
unsigned char bit, buf, mask, old __unused;
cp = (unsigned char *)ap;
- byte = random_long(0, len);
+ byte = random_long(0, len - 1);
bit = random_long(0,7);
mask = ~(1 << bit);
buf = cp[byte];
@@ -70,14 +70,22 @@ flip(void *ap, size_t len)
#endif
}
+static void
+trash(char *c)
+{
+ if (arc4random() % 2 == 1)
+ *c = 0;
+ else
+ arc4random_buf(c, sizeof(c));
+}
+
int
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;
@@ -111,19 +119,26 @@ main(int argc, char *argv[])
if (size == 0) {
if (fstat(fd, &st) == -1)
err(1, "stat %s", argv[0]);
+ if ((st.st_mode & S_IFREG) == 0)
+ errx(1, "%s must be a regular file\n", argv[0]);
size = st.st_size;
}
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()");
- flip(&c, 1);
+ if (arc4random() % 100 < 98)
+ flip(&ch, 1);
+ else
+ 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/stress2/tools/lsholes.c b/tools/test/stress2/tools/lsholes.c
index a583c1315093..736ae92a41c8 100644
--- a/tools/test/stress2/tools/lsholes.c
+++ b/tools/test/stress2/tools/lsholes.c
@@ -1,5 +1,5 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
*
@@ -40,7 +40,8 @@ main(int argc, char *argv[])
{
struct stat st;
off_t data, hole, pos;
- long mx;
+ long mn;
+ intmax_t siz;
int fd, n;
char *name;
@@ -54,33 +55,47 @@ main(int argc, char *argv[])
err(1, "open(%s)", name);
if (fstat(fd, &st))
err(1, "fstat()");
- if ((mx = fpathconf(fd, _PC_MIN_HOLE_SIZE)) == -1)
+ if ((mn = fpathconf(fd, _PC_MIN_HOLE_SIZE)) == -1)
err(1, "fpathconf()");
- fprintf(stderr, "file \"%s\" size = %jd, _PC_MIN_HOLE_SIZE = %ld\n",
- name, (intmax_t)st.st_size, mx);
+ fprintf(stderr, "Min hole size is %ld, file size is %jd.\n",
+ mn, (intmax_t)st.st_size);
n = 1;
pos = 0;
+
while (pos < st.st_size) {
- if ((hole = lseek(fd, pos, SEEK_HOLE)) == -1)
+ hole = lseek(fd, pos, SEEK_HOLE);
+ if (hole == -1 && errno != ENXIO)
err(1, "lseek(SEEK_HOLE)");
- if ((data = lseek(fd, hole, SEEK_DATA)) == -1) {
- if (errno == ENXIO) {
- if (hole == st.st_size)
- break;
- fprintf(stderr,
- "No data after hole @ %jd\n",
- (intmax_t)hole);
- break;
- }
- err(1, "lseek(SEEK_DATA)");
+ data = lseek(fd, pos, SEEK_DATA);
+ if (data == -1 && errno != ENXIO)
+ err(1, "lseek(SEEK_data)");
+
+ if (hole >= 0 && data >= 0 && hole > data) {
+ siz = hole - data;
+ printf("data #%d @ %ld, size=%jd)\n",
+ n, (intmax_t)data, siz);
+ n++;
+ pos += siz;
+ }
+ if (hole >= 0 && data >= 0 && hole < data) {
+ siz = data - hole;
+ printf("hole #%d @ %ld, size=%jd\n",
+ n, (intmax_t)hole, siz);
+ n++;
+ pos += siz;
+ }
+ if (hole >= 0 && data == -1) {
+ siz = st.st_size - hole;
+ printf("hole #%d @ %ld, size=%jd\n",
+ n, (intmax_t)hole, siz);
+ n++;
+ pos += siz;
}
- pos = data;
- printf("hole #%d @ %jd (0x%jx), size=%jd (0x%jx)\n",
- n, (intmax_t)hole, (intmax_t)hole, (intmax_t)(data - hole),
- (intmax_t)(data - hole));
- n++;
}
+ if (hole == st.st_size) {
+ /* EOF */
+ printf("hole #%d @ %ld, size=%jd\n",
+ n, (intmax_t)hole, 0L);
+ }
close(fd);
- if (hole != st.st_size)
- errx(1, "No implicit hole at EOF");
}
diff --git a/tools/test/stress2/tools/ministat.sh b/tools/test/stress2/tools/ministat.sh
index 552828e97e59..d219122a0c42 100755
--- a/tools/test/stress2/tools/ministat.sh
+++ b/tools/test/stress2/tools/ministat.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/tools/ps.sh b/tools/test/stress2/tools/ps.sh
index 238192db1b0e..c8ed7d66ecac 100755
--- a/tools/test/stress2/tools/ps.sh
+++ b/tools/test/stress2/tools/ps.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
#
diff --git a/tools/test/stress2/tools/serial.c b/tools/test/stress2/tools/serial.c
new file mode 100644
index 000000000000..8dcf9c5da3a8
--- /dev/null
+++ b/tools/test/stress2/tools/serial.c
@@ -0,0 +1,44 @@
+/* Fill a file with a sequence of byte values from 0 - 0xff */
+
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, char *argv[])
+{
+ size_t i, size;
+ int fd;
+ char *cp, *file;
+
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <file> <file length in bytes>\n", argv[0]);
+ exit(1);
+ }
+ file = argv[1];
+ size = atol(argv[2]);
+
+ if ((fd = open(file, O_RDWR | O_CREAT | O_TRUNC, 0600)) < 0)
+ err(1, "%s", file);
+
+ if (lseek(fd, size - 1, SEEK_SET) == -1)
+ err(1, "lseek error");
+
+ /* write a dummy byte at the last location */
+ if (write(fd, "\0", 1) != 1)
+ err(1, "write error");
+
+ if ((cp = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED)
+ err(1, "mmap()");
+
+ for (i = 0; i < size; i++)
+ cp[i] = i & 0xff;
+
+ if (munmap(cp, size) == -1)
+ err(1, "munmap");
+ close(fd);
+}
diff --git a/tools/test/stress2/tools/swap.c b/tools/test/stress2/tools/swap.c
index ce272b794ea7..9e07a8c46d1f 100644
--- a/tools/test/stress2/tools/swap.c
+++ b/tools/test/stress2/tools/swap.c
@@ -1,5 +1,5 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2020 Peter Holm <pho@FreeBSD.org>
* All rights reserved.
diff --git a/tools/test/stress2/tools/vmstat.sh b/tools/test/stress2/tools/vmstat.sh
index 89ff1e331fc5..f7006669a7c0 100755
--- a/tools/test/stress2/tools/vmstat.sh
+++ b/tools/test/stress2/tools/vmstat.sh
@@ -45,34 +45,28 @@ OIFS=$IFS
while true; do
# Type InUse MemUse
[ -z "$optm" ] && vmstat -m | sed 1d |
- sed 's/\(.* \)\([0-9][0-9]*\) *\(.*\)K .*/\1:\2:\3/' |
- while IFS=: read -r p1 p2 p3; do
- name=`echo $p1 | sed 's/^ *//;s/ *$//'`
- memuse=$p3
+ while read l; do
+ name=`echo $l | sed -E 's/ [0-9]+ .*//; s/^ *//'`
+ memuse=`echo $l | sed -E "s#$name##" | \
+ awk '{print int(($2 + 1023) / 1024)}'`
[ "$memuse" -ne 0 ] && echo "vmstat -m $name,$memuse"
- done
+ done
# ITEM SIZE LIMIT USED
- [ -z "$optz" ] && vmstat -z |
- grep -vE '(rl_entry):' |
- sed "1,2d;/^$/d;s/: /, /" |
- sed -E 's/[^[:print:]\r\t]/ /g' |
+ [ -z "$optz" ] && vmstat -z | sed 1d |
while read l; do
- IFS=','
- set $l
- [ $# -lt 8 ] &&
- { echo "# args must be >= 8, but is $# in $l" 1>&2;
- continue; }
- size=$2
- used=$4
+ name=`echo $l | sed 's/:.*//'`
+ l=`echo $l | sed 's/.*://'`
+ size=`echo $l | awk -F ',' '{print $1}'`
+ used=`echo $l | awk -F ',' '{print $3}'`
[ -z "$used" -o -z "$size" ] &&
{ echo "used/size not set $l" 1>&2; continue; }
echo $used | egrep -q '^ *[0-9]{1,10}$' ||
{ echo "Bad used: $used. l=$l" 1>&2; continue; }
tot=$((((size * used) + 1023) / 1024))
[ $tot -ne 0 ] &&
- echo "vmstat -z $1,$tot"
- done
+ echo "vmstat -z $name,$tot"
+ done
r=`sysctl -n vm.stats.vm.v_wire_count`
[ -n "$r" ] &&
@@ -98,6 +92,7 @@ done | awk $debug -F, '
close(cmd);
printf "%s \"%s\" %'\''dK\r\n", t,
name, size;
+ fflush
n[name] = 0;
}
s[name] = size;
diff --git a/tools/test/testfloat/README.txt b/tools/test/testfloat/README.txt
deleted file mode 100644
index fe99fd95d641..000000000000
--- a/tools/test/testfloat/README.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-
-Package Overview for TestFloat Release 2a
-
-John R. Hauser
-1998 December 16
-
-
-TestFloat is a program for testing that a floating-point implementation
-conforms to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
-TestFloat is distributed in the form of C source code. The TestFloat
-package actually provides two related programs:
-
--- The `testfloat' program tests a system's floating-point for conformance
- to the IEC/IEEE Standard. This program uses the SoftFloat software
- floating-point implementation as a basis for comparison.
-
--- The `testsoftfloat' program tests SoftFloat itself for conformance to
- the IEC/IEEE Standard. These tests are performed by comparing against a
- separate, slower software floating-point that is included in the TestFloat
- package.
-
-TestFloat depends on SoftFloat, but SoftFloat is not included in the
-TestFloat package. SoftFloat can be obtained through the Web page `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/SoftFloat.html'.
-
-TestFloat is documented in three text files:
-
- testfloat.txt Documentation for using the TestFloat programs
- (both `testfloat' and `testsoftfloat').
- testfloat-source.txt Documentation for porting and compiling TestFloat.
- testfloat-history.txt History of major changes to TestFloat.
-
-The following file is also provided:
-
- systemBugs.txt Information about processor bugs found using
- TestFloat.
-
-Other files in the package comprise the source code for TestFloat.
-
-Please be aware that some work is involved in porting this software to other
-targets. It is not just a matter of getting `make' to complete without
-error messages. I would have written the code that way if I could, but
-there are fundamental differences between systems that I can't make go away.
-You should not attempt to compile the TestFloat sources without first
-reading `testfloat-source.txt'.
-
-At the time of this writing, the most up-to-date information about
-TestFloat and the latest release can be found at the Web page `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
diff --git a/tools/test/testfloat/fail.c b/tools/test/testfloat/fail.c
deleted file mode 100644
index 30bbea6bd7d7..000000000000
--- a/tools/test/testfloat/fail.c
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include "milieu.h"
-#include "fail.h"
-
-char *fail_programName = "";
-
-void fail( const char *message, ... )
-{
- va_list varArgs;
-
- fprintf( stderr, "%s: ", fail_programName );
- va_start( varArgs, message );
- vfprintf( stderr, message, varArgs );
- va_end( varArgs );
- fputs( ".\n", stderr );
- exit( EXIT_FAILURE );
-
-}
-
diff --git a/tools/test/testfloat/fail.h b/tools/test/testfloat/fail.h
deleted file mode 100644
index 9c338da260aa..000000000000
--- a/tools/test/testfloat/fail.h
+++ /dev/null
@@ -1,29 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-extern char *fail_programName;
-
-void fail( const char *, ... );
-
diff --git a/tools/test/testfloat/random.c b/tools/test/testfloat/random.c
deleted file mode 100644
index 21326c1ff23f..000000000000
--- a/tools/test/testfloat/random.c
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdlib.h>
-#include "milieu.h"
-#include "random.h"
-
-uint8 randomUint8( void )
-{
-
- return (bits8) ( random()>>4 );
-
-}
-
-uint16 randomUint16( void )
-{
-
- return ( random() & 0x0000ffff );
-
-}
-
-uint32 randomUint32( void )
-{
-
- return ( ( (uint32) random()<<16) | ( (uint32) random() & 0x0000ffff) );
-}
-
-#ifdef BITS64
-
-uint64 randomUint64( void )
-{
-
- return ( ( (uint64) randomUint32() )<<32 ) | randomUint32();
-
-}
-
-#endif
-
diff --git a/tools/test/testfloat/random.h b/tools/test/testfloat/random.h
deleted file mode 100644
index 7375499ea965..000000000000
--- a/tools/test/testfloat/random.h
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-uint8 randomUint8( void );
-uint16 randomUint16( void );
-uint32 randomUint32( void );
-#ifdef BITS64
-uint64 randomUint64( void );
-#endif
-
diff --git a/tools/test/testfloat/slowfloat-32.c b/tools/test/testfloat/slowfloat-32.c
deleted file mode 100644
index 549654b05e63..000000000000
--- a/tools/test/testfloat/slowfloat-32.c
+++ /dev/null
@@ -1,1183 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-int8 slow_float_rounding_mode;
-int8 slow_float_exception_flags;
-int8 slow_float_detect_tininess;
-
-typedef struct {
- bits32 a0, a1;
-} bits64X;
-
-typedef struct {
- flag isNaN;
- flag isInf;
- flag isZero;
- flag sign;
- int16 exp;
- bits64X sig;
-} floatX;
-
-static const floatX floatXNaN = { TRUE, FALSE, FALSE, FALSE, 0, { 0, 0 } };
-static const floatX floatXPositiveZero =
- { FALSE, FALSE, TRUE, FALSE, 0, { 0, 0 } };
-static const floatX floatXNegativeZero =
- { FALSE, FALSE, TRUE, TRUE, 0, { 0, 0 } };
-
-static bits64X shortShift64Left( bits64X a, int8 shiftCount )
-{
- int8 negShiftCount;
-
- negShiftCount = ( - shiftCount & 31 );
- a.a0 = ( a.a0<<shiftCount ) | ( a.a1>>negShiftCount );
- a.a1 <<= shiftCount;
- return a;
-
-}
-
-static bits64X shortShift64RightJamming( bits64X a, int8 shiftCount )
-{
- int8 negShiftCount;
- bits32 extra;
-
- negShiftCount = ( - shiftCount & 31 );
- extra = a.a1<<negShiftCount;
- a.a1 = ( a.a0<<negShiftCount ) | ( a.a1>>shiftCount ) | ( extra != 0 );
- a.a0 >>= shiftCount;
- return a;
-
-}
-
-static bits64X neg64( bits64X a )
-{
-
- if ( a.a1 == 0 ) {
- a.a0 = - a.a0;
- }
- else {
- a.a1 = - a.a1;
- a.a0 = ~ a.a0;
- }
- return a;
-
-}
-
-static bits64X add64( bits64X a, bits64X b )
-{
-
- a.a1 += b.a1;
- a.a0 += b.a0 + ( a.a1 < b.a1 );
- return a;
-
-}
-
-static flag eq64( bits64X a, bits64X b )
-{
-
- return ( a.a0 == b.a0 ) && ( a.a1 == b.a1 );
-
-}
-
-static flag le64( bits64X a, bits64X b )
-{
-
- return ( a.a0 < b.a0 ) || ( ( a.a0 == b.a0 ) && ( a.a1 <= b.a1 ) );
-
-}
-
-static flag lt64( bits64X a, bits64X b )
-{
-
- return ( a.a0 < b.a0 ) || ( ( a.a0 == b.a0 ) && ( a.a1 < b.a1 ) );
-
-}
-
-static floatX roundFloatXTo24( flag isTiny, floatX zx )
-{
-
- if ( zx.sig.a1 ) {
- slow_float_exception_flags |= float_flag_inexact;
- if ( isTiny ) slow_float_exception_flags |= float_flag_underflow;
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- if ( zx.sig.a1 < 0x80000000 ) goto noIncrement;
- if ( ( zx.sig.a1 == 0x80000000 ) && ! ( zx.sig.a0 & 1 ) ) {
- goto noIncrement;
- }
- break;
- case float_round_to_zero:
- goto noIncrement;
- case float_round_down:
- if ( ! zx.sign ) goto noIncrement;
- break;
- case float_round_up:
- if ( zx.sign ) goto noIncrement;
- break;
- }
- ++zx.sig.a0;
- if ( zx.sig.a0 == 0x01000000 ) {
- zx.sig.a0 = 0x00800000;
- ++zx.exp;
- }
- }
- noIncrement:
- zx.sig.a1 = 0;
- return zx;
-
-}
-
-static floatX roundFloatXTo53( flag isTiny, floatX zx )
-{
- int8 roundBits;
-
- roundBits = zx.sig.a1 & 7;
- zx.sig.a1 -= roundBits;
- if ( roundBits ) {
- slow_float_exception_flags |= float_flag_inexact;
- if ( isTiny ) slow_float_exception_flags |= float_flag_underflow;
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- if ( roundBits < 4 ) goto noIncrement;
- if ( ( roundBits == 4 ) && ! ( zx.sig.a1 & 8 ) ) goto noIncrement;
- break;
- case float_round_to_zero:
- goto noIncrement;
- case float_round_down:
- if ( ! zx.sign ) goto noIncrement;
- break;
- case float_round_up:
- if ( zx.sign ) goto noIncrement;
- break;
- }
- zx.sig.a1 += 8;
- zx.sig.a0 += ( zx.sig.a1 == 0 );
- if ( zx.sig.a0 == 0x01000000 ) {
- zx.sig.a0 = 0x00800000;
- ++zx.exp;
- }
- }
- noIncrement:
- return zx;
-
-}
-
-static floatX int32ToFloatX( int32 a )
-{
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.sign = ( a < 0 );
- ax.sig.a1 = ax.sign ? - a : a;
- ax.sig.a0 = 0;
- if ( a == 0 ) {
- ax.isZero = TRUE;
- return ax;
- }
- ax.isZero = FALSE;
- ax.sig = shortShift64Left( ax.sig, 23 );
- ax.exp = 32;
- while ( ax.sig.a0 < 0x00800000 ) {
- ax.sig = shortShift64Left( ax.sig, 1 );
- --ax.exp;
- }
- return ax;
-
-}
-
-static int32 floatXToInt32( floatX ax )
-{
- int8 savedExceptionFlags;
- int16 shiftCount;
- int32 z;
-
- if ( ax.isInf || ax.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- return ( ax.isInf & ax.sign ) ? 0x80000000 : 0x7FFFFFFF;
- }
- if ( ax.isZero ) return 0;
- savedExceptionFlags = slow_float_exception_flags;
- shiftCount = 52 - ax.exp;
- if ( 56 < shiftCount ) {
- ax.sig.a1 = 1;
- ax.sig.a0 = 0;
- }
- else {
- while ( 0 < shiftCount ) {
- ax.sig = shortShift64RightJamming( ax.sig, 1 );
- --shiftCount;
- }
- }
- ax = roundFloatXTo53( FALSE, ax );
- ax.sig = shortShift64RightJamming( ax.sig, 3 );
- z = ax.sig.a1;
- if ( ax.sign ) z = - z;
- if ( ( shiftCount < 0 )
- || ax.sig.a0
- || ( ( z != 0 ) && ( ( ax.sign ^ ( z < 0 ) ) != 0 ) )
- ) {
- slow_float_exception_flags = savedExceptionFlags | float_flag_invalid;
- return ax.sign ? 0x80000000 : 0x7FFFFFFF;
- }
- return z;
-
-}
-
-static floatX float32ToFloatX( float32 a )
-{
- int16 expField;
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.isZero = FALSE;
- ax.sign = ( ( a & 0x80000000 ) != 0 );
- expField = ( a>>23 ) & 0xFF;
- ax.sig.a1 = 0;
- ax.sig.a0 = a & 0x007FFFFF;
- if ( expField == 0 ) {
- if ( ax.sig.a0 == 0 ) {
- ax.isZero = TRUE;
- }
- else {
- expField = 1 - 0x7F;
- do {
- ax.sig.a0 <<= 1;
- --expField;
- } while ( ax.sig.a0 < 0x00800000 );
- ax.exp = expField;
- }
- }
- else if ( expField == 0xFF ) {
- if ( ax.sig.a0 == 0 ) {
- ax.isInf = TRUE;
- }
- else {
- ax.isNaN = TRUE;
- }
- }
- else {
- ax.sig.a0 |= 0x00800000;
- ax.exp = expField - 0x7F;
- }
- return ax;
-
-}
-
-static float32 floatXToFloat32( floatX zx )
-{
- floatX savedZ;
- flag isTiny;
- int16 expField;
- float32 z;
-
- if ( zx.isZero ) return zx.sign ? 0x80000000 : 0;
- if ( zx.isInf ) return zx.sign ? 0xFF800000 : 0x7F800000;
- if ( zx.isNaN ) return 0xFFFFFFFF;
- while ( 0x01000000 <= zx.sig.a0 ) {
- zx.sig = shortShift64RightJamming( zx.sig, 1 );
- ++zx.exp;
- }
- while ( zx.sig.a0 < 0x00800000 ) {
- zx.sig = shortShift64Left( zx.sig, 1 );
- --zx.exp;
- }
- savedZ = zx;
- isTiny =
- ( slow_float_detect_tininess == float_tininess_before_rounding )
- && ( zx.exp + 0x7F <= 0 );
- zx = roundFloatXTo24( isTiny, zx );
- expField = zx.exp + 0x7F;
- if ( 0xFF <= expField ) {
- slow_float_exception_flags |=
- float_flag_overflow | float_flag_inexact;
- if ( zx.sign ) {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_down:
- z = 0xFF800000;
- break;
- case float_round_to_zero:
- case float_round_up:
- z = 0xFF7FFFFF;
- break;
- }
- }
- else {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_up:
- z = 0x7F800000;
- break;
- case float_round_to_zero:
- case float_round_down:
- z = 0x7F7FFFFF;
- break;
- }
- }
- return z;
- }
- if ( expField <= 0 ) {
- isTiny = TRUE;
- zx = savedZ;
- expField = zx.exp + 0x7F;
- if ( expField < -27 ) {
- zx.sig.a1 = ( zx.sig.a0 != 0 ) || ( zx.sig.a1 != 0 );
- zx.sig.a0 = 0;
- }
- else {
- while ( expField <= 0 ) {
- zx.sig = shortShift64RightJamming( zx.sig, 1 );
- ++expField;
- }
- }
- zx = roundFloatXTo24( isTiny, zx );
- expField = ( 0x00800000 <= zx.sig.a0 ) ? 1 : 0;
- }
- z = expField;
- z <<= 23;
- if ( zx.sign ) z |= 0x80000000;
- z |= zx.sig.a0 & 0x007FFFFF;
- return z;
-
-}
-
-static floatX float64ToFloatX( float64 a )
-{
- int16 expField;
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.isZero = FALSE;
-#ifdef BITS64
- ax.sign = ( ( a & LIT64( 0x8000000000000000 ) ) != 0 );
- expField = ( a>>52 ) & 0x7FF;
- ax.sig.a1 = a;
- ax.sig.a0 = ( a>>32 ) & 0x000FFFFF;
-#else
- ax.sign = ( ( a.high & 0x80000000 ) != 0 );
- expField = ( a.high>>( 52 - 32 ) ) & 0x7FF;
- ax.sig.a1 = a.low;
- ax.sig.a0 = a.high & 0x000FFFFF;
-#endif
- if ( expField == 0 ) {
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) {
- ax.isZero = TRUE;
- }
- else {
- expField = 1 - 0x3FF;
- do {
- ax.sig = shortShift64Left( ax.sig, 1 );
- --expField;
- } while ( ax.sig.a0 < 0x00100000 );
- ax.exp = expField;
- }
- }
- else if ( expField == 0x7FF ) {
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) {
- ax.isInf = TRUE;
- }
- else {
- ax.isNaN = TRUE;
- }
- }
- else {
- ax.exp = expField - 0x3FF;
- ax.sig.a0 |= 0x00100000;
- }
- ax.sig = shortShift64Left( ax.sig, 3 );
- return ax;
-
-}
-
-static float64 floatXToFloat64( floatX zx )
-{
- floatX savedZ;
- flag isTiny;
- int16 expField;
- float64 z;
-
-#ifdef BITS64
- if ( zx.isZero ) return zx.sign ? LIT64( 0x8000000000000000 ) : 0;
- if ( zx.isInf ) {
- return
- zx.sign ? LIT64( 0xFFF0000000000000 )
- : LIT64( 0x7FF0000000000000 );
- }
- if ( zx.isNaN ) return LIT64( 0xFFFFFFFFFFFFFFFF );
-#else
- if ( zx.isZero ) {
- z.low = 0;
- z.high = zx.sign ? 0x80000000 : 0;
- return z;
- }
- if ( zx.isInf ) {
- z.low = 0;
- z.high = zx.sign ? 0xFFF00000 : 0x7FF00000;
- return z;
- }
- if ( zx.isNaN ) {
- z.high = z.low = 0xFFFFFFFF;
- return z;
- }
-#endif
- while ( 0x01000000 <= zx.sig.a0 ) {
- zx.sig = shortShift64RightJamming( zx.sig, 1 );
- ++zx.exp;
- }
- while ( zx.sig.a0 < 0x00800000 ) {
- zx.sig = shortShift64Left( zx.sig, 1 );
- --zx.exp;
- }
- savedZ = zx;
- isTiny =
- ( slow_float_detect_tininess == float_tininess_before_rounding )
- && ( zx.exp + 0x3FF <= 0 );
- zx = roundFloatXTo53( isTiny, zx );
- expField = zx.exp + 0x3FF;
- if ( 0x7FF <= expField ) {
- slow_float_exception_flags |=
- float_flag_overflow | float_flag_inexact;
-#ifdef BITS64
- if ( zx.sign ) {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_down:
- z = LIT64( 0xFFF0000000000000 );
- break;
- case float_round_to_zero:
- case float_round_up:
- z = LIT64( 0xFFEFFFFFFFFFFFFF );
- break;
- }
- }
- else {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_up:
- z = LIT64( 0x7FF0000000000000 );
- break;
- case float_round_to_zero:
- case float_round_down:
- z = LIT64( 0x7FEFFFFFFFFFFFFF );
- break;
- }
- }
-#else
- if ( zx.sign ) {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_down:
- z.low = 0;
- z.high = 0xFFF00000;
- break;
- case float_round_to_zero:
- case float_round_up:
- z.low = 0xFFFFFFFF;
- z.high = 0xFFEFFFFF;
- break;
- }
- }
- else {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_up:
- z.low = 0;
- z.high = 0x7FF00000;
- break;
- case float_round_to_zero:
- case float_round_down:
- z.low = 0xFFFFFFFF;
- z.high = 0x7FEFFFFF;
- break;
- }
- }
-#endif
- return z;
- }
- if ( expField <= 0 ) {
- isTiny = TRUE;
- zx = savedZ;
- expField = zx.exp + 0x3FF;
- if ( expField < -56 ) {
- zx.sig.a1 = ( zx.sig.a0 != 0 ) || ( zx.sig.a1 != 0 );
- zx.sig.a0 = 0;
- }
- else {
- while ( expField <= 0 ) {
- zx.sig = shortShift64RightJamming( zx.sig, 1 );
- ++expField;
- }
- }
- zx = roundFloatXTo53( isTiny, zx );
- expField = ( 0x00800000 <= zx.sig.a0 ) ? 1 : 0;
- }
- zx.sig = shortShift64RightJamming( zx.sig, 3 );
-#ifdef BITS64
- z = expField;
- z <<= 52;
- if ( zx.sign ) z |= LIT64( 0x8000000000000000 );
- z |= ( ( (bits64) ( zx.sig.a0 & 0x000FFFFF ) )<<32 ) | zx.sig.a1;
-#else
- z.low = zx.sig.a1;
- z.high = expField;
- z.high <<= 52 - 32;
- if ( zx.sign ) z.high |= 0x80000000;
- z.high |= zx.sig.a0 & 0x000FFFFF;
-#endif
- return z;
-
-}
-
-static floatX floatXInvalid( void )
-{
-
- slow_float_exception_flags |= float_flag_invalid;
- return floatXNaN;
-
-}
-
-static floatX floatXRoundToInt( floatX ax )
-{
- int16 shiftCount, i;
-
- if ( ax.isNaN || ax.isInf ) return ax;
- shiftCount = 52 - ax.exp;
- if ( shiftCount <= 0 ) return ax;
- if ( 55 < shiftCount ) {
- ax.exp = 52;
- ax.sig.a1 = ! ax.isZero;
- ax.sig.a0 = 0;
- }
- else {
- while ( 0 < shiftCount ) {
- ax.sig = shortShift64RightJamming( ax.sig, 1 );
- ++ax.exp;
- --shiftCount;
- }
- }
- ax = roundFloatXTo53( FALSE, ax );
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) ax.isZero = TRUE;
- return ax;
-
-}
-
-static floatX floatXAdd( floatX ax, floatX bx )
-{
- int16 expDiff;
- floatX zx;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf && bx.isInf ) {
- if ( ax.sign == bx.sign ) return ax;
- return floatXInvalid();
- }
- if ( ax.isInf ) return ax;
- if ( bx.isInf ) return bx;
- if ( ax.isZero && bx.isZero ) {
- if ( ax.sign == bx.sign ) return ax;
- goto completeCancellation;
- }
- if ( ( ax.sign != bx.sign )
- && ( ax.exp == bx.exp )
- && eq64( ax.sig, bx.sig )
- ) {
- completeCancellation:
- return
- ( slow_float_rounding_mode == float_round_down ) ?
- floatXNegativeZero
- : floatXPositiveZero;
- }
- if ( ax.isZero ) return bx;
- if ( bx.isZero ) return ax;
- expDiff = ax.exp - bx.exp;
- if ( expDiff < 0 ) {
- zx = ax;
- zx.exp = bx.exp;
- if ( expDiff < -56 ) {
- zx.sig.a1 = 1;
- zx.sig.a0 = 0;
- }
- else {
- while ( expDiff < 0 ) {
- zx.sig = shortShift64RightJamming( zx.sig, 1 );
- ++expDiff;
- }
- }
- if ( ax.sign != bx.sign ) zx.sig = neg64( zx.sig );
- zx.sign = bx.sign;
- zx.sig = add64( zx.sig, bx.sig );
- }
- else {
- zx = bx;
- zx.exp = ax.exp;
- if ( 56 < expDiff ) {
- zx.sig.a1 = 1;
- zx.sig.a0 = 0;
- }
- else {
- while ( 0 < expDiff ) {
- zx.sig = shortShift64RightJamming( zx.sig, 1 );
- --expDiff;
- }
- }
- if ( ax.sign != bx.sign ) zx.sig = neg64( zx.sig );
- zx.sign = ax.sign;
- zx.sig = add64( zx.sig, ax.sig );
- }
- if ( zx.sig.a0 & 0x80000000 ) {
- zx.sig = neg64( zx.sig );
- zx.sign = ! zx.sign;
- }
- return zx;
-
-}
-
-static floatX floatXMul( floatX ax, floatX bx )
-{
- int8 bitNum;
- floatX zx;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf ) {
- if ( bx.isZero ) return floatXInvalid();
- if ( bx.sign ) ax.sign = ! ax.sign;
- return ax;
- }
- if ( bx.isInf ) {
- if ( ax.isZero ) return floatXInvalid();
- if ( ax.sign ) bx.sign = ! bx.sign;
- return bx;
- }
- zx = ax;
- zx.sign ^= bx.sign;
- if ( ax.isZero || bx.isZero ) {
- return zx.sign ? floatXNegativeZero : floatXPositiveZero;
- }
- zx.exp += bx.exp + 1;
- zx.sig.a1 = 0;
- zx.sig.a0 = 0;
- for ( bitNum = 0; bitNum < 55; ++bitNum ) {
- if ( bx.sig.a1 & 2 ) zx.sig = add64( zx.sig, ax.sig );
- bx.sig = shortShift64RightJamming( bx.sig, 1 );
- zx.sig = shortShift64RightJamming( zx.sig, 1 );
- }
- return zx;
-
-}
-
-static floatX floatXDiv( floatX ax, floatX bx )
-{
- bits64X negBSig;
- int8 bitNum;
- floatX zx;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf ) {
- if ( bx.isInf ) return floatXInvalid();
- if ( bx.sign ) ax.sign = ! ax.sign;
- return ax;
- }
- if ( bx.isZero ) {
- if ( ax.isZero ) return floatXInvalid();
- slow_float_exception_flags |= float_flag_divbyzero;
- if ( ax.sign ) bx.sign = ! bx.sign;
- bx.isZero = FALSE;
- bx.isInf = TRUE;
- return bx;
- }
- zx = ax;
- zx.sign ^= bx.sign;
- if ( ax.isZero || bx.isInf ) {
- return zx.sign ? floatXNegativeZero : floatXPositiveZero;
- }
- zx.exp -= bx.exp + 1;
- zx.sig.a1 = 0;
- zx.sig.a0 = 0;
- negBSig = neg64( bx.sig );
- for ( bitNum = 0; bitNum < 56; ++bitNum ) {
- if ( le64( bx.sig, ax.sig ) ) {
- zx.sig.a1 |= 1;
- ax.sig = add64( ax.sig, negBSig );
- }
- ax.sig = shortShift64Left( ax.sig, 1 );
- zx.sig = shortShift64Left( zx.sig, 1 );
- }
- if ( ax.sig.a0 || ax.sig.a1 ) zx.sig.a1 |= 1;
- return zx;
-
-}
-
-static floatX floatXRem( floatX ax, floatX bx )
-{
- bits64X negBSig;
- flag lastQuotientBit;
- bits64X savedASig;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf || bx.isZero ) return floatXInvalid();
- if ( ax.isZero || bx.isInf ) return ax;
- --bx.exp;
- if ( ax.exp < bx.exp ) return ax;
- bx.sig = shortShift64Left( bx.sig, 1 );
- negBSig = neg64( bx.sig );
- while ( bx.exp < ax.exp ) {
- if ( le64( bx.sig, ax.sig ) ) ax.sig = add64( ax.sig, negBSig );
- ax.sig = shortShift64Left( ax.sig, 1 );
- --ax.exp;
- }
- lastQuotientBit = le64( bx.sig, ax.sig );
- if ( lastQuotientBit ) ax.sig = add64( ax.sig, negBSig );
- savedASig = ax.sig;
- ax.sig = neg64( add64( ax.sig, negBSig ) );
- if ( lt64( ax.sig, savedASig ) ) {
- ax.sign = ! ax.sign;
- }
- else if ( lt64( savedASig, ax.sig ) ) {
- ax.sig = savedASig;
- }
- else {
- if ( lastQuotientBit ) {
- ax.sign = ! ax.sign;
- }
- else {
- ax.sig = savedASig;
- }
- }
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) ax.isZero = TRUE;
- return ax;
-
-}
-
-static floatX floatXSqrt( floatX ax )
-{
- int8 bitNum;
- bits64X bitSig, savedASig;
- floatX zx;
-
- if ( ax.isNaN || ax.isZero ) return ax;
- if ( ax.sign ) return floatXInvalid();
- if ( ax.isInf ) return ax;
- zx = ax;
- zx.exp >>= 1;
- if ( ( ax.exp & 1 ) == 0 ) ax.sig = shortShift64RightJamming( ax.sig, 1 );
- zx.sig.a1 = 0;
- zx.sig.a0 = 0;
- bitSig.a1 = 0;
- bitSig.a0 = 0x00800000;
- for ( bitNum = 0; bitNum < 56; ++bitNum ) {
- savedASig = ax.sig;
- ax.sig = add64( ax.sig, neg64( zx.sig ) );
- ax.sig = shortShift64Left( ax.sig, 1 );
- ax.sig = add64( ax.sig, neg64( bitSig ) );
- if ( ax.sig.a0 & 0x80000000 ) {
- ax.sig = shortShift64Left( savedASig, 1 );
- }
- else {
- zx.sig.a1 |= bitSig.a1;
- zx.sig.a0 |= bitSig.a0;
- }
- bitSig = shortShift64RightJamming( bitSig, 1 );
- }
- if ( ax.sig.a0 || ax.sig.a1 ) zx.sig.a1 |= 1;
- return zx;
-
-}
-
-static flag floatXEq( floatX ax, floatX bx )
-{
-
- if ( ax.isNaN || bx.isNaN ) return FALSE;
- if ( ax.isZero && bx.isZero ) return TRUE;
- if ( ax.sign != bx.sign ) return FALSE;
- if ( ax.isInf || bx.isInf ) return ax.isInf && bx.isInf;
- return ( ax.exp == bx.exp ) && eq64( ax.sig, bx.sig );
-
-}
-
-static flag floatXLe( floatX ax, floatX bx )
-{
-
- if ( ax.isNaN || bx.isNaN ) return FALSE;
- if ( ax.isZero && bx.isZero ) return TRUE;
- if ( ax.sign != bx.sign ) return ax.sign;
- if ( ax.sign ) {
- if ( ax.isInf || bx.isZero ) return TRUE;
- if ( bx.isInf || ax.isZero ) return FALSE;
- if ( bx.exp < ax.exp ) return TRUE;
- if ( ax.exp < bx.exp ) return FALSE;
- return le64( bx.sig, ax.sig );
- }
- else {
- if ( bx.isInf || ax.isZero ) return TRUE;
- if ( ax.isInf || bx.isZero ) return FALSE;
- if ( ax.exp < bx.exp ) return TRUE;
- if ( bx.exp < ax.exp ) return FALSE;
- return le64( ax.sig, bx.sig );
- }
-
-}
-
-static flag floatXLt( floatX ax, floatX bx )
-{
-
- if ( ax.isNaN || bx.isNaN ) return FALSE;
- if ( ax.isZero && bx.isZero ) return FALSE;
- if ( ax.sign != bx.sign ) return ax.sign;
- if ( ax.isInf && bx.isInf ) return FALSE;
- if ( ax.sign ) {
- if ( ax.isInf || bx.isZero ) return TRUE;
- if ( bx.isInf || ax.isZero ) return FALSE;
- if ( bx.exp < ax.exp ) return TRUE;
- if ( ax.exp < bx.exp ) return FALSE;
- return lt64( bx.sig, ax.sig );
- }
- else {
- if ( bx.isInf || ax.isZero ) return TRUE;
- if ( ax.isInf || bx.isZero ) return FALSE;
- if ( ax.exp < bx.exp ) return TRUE;
- if ( bx.exp < ax.exp ) return FALSE;
- return lt64( ax.sig, bx.sig );
- }
-
-}
-
-float32 slow_int32_to_float32( int32 a )
-{
-
- return floatXToFloat32( int32ToFloatX( a ) );
-
-}
-
-float64 slow_int32_to_float64( int32 a )
-{
-
- return floatXToFloat64( int32ToFloatX( a ) );
-
-}
-
-int32 slow_float32_to_int32( float32 a )
-{
-
- return floatXToInt32( float32ToFloatX( a ) );
-
-}
-
-int32 slow_float32_to_int32_round_to_zero( float32 a )
-{
- int8 savedRoundingMode;
- int32 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt32( float32ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-float64 slow_float32_to_float64( float32 a )
-{
-
- return floatXToFloat64( float32ToFloatX( a ) );
-
-}
-
-float32 slow_float32_round_to_int( float32 a )
-{
-
- return floatXToFloat32( floatXRoundToInt( float32ToFloatX( a ) ) );
-
-}
-
-float32 slow_float32_add( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXAdd( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_sub( float32 a, float32 b )
-{
-
- b ^= 0x80000000;
- return
- floatXToFloat32(
- floatXAdd( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_mul( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXMul( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_div( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXDiv( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_rem( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXRem( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_sqrt( float32 a )
-{
-
- return floatXToFloat32( floatXSqrt( float32ToFloatX( a ) ) );
-
-}
-
-flag slow_float32_eq( float32 a, float32 b )
-{
-
- return floatXEq( float32ToFloatX( a ), float32ToFloatX( b ) );
-
-}
-
-flag slow_float32_le( float32 a, float32 b )
-{
- floatX ax, bx;
-
- ax = float32ToFloatX( a );
- bx = float32ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLe( ax, bx );
-
-}
-
-flag slow_float32_lt( float32 a, float32 b )
-{
- floatX ax, bx;
-
- ax = float32ToFloatX( a );
- bx = float32ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLt( ax, bx );
-
-}
-
-flag slow_float32_eq_signaling( float32 a, float32 b )
-{
- floatX ax, bx;
-
- ax = float32ToFloatX( a );
- bx = float32ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXEq( ax, bx );
-
-}
-
-flag slow_float32_le_quiet( float32 a, float32 b )
-{
-
- return floatXLe( float32ToFloatX( a ), float32ToFloatX( b ) );
-
-}
-
-flag slow_float32_lt_quiet( float32 a, float32 b )
-{
-
- return floatXLt( float32ToFloatX( a ), float32ToFloatX( b ) );
-
-}
-
-int32 slow_float64_to_int32( float64 a )
-{
-
- return floatXToInt32( float64ToFloatX( a ) );
-
-}
-
-int32 slow_float64_to_int32_round_to_zero( float64 a )
-{
- int8 savedRoundingMode;
- int32 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt32( float64ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-float32 slow_float64_to_float32( float64 a )
-{
-
- return floatXToFloat32( float64ToFloatX( a ) );
-
-}
-
-float64 slow_float64_round_to_int( float64 a )
-{
-
- return floatXToFloat64( floatXRoundToInt( float64ToFloatX( a ) ) );
-
-}
-
-float64 slow_float64_add( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXAdd( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_sub( float64 a, float64 b )
-{
-
-#ifdef BITS64
- b ^= LIT64( 0x8000000000000000 );
-#else
- b.high ^= 0x80000000;
-#endif
- return
- floatXToFloat64(
- floatXAdd( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_mul( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXMul( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_div( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXDiv( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_rem( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXRem( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_sqrt( float64 a )
-{
-
- return floatXToFloat64( floatXSqrt( float64ToFloatX( a ) ) );
-
-}
-
-flag slow_float64_eq( float64 a, float64 b )
-{
-
- return floatXEq( float64ToFloatX( a ), float64ToFloatX( b ) );
-
-}
-
-flag slow_float64_le( float64 a, float64 b )
-{
- floatX ax, bx;
-
- ax = float64ToFloatX( a );
- bx = float64ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLe( ax, bx );
-
-}
-
-flag slow_float64_lt( float64 a, float64 b )
-{
- floatX ax, bx;
-
- ax = float64ToFloatX( a );
- bx = float64ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLt( ax, bx );
-
-}
-
-flag slow_float64_eq_signaling( float64 a, float64 b )
-{
- floatX ax, bx;
-
- ax = float64ToFloatX( a );
- bx = float64ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXEq( ax, bx );
-
-}
-
-flag slow_float64_le_quiet( float64 a, float64 b )
-{
-
- return floatXLe( float64ToFloatX( a ), float64ToFloatX( b ) );
-
-}
-
-flag slow_float64_lt_quiet( float64 a, float64 b )
-{
-
- return floatXLt( float64ToFloatX( a ), float64ToFloatX( b ) );
-
-}
-
diff --git a/tools/test/testfloat/slowfloat-64.c b/tools/test/testfloat/slowfloat-64.c
deleted file mode 100644
index 27e56e1152a0..000000000000
--- a/tools/test/testfloat/slowfloat-64.c
+++ /dev/null
@@ -1,2109 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-int8 slow_float_rounding_mode;
-int8 slow_float_exception_flags;
-int8 slow_float_detect_tininess;
-#ifdef FLOATX80
-int8 slow_floatx80_rounding_precision;
-#endif
-
-typedef struct {
- bits64 a0, a1;
-} bits128X;
-
-typedef struct {
- flag isNaN;
- flag isInf;
- flag isZero;
- flag sign;
- int32 exp;
- bits128X sig;
-} floatX;
-
-static const floatX floatXNaN = { TRUE, FALSE, FALSE, FALSE, 0, { 0, 0 } };
-static const floatX floatXPositiveZero =
- { FALSE, FALSE, TRUE, FALSE, 0, { 0, 0 } };
-static const floatX floatXNegativeZero =
- { FALSE, FALSE, TRUE, TRUE, 0, { 0, 0 } };
-
-static bits128X shortShift128Left( bits128X a, int8 shiftCount )
-{
- int8 negShiftCount;
-
- negShiftCount = ( - shiftCount & 63 );
- a.a0 = ( a.a0<<shiftCount ) | ( a.a1>>negShiftCount );
- a.a1 <<= shiftCount;
- return a;
-
-}
-
-static bits128X shortShift128RightJamming( bits128X a, int8 shiftCount )
-{
- int8 negShiftCount;
- bits64 extra;
-
- negShiftCount = ( - shiftCount & 63 );
- extra = a.a1<<negShiftCount;
- a.a1 = ( a.a0<<negShiftCount ) | ( a.a1>>shiftCount ) | ( extra != 0 );
- a.a0 >>= shiftCount;
- return a;
-
-}
-
-static bits128X neg128( bits128X a )
-{
-
- if ( a.a1 == 0 ) {
- a.a0 = - a.a0;
- }
- else {
- a.a1 = - a.a1;
- a.a0 = ~ a.a0;
- }
- return a;
-
-}
-
-static bits128X add128( bits128X a, bits128X b )
-{
-
- a.a1 += b.a1;
- a.a0 += b.a0 + ( a.a1 < b.a1 );
- return a;
-
-}
-
-static flag eq128( bits128X a, bits128X b )
-{
-
- return ( a.a0 == b.a0 ) && ( a.a1 == b.a1 );
-
-}
-
-static flag le128( bits128X a, bits128X b )
-{
-
- return ( a.a0 < b.a0 ) || ( ( a.a0 == b.a0 ) && ( a.a1 <= b.a1 ) );
-
-}
-
-static flag lt128( bits128X a, bits128X b )
-{
-
- return ( a.a0 < b.a0 ) || ( ( a.a0 == b.a0 ) && ( a.a1 < b.a1 ) );
-
-}
-
-static floatX roundFloatXTo24( flag isTiny, floatX zx )
-{
- bits32 roundBits;
-
- zx.sig.a0 |= ( zx.sig.a1 != 0 );
- zx.sig.a1 = 0;
- roundBits = zx.sig.a0 & 0xFFFFFFFF;
- zx.sig.a0 -= roundBits;
- if ( roundBits ) {
- slow_float_exception_flags |= float_flag_inexact;
- if ( isTiny ) slow_float_exception_flags |= float_flag_underflow;
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- if ( roundBits < 0x80000000 ) goto noIncrement;
- if ( ( roundBits == 0x80000000 )
- && ! ( zx.sig.a0 & LIT64( 0x100000000 ) ) ) {
- goto noIncrement;
- }
- break;
- case float_round_to_zero:
- goto noIncrement;
- case float_round_down:
- if ( ! zx.sign ) goto noIncrement;
- break;
- case float_round_up:
- if ( zx.sign ) goto noIncrement;
- break;
- }
- zx.sig.a0 += LIT64( 0x100000000 );
- if ( zx.sig.a0 == LIT64( 0x0100000000000000 ) ) {
- zx.sig.a0 = LIT64( 0x0080000000000000 );
- ++zx.exp;
- }
- }
- noIncrement:
- return zx;
-
-}
-
-static floatX roundFloatXTo53( flag isTiny, floatX zx )
-{
- int8 roundBits;
-
- zx.sig.a0 |= ( zx.sig.a1 != 0 );
- zx.sig.a1 = 0;
- roundBits = zx.sig.a0 & 7;
- zx.sig.a0 -= roundBits;
- if ( roundBits ) {
- slow_float_exception_flags |= float_flag_inexact;
- if ( isTiny ) slow_float_exception_flags |= float_flag_underflow;
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- if ( roundBits < 4 ) goto noIncrement;
- if ( ( roundBits == 4 ) && ! ( zx.sig.a0 & 8 ) ) goto noIncrement;
- break;
- case float_round_to_zero:
- goto noIncrement;
- case float_round_down:
- if ( ! zx.sign ) goto noIncrement;
- break;
- case float_round_up:
- if ( zx.sign ) goto noIncrement;
- break;
- }
- zx.sig.a0 += 8;
- if ( zx.sig.a0 == LIT64( 0x0100000000000000 ) ) {
- zx.sig.a0 = LIT64( 0x0080000000000000 );
- ++zx.exp;
- }
- }
- noIncrement:
- return zx;
-
-}
-
-static floatX roundFloatXTo64( flag isTiny, floatX zx )
-{
- int64 roundBits;
-
- roundBits = zx.sig.a1 & LIT64( 0x00FFFFFFFFFFFFFF );
- zx.sig.a1 -= roundBits;
- if ( roundBits ) {
- slow_float_exception_flags |= float_flag_inexact;
- if ( isTiny ) slow_float_exception_flags |= float_flag_underflow;
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- if ( roundBits < LIT64( 0x0080000000000000 ) ) goto noIncrement;
- if ( ( roundBits == LIT64( 0x0080000000000000 ) )
- && ! ( zx.sig.a1 & LIT64( 0x0100000000000000 ) ) ) {
- goto noIncrement;
- }
- break;
- case float_round_to_zero:
- goto noIncrement;
- case float_round_down:
- if ( ! zx.sign ) goto noIncrement;
- break;
- case float_round_up:
- if ( zx.sign ) goto noIncrement;
- break;
- }
- zx.sig.a1 += LIT64( 0x0100000000000000 );
- zx.sig.a0 += ( zx.sig.a1 == 0 );
- if ( zx.sig.a0 == LIT64( 0x0100000000000000 ) ) {
- zx.sig.a0 = LIT64( 0x0080000000000000 );
- ++zx.exp;
- }
- }
- noIncrement:
- return zx;
-
-}
-
-static floatX roundFloatXTo113( flag isTiny, floatX zx )
-{
- int8 roundBits;
-
- roundBits = zx.sig.a1 & 0x7F;
- zx.sig.a1 -= roundBits;
- if ( roundBits ) {
- slow_float_exception_flags |= float_flag_inexact;
- if ( isTiny ) slow_float_exception_flags |= float_flag_underflow;
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- if ( roundBits < 0x40 ) goto noIncrement;
- if ( ( roundBits == 0x40 )
- && ! ( zx.sig.a1 & 0x80 ) ) goto noIncrement;
- break;
- case float_round_to_zero:
- goto noIncrement;
- case float_round_down:
- if ( ! zx.sign ) goto noIncrement;
- break;
- case float_round_up:
- if ( zx.sign ) goto noIncrement;
- break;
- }
- zx.sig.a1 += 0x80;
- zx.sig.a0 += ( zx.sig.a1 == 0 );
- if ( zx.sig.a0 == LIT64( 0x0100000000000000 ) ) {
- zx.sig.a0 = LIT64( 0x0080000000000000 );
- ++zx.exp;
- }
- }
- noIncrement:
- return zx;
-
-}
-
-static floatX int32ToFloatX( int32 a )
-{
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.sign = ( a < 0 );
- ax.sig.a1 = 0;
- ax.sig.a0 = ax.sign ? - (bits64) a : a;
- if ( a == 0 ) {
- ax.isZero = TRUE;
- return ax;
- }
- ax.isZero = FALSE;
- ax.sig.a0 <<= 24;
- ax.exp = 31;
- while ( ax.sig.a0 < LIT64( 0x0080000000000000 ) ) {
- ax.sig.a0 <<= 1;
- --ax.exp;
- }
- return ax;
-
-}
-
-static int32 floatXToInt32( floatX ax )
-{
- int8 savedExceptionFlags;
- int32 shiftCount;
- int32 z;
-
- if ( ax.isInf || ax.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- return ( ax.isInf & ax.sign ) ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- if ( ax.isZero ) return 0;
- savedExceptionFlags = slow_float_exception_flags;
- shiftCount = 52 - ax.exp;
- if ( 56 < shiftCount ) {
- ax.sig.a1 = 1;
- ax.sig.a0 = 0;
- }
- else {
- while ( 0 < shiftCount ) {
- ax.sig = shortShift128RightJamming( ax.sig, 1 );
- --shiftCount;
- }
- }
- ax = roundFloatXTo53( FALSE, ax );
- ax.sig = shortShift128RightJamming( ax.sig, 3 );
- z = ax.sig.a0;
- if ( ax.sign ) z = - z;
- if ( ( shiftCount < 0 )
- || ( ax.sig.a0>>32 )
- || ( ( z != 0 ) && ( ( ax.sign ^ ( z < 0 ) ) != 0 ) )
- ) {
- slow_float_exception_flags = savedExceptionFlags | float_flag_invalid;
- return ax.sign ? (sbits32) 0x80000000 : 0x7FFFFFFF;
- }
- return z;
-
-}
-
-static floatX int64ToFloatX( int64 a )
-{
- uint64 absA;
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.sign = ( a < 0 );
- ax.sig.a1 = ax.sign ? - a : a;
- ax.sig.a0 = 0;
- if ( a == 0 ) {
- ax.isZero = TRUE;
- return ax;
- }
- ax.isZero = FALSE;
- ax.sig = shortShift128Left( ax.sig, 56 );
- ax.exp = 63;
- while ( ax.sig.a0 < LIT64( 0x0080000000000000 ) ) {
- ax.sig = shortShift128Left( ax.sig, 1 );
- --ax.exp;
- }
- return ax;
-
-}
-
-static int64 floatXToInt64( floatX ax )
-{
- int8 savedExceptionFlags;
- int32 shiftCount;
- int64 z;
-
- if ( ax.isInf || ax.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- return
- ( ax.isInf & ax.sign ) ? (sbits64) LIT64( 0x8000000000000000 )
- : LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- if ( ax.isZero ) return 0;
- savedExceptionFlags = slow_float_exception_flags;
- shiftCount = 112 - ax.exp;
- if ( 116 < shiftCount ) {
- ax.sig.a1 = 1;
- ax.sig.a0 = 0;
- }
- else {
- while ( 0 < shiftCount ) {
- ax.sig = shortShift128RightJamming( ax.sig, 1 );
- --shiftCount;
- }
- }
- ax = roundFloatXTo113( FALSE, ax );
- ax.sig = shortShift128RightJamming( ax.sig, 7 );
- z = ax.sig.a1;
- if ( ax.sign ) z = - z;
- if ( ( shiftCount < 0 )
- || ax.sig.a0
- || ( ( z != 0 ) && ( ( ax.sign ^ ( z < 0 ) ) != 0 ) )
- ) {
- slow_float_exception_flags = savedExceptionFlags | float_flag_invalid;
- return
- ax.sign ? (sbits64) LIT64( 0x8000000000000000 )
- : LIT64( 0x7FFFFFFFFFFFFFFF );
- }
- return z;
-
-}
-
-static floatX float32ToFloatX( float32 a )
-{
- int16 expField;
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.isZero = FALSE;
- ax.sign = ( ( a & 0x80000000 ) != 0 );
- expField = ( a>>23 ) & 0xFF;
- ax.sig.a1 = 0;
- ax.sig.a0 = a & 0x007FFFFF;
- ax.sig.a0 <<= 32;
- if ( expField == 0 ) {
- if ( ax.sig.a0 == 0 ) {
- ax.isZero = TRUE;
- }
- else {
- expField = 1 - 0x7F;
- do {
- ax.sig.a0 <<= 1;
- --expField;
- } while ( ax.sig.a0 < LIT64( 0x0080000000000000 ) );
- ax.exp = expField;
- }
- }
- else if ( expField == 0xFF ) {
- if ( ax.sig.a0 == 0 ) {
- ax.isInf = TRUE;
- }
- else {
- ax.isNaN = TRUE;
- }
- }
- else {
- ax.sig.a0 |= LIT64( 0x0080000000000000 );
- ax.exp = expField - 0x7F;
- }
- return ax;
-
-}
-
-static float32 floatXToFloat32( floatX zx )
-{
- floatX savedZ;
- flag isTiny;
- int32 expField;
- float32 z;
-
- if ( zx.isZero ) return zx.sign ? 0x80000000 : 0;
- if ( zx.isInf ) return zx.sign ? 0xFF800000 : 0x7F800000;
- if ( zx.isNaN ) return 0xFFFFFFFF;
- while ( LIT64( 0x0100000000000000 ) <= zx.sig.a0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++zx.exp;
- }
- while ( zx.sig.a0 < LIT64( 0x0080000000000000 ) ) {
- zx.sig = shortShift128Left( zx.sig, 1 );
- --zx.exp;
- }
- savedZ = zx;
- isTiny =
- ( slow_float_detect_tininess == float_tininess_before_rounding )
- && ( zx.exp + 0x7F <= 0 );
- zx = roundFloatXTo24( isTiny, zx );
- expField = zx.exp + 0x7F;
- if ( 0xFF <= expField ) {
- slow_float_exception_flags |=
- float_flag_overflow | float_flag_inexact;
- if ( zx.sign ) {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_down:
- z = 0xFF800000;
- break;
- case float_round_to_zero:
- case float_round_up:
- z = 0xFF7FFFFF;
- break;
- }
- }
- else {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_up:
- z = 0x7F800000;
- break;
- case float_round_to_zero:
- case float_round_down:
- z = 0x7F7FFFFF;
- break;
- }
- }
- return z;
- }
- if ( expField <= 0 ) {
- isTiny = TRUE;
- zx = savedZ;
- expField = zx.exp + 0x7F;
- if ( expField < -27 ) {
- zx.sig.a1 = ( zx.sig.a0 != 0 ) || ( zx.sig.a1 != 0 );
- zx.sig.a0 = 0;
- }
- else {
- while ( expField <= 0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++expField;
- }
- }
- zx = roundFloatXTo24( isTiny, zx );
- expField = ( LIT64( 0x0080000000000000 ) <= zx.sig.a0 ) ? 1 : 0;
- }
- z = expField;
- z <<= 23;
- if ( zx.sign ) z |= 0x80000000;
- z |= ( zx.sig.a0>>32 ) & 0x007FFFFF;
- return z;
-
-}
-
-static floatX float64ToFloatX( float64 a )
-{
- int16 expField;
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.isZero = FALSE;
- ax.sign = ( ( a & LIT64( 0x8000000000000000 ) ) != 0 );
- expField = ( a>>52 ) & 0x7FF;
- ax.sig.a1 = 0;
- ax.sig.a0 = a & LIT64( 0x000FFFFFFFFFFFFF );
- if ( expField == 0 ) {
- if ( ax.sig.a0 == 0 ) {
- ax.isZero = TRUE;
- }
- else {
- expField = 1 - 0x3FF;
- do {
- ax.sig.a0 <<= 1;
- --expField;
- } while ( ax.sig.a0 < LIT64( 0x0010000000000000 ) );
- ax.exp = expField;
- }
- }
- else if ( expField == 0x7FF ) {
- if ( ax.sig.a0 == 0 ) {
- ax.isInf = TRUE;
- }
- else {
- ax.isNaN = TRUE;
- }
- }
- else {
- ax.exp = expField - 0x3FF;
- ax.sig.a0 |= LIT64( 0x0010000000000000 );
- }
- ax.sig.a0 <<= 3;
- return ax;
-
-}
-
-static float64 floatXToFloat64( floatX zx )
-{
- floatX savedZ;
- flag isTiny;
- int32 expField;
- float64 z;
-
- if ( zx.isZero ) return zx.sign ? LIT64( 0x8000000000000000 ) : 0;
- if ( zx.isInf ) {
- return
- zx.sign ? LIT64( 0xFFF0000000000000 )
- : LIT64( 0x7FF0000000000000 );
- }
- if ( zx.isNaN ) return LIT64( 0xFFFFFFFFFFFFFFFF );
- while ( LIT64( 0x0100000000000000 ) <= zx.sig.a0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++zx.exp;
- }
- while ( zx.sig.a0 < LIT64( 0x0080000000000000 ) ) {
- zx.sig = shortShift128Left( zx.sig, 1 );
- --zx.exp;
- }
- savedZ = zx;
- isTiny =
- ( slow_float_detect_tininess == float_tininess_before_rounding )
- && ( zx.exp + 0x3FF <= 0 );
- zx = roundFloatXTo53( isTiny, zx );
- expField = zx.exp + 0x3FF;
- if ( 0x7FF <= expField ) {
- slow_float_exception_flags |=
- float_flag_overflow | float_flag_inexact;
- if ( zx.sign ) {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_down:
- z = LIT64( 0xFFF0000000000000 );
- break;
- case float_round_to_zero:
- case float_round_up:
- z = LIT64( 0xFFEFFFFFFFFFFFFF );
- break;
- }
- }
- else {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_up:
- z = LIT64( 0x7FF0000000000000 );
- break;
- case float_round_to_zero:
- case float_round_down:
- z = LIT64( 0x7FEFFFFFFFFFFFFF );
- break;
- }
- }
- return z;
- }
- if ( expField <= 0 ) {
- isTiny = TRUE;
- zx = savedZ;
- expField = zx.exp + 0x3FF;
- if ( expField < -56 ) {
- zx.sig.a1 = ( zx.sig.a0 != 0 ) || ( zx.sig.a1 != 0 );
- zx.sig.a0 = 0;
- }
- else {
- while ( expField <= 0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++expField;
- }
- }
- zx = roundFloatXTo53( isTiny, zx );
- expField = ( LIT64( 0x0080000000000000 ) <= zx.sig.a0 ) ? 1 : 0;
- }
- zx.sig.a0 >>= 3;
- z = expField;
- z <<= 52;
- if ( zx.sign ) z |= LIT64( 0x8000000000000000 );
- z |= zx.sig.a0 & LIT64( 0x000FFFFFFFFFFFFF );
- return z;
-
-}
-
-#ifdef FLOATX80
-
-static floatX floatx80ToFloatX( floatx80 a )
-{
- int32 expField;
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.isZero = FALSE;
- ax.sign = ( ( a.high & 0x8000 ) != 0 );
- expField = a.high & 0x7FFF;
- ax.sig.a1 = a.low;
- ax.sig.a0 = 0;
- if ( expField == 0 ) {
- if ( ax.sig.a1 == 0 ) {
- ax.isZero = TRUE;
- }
- else {
- expField = 1 - 0x3FFF;
- while ( ax.sig.a1 < LIT64( 0x8000000000000000 ) ) {
- ax.sig.a1 <<= 1;
- --expField;
- }
- ax.exp = expField;
- }
- }
- else if ( expField == 0x7FFF ) {
- if ( ( ax.sig.a1 & LIT64( 0x7FFFFFFFFFFFFFFF ) ) == 0 ) {
- ax.isInf = TRUE;
- }
- else {
- ax.isNaN = TRUE;
- }
- }
- else {
- ax.exp = expField - 0x3FFF;
- }
- ax.sig = shortShift128Left( ax.sig, 56 );
- return ax;
-
-}
-
-static floatx80 floatXToFloatx80( floatX zx )
-{
- floatX savedZ;
- flag isTiny;
- int32 expField;
- floatx80 z;
-
- if ( zx.isZero ) {
- z.low = 0;
- z.high = zx.sign ? 0x8000 : 0;
- return z;
- }
- if ( zx.isInf ) {
- z.low = LIT64( 0x8000000000000000 );
- z.high = zx.sign ? 0xFFFF : 0x7FFF;
- return z;
- }
- if ( zx.isNaN ) {
- z.low = LIT64( 0xFFFFFFFFFFFFFFFF );
- z.high = 0xFFFF;
- return z;
- }
- while ( LIT64( 0x0100000000000000 ) <= zx.sig.a0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++zx.exp;
- }
- while ( zx.sig.a0 < LIT64( 0x0080000000000000 ) ) {
- zx.sig = shortShift128Left( zx.sig, 1 );
- --zx.exp;
- }
- savedZ = zx;
- isTiny =
- ( slow_float_detect_tininess == float_tininess_before_rounding )
- && ( zx.exp + 0x3FFF <= 0 );
- switch ( slow_floatx80_rounding_precision ) {
- case 32:
- zx = roundFloatXTo24( isTiny, zx );
- break;
- case 64:
- zx = roundFloatXTo53( isTiny, zx );
- break;
- default:
- zx = roundFloatXTo64( isTiny, zx );
- break;
- }
- expField = zx.exp + 0x3FFF;
- if ( 0x7FFF <= expField ) {
- slow_float_exception_flags |=
- float_flag_overflow | float_flag_inexact;
- if ( zx.sign ) {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_down:
- z.low = LIT64( 0x8000000000000000 );
- z.high = 0xFFFF;
- break;
- case float_round_to_zero:
- case float_round_up:
- switch ( slow_floatx80_rounding_precision ) {
- case 32:
- z.low = LIT64( 0xFFFFFF0000000000 );
- break;
- case 64:
- z.low = LIT64( 0xFFFFFFFFFFFFF800 );
- break;
- default:
- z.low = LIT64( 0xFFFFFFFFFFFFFFFF );
- break;
- }
- z.high = 0xFFFE;
- break;
- }
- }
- else {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_up:
- z.low = LIT64( 0x8000000000000000 );
- z.high = 0x7FFF;
- break;
- case float_round_to_zero:
- case float_round_down:
- switch ( slow_floatx80_rounding_precision ) {
- case 32:
- z.low = LIT64( 0xFFFFFF0000000000 );
- break;
- case 64:
- z.low = LIT64( 0xFFFFFFFFFFFFF800 );
- break;
- default:
- z.low = LIT64( 0xFFFFFFFFFFFFFFFF );
- break;
- }
- z.high = 0x7FFE;
- break;
- }
- }
- return z;
- }
- if ( expField <= 0 ) {
- isTiny = TRUE;
- zx = savedZ;
- expField = zx.exp + 0x3FFF;
- if ( expField < -70 ) {
- zx.sig.a1 = ( zx.sig.a0 != 0 ) || ( zx.sig.a1 != 0 );
- zx.sig.a0 = 0;
- }
- else {
- while ( expField <= 0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++expField;
- }
- }
- switch ( slow_floatx80_rounding_precision ) {
- case 32:
- zx = roundFloatXTo24( isTiny, zx );
- break;
- case 64:
- zx = roundFloatXTo53( isTiny, zx );
- break;
- default:
- zx = roundFloatXTo64( isTiny, zx );
- break;
- }
- expField = ( LIT64( 0x0080000000000000 ) <= zx.sig.a0 ) ? 1 : 0;
- }
- zx.sig = shortShift128RightJamming( zx.sig, 56 );
- z.low = zx.sig.a1;
- z.high = expField;
- if ( zx.sign ) z.high |= 0x8000;
- return z;
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-static floatX float128ToFloatX( float128 a )
-{
- int32 expField;
- floatX ax;
-
- ax.isNaN = FALSE;
- ax.isInf = FALSE;
- ax.isZero = FALSE;
- ax.sign = ( ( a.high & LIT64( 0x8000000000000000 ) ) != 0 );
- expField = ( a.high>>48 ) & 0x7FFF;
- ax.sig.a1 = a.low;
- ax.sig.a0 = a.high & LIT64( 0x0000FFFFFFFFFFFF );
- if ( expField == 0 ) {
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) {
- ax.isZero = TRUE;
- }
- else {
- expField = 1 - 0x3FFF;
- do {
- ax.sig = shortShift128Left( ax.sig, 1 );
- --expField;
- } while ( ax.sig.a0 < LIT64( 0x0001000000000000 ) );
- ax.exp = expField;
- }
- }
- else if ( expField == 0x7FFF ) {
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) {
- ax.isInf = TRUE;
- }
- else {
- ax.isNaN = TRUE;
- }
- }
- else {
- ax.exp = expField - 0x3FFF;
- ax.sig.a0 |= LIT64( 0x0001000000000000 );
- }
- ax.sig = shortShift128Left( ax.sig, 7 );
- return ax;
-
-}
-
-static float128 floatXToFloat128( floatX zx )
-{
- floatX savedZ;
- flag isTiny;
- int32 expField;
- float128 z;
-
- if ( zx.isZero ) {
- z.low = 0;
- z.high = zx.sign ? LIT64( 0x8000000000000000 ) : 0;
- return z;
- }
- if ( zx.isInf ) {
- z.low = 0;
- z.high =
- zx.sign ? LIT64( 0xFFFF000000000000 )
- : LIT64( 0x7FFF000000000000 );
- return z;
- }
- if ( zx.isNaN ) {
- z.high = z.low = LIT64( 0xFFFFFFFFFFFFFFFF );
- return z;
- }
- while ( LIT64( 0x0100000000000000 ) <= zx.sig.a0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++zx.exp;
- }
- while ( zx.sig.a0 < LIT64( 0x0080000000000000 ) ) {
- zx.sig = shortShift128Left( zx.sig, 1 );
- --zx.exp;
- }
- savedZ = zx;
- isTiny =
- ( slow_float_detect_tininess == float_tininess_before_rounding )
- && ( zx.exp + 0x3FFF <= 0 );
- zx = roundFloatXTo113( isTiny, zx );
- expField = zx.exp + 0x3FFF;
- if ( 0x7FFF <= expField ) {
- slow_float_exception_flags |=
- float_flag_overflow | float_flag_inexact;
- if ( zx.sign ) {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_down:
- z.low = 0;
- z.high = LIT64( 0xFFFF000000000000 );
- break;
- case float_round_to_zero:
- case float_round_up:
- z.low = LIT64( 0xFFFFFFFFFFFFFFFF );
- z.high = LIT64( 0xFFFEFFFFFFFFFFFF );
- break;
- }
- }
- else {
- switch ( slow_float_rounding_mode ) {
- case float_round_nearest_even:
- case float_round_up:
- z.low = 0;
- z.high = LIT64( 0x7FFF000000000000 );
- break;
- case float_round_to_zero:
- case float_round_down:
- z.low = LIT64( 0xFFFFFFFFFFFFFFFF );
- z.high = LIT64( 0x7FFEFFFFFFFFFFFF );
- break;
- }
- }
- return z;
- }
- if ( expField <= 0 ) {
- isTiny = TRUE;
- zx = savedZ;
- expField = zx.exp + 0x3FFF;
- if ( expField < -120 ) {
- zx.sig.a1 = ( zx.sig.a0 != 0 ) || ( zx.sig.a1 != 0 );
- zx.sig.a0 = 0;
- }
- else {
- while ( expField <= 0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++expField;
- }
- }
- zx = roundFloatXTo113( isTiny, zx );
- expField = ( LIT64( 0x0080000000000000 ) <= zx.sig.a0 ) ? 1 : 0;
- }
- zx.sig = shortShift128RightJamming( zx.sig, 7 );
- z.low = zx.sig.a1;
- z.high = expField;
- z.high <<= 48;
- if ( zx.sign ) z.high |= LIT64( 0x8000000000000000 );
- z.high |= zx.sig.a0 & LIT64( 0x0000FFFFFFFFFFFF );
- return z;
-
-}
-
-#endif
-
-static floatX floatXInvalid( void )
-{
-
- slow_float_exception_flags |= float_flag_invalid;
- return floatXNaN;
-
-}
-
-static floatX floatXRoundToInt( floatX ax )
-{
- int32 shiftCount, i;
-
- if ( ax.isNaN || ax.isInf ) return ax;
- shiftCount = 112 - ax.exp;
- if ( shiftCount <= 0 ) return ax;
- if ( 119 < shiftCount ) {
- ax.exp = 112;
- ax.sig.a1 = ! ax.isZero;
- ax.sig.a0 = 0;
- }
- else {
- while ( 0 < shiftCount ) {
- ax.sig = shortShift128RightJamming( ax.sig, 1 );
- ++ax.exp;
- --shiftCount;
- }
- }
- ax = roundFloatXTo113( FALSE, ax );
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) ax.isZero = TRUE;
- return ax;
-
-}
-
-static floatX floatXAdd( floatX ax, floatX bx )
-{
- int32 expDiff;
- floatX zx;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf && bx.isInf ) {
- if ( ax.sign == bx.sign ) return ax;
- return floatXInvalid();
- }
- if ( ax.isInf ) return ax;
- if ( bx.isInf ) return bx;
- if ( ax.isZero && bx.isZero ) {
- if ( ax.sign == bx.sign ) return ax;
- goto completeCancellation;
- }
- if ( ( ax.sign != bx.sign )
- && ( ax.exp == bx.exp )
- && eq128( ax.sig, bx.sig )
- ) {
- completeCancellation:
- return
- ( slow_float_rounding_mode == float_round_down ) ?
- floatXNegativeZero
- : floatXPositiveZero;
- }
- if ( ax.isZero ) return bx;
- if ( bx.isZero ) return ax;
- expDiff = ax.exp - bx.exp;
- if ( expDiff < 0 ) {
- zx = ax;
- zx.exp = bx.exp;
- if ( expDiff < -120 ) {
- zx.sig.a1 = 1;
- zx.sig.a0 = 0;
- }
- else {
- while ( expDiff < 0 ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- ++expDiff;
- }
- }
- if ( ax.sign != bx.sign ) zx.sig = neg128( zx.sig );
- zx.sign = bx.sign;
- zx.sig = add128( zx.sig, bx.sig );
- }
- else {
- zx = bx;
- zx.exp = ax.exp;
- if ( 120 < expDiff ) {
- zx.sig.a1 = 1;
- zx.sig.a0 = 0;
- }
- else {
- while ( 0 < expDiff ) {
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- --expDiff;
- }
- }
- if ( ax.sign != bx.sign ) zx.sig = neg128( zx.sig );
- zx.sign = ax.sign;
- zx.sig = add128( zx.sig, ax.sig );
- }
- if ( zx.sig.a0 & LIT64( 0x8000000000000000 ) ) {
- zx.sig = neg128( zx.sig );
- zx.sign = ! zx.sign;
- }
- return zx;
-
-}
-
-static floatX floatXMul( floatX ax, floatX bx )
-{
- int8 bitNum;
- floatX zx;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf ) {
- if ( bx.isZero ) return floatXInvalid();
- if ( bx.sign ) ax.sign = ! ax.sign;
- return ax;
- }
- if ( bx.isInf ) {
- if ( ax.isZero ) return floatXInvalid();
- if ( ax.sign ) bx.sign = ! bx.sign;
- return bx;
- }
- zx = ax;
- zx.sign ^= bx.sign;
- if ( ax.isZero || bx.isZero ) {
- return zx.sign ? floatXNegativeZero : floatXPositiveZero;
- }
- zx.exp += bx.exp + 1;
- zx.sig.a1 = 0;
- zx.sig.a0 = 0;
- for ( bitNum = 0; bitNum < 119; ++bitNum ) {
- if ( bx.sig.a1 & 2 ) zx.sig = add128( zx.sig, ax.sig );
- bx.sig = shortShift128RightJamming( bx.sig, 1 );
- zx.sig = shortShift128RightJamming( zx.sig, 1 );
- }
- return zx;
-
-}
-
-static floatX floatXDiv( floatX ax, floatX bx )
-{
- bits128X negBSig;
- int8 bitNum;
- floatX zx;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf ) {
- if ( bx.isInf ) return floatXInvalid();
- if ( bx.sign ) ax.sign = ! ax.sign;
- return ax;
- }
- if ( bx.isZero ) {
- if ( ax.isZero ) return floatXInvalid();
- slow_float_exception_flags |= float_flag_divbyzero;
- if ( ax.sign ) bx.sign = ! bx.sign;
- bx.isZero = FALSE;
- bx.isInf = TRUE;
- return bx;
- }
- zx = ax;
- zx.sign ^= bx.sign;
- if ( ax.isZero || bx.isInf ) {
- return zx.sign ? floatXNegativeZero : floatXPositiveZero;
- }
- zx.exp -= bx.exp + 1;
- zx.sig.a1 = 0;
- zx.sig.a0 = 0;
- negBSig = neg128( bx.sig );
- for ( bitNum = 0; bitNum < 120; ++bitNum ) {
- if ( le128( bx.sig, ax.sig ) ) {
- zx.sig.a1 |= 1;
- ax.sig = add128( ax.sig, negBSig );
- }
- ax.sig = shortShift128Left( ax.sig, 1 );
- zx.sig = shortShift128Left( zx.sig, 1 );
- }
- if ( ax.sig.a0 || ax.sig.a1 ) zx.sig.a1 |= 1;
- return zx;
-
-}
-
-static floatX floatXRem( floatX ax, floatX bx )
-{
- bits128X negBSig;
- flag lastQuotientBit;
- bits128X savedASig;
-
- if ( ax.isNaN ) return ax;
- if ( bx.isNaN ) return bx;
- if ( ax.isInf || bx.isZero ) return floatXInvalid();
- if ( ax.isZero || bx.isInf ) return ax;
- --bx.exp;
- if ( ax.exp < bx.exp ) return ax;
- bx.sig = shortShift128Left( bx.sig, 1 );
- negBSig = neg128( bx.sig );
- while ( bx.exp < ax.exp ) {
- if ( le128( bx.sig, ax.sig ) ) ax.sig = add128( ax.sig, negBSig );
- ax.sig = shortShift128Left( ax.sig, 1 );
- --ax.exp;
- }
- lastQuotientBit = le128( bx.sig, ax.sig );
- if ( lastQuotientBit ) ax.sig = add128( ax.sig, negBSig );
- savedASig = ax.sig;
- ax.sig = neg128( add128( ax.sig, negBSig ) );
- if ( lt128( ax.sig, savedASig ) ) {
- ax.sign = ! ax.sign;
- }
- else if ( lt128( savedASig, ax.sig ) ) {
- ax.sig = savedASig;
- }
- else {
- if ( lastQuotientBit ) {
- ax.sign = ! ax.sign;
- }
- else {
- ax.sig = savedASig;
- }
- }
- if ( ( ax.sig.a0 == 0 ) && ( ax.sig.a1 == 0 ) ) ax.isZero = TRUE;
- return ax;
-
-}
-
-static floatX floatXSqrt( floatX ax )
-{
- int8 bitNum;
- bits128X bitSig, savedASig;
- floatX zx;
-
- if ( ax.isNaN || ax.isZero ) return ax;
- if ( ax.sign ) return floatXInvalid();
- if ( ax.isInf ) return ax;
- zx = ax;
- zx.exp >>= 1;
- if ( ( ax.exp & 1 ) == 0 ) ax.sig = shortShift128RightJamming( ax.sig, 1 );
- zx.sig.a1 = 0;
- zx.sig.a0 = 0;
- bitSig.a1 = 0;
- bitSig.a0 = LIT64( 0x0080000000000000 );
- for ( bitNum = 0; bitNum < 120; ++bitNum ) {
- savedASig = ax.sig;
- ax.sig = add128( ax.sig, neg128( zx.sig ) );
- ax.sig = shortShift128Left( ax.sig, 1 );
- ax.sig = add128( ax.sig, neg128( bitSig ) );
- if ( ax.sig.a0 & LIT64( 0x8000000000000000 ) ) {
- ax.sig = shortShift128Left( savedASig, 1 );
- }
- else {
- zx.sig.a1 |= bitSig.a1;
- zx.sig.a0 |= bitSig.a0;
- }
- bitSig = shortShift128RightJamming( bitSig, 1 );
- }
- if ( ax.sig.a0 || ax.sig.a1 ) zx.sig.a1 |= 1;
- return zx;
-
-}
-
-static flag floatXEq( floatX ax, floatX bx )
-{
-
- if ( ax.isNaN || bx.isNaN ) return FALSE;
- if ( ax.isZero && bx.isZero ) return TRUE;
- if ( ax.sign != bx.sign ) return FALSE;
- if ( ax.isInf || bx.isInf ) return ax.isInf && bx.isInf;
- return ( ax.exp == bx.exp ) && eq128( ax.sig, bx.sig );
-
-}
-
-static flag floatXLe( floatX ax, floatX bx )
-{
-
- if ( ax.isNaN || bx.isNaN ) return FALSE;
- if ( ax.isZero && bx.isZero ) return TRUE;
- if ( ax.sign != bx.sign ) return ax.sign;
- if ( ax.sign ) {
- if ( ax.isInf || bx.isZero ) return TRUE;
- if ( bx.isInf || ax.isZero ) return FALSE;
- if ( bx.exp < ax.exp ) return TRUE;
- if ( ax.exp < bx.exp ) return FALSE;
- return le128( bx.sig, ax.sig );
- }
- else {
- if ( bx.isInf || ax.isZero ) return TRUE;
- if ( ax.isInf || bx.isZero ) return FALSE;
- if ( ax.exp < bx.exp ) return TRUE;
- if ( bx.exp < ax.exp ) return FALSE;
- return le128( ax.sig, bx.sig );
- }
-
-}
-
-static flag floatXLt( floatX ax, floatX bx )
-{
-
- if ( ax.isNaN || bx.isNaN ) return FALSE;
- if ( ax.isZero && bx.isZero ) return FALSE;
- if ( ax.sign != bx.sign ) return ax.sign;
- if ( ax.isInf && bx.isInf ) return FALSE;
- if ( ax.sign ) {
- if ( ax.isInf || bx.isZero ) return TRUE;
- if ( bx.isInf || ax.isZero ) return FALSE;
- if ( bx.exp < ax.exp ) return TRUE;
- if ( ax.exp < bx.exp ) return FALSE;
- return lt128( bx.sig, ax.sig );
- }
- else {
- if ( bx.isInf || ax.isZero ) return TRUE;
- if ( ax.isInf || bx.isZero ) return FALSE;
- if ( ax.exp < bx.exp ) return TRUE;
- if ( bx.exp < ax.exp ) return FALSE;
- return lt128( ax.sig, bx.sig );
- }
-
-}
-
-float32 slow_int32_to_float32( int32 a )
-{
-
- return floatXToFloat32( int32ToFloatX( a ) );
-
-}
-
-float64 slow_int32_to_float64( int32 a )
-{
-
- return floatXToFloat64( int32ToFloatX( a ) );
-
-}
-
-#ifdef FLOATX80
-
-floatx80 slow_int32_to_floatx80( int32 a )
-{
-
- return floatXToFloatx80( int32ToFloatX( a ) );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-float128 slow_int32_to_float128( int32 a )
-{
-
- return floatXToFloat128( int32ToFloatX( a ) );
-
-}
-
-#endif
-
-float32 slow_int64_to_float32( int64 a )
-{
-
- return floatXToFloat32( int64ToFloatX( a ) );
-
-}
-
-float64 slow_int64_to_float64( int64 a )
-{
-
- return floatXToFloat64( int64ToFloatX( a ) );
-
-}
-
-#ifdef FLOATX80
-
-floatx80 slow_int64_to_floatx80( int64 a )
-{
-
- return floatXToFloatx80( int64ToFloatX( a ) );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-float128 slow_int64_to_float128( int64 a )
-{
-
- return floatXToFloat128( int64ToFloatX( a ) );
-
-}
-
-#endif
-
-int32 slow_float32_to_int32( float32 a )
-{
-
- return floatXToInt32( float32ToFloatX( a ) );
-
-}
-
-int32 slow_float32_to_int32_round_to_zero( float32 a )
-{
- int8 savedRoundingMode;
- int32 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt32( float32ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-int64 slow_float32_to_int64( float32 a )
-{
-
- return floatXToInt64( float32ToFloatX( a ) );
-
-}
-
-int64 slow_float32_to_int64_round_to_zero( float32 a )
-{
- int8 savedRoundingMode;
- int64 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt64( float32ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-float64 slow_float32_to_float64( float32 a )
-{
-
- return floatXToFloat64( float32ToFloatX( a ) );
-
-}
-
-#ifdef FLOATX80
-
-floatx80 slow_float32_to_floatx80( float32 a )
-{
-
- return floatXToFloatx80( float32ToFloatX( a ) );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-float128 slow_float32_to_float128( float32 a )
-{
-
- return floatXToFloat128( float32ToFloatX( a ) );
-
-}
-
-#endif
-
-float32 slow_float32_round_to_int( float32 a )
-{
-
- return floatXToFloat32( floatXRoundToInt( float32ToFloatX( a ) ) );
-
-}
-
-float32 slow_float32_add( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXAdd( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_sub( float32 a, float32 b )
-{
-
- b ^= 0x80000000;
- return
- floatXToFloat32(
- floatXAdd( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_mul( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXMul( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_div( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXDiv( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_rem( float32 a, float32 b )
-{
-
- return
- floatXToFloat32(
- floatXRem( float32ToFloatX( a ), float32ToFloatX( b ) ) );
-
-}
-
-float32 slow_float32_sqrt( float32 a )
-{
-
- return floatXToFloat32( floatXSqrt( float32ToFloatX( a ) ) );
-
-}
-
-flag slow_float32_eq( float32 a, float32 b )
-{
-
- return floatXEq( float32ToFloatX( a ), float32ToFloatX( b ) );
-
-}
-
-flag slow_float32_le( float32 a, float32 b )
-{
- floatX ax, bx;
-
- ax = float32ToFloatX( a );
- bx = float32ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLe( ax, bx );
-
-}
-
-flag slow_float32_lt( float32 a, float32 b )
-{
- floatX ax, bx;
-
- ax = float32ToFloatX( a );
- bx = float32ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLt( ax, bx );
-
-}
-
-flag slow_float32_eq_signaling( float32 a, float32 b )
-{
- floatX ax, bx;
-
- ax = float32ToFloatX( a );
- bx = float32ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXEq( ax, bx );
-
-}
-
-flag slow_float32_le_quiet( float32 a, float32 b )
-{
-
- return floatXLe( float32ToFloatX( a ), float32ToFloatX( b ) );
-
-}
-
-flag slow_float32_lt_quiet( float32 a, float32 b )
-{
-
- return floatXLt( float32ToFloatX( a ), float32ToFloatX( b ) );
-
-}
-
-int32 slow_float64_to_int32( float64 a )
-{
-
- return floatXToInt32( float64ToFloatX( a ) );
-
-}
-
-int32 slow_float64_to_int32_round_to_zero( float64 a )
-{
- int8 savedRoundingMode;
- int32 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt32( float64ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-int64 slow_float64_to_int64( float64 a )
-{
-
- return floatXToInt64( float64ToFloatX( a ) );
-
-}
-
-int64 slow_float64_to_int64_round_to_zero( float64 a )
-{
- int8 savedRoundingMode;
- int64 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt64( float64ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-float32 slow_float64_to_float32( float64 a )
-{
-
- return floatXToFloat32( float64ToFloatX( a ) );
-
-}
-
-#ifdef FLOATX80
-
-floatx80 slow_float64_to_floatx80( float64 a )
-{
-
- return floatXToFloatx80( float64ToFloatX( a ) );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-float128 slow_float64_to_float128( float64 a )
-{
-
- return floatXToFloat128( float64ToFloatX( a ) );
-
-}
-
-#endif
-
-float64 slow_float64_round_to_int( float64 a )
-{
-
- return floatXToFloat64( floatXRoundToInt( float64ToFloatX( a ) ) );
-
-}
-
-float64 slow_float64_add( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXAdd( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_sub( float64 a, float64 b )
-{
-
- b ^= LIT64( 0x8000000000000000 );
- return
- floatXToFloat64(
- floatXAdd( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_mul( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXMul( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_div( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXDiv( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_rem( float64 a, float64 b )
-{
-
- return
- floatXToFloat64(
- floatXRem( float64ToFloatX( a ), float64ToFloatX( b ) ) );
-
-}
-
-float64 slow_float64_sqrt( float64 a )
-{
-
- return floatXToFloat64( floatXSqrt( float64ToFloatX( a ) ) );
-
-}
-
-flag slow_float64_eq( float64 a, float64 b )
-{
-
- return floatXEq( float64ToFloatX( a ), float64ToFloatX( b ) );
-
-}
-
-flag slow_float64_le( float64 a, float64 b )
-{
- floatX ax, bx;
-
- ax = float64ToFloatX( a );
- bx = float64ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLe( ax, bx );
-
-}
-
-flag slow_float64_lt( float64 a, float64 b )
-{
- floatX ax, bx;
-
- ax = float64ToFloatX( a );
- bx = float64ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLt( ax, bx );
-
-}
-
-flag slow_float64_eq_signaling( float64 a, float64 b )
-{
- floatX ax, bx;
-
- ax = float64ToFloatX( a );
- bx = float64ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXEq( ax, bx );
-
-}
-
-flag slow_float64_le_quiet( float64 a, float64 b )
-{
-
- return floatXLe( float64ToFloatX( a ), float64ToFloatX( b ) );
-
-}
-
-flag slow_float64_lt_quiet( float64 a, float64 b )
-{
-
- return floatXLt( float64ToFloatX( a ), float64ToFloatX( b ) );
-
-}
-
-#ifdef FLOATX80
-
-int32 slow_floatx80_to_int32( floatx80 a )
-{
-
- return floatXToInt32( floatx80ToFloatX( a ) );
-
-}
-
-int32 slow_floatx80_to_int32_round_to_zero( floatx80 a )
-{
- int8 savedRoundingMode;
- int32 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt32( floatx80ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-int64 slow_floatx80_to_int64( floatx80 a )
-{
-
- return floatXToInt64( floatx80ToFloatX( a ) );
-
-}
-
-int64 slow_floatx80_to_int64_round_to_zero( floatx80 a )
-{
- int8 savedRoundingMode;
- int64 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt64( floatx80ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-float32 slow_floatx80_to_float32( floatx80 a )
-{
-
- return floatXToFloat32( floatx80ToFloatX( a ) );
-
-}
-
-float64 slow_floatx80_to_float64( floatx80 a )
-{
-
- return floatXToFloat64( floatx80ToFloatX( a ) );
-
-}
-
-#ifdef FLOAT128
-
-float128 slow_floatx80_to_float128( floatx80 a )
-{
-
- return floatXToFloat128( floatx80ToFloatX( a ) );
-
-}
-
-#endif
-
-floatx80 slow_floatx80_round_to_int( floatx80 a )
-{
-
- return floatXToFloatx80( floatXRoundToInt( floatx80ToFloatX( a ) ) );
-
-}
-
-floatx80 slow_floatx80_add( floatx80 a, floatx80 b )
-{
-
- return
- floatXToFloatx80(
- floatXAdd( floatx80ToFloatX( a ), floatx80ToFloatX( b ) ) );
-
-}
-
-floatx80 slow_floatx80_sub( floatx80 a, floatx80 b )
-{
-
- b.high ^= 0x8000;
- return
- floatXToFloatx80(
- floatXAdd( floatx80ToFloatX( a ), floatx80ToFloatX( b ) ) );
-
-}
-
-floatx80 slow_floatx80_mul( floatx80 a, floatx80 b )
-{
-
- return
- floatXToFloatx80(
- floatXMul( floatx80ToFloatX( a ), floatx80ToFloatX( b ) ) );
-
-}
-
-floatx80 slow_floatx80_div( floatx80 a, floatx80 b )
-{
-
- return
- floatXToFloatx80(
- floatXDiv( floatx80ToFloatX( a ), floatx80ToFloatX( b ) ) );
-
-}
-
-floatx80 slow_floatx80_rem( floatx80 a, floatx80 b )
-{
-
- return
- floatXToFloatx80(
- floatXRem( floatx80ToFloatX( a ), floatx80ToFloatX( b ) ) );
-
-}
-
-floatx80 slow_floatx80_sqrt( floatx80 a )
-{
-
- return floatXToFloatx80( floatXSqrt( floatx80ToFloatX( a ) ) );
-
-}
-
-flag slow_floatx80_eq( floatx80 a, floatx80 b )
-{
-
- return floatXEq( floatx80ToFloatX( a ), floatx80ToFloatX( b ) );
-
-}
-
-flag slow_floatx80_le( floatx80 a, floatx80 b )
-{
- floatX ax, bx;
-
- ax = floatx80ToFloatX( a );
- bx = floatx80ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLe( ax, bx );
-
-}
-
-flag slow_floatx80_lt( floatx80 a, floatx80 b )
-{
- floatX ax, bx;
-
- ax = floatx80ToFloatX( a );
- bx = floatx80ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLt( ax, bx );
-
-}
-
-flag slow_floatx80_eq_signaling( floatx80 a, floatx80 b )
-{
- floatX ax, bx;
-
- ax = floatx80ToFloatX( a );
- bx = floatx80ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXEq( ax, bx );
-
-}
-
-flag slow_floatx80_le_quiet( floatx80 a, floatx80 b )
-{
-
- return floatXLe( floatx80ToFloatX( a ), floatx80ToFloatX( b ) );
-
-}
-
-flag slow_floatx80_lt_quiet( floatx80 a, floatx80 b )
-{
-
- return floatXLt( floatx80ToFloatX( a ), floatx80ToFloatX( b ) );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-int32 slow_float128_to_int32( float128 a )
-{
-
- return floatXToInt32( float128ToFloatX( a ) );
-
-}
-
-int32 slow_float128_to_int32_round_to_zero( float128 a )
-{
- int8 savedRoundingMode;
- int32 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt32( float128ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-int64 slow_float128_to_int64( float128 a )
-{
-
- return floatXToInt64( float128ToFloatX( a ) );
-
-}
-
-int64 slow_float128_to_int64_round_to_zero( float128 a )
-{
- int8 savedRoundingMode;
- int64 z;
-
- savedRoundingMode = slow_float_rounding_mode;
- slow_float_rounding_mode = float_round_to_zero;
- z = floatXToInt64( float128ToFloatX( a ) );
- slow_float_rounding_mode = savedRoundingMode;
- return z;
-
-}
-
-float32 slow_float128_to_float32( float128 a )
-{
-
- return floatXToFloat32( float128ToFloatX( a ) );
-
-}
-
-float64 slow_float128_to_float64( float128 a )
-{
-
- return floatXToFloat64( float128ToFloatX( a ) );
-
-}
-
-#ifdef FLOATX80
-
-floatx80 slow_float128_to_floatx80( float128 a )
-{
-
- return floatXToFloatx80( float128ToFloatX( a ) );
-
-}
-
-#endif
-
-float128 slow_float128_round_to_int( float128 a )
-{
-
- return floatXToFloat128( floatXRoundToInt( float128ToFloatX( a ) ) );
-
-}
-
-float128 slow_float128_add( float128 a, float128 b )
-{
-
- return
- floatXToFloat128(
- floatXAdd( float128ToFloatX( a ), float128ToFloatX( b ) ) );
-
-}
-
-float128 slow_float128_sub( float128 a, float128 b )
-{
-
- b.high ^= LIT64( 0x8000000000000000 );
- return
- floatXToFloat128(
- floatXAdd( float128ToFloatX( a ), float128ToFloatX( b ) ) );
-
-}
-
-float128 slow_float128_mul( float128 a, float128 b )
-{
-
- return
- floatXToFloat128(
- floatXMul( float128ToFloatX( a ), float128ToFloatX( b ) ) );
-
-}
-
-float128 slow_float128_div( float128 a, float128 b )
-{
-
- return
- floatXToFloat128(
- floatXDiv( float128ToFloatX( a ), float128ToFloatX( b ) ) );
-
-}
-
-float128 slow_float128_rem( float128 a, float128 b )
-{
-
- return
- floatXToFloat128(
- floatXRem( float128ToFloatX( a ), float128ToFloatX( b ) ) );
-
-}
-
-float128 slow_float128_sqrt( float128 a )
-{
-
- return floatXToFloat128( floatXSqrt( float128ToFloatX( a ) ) );
-
-}
-
-flag slow_float128_eq( float128 a, float128 b )
-{
-
- return floatXEq( float128ToFloatX( a ), float128ToFloatX( b ) );
-
-}
-
-flag slow_float128_le( float128 a, float128 b )
-{
- floatX ax, bx;
-
- ax = float128ToFloatX( a );
- bx = float128ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLe( ax, bx );
-
-}
-
-flag slow_float128_lt( float128 a, float128 b )
-{
- floatX ax, bx;
-
- ax = float128ToFloatX( a );
- bx = float128ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXLt( ax, bx );
-
-}
-
-flag slow_float128_eq_signaling( float128 a, float128 b )
-{
- floatX ax, bx;
-
- ax = float128ToFloatX( a );
- bx = float128ToFloatX( b );
- if ( ax.isNaN || bx.isNaN ) {
- slow_float_exception_flags |= float_flag_invalid;
- }
- return floatXEq( ax, bx );
-
-}
-
-flag slow_float128_le_quiet( float128 a, float128 b )
-{
-
- return floatXLe( float128ToFloatX( a ), float128ToFloatX( b ) );
-
-}
-
-flag slow_float128_lt_quiet( float128 a, float128 b )
-{
-
- return floatXLt( float128ToFloatX( a ), float128ToFloatX( b ) );
-
-}
-
-#endif
-
diff --git a/tools/test/testfloat/slowfloat.c b/tools/test/testfloat/slowfloat.c
deleted file mode 100644
index ea69f82908ec..000000000000
--- a/tools/test/testfloat/slowfloat.c
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include "milieu.h"
-#include "softfloat.h"
-#include "slowfloat.h"
-
-#ifdef BITS64
-#include "slowfloat-64.c"
-#else
-#include "slowfloat-32.c"
-#endif
-
diff --git a/tools/test/testfloat/slowfloat.h b/tools/test/testfloat/slowfloat.h
deleted file mode 100644
index 45c6c6be00a1..000000000000
--- a/tools/test/testfloat/slowfloat.h
+++ /dev/null
@@ -1,167 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-extern int8 slow_float_rounding_mode;
-extern int8 slow_float_exception_flags;
-extern int8 slow_float_detect_tininess;
-#ifdef FLOATX80
-extern int8 slow_floatx80_rounding_precision;
-#endif
-
-float32 slow_int32_to_float32( int32 );
-float64 slow_int32_to_float64( int32 );
-#ifdef FLOATX80
-floatx80 slow_int32_to_floatx80( int32 );
-#endif
-#ifdef FLOAT128
-float128 slow_int32_to_float128( int32 );
-#endif
-#ifdef BITS64
-float32 slow_int64_to_float32( int64 );
-float64 slow_int64_to_float64( int64 );
-#ifdef FLOATX80
-floatx80 slow_int64_to_floatx80( int64 );
-#endif
-#ifdef FLOAT128
-float128 slow_int64_to_float128( int64 );
-#endif
-#endif
-
-int32 slow_float32_to_int32( float32 );
-int32 slow_float32_to_int32_round_to_zero( float32 );
-#ifdef BITS64
-int64 slow_float32_to_int64( float32 );
-int64 slow_float32_to_int64_round_to_zero( float32 );
-#endif
-float64 slow_float32_to_float64( float32 );
-#ifdef FLOATX80
-floatx80 slow_float32_to_floatx80( float32 );
-#endif
-#ifdef FLOAT128
-float128 slow_float32_to_float128( float32 );
-#endif
-
-float32 slow_float32_round_to_int( float32 );
-float32 slow_float32_add( float32, float32 );
-float32 slow_float32_sub( float32, float32 );
-float32 slow_float32_mul( float32, float32 );
-float32 slow_float32_div( float32, float32 );
-float32 slow_float32_rem( float32, float32 );
-float32 slow_float32_sqrt( float32 );
-flag slow_float32_eq( float32, float32 );
-flag slow_float32_le( float32, float32 );
-flag slow_float32_lt( float32, float32 );
-flag slow_float32_eq_signaling( float32, float32 );
-flag slow_float32_le_quiet( float32, float32 );
-flag slow_float32_lt_quiet( float32, float32 );
-
-int32 slow_float64_to_int32( float64 );
-int32 slow_float64_to_int32_round_to_zero( float64 );
-#ifdef BITS64
-int64 slow_float64_to_int64( float64 );
-int64 slow_float64_to_int64_round_to_zero( float64 );
-#endif
-float32 slow_float64_to_float32( float64 );
-#ifdef FLOATX80
-floatx80 slow_float64_to_floatx80( float64 );
-#endif
-#ifdef FLOAT128
-float128 slow_float64_to_float128( float64 );
-#endif
-
-float64 slow_float64_round_to_int( float64 );
-float64 slow_float64_add( float64, float64 );
-float64 slow_float64_sub( float64, float64 );
-float64 slow_float64_mul( float64, float64 );
-float64 slow_float64_div( float64, float64 );
-float64 slow_float64_rem( float64, float64 );
-float64 slow_float64_sqrt( float64 );
-flag slow_float64_eq( float64, float64 );
-flag slow_float64_le( float64, float64 );
-flag slow_float64_lt( float64, float64 );
-flag slow_float64_eq_signaling( float64, float64 );
-flag slow_float64_le_quiet( float64, float64 );
-flag slow_float64_lt_quiet( float64, float64 );
-
-#ifdef FLOATX80
-
-int32 slow_floatx80_to_int32( floatx80 );
-int32 slow_floatx80_to_int32_round_to_zero( floatx80 );
-#ifdef BITS64
-int64 slow_floatx80_to_int64( floatx80 );
-int64 slow_floatx80_to_int64_round_to_zero( floatx80 );
-#endif
-float32 slow_floatx80_to_float32( floatx80 );
-float64 slow_floatx80_to_float64( floatx80 );
-#ifdef FLOAT128
-float128 slow_floatx80_to_float128( floatx80 );
-#endif
-
-floatx80 slow_floatx80_round_to_int( floatx80 );
-floatx80 slow_floatx80_add( floatx80, floatx80 );
-floatx80 slow_floatx80_sub( floatx80, floatx80 );
-floatx80 slow_floatx80_mul( floatx80, floatx80 );
-floatx80 slow_floatx80_div( floatx80, floatx80 );
-floatx80 slow_floatx80_rem( floatx80, floatx80 );
-floatx80 slow_floatx80_sqrt( floatx80 );
-flag slow_floatx80_eq( floatx80, floatx80 );
-flag slow_floatx80_le( floatx80, floatx80 );
-flag slow_floatx80_lt( floatx80, floatx80 );
-flag slow_floatx80_eq_signaling( floatx80, floatx80 );
-flag slow_floatx80_le_quiet( floatx80, floatx80 );
-flag slow_floatx80_lt_quiet( floatx80, floatx80 );
-
-#endif
-
-#ifdef FLOAT128
-
-int32 slow_float128_to_int32( float128 );
-int32 slow_float128_to_int32_round_to_zero( float128 );
-#ifdef BITS64
-int64 slow_float128_to_int64( float128 );
-int64 slow_float128_to_int64_round_to_zero( float128 );
-#endif
-float32 slow_float128_to_float32( float128 );
-float64 slow_float128_to_float64( float128 );
-#ifdef FLOATX80
-floatx80 slow_float128_to_floatx80( float128 );
-#endif
-
-float128 slow_float128_round_to_int( float128 );
-float128 slow_float128_add( float128, float128 );
-float128 slow_float128_sub( float128, float128 );
-float128 slow_float128_mul( float128, float128 );
-float128 slow_float128_div( float128, float128 );
-float128 slow_float128_rem( float128, float128 );
-float128 slow_float128_sqrt( float128 );
-flag slow_float128_eq( float128, float128 );
-flag slow_float128_le( float128, float128 );
-flag slow_float128_lt( float128, float128 );
-flag slow_float128_eq_signaling( float128, float128 );
-flag slow_float128_le_quiet( float128, float128 );
-flag slow_float128_lt_quiet( float128, float128 );
-
-#endif
-
diff --git a/tools/test/testfloat/systemBugs.txt b/tools/test/testfloat/systemBugs.txt
deleted file mode 100644
index ec95894a2849..000000000000
--- a/tools/test/testfloat/systemBugs.txt
+++ /dev/null
@@ -1,323 +0,0 @@
-
-Known Floating-point Bugs Detected by TestFloat
-
-John R. Hauser
-1997 December 15
-
-
--------------------------------------------------------------------------------
-Introduction
-
-Several popular systems have bugs that TestFloat is very likely to run
-across. The ones I know of are documented here. First off, TestFloat finds
-no errors in the following processors/machines:
-
- AMD 486 DX4's
- Sun UltraSPARC 1's and 2's
-
-On the other hand, bugs are found in these processors/machines:
-
- Older Intel Pentiums (with the divide bug)
- Intel Pentium Pros
- Sun SPARCstation 1's and IPX's
- Sun SPARCstation 10's
- HP Precision Architecture processors, with HP-UX prior to version 10.10
-
-For some reason, most of the bugs found involve conversions from floating-
-point to integer formats.
-
-The bugs are shown as actual TestFloat error lines, along with a brief
-explanation. The error lines given are not necessarily exhaustive and were
-not necessarily output in the order shown.
-
-This document does not pretend to be an authoritative bug listing for all
-commercial processors. The vast majority of processors are absent from this
-list because I have never run TestFloat on such machines and I thus have no
-knowledge of what bugs TestFloat might find in them.
-
-The latest version of this file can be found at the Web page `http://
-http.cs.berkeley.edu/~jhauser/arithmetic/testfloat.html'.
-
-
--------------------------------------------------------------------------------
-Older Intel Pentiums (with the divide bug)
-
-The following conversion problems are found on Pentiums that also suffer
-from the infamous floating-point divide bug. These bugs have been fixed on
-newer Pentiums. (TestFloat does not find the divide bug.)
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-floatx80_to_int32
-
--- A few small fractions are treated as though they were zero.
-
- Errors found in floatx80_to_int32, rounding nearest_even:
- 3FFB.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- 3FFC.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- 3FFC.C000000000000000 soft: 00000000 ....x syst: 00000000 .....
- BFFB.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- BFFC.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- Errors found in floatx80_to_int32, rounding to_zero:
- 3FFB.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- 3FFC.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- 3FFC.C000000000000000 soft: 00000000 ....x syst: 00000000 .....
- BFFB.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- BFFC.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- BFFC.C000000000000000 soft: 00000000 ....x syst: 00000000 .....
- Errors found in floatx80_to_int32, rounding down:
- 3FFB.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- 3FFC.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- 3FFC.C000000000000000 soft: 00000000 ....x syst: 00000000 .....
- BFFB.8000000000000000 soft: FFFFFFFF ....x syst: 00000000 .....
- BFFC.8000000000000000 soft: FFFFFFFF ....x syst: 00000000 .....
- BFFC.C000000000000000 soft: FFFFFFFF ....x syst: 00000000 .....
- Errors found in floatx80_to_int32, rounding up:
- 3FFB.8000000000000000 soft: 00000001 ....x syst: 00000000 .....
- 3FFC.8000000000000000 soft: 00000001 ....x syst: 00000000 .....
- 3FFC.C000000000000000 soft: 00000001 ....x syst: 00000000 .....
- BFFB.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
- BFFC.8000000000000000 soft: 00000000 ....x syst: 00000000 .....
-
- 3FFB.8000000000000000 is the fraction 1/16; 3FFC.8000000000000000 is 1/8;
- and 3FFC.C000000000000000 is 3/16. Both positive and negative inputs are
- affected.
-
--- Some (all?) positive floating-point values between 2^32 - 1/2
- (401E.FFFFFFFF00000000) and 2^32 (401F.0000000000000000) are rounded to
- zero when the rounding mode is nearest/even or up.
-
- Errors found in floatx80_to_int32, rounding nearest_even:
- 401E.FFFFFFFF80000000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFC00001FE soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFF8000000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFEC00000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFF002000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFC00000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFE00000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFFD7FFE soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFFFFFFE soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFFFFFFF soft: 7FFFFFFF v.... syst: 00000000 ....x
- Errors found in floatx80_to_int32, rounding up:
- 401E.FFFFFFFF00800000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFF80000000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFEFFFC000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFC000000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFE7FFFFF soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFF00000 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFFE0800 soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFFF7FFB soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFFFFFFE soft: 7FFFFFFF v.... syst: 00000000 ....x
- 401E.FFFFFFFFFFFFFFFF soft: 7FFFFFFF v.... syst: 00000000 ....x
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Intel Pentium Pros
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-floatx80_to_int32
-
--- The inexact flag is sometimes raised instead of the invalid flag for
- floating-point inputs under -(2^32) (C01F.0000000000000000). This bug is
- sporadic. It appears to be deterministic but dependent on the sequence
- of operations executed.
-
- Errors found in floatx80_to_int32, rounding nearest_even:
- C01F.C000000000000002 soft: 80000000 v.... syst: 80000000 ....x
- C021.F00000000000003F soft: 80000000 v.... syst: 80000000 ....x
- Errors found in floatx80_to_int32, rounding to_zero:
- C021.F00000000000003F soft: 80000000 v.... syst: 80000000 ....x
- Errors found in floatx80_to_int32, rounding up:
- C01F.C000000000000007 soft: 80000000 v.... syst: 80000000 ....x
- C01F.C000000000001000 soft: 80000000 v.... syst: 80000000 ....x
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Sun SPARCstation 1's and IPX's
-
-Some older SPARCstations appear confused about whether underflow tininess is
-detected before or after rounding. For conversions from double precision
-to single precision, tininess is detected after rounding, while for all
-quadruple-precision operations it is detected before rounding. Single- and
-double-precision multipies go both ways:
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-float32_mul, float64_mul
-
--- For multiplies, underflow tininess is detected _before_ rounding if one
- of the inputs is subnormal, and _after_ rounding otherwise. If tininess
- is assumed to be detected before rounding, the following errors are
- generated:
-
- Errors found in float32_mul, rounding nearest_even:
- 001.000001 07E.7FFFFE soft: 001.000000 ...ux syst: 001.000000 ....x
- 001.000001 87E.7FFFFE soft: 801.000000 ...ux syst: 801.000000 ....x
- 001.000002 07E.7FFFFC soft: 001.000000 ...ux syst: 001.000000 ....x
- 001.000002 87E.7FFFFC soft: 801.000000 ...ux syst: 801.000000 ....x
- 001.000004 07E.7FFFF8 soft: 001.000000 ...ux syst: 001.000000 ....x
- Errors found in float32_mul, rounding down:
- 001.000001 87E.7FFFFE soft: 801.000000 ...ux syst: 801.000000 ....x
- 001.000002 87E.7FFFFC soft: 801.000000 ...ux syst: 801.000000 ....x
- 001.000004 87E.7FFFF8 soft: 801.000000 ...ux syst: 801.000000 ....x
- 001.000008 87E.7FFFF0 soft: 801.000000 ...ux syst: 801.000000 ....x
- 001.000010 87E.7FFFE0 soft: 801.000000 ...ux syst: 801.000000 ....x
- Errors found in float32_mul, rounding up:
- 001.000001 07E.7FFFFE soft: 001.000000 ...ux syst: 001.000000 ....x
- 001.000002 07E.7FFFFC soft: 001.000000 ...ux syst: 001.000000 ....x
- 001.000004 07E.7FFFF8 soft: 001.000000 ...ux syst: 001.000000 ....x
- 001.000008 07E.7FFFF0 soft: 001.000000 ...ux syst: 001.000000 ....x
- 001.000010 07E.7FFFE0 soft: 001.000000 ...ux syst: 001.000000 ....x
- Errors found in float64_mul, rounding nearest_even:
- 001.0000000000001 3FE.FFFFFFFFFFFFE
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
- 001.0000000000001 BFE.FFFFFFFFFFFFE
- soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x
- 001.0000000000002 3FE.FFFFFFFFFFFFC
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
- 001.0000000000002 BFE.FFFFFFFFFFFFC
- soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x
- 001.0000000000004 3FE.FFFFFFFFFFFF8
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
- Errors found in float64_mul, rounding down:
- 001.0000000000001 BFE.FFFFFFFFFFFFE
- soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x
- 001.0000000000002 BFE.FFFFFFFFFFFFC
- soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x
- 001.0000000000004 BFE.FFFFFFFFFFFF8
- soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x
- 001.0000000000008 BFE.FFFFFFFFFFFF0
- soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x
- 001.0000000000010 BFE.FFFFFFFFFFFE0
- soft: 801.0000000000000 ...ux syst: 801.0000000000000 ....x
- Errors found in float64_mul, rounding up:
- 001.0000000000001 3FE.FFFFFFFFFFFFE
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
- 001.0000000000002 3FE.FFFFFFFFFFFFC
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
- 001.0000000000004 3FE.FFFFFFFFFFFF8
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
- 001.0000000000008 3FE.FFFFFFFFFFFF0
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
- 001.0000000000010 3FE.FFFFFFFFFFFE0
- soft: 001.0000000000000 ...ux syst: 001.0000000000000 ....x
-
- If we assume tininess should be detected after rounding, we get the
- following errors:
-
- Errors found in float32_mul, rounding nearest_even:
- 000.7FFC00 07F.000400 soft: 001.000000 ....x syst: 001.000000 ...ux
- 000.7FFC00 87F.000400 soft: 801.000000 ....x syst: 801.000000 ...ux
- 000.7FFE00 07F.000200 soft: 001.000000 ....x syst: 001.000000 ...ux
- 000.7FFE00 87F.000200 soft: 801.000000 ....x syst: 801.000000 ...ux
- 000.7FFF00 07F.000100 soft: 001.000000 ....x syst: 001.000000 ...ux
- Errors found in float32_mul, rounding down:
- 000.7FFC00 87F.000400 soft: 801.000000 ....x syst: 801.000000 ...ux
- 000.7FFE00 87F.000200 soft: 801.000000 ....x syst: 801.000000 ...ux
- 000.7FFF00 87F.000100 soft: 801.000000 ....x syst: 801.000000 ...ux
- 000.7FFF80 87F.000080 soft: 801.000000 ....x syst: 801.000000 ...ux
- 000.7FFFC0 87F.000040 soft: 801.000000 ....x syst: 801.000000 ...ux
- Errors found in float32_mul, rounding up:
- 000.7FFC00 07F.000400 soft: 001.000000 ....x syst: 001.000000 ...ux
- 000.7FFE00 07F.000200 soft: 001.000000 ....x syst: 001.000000 ...ux
- 000.7FFF00 07F.000100 soft: 001.000000 ....x syst: 001.000000 ...ux
- 000.7FFF80 07F.000080 soft: 001.000000 ....x syst: 001.000000 ...ux
- 000.7FFFC0 07F.000040 soft: 001.000000 ....x syst: 001.000000 ...ux
- Errors found in float64_mul, rounding nearest_even:
- 000.FFFFFFE000000 3FF.0000002000000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
- 000.FFFFFFE000000 BFF.0000002000000
- soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux
- 000.FFFFFFF000000 3FF.0000001000000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
- 000.FFFFFFF000000 BFF.0000001000000
- soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux
- 000.FFFFFFF800000 3FF.0000000800000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
- Errors found in float64_mul, rounding down:
- 000.FFFFFFE000000 BFF.0000002000000
- soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux
- 000.FFFFFFF000000 BFF.0000001000000
- soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux
- 000.FFFFFFF800000 BFF.0000000800000
- soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux
- 000.FFFFFFFC00000 BFF.0000000400000
- soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux
- 000.FFFFFFFE00000 BFF.0000000200000
- soft: 801.0000000000000 ....x syst: 801.0000000000000 ...ux
- Errors found in float64_mul, rounding up:
- 000.FFFFFFE000000 3FF.0000002000000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
- 000.FFFFFFF000000 3FF.0000001000000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
- 000.FFFFFFF800000 3FF.0000000800000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
- 000.FFFFFFFC00000 3FF.0000000400000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
- 000.FFFFFFFE00000 3FF.0000000200000
- soft: 001.0000000000000 ....x syst: 001.0000000000000 ...ux
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Sun SPARCstation 10's
-
-Like other SPARCstations, some SPARCstation 10's are inconsistent regarding
-underflow tininess, detecting it after rounding for single- and double-
-precision operations and before rounding for quadruple-precision operations.
-The following bug has also been observed.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-float32_to_int32_round_to_zero, float64_to_int32_round_to_zero
-
--- Single- and double-precision NaNs are converted to the integer zero.
- (The invalid exception flag is raised correctly.)
-
- Errors found in float32_to_int32_round_to_zero:
- 8FF.5D36AC soft: 7FFFFFFF v.... syst: 00000000 v....
- 0FF.7FFFC0 soft: 7FFFFFFF v.... syst: 00000000 v....
- 8FF.7C0000 soft: 7FFFFFFF v.... syst: 00000000 v....
- 0FF.2AB7ED soft: 7FFFFFFF v.... syst: 00000000 v....
- 0FF.03FFFF soft: 7FFFFFFF v.... syst: 00000000 v....
- Errors found in float64_to_int32_round_to_zero:
- 7FF.45AD84DB2524A soft: 7FFFFFFF v.... syst: 00000000 v....
- 7FF.CFEE063EE0512 soft: 7FFFFFFF v.... syst: 00000000 v....
- 7FF.89FF03AB7DBA2 soft: 7FFFFFFF v.... syst: 00000000 v....
- 7FF.FFFFFFFFFF800 soft: 7FFFFFFF v.... syst: 00000000 v....
- FFF.68A6410E91BF6 soft: 7FFFFFFF v.... syst: 00000000 v....
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-HP Precision Architecture processors, with HP-UX prior to version 10.10
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-float32_to_int32_round_to_zero, float64_to_int32_round_to_zero
-
--- When the floating-point value is too large, the overflow and inexact
- exception flags are raised instead of the invalid flag.
-
- Errors found in float32_to_int32_round_to_zero:
- 89E.000007 soft: 80000000 v.... syst: 80000000 ..o.x
- 0A2.000020 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x
- 8FA.7C0000 soft: 80000000 v.... syst: 80000000 ..o.x
- Errors found in float64_to_int32_round_to_zero:
- 7FD.0448700002F1C soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x
- DAA.F000000000000 soft: 80000000 v.... syst: 80000000 ..o.x
- 41E.063DA00005E65 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x
- 47E.FFFF800000000 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x
- 51F.0000000000004 soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x
- DDA.0000001FFFFFF soft: 80000000 v.... syst: 80000000 ..o.x
- D70.00000000003FF soft: 80000000 v.... syst: 80000000 ..o.x
- C7E.0000100000000 soft: 80000000 v.... syst: 80000000 ..o.x
- 47E.000000000007F soft: 7FFFFFFF v.... syst: 7FFFFFFF ..o.x
- D57.000000000FFFF soft: 80000000 v.... syst: 80000000 ..o.x
-
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
diff --git a/tools/test/testfloat/systflags.h b/tools/test/testfloat/systflags.h
deleted file mode 100644
index 23e6b2364720..000000000000
--- a/tools/test/testfloat/systflags.h
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Target-specific function for clearing the system's IEC/IEEE floating-point
-exception flags. The previous value of the flags is returned.
--------------------------------------------------------------------------------
-*/
-int8 syst_float_flags_clear( void );
-
diff --git a/tools/test/testfloat/systfloat.c b/tools/test/testfloat/systfloat.c
deleted file mode 100644
index 08548c4981e7..000000000000
--- a/tools/test/testfloat/systfloat.c
+++ /dev/null
@@ -1,553 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <math.h>
-#include "milieu.h"
-#include "softfloat.h"
-#include "systfloat.h"
-
-float32 syst_int32_to_float32( int32 a )
-{
- float32 z;
-
- *( (float *) &z ) = a;
- return z;
-
-}
-
-float64 syst_int32_to_float64( int32 a )
-{
- float64 z;
-
- *( (double *) &z ) = a;
- return z;
-
-}
-
-#if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
-
-floatx80 syst_int32_to_floatx80( int32 a )
-{
- floatx80 z;
-
- *( (long double *) &z ) = a;
- return z;
-
-}
-
-#endif
-
-#if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
-
-float128 syst_int32_to_float128( int32 a )
-{
- float128 z;
-
- *( (long double *) &z ) = a;
- return z;
-
-}
-
-#endif
-
-#ifdef BITS64
-
-float32 syst_int64_to_float32( int64 a )
-{
- float32 z;
-
- *( (float *) &z ) = a;
- return z;
-
-}
-
-float64 syst_int64_to_float64( int64 a )
-{
- float64 z;
-
- *( (double *) &z ) = a;
- return z;
-
-}
-
-#if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
-
-floatx80 syst_int64_to_floatx80( int64 a )
-{
- floatx80 z;
-
- *( (long double *) &z ) = a;
- return z;
-
-}
-
-#endif
-
-#if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
-
-float128 syst_int64_to_float128( int64 a )
-{
- float128 z;
-
- *( (long double *) &z ) = a;
- return z;
-
-}
-
-#endif
-
-#endif
-
-int32 syst_float32_to_int32_round_to_zero( float32 a )
-{
-
- return *( (float *) &a );
-
-}
-
-#ifdef BITS64
-
-int64 syst_float32_to_int64_round_to_zero( float32 a )
-{
-
- return *( (float *) &a );
-
-}
-
-#endif
-
-float64 syst_float32_to_float64( float32 a )
-{
- float64 z;
-
- *( (double *) &z ) = *( (float *) &a );
- return z;
-
-}
-
-#if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
-
-floatx80 syst_float32_to_floatx80( float32 a )
-{
- floatx80 z;
-
- *( (long double *) &z ) = *( (float *) &a );
- return z;
-
-}
-
-#endif
-
-#if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
-
-float128 syst_float32_to_float128( float32 a )
-{
- float128 z;
-
- *( (long double *) &z ) = *( (float *) &a );
- return z;
-
-}
-
-#endif
-
-float32 syst_float32_add( float32 a, float32 b )
-{
- float32 z;
-
- *( (float *) &z ) = *( (float *) &a ) + *( (float *) &b );
- return z;
-
-}
-
-float32 syst_float32_sub( float32 a, float32 b )
-{
- float32 z;
-
- *( (float *) &z ) = *( (float *) &a ) - *( (float *) &b );
- return z;
-
-}
-
-float32 syst_float32_mul( float32 a, float32 b )
-{
- float32 z;
-
- *( (float *) &z ) = *( (float *) &a ) * *( (float *) &b );
- return z;
-
-}
-
-float32 syst_float32_div( float32 a, float32 b )
-{
- float32 z;
-
- *( (float *) &z ) = *( (float *) &a ) / *( (float *) &b );
- return z;
-
-}
-
-flag syst_float32_eq( float32 a, float32 b )
-{
-
- return ( *( (float *) &a ) == *( (float *) &b ) );
-
-}
-
-flag syst_float32_le( float32 a, float32 b )
-{
-
- return ( *( (float *) &a ) <= *( (float *) &b ) );
-
-}
-
-flag syst_float32_lt( float32 a, float32 b )
-{
-
- return ( *( (float *) &a ) < *( (float *) &b ) );
-
-}
-
-int32 syst_float64_to_int32_round_to_zero( float64 a )
-{
-
- return *( (double *) &a );
-
-}
-
-#ifdef BITS64
-
-int64 syst_float64_to_int64_round_to_zero( float64 a )
-{
-
- return *( (double *) &a );
-
-}
-
-#endif
-
-float32 syst_float64_to_float32( float64 a )
-{
- float32 z;
-
- *( (float *) &z ) = *( (double *) &a );
- return z;
-
-}
-
-#if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
-
-floatx80 syst_float64_to_floatx80( float64 a )
-{
- floatx80 z;
-
- *( (long double *) &z ) = *( (double *) &a );
- return z;
-
-}
-
-#endif
-
-#if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
-
-float128 syst_float64_to_float128( float64 a )
-{
- float128 z;
-
- *( (long double *) &z ) = *( (double *) &a );
- return z;
-
-}
-
-#endif
-
-float64 syst_float64_add( float64 a, float64 b )
-{
- float64 z;
-
- *( (double *) &z ) = *( (double *) &a ) + *( (double *) &b );
- return z;
-
-}
-
-float64 syst_float64_sub( float64 a, float64 b )
-{
- float64 z;
-
- *( (double *) &z ) = *( (double *) &a ) - *( (double *) &b );
- return z;
-
-}
-
-float64 syst_float64_mul( float64 a, float64 b )
-{
- float64 z;
-
- *( (double *) &z ) = *( (double *) &a ) * *( (double *) &b );
- return z;
-
-}
-
-float64 syst_float64_div( float64 a, float64 b )
-{
- float64 z;
-
- *( (double *) &z ) = *( (double *) &a ) / *( (double *) &b );
- return z;
-
-}
-
-float64 syst_float64_sqrt( float64 a )
-{
- float64 z;
-
- *( (double *) &z ) = sqrt( *( (double *) &a ) );
- return z;
-
-}
-
-flag syst_float64_eq( float64 a, float64 b )
-{
-
- return ( *( (double *) &a ) == *( (double *) &b ) );
-
-}
-
-flag syst_float64_le( float64 a, float64 b )
-{
-
- return ( *( (double *) &a ) <= *( (double *) &b ) );
-
-}
-
-flag syst_float64_lt( float64 a, float64 b )
-{
-
- return ( *( (double *) &a ) < *( (double *) &b ) );
-
-}
-
-#if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
-
-int32 syst_floatx80_to_int32_round_to_zero( floatx80 a )
-{
-
- return *( (long double *) &a );
-
-}
-
-#ifdef BITS64
-
-int64 syst_floatx80_to_int64_round_to_zero( floatx80 a )
-{
-
- return *( (long double *) &a );
-
-}
-
-#endif
-
-float32 syst_floatx80_to_float32( floatx80 a )
-{
- float32 z;
-
- *( (float *) &z ) = *( (long double *) &a );
- return z;
-
-}
-
-float64 syst_floatx80_to_float64( floatx80 a )
-{
- float64 z;
-
- *( (double *) &z ) = *( (long double *) &a );
- return z;
-
-}
-
-floatx80 syst_floatx80_add( floatx80 a, floatx80 b )
-{
- floatx80 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) + *( (long double *) &b );
- return z;
-
-}
-
-floatx80 syst_floatx80_sub( floatx80 a, floatx80 b )
-{
- floatx80 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) - *( (long double *) &b );
- return z;
-
-}
-
-floatx80 syst_floatx80_mul( floatx80 a, floatx80 b )
-{
- floatx80 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) * *( (long double *) &b );
- return z;
-
-}
-
-floatx80 syst_floatx80_div( floatx80 a, floatx80 b )
-{
- floatx80 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) / *( (long double *) &b );
- return z;
-
-}
-
-flag syst_floatx80_eq( floatx80 a, floatx80 b )
-{
-
- return ( *( (long double *) &a ) == *( (long double *) &b ) );
-
-}
-
-flag syst_floatx80_le( floatx80 a, floatx80 b )
-{
-
- return ( *( (long double *) &a ) <= *( (long double *) &b ) );
-
-}
-
-flag syst_floatx80_lt( floatx80 a, floatx80 b )
-{
-
- return ( *( (long double *) &a ) < *( (long double *) &b ) );
-
-}
-
-#endif
-
-#if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
-
-int32 syst_float128_to_int32_round_to_zero( float128 a )
-{
-
- return *( (long double *) &a );
-
-}
-
-#ifdef BITS64
-
-int64 syst_float128_to_int64_round_to_zero( float128 a )
-{
-
- return *( (long double *) &a );
-
-}
-
-#endif
-
-float32 syst_float128_to_float32( float128 a )
-{
- float32 z;
-
- *( (float *) &z ) = *( (long double *) &a );
- return z;
-
-}
-
-float64 syst_float128_to_float64( float128 a )
-{
- float64 z;
-
- *( (double *) &z ) = *( (long double *) &a );
- return z;
-
-}
-
-float128 syst_float128_add( float128 a, float128 b )
-{
- float128 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) + *( (long double *) &b );
- return z;
-
-}
-
-float128 syst_float128_sub( float128 a, float128 b )
-{
- float128 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) - *( (long double *) &b );
- return z;
-
-}
-
-float128 syst_float128_mul( float128 a, float128 b )
-{
- float128 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) * *( (long double *) &b );
- return z;
-
-}
-
-float128 syst_float128_div( float128 a, float128 b )
-{
- float128 z;
-
- *( (long double *) &z ) =
- *( (long double *) &a ) / *( (long double *) &b );
- return z;
-
-}
-
-flag syst_float128_eq( float128 a, float128 b )
-{
-
- return ( *( (long double *) &a ) == *( (long double *) &b ) );
-
-}
-
-flag syst_float128_le( float128 a, float128 b )
-{
-
- return ( *( (long double *) &a ) <= *( (long double *) &b ) );
-
-}
-
-flag syst_float128_lt( float128 a, float128 b )
-{
-
- return ( *( (long double *) &a ) < *( (long double *) &b ) );
-
-}
-
-#endif
-
diff --git a/tools/test/testfloat/systmodes.h b/tools/test/testfloat/systmodes.h
deleted file mode 100644
index b2befa4ad59b..000000000000
--- a/tools/test/testfloat/systmodes.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-/*
--------------------------------------------------------------------------------
-Target-specific function for setting the system's IEC/IEEE floating-point
-rounding mode. Other system modes are also initialized as necessary (for
-example, exception trapping may be disabled).
--------------------------------------------------------------------------------
-*/
-void syst_float_set_rounding_mode( int8 );
-
-/*
--------------------------------------------------------------------------------
-Target-specific function for setting the IEC/IEEE rounding precision of
-subsequent extended double-precision operations performed by the system.
--------------------------------------------------------------------------------
-*/
-void syst_float_set_rounding_precision( int8 );
-
diff --git a/tools/test/testfloat/testCases.c b/tools/test/testfloat/testCases.c
deleted file mode 100644
index e2d8f4215fe1..000000000000
--- a/tools/test/testfloat/testCases.c
+++ /dev/null
@@ -1,3682 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include "milieu.h"
-#include "fail.h"
-#include "random.h"
-#include "softfloat.h"
-#include "testCases.h"
-
-typedef struct {
- int16 expNum, term1Num, term2Num;
- flag done;
-} sequenceT;
-
-enum {
- int32NumP1 = 124
-};
-
-static const uint32 int32P1[ int32NumP1 ] = {
- 0x00000000,
- 0x00000001,
- 0x00000002,
- 0x00000004,
- 0x00000008,
- 0x00000010,
- 0x00000020,
- 0x00000040,
- 0x00000080,
- 0x00000100,
- 0x00000200,
- 0x00000400,
- 0x00000800,
- 0x00001000,
- 0x00002000,
- 0x00004000,
- 0x00008000,
- 0x00010000,
- 0x00020000,
- 0x00040000,
- 0x00080000,
- 0x00100000,
- 0x00200000,
- 0x00400000,
- 0x00800000,
- 0x01000000,
- 0x02000000,
- 0x04000000,
- 0x08000000,
- 0x10000000,
- 0x20000000,
- 0x40000000,
- 0x80000000,
- 0xC0000000,
- 0xE0000000,
- 0xF0000000,
- 0xF8000000,
- 0xFC000000,
- 0xFE000000,
- 0xFF000000,
- 0xFF800000,
- 0xFFC00000,
- 0xFFE00000,
- 0xFFF00000,
- 0xFFF80000,
- 0xFFFC0000,
- 0xFFFE0000,
- 0xFFFF0000,
- 0xFFFF8000,
- 0xFFFFC000,
- 0xFFFFE000,
- 0xFFFFF000,
- 0xFFFFF800,
- 0xFFFFFC00,
- 0xFFFFFE00,
- 0xFFFFFF00,
- 0xFFFFFF80,
- 0xFFFFFFC0,
- 0xFFFFFFE0,
- 0xFFFFFFF0,
- 0xFFFFFFF8,
- 0xFFFFFFFC,
- 0xFFFFFFFE,
- 0xFFFFFFFF,
- 0xFFFFFFFD,
- 0xFFFFFFFB,
- 0xFFFFFFF7,
- 0xFFFFFFEF,
- 0xFFFFFFDF,
- 0xFFFFFFBF,
- 0xFFFFFF7F,
- 0xFFFFFEFF,
- 0xFFFFFDFF,
- 0xFFFFFBFF,
- 0xFFFFF7FF,
- 0xFFFFEFFF,
- 0xFFFFDFFF,
- 0xFFFFBFFF,
- 0xFFFF7FFF,
- 0xFFFEFFFF,
- 0xFFFDFFFF,
- 0xFFFBFFFF,
- 0xFFF7FFFF,
- 0xFFEFFFFF,
- 0xFFDFFFFF,
- 0xFFBFFFFF,
- 0xFF7FFFFF,
- 0xFEFFFFFF,
- 0xFDFFFFFF,
- 0xFBFFFFFF,
- 0xF7FFFFFF,
- 0xEFFFFFFF,
- 0xDFFFFFFF,
- 0xBFFFFFFF,
- 0x7FFFFFFF,
- 0x3FFFFFFF,
- 0x1FFFFFFF,
- 0x0FFFFFFF,
- 0x07FFFFFF,
- 0x03FFFFFF,
- 0x01FFFFFF,
- 0x00FFFFFF,
- 0x007FFFFF,
- 0x003FFFFF,
- 0x001FFFFF,
- 0x000FFFFF,
- 0x0007FFFF,
- 0x0003FFFF,
- 0x0001FFFF,
- 0x0000FFFF,
- 0x00007FFF,
- 0x00003FFF,
- 0x00001FFF,
- 0x00000FFF,
- 0x000007FF,
- 0x000003FF,
- 0x000001FF,
- 0x000000FF,
- 0x0000007F,
- 0x0000003F,
- 0x0000001F,
- 0x0000000F,
- 0x00000007,
- 0x00000003
-};
-
-static int32 int32NextP1( sequenceT *sequencePtr )
-{
- uint8 termNum;
- int32 z;
-
- termNum = sequencePtr->term1Num;
- z = int32P1[ termNum ];
- ++termNum;
- if ( int32NumP1 <= termNum ) {
- termNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->term1Num = termNum;
- return (sbits32) z;
-
-}
-
-static const int32 int32NumP2 = ( int32NumP1 * int32NumP1 + int32NumP1 ) / 2;
-
-static int32 int32NextP2( sequenceT *sequencePtr )
-{
- uint8 term1Num, term2Num;
- int32 z;
-
- term2Num = sequencePtr->term2Num;
- term1Num = sequencePtr->term1Num;
- z = int32P1[ term1Num ] + int32P1[ term2Num ];
- ++term2Num;
- if ( int32NumP1 <= term2Num ) {
- ++term1Num;
- if ( int32NumP1 <= term1Num ) {
- term1Num = 0;
- sequencePtr->done = TRUE;
- }
- term2Num = term1Num;
- sequencePtr->term1Num = term1Num;
- }
- sequencePtr->term2Num = term2Num;
- return (sbits32) z;
-
-}
-
-static int32 int32RandomP3( void )
-{
-
- return
- (sbits32) (
- int32P1[ randomUint8() % int32NumP1 ]
- + int32P1[ randomUint8() % int32NumP1 ]
- + int32P1[ randomUint8() % int32NumP1 ]
- );
-
-}
-
-enum {
- int32NumPInfWeightMasks = 29
-};
-
-static const uint32 int32PInfWeightMasks[ int32NumPInfWeightMasks ] = {
- 0xFFFFFFFF,
- 0x7FFFFFFF,
- 0x3FFFFFFF,
- 0x1FFFFFFF,
- 0x0FFFFFFF,
- 0x07FFFFFF,
- 0x03FFFFFF,
- 0x01FFFFFF,
- 0x00FFFFFF,
- 0x007FFFFF,
- 0x003FFFFF,
- 0x001FFFFF,
- 0x000FFFFF,
- 0x0007FFFF,
- 0x0003FFFF,
- 0x0001FFFF,
- 0x0000FFFF,
- 0x00007FFF,
- 0x00003FFF,
- 0x00001FFF,
- 0x00000FFF,
- 0x000007FF,
- 0x000003FF,
- 0x000001FF,
- 0x000000FF,
- 0x0000007F,
- 0x0000003F,
- 0x0000001F,
- 0x0000000F
-};
-
-static const uint32 int32PInfWeightOffsets[ int32NumPInfWeightMasks ] = {
- 0x00000000,
- 0xC0000000,
- 0xE0000000,
- 0xF0000000,
- 0xF8000000,
- 0xFC000000,
- 0xFE000000,
- 0xFF000000,
- 0xFF800000,
- 0xFFC00000,
- 0xFFE00000,
- 0xFFF00000,
- 0xFFF80000,
- 0xFFFC0000,
- 0xFFFE0000,
- 0xFFFF0000,
- 0xFFFF8000,
- 0xFFFFC000,
- 0xFFFFE000,
- 0xFFFFF000,
- 0xFFFFF800,
- 0xFFFFFC00,
- 0xFFFFFE00,
- 0xFFFFFF00,
- 0xFFFFFF80,
- 0xFFFFFFC0,
- 0xFFFFFFE0,
- 0xFFFFFFF0,
- 0xFFFFFFF8
-};
-
-static int32 int32RandomPInf( void )
-{
- int8 weightMaskNum;
-
- weightMaskNum = randomUint8() % int32NumPInfWeightMasks;
- return
- (sbits32) (
- ( randomUint32() & int32PInfWeightMasks[ weightMaskNum ] )
- + int32PInfWeightOffsets[ weightMaskNum ]
- );
-
-}
-
-#ifdef BITS64
-
-enum {
- int64NumP1 = 252
-};
-
-static const uint64 int64P1[ int64NumP1 ] = {
- LIT64( 0x0000000000000000 ),
- LIT64( 0x0000000000000001 ),
- LIT64( 0x0000000000000002 ),
- LIT64( 0x0000000000000004 ),
- LIT64( 0x0000000000000008 ),
- LIT64( 0x0000000000000010 ),
- LIT64( 0x0000000000000020 ),
- LIT64( 0x0000000000000040 ),
- LIT64( 0x0000000000000080 ),
- LIT64( 0x0000000000000100 ),
- LIT64( 0x0000000000000200 ),
- LIT64( 0x0000000000000400 ),
- LIT64( 0x0000000000000800 ),
- LIT64( 0x0000000000001000 ),
- LIT64( 0x0000000000002000 ),
- LIT64( 0x0000000000004000 ),
- LIT64( 0x0000000000008000 ),
- LIT64( 0x0000000000010000 ),
- LIT64( 0x0000000000020000 ),
- LIT64( 0x0000000000040000 ),
- LIT64( 0x0000000000080000 ),
- LIT64( 0x0000000000100000 ),
- LIT64( 0x0000000000200000 ),
- LIT64( 0x0000000000400000 ),
- LIT64( 0x0000000000800000 ),
- LIT64( 0x0000000001000000 ),
- LIT64( 0x0000000002000000 ),
- LIT64( 0x0000000004000000 ),
- LIT64( 0x0000000008000000 ),
- LIT64( 0x0000000010000000 ),
- LIT64( 0x0000000020000000 ),
- LIT64( 0x0000000040000000 ),
- LIT64( 0x0000000080000000 ),
- LIT64( 0x0000000100000000 ),
- LIT64( 0x0000000200000000 ),
- LIT64( 0x0000000400000000 ),
- LIT64( 0x0000000800000000 ),
- LIT64( 0x0000001000000000 ),
- LIT64( 0x0000002000000000 ),
- LIT64( 0x0000004000000000 ),
- LIT64( 0x0000008000000000 ),
- LIT64( 0x0000010000000000 ),
- LIT64( 0x0000020000000000 ),
- LIT64( 0x0000040000000000 ),
- LIT64( 0x0000080000000000 ),
- LIT64( 0x0000100000000000 ),
- LIT64( 0x0000200000000000 ),
- LIT64( 0x0000400000000000 ),
- LIT64( 0x0000800000000000 ),
- LIT64( 0x0001000000000000 ),
- LIT64( 0x0002000000000000 ),
- LIT64( 0x0004000000000000 ),
- LIT64( 0x0008000000000000 ),
- LIT64( 0x0010000000000000 ),
- LIT64( 0x0020000000000000 ),
- LIT64( 0x0040000000000000 ),
- LIT64( 0x0080000000000000 ),
- LIT64( 0x0100000000000000 ),
- LIT64( 0x0200000000000000 ),
- LIT64( 0x0400000000000000 ),
- LIT64( 0x0800000000000000 ),
- LIT64( 0x1000000000000000 ),
- LIT64( 0x2000000000000000 ),
- LIT64( 0x4000000000000000 ),
- LIT64( 0x8000000000000000 ),
- LIT64( 0xC000000000000000 ),
- LIT64( 0xE000000000000000 ),
- LIT64( 0xF000000000000000 ),
- LIT64( 0xF800000000000000 ),
- LIT64( 0xFC00000000000000 ),
- LIT64( 0xFE00000000000000 ),
- LIT64( 0xFF00000000000000 ),
- LIT64( 0xFF80000000000000 ),
- LIT64( 0xFFC0000000000000 ),
- LIT64( 0xFFE0000000000000 ),
- LIT64( 0xFFF0000000000000 ),
- LIT64( 0xFFF8000000000000 ),
- LIT64( 0xFFFC000000000000 ),
- LIT64( 0xFFFE000000000000 ),
- LIT64( 0xFFFF000000000000 ),
- LIT64( 0xFFFF800000000000 ),
- LIT64( 0xFFFFC00000000000 ),
- LIT64( 0xFFFFE00000000000 ),
- LIT64( 0xFFFFF00000000000 ),
- LIT64( 0xFFFFF80000000000 ),
- LIT64( 0xFFFFFC0000000000 ),
- LIT64( 0xFFFFFE0000000000 ),
- LIT64( 0xFFFFFF0000000000 ),
- LIT64( 0xFFFFFF8000000000 ),
- LIT64( 0xFFFFFFC000000000 ),
- LIT64( 0xFFFFFFE000000000 ),
- LIT64( 0xFFFFFFF000000000 ),
- LIT64( 0xFFFFFFF800000000 ),
- LIT64( 0xFFFFFFFC00000000 ),
- LIT64( 0xFFFFFFFE00000000 ),
- LIT64( 0xFFFFFFFF00000000 ),
- LIT64( 0xFFFFFFFF80000000 ),
- LIT64( 0xFFFFFFFFC0000000 ),
- LIT64( 0xFFFFFFFFE0000000 ),
- LIT64( 0xFFFFFFFFF0000000 ),
- LIT64( 0xFFFFFFFFF8000000 ),
- LIT64( 0xFFFFFFFFFC000000 ),
- LIT64( 0xFFFFFFFFFE000000 ),
- LIT64( 0xFFFFFFFFFF000000 ),
- LIT64( 0xFFFFFFFFFF800000 ),
- LIT64( 0xFFFFFFFFFFC00000 ),
- LIT64( 0xFFFFFFFFFFE00000 ),
- LIT64( 0xFFFFFFFFFFF00000 ),
- LIT64( 0xFFFFFFFFFFF80000 ),
- LIT64( 0xFFFFFFFFFFFC0000 ),
- LIT64( 0xFFFFFFFFFFFE0000 ),
- LIT64( 0xFFFFFFFFFFFF0000 ),
- LIT64( 0xFFFFFFFFFFFF8000 ),
- LIT64( 0xFFFFFFFFFFFFC000 ),
- LIT64( 0xFFFFFFFFFFFFE000 ),
- LIT64( 0xFFFFFFFFFFFFF000 ),
- LIT64( 0xFFFFFFFFFFFFF800 ),
- LIT64( 0xFFFFFFFFFFFFFC00 ),
- LIT64( 0xFFFFFFFFFFFFFE00 ),
- LIT64( 0xFFFFFFFFFFFFFF00 ),
- LIT64( 0xFFFFFFFFFFFFFF80 ),
- LIT64( 0xFFFFFFFFFFFFFFC0 ),
- LIT64( 0xFFFFFFFFFFFFFFE0 ),
- LIT64( 0xFFFFFFFFFFFFFFF0 ),
- LIT64( 0xFFFFFFFFFFFFFFF8 ),
- LIT64( 0xFFFFFFFFFFFFFFFC ),
- LIT64( 0xFFFFFFFFFFFFFFFE ),
- LIT64( 0xFFFFFFFFFFFFFFFF ),
- LIT64( 0xFFFFFFFFFFFFFFFD ),
- LIT64( 0xFFFFFFFFFFFFFFFB ),
- LIT64( 0xFFFFFFFFFFFFFFF7 ),
- LIT64( 0xFFFFFFFFFFFFFFEF ),
- LIT64( 0xFFFFFFFFFFFFFFDF ),
- LIT64( 0xFFFFFFFFFFFFFFBF ),
- LIT64( 0xFFFFFFFFFFFFFF7F ),
- LIT64( 0xFFFFFFFFFFFFFEFF ),
- LIT64( 0xFFFFFFFFFFFFFDFF ),
- LIT64( 0xFFFFFFFFFFFFFBFF ),
- LIT64( 0xFFFFFFFFFFFFF7FF ),
- LIT64( 0xFFFFFFFFFFFFEFFF ),
- LIT64( 0xFFFFFFFFFFFFDFFF ),
- LIT64( 0xFFFFFFFFFFFFBFFF ),
- LIT64( 0xFFFFFFFFFFFF7FFF ),
- LIT64( 0xFFFFFFFFFFFEFFFF ),
- LIT64( 0xFFFFFFFFFFFDFFFF ),
- LIT64( 0xFFFFFFFFFFFBFFFF ),
- LIT64( 0xFFFFFFFFFFF7FFFF ),
- LIT64( 0xFFFFFFFFFFEFFFFF ),
- LIT64( 0xFFFFFFFFFFDFFFFF ),
- LIT64( 0xFFFFFFFFFFBFFFFF ),
- LIT64( 0xFFFFFFFFFF7FFFFF ),
- LIT64( 0xFFFFFFFFFEFFFFFF ),
- LIT64( 0xFFFFFFFFFDFFFFFF ),
- LIT64( 0xFFFFFFFFFBFFFFFF ),
- LIT64( 0xFFFFFFFFF7FFFFFF ),
- LIT64( 0xFFFFFFFFEFFFFFFF ),
- LIT64( 0xFFFFFFFFDFFFFFFF ),
- LIT64( 0xFFFFFFFFBFFFFFFF ),
- LIT64( 0xFFFFFFFF7FFFFFFF ),
- LIT64( 0xFFFFFFFEFFFFFFFF ),
- LIT64( 0xFFFFFFFDFFFFFFFF ),
- LIT64( 0xFFFFFFFBFFFFFFFF ),
- LIT64( 0xFFFFFFF7FFFFFFFF ),
- LIT64( 0xFFFFFFEFFFFFFFFF ),
- LIT64( 0xFFFFFFDFFFFFFFFF ),
- LIT64( 0xFFFFFFBFFFFFFFFF ),
- LIT64( 0xFFFFFF7FFFFFFFFF ),
- LIT64( 0xFFFFFEFFFFFFFFFF ),
- LIT64( 0xFFFFFDFFFFFFFFFF ),
- LIT64( 0xFFFFFBFFFFFFFFFF ),
- LIT64( 0xFFFFF7FFFFFFFFFF ),
- LIT64( 0xFFFFEFFFFFFFFFFF ),
- LIT64( 0xFFFFDFFFFFFFFFFF ),
- LIT64( 0xFFFFBFFFFFFFFFFF ),
- LIT64( 0xFFFF7FFFFFFFFFFF ),
- LIT64( 0xFFFEFFFFFFFFFFFF ),
- LIT64( 0xFFFDFFFFFFFFFFFF ),
- LIT64( 0xFFFBFFFFFFFFFFFF ),
- LIT64( 0xFFF7FFFFFFFFFFFF ),
- LIT64( 0xFFEFFFFFFFFFFFFF ),
- LIT64( 0xFFDFFFFFFFFFFFFF ),
- LIT64( 0xFFBFFFFFFFFFFFFF ),
- LIT64( 0xFF7FFFFFFFFFFFFF ),
- LIT64( 0xFEFFFFFFFFFFFFFF ),
- LIT64( 0xFDFFFFFFFFFFFFFF ),
- LIT64( 0xFBFFFFFFFFFFFFFF ),
- LIT64( 0xF7FFFFFFFFFFFFFF ),
- LIT64( 0xEFFFFFFFFFFFFFFF ),
- LIT64( 0xDFFFFFFFFFFFFFFF ),
- LIT64( 0xBFFFFFFFFFFFFFFF ),
- LIT64( 0x7FFFFFFFFFFFFFFF ),
- LIT64( 0x3FFFFFFFFFFFFFFF ),
- LIT64( 0x1FFFFFFFFFFFFFFF ),
- LIT64( 0x0FFFFFFFFFFFFFFF ),
- LIT64( 0x07FFFFFFFFFFFFFF ),
- LIT64( 0x03FFFFFFFFFFFFFF ),
- LIT64( 0x01FFFFFFFFFFFFFF ),
- LIT64( 0x00FFFFFFFFFFFFFF ),
- LIT64( 0x007FFFFFFFFFFFFF ),
- LIT64( 0x003FFFFFFFFFFFFF ),
- LIT64( 0x001FFFFFFFFFFFFF ),
- LIT64( 0x000FFFFFFFFFFFFF ),
- LIT64( 0x0007FFFFFFFFFFFF ),
- LIT64( 0x0003FFFFFFFFFFFF ),
- LIT64( 0x0001FFFFFFFFFFFF ),
- LIT64( 0x0000FFFFFFFFFFFF ),
- LIT64( 0x00007FFFFFFFFFFF ),
- LIT64( 0x00003FFFFFFFFFFF ),
- LIT64( 0x00001FFFFFFFFFFF ),
- LIT64( 0x00000FFFFFFFFFFF ),
- LIT64( 0x000007FFFFFFFFFF ),
- LIT64( 0x000003FFFFFFFFFF ),
- LIT64( 0x000001FFFFFFFFFF ),
- LIT64( 0x000000FFFFFFFFFF ),
- LIT64( 0x0000007FFFFFFFFF ),
- LIT64( 0x0000003FFFFFFFFF ),
- LIT64( 0x0000001FFFFFFFFF ),
- LIT64( 0x0000000FFFFFFFFF ),
- LIT64( 0x00000007FFFFFFFF ),
- LIT64( 0x00000003FFFFFFFF ),
- LIT64( 0x00000001FFFFFFFF ),
- LIT64( 0x00000000FFFFFFFF ),
- LIT64( 0x000000007FFFFFFF ),
- LIT64( 0x000000003FFFFFFF ),
- LIT64( 0x000000001FFFFFFF ),
- LIT64( 0x000000000FFFFFFF ),
- LIT64( 0x0000000007FFFFFF ),
- LIT64( 0x0000000003FFFFFF ),
- LIT64( 0x0000000001FFFFFF ),
- LIT64( 0x0000000000FFFFFF ),
- LIT64( 0x00000000007FFFFF ),
- LIT64( 0x00000000003FFFFF ),
- LIT64( 0x00000000001FFFFF ),
- LIT64( 0x00000000000FFFFF ),
- LIT64( 0x000000000007FFFF ),
- LIT64( 0x000000000003FFFF ),
- LIT64( 0x000000000001FFFF ),
- LIT64( 0x000000000000FFFF ),
- LIT64( 0x0000000000007FFF ),
- LIT64( 0x0000000000003FFF ),
- LIT64( 0x0000000000001FFF ),
- LIT64( 0x0000000000000FFF ),
- LIT64( 0x00000000000007FF ),
- LIT64( 0x00000000000003FF ),
- LIT64( 0x00000000000001FF ),
- LIT64( 0x00000000000000FF ),
- LIT64( 0x000000000000007F ),
- LIT64( 0x000000000000003F ),
- LIT64( 0x000000000000001F ),
- LIT64( 0x000000000000000F ),
- LIT64( 0x0000000000000007 ),
- LIT64( 0x0000000000000003 )
-};
-
-static int64 int64NextP1( sequenceT *sequencePtr )
-{
- uint8 termNum;
- int64 z;
-
- termNum = sequencePtr->term1Num;
- z = int64P1[ termNum ];
- ++termNum;
- if ( int64NumP1 <= termNum ) {
- termNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->term1Num = termNum;
- return (sbits64) z;
-
-}
-
-static const int64 int64NumP2 = ( int64NumP1 * int64NumP1 + int64NumP1 ) / 2;
-
-static int64 int64NextP2( sequenceT *sequencePtr )
-{
- uint8 term1Num, term2Num;
- int64 z;
-
- term2Num = sequencePtr->term2Num;
- term1Num = sequencePtr->term1Num;
- z = int64P1[ term1Num ] + int64P1[ term2Num ];
- ++term2Num;
- if ( int64NumP1 <= term2Num ) {
- ++term1Num;
- if ( int64NumP1 <= term1Num ) {
- term1Num = 0;
- sequencePtr->done = TRUE;
- }
- term2Num = term1Num;
- sequencePtr->term1Num = term1Num;
- }
- sequencePtr->term2Num = term2Num;
- return (sbits64) z;
-
-}
-
-static int64 int64RandomP3( void )
-{
-
- return
- (sbits64) (
- int64P1[ randomUint8() % int64NumP1 ]
- + int64P1[ randomUint8() % int64NumP1 ]
- + int64P1[ randomUint8() % int64NumP1 ]
- );
-
-}
-
-enum {
- int64NumPInfWeightMasks = 61
-};
-
-static const uint64 int64PInfWeightMasks[ int64NumPInfWeightMasks ] = {
- LIT64( 0xFFFFFFFFFFFFFFFF ),
- LIT64( 0x7FFFFFFFFFFFFFFF ),
- LIT64( 0x3FFFFFFFFFFFFFFF ),
- LIT64( 0x1FFFFFFFFFFFFFFF ),
- LIT64( 0x0FFFFFFFFFFFFFFF ),
- LIT64( 0x07FFFFFFFFFFFFFF ),
- LIT64( 0x03FFFFFFFFFFFFFF ),
- LIT64( 0x01FFFFFFFFFFFFFF ),
- LIT64( 0x00FFFFFFFFFFFFFF ),
- LIT64( 0x007FFFFFFFFFFFFF ),
- LIT64( 0x003FFFFFFFFFFFFF ),
- LIT64( 0x001FFFFFFFFFFFFF ),
- LIT64( 0x000FFFFFFFFFFFFF ),
- LIT64( 0x0007FFFFFFFFFFFF ),
- LIT64( 0x0003FFFFFFFFFFFF ),
- LIT64( 0x0001FFFFFFFFFFFF ),
- LIT64( 0x0000FFFFFFFFFFFF ),
- LIT64( 0x00007FFFFFFFFFFF ),
- LIT64( 0x00003FFFFFFFFFFF ),
- LIT64( 0x00001FFFFFFFFFFF ),
- LIT64( 0x00000FFFFFFFFFFF ),
- LIT64( 0x000007FFFFFFFFFF ),
- LIT64( 0x000003FFFFFFFFFF ),
- LIT64( 0x000001FFFFFFFFFF ),
- LIT64( 0x000000FFFFFFFFFF ),
- LIT64( 0x0000007FFFFFFFFF ),
- LIT64( 0x0000003FFFFFFFFF ),
- LIT64( 0x0000001FFFFFFFFF ),
- LIT64( 0x0000000FFFFFFFFF ),
- LIT64( 0x00000007FFFFFFFF ),
- LIT64( 0x00000003FFFFFFFF ),
- LIT64( 0x00000001FFFFFFFF ),
- LIT64( 0x00000000FFFFFFFF ),
- LIT64( 0x000000007FFFFFFF ),
- LIT64( 0x000000003FFFFFFF ),
- LIT64( 0x000000001FFFFFFF ),
- LIT64( 0x000000000FFFFFFF ),
- LIT64( 0x0000000007FFFFFF ),
- LIT64( 0x0000000003FFFFFF ),
- LIT64( 0x0000000001FFFFFF ),
- LIT64( 0x0000000000FFFFFF ),
- LIT64( 0x00000000007FFFFF ),
- LIT64( 0x00000000003FFFFF ),
- LIT64( 0x00000000001FFFFF ),
- LIT64( 0x00000000000FFFFF ),
- LIT64( 0x000000000007FFFF ),
- LIT64( 0x000000000003FFFF ),
- LIT64( 0x000000000001FFFF ),
- LIT64( 0x000000000000FFFF ),
- LIT64( 0x0000000000007FFF ),
- LIT64( 0x0000000000003FFF ),
- LIT64( 0x0000000000001FFF ),
- LIT64( 0x0000000000000FFF ),
- LIT64( 0x00000000000007FF ),
- LIT64( 0x00000000000003FF ),
- LIT64( 0x00000000000001FF ),
- LIT64( 0x00000000000000FF ),
- LIT64( 0x000000000000007F ),
- LIT64( 0x000000000000003F ),
- LIT64( 0x000000000000001F ),
- LIT64( 0x000000000000000F )
-};
-
-static const uint64 int64PInfWeightOffsets[ int64NumPInfWeightMasks ] = {
- LIT64( 0x0000000000000000 ),
- LIT64( 0xC000000000000000 ),
- LIT64( 0xE000000000000000 ),
- LIT64( 0xF000000000000000 ),
- LIT64( 0xF800000000000000 ),
- LIT64( 0xFC00000000000000 ),
- LIT64( 0xFE00000000000000 ),
- LIT64( 0xFF00000000000000 ),
- LIT64( 0xFF80000000000000 ),
- LIT64( 0xFFC0000000000000 ),
- LIT64( 0xFFE0000000000000 ),
- LIT64( 0xFFF0000000000000 ),
- LIT64( 0xFFF8000000000000 ),
- LIT64( 0xFFFC000000000000 ),
- LIT64( 0xFFFE000000000000 ),
- LIT64( 0xFFFF000000000000 ),
- LIT64( 0xFFFF800000000000 ),
- LIT64( 0xFFFFC00000000000 ),
- LIT64( 0xFFFFE00000000000 ),
- LIT64( 0xFFFFF00000000000 ),
- LIT64( 0xFFFFF80000000000 ),
- LIT64( 0xFFFFFC0000000000 ),
- LIT64( 0xFFFFFE0000000000 ),
- LIT64( 0xFFFFFF0000000000 ),
- LIT64( 0xFFFFFF8000000000 ),
- LIT64( 0xFFFFFFC000000000 ),
- LIT64( 0xFFFFFFE000000000 ),
- LIT64( 0xFFFFFFF000000000 ),
- LIT64( 0xFFFFFFF800000000 ),
- LIT64( 0xFFFFFFFC00000000 ),
- LIT64( 0xFFFFFFFE00000000 ),
- LIT64( 0xFFFFFFFF00000000 ),
- LIT64( 0xFFFFFFFF80000000 ),
- LIT64( 0xFFFFFFFFC0000000 ),
- LIT64( 0xFFFFFFFFE0000000 ),
- LIT64( 0xFFFFFFFFF0000000 ),
- LIT64( 0xFFFFFFFFF8000000 ),
- LIT64( 0xFFFFFFFFFC000000 ),
- LIT64( 0xFFFFFFFFFE000000 ),
- LIT64( 0xFFFFFFFFFF000000 ),
- LIT64( 0xFFFFFFFFFF800000 ),
- LIT64( 0xFFFFFFFFFFC00000 ),
- LIT64( 0xFFFFFFFFFFE00000 ),
- LIT64( 0xFFFFFFFFFFF00000 ),
- LIT64( 0xFFFFFFFFFFF80000 ),
- LIT64( 0xFFFFFFFFFFFC0000 ),
- LIT64( 0xFFFFFFFFFFFE0000 ),
- LIT64( 0xFFFFFFFFFFFF0000 ),
- LIT64( 0xFFFFFFFFFFFF8000 ),
- LIT64( 0xFFFFFFFFFFFFC000 ),
- LIT64( 0xFFFFFFFFFFFFE000 ),
- LIT64( 0xFFFFFFFFFFFFF000 ),
- LIT64( 0xFFFFFFFFFFFFF800 ),
- LIT64( 0xFFFFFFFFFFFFFC00 ),
- LIT64( 0xFFFFFFFFFFFFFE00 ),
- LIT64( 0xFFFFFFFFFFFFFF00 ),
- LIT64( 0xFFFFFFFFFFFFFF80 ),
- LIT64( 0xFFFFFFFFFFFFFFC0 ),
- LIT64( 0xFFFFFFFFFFFFFFE0 ),
- LIT64( 0xFFFFFFFFFFFFFFF0 ),
- LIT64( 0xFFFFFFFFFFFFFFF8 )
-};
-
-static int64 int64RandomPInf( void )
-{
- int8 weightMaskNum;
-
- weightMaskNum = randomUint8() % int64NumPInfWeightMasks;
- return
- (sbits64) (
- ( randomUint64() & int64PInfWeightMasks[ weightMaskNum ] )
- + int64PInfWeightOffsets[ weightMaskNum ]
- );
-
-}
-
-#endif
-
-enum {
- float32NumQIn = 22,
- float32NumQOut = 50,
- float32NumP1 = 4,
- float32NumP2 = 88
-};
-
-static const uint32 float32QIn[ float32NumQIn ] = {
- 0x00000000, /* positive, subnormal */
- 0x00800000, /* positive, -126 */
- 0x33800000, /* positive, -24 */
- 0x3E800000, /* positive, -2 */
- 0x3F000000, /* positive, -1 */
- 0x3F800000, /* positive, 0 */
- 0x40000000, /* positive, 1 */
- 0x40800000, /* positive, 2 */
- 0x4B800000, /* positive, 24 */
- 0x7F000000, /* positive, 127 */
- 0x7F800000, /* positive, infinity or NaN */
- 0x80000000, /* negative, subnormal */
- 0x80800000, /* negative, -126 */
- 0xB3800000, /* negative, -24 */
- 0xBE800000, /* negative, -2 */
- 0xBF000000, /* negative, -1 */
- 0xBF800000, /* negative, 0 */
- 0xC0000000, /* negative, 1 */
- 0xC0800000, /* negative, 2 */
- 0xCB800000, /* negative, 24 */
- 0xFE800000, /* negative, 126 */
- 0xFF800000 /* negative, infinity or NaN */
-};
-
-static const uint32 float32QOut[ float32NumQOut ] = {
- 0x00000000, /* positive, subnormal */
- 0x00800000, /* positive, -126 */
- 0x01000000, /* positive, -125 */
- 0x33800000, /* positive, -24 */
- 0x3D800000, /* positive, -4 */
- 0x3E000000, /* positive, -3 */
- 0x3E800000, /* positive, -2 */
- 0x3F000000, /* positive, -1 */
- 0x3F800000, /* positive, 0 */
- 0x40000000, /* positive, 1 */
- 0x40800000, /* positive, 2 */
- 0x41000000, /* positive, 3 */
- 0x41800000, /* positive, 4 */
- 0x4B800000, /* positive, 24 */
- 0x4E000000, /* positive, 29 */
- 0x4E800000, /* positive, 30 */
- 0x4F000000, /* positive, 31 */
- 0x4F800000, /* positive, 32 */
- 0x5E000000, /* positive, 61 */
- 0x5E800000, /* positive, 62 */
- 0x5F000000, /* positive, 63 */
- 0x5F800000, /* positive, 64 */
- 0x7E800000, /* positive, 126 */
- 0x7F000000, /* positive, 127 */
- 0x7F800000, /* positive, infinity or NaN */
- 0x80000000, /* negative, subnormal */
- 0x80800000, /* negative, -126 */
- 0x81000000, /* negative, -125 */
- 0xB3800000, /* negative, -24 */
- 0xBD800000, /* negative, -4 */
- 0xBE000000, /* negative, -3 */
- 0xBE800000, /* negative, -2 */
- 0xBF000000, /* negative, -1 */
- 0xBF800000, /* negative, 0 */
- 0xC0000000, /* negative, 1 */
- 0xC0800000, /* negative, 2 */
- 0xC1000000, /* negative, 3 */
- 0xC1800000, /* negative, 4 */
- 0xCB800000, /* negative, 24 */
- 0xCE000000, /* negative, 29 */
- 0xCE800000, /* negative, 30 */
- 0xCF000000, /* negative, 31 */
- 0xCF800000, /* negative, 32 */
- 0xDE000000, /* negative, 61 */
- 0xDE800000, /* negative, 62 */
- 0xDF000000, /* negative, 63 */
- 0xDF800000, /* negative, 64 */
- 0xFE800000, /* negative, 126 */
- 0xFF000000, /* negative, 127 */
- 0xFF800000 /* negative, infinity or NaN */
-};
-
-static const uint32 float32P1[ float32NumP1 ] = {
- 0x00000000,
- 0x00000001,
- 0x007FFFFF,
- 0x007FFFFE
-};
-
-static const uint32 float32P2[ float32NumP2 ] = {
- 0x00000000,
- 0x00000001,
- 0x00000002,
- 0x00000004,
- 0x00000008,
- 0x00000010,
- 0x00000020,
- 0x00000040,
- 0x00000080,
- 0x00000100,
- 0x00000200,
- 0x00000400,
- 0x00000800,
- 0x00001000,
- 0x00002000,
- 0x00004000,
- 0x00008000,
- 0x00010000,
- 0x00020000,
- 0x00040000,
- 0x00080000,
- 0x00100000,
- 0x00200000,
- 0x00400000,
- 0x00600000,
- 0x00700000,
- 0x00780000,
- 0x007C0000,
- 0x007E0000,
- 0x007F0000,
- 0x007F8000,
- 0x007FC000,
- 0x007FE000,
- 0x007FF000,
- 0x007FF800,
- 0x007FFC00,
- 0x007FFE00,
- 0x007FFF00,
- 0x007FFF80,
- 0x007FFFC0,
- 0x007FFFE0,
- 0x007FFFF0,
- 0x007FFFF8,
- 0x007FFFFC,
- 0x007FFFFE,
- 0x007FFFFF,
- 0x007FFFFD,
- 0x007FFFFB,
- 0x007FFFF7,
- 0x007FFFEF,
- 0x007FFFDF,
- 0x007FFFBF,
- 0x007FFF7F,
- 0x007FFEFF,
- 0x007FFDFF,
- 0x007FFBFF,
- 0x007FF7FF,
- 0x007FEFFF,
- 0x007FDFFF,
- 0x007FBFFF,
- 0x007F7FFF,
- 0x007EFFFF,
- 0x007DFFFF,
- 0x007BFFFF,
- 0x0077FFFF,
- 0x006FFFFF,
- 0x005FFFFF,
- 0x003FFFFF,
- 0x001FFFFF,
- 0x000FFFFF,
- 0x0007FFFF,
- 0x0003FFFF,
- 0x0001FFFF,
- 0x0000FFFF,
- 0x00007FFF,
- 0x00003FFF,
- 0x00001FFF,
- 0x00000FFF,
- 0x000007FF,
- 0x000003FF,
- 0x000001FF,
- 0x000000FF,
- 0x0000007F,
- 0x0000003F,
- 0x0000001F,
- 0x0000000F,
- 0x00000007,
- 0x00000003
-};
-
-static const uint32 float32NumQInP1 = float32NumQIn * float32NumP1;
-static const uint32 float32NumQOutP1 = float32NumQOut * float32NumP1;
-
-static float32 float32NextQInP1( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float32 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z = float32QIn[ expNum ] | float32P1[ sigNum ];
- ++sigNum;
- if ( float32NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float32NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float32 float32NextQOutP1( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float32 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z = float32QOut[ expNum ] | float32P1[ sigNum ];
- ++sigNum;
- if ( float32NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float32NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static const uint32 float32NumQInP2 = float32NumQIn * float32NumP2;
-static const uint32 float32NumQOutP2 = float32NumQOut * float32NumP2;
-
-static float32 float32NextQInP2( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float32 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z = float32QIn[ expNum ] | float32P2[ sigNum ];
- ++sigNum;
- if ( float32NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float32NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float32 float32NextQOutP2( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float32 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z = float32QOut[ expNum ] | float32P2[ sigNum ];
- ++sigNum;
- if ( float32NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float32NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float32 float32RandomQOutP3( void )
-{
-
- return
- float32QOut[ randomUint8() % float32NumQOut ]
- | ( ( float32P2[ randomUint8() % float32NumP2 ]
- + float32P2[ randomUint8() % float32NumP2 ] )
- & 0x007FFFFF );
-
-}
-
-static float32 float32RandomQOutPInf( void )
-{
-
- return
- float32QOut[ randomUint8() % float32NumQOut ]
- | ( randomUint32() & 0x007FFFFF );
-
-}
-
-enum {
- float32NumQInfWeightMasks = 7
-};
-
-static const uint32 float32QInfWeightMasks[ float32NumQInfWeightMasks ] = {
- 0x7F800000,
- 0x7F800000,
- 0x3F800000,
- 0x1F800000,
- 0x0F800000,
- 0x07800000,
- 0x03800000
-};
-
-static const uint32 float32QInfWeightOffsets[ float32NumQInfWeightMasks ] = {
- 0x00000000,
- 0x00000000,
- 0x20000000,
- 0x30000000,
- 0x38000000,
- 0x3C000000,
- 0x3E000000
-};
-
-static float32 float32RandomQInfP3( void )
-{
- int8 weightMaskNum;
-
- weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
- return
- ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
- | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
- & float32QInfWeightMasks[ weightMaskNum ] )
- + float32QInfWeightOffsets[ weightMaskNum ]
- )
- | ( ( float32P2[ randomUint8() % float32NumP2 ]
- + float32P2[ randomUint8() % float32NumP2 ] )
- & 0x007FFFFF );
-
-}
-
-static float32 float32RandomQInfPInf( void )
-{
- int8 weightMaskNum;
-
- weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
- return
- ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
- | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
- & float32QInfWeightMasks[ weightMaskNum ] )
- + float32QInfWeightOffsets[ weightMaskNum ]
- )
- | ( randomUint32() & 0x007FFFFF );
-
-}
-
-static float32 float32Random( void )
-{
-
- switch ( randomUint8() & 7 ) {
- case 0:
- case 1:
- case 2:
- return float32RandomQOutP3();
- case 3:
- return float32RandomQOutPInf();
- case 4:
- case 5:
- case 6:
- return float32RandomQInfP3();
- default:
- return float32RandomQInfPInf();
- }
-
-}
-
-#ifdef BITS64
-#define SETFLOAT64( z, zHigh, zLow ) z = ( ( (float64) zHigh )<<32 ) | zLow
-#else
-#define SETFLOAT64( z, zHigh, zLow ) z.low = zLow; z.high = zHigh
-#endif
-
-enum {
- float64NumQIn = 22,
- float64NumQOut = 64,
- float64NumP1 = 4,
- float64NumP2 = 204
-};
-
-static const uint32 float64QIn[ float64NumQIn ] = {
- 0x00000000, /* positive, subnormal */
- 0x00100000, /* positive, -1022 */
- 0x3CA00000, /* positive, -53 */
- 0x3FD00000, /* positive, -2 */
- 0x3FE00000, /* positive, -1 */
- 0x3FF00000, /* positive, 0 */
- 0x40000000, /* positive, 1 */
- 0x40100000, /* positive, 2 */
- 0x43400000, /* positive, 53 */
- 0x7FE00000, /* positive, 1023 */
- 0x7FF00000, /* positive, infinity or NaN */
- 0x80000000, /* negative, subnormal */
- 0x80100000, /* negative, -1022 */
- 0xBCA00000, /* negative, -53 */
- 0xBFD00000, /* negative, -2 */
- 0xBFE00000, /* negative, -1 */
- 0xBFF00000, /* negative, 0 */
- 0xC0000000, /* negative, 1 */
- 0xC0100000, /* negative, 2 */
- 0xC3400000, /* negative, 53 */
- 0xFFE00000, /* negative, 1023 */
- 0xFFF00000 /* negative, infinity or NaN */
-};
-
-static const uint32 float64QOut[ float64NumQOut ] = {
- 0x00000000, /* positive, subnormal */
- 0x00100000, /* positive, -1022 */
- 0x00200000, /* positive, -1021 */
- 0x37E00000, /* positive, -129 */
- 0x37F00000, /* positive, -128 */
- 0x38000000, /* positive, -127 */
- 0x38100000, /* positive, -126 */
- 0x3CA00000, /* positive, -53 */
- 0x3FB00000, /* positive, -4 */
- 0x3FC00000, /* positive, -3 */
- 0x3FD00000, /* positive, -2 */
- 0x3FE00000, /* positive, -1 */
- 0x3FF00000, /* positive, 0 */
- 0x40000000, /* positive, 1 */
- 0x40100000, /* positive, 2 */
- 0x40200000, /* positive, 3 */
- 0x40300000, /* positive, 4 */
- 0x41C00000, /* positive, 29 */
- 0x41D00000, /* positive, 30 */
- 0x41E00000, /* positive, 31 */
- 0x41F00000, /* positive, 32 */
- 0x43400000, /* positive, 53 */
- 0x43C00000, /* positive, 61 */
- 0x43D00000, /* positive, 62 */
- 0x43E00000, /* positive, 63 */
- 0x43F00000, /* positive, 64 */
- 0x47E00000, /* positive, 127 */
- 0x47F00000, /* positive, 128 */
- 0x48000000, /* positive, 129 */
- 0x7FD00000, /* positive, 1022 */
- 0x7FE00000, /* positive, 1023 */
- 0x7FF00000, /* positive, infinity or NaN */
- 0x80000000, /* negative, subnormal */
- 0x80100000, /* negative, -1022 */
- 0x80200000, /* negative, -1021 */
- 0xB7E00000, /* negative, -129 */
- 0xB7F00000, /* negative, -128 */
- 0xB8000000, /* negative, -127 */
- 0xB8100000, /* negative, -126 */
- 0xBCA00000, /* negative, -53 */
- 0xBFB00000, /* negative, -4 */
- 0xBFC00000, /* negative, -3 */
- 0xBFD00000, /* negative, -2 */
- 0xBFE00000, /* negative, -1 */
- 0xBFF00000, /* negative, 0 */
- 0xC0000000, /* negative, 1 */
- 0xC0100000, /* negative, 2 */
- 0xC0200000, /* negative, 3 */
- 0xC0300000, /* negative, 4 */
- 0xC1C00000, /* negative, 29 */
- 0xC1D00000, /* negative, 30 */
- 0xC1E00000, /* negative, 31 */
- 0xC1F00000, /* negative, 32 */
- 0xC3400000, /* negative, 53 */
- 0xC3C00000, /* negative, 61 */
- 0xC3D00000, /* negative, 62 */
- 0xC3E00000, /* negative, 63 */
- 0xC3F00000, /* negative, 64 */
- 0xC7E00000, /* negative, 127 */
- 0xC7F00000, /* negative, 128 */
- 0xC8000000, /* negative, 129 */
- 0xFFD00000, /* negative, 1022 */
- 0xFFE00000, /* negative, 1023 */
- 0xFFF00000 /* negative, infinity or NaN */
-};
-
-static const struct { bits32 high, low; } float64P1[ float64NumP1 ] = {
- { 0x00000000, 0x00000000 },
- { 0x00000000, 0x00000001 },
- { 0x000FFFFF, 0xFFFFFFFF },
- { 0x000FFFFF, 0xFFFFFFFE }
-};
-
-static const struct { bits32 high, low; } float64P2[ float64NumP2 ] = {
- { 0x00000000, 0x00000000 },
- { 0x00000000, 0x00000001 },
- { 0x00000000, 0x00000002 },
- { 0x00000000, 0x00000004 },
- { 0x00000000, 0x00000008 },
- { 0x00000000, 0x00000010 },
- { 0x00000000, 0x00000020 },
- { 0x00000000, 0x00000040 },
- { 0x00000000, 0x00000080 },
- { 0x00000000, 0x00000100 },
- { 0x00000000, 0x00000200 },
- { 0x00000000, 0x00000400 },
- { 0x00000000, 0x00000800 },
- { 0x00000000, 0x00001000 },
- { 0x00000000, 0x00002000 },
- { 0x00000000, 0x00004000 },
- { 0x00000000, 0x00008000 },
- { 0x00000000, 0x00010000 },
- { 0x00000000, 0x00020000 },
- { 0x00000000, 0x00040000 },
- { 0x00000000, 0x00080000 },
- { 0x00000000, 0x00100000 },
- { 0x00000000, 0x00200000 },
- { 0x00000000, 0x00400000 },
- { 0x00000000, 0x00800000 },
- { 0x00000000, 0x01000000 },
- { 0x00000000, 0x02000000 },
- { 0x00000000, 0x04000000 },
- { 0x00000000, 0x08000000 },
- { 0x00000000, 0x10000000 },
- { 0x00000000, 0x20000000 },
- { 0x00000000, 0x40000000 },
- { 0x00000000, 0x80000000 },
- { 0x00000001, 0x00000000 },
- { 0x00000002, 0x00000000 },
- { 0x00000004, 0x00000000 },
- { 0x00000008, 0x00000000 },
- { 0x00000010, 0x00000000 },
- { 0x00000020, 0x00000000 },
- { 0x00000040, 0x00000000 },
- { 0x00000080, 0x00000000 },
- { 0x00000100, 0x00000000 },
- { 0x00000200, 0x00000000 },
- { 0x00000400, 0x00000000 },
- { 0x00000800, 0x00000000 },
- { 0x00001000, 0x00000000 },
- { 0x00002000, 0x00000000 },
- { 0x00004000, 0x00000000 },
- { 0x00008000, 0x00000000 },
- { 0x00010000, 0x00000000 },
- { 0x00020000, 0x00000000 },
- { 0x00040000, 0x00000000 },
- { 0x00080000, 0x00000000 },
- { 0x000C0000, 0x00000000 },
- { 0x000E0000, 0x00000000 },
- { 0x000F0000, 0x00000000 },
- { 0x000F8000, 0x00000000 },
- { 0x000FC000, 0x00000000 },
- { 0x000FE000, 0x00000000 },
- { 0x000FF000, 0x00000000 },
- { 0x000FF800, 0x00000000 },
- { 0x000FFC00, 0x00000000 },
- { 0x000FFE00, 0x00000000 },
- { 0x000FFF00, 0x00000000 },
- { 0x000FFF80, 0x00000000 },
- { 0x000FFFC0, 0x00000000 },
- { 0x000FFFE0, 0x00000000 },
- { 0x000FFFF0, 0x00000000 },
- { 0x000FFFF8, 0x00000000 },
- { 0x000FFFFC, 0x00000000 },
- { 0x000FFFFE, 0x00000000 },
- { 0x000FFFFF, 0x00000000 },
- { 0x000FFFFF, 0x80000000 },
- { 0x000FFFFF, 0xC0000000 },
- { 0x000FFFFF, 0xE0000000 },
- { 0x000FFFFF, 0xF0000000 },
- { 0x000FFFFF, 0xF8000000 },
- { 0x000FFFFF, 0xFC000000 },
- { 0x000FFFFF, 0xFE000000 },
- { 0x000FFFFF, 0xFF000000 },
- { 0x000FFFFF, 0xFF800000 },
- { 0x000FFFFF, 0xFFC00000 },
- { 0x000FFFFF, 0xFFE00000 },
- { 0x000FFFFF, 0xFFF00000 },
- { 0x000FFFFF, 0xFFF80000 },
- { 0x000FFFFF, 0xFFFC0000 },
- { 0x000FFFFF, 0xFFFE0000 },
- { 0x000FFFFF, 0xFFFF0000 },
- { 0x000FFFFF, 0xFFFF8000 },
- { 0x000FFFFF, 0xFFFFC000 },
- { 0x000FFFFF, 0xFFFFE000 },
- { 0x000FFFFF, 0xFFFFF000 },
- { 0x000FFFFF, 0xFFFFF800 },
- { 0x000FFFFF, 0xFFFFFC00 },
- { 0x000FFFFF, 0xFFFFFE00 },
- { 0x000FFFFF, 0xFFFFFF00 },
- { 0x000FFFFF, 0xFFFFFF80 },
- { 0x000FFFFF, 0xFFFFFFC0 },
- { 0x000FFFFF, 0xFFFFFFE0 },
- { 0x000FFFFF, 0xFFFFFFF0 },
- { 0x000FFFFF, 0xFFFFFFF8 },
- { 0x000FFFFF, 0xFFFFFFFC },
- { 0x000FFFFF, 0xFFFFFFFE },
- { 0x000FFFFF, 0xFFFFFFFF },
- { 0x000FFFFF, 0xFFFFFFFD },
- { 0x000FFFFF, 0xFFFFFFFB },
- { 0x000FFFFF, 0xFFFFFFF7 },
- { 0x000FFFFF, 0xFFFFFFEF },
- { 0x000FFFFF, 0xFFFFFFDF },
- { 0x000FFFFF, 0xFFFFFFBF },
- { 0x000FFFFF, 0xFFFFFF7F },
- { 0x000FFFFF, 0xFFFFFEFF },
- { 0x000FFFFF, 0xFFFFFDFF },
- { 0x000FFFFF, 0xFFFFFBFF },
- { 0x000FFFFF, 0xFFFFF7FF },
- { 0x000FFFFF, 0xFFFFEFFF },
- { 0x000FFFFF, 0xFFFFDFFF },
- { 0x000FFFFF, 0xFFFFBFFF },
- { 0x000FFFFF, 0xFFFF7FFF },
- { 0x000FFFFF, 0xFFFEFFFF },
- { 0x000FFFFF, 0xFFFDFFFF },
- { 0x000FFFFF, 0xFFFBFFFF },
- { 0x000FFFFF, 0xFFF7FFFF },
- { 0x000FFFFF, 0xFFEFFFFF },
- { 0x000FFFFF, 0xFFDFFFFF },
- { 0x000FFFFF, 0xFFBFFFFF },
- { 0x000FFFFF, 0xFF7FFFFF },
- { 0x000FFFFF, 0xFEFFFFFF },
- { 0x000FFFFF, 0xFDFFFFFF },
- { 0x000FFFFF, 0xFBFFFFFF },
- { 0x000FFFFF, 0xF7FFFFFF },
- { 0x000FFFFF, 0xEFFFFFFF },
- { 0x000FFFFF, 0xDFFFFFFF },
- { 0x000FFFFF, 0xBFFFFFFF },
- { 0x000FFFFF, 0x7FFFFFFF },
- { 0x000FFFFE, 0xFFFFFFFF },
- { 0x000FFFFD, 0xFFFFFFFF },
- { 0x000FFFFB, 0xFFFFFFFF },
- { 0x000FFFF7, 0xFFFFFFFF },
- { 0x000FFFEF, 0xFFFFFFFF },
- { 0x000FFFDF, 0xFFFFFFFF },
- { 0x000FFFBF, 0xFFFFFFFF },
- { 0x000FFF7F, 0xFFFFFFFF },
- { 0x000FFEFF, 0xFFFFFFFF },
- { 0x000FFDFF, 0xFFFFFFFF },
- { 0x000FFBFF, 0xFFFFFFFF },
- { 0x000FF7FF, 0xFFFFFFFF },
- { 0x000FEFFF, 0xFFFFFFFF },
- { 0x000FDFFF, 0xFFFFFFFF },
- { 0x000FBFFF, 0xFFFFFFFF },
- { 0x000F7FFF, 0xFFFFFFFF },
- { 0x000EFFFF, 0xFFFFFFFF },
- { 0x000DFFFF, 0xFFFFFFFF },
- { 0x000BFFFF, 0xFFFFFFFF },
- { 0x0007FFFF, 0xFFFFFFFF },
- { 0x0003FFFF, 0xFFFFFFFF },
- { 0x0001FFFF, 0xFFFFFFFF },
- { 0x0000FFFF, 0xFFFFFFFF },
- { 0x00007FFF, 0xFFFFFFFF },
- { 0x00003FFF, 0xFFFFFFFF },
- { 0x00001FFF, 0xFFFFFFFF },
- { 0x00000FFF, 0xFFFFFFFF },
- { 0x000007FF, 0xFFFFFFFF },
- { 0x000003FF, 0xFFFFFFFF },
- { 0x000001FF, 0xFFFFFFFF },
- { 0x000000FF, 0xFFFFFFFF },
- { 0x0000007F, 0xFFFFFFFF },
- { 0x0000003F, 0xFFFFFFFF },
- { 0x0000001F, 0xFFFFFFFF },
- { 0x0000000F, 0xFFFFFFFF },
- { 0x00000007, 0xFFFFFFFF },
- { 0x00000003, 0xFFFFFFFF },
- { 0x00000001, 0xFFFFFFFF },
- { 0x00000000, 0xFFFFFFFF },
- { 0x00000000, 0x7FFFFFFF },
- { 0x00000000, 0x3FFFFFFF },
- { 0x00000000, 0x1FFFFFFF },
- { 0x00000000, 0x0FFFFFFF },
- { 0x00000000, 0x07FFFFFF },
- { 0x00000000, 0x03FFFFFF },
- { 0x00000000, 0x01FFFFFF },
- { 0x00000000, 0x00FFFFFF },
- { 0x00000000, 0x007FFFFF },
- { 0x00000000, 0x003FFFFF },
- { 0x00000000, 0x001FFFFF },
- { 0x00000000, 0x000FFFFF },
- { 0x00000000, 0x0007FFFF },
- { 0x00000000, 0x0003FFFF },
- { 0x00000000, 0x0001FFFF },
- { 0x00000000, 0x0000FFFF },
- { 0x00000000, 0x00007FFF },
- { 0x00000000, 0x00003FFF },
- { 0x00000000, 0x00001FFF },
- { 0x00000000, 0x00000FFF },
- { 0x00000000, 0x000007FF },
- { 0x00000000, 0x000003FF },
- { 0x00000000, 0x000001FF },
- { 0x00000000, 0x000000FF },
- { 0x00000000, 0x0000007F },
- { 0x00000000, 0x0000003F },
- { 0x00000000, 0x0000001F },
- { 0x00000000, 0x0000000F },
- { 0x00000000, 0x00000007 },
- { 0x00000000, 0x00000003 }
-};
-
-static const uint32 float64NumQInP1 = float64NumQIn * float64NumP1;
-static const uint32 float64NumQOutP1 = float64NumQOut * float64NumP1;
-
-static float64 float64NextQInP1( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float64 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- SETFLOAT64(
- z,
- float64QIn[ expNum ] | float64P1[ sigNum ].high,
- float64P1[ sigNum ].low
- );
- ++sigNum;
- if ( float64NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float64NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float64 float64NextQOutP1( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float64 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- SETFLOAT64(
- z,
- float64QOut[ expNum ] | float64P1[ sigNum ].high,
- float64P1[ sigNum ].low
- );
- ++sigNum;
- if ( float64NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float64NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static const uint32 float64NumQInP2 = float64NumQIn * float64NumP2;
-static const uint32 float64NumQOutP2 = float64NumQOut * float64NumP2;
-
-static float64 float64NextQInP2( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float64 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- SETFLOAT64(
- z,
- float64QIn[ expNum ] | float64P2[ sigNum ].high,
- float64P2[ sigNum ].low
- );
- ++sigNum;
- if ( float64NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float64NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float64 float64NextQOutP2( sequenceT *sequencePtr )
-{
- uint8 expNum, sigNum;
- float64 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- SETFLOAT64(
- z,
- float64QOut[ expNum ] | float64P2[ sigNum ].high,
- float64P2[ sigNum ].low
- );
- ++sigNum;
- if ( float64NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float64NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float64 float64RandomQOutP3( void )
-{
- int8 sigNum1, sigNum2;
- uint32 sig1Low, sig2Low, zLow;
- float64 z;
-
- sigNum1 = randomUint8() % float64NumP2;
- sigNum2 = randomUint8() % float64NumP2;
- sig1Low = float64P2[ sigNum1 ].low;
- sig2Low = float64P2[ sigNum2 ].low;
- zLow = sig1Low + sig2Low;
- SETFLOAT64(
- z,
- float64QOut[ randomUint8() % float64NumQOut ]
- | ( ( float64P2[ sigNum1 ].high
- + float64P2[ sigNum2 ].high
- + ( zLow < sig1Low )
- )
- & 0x000FFFFF
- ),
- zLow
- );
- return z;
-
-}
-
-static float64 float64RandomQOutPInf( void )
-{
- float64 z;
-
- SETFLOAT64(
- z,
- float64QOut[ randomUint8() % float64NumQOut ]
- | ( randomUint32() & 0x000FFFFF ),
- randomUint32()
- );
- return z;
-
-}
-
-enum {
- float64NumQInfWeightMasks = 10
-};
-
-static const uint32 float64QInfWeightMasks[ float64NumQInfWeightMasks ] = {
- 0x7FF00000,
- 0x7FF00000,
- 0x3FF00000,
- 0x1FF00000,
- 0x0FF00000,
- 0x07F00000,
- 0x03F00000,
- 0x01F00000,
- 0x00F00000,
- 0x00700000
-};
-
-static const uint32 float64QInfWeightOffsets[ float64NumQInfWeightMasks ] = {
- 0x00000000,
- 0x00000000,
- 0x20000000,
- 0x30000000,
- 0x38000000,
- 0x3C000000,
- 0x3E000000,
- 0x3F000000,
- 0x3F800000,
- 0x3FC00000
-};
-
-static float64 float64RandomQInfP3( void )
-{
- int8 sigNum1, sigNum2;
- uint32 sig1Low, sig2Low, zLow;
- int8 weightMaskNum;
- float64 z;
-
- sigNum1 = randomUint8() % float64NumP2;
- sigNum2 = randomUint8() % float64NumP2;
- sig1Low = float64P2[ sigNum1 ].low;
- sig2Low = float64P2[ sigNum2 ].low;
- zLow = sig1Low + sig2Low;
- weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
- SETFLOAT64(
- z,
- ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
- | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
- & float64QInfWeightMasks[ weightMaskNum ] )
- + float64QInfWeightOffsets[ weightMaskNum ]
- )
- | ( ( float64P2[ sigNum1 ].high
- + float64P2[ sigNum2 ].high
- + ( zLow < sig1Low )
- )
- & 0x000FFFFF
- ),
- zLow
- );
- return z;
-
-}
-
-static float64 float64RandomQInfPInf( void )
-{
- int8 weightMaskNum;
- float64 z;
-
- weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
- SETFLOAT64(
- z,
- ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
- | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
- & float64QInfWeightMasks[ weightMaskNum ] )
- + float64QInfWeightOffsets[ weightMaskNum ]
- )
- | ( randomUint32() & 0x000FFFFF ),
- randomUint32()
- );
- return z;
-
-}
-
-static float64 float64Random( void )
-{
-
- switch ( randomUint8() & 7 ) {
- case 0:
- case 1:
- case 2:
- return float64RandomQOutP3();
- case 3:
- return float64RandomQOutPInf();
- case 4:
- case 5:
- case 6:
- return float64RandomQInfP3();
- default:
- return float64RandomQInfPInf();
- }
-
-}
-
-#ifdef FLOATX80
-
-enum {
- floatx80NumQIn = 22,
- floatx80NumQOut = 76,
- floatx80NumP1 = 4,
- floatx80NumP2 = 248
-};
-
-static const uint16 floatx80QIn[ floatx80NumQIn ] = {
- 0x0000, /* positive, subnormal */
- 0x0001, /* positive, -16382 */
- 0x3FBF, /* positive, -64 */
- 0x3FFD, /* positive, -2 */
- 0x3FFE, /* positive, -1 */
- 0x3FFF, /* positive, 0 */
- 0x4000, /* positive, 1 */
- 0x4001, /* positive, 2 */
- 0x403F, /* positive, 64 */
- 0x7FFE, /* positive, 16383 */
- 0x7FFF, /* positive, infinity or NaN */
- 0x8000, /* negative, subnormal */
- 0x8001, /* negative, -16382 */
- 0xBFBF, /* negative, -64 */
- 0xBFFD, /* negative, -2 */
- 0xBFFE, /* negative, -1 */
- 0xBFFF, /* negative, 0 */
- 0xC000, /* negative, 1 */
- 0xC001, /* negative, 2 */
- 0xC03F, /* negative, 64 */
- 0xFFFE, /* negative, 16383 */
- 0xFFFF /* negative, infinity or NaN */
-};
-
-static const uint16 floatx80QOut[ floatx80NumQOut ] = {
- 0x0000, /* positive, subnormal */
- 0x0001, /* positive, -16382 */
- 0x0002, /* positive, -16381 */
- 0x3BFE, /* positive, -1025 */
- 0x3BFF, /* positive, -1024 */
- 0x3C00, /* positive, -1023 */
- 0x3C01, /* positive, -1022 */
- 0x3F7E, /* positive, -129 */
- 0x3F7F, /* positive, -128 */
- 0x3F80, /* positive, -127 */
- 0x3F81, /* positive, -126 */
- 0x3FBF, /* positive, -64 */
- 0x3FFB, /* positive, -4 */
- 0x3FFC, /* positive, -3 */
- 0x3FFD, /* positive, -2 */
- 0x3FFE, /* positive, -1 */
- 0x3FFF, /* positive, 0 */
- 0x4000, /* positive, 1 */
- 0x4001, /* positive, 2 */
- 0x4002, /* positive, 3 */
- 0x4003, /* positive, 4 */
- 0x401C, /* positive, 29 */
- 0x401D, /* positive, 30 */
- 0x401E, /* positive, 31 */
- 0x401F, /* positive, 32 */
- 0x403C, /* positive, 61 */
- 0x403D, /* positive, 62 */
- 0x403E, /* positive, 63 */
- 0x403F, /* positive, 64 */
- 0x407E, /* positive, 127 */
- 0x407F, /* positive, 128 */
- 0x4080, /* positive, 129 */
- 0x43FE, /* positive, 1023 */
- 0x43FF, /* positive, 1024 */
- 0x4400, /* positive, 1025 */
- 0x7FFD, /* positive, 16382 */
- 0x7FFE, /* positive, 16383 */
- 0x7FFF, /* positive, infinity or NaN */
- 0x8000, /* negative, subnormal */
- 0x8001, /* negative, -16382 */
- 0x8002, /* negative, -16381 */
- 0xBBFE, /* negative, -1025 */
- 0xBBFF, /* negative, -1024 */
- 0xBC00, /* negative, -1023 */
- 0xBC01, /* negative, -1022 */
- 0xBF7E, /* negative, -129 */
- 0xBF7F, /* negative, -128 */
- 0xBF80, /* negative, -127 */
- 0xBF81, /* negative, -126 */
- 0xBFBF, /* negative, -64 */
- 0xBFFB, /* negative, -4 */
- 0xBFFC, /* negative, -3 */
- 0xBFFD, /* negative, -2 */
- 0xBFFE, /* negative, -1 */
- 0xBFFF, /* negative, 0 */
- 0xC000, /* negative, 1 */
- 0xC001, /* negative, 2 */
- 0xC002, /* negative, 3 */
- 0xC003, /* negative, 4 */
- 0xC01C, /* negative, 29 */
- 0xC01D, /* negative, 30 */
- 0xC01E, /* negative, 31 */
- 0xC01F, /* negative, 32 */
- 0xC03C, /* negative, 61 */
- 0xC03D, /* negative, 62 */
- 0xC03E, /* negative, 63 */
- 0xC03F, /* negative, 64 */
- 0xC07E, /* negative, 127 */
- 0xC07F, /* negative, 128 */
- 0xC080, /* negative, 129 */
- 0xC3FE, /* negative, 1023 */
- 0xC3FF, /* negative, 1024 */
- 0xC400, /* negative, 1025 */
- 0xFFFD, /* negative, 16382 */
- 0xFFFE, /* negative, 16383 */
- 0xFFFF /* negative, infinity or NaN */
-};
-
-static const bits64 floatx80P1[ floatx80NumP1 ] = {
- LIT64( 0x0000000000000000 ),
- LIT64( 0x0000000000000001 ),
- LIT64( 0x7FFFFFFFFFFFFFFF ),
- LIT64( 0x7FFFFFFFFFFFFFFE )
-};
-
-static const bits64 floatx80P2[ floatx80NumP2 ] = {
- LIT64( 0x0000000000000000 ),
- LIT64( 0x0000000000000001 ),
- LIT64( 0x0000000000000002 ),
- LIT64( 0x0000000000000004 ),
- LIT64( 0x0000000000000008 ),
- LIT64( 0x0000000000000010 ),
- LIT64( 0x0000000000000020 ),
- LIT64( 0x0000000000000040 ),
- LIT64( 0x0000000000000080 ),
- LIT64( 0x0000000000000100 ),
- LIT64( 0x0000000000000200 ),
- LIT64( 0x0000000000000400 ),
- LIT64( 0x0000000000000800 ),
- LIT64( 0x0000000000001000 ),
- LIT64( 0x0000000000002000 ),
- LIT64( 0x0000000000004000 ),
- LIT64( 0x0000000000008000 ),
- LIT64( 0x0000000000010000 ),
- LIT64( 0x0000000000020000 ),
- LIT64( 0x0000000000040000 ),
- LIT64( 0x0000000000080000 ),
- LIT64( 0x0000000000100000 ),
- LIT64( 0x0000000000200000 ),
- LIT64( 0x0000000000400000 ),
- LIT64( 0x0000000000800000 ),
- LIT64( 0x0000000001000000 ),
- LIT64( 0x0000000002000000 ),
- LIT64( 0x0000000004000000 ),
- LIT64( 0x0000000008000000 ),
- LIT64( 0x0000000010000000 ),
- LIT64( 0x0000000020000000 ),
- LIT64( 0x0000000040000000 ),
- LIT64( 0x0000000080000000 ),
- LIT64( 0x0000000100000000 ),
- LIT64( 0x0000000200000000 ),
- LIT64( 0x0000000400000000 ),
- LIT64( 0x0000000800000000 ),
- LIT64( 0x0000001000000000 ),
- LIT64( 0x0000002000000000 ),
- LIT64( 0x0000004000000000 ),
- LIT64( 0x0000008000000000 ),
- LIT64( 0x0000010000000000 ),
- LIT64( 0x0000020000000000 ),
- LIT64( 0x0000040000000000 ),
- LIT64( 0x0000080000000000 ),
- LIT64( 0x0000100000000000 ),
- LIT64( 0x0000200000000000 ),
- LIT64( 0x0000400000000000 ),
- LIT64( 0x0000800000000000 ),
- LIT64( 0x0001000000000000 ),
- LIT64( 0x0002000000000000 ),
- LIT64( 0x0004000000000000 ),
- LIT64( 0x0008000000000000 ),
- LIT64( 0x0010000000000000 ),
- LIT64( 0x0020000000000000 ),
- LIT64( 0x0040000000000000 ),
- LIT64( 0x0080000000000000 ),
- LIT64( 0x0100000000000000 ),
- LIT64( 0x0200000000000000 ),
- LIT64( 0x0400000000000000 ),
- LIT64( 0x0800000000000000 ),
- LIT64( 0x1000000000000000 ),
- LIT64( 0x2000000000000000 ),
- LIT64( 0x4000000000000000 ),
- LIT64( 0x6000000000000000 ),
- LIT64( 0x7000000000000000 ),
- LIT64( 0x7800000000000000 ),
- LIT64( 0x7C00000000000000 ),
- LIT64( 0x7E00000000000000 ),
- LIT64( 0x7F00000000000000 ),
- LIT64( 0x7F80000000000000 ),
- LIT64( 0x7FC0000000000000 ),
- LIT64( 0x7FE0000000000000 ),
- LIT64( 0x7FF0000000000000 ),
- LIT64( 0x7FF8000000000000 ),
- LIT64( 0x7FFC000000000000 ),
- LIT64( 0x7FFE000000000000 ),
- LIT64( 0x7FFF000000000000 ),
- LIT64( 0x7FFF800000000000 ),
- LIT64( 0x7FFFC00000000000 ),
- LIT64( 0x7FFFE00000000000 ),
- LIT64( 0x7FFFF00000000000 ),
- LIT64( 0x7FFFF80000000000 ),
- LIT64( 0x7FFFFC0000000000 ),
- LIT64( 0x7FFFFE0000000000 ),
- LIT64( 0x7FFFFF0000000000 ),
- LIT64( 0x7FFFFF8000000000 ),
- LIT64( 0x7FFFFFC000000000 ),
- LIT64( 0x7FFFFFE000000000 ),
- LIT64( 0x7FFFFFF000000000 ),
- LIT64( 0x7FFFFFF800000000 ),
- LIT64( 0x7FFFFFFC00000000 ),
- LIT64( 0x7FFFFFFE00000000 ),
- LIT64( 0x7FFFFFFF00000000 ),
- LIT64( 0x7FFFFFFF80000000 ),
- LIT64( 0x7FFFFFFFC0000000 ),
- LIT64( 0x7FFFFFFFE0000000 ),
- LIT64( 0x7FFFFFFFF0000000 ),
- LIT64( 0x7FFFFFFFF8000000 ),
- LIT64( 0x7FFFFFFFFC000000 ),
- LIT64( 0x7FFFFFFFFE000000 ),
- LIT64( 0x7FFFFFFFFF000000 ),
- LIT64( 0x7FFFFFFFFF800000 ),
- LIT64( 0x7FFFFFFFFFC00000 ),
- LIT64( 0x7FFFFFFFFFE00000 ),
- LIT64( 0x7FFFFFFFFFF00000 ),
- LIT64( 0x7FFFFFFFFFF80000 ),
- LIT64( 0x7FFFFFFFFFFC0000 ),
- LIT64( 0x7FFFFFFFFFFE0000 ),
- LIT64( 0x7FFFFFFFFFFF0000 ),
- LIT64( 0x7FFFFFFFFFFF8000 ),
- LIT64( 0x7FFFFFFFFFFFC000 ),
- LIT64( 0x7FFFFFFFFFFFE000 ),
- LIT64( 0x7FFFFFFFFFFFF000 ),
- LIT64( 0x7FFFFFFFFFFFF800 ),
- LIT64( 0x7FFFFFFFFFFFFC00 ),
- LIT64( 0x7FFFFFFFFFFFFE00 ),
- LIT64( 0x7FFFFFFFFFFFFF00 ),
- LIT64( 0x7FFFFFFFFFFFFF80 ),
- LIT64( 0x7FFFFFFFFFFFFFC0 ),
- LIT64( 0x7FFFFFFFFFFFFFE0 ),
- LIT64( 0x7FFFFFFFFFFFFFF0 ),
- LIT64( 0x7FFFFFFFFFFFFFF8 ),
- LIT64( 0x7FFFFFFFFFFFFFFC ),
- LIT64( 0x7FFFFFFFFFFFFFFE ),
- LIT64( 0x7FFFFFFFFFFFFFFF ),
- LIT64( 0x7FFFFFFFFFFFFFFD ),
- LIT64( 0x7FFFFFFFFFFFFFFB ),
- LIT64( 0x7FFFFFFFFFFFFFF7 ),
- LIT64( 0x7FFFFFFFFFFFFFEF ),
- LIT64( 0x7FFFFFFFFFFFFFDF ),
- LIT64( 0x7FFFFFFFFFFFFFBF ),
- LIT64( 0x7FFFFFFFFFFFFF7F ),
- LIT64( 0x7FFFFFFFFFFFFEFF ),
- LIT64( 0x7FFFFFFFFFFFFDFF ),
- LIT64( 0x7FFFFFFFFFFFFBFF ),
- LIT64( 0x7FFFFFFFFFFFF7FF ),
- LIT64( 0x7FFFFFFFFFFFEFFF ),
- LIT64( 0x7FFFFFFFFFFFDFFF ),
- LIT64( 0x7FFFFFFFFFFFBFFF ),
- LIT64( 0x7FFFFFFFFFFF7FFF ),
- LIT64( 0x7FFFFFFFFFFEFFFF ),
- LIT64( 0x7FFFFFFFFFFDFFFF ),
- LIT64( 0x7FFFFFFFFFFBFFFF ),
- LIT64( 0x7FFFFFFFFFF7FFFF ),
- LIT64( 0x7FFFFFFFFFEFFFFF ),
- LIT64( 0x7FFFFFFFFFDFFFFF ),
- LIT64( 0x7FFFFFFFFFBFFFFF ),
- LIT64( 0x7FFFFFFFFF7FFFFF ),
- LIT64( 0x7FFFFFFFFEFFFFFF ),
- LIT64( 0x7FFFFFFFFDFFFFFF ),
- LIT64( 0x7FFFFFFFFBFFFFFF ),
- LIT64( 0x7FFFFFFFF7FFFFFF ),
- LIT64( 0x7FFFFFFFEFFFFFFF ),
- LIT64( 0x7FFFFFFFDFFFFFFF ),
- LIT64( 0x7FFFFFFFBFFFFFFF ),
- LIT64( 0x7FFFFFFF7FFFFFFF ),
- LIT64( 0x7FFFFFFEFFFFFFFF ),
- LIT64( 0x7FFFFFFDFFFFFFFF ),
- LIT64( 0x7FFFFFFBFFFFFFFF ),
- LIT64( 0x7FFFFFF7FFFFFFFF ),
- LIT64( 0x7FFFFFEFFFFFFFFF ),
- LIT64( 0x7FFFFFDFFFFFFFFF ),
- LIT64( 0x7FFFFFBFFFFFFFFF ),
- LIT64( 0x7FFFFF7FFFFFFFFF ),
- LIT64( 0x7FFFFEFFFFFFFFFF ),
- LIT64( 0x7FFFFDFFFFFFFFFF ),
- LIT64( 0x7FFFFBFFFFFFFFFF ),
- LIT64( 0x7FFFF7FFFFFFFFFF ),
- LIT64( 0x7FFFEFFFFFFFFFFF ),
- LIT64( 0x7FFFDFFFFFFFFFFF ),
- LIT64( 0x7FFFBFFFFFFFFFFF ),
- LIT64( 0x7FFF7FFFFFFFFFFF ),
- LIT64( 0x7FFEFFFFFFFFFFFF ),
- LIT64( 0x7FFDFFFFFFFFFFFF ),
- LIT64( 0x7FFBFFFFFFFFFFFF ),
- LIT64( 0x7FF7FFFFFFFFFFFF ),
- LIT64( 0x7FEFFFFFFFFFFFFF ),
- LIT64( 0x7FDFFFFFFFFFFFFF ),
- LIT64( 0x7FBFFFFFFFFFFFFF ),
- LIT64( 0x7F7FFFFFFFFFFFFF ),
- LIT64( 0x7EFFFFFFFFFFFFFF ),
- LIT64( 0x7DFFFFFFFFFFFFFF ),
- LIT64( 0x7BFFFFFFFFFFFFFF ),
- LIT64( 0x77FFFFFFFFFFFFFF ),
- LIT64( 0x6FFFFFFFFFFFFFFF ),
- LIT64( 0x5FFFFFFFFFFFFFFF ),
- LIT64( 0x3FFFFFFFFFFFFFFF ),
- LIT64( 0x1FFFFFFFFFFFFFFF ),
- LIT64( 0x0FFFFFFFFFFFFFFF ),
- LIT64( 0x07FFFFFFFFFFFFFF ),
- LIT64( 0x03FFFFFFFFFFFFFF ),
- LIT64( 0x01FFFFFFFFFFFFFF ),
- LIT64( 0x00FFFFFFFFFFFFFF ),
- LIT64( 0x007FFFFFFFFFFFFF ),
- LIT64( 0x003FFFFFFFFFFFFF ),
- LIT64( 0x001FFFFFFFFFFFFF ),
- LIT64( 0x000FFFFFFFFFFFFF ),
- LIT64( 0x0007FFFFFFFFFFFF ),
- LIT64( 0x0003FFFFFFFFFFFF ),
- LIT64( 0x0001FFFFFFFFFFFF ),
- LIT64( 0x0000FFFFFFFFFFFF ),
- LIT64( 0x00007FFFFFFFFFFF ),
- LIT64( 0x00003FFFFFFFFFFF ),
- LIT64( 0x00001FFFFFFFFFFF ),
- LIT64( 0x00000FFFFFFFFFFF ),
- LIT64( 0x000007FFFFFFFFFF ),
- LIT64( 0x000003FFFFFFFFFF ),
- LIT64( 0x000001FFFFFFFFFF ),
- LIT64( 0x000000FFFFFFFFFF ),
- LIT64( 0x0000007FFFFFFFFF ),
- LIT64( 0x0000003FFFFFFFFF ),
- LIT64( 0x0000001FFFFFFFFF ),
- LIT64( 0x0000000FFFFFFFFF ),
- LIT64( 0x00000007FFFFFFFF ),
- LIT64( 0x00000003FFFFFFFF ),
- LIT64( 0x00000001FFFFFFFF ),
- LIT64( 0x00000000FFFFFFFF ),
- LIT64( 0x000000007FFFFFFF ),
- LIT64( 0x000000003FFFFFFF ),
- LIT64( 0x000000001FFFFFFF ),
- LIT64( 0x000000000FFFFFFF ),
- LIT64( 0x0000000007FFFFFF ),
- LIT64( 0x0000000003FFFFFF ),
- LIT64( 0x0000000001FFFFFF ),
- LIT64( 0x0000000000FFFFFF ),
- LIT64( 0x00000000007FFFFF ),
- LIT64( 0x00000000003FFFFF ),
- LIT64( 0x00000000001FFFFF ),
- LIT64( 0x00000000000FFFFF ),
- LIT64( 0x000000000007FFFF ),
- LIT64( 0x000000000003FFFF ),
- LIT64( 0x000000000001FFFF ),
- LIT64( 0x000000000000FFFF ),
- LIT64( 0x0000000000007FFF ),
- LIT64( 0x0000000000003FFF ),
- LIT64( 0x0000000000001FFF ),
- LIT64( 0x0000000000000FFF ),
- LIT64( 0x00000000000007FF ),
- LIT64( 0x00000000000003FF ),
- LIT64( 0x00000000000001FF ),
- LIT64( 0x00000000000000FF ),
- LIT64( 0x000000000000007F ),
- LIT64( 0x000000000000003F ),
- LIT64( 0x000000000000001F ),
- LIT64( 0x000000000000000F ),
- LIT64( 0x0000000000000007 ),
- LIT64( 0x0000000000000003 )
-};
-
-static const uint32 floatx80NumQInP1 = floatx80NumQIn * floatx80NumP1;
-static const uint32 floatx80NumQOutP1 = floatx80NumQOut * floatx80NumP1;
-
-static floatx80 floatx80NextQInP1( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- floatx80 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = floatx80P1[ sigNum ];
- z.high = floatx80QIn[ expNum ];
- if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
- ++sigNum;
- if ( floatx80NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( floatx80NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static floatx80 floatx80NextQOutP1( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- floatx80 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = floatx80P1[ sigNum ];
- z.high = floatx80QOut[ expNum ];
- if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
- ++sigNum;
- if ( floatx80NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( floatx80NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static const uint32 floatx80NumQInP2 = floatx80NumQIn * floatx80NumP2;
-static const uint32 floatx80NumQOutP2 = floatx80NumQOut * floatx80NumP2;
-
-static floatx80 floatx80NextQInP2( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- floatx80 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = floatx80P2[ sigNum ];
- z.high = floatx80QIn[ expNum ];
- if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
- ++sigNum;
- if ( floatx80NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( floatx80NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static floatx80 floatx80NextQOutP2( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- floatx80 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = floatx80P2[ sigNum ];
- z.high = floatx80QOut[ expNum ];
- if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
- ++sigNum;
- if ( floatx80NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( floatx80NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static floatx80 floatx80RandomQOutP3( void )
-{
- floatx80 z;
-
- z.low =
- ( floatx80P2[ randomUint8() % floatx80NumP2 ]
- + floatx80P2[ randomUint8() % floatx80NumP2 ] )
- & LIT64( 0x7FFFFFFFFFFFFFFF );
- z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
- if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
- return z;
-
-}
-
-static floatx80 floatx80RandomQOutPInf( void )
-{
- floatx80 z;
-
- z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
- z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
- if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
- return z;
-
-}
-
-enum {
- floatx80NumQInfWeightMasks = 14
-};
-
-static const uint16 floatx80QInfWeightMasks[ floatx80NumQInfWeightMasks ] = {
- 0x7FFF,
- 0x7FFF,
- 0x3FFF,
- 0x1FFF,
- 0x07FF,
- 0x07FF,
- 0x03FF,
- 0x01FF,
- 0x00FF,
- 0x007F,
- 0x003F,
- 0x001F,
- 0x000F,
- 0x0007
-};
-
-static const uint16 floatx80QInfWeightOffsets[ floatx80NumQInfWeightMasks ] = {
- 0x0000,
- 0x0000,
- 0x2000,
- 0x3000,
- 0x3800,
- 0x3C00,
- 0x3E00,
- 0x3F00,
- 0x3F80,
- 0x3FC0,
- 0x3FE0,
- 0x3FF0,
- 0x3FF8,
- 0x3FFC
-};
-
-static floatx80 floatx80RandomQInfP3( void )
-{
- int8 weightMaskNum;
- floatx80 z;
-
- z.low =
- ( floatx80P2[ randomUint8() % floatx80NumP2 ]
- + floatx80P2[ randomUint8() % floatx80NumP2 ] )
- & LIT64( 0x7FFFFFFFFFFFFFFF );
- weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
- z.high =
- ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] )
- + floatx80QInfWeightOffsets[ weightMaskNum ];
- if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
- z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
- return z;
-
-}
-
-static floatx80 floatx80RandomQInfPInf( void )
-{
- int8 weightMaskNum;
- floatx80 z;
-
- z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
- weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
- z.high =
- ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] )
- + floatx80QInfWeightOffsets[ weightMaskNum ];
- if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
- z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
- return z;
-
-}
-
-static floatx80 floatx80Random( void )
-{
-
- switch ( randomUint8() & 7 ) {
- case 0:
- case 1:
- case 2:
- return floatx80RandomQOutP3();
- case 3:
- return floatx80RandomQOutPInf();
- case 4:
- case 5:
- case 6:
- return floatx80RandomQInfP3();
- default:
- return floatx80RandomQInfPInf();
- }
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-enum {
- float128NumQIn = 22,
- float128NumQOut = 78,
- float128NumP1 = 4,
- float128NumP2 = 443
-};
-
-static const uint64 float128QIn[ float128NumQIn ] = {
- LIT64( 0x0000000000000000 ), /* positive, subnormal */
- LIT64( 0x0001000000000000 ), /* positive, -16382 */
- LIT64( 0x3F8E000000000000 ), /* positive, -113 */
- LIT64( 0x3FFD000000000000 ), /* positive, -2 */
- LIT64( 0x3FFE000000000000 ), /* positive, -1 */
- LIT64( 0x3FFF000000000000 ), /* positive, 0 */
- LIT64( 0x4000000000000000 ), /* positive, 1 */
- LIT64( 0x4001000000000000 ), /* positive, 2 */
- LIT64( 0x4070000000000000 ), /* positive, 113 */
- LIT64( 0x7FFE000000000000 ), /* positive, 16383 */
- LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */
- LIT64( 0x8000000000000000 ), /* negative, subnormal */
- LIT64( 0x8001000000000000 ), /* negative, -16382 */
- LIT64( 0xBF8E000000000000 ), /* negative, -113 */
- LIT64( 0xBFFD000000000000 ), /* negative, -2 */
- LIT64( 0xBFFE000000000000 ), /* negative, -1 */
- LIT64( 0xBFFF000000000000 ), /* negative, 0 */
- LIT64( 0xC000000000000000 ), /* negative, 1 */
- LIT64( 0xC001000000000000 ), /* negative, 2 */
- LIT64( 0xC070000000000000 ), /* negative, 113 */
- LIT64( 0xFFFE000000000000 ), /* negative, 16383 */
- LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */
-};
-
-static const uint64 float128QOut[ float128NumQOut ] = {
- LIT64( 0x0000000000000000 ), /* positive, subnormal */
- LIT64( 0x0001000000000000 ), /* positive, -16382 */
- LIT64( 0x0002000000000000 ), /* positive, -16381 */
- LIT64( 0x3BFE000000000000 ), /* positive, -1025 */
- LIT64( 0x3BFF000000000000 ), /* positive, -1024 */
- LIT64( 0x3C00000000000000 ), /* positive, -1023 */
- LIT64( 0x3C01000000000000 ), /* positive, -1022 */
- LIT64( 0x3F7E000000000000 ), /* positive, -129 */
- LIT64( 0x3F7F000000000000 ), /* positive, -128 */
- LIT64( 0x3F80000000000000 ), /* positive, -127 */
- LIT64( 0x3F81000000000000 ), /* positive, -126 */
- LIT64( 0x3F8E000000000000 ), /* positive, -113 */
- LIT64( 0x3FFB000000000000 ), /* positive, -4 */
- LIT64( 0x3FFC000000000000 ), /* positive, -3 */
- LIT64( 0x3FFD000000000000 ), /* positive, -2 */
- LIT64( 0x3FFE000000000000 ), /* positive, -1 */
- LIT64( 0x3FFF000000000000 ), /* positive, 0 */
- LIT64( 0x4000000000000000 ), /* positive, 1 */
- LIT64( 0x4001000000000000 ), /* positive, 2 */
- LIT64( 0x4002000000000000 ), /* positive, 3 */
- LIT64( 0x4003000000000000 ), /* positive, 4 */
- LIT64( 0x401C000000000000 ), /* positive, 29 */
- LIT64( 0x401D000000000000 ), /* positive, 30 */
- LIT64( 0x401E000000000000 ), /* positive, 31 */
- LIT64( 0x401F000000000000 ), /* positive, 32 */
- LIT64( 0x403C000000000000 ), /* positive, 61 */
- LIT64( 0x403D000000000000 ), /* positive, 62 */
- LIT64( 0x403E000000000000 ), /* positive, 63 */
- LIT64( 0x403F000000000000 ), /* positive, 64 */
- LIT64( 0x4070000000000000 ), /* positive, 113 */
- LIT64( 0x407E000000000000 ), /* positive, 127 */
- LIT64( 0x407F000000000000 ), /* positive, 128 */
- LIT64( 0x4080000000000000 ), /* positive, 129 */
- LIT64( 0x43FE000000000000 ), /* positive, 1023 */
- LIT64( 0x43FF000000000000 ), /* positive, 1024 */
- LIT64( 0x4400000000000000 ), /* positive, 1025 */
- LIT64( 0x7FFD000000000000 ), /* positive, 16382 */
- LIT64( 0x7FFE000000000000 ), /* positive, 16383 */
- LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */
- LIT64( 0x8000000000000000 ), /* negative, subnormal */
- LIT64( 0x8001000000000000 ), /* negative, -16382 */
- LIT64( 0x8002000000000000 ), /* negative, -16381 */
- LIT64( 0xBBFE000000000000 ), /* negative, -1025 */
- LIT64( 0xBBFF000000000000 ), /* negative, -1024 */
- LIT64( 0xBC00000000000000 ), /* negative, -1023 */
- LIT64( 0xBC01000000000000 ), /* negative, -1022 */
- LIT64( 0xBF7E000000000000 ), /* negative, -129 */
- LIT64( 0xBF7F000000000000 ), /* negative, -128 */
- LIT64( 0xBF80000000000000 ), /* negative, -127 */
- LIT64( 0xBF81000000000000 ), /* negative, -126 */
- LIT64( 0xBF8E000000000000 ), /* negative, -113 */
- LIT64( 0xBFFB000000000000 ), /* negative, -4 */
- LIT64( 0xBFFC000000000000 ), /* negative, -3 */
- LIT64( 0xBFFD000000000000 ), /* negative, -2 */
- LIT64( 0xBFFE000000000000 ), /* negative, -1 */
- LIT64( 0xBFFF000000000000 ), /* negative, 0 */
- LIT64( 0xC000000000000000 ), /* negative, 1 */
- LIT64( 0xC001000000000000 ), /* negative, 2 */
- LIT64( 0xC002000000000000 ), /* negative, 3 */
- LIT64( 0xC003000000000000 ), /* negative, 4 */
- LIT64( 0xC01C000000000000 ), /* negative, 29 */
- LIT64( 0xC01D000000000000 ), /* negative, 30 */
- LIT64( 0xC01E000000000000 ), /* negative, 31 */
- LIT64( 0xC01F000000000000 ), /* negative, 32 */
- LIT64( 0xC03C000000000000 ), /* negative, 61 */
- LIT64( 0xC03D000000000000 ), /* negative, 62 */
- LIT64( 0xC03E000000000000 ), /* negative, 63 */
- LIT64( 0xC03F000000000000 ), /* negative, 64 */
- LIT64( 0xC070000000000000 ), /* negative, 113 */
- LIT64( 0xC07E000000000000 ), /* negative, 127 */
- LIT64( 0xC07F000000000000 ), /* negative, 128 */
- LIT64( 0xC080000000000000 ), /* negative, 129 */
- LIT64( 0xC3FE000000000000 ), /* negative, 1023 */
- LIT64( 0xC3FF000000000000 ), /* negative, 1024 */
- LIT64( 0xC400000000000000 ), /* negative, 1025 */
- LIT64( 0xFFFD000000000000 ), /* negative, 16382 */
- LIT64( 0xFFFE000000000000 ), /* negative, 16383 */
- LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */
-};
-
-static const struct { bits64 high, low; } float128P1[ float128NumP1 ] = {
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) }
-};
-
-static const struct { bits64 high, low; } float128P2[ float128NumP2 ] = {
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000002 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000004 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000008 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000010 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000020 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000040 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000080 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000100 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000200 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000400 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000800 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000002000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000004000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000008000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000010000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000020000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000040000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000080000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000100000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000200000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000400000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000800000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000002000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000004000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000008000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000010000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000020000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000040000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000080000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000100000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000200000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000400000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000800000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000001000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000002000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000004000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000008000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000010000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000020000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000040000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000080000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000100000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000200000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000400000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000800000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0001000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0002000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0004000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0008000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0010000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0020000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0040000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0080000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0100000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0200000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0400000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0800000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x1000000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x2000000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x4000000000000000 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x8000000000000000 ) },
- { LIT64( 0x0000000000000001 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000002 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000004 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000008 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000010 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000020 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000040 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000080 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000100 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000200 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000400 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000000800 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000001000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000002000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000004000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000008000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000010000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000020000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000040000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000080000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000100000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000200000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000400000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000000800000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000001000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000002000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000004000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000008000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000010000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000020000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000040000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000080000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000100000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000200000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000400000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000000800000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000001000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000002000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000004000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000008000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000010000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000020000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000040000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000080000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000100000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000200000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000400000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000800000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000C00000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000E00000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000F00000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000F80000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FC0000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FE0000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FF0000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FF8000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFC000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFE000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFF000000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFF800000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFC00000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFE00000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFF00000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFF80000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFC0000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFE0000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFF0000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFF8000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFC000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFE000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFF000000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFF800000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFE00000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFF00000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFF80000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFC0000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFE0000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFF0000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFF8000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFC000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFE000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFF000 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFF800 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFC00 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFE00 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFF00 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFF80 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFC0 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFE0 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFF0 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFF8 ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFC ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFE ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x0000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x8000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xC000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xE000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF000000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF800000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFC00000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFE00000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF00000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF80000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFC0000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFE0000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF0000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF8000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFE000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF000000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF800000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFC00000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFE00000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF00000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF80000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFC0000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFE0000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF0000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF8000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFC000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFE000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF000000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF800000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFC00000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFE00000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF00000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF80000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFC0000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFE0000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF8000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFC000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFE000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF000000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF800000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFC00000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFE00000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF00000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF80000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFC0000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFE0000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF0000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF8000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFC000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFE000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF000 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF800 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFC00 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFE00 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF00 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF80 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFC0 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFE0 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF0 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF8 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFC ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFD ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFB ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF7 ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFEF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFDF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFBF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF7F ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFEFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFDFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF7FF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFDFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFBFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF7FFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFEFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFDFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFBFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFEFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFDFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFBFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF7FFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFEFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFDFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFBFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF7FFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFDFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFBFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF7FFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFDFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFBFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF7FFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFEFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFDFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFBFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF7FFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFEFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFDFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFBFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF7FFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFEFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFDFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFBFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF7FFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFEFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFDFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFBFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF7FFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFEFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFDFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFBFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF7FFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFEFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFDFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFBFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF7FFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xEFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xDFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xBFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFD ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFFB ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFF7 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFEF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFDF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFFBF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFF7F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFEFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFDFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFFBFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFF7FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFEFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFDFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFFBFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFF7FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFEFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFDFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFFBFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFF7FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFEFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFDFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFFBFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFF7FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFEFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFDFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFFBFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFF7FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFEFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFDFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFFBFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFF7FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFEFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFDFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFFBFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFF7FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FFBFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FF7FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FEFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FDFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000FBFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000F7FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000EFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000DFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000BFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00007FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00003FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00001FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000007FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000003FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000001FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000007FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000003FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000001FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000007FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000003FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000001FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000007FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000003FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000001FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000007FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000003FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000001FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000007FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000003FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000001FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000000FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000007FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000003FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000001FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000000FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000007FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000003FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000001FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000000007FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000000003FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000000001FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x00000000000000FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000000007F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000000003F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000000001F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x000000000000000F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000007 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000003 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000001 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x3FFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x1FFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0FFFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x07FFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x03FFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x01FFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00FFFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x007FFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x003FFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x001FFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000FFFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0007FFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0003FFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0001FFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000FFFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00007FFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00003FFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00001FFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000FFFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000007FFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000003FFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000001FFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000FFFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000007FFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000003FFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000001FFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000FFFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000007FFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000003FFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000001FFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000FFFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000007FFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000003FFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000001FFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000FFFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000007FFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000003FFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001FFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000FFFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000007FFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000003FFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000001FFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000FFFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000007FFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000003FFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000001FFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000FFFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000007FFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000003FFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001FFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000FFF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000007FF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000003FF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000001FF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000000FF ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000007F ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000003F ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000001F ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000000F ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000007 ) },
- { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000003 ) }
-};
-
-static const uint32 float128NumQInP1 = float128NumQIn * float128NumP1;
-static const uint32 float128NumQOutP1 = float128NumQOut * float128NumP1;
-
-static float128 float128NextQInP1( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- float128 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = float128P1[ sigNum ].low;
- z.high = float128QIn[ expNum ] | float128P1[ sigNum ].high;
- ++sigNum;
- if ( float128NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float128NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float128 float128NextQOutP1( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- float128 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = float128P1[ sigNum ].low;
- z.high = float128QOut[ expNum ] | float128P1[ sigNum ].high;
- ++sigNum;
- if ( float128NumP1 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float128NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static const uint32 float128NumQInP2 = float128NumQIn * float128NumP2;
-static const uint32 float128NumQOutP2 = float128NumQOut * float128NumP2;
-
-static float128 float128NextQInP2( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- float128 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = float128P2[ sigNum ].low;
- z.high = float128QIn[ expNum ] | float128P2[ sigNum ].high;
- ++sigNum;
- if ( float128NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float128NumQIn <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float128 float128NextQOutP2( sequenceT *sequencePtr )
-{
- int16 expNum, sigNum;
- float128 z;
-
- sigNum = sequencePtr->term1Num;
- expNum = sequencePtr->expNum;
- z.low = float128P2[ sigNum ].low;
- z.high = float128QOut[ expNum ] | float128P2[ sigNum ].high;
- ++sigNum;
- if ( float128NumP2 <= sigNum ) {
- sigNum = 0;
- ++expNum;
- if ( float128NumQOut <= expNum ) {
- expNum = 0;
- sequencePtr->done = TRUE;
- }
- sequencePtr->expNum = expNum;
- }
- sequencePtr->term1Num = sigNum;
- return z;
-
-}
-
-static float128 float128RandomQOutP3( void )
-{
- int16 sigNum1, sigNum2;
- uint64 sig1Low, sig2Low;
- float128 z;
-
- sigNum1 = randomUint8() % float128NumP2;
- sigNum2 = randomUint8() % float128NumP2;
- sig1Low = float128P2[ sigNum1 ].low;
- sig2Low = float128P2[ sigNum2 ].low;
- z.low = sig1Low + sig2Low;
- z.high =
- float128QOut[ randomUint8() % float128NumQOut ]
- | ( ( float128P2[ sigNum1 ].high
- + float128P2[ sigNum2 ].high
- + ( z.low < sig1Low )
- )
- & LIT64( 0x0000FFFFFFFFFFFF )
- );
- return z;
-
-}
-
-static float128 float128RandomQOutPInf( void )
-{
- float128 z;
-
- z.low = randomUint64();
- z.high =
- float128QOut[ randomUint8() % float128NumQOut ]
- | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
- return z;
-
-}
-
-enum {
- float128NumQInfWeightMasks = 14
-};
-
-static const uint64 float128QInfWeightMasks[ float128NumQInfWeightMasks ] = {
- LIT64( 0x7FFF000000000000 ),
- LIT64( 0x7FFF000000000000 ),
- LIT64( 0x3FFF000000000000 ),
- LIT64( 0x1FFF000000000000 ),
- LIT64( 0x07FF000000000000 ),
- LIT64( 0x07FF000000000000 ),
- LIT64( 0x03FF000000000000 ),
- LIT64( 0x01FF000000000000 ),
- LIT64( 0x00FF000000000000 ),
- LIT64( 0x007F000000000000 ),
- LIT64( 0x003F000000000000 ),
- LIT64( 0x001F000000000000 ),
- LIT64( 0x000F000000000000 ),
- LIT64( 0x0007000000000000 )
-};
-
-static const uint64 float128QInfWeightOffsets[ float128NumQInfWeightMasks ] = {
- LIT64( 0x0000000000000000 ),
- LIT64( 0x0000000000000000 ),
- LIT64( 0x2000000000000000 ),
- LIT64( 0x3000000000000000 ),
- LIT64( 0x3800000000000000 ),
- LIT64( 0x3C00000000000000 ),
- LIT64( 0x3E00000000000000 ),
- LIT64( 0x3F00000000000000 ),
- LIT64( 0x3F80000000000000 ),
- LIT64( 0x3FC0000000000000 ),
- LIT64( 0x3FE0000000000000 ),
- LIT64( 0x3FF0000000000000 ),
- LIT64( 0x3FF8000000000000 ),
- LIT64( 0x3FFC000000000000 )
-};
-
-static float128 float128RandomQInfP3( void )
-{
- int16 sigNum1, sigNum2;
- uint64 sig1Low, sig2Low;
- int8 weightMaskNum;
- float128 z;
-
- sigNum1 = randomUint8() % float128NumP2;
- sigNum2 = randomUint8() % float128NumP2;
- sig1Low = float128P2[ sigNum1 ].low;
- sig2Low = float128P2[ sigNum2 ].low;
- z.low = sig1Low + sig2Low;
- weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
- z.high =
- ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
- | ( ( ( ( (uint64) randomUint16() )<<48 )
- & float128QInfWeightMasks[ weightMaskNum ] )
- + float128QInfWeightOffsets[ weightMaskNum ]
- )
- | ( ( float128P2[ sigNum1 ].high
- + float128P2[ sigNum2 ].high
- + ( z.low < sig1Low )
- )
- & LIT64( 0x0000FFFFFFFFFFFF )
- );
- return z;
-
-}
-
-static float128 float128RandomQInfPInf( void )
-{
- int8 weightMaskNum;
- float128 z;
-
- weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
- z.low = randomUint64();
- z.high =
- ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
- | ( ( ( ( (uint64) randomUint16() )<<48 )
- & float128QInfWeightMasks[ weightMaskNum ] )
- + float128QInfWeightOffsets[ weightMaskNum ]
- )
- | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
- return z;
-
-}
-
-static float128 float128Random( void )
-{
-
- switch ( randomUint8() & 7 ) {
- case 0:
- case 1:
- case 2:
- return float128RandomQOutP3();
- case 3:
- return float128RandomQOutPInf();
- case 4:
- case 5:
- case 6:
- return float128RandomQInfP3();
- default:
- return float128RandomQInfPInf();
- }
-
-}
-
-#endif
-
-static int8 level = 0;
-
-void testCases_setLevel( int8 levelIn )
-{
-
- if ( ( levelIn < 1 ) || ( 2 < levelIn ) ) {
- fail( "Invalid testing level: %d", levelIn );
- }
- level = levelIn;
-
-}
-
-static int8 sequenceType;
-static sequenceT sequenceA, sequenceB;
-static int8 subcase;
-
-uint32 testCases_total;
-flag testCases_done;
-
-static float32 current_a_float32;
-static float32 current_b_float32;
-static float64 current_a_float64;
-static float64 current_b_float64;
-#ifdef FLOATX80
-static floatx80 current_a_floatx80;
-static floatx80 current_b_floatx80;
-#endif
-#ifdef FLOAT128
-static float128 current_a_float128;
-static float128 current_b_float128;
-#endif
-
-void testCases_initSequence( int8 sequenceTypeIn )
-{
-
- sequenceType = sequenceTypeIn;
- sequenceA.term2Num = 0;
- sequenceA.term1Num = 0;
- sequenceA.expNum = 0;
- sequenceA.done = FALSE;
- sequenceB.term2Num = 0;
- sequenceB.term1Num = 0;
- sequenceB.expNum = 0;
- sequenceB.done = FALSE;
- subcase = 0;
- switch ( level ) {
- case 1:
- switch ( sequenceTypeIn ) {
- case testCases_sequence_a_int32:
- testCases_total = 3 * int32NumP1;
- break;
-#ifdef BITS64
- case testCases_sequence_a_int64:
- testCases_total = 3 * int64NumP1;
- break;
-#endif
- case testCases_sequence_a_float32:
- testCases_total = 3 * float32NumQOutP1;
- break;
- case testCases_sequence_ab_float32:
- testCases_total = 6 * float32NumQInP1 * float32NumQInP1;
- current_a_float32 = float32NextQInP1( &sequenceA );
- break;
- case testCases_sequence_a_float64:
- testCases_total = 3 * float64NumQOutP1;
- break;
- case testCases_sequence_ab_float64:
- testCases_total = 6 * float64NumQInP1 * float64NumQInP1;
- current_a_float64 = float64NextQInP1( &sequenceA );
- break;
-#ifdef FLOATX80
- case testCases_sequence_a_floatx80:
- testCases_total = 3 * floatx80NumQOutP1;
- break;
- case testCases_sequence_ab_floatx80:
- testCases_total = 6 * floatx80NumQInP1 * floatx80NumQInP1;
- current_a_floatx80 = floatx80NextQInP1( &sequenceA );
- break;
-#endif
-#ifdef FLOAT128
- case testCases_sequence_a_float128:
- testCases_total = 3 * float128NumQOutP1;
- break;
- case testCases_sequence_ab_float128:
- testCases_total = 6 * float128NumQInP1 * float128NumQInP1;
- current_a_float128 = float128NextQInP1( &sequenceA );
- break;
-#endif
- }
- break;
- case 2:
- switch ( sequenceTypeIn ) {
- case testCases_sequence_a_int32:
- testCases_total = 2 * int32NumP2;
- break;
-#ifdef BITS64
- case testCases_sequence_a_int64:
- testCases_total = 2 * int64NumP2;
- break;
-#endif
- case testCases_sequence_a_float32:
- testCases_total = 2 * float32NumQOutP2;
- break;
- case testCases_sequence_ab_float32:
- testCases_total = 2 * float32NumQInP2 * float32NumQInP2;
- current_a_float32 = float32NextQInP2( &sequenceA );
- break;
- case testCases_sequence_a_float64:
- testCases_total = 2 * float64NumQOutP2;
- break;
- case testCases_sequence_ab_float64:
- testCases_total = 2 * float64NumQInP2 * float64NumQInP2;
- current_a_float64 = float64NextQInP2( &sequenceA );
- break;
-#ifdef FLOATX80
- case testCases_sequence_a_floatx80:
- testCases_total = 2 * floatx80NumQOutP2;
- break;
- case testCases_sequence_ab_floatx80:
- testCases_total = 2 * floatx80NumQInP2 * floatx80NumQInP2;
- current_a_floatx80 = floatx80NextQInP2( &sequenceA );
- break;
-#endif
-#ifdef FLOAT128
- case testCases_sequence_a_float128:
- testCases_total = 2 * float128NumQOutP2;
- break;
- case testCases_sequence_ab_float128:
- testCases_total = 2 * float128NumQInP2 * float128NumQInP2;
- current_a_float128 = float128NextQInP2( &sequenceA );
- break;
-#endif
- }
- break;
- }
- testCases_done = FALSE;
-
-}
-
-int32 testCases_a_int32;
-#ifdef BITS64
-int64 testCases_a_int64;
-#endif
-float32 testCases_a_float32;
-float32 testCases_b_float32;
-float64 testCases_a_float64;
-float64 testCases_b_float64;
-#ifdef FLOATX80
-floatx80 testCases_a_floatx80;
-floatx80 testCases_b_floatx80;
-#endif
-#ifdef FLOAT128
-float128 testCases_a_float128;
-float128 testCases_b_float128;
-#endif
-
-void testCases_next( void )
-{
-
- switch ( level ) {
- case 1:
- switch ( sequenceType ) {
- case testCases_sequence_a_int32:
- switch ( subcase ) {
- case 0:
- testCases_a_int32 = int32RandomP3();
- break;
- case 1:
- testCases_a_int32 = int32RandomPInf();
- break;
- case 2:
- testCases_a_int32 = int32NextP1( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#ifdef BITS64
- case testCases_sequence_a_int64:
- switch ( subcase ) {
- case 0:
- testCases_a_int64 = int64RandomP3();
- break;
- case 1:
- testCases_a_int64 = int64RandomPInf();
- break;
- case 2:
- testCases_a_int64 = int64NextP1( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#endif
- case testCases_sequence_a_float32:
- switch ( subcase ) {
- case 0:
- case 1:
- testCases_a_float32 = float32Random();
- break;
- case 2:
- testCases_a_float32 = float32NextQOutP1( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_float32:
- switch ( subcase ) {
- case 0:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_float32 = float32NextQInP1( &sequenceA );
- }
- current_b_float32 = float32NextQInP1( &sequenceB );
- case 2:
- case 4:
- testCases_a_float32 = float32Random();
- testCases_b_float32 = float32Random();
- break;
- case 1:
- testCases_a_float32 = current_a_float32;
- testCases_b_float32 = float32Random();
- break;
- case 3:
- testCases_a_float32 = float32Random();
- testCases_b_float32 = current_b_float32;
- break;
- case 5:
- testCases_a_float32 = current_a_float32;
- testCases_b_float32 = current_b_float32;
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_a_float64:
- switch ( subcase ) {
- case 0:
- case 1:
- testCases_a_float64 = float64Random();
- break;
- case 2:
- testCases_a_float64 = float64NextQOutP1( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_float64:
- switch ( subcase ) {
- case 0:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_float64 = float64NextQInP1( &sequenceA );
- }
- current_b_float64 = float64NextQInP1( &sequenceB );
- case 2:
- case 4:
- testCases_a_float64 = float64Random();
- testCases_b_float64 = float64Random();
- break;
- case 1:
- testCases_a_float64 = current_a_float64;
- testCases_b_float64 = float64Random();
- break;
- case 3:
- testCases_a_float64 = float64Random();
- testCases_b_float64 = current_b_float64;
- break;
- case 5:
- testCases_a_float64 = current_a_float64;
- testCases_b_float64 = current_b_float64;
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#ifdef FLOATX80
- case testCases_sequence_a_floatx80:
- switch ( subcase ) {
- case 0:
- case 1:
- testCases_a_floatx80 = floatx80Random();
- break;
- case 2:
- testCases_a_floatx80 = floatx80NextQOutP1( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_floatx80:
- switch ( subcase ) {
- case 0:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_floatx80 = floatx80NextQInP1( &sequenceA );
- }
- current_b_floatx80 = floatx80NextQInP1( &sequenceB );
- case 2:
- case 4:
- testCases_a_floatx80 = floatx80Random();
- testCases_b_floatx80 = floatx80Random();
- break;
- case 1:
- testCases_a_floatx80 = current_a_floatx80;
- testCases_b_floatx80 = floatx80Random();
- break;
- case 3:
- testCases_a_floatx80 = floatx80Random();
- testCases_b_floatx80 = current_b_floatx80;
- break;
- case 5:
- testCases_a_floatx80 = current_a_floatx80;
- testCases_b_floatx80 = current_b_floatx80;
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#endif
-#ifdef FLOAT128
- case testCases_sequence_a_float128:
- switch ( subcase ) {
- case 0:
- case 1:
- testCases_a_float128 = float128Random();
- break;
- case 2:
- testCases_a_float128 = float128NextQOutP1( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_float128:
- switch ( subcase ) {
- case 0:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_float128 = float128NextQInP1( &sequenceA );
- }
- current_b_float128 = float128NextQInP1( &sequenceB );
- case 2:
- case 4:
- testCases_a_float128 = float128Random();
- testCases_b_float128 = float128Random();
- break;
- case 1:
- testCases_a_float128 = current_a_float128;
- testCases_b_float128 = float128Random();
- break;
- case 3:
- testCases_a_float128 = float128Random();
- testCases_b_float128 = current_b_float128;
- break;
- case 5:
- testCases_a_float128 = current_a_float128;
- testCases_b_float128 = current_b_float128;
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#endif
- }
- break;
- case 2:
- switch ( sequenceType ) {
- case testCases_sequence_a_int32:
- switch ( subcase ) {
- case 0:
- testCases_a_int32 = int32RandomP3();
- break;
- case 2:
- testCases_a_int32 = int32RandomPInf();
- break;
- case 3:
- subcase = -1;
- case 1:
- testCases_a_int32 = int32NextP2( &sequenceA );
- testCases_done = sequenceA.done;
- break;
- }
- ++subcase;
- break;
-#ifdef BITS64
- case testCases_sequence_a_int64:
- switch ( subcase ) {
- case 0:
- testCases_a_int64 = int64RandomP3();
- break;
- case 2:
- testCases_a_int64 = int64RandomPInf();
- break;
- case 3:
- subcase = -1;
- case 1:
- testCases_a_int64 = int64NextP2( &sequenceA );
- testCases_done = sequenceA.done;
- break;
- }
- ++subcase;
- break;
-#endif
- case testCases_sequence_a_float32:
- switch ( subcase ) {
- case 0:
- testCases_a_float32 = float32Random();
- break;
- case 1:
- testCases_a_float32 = float32NextQOutP2( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_float32:
- switch ( subcase ) {
- case 0:
- testCases_a_float32 = float32Random();
- testCases_b_float32 = float32Random();
- break;
- case 1:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_float32 = float32NextQInP2( &sequenceA );
- }
- testCases_a_float32 = current_a_float32;
- testCases_b_float32 = float32NextQInP2( &sequenceB );
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_a_float64:
- switch ( subcase ) {
- case 0:
- testCases_a_float64 = float64Random();
- break;
- case 1:
- testCases_a_float64 = float64NextQOutP2( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_float64:
- switch ( subcase ) {
- case 0:
- testCases_a_float64 = float64Random();
- testCases_b_float64 = float64Random();
- break;
- case 1:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_float64 = float64NextQInP2( &sequenceA );
- }
- testCases_a_float64 = current_a_float64;
- testCases_b_float64 = float64NextQInP2( &sequenceB );
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#ifdef FLOATX80
- case testCases_sequence_a_floatx80:
- switch ( subcase ) {
- case 0:
- testCases_a_floatx80 = floatx80Random();
- break;
- case 1:
- testCases_a_floatx80 = floatx80NextQOutP2( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_floatx80:
- switch ( subcase ) {
- case 0:
- testCases_a_floatx80 = floatx80Random();
- testCases_b_floatx80 = floatx80Random();
- break;
- case 1:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_floatx80 = floatx80NextQInP2( &sequenceA );
- }
- testCases_a_floatx80 = current_a_floatx80;
- testCases_b_floatx80 = floatx80NextQInP2( &sequenceB );
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#endif
-#ifdef FLOAT128
- case testCases_sequence_a_float128:
- switch ( subcase ) {
- case 0:
- testCases_a_float128 = float128Random();
- break;
- case 1:
- testCases_a_float128 = float128NextQOutP2( &sequenceA );
- testCases_done = sequenceA.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
- case testCases_sequence_ab_float128:
- switch ( subcase ) {
- case 0:
- testCases_a_float128 = float128Random();
- testCases_b_float128 = float128Random();
- break;
- case 1:
- if ( sequenceB.done ) {
- sequenceB.done = FALSE;
- current_a_float128 = float128NextQInP2( &sequenceA );
- }
- testCases_a_float128 = current_a_float128;
- testCases_b_float128 = float128NextQInP2( &sequenceB );
- testCases_done = sequenceA.done & sequenceB.done;
- subcase = -1;
- break;
- }
- ++subcase;
- break;
-#endif
- }
- break;
- }
-
-}
-
diff --git a/tools/test/testfloat/testCases.h b/tools/test/testfloat/testCases.h
deleted file mode 100644
index ed6ea2be46ba..000000000000
--- a/tools/test/testfloat/testCases.h
+++ /dev/null
@@ -1,69 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-void testCases_setLevel( int8 );
-
-void testCases_initSequence( int8 );
-enum {
- testCases_sequence_a_int32,
-#ifdef BITS64
- testCases_sequence_a_int64,
-#endif
- testCases_sequence_a_float32,
- testCases_sequence_ab_float32,
- testCases_sequence_a_float64,
- testCases_sequence_ab_float64,
-#ifdef FLOATX80
- testCases_sequence_a_floatx80,
- testCases_sequence_ab_floatx80,
-#endif
-#ifdef FLOAT128
- testCases_sequence_a_float128,
- testCases_sequence_ab_float128,
-#endif
-};
-
-extern uint32 testCases_total;
-extern flag testCases_done;
-
-void testCases_next( void );
-
-extern int32 testCases_a_int32;
-#ifdef BITS64
-extern int64 testCases_a_int64;
-#endif
-extern float32 testCases_a_float32;
-extern float32 testCases_b_float32;
-extern float64 testCases_a_float64;
-extern float64 testCases_b_float64;
-#ifdef FLOATX80
-extern floatx80 testCases_a_floatx80;
-extern floatx80 testCases_b_floatx80;
-#endif
-#ifdef FLOAT128
-extern float128 testCases_a_float128;
-extern float128 testCases_b_float128;
-#endif
-
diff --git a/tools/test/testfloat/testFunction.c b/tools/test/testfloat/testFunction.c
deleted file mode 100644
index 687563b0d750..000000000000
--- a/tools/test/testfloat/testFunction.c
+++ /dev/null
@@ -1,1149 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include "milieu.h"
-#include "softfloat.h"
-#include "testCases.h"
-#include "testLoops.h"
-#include "systmodes.h"
-#include "systflags.h"
-#include "systfloat.h"
-#include "testFunction.h"
-
-const functionT functions[ NUM_FUNCTIONS ] = {
- { 0, 0, 0, 0 },
- { "int32_to_float32", 1, FALSE, TRUE },
- { "int32_to_float64", 1, FALSE, FALSE },
- { "int32_to_floatx80", 1, FALSE, FALSE },
- { "int32_to_float128", 1, FALSE, FALSE },
- { "int64_to_float32", 1, FALSE, TRUE },
- { "int64_to_float64", 1, FALSE, TRUE },
- { "int64_to_floatx80", 1, FALSE, FALSE },
- { "int64_to_float128", 1, FALSE, FALSE },
- { "float32_to_int32", 1, FALSE, TRUE },
- { "float32_to_int32_round_to_zero", 1, FALSE, FALSE },
- { "float32_to_int64", 1, FALSE, TRUE },
- { "float32_to_int64_round_to_zero", 1, FALSE, FALSE },
- { "float32_to_float64", 1, FALSE, FALSE },
- { "float32_to_floatx80", 1, FALSE, FALSE },
- { "float32_to_float128", 1, FALSE, FALSE },
- { "float32_round_to_int", 1, FALSE, TRUE },
- { "float32_add", 2, FALSE, TRUE },
- { "float32_sub", 2, FALSE, TRUE },
- { "float32_mul", 2, FALSE, TRUE },
- { "float32_div", 2, FALSE, TRUE },
- { "float32_rem", 2, FALSE, FALSE },
- { "float32_sqrt", 1, FALSE, TRUE },
- { "float32_eq", 2, FALSE, FALSE },
- { "float32_le", 2, FALSE, FALSE },
- { "float32_lt", 2, FALSE, FALSE },
- { "float32_eq_signaling", 2, FALSE, FALSE },
- { "float32_le_quiet", 2, FALSE, FALSE },
- { "float32_lt_quiet", 2, FALSE, FALSE },
- { "float64_to_int32", 1, FALSE, TRUE },
- { "float64_to_int32_round_to_zero", 1, FALSE, FALSE },
- { "float64_to_int64", 1, FALSE, TRUE },
- { "float64_to_int64_round_to_zero", 1, FALSE, FALSE },
- { "float64_to_float32", 1, FALSE, TRUE },
- { "float64_to_floatx80", 1, FALSE, FALSE },
- { "float64_to_float128", 1, FALSE, FALSE },
- { "float64_round_to_int", 1, FALSE, TRUE },
- { "float64_add", 2, FALSE, TRUE },
- { "float64_sub", 2, FALSE, TRUE },
- { "float64_mul", 2, FALSE, TRUE },
- { "float64_div", 2, FALSE, TRUE },
- { "float64_rem", 2, FALSE, FALSE },
- { "float64_sqrt", 1, FALSE, TRUE },
- { "float64_eq", 2, FALSE, FALSE },
- { "float64_le", 2, FALSE, FALSE },
- { "float64_lt", 2, FALSE, FALSE },
- { "float64_eq_signaling", 2, FALSE, FALSE },
- { "float64_le_quiet", 2, FALSE, FALSE },
- { "float64_lt_quiet", 2, FALSE, FALSE },
- { "floatx80_to_int32", 1, FALSE, TRUE },
- { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE },
- { "floatx80_to_int64", 1, FALSE, TRUE },
- { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE },
- { "floatx80_to_float32", 1, FALSE, TRUE },
- { "floatx80_to_float64", 1, FALSE, TRUE },
- { "floatx80_to_float128", 1, FALSE, FALSE },
- { "floatx80_round_to_int", 1, FALSE, TRUE },
- { "floatx80_add", 2, TRUE, TRUE },
- { "floatx80_sub", 2, TRUE, TRUE },
- { "floatx80_mul", 2, TRUE, TRUE },
- { "floatx80_div", 2, TRUE, TRUE },
- { "floatx80_rem", 2, FALSE, FALSE },
- { "floatx80_sqrt", 1, TRUE, TRUE },
- { "floatx80_eq", 2, FALSE, FALSE },
- { "floatx80_le", 2, FALSE, FALSE },
- { "floatx80_lt", 2, FALSE, FALSE },
- { "floatx80_eq_signaling", 2, FALSE, FALSE },
- { "floatx80_le_quiet", 2, FALSE, FALSE },
- { "floatx80_lt_quiet", 2, FALSE, FALSE },
- { "float128_to_int32", 1, FALSE, TRUE },
- { "float128_to_int32_round_to_zero", 1, FALSE, FALSE },
- { "float128_to_int64", 1, FALSE, TRUE },
- { "float128_to_int64_round_to_zero", 1, FALSE, FALSE },
- { "float128_to_float32", 1, FALSE, TRUE },
- { "float128_to_float64", 1, FALSE, TRUE },
- { "float128_to_floatx80", 1, FALSE, TRUE },
- { "float128_round_to_int", 1, FALSE, TRUE },
- { "float128_add", 2, FALSE, TRUE },
- { "float128_sub", 2, FALSE, TRUE },
- { "float128_mul", 2, FALSE, TRUE },
- { "float128_div", 2, FALSE, TRUE },
- { "float128_rem", 2, FALSE, FALSE },
- { "float128_sqrt", 1, FALSE, TRUE },
- { "float128_eq", 2, FALSE, FALSE },
- { "float128_le", 2, FALSE, FALSE },
- { "float128_lt", 2, FALSE, FALSE },
- { "float128_eq_signaling", 2, FALSE, FALSE },
- { "float128_le_quiet", 2, FALSE, FALSE },
- { "float128_lt_quiet", 2, FALSE, FALSE },
-};
-
-const flag functionExists[ NUM_FUNCTIONS ] = {
- 0,
-#ifdef SYST_INT32_TO_FLOAT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_INT32_TO_FLOAT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_INT32_TO_FLOATX80
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_INT32_TO_FLOAT128
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_INT64_TO_FLOAT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_INT64_TO_FLOAT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_INT64_TO_FLOATX80
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_INT64_TO_FLOAT128
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_TO_INT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_TO_INT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_TO_FLOAT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_TO_FLOATX80
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_TO_FLOAT128
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_ROUND_TO_INT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_ADD
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_SUB
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_MUL
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_DIV
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_REM
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_SQRT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_EQ
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_LE
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_LT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_EQ_SIGNALING
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_LE_QUIET
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT32_LT_QUIET
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_TO_INT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_TO_INT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_TO_FLOAT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_TO_FLOATX80
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_TO_FLOAT128
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_ROUND_TO_INT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_ADD
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_SUB
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_MUL
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_DIV
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_REM
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_SQRT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_EQ
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_LE
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_LT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_EQ_SIGNALING
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_LE_QUIET
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT64_LT_QUIET
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_TO_INT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_TO_INT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_TO_FLOAT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_TO_FLOAT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_TO_FLOAT128
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_ROUND_TO_INT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_ADD
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_SUB
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_MUL
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_DIV
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_REM
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_SQRT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_EQ
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_LE
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_LT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_EQ_SIGNALING
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_LE_QUIET
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOATX80_LT_QUIET
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_TO_INT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_TO_INT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_TO_FLOAT32
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_TO_FLOAT64
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_TO_FLOATX80
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_ROUND_TO_INT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_ADD
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_SUB
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_MUL
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_DIV
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_REM
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_SQRT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_EQ
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_LE
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_LT
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_EQ_SIGNALING
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_LE_QUIET
- 1,
-#else
- 0,
-#endif
-#ifdef SYST_FLOAT128_LT_QUIET
- 1,
-#else
- 0,
-#endif
-};
-
-static void
- testFunctionVariety(
- uint8 functionCode, int8 roundingPrecision, int8 roundingMode )
-{
- uint8 roundingCode;
-
- functionName = functions[ functionCode ].name;
-#ifdef FLOATX80
- if ( roundingPrecision == 32 ) {
- roundingPrecisionName = "32";
- }
- else if ( roundingPrecision == 64 ) {
- roundingPrecisionName = "64";
- }
- else if ( roundingPrecision == 80 ) {
- roundingPrecisionName = "80";
- }
- else {
- roundingPrecision = 80;
- roundingPrecisionName = 0;
- }
- floatx80_rounding_precision = roundingPrecision;
- syst_float_set_rounding_precision( roundingPrecision );
-#endif
- switch ( roundingMode ) {
- case 0:
- roundingModeName = 0;
- roundingCode = float_round_nearest_even;
- break;
- case ROUND_NEAREST_EVEN:
- roundingModeName = "nearest_even";
- roundingCode = float_round_nearest_even;
- break;
- case ROUND_TO_ZERO:
- roundingModeName = "to_zero";
- roundingCode = float_round_to_zero;
- break;
- case ROUND_DOWN:
- roundingModeName = "down";
- roundingCode = float_round_down;
- break;
- case ROUND_UP:
- roundingModeName = "up";
- roundingCode = float_round_up;
- break;
- }
- float_rounding_mode = roundingCode;
- syst_float_set_rounding_mode( roundingCode );
- fputs( "Testing ", stderr );
- writeFunctionName( stderr );
- fputs( ".\n", stderr );
- switch ( functionCode ) {
-#ifdef SYST_INT32_TO_FLOAT32
- case INT32_TO_FLOAT32:
- test_a_int32_z_float32( int32_to_float32, syst_int32_to_float32 );
- break;
-#endif
-#ifdef SYST_INT32_TO_FLOAT64
- case INT32_TO_FLOAT64:
- test_a_int32_z_float64( int32_to_float64, syst_int32_to_float64 );
- break;
-#endif
-#ifdef SYST_INT32_TO_FLOATX80
- case INT32_TO_FLOATX80:
- test_a_int32_z_floatx80( int32_to_floatx80, syst_int32_to_floatx80 );
- break;
-#endif
-#ifdef SYST_INT32_TO_FLOAT128
- case INT32_TO_FLOAT128:
- test_a_int32_z_float128( int32_to_float128, syst_int32_to_float128 );
- break;
-#endif
-#ifdef SYST_INT64_TO_FLOAT32
- case INT64_TO_FLOAT32:
- test_a_int64_z_float32( int64_to_float32, syst_int64_to_float32 );
- break;
-#endif
-#ifdef SYST_INT64_TO_FLOAT64
- case INT64_TO_FLOAT64:
- test_a_int64_z_float64( int64_to_float64, syst_int64_to_float64 );
- break;
-#endif
-#ifdef SYST_INT64_TO_FLOATX80
- case INT64_TO_FLOATX80:
- test_a_int64_z_floatx80( int64_to_floatx80, syst_int64_to_floatx80 );
- break;
-#endif
-#ifdef SYST_INT64_TO_FLOAT128
- case INT64_TO_FLOAT128:
- test_a_int64_z_float128( int64_to_float128, syst_int64_to_float128 );
- break;
-#endif
-#ifdef SYST_FLOAT32_TO_INT32
- case FLOAT32_TO_INT32:
- test_a_float32_z_int32( float32_to_int32, syst_float32_to_int32 );
- break;
-#endif
-#ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO
- case FLOAT32_TO_INT32_ROUND_TO_ZERO:
- test_a_float32_z_int32(
- float32_to_int32_round_to_zero,
- syst_float32_to_int32_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOAT32_TO_INT64
- case FLOAT32_TO_INT64:
- test_a_float32_z_int64( float32_to_int64, syst_float32_to_int64 );
- break;
-#endif
-#ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO
- case FLOAT32_TO_INT64_ROUND_TO_ZERO:
- test_a_float32_z_int64(
- float32_to_int64_round_to_zero,
- syst_float32_to_int64_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOAT32_TO_FLOAT64
- case FLOAT32_TO_FLOAT64:
- test_a_float32_z_float64(
- float32_to_float64, syst_float32_to_float64 );
- break;
-#endif
-#ifdef SYST_FLOAT32_TO_FLOATX80
- case FLOAT32_TO_FLOATX80:
- test_a_float32_z_floatx80(
- float32_to_floatx80, syst_float32_to_floatx80 );
- break;
-#endif
-#ifdef SYST_FLOAT32_TO_FLOAT128
- case FLOAT32_TO_FLOAT128:
- test_a_float32_z_float128(
- float32_to_float128, syst_float32_to_float128 );
- break;
-#endif
-#ifdef SYST_FLOAT32_ROUND_TO_INT
- case FLOAT32_ROUND_TO_INT:
- test_az_float32( float32_round_to_int, syst_float32_round_to_int );
- break;
-#endif
-#ifdef SYST_FLOAT32_ADD
- case FLOAT32_ADD:
- test_abz_float32( float32_add, syst_float32_add );
- break;
-#endif
-#ifdef SYST_FLOAT32_SUB
- case FLOAT32_SUB:
- test_abz_float32( float32_sub, syst_float32_sub );
- break;
-#endif
-#ifdef SYST_FLOAT32_MUL
- case FLOAT32_MUL:
- test_abz_float32( float32_mul, syst_float32_mul );
- break;
-#endif
-#ifdef SYST_FLOAT32_DIV
- case FLOAT32_DIV:
- test_abz_float32( float32_div, syst_float32_div );
- break;
-#endif
-#ifdef SYST_FLOAT32_REM
- case FLOAT32_REM:
- test_abz_float32( float32_rem, syst_float32_rem );
- break;
-#endif
-#ifdef SYST_FLOAT32_SQRT
- case FLOAT32_SQRT:
- test_az_float32( float32_sqrt, syst_float32_sqrt );
- break;
-#endif
-#ifdef SYST_FLOAT32_EQ
- case FLOAT32_EQ:
- test_ab_float32_z_flag( float32_eq, syst_float32_eq );
- break;
-#endif
-#ifdef SYST_FLOAT32_LE
- case FLOAT32_LE:
- test_ab_float32_z_flag( float32_le, syst_float32_le );
- break;
-#endif
-#ifdef SYST_FLOAT32_LT
- case FLOAT32_LT:
- test_ab_float32_z_flag( float32_lt, syst_float32_lt );
- break;
-#endif
-#ifdef SYST_FLOAT32_EQ_SIGNALING
- case FLOAT32_EQ_SIGNALING:
- test_ab_float32_z_flag(
- float32_eq_signaling, syst_float32_eq_signaling );
- break;
-#endif
-#ifdef SYST_FLOAT32_LE_QUIET
- case FLOAT32_LE_QUIET:
- test_ab_float32_z_flag( float32_le_quiet, syst_float32_le_quiet );
- break;
-#endif
-#ifdef SYST_FLOAT32_LT_QUIET
- case FLOAT32_LT_QUIET:
- test_ab_float32_z_flag( float32_lt_quiet, syst_float32_lt_quiet );
- break;
-#endif
-#ifdef SYST_FLOAT64_TO_INT32
- case FLOAT64_TO_INT32:
- test_a_float64_z_int32( float64_to_int32, syst_float64_to_int32 );
- break;
-#endif
-#ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO
- case FLOAT64_TO_INT32_ROUND_TO_ZERO:
- test_a_float64_z_int32(
- float64_to_int32_round_to_zero,
- syst_float64_to_int32_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOAT64_TO_INT64
- case FLOAT64_TO_INT64:
- test_a_float64_z_int64( float64_to_int64, syst_float64_to_int64 );
- break;
-#endif
-#ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO
- case FLOAT64_TO_INT64_ROUND_TO_ZERO:
- test_a_float64_z_int64(
- float64_to_int64_round_to_zero,
- syst_float64_to_int64_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOAT64_TO_FLOAT32
- case FLOAT64_TO_FLOAT32:
- test_a_float64_z_float32(
- float64_to_float32, syst_float64_to_float32 );
- break;
-#endif
-#ifdef SYST_FLOAT64_TO_FLOATX80
- case FLOAT64_TO_FLOATX80:
- test_a_float64_z_floatx80(
- float64_to_floatx80, syst_float64_to_floatx80 );
- break;
-#endif
-#ifdef SYST_FLOAT64_TO_FLOAT128
- case FLOAT64_TO_FLOAT128:
- test_a_float64_z_float128(
- float64_to_float128, syst_float64_to_float128 );
- break;
-#endif
-#ifdef SYST_FLOAT64_ROUND_TO_INT
- case FLOAT64_ROUND_TO_INT:
- test_az_float64( float64_round_to_int, syst_float64_round_to_int );
- break;
-#endif
-#ifdef SYST_FLOAT64_ADD
- case FLOAT64_ADD:
- test_abz_float64( float64_add, syst_float64_add );
- break;
-#endif
-#ifdef SYST_FLOAT64_SUB
- case FLOAT64_SUB:
- test_abz_float64( float64_sub, syst_float64_sub );
- break;
-#endif
-#ifdef SYST_FLOAT64_MUL
- case FLOAT64_MUL:
- test_abz_float64( float64_mul, syst_float64_mul );
- break;
-#endif
-#ifdef SYST_FLOAT64_DIV
- case FLOAT64_DIV:
- test_abz_float64( float64_div, syst_float64_div );
- break;
-#endif
-#ifdef SYST_FLOAT64_REM
- case FLOAT64_REM:
- test_abz_float64( float64_rem, syst_float64_rem );
- break;
-#endif
-#ifdef SYST_FLOAT64_SQRT
- case FLOAT64_SQRT:
- test_az_float64( float64_sqrt, syst_float64_sqrt );
- break;
-#endif
-#ifdef SYST_FLOAT64_EQ
- case FLOAT64_EQ:
- test_ab_float64_z_flag( float64_eq, syst_float64_eq );
- break;
-#endif
-#ifdef SYST_FLOAT64_LE
- case FLOAT64_LE:
- test_ab_float64_z_flag( float64_le, syst_float64_le );
- break;
-#endif
-#ifdef SYST_FLOAT64_LT
- case FLOAT64_LT:
- test_ab_float64_z_flag( float64_lt, syst_float64_lt );
- break;
-#endif
-#ifdef SYST_FLOAT64_EQ_SIGNALING
- case FLOAT64_EQ_SIGNALING:
- test_ab_float64_z_flag(
- float64_eq_signaling, syst_float64_eq_signaling );
- break;
-#endif
-#ifdef SYST_FLOAT64_LE_QUIET
- case FLOAT64_LE_QUIET:
- test_ab_float64_z_flag( float64_le_quiet, syst_float64_le_quiet );
- break;
-#endif
-#ifdef SYST_FLOAT64_LT_QUIET
- case FLOAT64_LT_QUIET:
- test_ab_float64_z_flag( float64_lt_quiet, syst_float64_lt_quiet );
- break;
-#endif
-#ifdef SYST_FLOATX80_TO_INT32
- case FLOATX80_TO_INT32:
- test_a_floatx80_z_int32( floatx80_to_int32, syst_floatx80_to_int32 );
- break;
-#endif
-#ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO
- case FLOATX80_TO_INT32_ROUND_TO_ZERO:
- test_a_floatx80_z_int32(
- floatx80_to_int32_round_to_zero,
- syst_floatx80_to_int32_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOATX80_TO_INT64
- case FLOATX80_TO_INT64:
- test_a_floatx80_z_int64( floatx80_to_int64, syst_floatx80_to_int64 );
- break;
-#endif
-#ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO
- case FLOATX80_TO_INT64_ROUND_TO_ZERO:
- test_a_floatx80_z_int64(
- floatx80_to_int64_round_to_zero,
- syst_floatx80_to_int64_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOATX80_TO_FLOAT32
- case FLOATX80_TO_FLOAT32:
- test_a_floatx80_z_float32(
- floatx80_to_float32, syst_floatx80_to_float32 );
- break;
-#endif
-#ifdef SYST_FLOATX80_TO_FLOAT64
- case FLOATX80_TO_FLOAT64:
- test_a_floatx80_z_float64(
- floatx80_to_float64, syst_floatx80_to_float64 );
- break;
-#endif
-#ifdef SYST_FLOATX80_TO_FLOAT128
- case FLOATX80_TO_FLOAT128:
- test_a_floatx80_z_float128(
- floatx80_to_float128, syst_floatx80_to_float128 );
- break;
-#endif
-#ifdef SYST_FLOATX80_ROUND_TO_INT
- case FLOATX80_ROUND_TO_INT:
- test_az_floatx80( floatx80_round_to_int, syst_floatx80_round_to_int );
- break;
-#endif
-#ifdef SYST_FLOATX80_ADD
- case FLOATX80_ADD:
- test_abz_floatx80( floatx80_add, syst_floatx80_add );
- break;
-#endif
-#ifdef SYST_FLOATX80_SUB
- case FLOATX80_SUB:
- test_abz_floatx80( floatx80_sub, syst_floatx80_sub );
- break;
-#endif
-#ifdef SYST_FLOATX80_MUL
- case FLOATX80_MUL:
- test_abz_floatx80( floatx80_mul, syst_floatx80_mul );
- break;
-#endif
-#ifdef SYST_FLOATX80_DIV
- case FLOATX80_DIV:
- test_abz_floatx80( floatx80_div, syst_floatx80_div );
- break;
-#endif
-#ifdef SYST_FLOATX80_REM
- case FLOATX80_REM:
- test_abz_floatx80( floatx80_rem, syst_floatx80_rem );
- break;
-#endif
-#ifdef SYST_FLOATX80_SQRT
- case FLOATX80_SQRT:
- test_az_floatx80( floatx80_sqrt, syst_floatx80_sqrt );
- break;
-#endif
-#ifdef SYST_FLOATX80_EQ
- case FLOATX80_EQ:
- test_ab_floatx80_z_flag( floatx80_eq, syst_floatx80_eq );
- break;
-#endif
-#ifdef SYST_FLOATX80_LE
- case FLOATX80_LE:
- test_ab_floatx80_z_flag( floatx80_le, syst_floatx80_le );
- break;
-#endif
-#ifdef SYST_FLOATX80_LT
- case FLOATX80_LT:
- test_ab_floatx80_z_flag( floatx80_lt, syst_floatx80_lt );
- break;
-#endif
-#ifdef SYST_FLOATX80_EQ_SIGNALING
- case FLOATX80_EQ_SIGNALING:
- test_ab_floatx80_z_flag(
- floatx80_eq_signaling, syst_floatx80_eq_signaling );
- break;
-#endif
-#ifdef SYST_FLOATX80_LE_QUIET
- case FLOATX80_LE_QUIET:
- test_ab_floatx80_z_flag( floatx80_le_quiet, syst_floatx80_le_quiet );
- break;
-#endif
-#ifdef SYST_FLOATX80_LT_QUIET
- case FLOATX80_LT_QUIET:
- test_ab_floatx80_z_flag( floatx80_lt_quiet, syst_floatx80_lt_quiet );
- break;
-#endif
-#ifdef SYST_FLOAT128_TO_INT32
- case FLOAT128_TO_INT32:
- test_a_float128_z_int32( float128_to_int32, syst_float128_to_int32 );
- break;
-#endif
-#ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO
- case FLOAT128_TO_INT32_ROUND_TO_ZERO:
- test_a_float128_z_int32(
- float128_to_int32_round_to_zero,
- syst_float128_to_int32_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOAT128_TO_INT64
- case FLOAT128_TO_INT64:
- test_a_float128_z_int64( float128_to_int64, syst_float128_to_int64 );
- break;
-#endif
-#ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO
- case FLOAT128_TO_INT64_ROUND_TO_ZERO:
- test_a_float128_z_int64(
- float128_to_int64_round_to_zero,
- syst_float128_to_int64_round_to_zero
- );
- break;
-#endif
-#ifdef SYST_FLOAT128_TO_FLOAT32
- case FLOAT128_TO_FLOAT32:
- test_a_float128_z_float32(
- float128_to_float32, syst_float128_to_float32 );
- break;
-#endif
-#ifdef SYST_FLOAT128_TO_FLOAT64
- case FLOAT128_TO_FLOAT64:
- test_a_float128_z_float64(
- float128_to_float64, syst_float128_to_float64 );
- break;
-#endif
-#ifdef SYST_FLOAT128_TO_FLOATX80
- case FLOAT128_TO_FLOATX80:
- test_a_float128_z_floatx80(
- float128_to_floatx80, syst_float128_to_floatx80 );
- break;
-#endif
-#ifdef SYST_FLOAT128_ROUND_TO_INT
- case FLOAT128_ROUND_TO_INT:
- test_az_float128( float128_round_to_int, syst_float128_round_to_int );
- break;
-#endif
-#ifdef SYST_FLOAT128_ADD
- case FLOAT128_ADD:
- test_abz_float128( float128_add, syst_float128_add );
- break;
-#endif
-#ifdef SYST_FLOAT128_SUB
- case FLOAT128_SUB:
- test_abz_float128( float128_sub, syst_float128_sub );
- break;
-#endif
-#ifdef SYST_FLOAT128_MUL
- case FLOAT128_MUL:
- test_abz_float128( float128_mul, syst_float128_mul );
- break;
-#endif
-#ifdef SYST_FLOAT128_DIV
- case FLOAT128_DIV:
- test_abz_float128( float128_div, syst_float128_div );
- break;
-#endif
-#ifdef SYST_FLOAT128_REM
- case FLOAT128_REM:
- test_abz_float128( float128_rem, syst_float128_rem );
- break;
-#endif
-#ifdef SYST_FLOAT128_SQRT
- case FLOAT128_SQRT:
- test_az_float128( float128_sqrt, syst_float128_sqrt );
- break;
-#endif
-#ifdef SYST_FLOAT128_EQ
- case FLOAT128_EQ:
- test_ab_float128_z_flag( float128_eq, syst_float128_eq );
- break;
-#endif
-#ifdef SYST_FLOAT128_LE
- case FLOAT128_LE:
- test_ab_float128_z_flag( float128_le, syst_float128_le );
- break;
-#endif
-#ifdef SYST_FLOAT128_LT
- case FLOAT128_LT:
- test_ab_float128_z_flag( float128_lt, syst_float128_lt );
- break;
-#endif
-#ifdef SYST_FLOAT128_EQ_SIGNALING
- case FLOAT128_EQ_SIGNALING:
- test_ab_float128_z_flag(
- float128_eq_signaling, syst_float128_eq_signaling );
- break;
-#endif
-#ifdef SYST_FLOAT128_LE_QUIET
- case FLOAT128_LE_QUIET:
- test_ab_float128_z_flag( float128_le_quiet, syst_float128_le_quiet );
- break;
-#endif
-#ifdef SYST_FLOAT128_LT_QUIET
- case FLOAT128_LT_QUIET:
- test_ab_float128_z_flag( float128_lt_quiet, syst_float128_lt_quiet );
- break;
-#endif
- }
- if ( ( errorStop && anyErrors ) || stop ) exitWithStatus();
-
-}
-
-void
- testFunction(
- uint8 functionCode, int8 roundingPrecisionIn, int8 roundingModeIn )
-{
- int8 roundingPrecision, roundingMode;
-
- roundingPrecision = 32;
- for (;;) {
- if ( ! functions[ functionCode ].roundingPrecision ) {
- roundingPrecision = 0;
- }
- else if ( roundingPrecisionIn ) {
- roundingPrecision = roundingPrecisionIn;
- }
- for ( roundingMode = 1;
- roundingMode < NUM_ROUNDINGMODES;
- ++roundingMode
- ) {
- if ( ! functions[ functionCode ].roundingMode ) {
- roundingMode = 0;
- }
- else if ( roundingModeIn ) {
- roundingMode = roundingModeIn;
- }
- testFunctionVariety(
- functionCode, roundingPrecision, roundingMode );
- if ( roundingModeIn || ! roundingMode ) break;
- }
- if ( roundingPrecisionIn || ! roundingPrecision ) break;
- if ( roundingPrecision == 80 ) {
- break;
- }
- else if ( roundingPrecision == 64 ) {
- roundingPrecision = 80;
- }
- else if ( roundingPrecision == 32 ) {
- roundingPrecision = 64;
- }
- }
-
-}
-
diff --git a/tools/test/testfloat/testFunction.h b/tools/test/testfloat/testFunction.h
deleted file mode 100644
index 04bf856046d4..000000000000
--- a/tools/test/testfloat/testFunction.h
+++ /dev/null
@@ -1,135 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-enum {
- INT32_TO_FLOAT32 = 1,
- INT32_TO_FLOAT64,
- INT32_TO_FLOATX80,
- INT32_TO_FLOAT128,
- INT64_TO_FLOAT32,
- INT64_TO_FLOAT64,
- INT64_TO_FLOATX80,
- INT64_TO_FLOAT128,
- FLOAT32_TO_INT32,
- FLOAT32_TO_INT32_ROUND_TO_ZERO,
- FLOAT32_TO_INT64,
- FLOAT32_TO_INT64_ROUND_TO_ZERO,
- FLOAT32_TO_FLOAT64,
- FLOAT32_TO_FLOATX80,
- FLOAT32_TO_FLOAT128,
- FLOAT32_ROUND_TO_INT,
- FLOAT32_ADD,
- FLOAT32_SUB,
- FLOAT32_MUL,
- FLOAT32_DIV,
- FLOAT32_REM,
- FLOAT32_SQRT,
- FLOAT32_EQ,
- FLOAT32_LE,
- FLOAT32_LT,
- FLOAT32_EQ_SIGNALING,
- FLOAT32_LE_QUIET,
- FLOAT32_LT_QUIET,
- FLOAT64_TO_INT32,
- FLOAT64_TO_INT32_ROUND_TO_ZERO,
- FLOAT64_TO_INT64,
- FLOAT64_TO_INT64_ROUND_TO_ZERO,
- FLOAT64_TO_FLOAT32,
- FLOAT64_TO_FLOATX80,
- FLOAT64_TO_FLOAT128,
- FLOAT64_ROUND_TO_INT,
- FLOAT64_ADD,
- FLOAT64_SUB,
- FLOAT64_MUL,
- FLOAT64_DIV,
- FLOAT64_REM,
- FLOAT64_SQRT,
- FLOAT64_EQ,
- FLOAT64_LE,
- FLOAT64_LT,
- FLOAT64_EQ_SIGNALING,
- FLOAT64_LE_QUIET,
- FLOAT64_LT_QUIET,
- FLOATX80_TO_INT32,
- FLOATX80_TO_INT32_ROUND_TO_ZERO,
- FLOATX80_TO_INT64,
- FLOATX80_TO_INT64_ROUND_TO_ZERO,
- FLOATX80_TO_FLOAT32,
- FLOATX80_TO_FLOAT64,
- FLOATX80_TO_FLOAT128,
- FLOATX80_ROUND_TO_INT,
- FLOATX80_ADD,
- FLOATX80_SUB,
- FLOATX80_MUL,
- FLOATX80_DIV,
- FLOATX80_REM,
- FLOATX80_SQRT,
- FLOATX80_EQ,
- FLOATX80_LE,
- FLOATX80_LT,
- FLOATX80_EQ_SIGNALING,
- FLOATX80_LE_QUIET,
- FLOATX80_LT_QUIET,
- FLOAT128_TO_INT32,
- FLOAT128_TO_INT32_ROUND_TO_ZERO,
- FLOAT128_TO_INT64,
- FLOAT128_TO_INT64_ROUND_TO_ZERO,
- FLOAT128_TO_FLOAT32,
- FLOAT128_TO_FLOAT64,
- FLOAT128_TO_FLOATX80,
- FLOAT128_ROUND_TO_INT,
- FLOAT128_ADD,
- FLOAT128_SUB,
- FLOAT128_MUL,
- FLOAT128_DIV,
- FLOAT128_REM,
- FLOAT128_SQRT,
- FLOAT128_EQ,
- FLOAT128_LE,
- FLOAT128_LT,
- FLOAT128_EQ_SIGNALING,
- FLOAT128_LE_QUIET,
- FLOAT128_LT_QUIET,
- NUM_FUNCTIONS
-};
-
-typedef struct {
- char *name;
- int8 numInputs;
- flag roundingPrecision, roundingMode;
-} functionT;
-extern const functionT functions[ NUM_FUNCTIONS ];
-extern const flag functionExists[ NUM_FUNCTIONS ];
-
-enum {
- ROUND_NEAREST_EVEN = 1,
- ROUND_TO_ZERO,
- ROUND_DOWN,
- ROUND_UP,
- NUM_ROUNDINGMODES
-};
-
-void testFunction( uint8, int8, int8 );
-
diff --git a/tools/test/testfloat/testLoops.c b/tools/test/testfloat/testLoops.c
deleted file mode 100644
index 8ba92f313a41..000000000000
--- a/tools/test/testfloat/testLoops.c
+++ /dev/null
@@ -1,2713 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "milieu.h"
-#include "softfloat.h"
-#include "testCases.h"
-#include "writeHex.h"
-#include "testLoops.h"
-
-volatile flag stop = FALSE;
-
-char *trueName, *testName;
-flag forever, errorStop;
-uint32 maxErrorCount = 0;
-flag checkNaNs = FALSE;
-int8 *trueFlagsPtr;
-int8 ( *testFlagsFunctionPtr )( void );
-char *functionName;
-char *roundingPrecisionName, *roundingModeName, *tininessModeName;
-flag anyErrors = FALSE;
-
-void writeFunctionName( FILE *stream )
-{
-
- fputs( functionName, stream );
- if ( roundingModeName ) {
- if ( roundingPrecisionName ) {
- fputs( ", precision ", stream );
- fputs( roundingPrecisionName, stream );
- }
- fputs( ", rounding ", stream );
- fputs( roundingModeName, stream );
- if ( tininessModeName ) {
- fputs( ", tininess ", stream );
- fputs( tininessModeName, stream );
- fputs( " rounding", stream );
- }
- }
-
-}
-
-void exitWithStatus( void )
-{
-
- exit( anyErrors ? EXIT_FAILURE : EXIT_SUCCESS );
-
-}
-
-static uint32 tenthousandsCount, errorCount = 0;
-
-static void writeTestsTotal( void )
-{
-
- if ( forever ) {
- fputs( "Unbounded tests.\n", stderr );
- }
- else {
- fprintf( stderr, "\r%d tests total.\n", testCases_total );
- }
-
-}
-
-static void writeTestsPerformed( int16 count )
-{
-
- if ( tenthousandsCount ) {
- fprintf(
- stderr, "\r%d%04d tests performed", tenthousandsCount, count );
- }
- else {
- fprintf( stderr, "\r%d tests performed", count );
- }
- if ( errorCount ) {
- fprintf(
- stderr,
- "; %d error%s found.\n",
- errorCount,
- ( errorCount == 1 ) ? "" : "s"
- );
- }
- else {
- fputs( ".\n", stderr );
- fputs( "No errors found in ", stdout );
- writeFunctionName( stdout );
- fputs( ".\n", stdout );
- fflush( stdout );
- }
-
-}
-
-static void checkEarlyExit( void )
-{
-
- ++tenthousandsCount;
- if ( stop ) {
- writeTestsPerformed( 0 );
- exitWithStatus();
- }
- fprintf( stderr, "\r%3d0000", tenthousandsCount );
-
-}
-
-static void writeErrorFound( int16 count )
-{
-
- fputc( '\r', stderr );
- if ( errorCount == 1 ) {
- fputs( "Errors found in ", stdout );
- writeFunctionName( stdout );
- fputs( ":\n", stdout );
- }
- if ( stop ) {
- writeTestsPerformed( count );
- exitWithStatus();
- }
- anyErrors = TRUE;
-
-}
-
-INLINE void writeInput_a_int32( void )
-{
-
- writeHex_bits32( testCases_a_int32, stdout );
-
-}
-
-#ifdef BITS64
-
-INLINE void writeInput_a_int64( void )
-{
-
- writeHex_bits64( testCases_a_int64, stdout );
-
-}
-
-#endif
-
-INLINE void writeInput_a_float32( void )
-{
-
- writeHex_float32( testCases_a_float32, stdout );
-
-}
-
-static void writeInputs_ab_float32( void )
-{
-
- writeHex_float32( testCases_a_float32, stdout );
- fputs( " ", stdout );
- writeHex_float32( testCases_b_float32, stdout );
-
-}
-
-INLINE void writeInput_a_float64( void )
-{
-
- writeHex_float64( testCases_a_float64, stdout );
-
-}
-
-static void writeInputs_ab_float64( void )
-{
-
- writeHex_float64( testCases_a_float64, stdout );
- fputs( " ", stdout );
- writeHex_float64( testCases_b_float64, stdout );
-
-}
-
-#ifdef FLOATX80
-
-INLINE void writeInput_a_floatx80( void )
-{
-
- writeHex_floatx80( testCases_a_floatx80, stdout );
-
-}
-
-static void writeInputs_ab_floatx80( void )
-{
-
- writeHex_floatx80( testCases_a_floatx80, stdout );
- fputs( " ", stdout );
- writeHex_floatx80( testCases_b_floatx80, stdout );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-INLINE void writeInput_a_float128( void )
-{
-
- writeHex_float128( testCases_a_float128, stdout );
-
-}
-
-static void writeInputs_ab_float128( void )
-{
-
- writeHex_float128( testCases_a_float128, stdout );
- fputs( " ", stdout );
- writeHex_float128( testCases_b_float128, stdout );
-
-}
-
-#endif
-
-static void
- writeOutputs_z_flag(
- flag trueZ, uint8 trueFlags, flag testZ, uint8 testFlags )
-{
-
- fputs( trueName, stdout );
- fputs( ": ", stdout );
- writeHex_flag( trueZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( trueFlags, stdout );
- fputs( " ", stdout );
- fputs( testName, stdout );
- fputs( ": ", stdout );
- writeHex_flag( testZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( testFlags, stdout );
- fputc( '\n', stdout );
-
-}
-
-static void
- writeOutputs_z_int32(
- int32 trueZ, uint8 trueFlags, int32 testZ, uint8 testFlags )
-{
-
- fputs( trueName, stdout );
- fputs( ": ", stdout );
- writeHex_bits32( trueZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( trueFlags, stdout );
- fputs( " ", stdout );
- fputs( testName, stdout );
- fputs( ": ", stdout );
- writeHex_bits32( testZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( testFlags, stdout );
- fputc( '\n', stdout );
-
-}
-
-#ifdef BITS64
-
-static void
- writeOutputs_z_int64(
- int64 trueZ, uint8 trueFlags, int64 testZ, uint8 testFlags )
-{
-
- fputs( trueName, stdout );
- fputs( ": ", stdout );
- writeHex_bits64( trueZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( trueFlags, stdout );
- fputs( " ", stdout );
- fputs( testName, stdout );
- fputs( ": ", stdout );
- writeHex_bits64( testZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( testFlags, stdout );
- fputc( '\n', stdout );
-
-}
-
-#endif
-
-static void
- writeOutputs_z_float32(
- float32 trueZ, uint8 trueFlags, float32 testZ, uint8 testFlags )
-{
-
- fputs( trueName, stdout );
- fputs( ": ", stdout );
- writeHex_float32( trueZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( trueFlags, stdout );
- fputs( " ", stdout );
- fputs( testName, stdout );
- fputs( ": ", stdout );
- writeHex_float32( testZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( testFlags, stdout );
- fputc( '\n', stdout );
-
-}
-
-static void
- writeOutputs_z_float64(
- float64 trueZ, uint8 trueFlags, float64 testZ, uint8 testFlags )
-{
-
- fputs( trueName, stdout );
- fputs( ": ", stdout );
- writeHex_float64( trueZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( trueFlags, stdout );
- fputs( " ", stdout );
- fputs( testName, stdout );
- fputs( ": ", stdout );
- writeHex_float64( testZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( testFlags, stdout );
- fputc( '\n', stdout );
-
-}
-
-#ifdef FLOATX80
-
-static void
- writeOutputs_z_floatx80(
- floatx80 trueZ, uint8 trueFlags, floatx80 testZ, uint8 testFlags )
-{
-
- fputs( trueName, stdout );
- fputs( ": ", stdout );
- writeHex_floatx80( trueZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( trueFlags, stdout );
- fputs( " ", stdout );
- fputs( testName, stdout );
- fputs( ": ", stdout );
- writeHex_floatx80( testZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( testFlags, stdout );
- fputc( '\n', stdout );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-static void
- writeOutputs_z_float128(
- float128 trueZ, uint8 trueFlags, float128 testZ, uint8 testFlags )
-{
-
- fputs( trueName, stdout );
- fputs( ": ", stdout );
- writeHex_float128( trueZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( trueFlags, stdout );
- fputs( "\n\t", stdout );
- fputs( testName, stdout );
- fputs( ": ", stdout );
- writeHex_float128( testZ, stdout );
- fputc( ' ', stdout );
- writeHex_float_flags( testFlags, stdout );
- fputc( '\n', stdout );
-
-}
-
-#endif
-
-INLINE flag float32_isNaN( float32 a )
-{
-
- return 0x7F800000 < ( a & 0x7FFFFFFF );
-
-}
-
-#ifdef BITS64
-
-INLINE flag float64_same( float64 a, float64 b )
-{
-
- return a == b;
-
-}
-
-INLINE flag float64_isNaN( float64 a )
-{
-
- return LIT64( 0x7FF0000000000000 ) < ( a & LIT64( 0x7FFFFFFFFFFFFFFF ) );
-
-}
-
-#else
-
-INLINE flag float64_same( float64 a, float64 b )
-{
-
- return ( a.high == b.high ) && ( a.low == b.low );
-
-}
-
-INLINE flag float64_isNaN( float64 a )
-{
- bits32 absAHigh;
-
- absAHigh = a.high & 0x7FFFFFFF;
- return
- ( 0x7FF00000 < absAHigh ) || ( ( absAHigh == 0x7FF00000 ) && a.low );
-
-}
-
-#endif
-
-#ifdef FLOATX80
-
-INLINE flag floatx80_same( floatx80 a, floatx80 b )
-{
-
- return ( a.high == b.high ) && ( a.low == b.low );
-
-}
-
-INLINE flag floatx80_isNaN( floatx80 a )
-{
-
- return ( ( a.high & 0x7FFF ) == 0x7FFF ) && a.low;
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-INLINE flag float128_same( float128 a, float128 b )
-{
-
- return ( a.high == b.high ) && ( a.low == b.low );
-
-}
-
-INLINE flag float128_isNaN( float128 a )
-{
- bits64 absAHigh;
-
- absAHigh = a.high & LIT64( 0x7FFFFFFFFFFFFFFF );
- return
- ( LIT64( 0x7FFF000000000000 ) < absAHigh )
- || ( ( absAHigh == LIT64( 0x7FFF000000000000 ) ) && a.low );
-
-}
-
-#endif
-
-void
- test_a_int32_z_float32(
- float32 trueFunction( int32 ), float32 testFunction( int32 ) )
-{
- int16 count;
- float32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_isNaN( trueZ )
- && float32_isNaN( testZ )
- && ! float32_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int32();
- fputs( " ", stdout );
- writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_a_int32_z_float64(
- float64 trueFunction( int32 ), float64 testFunction( int32 ) )
-{
- int16 count;
- float64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_isNaN( trueZ )
- && float64_isNaN( testZ )
- && ! float64_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int32();
- fputs( " ", stdout );
- writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef FLOATX80
-
-void
- test_a_int32_z_floatx80(
- floatx80 trueFunction( int32 ), floatx80 testFunction( int32 ) )
-{
- int16 count;
- floatx80 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_isNaN( trueZ )
- && floatx80_isNaN( testZ )
- && ! floatx80_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int32();
- fputs( " ", stdout );
- writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-void
- test_a_int32_z_float128(
- float128 trueFunction( int32 ), float128 testFunction( int32 ) )
-{
- int16 count;
- float128 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_isNaN( trueZ )
- && float128_isNaN( testZ )
- && ! float128_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int32();
- fputs( "\n\t", stdout );
- writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-#ifdef BITS64
-
-void
- test_a_int64_z_float32(
- float32 trueFunction( int64 ), float32 testFunction( int64 ) )
-{
- int16 count;
- float32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_isNaN( trueZ )
- && float32_isNaN( testZ )
- && ! float32_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int64();
- fputs( " ", stdout );
- writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_a_int64_z_float64(
- float64 trueFunction( int64 ), float64 testFunction( int64 ) )
-{
- int16 count;
- float64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_isNaN( trueZ )
- && float64_isNaN( testZ )
- && ! float64_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int64();
- fputs( " ", stdout );
- writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef FLOATX80
-
-void
- test_a_int64_z_floatx80(
- floatx80 trueFunction( int64 ), floatx80 testFunction( int64 ) )
-{
- int16 count;
- floatx80 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_isNaN( trueZ )
- && floatx80_isNaN( testZ )
- && ! floatx80_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int64();
- fputs( " ", stdout );
- writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-void
- test_a_int64_z_float128(
- float128 trueFunction( int64 ), float128 testFunction( int64 ) )
-{
- int16 count;
- float128 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_int64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_int64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_int64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_isNaN( trueZ )
- && float128_isNaN( testZ )
- && ! float128_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_int64();
- fputs( "\n\t", stdout );
- writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-#endif
-
-void
- test_a_float32_z_int32(
- int32 trueFunction( float32 ), int32 testFunction( float32 ) )
-{
- int16 count;
- int32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_is_signaling_nan( testCases_a_float32 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == 0x7FFFFFFF )
- && ( ( testZ == 0x7FFFFFFF )
- || ( testZ == (sbits32) 0x80000000 ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float32();
- fputs( " ", stdout );
- writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef BITS64
-
-void
- test_a_float32_z_int64(
- int64 trueFunction( float32 ), int64 testFunction( float32 ) )
-{
- int16 count;
- int64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_is_signaling_nan( testCases_a_float32 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float32();
- fputs( " ", stdout );
- writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_a_float32_z_float64(
- float64 trueFunction( float32 ), float64 testFunction( float32 ) )
-{
- int16 count;
- float64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_is_signaling_nan( testCases_a_float32 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float64_isNaN( trueZ )
- && float64_isNaN( testZ )
- && ! float64_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float32();
- fputs( " ", stdout );
- writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef FLOATX80
-
-void
- test_a_float32_z_floatx80(
- floatx80 trueFunction( float32 ), floatx80 testFunction( float32 ) )
-{
- int16 count;
- floatx80 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_is_signaling_nan( testCases_a_float32 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && floatx80_isNaN( trueZ )
- && floatx80_isNaN( testZ )
- && ! floatx80_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float32();
- fputs( "\n\t", stdout );
- writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-void
- test_a_float32_z_float128(
- float128 trueFunction( float32 ), float128 testFunction( float32 ) )
-{
- int16 count;
- float128 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_is_signaling_nan( testCases_a_float32 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float128_isNaN( trueZ )
- && float128_isNaN( testZ )
- && ! float128_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float32();
- fputs( "\n\t", stdout );
- writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_az_float32(
- float32 trueFunction( float32 ), float32 testFunction( float32 ) )
-{
- int16 count;
- float32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float32_is_signaling_nan( testCases_a_float32 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float32_isNaN( trueZ )
- && float32_isNaN( testZ )
- && ! float32_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float32();
- fputs( " ", stdout );
- writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_ab_float32_z_flag(
- flag trueFunction( float32, float32 ),
- flag testFunction( float32, float32 )
- )
-{
- int16 count;
- flag trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32, testCases_b_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32, testCases_b_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( float32_is_signaling_nan( testCases_a_float32 )
- || float32_is_signaling_nan( testCases_b_float32 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_float32();
- fputs( " ", stdout );
- writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-void
- test_abz_float32(
- float32 trueFunction( float32, float32 ),
- float32 testFunction( float32, float32 )
- )
-{
- int16 count;
- float32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_float32 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float32, testCases_b_float32 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float32, testCases_b_float32 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( float32_is_signaling_nan( testCases_a_float32 )
- || float32_is_signaling_nan( testCases_b_float32 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float32_isNaN( trueZ )
- && float32_isNaN( testZ )
- && ! float32_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_float32();
- fputs( " ", stdout );
- writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-void
- test_a_float64_z_int32(
- int32 trueFunction( float64 ), int32 testFunction( float64 ) )
-{
- int16 count;
- int32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_is_signaling_nan( testCases_a_float64 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == 0x7FFFFFFF )
- && ( ( testZ == 0x7FFFFFFF )
- || ( testZ == (sbits32) 0x80000000 ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float64();
- fputs( " ", stdout );
- writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef BITS64
-
-void
- test_a_float64_z_int64(
- int64 trueFunction( float64 ), int64 testFunction( float64 ) )
-{
- int16 count;
- int64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_is_signaling_nan( testCases_a_float64 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float64();
- fputs( " ", stdout );
- writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_a_float64_z_float32(
- float32 trueFunction( float64 ), float32 testFunction( float64 ) )
-{
- int16 count;
- float32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_is_signaling_nan( testCases_a_float64 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float32_isNaN( trueZ )
- && float32_isNaN( testZ )
- && ! float32_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float64();
- fputs( " ", stdout );
- writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef FLOATX80
-
-void
- test_a_float64_z_floatx80(
- floatx80 trueFunction( float64 ), floatx80 testFunction( float64 ) )
-{
- int16 count;
- floatx80 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_is_signaling_nan( testCases_a_float64 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && floatx80_isNaN( trueZ )
- && floatx80_isNaN( testZ )
- && ! floatx80_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float64();
- fputs( "\n\t", stdout );
- writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-void
- test_a_float64_z_float128(
- float128 trueFunction( float64 ), float128 testFunction( float64 ) )
-{
- int16 count;
- float128 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_is_signaling_nan( testCases_a_float64 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float128_isNaN( trueZ )
- && float128_isNaN( testZ )
- && ! float128_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float64();
- fputs( "\n\t", stdout );
- writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_az_float64(
- float64 trueFunction( float64 ), float64 testFunction( float64 ) )
-{
- int16 count;
- float64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float64_is_signaling_nan( testCases_a_float64 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float64_isNaN( trueZ )
- && float64_isNaN( testZ )
- && ! float64_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float64();
- fputs( " ", stdout );
- writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_ab_float64_z_flag(
- flag trueFunction( float64, float64 ),
- flag testFunction( float64, float64 )
- )
-{
- int16 count;
- flag trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64, testCases_b_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64, testCases_b_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( float64_is_signaling_nan( testCases_a_float64 )
- || float64_is_signaling_nan( testCases_b_float64 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_float64();
- fputs( " ", stdout );
- writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-void
- test_abz_float64(
- float64 trueFunction( float64, float64 ),
- float64 testFunction( float64, float64 )
- )
-{
- int16 count;
- float64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_float64 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float64, testCases_b_float64 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float64, testCases_b_float64 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( float64_is_signaling_nan( testCases_a_float64 )
- || float64_is_signaling_nan( testCases_b_float64 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float64_isNaN( trueZ )
- && float64_isNaN( testZ )
- && ! float64_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_float64();
- fputs( "\n\t", stdout );
- writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-#ifdef FLOATX80
-
-void
- test_a_floatx80_z_int32(
- int32 trueFunction( floatx80 ), int32 testFunction( floatx80 ) )
-{
- int16 count;
- int32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == 0x7FFFFFFF )
- && ( ( testZ == 0x7FFFFFFF )
- || ( testZ == (sbits32) 0x80000000 ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_floatx80();
- fputs( " ", stdout );
- writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef BITS64
-
-void
- test_a_floatx80_z_int64(
- int64 trueFunction( floatx80 ), int64 testFunction( floatx80 ) )
-{
- int16 count;
- int64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_floatx80();
- fputs( " ", stdout );
- writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_a_floatx80_z_float32(
- float32 trueFunction( floatx80 ), float32 testFunction( floatx80 ) )
-{
- int16 count;
- float32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float32_isNaN( trueZ )
- && float32_isNaN( testZ )
- && ! float32_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_floatx80();
- fputs( " ", stdout );
- writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_a_floatx80_z_float64(
- float64 trueFunction( floatx80 ), float64 testFunction( floatx80 ) )
-{
- int16 count;
- float64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float64_isNaN( trueZ )
- && float64_isNaN( testZ )
- && ! float64_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_floatx80();
- fputs( "\n\t", stdout );
- writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef FLOAT128
-
-void
- test_a_floatx80_z_float128(
- float128 trueFunction( floatx80 ), float128 testFunction( floatx80 ) )
-{
- int16 count;
- float128 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float128_isNaN( trueZ )
- && float128_isNaN( testZ )
- && ! float128_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_floatx80();
- fputs( "\n\t", stdout );
- writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_az_floatx80(
- floatx80 trueFunction( floatx80 ), floatx80 testFunction( floatx80 ) )
-{
- int16 count;
- floatx80 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && floatx80_is_signaling_nan( testCases_a_floatx80 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && floatx80_isNaN( trueZ )
- && floatx80_isNaN( testZ )
- && ! floatx80_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_floatx80();
- fputs( "\n\t", stdout );
- writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_ab_floatx80_z_flag(
- flag trueFunction( floatx80, floatx80 ),
- flag testFunction( floatx80, floatx80 )
- )
-{
- int16 count;
- flag trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80, testCases_b_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80, testCases_b_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( floatx80_is_signaling_nan( testCases_a_floatx80 )
- || floatx80_is_signaling_nan( testCases_b_floatx80 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_floatx80();
- fputs( " ", stdout );
- writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-void
- test_abz_floatx80(
- floatx80 trueFunction( floatx80, floatx80 ),
- floatx80 testFunction( floatx80, floatx80 )
- )
-{
- int16 count;
- floatx80 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_floatx80 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_floatx80, testCases_b_floatx80 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_floatx80, testCases_b_floatx80 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( floatx80_is_signaling_nan( testCases_a_floatx80 )
- || floatx80_is_signaling_nan( testCases_b_floatx80 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && floatx80_isNaN( trueZ )
- && floatx80_isNaN( testZ )
- && ! floatx80_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_floatx80();
- fputs( "\n\t", stdout );
- writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-void
- test_a_float128_z_int32(
- int32 trueFunction( float128 ), int32 testFunction( float128 ) )
-{
- int16 count;
- int32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_is_signaling_nan( testCases_a_float128 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == 0x7FFFFFFF )
- && ( ( testZ == 0x7FFFFFFF )
- || ( testZ == (sbits32) 0x80000000 ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float128();
- fputs( " ", stdout );
- writeOutputs_z_int32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef BITS64
-
-void
- test_a_float128_z_int64(
- int64 trueFunction( float128 ), int64 testFunction( float128 ) )
-{
- int16 count;
- int64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_is_signaling_nan( testCases_a_float128 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- && ( ( testZ == LIT64( 0x7FFFFFFFFFFFFFFF ) )
- || ( testZ == (sbits64) LIT64( 0x8000000000000000 ) ) )
- && ( trueFlags == float_flag_invalid )
- && ( testFlags == float_flag_invalid )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float128();
- fputs( "\n\t", stdout );
- writeOutputs_z_int64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_a_float128_z_float32(
- float32 trueFunction( float128 ), float32 testFunction( float128 ) )
-{
- int16 count;
- float32 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_is_signaling_nan( testCases_a_float128 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float32_isNaN( trueZ )
- && float32_isNaN( testZ )
- && ! float32_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float128();
- fputs( " ", stdout );
- writeOutputs_z_float32( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_a_float128_z_float64(
- float64 trueFunction( float128 ), float64 testFunction( float128 ) )
-{
- int16 count;
- float64 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float64_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_is_signaling_nan( testCases_a_float128 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float64_isNaN( trueZ )
- && float64_isNaN( testZ )
- && ! float64_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float128();
- fputs( "\n\t", stdout );
- writeOutputs_z_float64( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#ifdef FLOATX80
-
-void
- test_a_float128_z_floatx80(
- floatx80 trueFunction( float128 ), floatx80 testFunction( float128 ) )
-{
- int16 count;
- floatx80 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! floatx80_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_is_signaling_nan( testCases_a_float128 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && floatx80_isNaN( trueZ )
- && floatx80_isNaN( testZ )
- && ! floatx80_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float128();
- fputs( "\n\t", stdout );
- writeOutputs_z_floatx80( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-#endif
-
-void
- test_az_float128(
- float128 trueFunction( float128 ), float128 testFunction( float128 ) )
-{
- int16 count;
- float128 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_a_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && float128_is_signaling_nan( testCases_a_float128 ) ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float128_isNaN( trueZ )
- && float128_isNaN( testZ )
- && ! float128_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInput_a_float128();
- fputs( "\n\t", stdout );
- writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
-
-}
-
-void
- test_ab_float128_z_flag(
- flag trueFunction( float128, float128 ),
- flag testFunction( float128, float128 )
- )
-{
- int16 count;
- flag trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128, testCases_b_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128, testCases_b_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( float128_is_signaling_nan( testCases_a_float128 )
- || float128_is_signaling_nan( testCases_b_float128 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ( trueZ != testZ ) || ( trueFlags != testFlags ) ) {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_float128();
- fputs( "\n\t", stdout );
- writeOutputs_z_flag( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-void
- test_abz_float128(
- float128 trueFunction( float128, float128 ),
- float128 testFunction( float128, float128 )
- )
-{
- int16 count;
- float128 trueZ, testZ;
- uint8 trueFlags, testFlags;
-
- errorCount = 0;
- tenthousandsCount = 0;
- count = 10000;
- testCases_initSequence( testCases_sequence_ab_float128 );
- writeTestsTotal();
- while ( ! testCases_done || forever ) {
- testCases_next();
- *trueFlagsPtr = 0;
- trueZ = trueFunction( testCases_a_float128, testCases_b_float128 );
- trueFlags = *trueFlagsPtr;
- (void) testFlagsFunctionPtr();
- testZ = testFunction( testCases_a_float128, testCases_b_float128 );
- testFlags = testFlagsFunctionPtr();
- --count;
- if ( count == 0 ) {
- checkEarlyExit();
- count = 10000;
- }
- if ( ! float128_same( trueZ, testZ ) || ( trueFlags != testFlags ) ) {
- if ( ! checkNaNs
- && ( float128_is_signaling_nan( testCases_a_float128 )
- || float128_is_signaling_nan( testCases_b_float128 ) )
- ) {
- trueFlags |= float_flag_invalid;
- }
- if ( ! checkNaNs
- && float128_isNaN( trueZ )
- && float128_isNaN( testZ )
- && ! float128_is_signaling_nan( testZ )
- && ( trueFlags == testFlags )
- ) {
- /* no problem */
- }
- else {
- ++errorCount;
- writeErrorFound( 10000 - count );
- writeInputs_ab_float128();
- fputs( "\n\t", stdout );
- writeOutputs_z_float128( trueZ, trueFlags, testZ, testFlags );
- fflush( stdout );
- if ( errorCount == maxErrorCount ) goto exit;
- }
- }
- }
- exit:
- writeTestsPerformed( 10000 - count );
- return;
-
-}
-
-#endif
-
diff --git a/tools/test/testfloat/testLoops.h b/tools/test/testfloat/testLoops.h
deleted file mode 100644
index c3b08477f0ed..000000000000
--- a/tools/test/testfloat/testLoops.h
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <stdio.h>
-
-extern volatile flag stop;
-
-extern char *trueName, *testName;
-extern flag forever, errorStop;
-extern uint32 maxErrorCount;
-extern flag checkNaNs;
-extern int8 *trueFlagsPtr;
-extern int8 ( *testFlagsFunctionPtr )( void );
-extern char *functionName;
-extern char *roundingPrecisionName, *roundingModeName, *tininessModeName;
-extern flag anyErrors;
-
-void writeFunctionName( FILE * );
-void exitWithStatus( void );
-
-void test_a_int32_z_float32( float32 ( int32 ), float32 ( int32 ) );
-void test_a_int32_z_float64( float64 ( int32 ), float64 ( int32 ) );
-#ifdef FLOATX80
-void test_a_int32_z_floatx80( floatx80 ( int32 ), floatx80 ( int32 ) );
-#endif
-#ifdef FLOAT128
-void test_a_int32_z_float128( float128 ( int32 ), float128 ( int32 ) );
-#endif
-#ifdef BITS64
-void test_a_int64_z_float32( float32 ( int64 ), float32 ( int64 ) );
-void test_a_int64_z_float64( float64 ( int64 ), float64 ( int64 ) );
-#ifdef FLOATX80
-void test_a_int64_z_floatx80( floatx80 ( int64 ), floatx80 ( int64 ) );
-#endif
-#ifdef FLOAT128
-void test_a_int64_z_float128( float128 ( int64 ), float128 ( int64 ) );
-#endif
-#endif
-
-void test_a_float32_z_int32( int32 ( float32 ), int32 ( float32 ) );
-#ifdef BITS64
-void test_a_float32_z_int64( int64 ( float32 ), int64 ( float32 ) );
-#endif
-void test_a_float32_z_float64( float64 ( float32 ), float64 ( float32 ) );
-#ifdef FLOATX80
-void test_a_float32_z_floatx80( floatx80 ( float32 ), floatx80 ( float32 ) );
-#endif
-#ifdef FLOAT128
-void test_a_float32_z_float128( float128 ( float32 ), float128 ( float32 ) );
-#endif
-void test_az_float32( float32 ( float32 ), float32 ( float32 ) );
-void
- test_ab_float32_z_flag(
- flag ( float32, float32 ), flag ( float32, float32 ) );
-void
- test_abz_float32(
- float32 ( float32, float32 ), float32 ( float32, float32 ) );
-
-void test_a_float64_z_int32( int32 ( float64 ), int32 ( float64 ) );
-#ifdef BITS64
-void test_a_float64_z_int64( int64 ( float64 ), int64 ( float64 ) );
-#endif
-void test_a_float64_z_float32( float32 ( float64 ), float32 ( float64 ) );
-#ifdef FLOATX80
-void test_a_float64_z_floatx80( floatx80 ( float64 ), floatx80 ( float64 ) );
-#endif
-#ifdef FLOAT128
-void test_a_float64_z_float128( float128 ( float64 ), float128 ( float64 ) );
-#endif
-void test_az_float64( float64 ( float64 ), float64 ( float64 ) );
-void
- test_ab_float64_z_flag(
- flag ( float64, float64 ), flag ( float64, float64 ) );
-void
- test_abz_float64(
- float64 ( float64, float64 ), float64 ( float64, float64 ) );
-
-#ifdef FLOATX80
-
-void test_a_floatx80_z_int32( int32 ( floatx80 ), int32 ( floatx80 ) );
-#ifdef BITS64
-void test_a_floatx80_z_int64( int64 ( floatx80 ), int64 ( floatx80 ) );
-#endif
-void test_a_floatx80_z_float32( float32 ( floatx80 ), float32 ( floatx80 ) );
-void test_a_floatx80_z_float64( float64 ( floatx80 ), float64 ( floatx80 ) );
-#ifdef FLOAT128
-void
- test_a_floatx80_z_float128( float128 ( floatx80 ), float128 ( floatx80 ) );
-#endif
-void test_az_floatx80( floatx80 ( floatx80 ), floatx80 ( floatx80 ) );
-void
- test_ab_floatx80_z_flag(
- flag ( floatx80, floatx80 ), flag ( floatx80, floatx80 ) );
-void
- test_abz_floatx80(
- floatx80 ( floatx80, floatx80 ), floatx80 ( floatx80, floatx80 ) );
-
-#endif
-
-#ifdef FLOAT128
-
-void test_a_float128_z_int32( int32 ( float128 ), int32 ( float128 ) );
-#ifdef BITS64
-void test_a_float128_z_int64( int64 ( float128 ), int64 ( float128 ) );
-#endif
-void test_a_float128_z_float32( float32 ( float128 ), float32 ( float128 ) );
-void test_a_float128_z_float64( float64 ( float128 ), float64 ( float128 ) );
-#ifdef FLOATX80
-void
- test_a_float128_z_floatx80( floatx80 ( float128 ), floatx80 ( float128 ) );
-#endif
-void test_az_float128( float128 ( float128 ), float128 ( float128 ) );
-void
- test_ab_float128_z_flag(
- flag ( float128, float128 ), flag ( float128, float128 ) );
-void
- test_abz_float128(
- float128 ( float128, float128 ), float128 ( float128, float128 ) );
-
-#endif
-
diff --git a/tools/test/testfloat/testfloat-history.txt b/tools/test/testfloat/testfloat-history.txt
deleted file mode 100644
index 61520b3b678a..000000000000
--- a/tools/test/testfloat/testfloat-history.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-
-History of Major Changes to TestFloat, up to Release 2a
-
-John R. Hauser
-1998 December 17
-
-
-The TestFloat releases parallel those of SoftFloat, on which TestFloat is
-based. Each TestFloat release also incorporates all bug fixes from the
-corresponding release of SoftFloat.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 2a (1998 December)
-
--- Added support for testing conversions between floating-point and 64-bit
- integers.
-
--- Improved the makefiles.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 2 (1997 June)
-
--- Integrated the generation of test cases and the checking of system
- results into a single program. (Before they were separate programs,
- normally joined by explicit command-line pipes.)
-
--- Improved the sequence of test cases.
-
--- Added support for testing extended double precision and quadruple
- precision.
-
--- Made program output more readable, and added new command arguments.
-
--- Reduced dependence on the quality of the standard `random' function for
- generating test cases. (Previously naively expected `random' to be able
- to generate good random bits for the entire machine word width.)
-
--- Created `testsoftfloat', with its own simpler complete software floating-
- point (``slowfloat'') for comparison purposes.
-
--- Made some changes to the source file structure, including renaming
- `environment.h' to `milieu.h' (to avoid confusion with environment
- variables).
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 1a (1996 July)
-
--- Added the `-tininessbefore' and `-tininessafter' options to control
- whether tininess should be detected before or after rounding.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Release 1 (1996 July)
-
--- Original release.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
diff --git a/tools/test/testfloat/testfloat-source.txt b/tools/test/testfloat/testfloat-source.txt
deleted file mode 100644
index 8c5efa9136f1..000000000000
--- a/tools/test/testfloat/testfloat-source.txt
+++ /dev/null
@@ -1,444 +0,0 @@
-
-TestFloat Release 2a Source Documentation
-
-John R. Hauser
-1998 December 16
-
-
--------------------------------------------------------------------------------
-Introduction
-
-TestFloat is a program for testing that a floating-point implementation
-conforms to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
-All standard operations supported by the system can be tested, except for
-conversions to and from decimal. Any of the following machine formats can
-be tested: single precision, double precision, extended double precision,
-and/or quadruple precision. Testing extended double-precision or quadruple-
-precision formats requires a C compiler that supports 64-bit integer
-arithmetic.
-
-This document gives information needed for compiling and/or porting
-TestFloat.
-
-The source code for TestFloat is intended to be relatively machine-
-independent. TestFloat is written in C, and should be compilable using
-any ISO/ANSI C compiler. At the time of this writing, the program has
-been successfully compiled using the GNU C Compiler (`gcc') for several
-platforms. Because ISO/ANSI C does not provide access to some features
-of IEC/IEEE floating-point such as the exception flags, porting TestFloat
-unfortunately involves some machine-dependent coding.
-
-TestFloat depends on SoftFloat, which is a software implementation of
-floating-point that conforms to the IEC/IEEE Standard. SoftFloat is not
-included with the TestFloat sources. It can be obtained from the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/SoftFloat.html'.
-
-In addition to a program for testing a machine's floating-point, the
-TestFloat package includes a variant for testing SoftFloat called
-`testsoftfloat'. The sources for both programs are intermixed, and both are
-described here.
-
-The first release of TestFloat (Release 1) was called _FloatTest_. The old
-name has been obsolete for some time.
-
-
--------------------------------------------------------------------------------
-Limitations
-
-TestFloat as written requires an ISO/ANSI-style C compiler. No attempt has
-been made to accommodate compilers that are not ISO-conformant. Older ``K&R-
-style'' compilers are not adequate for compiling TestFloat. All testing I
-have done so far has been with the GNU C Compiler. Compilation with other
-compilers should be possible but has not been tested.
-
-The TestFloat sources assume that source code file names can be longer than
-8 characters. In order to compile under an MS-DOS-style system, many of the
-source files will need to be renamed, and the source and makefiles edited
-appropriately. Once compiled, the TestFloat program does not depend on the
-existence of long file names.
-
-The underlying machine is assumed to be binary with a word size that is a
-power of 2. Bytes are 8 bits. Testing of extended double-precision and
-quadruple-precision formats depends on the C compiler implementing a 64-bit
-integer type. If the largest integer type supported by the C compiler is
-32 bits, only single- and double-precision operations can be tested.
-
-
--------------------------------------------------------------------------------
-Contents
-
- Introduction
- Limitations
- Contents
- Legal Notice
- TestFloat Source Directory Structure
- Target-Independent Modules
- Target-Specific Modules
- Target-Specific Header Files
- processors/*.h
- testfloat/*/milieu.h
- Target-Specific Floating-Point Subroutines
- Steps to Creating the TestFloat Executables
- Improving the Random Number Generator
- Contact Information
-
-
-
--------------------------------------------------------------------------------
-Legal Notice
-
-TestFloat was written by John R. Hauser.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-
--------------------------------------------------------------------------------
-TestFloat Source Directory Structure
-
-Because TestFloat is targeted to multiple platforms, its source code
-is slightly scattered between target-specific and target-independent
-directories and files. The directory structure is as follows:
-
- processors
- testfloat
- templates
- 386-Win32-gcc
- SPARC-Solaris-gcc
-
-The two topmost directories and their contents are:
-
- testfloat - Most of the source code needed for TestFloat.
- processors - Target-specific header files that are not specific to
- TestFloat.
-
-Within the `testfloat' directory are subdirectories for each of the
-targeted platforms. The TestFloat source code is distributed with targets
-`386-Win32-gcc' and `SPARC-Solaris-gcc' (and perhaps others) already
-prepared. These can be used as examples for porting to new targets. Source
-files that are not within these target-specific subdirectories are intended
-to be target-independent.
-
-The naming convention used for the target-specific directories is
-`<processor>-<executable-type>-<compiler>'. The names of the supplied
-target directories should be interpreted as follows:
-
- <processor>:
- 386 - Intel 386-compatible processor.
- SPARC - SPARC processor (as used by Sun machines).
- <executable-type>:
- Win32 - Microsoft Win32 executable.
- Solaris - Sun Solaris executable.
- <compiler>:
- gcc - GNU C Compiler.
-
-You do not need to maintain this convention if you do not want to.
-
-Alongside the supplied target-specific directories there is a `templates'
-directory containing a set of ``generic'' target-specific source files.
-A new target directory can be created by copying the `templates' directory
-and editing the files inside. (Complete instructions for porting TestFloat
-to a new target are in the section _Steps_to_Creating_the_TestFloat_
-_Executables_.) Note that the `templates' directory will not work as a
-target directory without some editing. To avoid confusion, it would be wise
-to refrain from editing the files inside `templates' directly.
-
-In addition to the distributed sources, TestFloat depends on the existence
-of an appropriately-compiled SoftFloat binary and the corresponding header
-file `softfloat.h'. SoftFloat is not included with the TestFloat sources.
-It can be obtained from the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
-arithmetic/SoftFloat.html'.
-
-As distributed, the makefiles for TestFloat assume the existence of three
-sibling directories:
-
- processors
- softfloat
- testfloat
-
-Only the `processors' and `testfloat' directories are included in the
-TestFloat package. The `softfloat' directory is assumed to contain a
-target-specific subdirectory within which the SoftFloat header file and
-compiled binary can be found. (See the source documentation accompanying
-SoftFloat.) The `processors' directory distributed with TestFloat is
-intended to be identical to that included with the SoftFloat source.
-
-These are the defaults, but other organizations of the sources are possible.
-The TestFloat makefiles and `milieu.h' files (see below) are easily edited
-to accommodate other arrangements.
-
-
--------------------------------------------------------------------------------
-Target-Independent Modules
-
-The TestFloat program is composed of a number of modules, some target-
-specific and some target-independent. The target-independent modules are as
-follows:
-
--- The `fail' module provides a common routine for writing an error message
- and aborting.
-
--- The `random' module generates random integer values.
-
--- The `writeHex' module defines routines for writing the various types in
- the hexadecimal form used by TestFloat.
-
--- The `testCases' module generates test cases for the various types.
-
--- The `testLoops' module contains various routines for exercising two
- implementations of a function and reporting any differences observed.
-
--- The `slowfloat' module provides the simple floating-point implementation
- used by `testsoftfloat' for comparing against SoftFloat. The heart
- of `slowfloat' is found in either `slowfloat-32' or `slowfloat-64',
- depending on whether the `BITS64' macro is defined.
-
--- The `systfloat' module gives a SoftFloat-like interface to the machine's
- floating-point.
-
--- The `testFunction' module implements `testfloat's main loop for testing a
- function for all of the relevant rounding modes and rounding precisions.
- (The `testsoftfloat' program contains its own version of this code.)
-
--- The `testfloat' and `testsoftfloat' modules are the main modules for the
- `testfloat' and `testsoftfloat' programs.
-
-Except possibly for `systfloat', these modules should not need to be
-modified.
-
-The `systfloat' module uses the floating-point operations of the C language
-to access a machine's floating-point. Unfortunately, some IEC/IEEE
-floating-point operations are not accessible within ISO/ANSI C. The
-following machine functions cannot be tested unless an alternate `systfloat'
-module is provided:
-
- <float>_to_int32 (rounded according to rounding mode)
- <float>_to_int64 (rounded according to rounding mode)
- <float>_round_to_int
- <float>_rem
- <float>_sqrt, except float64_sqrt
- <float>_eq_signaling
- <float>_le_quiet
- <float>_lt_quiet
-
-The `-list' option to `testfloat' will show the operations the program is
-prepared to test. The section _Target-Specific_Floating-Point_Subroutines_
-later in this document explains how to create a target-specific `systfloat'
-module to change the set of testable functions.
-
-
--------------------------------------------------------------------------------
-Target-Specific Modules
-
-No target-specific modules are needed for `testsoftfloat'.
-
-The `testfloat' program uses two target-specific modules:
-
--- The `systmodes' module defines functions for setting the modes
- controlling the system's floating-point, including the rounding mode and
- the rounding precision for extended double precision.
-
--- The `systflags' module provides a function for clearing and examining the
- system's floating-point exception flags.
-
-These modules must be supplied for each target. They can be implemented in
-any way desired, so long as all is reflected in the target's makefile. For
-the targets that come with the distributed source, each of these modules is
-implemented as a single assembly language or C language source file.
-
-
--------------------------------------------------------------------------------
-Target-Specific Header Files
-
-The purpose of the two target-specific header files is detailed below.
-In the following, the `*' symbol is used in place of the name of a specific
-target, such as `386-Win32-gcc' or `SPARC-Solaris-gcc', or in place of some
-other text as explained below.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-processors/*.h
-
-The target-specific `processors' header file defines integer types
-of various sizes, and also defines certain C preprocessor macros that
-characterize the target. The two examples supplied are `386-gcc.h' and
-`SPARC-gcc.h'. The naming convention used for processor header files is
-`<processor>-<compiler>.h'. The `processors' header file used to compile
-TestFloat should be the same as that used to compile SoftFloat.
-
-If 64-bit integers are supported by the compiler, the macro name `BITS64'
-should be defined here along with the corresponding 64-bit integer
-types. In addition, the function-like macro `LIT64' must be defined for
-constructing 64-bit integer literals (constants). The `LIT64' macro is used
-consistently in the TestFloat code to annotate 64-bit literals.
-
-If an inlining attribute (such as an `inline' keyword) is provided by the
-compiler, the macro `INLINE' should be defined to the appropriate keyword.
-If not, `INLINE' can be set to the keyword `static'. The `INLINE' macro
-appears in the TestFloat source code before every function that should be
-inlined by the compiler.
-
-For maximum flexibility, the TestFloat source files do not include the
-`processors' header file directly; rather, this file is included by the
-target-specific `milieu.h' header, and `milieu.h' is included by the source
-files.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-testfloat/*/milieu.h
-
-The `milieu.h' header file provides declarations that are needed to
-compile TestFloat. In particular, it is through this header file that
-the appropriate `processors' header is included to characterize the target
-processor. In addition, deviations from ISO/ANSI C by the compiler (such as
-names not properly declared in system header files) are corrected in this
-header if possible.
-
-If the preprocessor macro `BITS64' is defined in the `processors' header
-file but only the 32-bit version of SoftFloat is actually used, the `BITS64'
-macro should be undefined here after the `processors' header has defined it.
-
-If the C compiler implements the `long double' floating-point type of C
-as extended double precision, then `LONG_DOUBLE_IS_FLOATX80' should be
-defined here. Alternatively, if the C `long double' type is implemented as
-quadruple precision, `LONG_DOUBLE_IS_FLOAT128' should be defined. At most
-one of these macros should be defined. A C compiler is allowed to implement
-`long double' the same as `double', in which case neither of these macros
-should be defined.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Target-Specific Floating-Point Subroutines
-
-This section applies only to `testfloat' and not to `testsoftfloat'.
-
-By default, TestFloat tests a machine's floating-point by testing the
-floating-point operations of the C language. Unfortunately, some IEC/IEEE
-floating-point operations are not defined within ISO/ANSI C. If a machine
-implements such ``non-C'' operations, target-specific subroutines for
-the operations can be supplied to allow TestFloat to test these machine
-features. Typically, such subroutines will need to be written in assembly
-language, although equivalent functions can sometimes be found among the
-system's software libraries.
-
-The following machine functions cannot be tested by TestFloat unless target-
-specific subroutines are supplied for them:
-
- <float>_to_int32 (rounded according to rounding mode)
- <float>_to_int64 (rounded according to rounding mode)
- <float>_round_to_int
- <float>_rem
- <float>_sqrt, except float64_sqrt
- <float>_eq_signaling
- <float>_le_quiet
- <float>_lt_quiet
-
-In addition to these, none of the `floatx80' functions can be tested by
-default if the C `long double' type is something other than extended double
-precision; and likewise, none of the `float128' functions can be tested by
-default if `long double' is not quadruple precision. Since `long double'
-cannot be both extended double precision and quadruple precision at the
-same time, at least one of these types cannot be tested by TestFloat without
-appropriate subroutines being supplied for that type. (On the other hand,
-few systems implement _both_ extended double-precision and quadruple-
-precision floating-point; and unless a system does implement both, it does
-not need both tested.)
-
-Note that the `-list' option to `testfloat' will show the operations
-TestFloat is prepared to test.
-
-TestFloat's `systfloat' module supplies the system version of the functions
-to be tested. The names of the `systfloat' subroutines are the same as the
-function names used as arguments to the `testfloat' command but with `syst_'
-prefixed--thus, for example, `syst_float32_add' and `syst_int32_to_float32'.
-The default `systfloat' module maps these system functions to the standard
-C operations; so `syst_float32_add', for example, is implemented using the
-C `+' operation for the single-precision `float' type. For each system
-function supplied by `systfloat', a corresponding `SYST_<function>'
-preprocessor macro is defined in `systfloat.h' to indicate that the function
-exists to be tested (e.g., `SYST_FLOAT32_ADD'). The `systfloat.h' header
-file also declares function prototypes for the `systfloat' functions.
-
-(The `systfloat.h' file that comes with the TestFloat package declares
-prototypes for all of the possible `systfloat' functions, whether defined in
-`systfloat' or not. There is no penalty for declaring a function prototype
-that is never used.)
-
-A target-specific version of the `systfloat' module can easily be created to
-replace the generic one. This in fact has been done for the example targets
-`386-Win32-gcc' and `SPARC-Solaris-gcc'. For each target, an assembly
-language `systfloat.S' has been created in the target directory along with
-a corresponding `systfloat.h' header file defining the `SYST_<function>'
-macros for the functions implemented. The makefiles of the targets have
-been edited to use these target-specific versions of `systfloat' rather than
-the generic one.
-
-The `systfloat' modules of the example targets have been written entirely
-in assembly language in order to bypass any peculiarities of the C compiler.
-Although this is probably a good idea, it is certainly not required.
-
-
--------------------------------------------------------------------------------
-Steps to Creating the TestFloat Executables
-
-Porting and/or compiling TestFloat involves the following steps:
-
-1. Port SoftFloat and create a SoftFloat binary. (Refer to the
- documentation accompanying SoftFloat.)
-
-2. If one does not already exist, create an appropriate target-specific
- subdirectory under `testfloat' by copying the given `templates'
- directory. The remaining steps occur within the target-specific
- subdirectory.
-
-3. Edit the files `milieu.h' and `Makefile' to reflect the current
- environment.
-
-4. Make `testsoftfloat' by executing `make testsoftfloat' (or `make
- testsoftfloat.exe', or whatever the `testsoftfloat' executable is
- called). Verify that SoftFloat is working correctly by testing it with
- `testsoftfloat'.
-
-If you only wanted `testsoftfloat', you are done. The steps for `testfloat'
-continue:
-
-5. In the target-specific subdirectory, implement the `systmodes' and
- `systflags' modules. (The `syst_float_set_rounding_precision' function
- need not do anything if the system does not support extended double
- precision.)
-
-6. If the target machine supports standard floating-point functions that are
- not accessible within ISO/ANSI C, or if the C compiler cannot be trusted
- to use the machine's floating-point directly, create a target-specific
- `systfloat' module.
-
-7. In the target-specific subdirectory, execute `make'.
-
-
--------------------------------------------------------------------------------
-Improving the Random Number Generator
-
-If you are serious about using TestFloat for testing floating-point, you
-should consider replacing the supplied `random.c' with a better target-
-specific one. The standard C `rand' function is rather poor on some
-systems, and consequently `random.c' has been written to assume very little
-about the quality of `rand'. As a result, the `rand' function is called
-more frequently than it might need to be, shortening the time before
-the random number generator repeats, and possibly wasting time as well.
-If `rand' is better on your system, or if another better random number
-generator is available (such as `rand48' on most Unix systems), TestFloat
-can be improved by overriding the given `random.c' with a target-specific
-one.
-
-
--------------------------------------------------------------------------------
-Contact Information
-
-At the time of this writing, the most up-to-date information about
-TestFloat and the latest release can be found at the Web page `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-
diff --git a/tools/test/testfloat/testfloat.c b/tools/test/testfloat/testfloat.c
deleted file mode 100644
index 5a19d8811b69..000000000000
--- a/tools/test/testfloat/testfloat.c
+++ /dev/null
@@ -1,299 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include "milieu.h"
-#include "fail.h"
-#include "softfloat.h"
-#include "testCases.h"
-#include "testLoops.h"
-#include "systflags.h"
-#include "testFunction.h"
-
-static void catchSIGINT( int signalCode )
-{
-
- if ( stop ) exit( EXIT_FAILURE );
- stop = TRUE;
-
-}
-
-int
-main( int argc, char **argv )
-{
- char *argPtr;
- flag functionArgument;
- uint8 functionCode;
- int8 operands, roundingPrecision, roundingMode;
-
- fail_programName = "testfloat";
- if ( argc <= 1 ) goto writeHelpMessage;
- testCases_setLevel( 1 );
- trueName = "soft";
- testName = "syst";
- errorStop = FALSE;
- forever = FALSE;
- maxErrorCount = 20;
- trueFlagsPtr = &float_exception_flags;
- testFlagsFunctionPtr = syst_float_flags_clear;
- tininessModeName = 0;
- functionArgument = FALSE;
- functionCode = 0;
- operands = 0;
- roundingPrecision = 0;
- roundingMode = 0;
- --argc;
- ++argv;
- while ( argc && ( argPtr = argv[ 0 ] ) ) {
- if ( argPtr[ 0 ] == '-' ) ++argPtr;
- if ( strcmp( argPtr, "help" ) == 0 ) {
- writeHelpMessage:
- fputs(
-"testfloat [<option>...] <function>\n"
-" <option>: (* is default)\n"
-" -help --Write this message and exit.\n"
-" -list --List all testable functions and exit.\n"
-" -level <num> --Testing level <num> (1 or 2).\n"
-" * -level 1\n"
-" -errors <num> --Stop each function test after <num> errors.\n"
-" * -errors 20\n"
-" -errorstop --Exit after first function with any error.\n"
-" -forever --Test one function repeatedly (implies `-level 2').\n"
-" -checkNaNs --Check for bitwise correctness of NaN results.\n"
-#ifdef FLOATX80
-" -precision32 --Only test rounding precision equivalent to float32.\n"
-" -precision64 --Only test rounding precision equivalent to float64.\n"
-" -precision80 --Only test maximum rounding precision.\n"
-#endif
-" -nearesteven --Only test rounding to nearest/even.\n"
-" -tozero --Only test rounding to zero.\n"
-" -down --Only test rounding down.\n"
-" -up --Only test rounding up.\n"
-" -tininessbefore --Underflow tininess detected before rounding.\n"
-" -tininessafter --Underflow tininess detected after rounding.\n"
-" <function>:\n"
-" int32_to_<float> <float>_add <float>_eq\n"
-" <float>_to_int32 <float>_sub <float>_le\n"
-" <float>_to_int32_round_to_zero <float>_mul <float>_lt\n"
-#ifdef BITS64
-" int64_to_<float> <float>_div <float>_eq_signaling\n"
-" <float>_to_int64 <float>_rem <float>_le_quiet\n"
-" <float>_to_int64_round_to_zero <float>_lt_quiet\n"
-" <float>_to_<float>\n"
-" <float>_round_to_int\n"
-" <float>_sqrt\n"
-#else
-" <float>_to_<float> <float>_div <float>_eq_signaling\n"
-" <float>_round_to_int <float>_rem <float>_le_quiet\n"
-" <float>_sqrt <float>_lt_quiet\n"
-#endif
-" -all1 --All 1-operand functions.\n"
-" -all2 --All 2-operand functions.\n"
-" -all --All functions.\n"
-" <float>:\n"
-" float32 --Single precision.\n"
-" float64 --Double precision.\n"
-#ifdef FLOATX80
-" floatx80 --Extended double precision.\n"
-#endif
-#ifdef FLOAT128
-" float128 --Quadruple precision.\n"
-#endif
- ,
- stdout
- );
- return EXIT_SUCCESS;
- }
- else if ( strcmp( argPtr, "list" ) == 0 ) {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( functionExists[ functionCode ] ) {
- puts( functions[ functionCode ].name );
- }
- }
- return EXIT_SUCCESS;
- }
- else if ( strcmp( argPtr, "level" ) == 0 ) {
- if ( argc < 2 ) goto optionError;
- testCases_setLevel( atoi( argv[ 1 ] ) );
- --argc;
- ++argv;
- }
- else if ( strcmp( argPtr, "level1" ) == 0 ) {
- testCases_setLevel( 1 );
- }
- else if ( strcmp( argPtr, "level2" ) == 0 ) {
- testCases_setLevel( 2 );
- }
- else if ( strcmp( argPtr, "errors" ) == 0 ) {
- if ( argc < 2 ) {
- optionError:
- fail( "`%s' option requires numeric argument", argv[ 0 ] );
- }
- maxErrorCount = atoi( argv[ 1 ] );
- --argc;
- ++argv;
- }
- else if ( strcmp( argPtr, "errorstop" ) == 0 ) {
- errorStop = TRUE;
- }
- else if ( strcmp( argPtr, "forever" ) == 0 ) {
- testCases_setLevel( 2 );
- forever = TRUE;
- }
- else if ( ( strcmp( argPtr, "checkNaNs" ) == 0 )
- || ( strcmp( argPtr, "checknans" ) == 0 ) ) {
- checkNaNs = TRUE;
- }
-#ifdef FLOATX80
- else if ( strcmp( argPtr, "precision32" ) == 0 ) {
- roundingPrecision = 32;
- }
- else if ( strcmp( argPtr, "precision64" ) == 0 ) {
- roundingPrecision = 64;
- }
- else if ( strcmp( argPtr, "precision80" ) == 0 ) {
- roundingPrecision = 80;
- }
-#endif
- else if ( ( strcmp( argPtr, "nearesteven" ) == 0 )
- || ( strcmp( argPtr, "nearest_even" ) == 0 ) ) {
- roundingMode = ROUND_NEAREST_EVEN;
- }
- else if ( ( strcmp( argPtr, "tozero" ) == 0 )
- || ( strcmp( argPtr, "to_zero" ) == 0 ) ) {
- roundingMode = ROUND_TO_ZERO;
- }
- else if ( strcmp( argPtr, "down" ) == 0 ) {
- roundingMode = ROUND_DOWN;
- }
- else if ( strcmp( argPtr, "up" ) == 0 ) {
- roundingMode = ROUND_UP;
- }
- else if ( strcmp( argPtr, "tininessbefore" ) == 0 ) {
- float_detect_tininess = float_tininess_before_rounding;
- }
- else if ( strcmp( argPtr, "tininessafter" ) == 0 ) {
- float_detect_tininess = float_tininess_after_rounding;
- }
- else if ( strcmp( argPtr, "all1" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 1;
- }
- else if ( strcmp( argPtr, "all2" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 2;
- }
- else if ( strcmp( argPtr, "all" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 0;
- }
- else {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( strcmp( argPtr, functions[ functionCode ].name ) == 0 ) {
- break;
- }
- }
- if ( functionCode == NUM_FUNCTIONS ) {
- fail( "Invalid option or function `%s'", argv[ 0 ] );
- }
- if ( ! functionExists[ functionCode ] ) {
- fail(
- "Function `%s' is not supported or cannot be tested",
- argPtr
- );
- }
- functionArgument = TRUE;
- }
- --argc;
- ++argv;
- }
- if ( ! functionArgument ) fail( "Function argument required" );
- (void) signal( SIGINT, catchSIGINT );
- (void) signal( SIGTERM, catchSIGINT );
- if ( functionCode ) {
- if ( forever ) {
- if ( ! roundingPrecision ) roundingPrecision = 80;
- if ( ! roundingMode ) roundingMode = ROUND_NEAREST_EVEN;
- }
- testFunction( functionCode, roundingPrecision, roundingMode );
- }
- else {
- if ( forever ) {
- fail( "Can only test one function with `-forever' option" );
- }
- if ( operands == 1 ) {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( functionExists[ functionCode ]
- && ( functions[ functionCode ].numInputs == 1 ) ) {
- testFunction(
- functionCode, roundingPrecision, roundingMode );
- }
- }
- }
- else if ( operands == 2 ) {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( functionExists[ functionCode ]
- && ( functions[ functionCode ].numInputs == 2 ) ) {
- testFunction(
- functionCode, roundingPrecision, roundingMode );
- }
- }
- }
- else {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( functionExists[ functionCode ] ) {
- testFunction(
- functionCode, roundingPrecision, roundingMode );
- }
- }
- }
- }
- exitWithStatus();
-
-}
-
diff --git a/tools/test/testfloat/testfloat.txt b/tools/test/testfloat/testfloat.txt
deleted file mode 100644
index 3c5e837d7bd9..000000000000
--- a/tools/test/testfloat/testfloat.txt
+++ /dev/null
@@ -1,771 +0,0 @@
-
-TestFloat Release 2a General Documentation
-
-John R. Hauser
-1998 December 16
-
-
--------------------------------------------------------------------------------
-Introduction
-
-TestFloat is a program for testing that a floating-point implementation
-conforms to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
-All standard operations supported by the system can be tested, except for
-conversions to and from decimal. Any of the following machine formats can
-be tested: single precision, double precision, extended double precision,
-and/or quadruple precision.
-
-TestFloat actually comes in two variants: one is a program for testing
-a machine's floating-point, and the other is a program for testing
-the SoftFloat software implementation of floating-point. (Information
-about SoftFloat can be found at the SoftFloat Web page, `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/SoftFloat.html'.) The version that
-tests SoftFloat is expected to be of interest only to people compiling the
-SoftFloat sources. However, because the two versions share much in common,
-they are discussed together in all the TestFloat documentation.
-
-This document explains how to use the TestFloat programs. It does not
-attempt to define or explain the IEC/IEEE Standard for floating-point.
-Details about the standard are available elsewhere.
-
-The first release of TestFloat (Release 1) was called _FloatTest_. The old
-name has been obsolete for some time.
-
-
--------------------------------------------------------------------------------
-Limitations
-
-TestFloat's output is not always easily interpreted. Detailed knowledge
-of the IEC/IEEE Standard and its vagaries is needed to use TestFloat
-responsibly.
-
-TestFloat performs relatively simple tests designed to check the fundamental
-soundness of the floating-point under test. TestFloat may also at times
-manage to find rarer and more subtle bugs, but it will probably only find
-such bugs by accident. Software that purposefully seeks out various kinds
-of subtle floating-point bugs can be found through links posted on the
-TestFloat Web page (`http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/
-TestFloat.html').
-
-
--------------------------------------------------------------------------------
-Contents
-
- Introduction
- Limitations
- Contents
- Legal Notice
- What TestFloat Does
- Executing TestFloat
- Functions Tested by TestFloat
- Conversion Functions
- Standard Arithmetic Functions
- Remainder and Round-to-Integer Functions
- Comparison Functions
- Interpreting TestFloat Output
- Variations Allowed by the IEC/IEEE Standard
- Underflow
- NaNs
- Conversions to Integer
- TestFloat Options
- -help
- -list
- -level <num>
- -errors <num>
- -errorstop
- -forever
- -checkNaNs
- -precision32, -precision64, -precision80
- -nearesteven, -tozero, -down, -up
- -tininessbefore, -tininessafter
- Function Sets
- Contact Information
-
-
-
--------------------------------------------------------------------------------
-Legal Notice
-
-TestFloat was written by John R. Hauser.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-
--------------------------------------------------------------------------------
-What TestFloat Does
-
-TestFloat tests a system's floating-point by comparing its behavior with
-that of TestFloat's own internal floating-point implemented in software.
-For each operation tested, TestFloat generates a large number of test cases,
-made up of simple pattern tests intermixed with weighted random inputs.
-The cases generated should be adequate for testing carry chain propagations,
-plus the rounding of adds, subtracts, multiplies, and simple operations like
-conversions. TestFloat makes a point of checking all boundary cases of the
-arithmetic, including underflows, overflows, invalid operations, subnormal
-inputs, zeros (positive and negative), infinities, and NaNs. For the
-interesting operations like adds and multiplies, literally millions of test
-cases can be checked.
-
-TestFloat is not remarkably good at testing difficult rounding cases for
-divisions and square roots. It also makes no attempt to find bugs specific
-to SRT divisions and the like (such as the infamous Pentium divide bug).
-Software that tests for such failures can be found through links on the
-TestFloat Web page, `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/
-TestFloat.html'.
-
-NOTE!
-It is the responsibility of the user to verify that the discrepancies
-TestFloat finds actually represent faults in the system being tested.
-Advice to help with this task is provided later in this document.
-Furthermore, even if TestFloat finds no fault with a floating-point
-implementation, that in no way guarantees that the implementation is bug-
-free.
-
-For each operation, TestFloat can test all four rounding modes required
-by the IEC/IEEE Standard. TestFloat verifies not only that the numeric
-results of an operation are correct, but also that the proper floating-point
-exception flags are raised. All five exception flags are tested, including
-the inexact flag. TestFloat does not attempt to verify that the floating-
-point exception flags are actually implemented as sticky flags.
-
-For machines that implement extended double precision with rounding
-precision control (such as Intel's 80x86), TestFloat can test the add,
-subtract, multiply, divide, and square root functions at all the standard
-rounding precisions. The rounding precision can be set equivalent to single
-precision, to double precision, or to the full extended double precision.
-Rounding precision control can only be applied to the extended double-
-precision format and only for the five standard arithmetic operations: add,
-subtract, multiply, divide, and square root. Other functions can be tested
-only at full precision.
-
-As a rule, TestFloat is not particular about the bit patterns of NaNs that
-appear as function results. Any NaN is considered as good a result as
-another. This laxness can be overridden so that TestFloat checks for
-particular bit patterns within NaN results. See the sections _Variations_
-_Allowed_by_the_IEC/IEEE_Standard_ and _TestFloat_Options_ for details.
-
-Not all IEC/IEEE Standard functions are supported by all machines.
-TestFloat can only test functions that exist on the machine. But even if
-a function is supported by the machine, TestFloat may still not be able
-to test the function if it is not accessible through standard ISO C (the
-programming language in which TestFloat is written) and if the person who
-compiled TestFloat did not provide an alternate means for TestFloat to
-invoke the machine function.
-
-TestFloat compares a machine's floating-point against the SoftFloat software
-implementation of floating-point, also written by me. SoftFloat is built
-into the TestFloat executable and does not need to be supplied by the user.
-If SoftFloat is wanted for some other reason (to compile a new version
-of TestFloat, for instance), it can be found separately at the Web page
-`http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/SoftFloat.html'.
-
-For testing SoftFloat itself, the TestFloat package includes a program that
-compares SoftFloat's floating-point against _another_ software floating-
-point implementation. The second software floating-point is simpler and
-slower than SoftFloat, and is completely independent of SoftFloat. Although
-the second software floating-point cannot be guaranteed to be bug-free, the
-chance that it would mimic any of SoftFloat's bugs is remote. Consequently,
-an error in one or the other floating-point version should appear as an
-unexpected discrepancy between the two implementations. Note that testing
-SoftFloat should only be necessary when compiling a new TestFloat executable
-or when compiling SoftFloat for some other reason.
-
-
--------------------------------------------------------------------------------
-Executing TestFloat
-
-TestFloat is intended to be executed from a command line interpreter. The
-`testfloat' program is invoked as follows:
-
- testfloat [<option>...] <function>
-
-Here square brackets ([]) indicate optional items, while angled brackets
-(<>) denote parameters to be filled in.
-
-The `<function>' argument is a name like `float32_add' or `float64_to_int32'.
-The complete list of function names is given in the next section,
-_Functions_Tested_by_TestFloat_. It is also possible to test all machine
-functions in a single invocation. The various options to TestFloat are
-detailed in the section _TestFloat_Options_ later in this document. If
-`testfloat' is executed without any arguments, a summary of TestFloat usage
-is written.
-
-TestFloat will ordinarily test a function for all four rounding modes, one
-after the other. If the rounding mode is not supposed to have any affect
-on the results--for instance, some operations do not require rounding--only
-the nearest/even rounding mode is checked. For extended double-precision
-operations affected by rounding precision control, TestFloat also tests all
-three rounding precision modes, one after the other. Testing can be limited
-to a single rounding mode and/or rounding precision with appropriate options
-(see _TestFloat_Options_).
-
-As it executes, TestFloat writes status information to the standard error
-output, which should be the screen by default. In order for this status to
-be displayed properly, the standard error stream should not be redirected
-to a file. The discrepancies TestFloat finds are written to the standard
-output stream, which is easily redirected to a file if desired. Ordinarily,
-the errors TestFloat reports and the ongoing status information appear
-intermixed on the same screen.
-
-The version of TestFloat for testing SoftFloat is called `testsoftfloat'.
-It is invoked the same as `testfloat',
-
- testsoftfloat [<option>...] <function>
-
-and operates similarly.
-
-
--------------------------------------------------------------------------------
-Functions Tested by TestFloat
-
-TestFloat tests all operations required by the IEC/IEEE Standard except for
-conversions to and from decimal. The operations are
-
--- Conversions among the supported floating-point formats, and also between
- integers (32-bit and 64-bit) and any of the floating-point formats.
-
--- The usual add, subtract, multiply, divide, and square root operations
- for all supported floating-point formats.
-
--- For each format, the floating-point remainder operation defined by the
- IEC/IEEE Standard.
-
--- For each floating-point format, a ``round to integer'' operation that
- rounds to the nearest integer value in the same format. (The floating-
- point formats can hold integer values, of course.)
-
--- Comparisons between two values in the same floating-point format.
-
-Detailed information about these functions is given below. In the function
-names used by TestFloat, single precision is called `float32', double
-precision is `float64', extended double precision is `floatx80', and
-quadruple precision is `float128'. TestFloat uses the same names for
-functions as SoftFloat.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Conversion Functions
-
-All conversions among the floating-point formats and all conversion between
-a floating-point format and 32-bit and 64-bit signed integers can be tested.
-The conversion functions are:
-
- int32_to_float32 int64_to_float32
- int32_to_float64 int64_to_float32
- int32_to_floatx80 int64_to_floatx80
- int32_to_float128 int64_to_float128
-
- float32_to_int32 float32_to_int64
- float32_to_int32 float64_to_int64
- floatx80_to_int32 floatx80_to_int64
- float128_to_int32 float128_to_int64
-
- float32_to_float64 float32_to_floatx80 float32_to_float128
- float64_to_float32 float64_to_floatx80 float64_to_float128
- floatx80_to_float32 floatx80_to_float64 floatx80_to_float128
- float128_to_float32 float128_to_float64 float128_to_floatx80
-
-These conversions all round according to the current rounding mode as
-necessary. Conversions from a smaller to a larger floating-point format are
-always exact and so require no rounding. Conversions from 32-bit integers
-to double precision or to any larger floating-point format are also exact,
-and likewise for conversions from 64-bit integers to extended double and
-quadruple precisions.
-
-ISO/ANSI C requires that conversions to integers be rounded toward zero.
-Such conversions can be tested with the following functions that ignore any
-rounding mode:
-
- float32_to_int32_round_to_zero float32_to_int64_round_to_zero
- float64_to_int32_round_to_zero float64_to_int64_round_to_zero
- floatx80_to_int32_round_to_zero floatx80_to_int64_round_to_zero
- float128_to_int32_round_to_zero float128_to_int64_round_to_zero
-
-TestFloat assumes that conversions from floating-point to integer should
-raise the invalid exception if the source value cannot be rounded to a
-representable integer of the desired size (32 or 64 bits). If such a
-conversion overflows, TestFloat expects the largest integer with the same
-sign as the operand to be returned. If the floating-point operand is a NaN,
-TestFloat allows either the largest positive or largest negative integer to
-be returned.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Standard Arithmetic Functions
-
-The following standard arithmetic functions can be tested:
-
- float32_add float32_sub float32_mul float32_div float32_sqrt
- float64_add float64_sub float64_mul float64_div float64_sqrt
- floatx80_add floatx80_sub floatx80_mul floatx80_div floatx80_sqrt
- float128_add float128_sub float128_mul float128_div float128_sqrt
-
-The extended double-precision (`floatx80') functions can be rounded to
-reduced precision under rounding precision control.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Remainder and Round-to-Integer Functions
-
-For each format, TestFloat can test the IEC/IEEE Standard remainder and
-round-to-integer functions. The remainder functions are:
-
- float32_rem
- float64_rem
- floatx80_rem
- float128_rem
-
-The round-to-integer functions are:
-
- float32_round_to_int
- float64_round_to_int
- floatx80_round_to_int
- float128_round_to_int
-
-The remainder functions are always exact and so do not require rounding.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Comparison Functions
-
-The following floating-point comparison functions can be tested:
-
- float32_eq float32_le float32_lt
- float64_eq float64_le float64_lt
- floatx80_eq floatx80_le floatx80_lt
- float128_eq float128_le float128_lt
-
-The abbreviation `eq' stands for ``equal'' (=); `le' stands for ``less than
-or equal'' (<=); and `lt' stands for ``less than'' (<).
-
-The IEC/IEEE Standard specifies that the less-than-or-equal and less-than
-functions raise the invalid exception if either input is any kind of NaN.
-The equal functions, for their part, are defined not to raise the invalid
-exception on quiet NaNs. For completeness, the following additional
-functions can be tested if supported:
-
- float32_eq_signaling float32_le_quiet float32_lt_quiet
- float64_eq_signaling float64_le_quiet float64_lt_quiet
- floatx80_eq_signaling floatx80_le_quiet floatx80_lt_quiet
- float128_eq_signaling float128_le_quiet float128_lt_quiet
-
-The `signaling' equal functions are identical to the standard functions
-except that the invalid exception should be raised for any NaN input.
-Likewise, the `quiet' comparison functions should be identical to their
-counterparts except that the invalid exception is not raised for quiet NaNs.
-
-Obviously, no comparison functions ever require rounding. Any rounding mode
-is ignored.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Interpreting TestFloat Output
-
-The ``errors'' reported by TestFloat may or may not really represent errors
-in the system being tested. For each test case tried, TestFloat performs
-the same floating-point operation for the two implementations being compared
-and reports any unexpected difference in the results. The two results could
-differ for several reasons:
-
--- The IEC/IEEE Standard allows for some variation in how conforming
- floating-point behaves. Two implementations can occasionally give
- different results without either being incorrect.
-
--- The trusted floating-point emulation could be faulty. This could be
- because there is a bug in the way the enulation is coded, or because a
- mistake was made when the code was compiled for the current system.
-
--- TestFloat may not work properly, reporting discrepancies that do not
- exist.
-
--- Lastly, the floating-point being tested could actually be faulty.
-
-It is the responsibility of the user to determine the causes for the
-discrepancies TestFloat reports. Making this determination can require
-detailed knowledge about the IEC/IEEE Standard. Assuming TestFloat is
-working properly, any differences found will be due to either the first or
-last of these reasons. Variations in the IEC/IEEE Standard that could lead
-to false error reports are discussed in the section _Variations_Allowed_by_
-_the_IEC/IEEE_Standard_.
-
-For each error (or apparent error) TestFloat reports, a line of text
-is written to the default output. If a line would be longer than 79
-characters, it is divided. The first part of each error line begins in the
-leftmost column, and any subsequent ``continuation'' lines are indented with
-a tab.
-
-Each error reported by `testfloat' is of the form:
-
- <inputs> soft: <output-from-emulation> syst: <output-from-system>
-
-The `<inputs>' are the inputs to the operation. Each output is shown as a
-pair: the result value first, followed by the exception flags. The `soft'
-label stands for ``software'' (or ``SoftFloat''), while `syst' stands for
-``system,'' the machine's floating-point.
-
-For example, two typical error lines could be
-
- 800.7FFF00 87F.000100 soft: 001.000000 ....x syst: 001.000000 ...ux
- 081.000004 000.1FFFFF soft: 001.000000 ....x syst: 001.000000 ...ux
-
-In the first line, the inputs are `800.7FFF00' and `87F.000100'. The
-internal emulation result is `001.000000' with flags `....x', and the
-system result is the same but with flags `...ux'. All the items composed of
-hexadecimal digits and a single period represent floating-point values (here
-single precision). These cases were reported as errors because the flag
-results differ.
-
-In addition to the exception flags, there are seven data types that may
-be represented. Four are floating-point types: single precision, double
-precision, extended double precision, and quadruple precision. The
-remaining three types are 32-bit and 64-bit two's-complement integers and
-Boolean values (the results of comparison operations). Boolean values are
-represented as a single character, either a `0' or a `1'. 32-bit integers
-are written as 8 hexadecimal digits in two's-complement form. Thus,
-`FFFFFFFF' is -1, and `7FFFFFFF' is the largest positive 32-bit integer.
-64-bit integers are the same except with 16 hexadecimal digits.
-
-Floating-point values are written in a correspondingly primitive form.
-Double-precision values are represented by 16 hexadecimal digits that give
-the raw bits of the floating-point encoding. A period separates the 3rd and
-4th hexadecimal digits to mark the division between the exponent bits and
-fraction bits. Some notable double-precision values include:
-
- 000.0000000000000 +0
- 3FF.0000000000000 1
- 400.0000000000000 2
- 7FF.0000000000000 +infinity
-
- 800.0000000000000 -0
- BFF.0000000000000 -1
- C00.0000000000000 -2
- FFF.0000000000000 -infinity
-
- 3FE.FFFFFFFFFFFFF largest representable number preceding +1
-
-The following categories are easily distinguished (assuming the `x's are not
-all 0):
-
- 000.xxxxxxxxxxxxx positive subnormal (denormalized) numbers
- 7FF.xxxxxxxxxxxxx positive NaNs
- 800.xxxxxxxxxxxxx negative subnormal numbers
- FFF.xxxxxxxxxxxxx negative NaNs
-
-Quadruple-precision values are written the same except with 4 hexadecimal
-digits for the sign and exponent and 28 for the fraction. Notable values
-include:
-
- 0000.0000000000000000000000000000 +0
- 3FFF.0000000000000000000000000000 1
- 4000.0000000000000000000000000000 2
- 7FFF.0000000000000000000000000000 +infinity
-
- 8000.0000000000000000000000000000 -0
- BFFF.0000000000000000000000000000 -1
- C000.0000000000000000000000000000 -2
- FFFF.0000000000000000000000000000 -infinity
-
- 3FFE.FFFFFFFFFFFFFFFFFFFFFFFFFFFF largest representable number
- preceding +1
-
-Extended double-precision values are a little unusual in that the leading
-significand bit is not hidden as with other formats. When correctly
-encoded, the leading significand bit of an extended double-precision value
-will be 0 if the value is zero or subnormal, and will be 1 otherwise.
-Hence, the same values listed above appear in extended double-precision as
-follows (note the leading `8' digit in the significands):
-
- 0000.0000000000000000 +0
- 3FFF.8000000000000000 1
- 4000.8000000000000000 2
- 7FFF.8000000000000000 +infinity
-
- 8000.0000000000000000 -0
- BFFF.8000000000000000 -1
- C000.8000000000000000 -2
- FFFF.8000000000000000 -infinity
-
- 3FFE.FFFFFFFFFFFFFFFF largest representable number preceding +1
-
-The representation of single-precision values is unusual for a different
-reason. Because the subfields of standard single-precision do not fall
-on neat 4-bit boundaries, single-precision outputs are slightly perturbed.
-These are written as 9 hexadecimal digits, with a period separating the 3rd
-and 4th hexadecimal digits. Broken out into bits, the 9 hexademical digits
-cover the single-precision subfields as follows:
-
- x000 .... .... . .... .... .... .... .... .... sign (1 bit)
- .... xxxx xxxx . .... .... .... .... .... .... exponent (8 bits)
- .... .... .... . 0xxx xxxx xxxx xxxx xxxx xxxx fraction (23 bits)
-
-As shown in this schematic, the first hexadecimal digit contains only
-the sign, and will be either `0' or `8'. The next two digits give the
-biased exponent as an 8-bit integer. This is followed by a period and
-6 hexadecimal digits of fraction. The most significant hexadecimal digit
-of the fraction can be at most a `7'.
-
-Notable single-precision values include:
-
- 000.000000 +0
- 07F.000000 1
- 080.000000 2
- 0FF.000000 +infinity
-
- 800.000000 -0
- 87F.000000 -1
- 880.000000 -2
- 8FF.000000 -infinity
-
- 07E.7FFFFF largest representable number preceding +1
-
-Again, certain categories are easily distinguished (assuming the `x's are
-not all 0):
-
- 000.xxxxxx positive subnormal (denormalized) numbers
- 0FF.xxxxxx positive NaNs
- 800.xxxxxx negative subnormal numbers
- 8FF.xxxxxx negative NaNs
-
-Lastly, exception flag values are represented by five characters, one
-character per flag. Each flag is written as either a letter or a period
-(`.') according to whether the flag was set or not by the operation. A
-period indicates the flag was not set. The letter used to indicate a set
-flag depends on the flag:
-
- v invalid flag
- z division-by-zero flag
- o overflow flag
- u underflow flag
- x inexact flag
-
-For example, the notation `...ux' indicates that the underflow and inexact
-exception flags were set and that the other three flags (invalid, division-
-by-zero, and overflow) were not set. The exception flags are always shown
-following the value returned as the result of the operation.
-
-The output from `testsoftfloat' is of the same form, except that the results
-are labeled `true' and `soft':
-
- <inputs> true: <simple-software-result> soft: <SoftFloat-result>
-
-The ``true'' result is from the simpler, slower software floating-point,
-which, although not necessarily correct, is more likely to be right than
-the SoftFloat (`soft') result.
-
-
--------------------------------------------------------------------------------
-Variations Allowed by the IEC/IEEE Standard
-
-The IEC/IEEE Standard admits some variation among conforming
-implementations. Because TestFloat expects the two implementations being
-compared to deliver bit-for-bit identical results under most circumstances,
-this leeway in the standard can result in false errors being reported if
-the two implementations do not make the same choices everywhere the standard
-provides an option.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Underflow
-
-The standard specifies that the underflow exception flag is to be raised
-when two conditions are met simultaneously: (1) _tininess_ and (2) _loss_
-_of_accuracy_. A result is tiny when its magnitude is nonzero yet smaller
-than any normalized floating-point number. The standard allows tininess to
-be determined either before or after a result is rounded to the destination
-precision. If tininess is detected before rounding, some borderline cases
-will be flagged as underflows even though the result after rounding actually
-lies within the normal floating-point range. By detecting tininess after
-rounding, a system can avoid some unnecessary signaling of underflow.
-
-Loss of accuracy occurs when the subnormal format is not sufficient
-to represent an underflowed result accurately. The standard allows
-loss of accuracy to be detected either as an _inexact_result_ or as a
-_denormalization_loss_. If loss of accuracy is detected as an inexact
-result, the underflow flag is raised whenever an underflowed quantity
-cannot be exactly represented in the subnormal format (that is, whenever the
-inexact flag is also raised). A denormalization loss, on the other hand,
-occurs only when the subnormal format is not able to represent the result
-that would have been returned if the destination format had infinite range.
-Some underflowed results are inexact but do not suffer a denormalization
-loss. By detecting loss of accuracy as a denormalization loss, a system can
-once again avoid some unnecessary signaling of underflow.
-
-The `-tininessbefore' and `-tininessafter' options can be used to control
-whether TestFloat expects tininess on underflow to be detected before or
-after rounding. (See _TestFloat_Options_ below.) One or the other is
-selected as the default when TestFloat is compiled, but these command
-options allow the default to be overridden.
-
-Most (possibly all) systems detect loss of accuracy as an inexact result.
-The current version of TestFloat can only test for this case.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-NaNs
-
-The IEC/IEEE Standard gives the floating-point formats a large number of
-NaN encodings and specifies that NaNs are to be returned as results under
-certain conditions. However, the standard allows an implementation almost
-complete freedom over _which_ NaN to return in each situation.
-
-By default, TestFloat does not check the bit patterns of NaN results. When
-the result of an operation should be a NaN, any NaN is considered as good
-as another. This laxness can be overridden with the `-checkNaNs' option.
-(See _TestFloat_Options_ below.) In order for this option to be sensible,
-TestFloat must have been compiled so that its internal floating-point
-implementation (SoftFloat) generates the proper NaN results for the system
-being tested.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Conversions to Integer
-
-Conversion of a floating-point value to an integer format will fail if the
-source value is a NaN or if it is too large. The IEC/IEEE Standard does not
-specify what value should be returned as the integer result in these cases.
-Moreover, according to the standard, the invalid exception can be raised or
-an unspecified alternative mechanism may be used to signal such cases.
-
-TestFloat assumes that conversions to integer will raise the invalid
-exception if the source value cannot be rounded to a representable integer.
-When the conversion overflows, TestFloat expects the largest integer with
-the same sign as the operand to be returned. If the floating-point operand
-is a NaN, TestFloat allows either the largest positive or largest negative
-integer to be returned. The current version of TestFloat provides no means
-to alter these conventions.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-TestFloat Options
-
-The `testfloat' (and `testsoftfloat') program accepts several command
-options. If mutually contradictory options are given, the last one has
-priority.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--help
-
-The `-help' option causes a summary of program usage to be written, after
-which the program exits.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--list
-
-The `-list' option causes a list of testable functions to be written,
-after which the program exits. Some machines do not implement all of the
-functions TestFloat can test, plus it may not be possible to test functions
-that are inaccessible from the C language.
-
-The `testsoftfloat' program does not have this option. All SoftFloat
-functions can be tested by `testsoftfloat'.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--level <num>
-
-The `-level' option sets the level of testing. The argument to `-level' can
-be either 1 or 2. The default is level 1. Level 2 performs many more tests
-than level 1. Testing at level 2 can take as much as a day (even longer for
-`testsoftfloat'), but can reveal bugs not found by level 1.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--errors <num>
-
-The `-errors' option instructs TestFloat to report no more than the
-specified number of errors for any combination of function, rounding mode,
-etc. The argument to `-errors' must be a nonnegative decimal number. Once
-the specified number of error reports has been generated, TestFloat ends the
-current test and begins the next one, if any. The default is `-errors 20'.
-
-Against intuition, `-errors 0' causes TestFloat to report every error it
-finds.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--errorstop
-
-The `-errorstop' option causes the program to exit after the first function
-for which any errors are reported.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--forever
-
-The `-forever' option causes a single operation to be repeatedly tested.
-Only one rounding mode and/or rounding precision can be tested in a single
-invocation. If not specified, the rounding mode defaults to nearest/even.
-For extended double-precision operations, the rounding precision defaults
-to full extended double precision. The testing level is set to 2 by this
-option.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--checkNaNs
-
-The `-checkNaNs' option causes TestFloat to verify the bitwise correctness
-of NaN results. In order for this option to be sensible, TestFloat must
-have been compiled so that its internal floating-point implementation
-(SoftFloat) generates the proper NaN results for the system being tested.
-
-This option is not available to `testsoftfloat'.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--precision32, -precision64, -precision80
-
-For extended double-precision functions affected by rounding precision
-control, the `-precision32' option restricts testing to only the cases
-in which rounding precision is equivalent to single precision. The other
-rounding precision options are not tested. Likewise, the `-precision64'
-and `-precision80' options fix the rounding precision equivalent to double
-precision or extended double precision, respectively. These options are
-ignored for functions not affected by rounding precision control.
-
-These options are not available if extended double precision is not
-supported by the machine or if extended double precision functions cannot be
-tested.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--nearesteven, -tozero, -down, -up
-
-The `-nearesteven' option restricts testing to only the cases in which the
-rounding mode is nearest/even. The other rounding mode options are not
-tested. Likewise, `-tozero' forces rounding to zero; `-down' forces
-rounding down; and `-up' forces rounding up. These options are ignored for
-functions that are exact and thus do not round.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--tininessbefore, -tininessafter
-
-The `-tininessbefore' option indicates that the system detects tininess
-on underflow before rounding. The `-tininessafter' option indicates that
-tininess is detected after rounding. TestFloat alters its expectations
-accordingly. These options override the default selected when TestFloat was
-compiled. Choosing the wrong one of these two options should cause error
-reports for some (not all) functions.
-
-For `testsoftfloat', these options operate more like the rounding precision
-and rounding mode options, in that they restrict the tests performed by
-`testsoftfloat'. By default, `testsoftfloat' tests both cases for any
-function for which there is a difference.
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
--------------------------------------------------------------------------------
-Function Sets
-
-Just as TestFloat can test an operation for all four rounding modes in
-sequence, multiple operations can be tested with a single invocation of
-TestFloat. Three sets are recognized: `-all1', `-all2', and `-all'. The
-set `-all1' comprises all one-operand functions; `-all2' is all two-operand
-functions; and `-all' is all functions. A function set can be used in place
-of a function name in the TestFloat command line, such as
-
- testfloat [<option>...] -all
-
-
--------------------------------------------------------------------------------
-Contact Information
-
-At the time of this writing, the most up-to-date information about
-TestFloat and the latest release can be found at the Web page `http://
-HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-
diff --git a/tools/test/testfloat/testsoftfloat.c b/tools/test/testfloat/testsoftfloat.c
deleted file mode 100644
index 2689ee38777a..000000000000
--- a/tools/test/testfloat/testsoftfloat.c
+++ /dev/null
@@ -1,1044 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include "milieu.h"
-#include "fail.h"
-#include "softfloat.h"
-#include "slowfloat.h"
-#include "testCases.h"
-#include "testLoops.h"
-
-static void catchSIGINT( int signalCode )
-{
-
- if ( stop ) exit( EXIT_FAILURE );
- stop = TRUE;
-
-}
-
-int8 clearFlags( void )
-{
- int8 flags;
-
- flags = float_exception_flags;
- float_exception_flags = 0;
- return flags;
-
-}
-
-enum {
- INT32_TO_FLOAT32 = 1,
- INT32_TO_FLOAT64,
-#ifdef FLOATX80
- INT32_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- INT32_TO_FLOAT128,
-#endif
-#ifdef BITS64
- INT64_TO_FLOAT32,
- INT64_TO_FLOAT64,
-#ifdef FLOATX80
- INT64_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- INT64_TO_FLOAT128,
-#endif
-#endif
- FLOAT32_TO_INT32,
- FLOAT32_TO_INT32_ROUND_TO_ZERO,
-#ifdef BITS64
- FLOAT32_TO_INT64,
- FLOAT32_TO_INT64_ROUND_TO_ZERO,
-#endif
- FLOAT32_TO_FLOAT64,
-#ifdef FLOATX80
- FLOAT32_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- FLOAT32_TO_FLOAT128,
-#endif
- FLOAT32_ROUND_TO_INT,
- FLOAT32_ADD,
- FLOAT32_SUB,
- FLOAT32_MUL,
- FLOAT32_DIV,
- FLOAT32_REM,
- FLOAT32_SQRT,
- FLOAT32_EQ,
- FLOAT32_LE,
- FLOAT32_LT,
- FLOAT32_EQ_SIGNALING,
- FLOAT32_LE_QUIET,
- FLOAT32_LT_QUIET,
- FLOAT64_TO_INT32,
- FLOAT64_TO_INT32_ROUND_TO_ZERO,
-#ifdef BITS64
- FLOAT64_TO_INT64,
- FLOAT64_TO_INT64_ROUND_TO_ZERO,
-#endif
- FLOAT64_TO_FLOAT32,
-#ifdef FLOATX80
- FLOAT64_TO_FLOATX80,
-#endif
-#ifdef FLOAT128
- FLOAT64_TO_FLOAT128,
-#endif
- FLOAT64_ROUND_TO_INT,
- FLOAT64_ADD,
- FLOAT64_SUB,
- FLOAT64_MUL,
- FLOAT64_DIV,
- FLOAT64_REM,
- FLOAT64_SQRT,
- FLOAT64_EQ,
- FLOAT64_LE,
- FLOAT64_LT,
- FLOAT64_EQ_SIGNALING,
- FLOAT64_LE_QUIET,
- FLOAT64_LT_QUIET,
-#ifdef FLOATX80
- FLOATX80_TO_INT32,
- FLOATX80_TO_INT32_ROUND_TO_ZERO,
-#ifdef BITS64
- FLOATX80_TO_INT64,
- FLOATX80_TO_INT64_ROUND_TO_ZERO,
-#endif
- FLOATX80_TO_FLOAT32,
- FLOATX80_TO_FLOAT64,
-#ifdef FLOAT128
- FLOATX80_TO_FLOAT128,
-#endif
- FLOATX80_ROUND_TO_INT,
- FLOATX80_ADD,
- FLOATX80_SUB,
- FLOATX80_MUL,
- FLOATX80_DIV,
- FLOATX80_REM,
- FLOATX80_SQRT,
- FLOATX80_EQ,
- FLOATX80_LE,
- FLOATX80_LT,
- FLOATX80_EQ_SIGNALING,
- FLOATX80_LE_QUIET,
- FLOATX80_LT_QUIET,
-#endif
-#ifdef FLOAT128
- FLOAT128_TO_INT32,
- FLOAT128_TO_INT32_ROUND_TO_ZERO,
-#ifdef BITS64
- FLOAT128_TO_INT64,
- FLOAT128_TO_INT64_ROUND_TO_ZERO,
-#endif
- FLOAT128_TO_FLOAT32,
- FLOAT128_TO_FLOAT64,
-#ifdef FLOATX80
- FLOAT128_TO_FLOATX80,
-#endif
- FLOAT128_ROUND_TO_INT,
- FLOAT128_ADD,
- FLOAT128_SUB,
- FLOAT128_MUL,
- FLOAT128_DIV,
- FLOAT128_REM,
- FLOAT128_SQRT,
- FLOAT128_EQ,
- FLOAT128_LE,
- FLOAT128_LT,
- FLOAT128_EQ_SIGNALING,
- FLOAT128_LE_QUIET,
- FLOAT128_LT_QUIET,
-#endif
- NUM_FUNCTIONS
-};
-static struct {
- char *name;
- int8 numInputs;
- flag roundingPrecision, roundingMode;
- flag tininessMode, tininessModeAtReducedPrecision;
-} functions[ NUM_FUNCTIONS ] = {
- { 0, 0, 0, 0, 0, 0 },
- { "int32_to_float32", 1, FALSE, TRUE, FALSE, FALSE },
- { "int32_to_float64", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef FLOATX80
- { "int32_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "int32_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef BITS64
- { "int64_to_float32", 1, FALSE, TRUE, FALSE, FALSE },
- { "int64_to_float64", 1, FALSE, TRUE, FALSE, FALSE },
-#ifdef FLOATX80
- { "int64_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "int64_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#endif
- { "float32_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef BITS64
- { "float32_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float32_to_float64", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef FLOATX80
- { "float32_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "float32_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float32_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_add", 2, FALSE, TRUE, FALSE, FALSE },
- { "float32_sub", 2, FALSE, TRUE, FALSE, FALSE },
- { "float32_mul", 2, FALSE, TRUE, TRUE, FALSE },
- { "float32_div", 2, FALSE, TRUE, FALSE, FALSE },
- { "float32_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_sqrt", 1, FALSE, TRUE, FALSE, FALSE },
- { "float32_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float32_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef BITS64
- { "float64_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float64_to_float32", 1, FALSE, TRUE, TRUE, FALSE },
-#ifdef FLOATX80
- { "float64_to_floatx80", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "float64_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float64_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_add", 2, FALSE, TRUE, FALSE, FALSE },
- { "float64_sub", 2, FALSE, TRUE, FALSE, FALSE },
- { "float64_mul", 2, FALSE, TRUE, TRUE, FALSE },
- { "float64_div", 2, FALSE, TRUE, FALSE, FALSE },
- { "float64_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_sqrt", 1, FALSE, TRUE, FALSE, FALSE },
- { "float64_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float64_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
-#ifdef FLOATX80
- { "floatx80_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef BITS64
- { "floatx80_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "floatx80_to_float32", 1, FALSE, TRUE, TRUE, FALSE },
- { "floatx80_to_float64", 1, FALSE, TRUE, TRUE, FALSE },
-#ifdef FLOAT128
- { "floatx80_to_float128", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "floatx80_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "floatx80_add", 2, TRUE, TRUE, FALSE, TRUE },
- { "floatx80_sub", 2, TRUE, TRUE, FALSE, TRUE },
- { "floatx80_mul", 2, TRUE, TRUE, TRUE, TRUE },
- { "floatx80_div", 2, TRUE, TRUE, FALSE, TRUE },
- { "floatx80_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_sqrt", 1, TRUE, TRUE, FALSE, FALSE },
- { "floatx80_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "floatx80_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
-#endif
-#ifdef FLOAT128
- { "float128_to_int32", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_to_int32_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#ifdef BITS64
- { "float128_to_int64", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_to_int64_round_to_zero", 1, FALSE, FALSE, FALSE, FALSE },
-#endif
- { "float128_to_float32", 1, FALSE, TRUE, TRUE, FALSE },
- { "float128_to_float64", 1, FALSE, TRUE, TRUE, FALSE },
-#ifdef FLOATX80
- { "float128_to_floatx80", 1, FALSE, TRUE, TRUE, FALSE },
-#endif
- { "float128_round_to_int", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_add", 2, FALSE, TRUE, FALSE, FALSE },
- { "float128_sub", 2, FALSE, TRUE, FALSE, FALSE },
- { "float128_mul", 2, FALSE, TRUE, TRUE, FALSE },
- { "float128_div", 2, FALSE, TRUE, FALSE, FALSE },
- { "float128_rem", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_sqrt", 1, FALSE, TRUE, FALSE, FALSE },
- { "float128_eq", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_le", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_lt", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_eq_signaling", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_le_quiet", 2, FALSE, FALSE, FALSE, FALSE },
- { "float128_lt_quiet", 2, FALSE, FALSE, FALSE, FALSE },
-#endif
-};
-
-enum {
- ROUND_NEAREST_EVEN = 1,
- ROUND_TO_ZERO,
- ROUND_DOWN,
- ROUND_UP,
- NUM_ROUNDINGMODES
-};
-enum {
- TININESS_BEFORE_ROUNDING = 1,
- TININESS_AFTER_ROUNDING,
- NUM_TININESSMODES
-};
-
-static void
- testFunctionVariety(
- uint8 functionCode,
- int8 roundingPrecision,
- int8 roundingMode,
- int8 tininessMode
- )
-{
- uint8 roundingCode;
- int8 tininessCode;
-
- functionName = functions[ functionCode ].name;
- if ( roundingPrecision == 32 ) {
- roundingPrecisionName = "32";
- }
- else if ( roundingPrecision == 64 ) {
- roundingPrecisionName = "64";
- }
- else if ( roundingPrecision == 80 ) {
- roundingPrecisionName = "80";
- }
- else {
- roundingPrecisionName = 0;
- }
-#ifdef FLOATX80
- floatx80_rounding_precision = roundingPrecision;
- slow_floatx80_rounding_precision = roundingPrecision;
-#endif
- switch ( roundingMode ) {
- default:
- roundingModeName = 0;
- roundingCode = float_round_nearest_even;
- break;
- case ROUND_NEAREST_EVEN:
- roundingModeName = "nearest_even";
- roundingCode = float_round_nearest_even;
- break;
- case ROUND_TO_ZERO:
- roundingModeName = "to_zero";
- roundingCode = float_round_to_zero;
- break;
- case ROUND_DOWN:
- roundingModeName = "down";
- roundingCode = float_round_down;
- break;
- case ROUND_UP:
- roundingModeName = "up";
- roundingCode = float_round_up;
- break;
- }
- float_rounding_mode = roundingCode;
- slow_float_rounding_mode = roundingCode;
- switch ( tininessMode ) {
- default:
- tininessModeName = 0;
- tininessCode = float_tininess_after_rounding;
- break;
- case TININESS_BEFORE_ROUNDING:
- tininessModeName = "before";
- tininessCode = float_tininess_before_rounding;
- break;
- case TININESS_AFTER_ROUNDING:
- tininessModeName = "after";
- tininessCode = float_tininess_after_rounding;
- break;
- }
- float_detect_tininess = tininessCode;
- slow_float_detect_tininess = tininessCode;
- fputs( "Testing ", stderr );
- writeFunctionName( stderr );
- fputs( ".\n", stderr );
- switch ( functionCode ) {
- case INT32_TO_FLOAT32:
- test_a_int32_z_float32( slow_int32_to_float32, int32_to_float32 );
- break;
- case INT32_TO_FLOAT64:
- test_a_int32_z_float64( slow_int32_to_float64, int32_to_float64 );
- break;
-#ifdef FLOATX80
- case INT32_TO_FLOATX80:
- test_a_int32_z_floatx80( slow_int32_to_floatx80, int32_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case INT32_TO_FLOAT128:
- test_a_int32_z_float128( slow_int32_to_float128, int32_to_float128 );
- break;
-#endif
-#ifdef BITS64
- case INT64_TO_FLOAT32:
- test_a_int64_z_float32( slow_int64_to_float32, int64_to_float32 );
- break;
- case INT64_TO_FLOAT64:
- test_a_int64_z_float64( slow_int64_to_float64, int64_to_float64 );
- break;
-#ifdef FLOATX80
- case INT64_TO_FLOATX80:
- test_a_int64_z_floatx80( slow_int64_to_floatx80, int64_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case INT64_TO_FLOAT128:
- test_a_int64_z_float128( slow_int64_to_float128, int64_to_float128 );
- break;
-#endif
-#endif
- case FLOAT32_TO_INT32:
- test_a_float32_z_int32( slow_float32_to_int32, float32_to_int32 );
- break;
- case FLOAT32_TO_INT32_ROUND_TO_ZERO:
- test_a_float32_z_int32(
- slow_float32_to_int32_round_to_zero,
- float32_to_int32_round_to_zero
- );
- break;
-#ifdef BITS64
- case FLOAT32_TO_INT64:
- test_a_float32_z_int64( slow_float32_to_int64, float32_to_int64 );
- break;
- case FLOAT32_TO_INT64_ROUND_TO_ZERO:
- test_a_float32_z_int64(
- slow_float32_to_int64_round_to_zero,
- float32_to_int64_round_to_zero
- );
- break;
-#endif
- case FLOAT32_TO_FLOAT64:
- test_a_float32_z_float64(
- slow_float32_to_float64, float32_to_float64 );
- break;
-#ifdef FLOATX80
- case FLOAT32_TO_FLOATX80:
- test_a_float32_z_floatx80(
- slow_float32_to_floatx80, float32_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case FLOAT32_TO_FLOAT128:
- test_a_float32_z_float128(
- slow_float32_to_float128, float32_to_float128 );
- break;
-#endif
- case FLOAT32_ROUND_TO_INT:
- test_az_float32( slow_float32_round_to_int, float32_round_to_int );
- break;
- case FLOAT32_ADD:
- test_abz_float32( slow_float32_add, float32_add );
- break;
- case FLOAT32_SUB:
- test_abz_float32( slow_float32_sub, float32_sub );
- break;
- case FLOAT32_MUL:
- test_abz_float32( slow_float32_mul, float32_mul );
- break;
- case FLOAT32_DIV:
- test_abz_float32( slow_float32_div, float32_div );
- break;
- case FLOAT32_REM:
- test_abz_float32( slow_float32_rem, float32_rem );
- break;
- case FLOAT32_SQRT:
- test_az_float32( slow_float32_sqrt, float32_sqrt );
- break;
- case FLOAT32_EQ:
- test_ab_float32_z_flag( slow_float32_eq, float32_eq );
- break;
- case FLOAT32_LE:
- test_ab_float32_z_flag( slow_float32_le, float32_le );
- break;
- case FLOAT32_LT:
- test_ab_float32_z_flag( slow_float32_lt, float32_lt );
- break;
- case FLOAT32_EQ_SIGNALING:
- test_ab_float32_z_flag(
- slow_float32_eq_signaling, float32_eq_signaling );
- break;
- case FLOAT32_LE_QUIET:
- test_ab_float32_z_flag( slow_float32_le_quiet, float32_le_quiet );
- break;
- case FLOAT32_LT_QUIET:
- test_ab_float32_z_flag( slow_float32_lt_quiet, float32_lt_quiet );
- break;
- case FLOAT64_TO_INT32:
- test_a_float64_z_int32( slow_float64_to_int32, float64_to_int32 );
- break;
- case FLOAT64_TO_INT32_ROUND_TO_ZERO:
- test_a_float64_z_int32(
- slow_float64_to_int32_round_to_zero,
- float64_to_int32_round_to_zero
- );
- break;
-#ifdef BITS64
- case FLOAT64_TO_INT64:
- test_a_float64_z_int64( slow_float64_to_int64, float64_to_int64 );
- break;
- case FLOAT64_TO_INT64_ROUND_TO_ZERO:
- test_a_float64_z_int64(
- slow_float64_to_int64_round_to_zero,
- float64_to_int64_round_to_zero
- );
- break;
-#endif
- case FLOAT64_TO_FLOAT32:
- test_a_float64_z_float32(
- slow_float64_to_float32, float64_to_float32 );
- break;
-#ifdef FLOATX80
- case FLOAT64_TO_FLOATX80:
- test_a_float64_z_floatx80(
- slow_float64_to_floatx80, float64_to_floatx80 );
- break;
-#endif
-#ifdef FLOAT128
- case FLOAT64_TO_FLOAT128:
- test_a_float64_z_float128(
- slow_float64_to_float128, float64_to_float128 );
- break;
-#endif
- case FLOAT64_ROUND_TO_INT:
- test_az_float64( slow_float64_round_to_int, float64_round_to_int );
- break;
- case FLOAT64_ADD:
- test_abz_float64( slow_float64_add, float64_add );
- break;
- case FLOAT64_SUB:
- test_abz_float64( slow_float64_sub, float64_sub );
- break;
- case FLOAT64_MUL:
- test_abz_float64( slow_float64_mul, float64_mul );
- break;
- case FLOAT64_DIV:
- test_abz_float64( slow_float64_div, float64_div );
- break;
- case FLOAT64_REM:
- test_abz_float64( slow_float64_rem, float64_rem );
- break;
- case FLOAT64_SQRT:
- test_az_float64( slow_float64_sqrt, float64_sqrt );
- break;
- case FLOAT64_EQ:
- test_ab_float64_z_flag( slow_float64_eq, float64_eq );
- break;
- case FLOAT64_LE:
- test_ab_float64_z_flag( slow_float64_le, float64_le );
- break;
- case FLOAT64_LT:
- test_ab_float64_z_flag( slow_float64_lt, float64_lt );
- break;
- case FLOAT64_EQ_SIGNALING:
- test_ab_float64_z_flag(
- slow_float64_eq_signaling, float64_eq_signaling );
- break;
- case FLOAT64_LE_QUIET:
- test_ab_float64_z_flag( slow_float64_le_quiet, float64_le_quiet );
- break;
- case FLOAT64_LT_QUIET:
- test_ab_float64_z_flag( slow_float64_lt_quiet, float64_lt_quiet );
- break;
-#ifdef FLOATX80
- case FLOATX80_TO_INT32:
- test_a_floatx80_z_int32( slow_floatx80_to_int32, floatx80_to_int32 );
- break;
- case FLOATX80_TO_INT32_ROUND_TO_ZERO:
- test_a_floatx80_z_int32(
- slow_floatx80_to_int32_round_to_zero,
- floatx80_to_int32_round_to_zero
- );
- break;
-#ifdef BITS64
- case FLOATX80_TO_INT64:
- test_a_floatx80_z_int64( slow_floatx80_to_int64, floatx80_to_int64 );
- break;
- case FLOATX80_TO_INT64_ROUND_TO_ZERO:
- test_a_floatx80_z_int64(
- slow_floatx80_to_int64_round_to_zero,
- floatx80_to_int64_round_to_zero
- );
- break;
-#endif
- case FLOATX80_TO_FLOAT32:
- test_a_floatx80_z_float32(
- slow_floatx80_to_float32, floatx80_to_float32 );
- break;
- case FLOATX80_TO_FLOAT64:
- test_a_floatx80_z_float64(
- slow_floatx80_to_float64, floatx80_to_float64 );
- break;
-#ifdef FLOAT128
- case FLOATX80_TO_FLOAT128:
- test_a_floatx80_z_float128(
- slow_floatx80_to_float128, floatx80_to_float128 );
- break;
-#endif
- case FLOATX80_ROUND_TO_INT:
- test_az_floatx80( slow_floatx80_round_to_int, floatx80_round_to_int );
- break;
- case FLOATX80_ADD:
- test_abz_floatx80( slow_floatx80_add, floatx80_add );
- break;
- case FLOATX80_SUB:
- test_abz_floatx80( slow_floatx80_sub, floatx80_sub );
- break;
- case FLOATX80_MUL:
- test_abz_floatx80( slow_floatx80_mul, floatx80_mul );
- break;
- case FLOATX80_DIV:
- test_abz_floatx80( slow_floatx80_div, floatx80_div );
- break;
- case FLOATX80_REM:
- test_abz_floatx80( slow_floatx80_rem, floatx80_rem );
- break;
- case FLOATX80_SQRT:
- test_az_floatx80( slow_floatx80_sqrt, floatx80_sqrt );
- break;
- case FLOATX80_EQ:
- test_ab_floatx80_z_flag( slow_floatx80_eq, floatx80_eq );
- break;
- case FLOATX80_LE:
- test_ab_floatx80_z_flag( slow_floatx80_le, floatx80_le );
- break;
- case FLOATX80_LT:
- test_ab_floatx80_z_flag( slow_floatx80_lt, floatx80_lt );
- break;
- case FLOATX80_EQ_SIGNALING:
- test_ab_floatx80_z_flag(
- slow_floatx80_eq_signaling, floatx80_eq_signaling );
- break;
- case FLOATX80_LE_QUIET:
- test_ab_floatx80_z_flag( slow_floatx80_le_quiet, floatx80_le_quiet );
- break;
- case FLOATX80_LT_QUIET:
- test_ab_floatx80_z_flag( slow_floatx80_lt_quiet, floatx80_lt_quiet );
- break;
-#endif
-#ifdef FLOAT128
- case FLOAT128_TO_INT32:
- test_a_float128_z_int32( slow_float128_to_int32, float128_to_int32 );
- break;
- case FLOAT128_TO_INT32_ROUND_TO_ZERO:
- test_a_float128_z_int32(
- slow_float128_to_int32_round_to_zero,
- float128_to_int32_round_to_zero
- );
- break;
-#ifdef BITS64
- case FLOAT128_TO_INT64:
- test_a_float128_z_int64( slow_float128_to_int64, float128_to_int64 );
- break;
- case FLOAT128_TO_INT64_ROUND_TO_ZERO:
- test_a_float128_z_int64(
- slow_float128_to_int64_round_to_zero,
- float128_to_int64_round_to_zero
- );
- break;
-#endif
- case FLOAT128_TO_FLOAT32:
- test_a_float128_z_float32(
- slow_float128_to_float32, float128_to_float32 );
- break;
- case FLOAT128_TO_FLOAT64:
- test_a_float128_z_float64(
- slow_float128_to_float64, float128_to_float64 );
- break;
-#ifdef FLOATX80
- case FLOAT128_TO_FLOATX80:
- test_a_float128_z_floatx80(
- slow_float128_to_floatx80, float128_to_floatx80 );
- break;
-#endif
- case FLOAT128_ROUND_TO_INT:
- test_az_float128( slow_float128_round_to_int, float128_round_to_int );
- break;
- case FLOAT128_ADD:
- test_abz_float128( slow_float128_add, float128_add );
- break;
- case FLOAT128_SUB:
- test_abz_float128( slow_float128_sub, float128_sub );
- break;
- case FLOAT128_MUL:
- test_abz_float128( slow_float128_mul, float128_mul );
- break;
- case FLOAT128_DIV:
- test_abz_float128( slow_float128_div, float128_div );
- break;
- case FLOAT128_REM:
- test_abz_float128( slow_float128_rem, float128_rem );
- break;
- case FLOAT128_SQRT:
- test_az_float128( slow_float128_sqrt, float128_sqrt );
- break;
- case FLOAT128_EQ:
- test_ab_float128_z_flag( slow_float128_eq, float128_eq );
- break;
- case FLOAT128_LE:
- test_ab_float128_z_flag( slow_float128_le, float128_le );
- break;
- case FLOAT128_LT:
- test_ab_float128_z_flag( slow_float128_lt, float128_lt );
- break;
- case FLOAT128_EQ_SIGNALING:
- test_ab_float128_z_flag(
- slow_float128_eq_signaling, float128_eq_signaling );
- break;
- case FLOAT128_LE_QUIET:
- test_ab_float128_z_flag( slow_float128_le_quiet, float128_le_quiet );
- break;
- case FLOAT128_LT_QUIET:
- test_ab_float128_z_flag( slow_float128_lt_quiet, float128_lt_quiet );
- break;
-#endif
- }
- if ( ( errorStop && anyErrors ) || stop ) exitWithStatus();
-
-}
-
-static void
- testFunction(
- uint8 functionCode,
- int8 roundingPrecisionIn,
- int8 roundingModeIn,
- int8 tininessModeIn
- )
-{
- int8 roundingPrecision, roundingMode, tininessMode;
-
- roundingPrecision = 32;
- for (;;) {
- if ( ! functions[ functionCode ].roundingPrecision ) {
- roundingPrecision = 0;
- }
- else if ( roundingPrecisionIn ) {
- roundingPrecision = roundingPrecisionIn;
- }
- for ( roundingMode = 1;
- roundingMode < NUM_ROUNDINGMODES;
- ++roundingMode
- ) {
- if ( ! functions[ functionCode ].roundingMode ) {
- roundingMode = 0;
- }
- else if ( roundingModeIn ) {
- roundingMode = roundingModeIn;
- }
- for ( tininessMode = 1;
- tininessMode < NUM_TININESSMODES;
- ++tininessMode
- ) {
- if ( ( roundingPrecision == 32 )
- || ( roundingPrecision == 64 ) ) {
- if ( ! functions[ functionCode ]
- .tininessModeAtReducedPrecision
- ) {
- tininessMode = 0;
- }
- else if ( tininessModeIn ) {
- tininessMode = tininessModeIn;
- }
- }
- else {
- if ( ! functions[ functionCode ].tininessMode ) {
- tininessMode = 0;
- }
- else if ( tininessModeIn ) {
- tininessMode = tininessModeIn;
- }
- }
- testFunctionVariety(
- functionCode, roundingPrecision, roundingMode, tininessMode
- );
- if ( tininessModeIn || ! tininessMode ) break;
- }
- if ( roundingModeIn || ! roundingMode ) break;
- }
- if ( roundingPrecisionIn || ! roundingPrecision ) break;
- if ( roundingPrecision == 80 ) {
- break;
- }
- else if ( roundingPrecision == 64 ) {
- roundingPrecision = 80;
- }
- else if ( roundingPrecision == 32 ) {
- roundingPrecision = 64;
- }
- }
-
-}
-
-int
-main( int argc, char **argv )
-{
- char *argPtr;
- flag functionArgument;
- uint8 functionCode;
- int8 operands, roundingPrecision, roundingMode, tininessMode;
-
- fail_programName = "testsoftfloat";
- if ( argc <= 1 ) goto writeHelpMessage;
- testCases_setLevel( 1 );
- trueName = "true";
- testName = "soft";
- errorStop = FALSE;
- forever = FALSE;
- maxErrorCount = 20;
- trueFlagsPtr = &slow_float_exception_flags;
- testFlagsFunctionPtr = clearFlags;
- functionArgument = FALSE;
- functionCode = 0;
- operands = 0;
- roundingPrecision = 0;
- roundingMode = 0;
- tininessMode = 0;
- --argc;
- ++argv;
- while ( argc && ( argPtr = argv[ 0 ] ) ) {
- if ( argPtr[ 0 ] == '-' ) ++argPtr;
- if ( strcmp( argPtr, "help" ) == 0 ) {
- writeHelpMessage:
- fputs(
-"testsoftfloat [<option>...] <function>\n"
-" <option>: (* is default)\n"
-" -help --Write this message and exit.\n"
-" -level <num> --Testing level <num> (1 or 2).\n"
-" * -level 1\n"
-" -errors <num> --Stop each function test after <num> errors.\n"
-" * -errors 20\n"
-" -errorstop --Exit after first function with any error.\n"
-" -forever --Test one function repeatedly (implies `-level 2').\n"
-#ifdef FLOATX80
-" -precision32 --Only test rounding precision equivalent to float32.\n"
-" -precision64 --Only test rounding precision equivalent to float64.\n"
-" -precision80 --Only test maximum rounding precision.\n"
-#endif
-" -nearesteven --Only test rounding to nearest/even.\n"
-" -tozero --Only test rounding to zero.\n"
-" -down --Only test rounding down.\n"
-" -up --Only test rounding up.\n"
-" -tininessbefore --Only test underflow tininess before rounding.\n"
-" -tininessafter --Only test underflow tininess after rounding.\n"
-" <function>:\n"
-" int32_to_<float> <float>_add <float>_eq\n"
-" <float>_to_int32 <float>_sub <float>_le\n"
-" <float>_to_int32_round_to_zero <float>_mul <float>_lt\n"
-#ifdef BITS64
-" int64_to_<float> <float>_div <float>_eq_signaling\n"
-" <float>_to_int64 <float>_rem <float>_le_quiet\n"
-" <float>_to_int64_round_to_zero <float>_lt_quiet\n"
-" <float>_to_<float>\n"
-" <float>_round_to_int\n"
-" <float>_sqrt\n"
-#else
-" <float>_to_<float> <float>_div <float>_eq_signaling\n"
-" <float>_round_to_int <float>_rem <float>_le_quiet\n"
-" <float>_sqrt <float>_lt_quiet\n"
-#endif
-" -all1 --All 1-operand functions.\n"
-" -all2 --All 2-operand functions.\n"
-" -all --All functions.\n"
-" <float>:\n"
-" float32 --Single precision.\n"
-" float64 --Double precision.\n"
-#ifdef FLOATX80
-" floatx80 --Extended double precision.\n"
-#endif
-#ifdef FLOAT128
-" float128 --Quadruple precision.\n"
-#endif
- ,
- stdout
- );
- return EXIT_SUCCESS;
- }
- else if ( strcmp( argPtr, "level" ) == 0 ) {
- if ( argc < 2 ) goto optionError;
- testCases_setLevel( atoi( argv[ 1 ] ) );
- --argc;
- ++argv;
- }
- else if ( strcmp( argPtr, "level1" ) == 0 ) {
- testCases_setLevel( 1 );
- }
- else if ( strcmp( argPtr, "level2" ) == 0 ) {
- testCases_setLevel( 2 );
- }
- else if ( strcmp( argPtr, "errors" ) == 0 ) {
- if ( argc < 2 ) {
- optionError:
- fail( "`%s' option requires numeric argument", argv[ 0 ] );
- }
- maxErrorCount = atoi( argv[ 1 ] );
- --argc;
- ++argv;
- }
- else if ( strcmp( argPtr, "errorstop" ) == 0 ) {
- errorStop = TRUE;
- }
- else if ( strcmp( argPtr, "forever" ) == 0 ) {
- testCases_setLevel( 2 );
- forever = TRUE;
- }
-#ifdef FLOATX80
- else if ( strcmp( argPtr, "precision32" ) == 0 ) {
- roundingPrecision = 32;
- }
- else if ( strcmp( argPtr, "precision64" ) == 0 ) {
- roundingPrecision = 64;
- }
- else if ( strcmp( argPtr, "precision80" ) == 0 ) {
- roundingPrecision = 80;
- }
-#endif
- else if ( ( strcmp( argPtr, "nearesteven" ) == 0 )
- || ( strcmp( argPtr, "nearest_even" ) == 0 ) ) {
- roundingMode = ROUND_NEAREST_EVEN;
- }
- else if ( ( strcmp( argPtr, "tozero" ) == 0 )
- || ( strcmp( argPtr, "to_zero" ) == 0 ) ) {
- roundingMode = ROUND_TO_ZERO;
- }
- else if ( strcmp( argPtr, "down" ) == 0 ) {
- roundingMode = ROUND_DOWN;
- }
- else if ( strcmp( argPtr, "up" ) == 0 ) {
- roundingMode = ROUND_UP;
- }
- else if ( strcmp( argPtr, "tininessbefore" ) == 0 ) {
- tininessMode = TININESS_BEFORE_ROUNDING;
- }
- else if ( strcmp( argPtr, "tininessafter" ) == 0 ) {
- tininessMode = TININESS_AFTER_ROUNDING;
- }
- else if ( strcmp( argPtr, "all1" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 1;
- }
- else if ( strcmp( argPtr, "all2" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 2;
- }
- else if ( strcmp( argPtr, "all" ) == 0 ) {
- functionArgument = TRUE;
- functionCode = 0;
- operands = 0;
- }
- else {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( strcmp( argPtr, functions[ functionCode ].name ) == 0 ) {
- break;
- }
- }
- if ( functionCode == NUM_FUNCTIONS ) {
- fail( "Invalid option or function `%s'", argv[ 0 ] );
- }
- functionArgument = TRUE;
- }
- --argc;
- ++argv;
- }
- if ( ! functionArgument ) fail( "Function argument required" );
- (void) signal( SIGINT, catchSIGINT );
- (void) signal( SIGTERM, catchSIGINT );
- if ( functionCode ) {
- if ( forever ) {
- if ( ! roundingPrecision ) roundingPrecision = 80;
- if ( ! roundingMode ) roundingMode = ROUND_NEAREST_EVEN;
- }
- testFunction(
- functionCode, roundingPrecision, roundingMode, tininessMode );
- }
- else {
- if ( operands == 1 ) {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( functions[ functionCode ].numInputs == 1 ) {
- testFunction(
- functionCode,
- roundingPrecision,
- roundingMode,
- tininessMode
- );
- }
- }
- }
- else if ( operands == 2 ) {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- if ( functions[ functionCode ].numInputs == 2 ) {
- testFunction(
- functionCode,
- roundingPrecision,
- roundingMode,
- tininessMode
- );
- }
- }
- }
- else {
- for ( functionCode = 1;
- functionCode < NUM_FUNCTIONS;
- ++functionCode
- ) {
- testFunction(
- functionCode, roundingPrecision, roundingMode, tininessMode
- );
- }
- }
- }
- exitWithStatus();
-
-}
-
diff --git a/tools/test/testfloat/writeHex.c b/tools/test/testfloat/writeHex.c
deleted file mode 100644
index f304aed631d5..000000000000
--- a/tools/test/testfloat/writeHex.c
+++ /dev/null
@@ -1,183 +0,0 @@
-
-/*
-===============================================================================
-
-This C source file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <stdio.h>
-#include "milieu.h"
-#include "softfloat.h"
-#include "writeHex.h"
-
-void writeHex_flag( flag a, FILE *stream )
-{
-
- fputc( a ? '1' : '0', stream );
-
-}
-
-static void writeHex_bits8( bits8 a, FILE *stream )
-{
- int digit;
-
- digit = ( a>>4 ) & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
- digit = a & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
-
-}
-
-static void writeHex_bits12( int16 a, FILE *stream )
-{
- int digit;
-
- digit = ( a>>8 ) & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
- digit = ( a>>4 ) & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
- digit = a & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
-
-}
-
-static void writeHex_bits16( bits16 a, FILE *stream )
-{
- int digit;
-
- digit = ( a>>12 ) & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
- digit = ( a>>8 ) & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
- digit = ( a>>4 ) & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
- digit = a & 0xF;
- if ( 9 < digit ) digit += 'A' - ( '0' + 10 );
- fputc( '0' + digit, stream );
-
-}
-
-void writeHex_bits32( bits32 a, FILE *stream )
-{
-
- writeHex_bits16( a>>16, stream );
- writeHex_bits16( a, stream );
-
-}
-
-#ifdef BITS64
-
-void writeHex_bits64( bits64 a, FILE *stream )
-{
-
- writeHex_bits32( a>>32, stream );
- writeHex_bits32( a, stream );
-
-}
-
-#endif
-
-void writeHex_float32( float32 a, FILE *stream )
-{
-
- fputc( ( ( (sbits32) a ) < 0 ) ? '8' : '0', stream );
- writeHex_bits8( a>>23, stream );
- fputc( '.', stream );
- writeHex_bits8( ( a>>16 ) & 0x7F, stream );
- writeHex_bits16( a, stream );
-
-}
-
-#ifdef BITS64
-
-void writeHex_float64( float64 a, FILE *stream )
-{
-
- writeHex_bits12( a>>52, stream );
- fputc( '.', stream );
- writeHex_bits12( a>>40, stream );
- writeHex_bits8( a>>32, stream );
- writeHex_bits32( a, stream );
-
-}
-
-#else
-
-void writeHex_float64( float64 a, FILE *stream )
-{
-
- writeHex_bits12( a.high>>20, stream );
- fputc( '.', stream );
- writeHex_bits12( a.high>>8, stream );
- writeHex_bits8( a.high, stream );
- writeHex_bits32( a.low, stream );
-
-}
-
-#endif
-
-#ifdef FLOATX80
-
-void writeHex_floatx80( floatx80 a, FILE *stream )
-{
-
- writeHex_bits16( a.high, stream );
- fputc( '.', stream );
- writeHex_bits64( a.low, stream );
-
-}
-
-#endif
-
-#ifdef FLOAT128
-
-void writeHex_float128( float128 a, FILE *stream )
-{
-
- writeHex_bits16( a.high>>48, stream );
- fputc( '.', stream );
- writeHex_bits16( a.high>>32, stream );
- writeHex_bits32( a.high, stream );
- writeHex_bits64( a.low, stream );
-
-}
-
-#endif
-
-void writeHex_float_flags( uint8 flags, FILE *stream )
-{
-
- fputc( flags & float_flag_invalid ? 'v' : '.', stream );
- fputc( flags & float_flag_divbyzero ? 'z' : '.', stream );
- fputc( flags & float_flag_overflow ? 'o' : '.', stream );
- fputc( flags & float_flag_underflow ? 'u' : '.', stream );
- fputc( flags & float_flag_inexact ? 'x' : '.', stream );
-
-}
-
diff --git a/tools/test/testfloat/writeHex.h b/tools/test/testfloat/writeHex.h
deleted file mode 100644
index 0dde44c43d34..000000000000
--- a/tools/test/testfloat/writeHex.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
-===============================================================================
-
-This C header file is part of TestFloat, Release 2a, a package of programs
-for testing the correctness of floating-point arithmetic complying to the
-IEC/IEEE Standard for Floating-Point.
-
-Written by John R. Hauser. More information is available through the Web
-page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
-
-THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
-has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
-TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
-PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
-AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-
-Derivative works are acceptable, even for commercial purposes, so long as
-(1) they include prominent notice that the work is derivative, and (2) they
-include prominent notice akin to these four paragraphs for those parts of
-this code that are retained.
-
-===============================================================================
-*/
-
-#include <stdio.h>
-
-void writeHex_flag( flag, FILE * );
-void writeHex_bits32( bits32, FILE * );
-#ifdef BITS64
-void writeHex_bits64( bits64, FILE * );
-#endif
-void writeHex_float32( float32, FILE * );
-void writeHex_float64( float64, FILE * );
-#ifdef FLOATX80
-void writeHex_floatx80( floatx80, FILE * );
-#endif
-#ifdef FLOAT128
-void writeHex_float128( float128, FILE * );
-#endif
-void writeHex_float_flags( uint8, FILE * );
-
diff --git a/tools/test/upsdl/Makefile b/tools/test/upsdl/Makefile
index 448cb7a02b4f..e134d92ea665 100644
--- a/tools/test/upsdl/Makefile
+++ b/tools/test/upsdl/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= upsdl
MAN=
diff --git a/tools/test/upsdl/upsdl.c b/tools/test/upsdl/upsdl.c
index 960b034ffcfe..e091d9d55b50 100644
--- a/tools/test/upsdl/upsdl.c
+++ b/tools/test/upsdl/upsdl.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
diff --git a/tools/test/vm86/Makefile b/tools/test/vm86/Makefile
index e895b3f85498..4fd25a7f4ad3 100644
--- a/tools/test/vm86/Makefile
+++ b/tools/test/vm86/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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 8744213b8652..cbdb2c68a6df 100644
--- a/tools/test/vm86/vm86_test.c
+++ b/tools/test/vm86/vm86_test.c
@@ -1,8 +1,7 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * 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.
@@ -30,7 +29,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
/* $Id: vm86_test.c,v 1.10 2018/05/12 11:35:58 kostik Exp kostik $ */
#include <sys/param.h>
diff --git a/tools/test/vm86/vm86_test_asm.s b/tools/test/vm86/vm86_test_asm.s
index bf032bdd232a..0d76d2e77b1e 100644
--- a/tools/test/vm86/vm86_test_asm.s
+++ b/tools/test/vm86/vm86_test_asm.s
@@ -1,8 +1,7 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * 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.
@@ -27,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
* $Id: vm86_test_asm.s,v 1.2 2018/05/12 11:39:00 kostik Exp kostik $
*/
diff --git a/tools/test/xregs_sig/Makefile b/tools/test/xregs_sig/Makefile
new file mode 100644
index 000000000000..fe0de78b40a0
--- /dev/null
+++ b/tools/test/xregs_sig/Makefile
@@ -0,0 +1,10 @@
+.include <src.opts.mk>
+
+PROG= xregs_sig
+SRCS= xregs_sig.c c2x2c_${MACHINE_CPUARCH}.S
+
+MAN=
+
+LIBADD= pthread
+
+.include <bsd.prog.mk>
diff --git a/tools/test/xregs_sig/c2x2c_aarch64.S b/tools/test/xregs_sig/c2x2c_aarch64.S
new file mode 100644
index 000000000000..2bb73c114b26
--- /dev/null
+++ b/tools/test/xregs_sig/c2x2c_aarch64.S
@@ -0,0 +1,64 @@
+/*
+ * This file is in public domain.
+ * Written by Dmitry Chagin <dchagin@FreeBSD.org>
+ */
+
+ .text
+
+ .globl xregs_banks_max
+ .type xregs_banks_max, @function
+xregs_banks_max:
+ mov x0, #0
+ ret
+
+ .size xregs_banks_max, . - xregs_banks_max
+
+
+ .globl cpu_to_vfp
+ .type cpu_to_vfp, @function
+cpu_to_vfp:
+ stp q0, q1, [x0, #( 0 * 16)]
+ stp q2, q3, [x0, #( 2 * 16)]
+ stp q4, q5, [x0, #( 4 * 16)]
+ stp q6, q7, [x0, #( 6 * 16)]
+ stp q8, q9, [x0, #( 8 * 16)]
+ stp q10, q11, [x0, #(10 * 16)]
+ stp q12, q13, [x0, #(12 * 16)]
+ stp q14, q15, [x0, #(14 * 16)]
+ stp q16, q17, [x0, #(16 * 16)]
+ stp q18, q19, [x0, #(18 * 16)]
+ stp q20, q21, [x0, #(20 * 16)]
+ stp q22, q23, [x0, #(22 * 16)]
+ stp q24, q25, [x0, #(24 * 16)]
+ stp q26, q27, [x0, #(26 * 16)]
+ stp q28, q29, [x0, #(28 * 16)]
+ stp q30, q31, [x0, #(30 * 16)]
+ ret
+
+ .size cpu_to_vfp, . - cpu_to_vfp
+
+
+ .globl vfp_to_cpu
+ .type vfp_to_cpu, @function
+vfp_to_cpu:
+ ldp q0, q1, [x0, #( 0 * 16)]
+ ldp q2, q3, [x0, #( 2 * 16)]
+ ldp q4, q5, [x0, #( 4 * 16)]
+ ldp q6, q7, [x0, #( 6 * 16)]
+ ldp q8, q9, [x0, #( 8 * 16)]
+ ldp q10, q11, [x0, #(10 * 16)]
+ ldp q12, q13, [x0, #(12 * 16)]
+ ldp q14, q15, [x0, #(14 * 16)]
+ ldp q16, q17, [x0, #(16 * 16)]
+ ldp q18, q19, [x0, #(18 * 16)]
+ ldp q20, q21, [x0, #(20 * 16)]
+ ldp q22, q23, [x0, #(22 * 16)]
+ ldp q24, q25, [x0, #(24 * 16)]
+ ldp q26, q27, [x0, #(26 * 16)]
+ ldp q28, q29, [x0, #(28 * 16)]
+ ldp q30, q31, [x0, #(30 * 16)]
+ ret
+
+ .size vfp_to_cpu, . - vfp_to_cpu
+
+ .section .note.GNU-stack,"",@progbits
diff --git a/tools/test/xregs_sig/c2x2c_amd64.S b/tools/test/xregs_sig/c2x2c_amd64.S
new file mode 100644
index 000000000000..637090d53f46
--- /dev/null
+++ b/tools/test/xregs_sig/c2x2c_amd64.S
@@ -0,0 +1,140 @@
+/*
+ * This file is in public domain.
+ * Written by Dmitry Chagin <dchagin@FreeBSD.org>
+ */
+
+#if defined(__FreeBSD__)
+#include <machine/specialreg.h>
+#else
+#define CPUID2_OSXSAVE 0x08000000
+#define CPUID2_AVX 0x10000000
+#define XFEATURE_ENABLED_X87 0x00000001
+#define XFEATURE_ENABLED_SSE 0x00000002
+#define XFEATURE_ENABLED_AVX 0x00000004
+#define XFEATURE_AVX \
+ (XFEATURE_ENABLED_X87 | XFEATURE_ENABLED_SSE | XFEATURE_ENABLED_AVX)
+#endif
+
+ .text
+
+ .globl xregs_banks_max
+ .type xregs_banks_max, @function
+xregs_banks_max:
+ pushq %rbx
+ movl $1, %eax
+ cpuid
+ andl $(CPUID2_AVX|CPUID2_OSXSAVE), %ecx
+ cmpl $(CPUID2_AVX|CPUID2_OSXSAVE), %ecx
+ jne sse
+ xorl %ecx, %ecx
+ xgetbv
+ andl $XFEATURE_AVX, %eax
+ cmpl $XFEATURE_AVX, %eax
+ jne sse
+ movl $1, %eax
+ jmp out
+sse:
+ xorl %eax, %eax
+out:
+ popq %rbx
+ retq
+
+ .size xregs_banks_max, . - xregs_banks_max
+
+
+ .globl cpu_to_xmm
+ .type cpu_to_xmm, @function
+cpu_to_xmm:
+ movdqu %xmm0, (%rdi)
+ movdqu %xmm1, 1 * 16(%rdi)
+ movdqu %xmm2, 2 * 16(%rdi)
+ movdqu %xmm3, 3 * 16(%rdi)
+ movdqu %xmm4, 4 * 16(%rdi)
+ movdqu %xmm5, 5 * 16(%rdi)
+ movdqu %xmm6, 6 * 16(%rdi)
+ movdqu %xmm7, 7 * 16(%rdi)
+ movdqu %xmm8, 8 * 16(%rdi)
+ movdqu %xmm9, 9 * 16(%rdi)
+ movdqu %xmm10, 10 * 16(%rdi)
+ movdqu %xmm11, 11 * 16(%rdi)
+ movdqu %xmm12, 12 * 16(%rdi)
+ movdqu %xmm13, 13 * 16(%rdi)
+ movdqu %xmm14, 14 * 16(%rdi)
+ movdqu %xmm15, 15 * 16(%rdi)
+ retq
+
+ .size cpu_to_xmm, . - cpu_to_xmm
+
+
+ .globl xmm_to_cpu
+ .type xmm_to_cpu, @function
+xmm_to_cpu:
+ movdqu (%rdi), %xmm0
+ movdqu 1 * 16(%rdi), %xmm1
+ movdqu 2 * 16(%rdi), %xmm2
+ movdqu 3 * 16(%rdi), %xmm3
+ movdqu 4 * 16(%rdi), %xmm4
+ movdqu 5 * 16(%rdi), %xmm5
+ movdqu 6 * 16(%rdi), %xmm6
+ movdqu 7 * 16(%rdi), %xmm7
+ movdqu 8 * 16(%rdi), %xmm8
+ movdqu 9 * 16(%rdi), %xmm9
+ movdqu 10 * 16(%rdi), %xmm10
+ movdqu 11 * 16(%rdi), %xmm11
+ movdqu 12 * 16(%rdi), %xmm12
+ movdqu 13 * 16(%rdi), %xmm13
+ movdqu 14 * 16(%rdi), %xmm14
+ movdqu 15 * 16(%rdi), %xmm15
+ retq
+
+ .size xmm_to_cpu, . - xmm_to_cpu
+
+
+ .globl cpu_to_avx
+ .type cpu_to_avx, @function
+cpu_to_avx:
+ vmovdqu %ymm0, (%rdi)
+ vmovdqu %ymm1, 1 * 32(%rdi)
+ vmovdqu %ymm2, 2 * 32(%rdi)
+ vmovdqu %ymm3, 3 * 32(%rdi)
+ vmovdqu %ymm4, 4 * 32(%rdi)
+ vmovdqu %ymm5, 5 * 32(%rdi)
+ vmovdqu %ymm6, 6 * 32(%rdi)
+ vmovdqu %ymm7, 7 * 32(%rdi)
+ vmovdqu %ymm8, 8 * 32(%rdi)
+ vmovdqu %ymm9, 9 * 32(%rdi)
+ vmovdqu %ymm10, 10 * 32(%rdi)
+ vmovdqu %ymm11, 11 * 32(%rdi)
+ vmovdqu %ymm12, 12 * 32(%rdi)
+ vmovdqu %ymm13, 13 * 32(%rdi)
+ vmovdqu %ymm14, 14 * 32(%rdi)
+ vmovdqu %ymm15, 15 * 32(%rdi)
+ retq
+
+ .size cpu_to_avx, . - cpu_to_avx
+
+
+ .globl avx_to_cpu
+ .type avx_to_cpu, @function
+avx_to_cpu:
+ vmovdqu (%rdi), %ymm0
+ vmovdqu 1 * 32(%rdi), %ymm1
+ vmovdqu 2 * 32(%rdi), %ymm2
+ vmovdqu 3 * 32(%rdi), %ymm3
+ vmovdqu 4 * 32(%rdi), %ymm4
+ vmovdqu 5 * 32(%rdi), %ymm5
+ vmovdqu 6 * 32(%rdi), %ymm6
+ vmovdqu 7 * 32(%rdi), %ymm7
+ vmovdqu 8 * 32(%rdi), %ymm8
+ vmovdqu 9 * 32(%rdi), %ymm9
+ vmovdqu 10 * 32(%rdi), %ymm10
+ vmovdqu 11 * 32(%rdi), %ymm11
+ vmovdqu 12 * 32(%rdi), %ymm12
+ vmovdqu 13 * 32(%rdi), %ymm13
+ vmovdqu 14 * 32(%rdi), %ymm14
+ vmovdqu 15 * 32(%rdi), %ymm15
+ retq
+
+ .size avx_to_cpu, . - avx_to_cpu
+
+ .section .note.GNU-stack,"",@progbits
diff --git a/tools/test/xregs_sig/xregs_sig.c b/tools/test/xregs_sig/xregs_sig.c
new file mode 100644
index 000000000000..2ed47b4eb3bc
--- /dev/null
+++ b/tools/test/xregs_sig/xregs_sig.c
@@ -0,0 +1,262 @@
+/* $Id: avx_sig.c,v 1.12 2021/12/11 22:47:09 kostik Exp $ */
+/*
+ * Naive test to check that context switches and signal delivery do
+ * not corrupt AVX registers file (%xmm). Run until some
+ * inconsistency detected, then aborts.
+ *
+ * FreeBSD:
+ * ${CC} -Wall -Wextra -O -g -o avx_sig avx_sig.c -lpthread
+ * Linux
+ * ${CC} -D_GNU_SOURCE -Wall -Wextra -O -g -o avx_sig avx_sig.c -lbsd -lpthread
+ */
+
+#include <sys/param.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/syscall.h>
+#include <errno.h>
+#include <pthread.h>
+#ifdef __FreeBSD__
+#include <pthread_np.h>
+#endif
+#ifdef __linux__
+#ifdef __GLIBC__
+#include <gnu/libc-version.h>
+#endif
+#if !defined(__GLIBC__) || (__GLIBC__ * 100 + __GLIBC_MINOR__) < 236
+#include <bsd/stdlib.h>
+#endif
+#endif
+#include <signal.h>
+#include <stdatomic.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/* SIGALRM interval in seconds. */
+#ifndef TIMO
+#define TIMO 5
+#endif
+
+#ifndef __unused
+#define __unused __attribute__((__unused__))
+#endif
+
+struct xregs_bank {
+ const char *b_name;
+ const char *r_name;
+ uint32_t regs;
+ uint32_t bytes;
+ void (*x2c)(uint8_t *);
+ void (*c2x)(uint8_t *);
+};
+
+int xregs_banks_max(void);
+
+#if defined(__amd64__)
+void cpu_to_xmm(uint8_t *);
+void xmm_to_cpu(uint8_t *);
+void cpu_to_avx(uint8_t *);
+void avx_to_cpu(uint8_t *);
+
+static const struct xregs_bank xregs_banks[] = {
+ {
+ .b_name = "SSE",
+ .r_name = "xmm",
+ .regs = 16,
+ .bytes = 16,
+ .x2c = xmm_to_cpu,
+ .c2x = cpu_to_xmm,
+ },
+ {
+ .b_name = "AVX",
+ .r_name = "ymm",
+ .regs = 16,
+ .bytes = 32,
+ .x2c = avx_to_cpu,
+ .c2x = cpu_to_avx,
+ },
+};
+#elif defined(__aarch64__)
+void cpu_to_vfp(uint8_t *);
+void vfp_to_cpu(uint8_t *);
+
+static const struct xregs_bank xregs_banks[] = {
+ {
+ .b_name = "VFP",
+ .r_name = "q",
+ .regs = 32,
+ .bytes = 16,
+ .x2c = vfp_to_cpu,
+ .c2x = cpu_to_vfp,
+ },
+};
+#endif
+
+static atomic_uint sigs;
+static int max_bank_idx;
+
+
+static void
+sigusr1_handler(int sig __unused, siginfo_t *si __unused, void *m __unused)
+{
+ atomic_fetch_add_explicit(&sigs, 1, memory_order_relaxed);
+}
+
+static void
+sigalrm_handler(int sig __unused)
+{
+ struct rusage r;
+
+ if (getrusage(RUSAGE_SELF, &r) == 0) {
+ printf("%lu vctx %lu nvctx %lu nsigs %u SIGUSR1\n",
+ r.ru_nvcsw, r.ru_nivcsw, r.ru_nsignals, sigs);
+ }
+ alarm(TIMO);
+}
+
+
+static void
+fill_xregs(uint8_t *xregs, int bank)
+{
+ arc4random_buf(xregs, xregs_banks[bank].regs * xregs_banks[bank].bytes);
+}
+
+static void
+dump_xregs(const uint8_t *r, int bank)
+{
+ unsigned k;
+
+ for (k = 0; k < xregs_banks[bank].bytes; k++) {
+ if (k != 0)
+ printf(" ");
+ printf("%02x", r[k]);
+ }
+ printf("\n");
+}
+
+static pthread_mutex_t show_lock;
+
+static void
+show_diff(const uint8_t *xregs1, const uint8_t *xregs2, int bank)
+{
+ const uint8_t *r1, *r2;
+ unsigned i, j;
+
+#if defined(__FreeBSD__)
+ printf("thr %d\n", pthread_getthreadid_np());
+#elif defined(__linux__)
+ printf("thr %ld\n", syscall(SYS_gettid));
+#endif
+ for (i = 0; i < xregs_banks[bank].regs; i++) {
+ r1 = xregs1 + i * xregs_banks[bank].bytes;
+ r2 = xregs2 + i * xregs_banks[bank].bytes;
+ for (j = 0; j < xregs_banks[bank].bytes; j++) {
+ if (r1[j] != r2[j]) {
+ printf("%%%s%u\n", xregs_banks[bank].r_name, i);
+ dump_xregs(r1, bank);
+ dump_xregs(r2, bank);
+ break;
+ }
+ }
+ }
+}
+
+static void
+my_pause(void)
+{
+ usleep(0);
+}
+
+static void *
+worker_thread(void *arg)
+{
+ int bank = (uintptr_t)arg;
+ int sz = xregs_banks[bank].regs * xregs_banks[bank].bytes;
+ uint8_t xregs[sz], xregs_cpu[sz], zero_xregs[sz];
+
+ memset(zero_xregs, 0, sz);
+
+ fill_xregs(xregs, bank);
+ for (;;) {
+ xregs_banks[bank].x2c(xregs);
+ my_pause();
+ xregs_banks[bank].c2x(xregs_cpu);
+ if (memcmp(xregs, xregs_cpu, sz) != 0) {
+ pthread_mutex_lock(&show_lock);
+ show_diff(xregs, xregs_cpu, bank);
+ abort();
+ pthread_mutex_unlock(&show_lock);
+ }
+
+ xregs_banks[bank].x2c(zero_xregs);
+ my_pause();
+ xregs_banks[bank].c2x(xregs_cpu);
+ if (memcmp(zero_xregs, xregs_cpu, sz) != 0) {
+ pthread_mutex_lock(&show_lock);
+ show_diff(zero_xregs, xregs_cpu, bank);
+ abort();
+ pthread_mutex_unlock(&show_lock);
+ }
+ }
+ return (NULL);
+}
+
+int
+main(void)
+{
+ struct sigaction sa;
+ int error, i, ncpu, bank;
+
+ max_bank_idx = xregs_banks_max();
+
+ bzero(&sa, sizeof(sa));
+ sa.sa_handler = sigalrm_handler;
+ if (sigaction(SIGALRM, &sa, NULL) == -1) {
+ fprintf(stderr, "sigaction SIGALRM %s\n", strerror(errno));
+ exit(1);
+ }
+
+ bzero(&sa, sizeof(sa));
+ sa.sa_sigaction = sigusr1_handler;
+ sa.sa_flags = SA_SIGINFO;
+ if (sigaction(SIGUSR1, &sa, NULL) == -1) {
+ fprintf(stderr, "sigaction SIGUSR1 %s\n", strerror(errno));
+ exit(1);
+ }
+
+ error = pthread_mutex_init(&show_lock, NULL);
+ if (error != 0) {
+ fprintf(stderr, "pthread_mutex_init %s\n", strerror(error));
+ exit(1);
+ }
+
+ ncpu = sysconf(_SC_NPROCESSORS_ONLN);
+ if (max_bank_idx == 0)
+ ncpu *= 2;
+ bank = 0;
+ pthread_t wt[ncpu];
+nextbank:
+ printf("Starting %d threads for registers bank %s sized [%d][%d]\n", ncpu,
+ xregs_banks[bank].b_name, xregs_banks[bank].regs, xregs_banks[bank].bytes);
+ for (i = 0; i < ncpu; i++) {
+ error = pthread_create(&wt[i], NULL, worker_thread,
+ (void *)(uintptr_t)bank);
+ if (error != 0) {
+ fprintf(stderr, "pthread_create %s\n", strerror(error));
+ }
+ }
+ if (++bank <= max_bank_idx)
+ goto nextbank;
+
+ alarm(TIMO);
+ for (;;) {
+ for (i = 0; i < ncpu; i++) {
+ my_pause();
+ pthread_kill(wt[i], SIGUSR1);
+ }
+ }
+}
diff --git a/tools/tinder.sh b/tools/tinder.sh
index aaca7c8f35b9..615f0d2311af 100755
--- a/tools/tinder.sh
+++ b/tools/tinder.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/tools/README b/tools/tools/README
index 084c9fe65be9..c5b42d08ff0d 100644
--- a/tools/tools/README
+++ b/tools/tools/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
This directory is for tools.
@@ -18,7 +17,6 @@ cxgbetool A tool for the cxgbe(4) driver.
cxgbtool A tool for the cxgb(4) driver.
drm Tools specific to the DRM/KMS device drivers.
editing Editor modes and the like to help editing FreeBSD code.
-epfe Extract printing filter examples from printing.sgml.
ether_reflect An Ethernet packet reflector for low level testing.
find-sb Scan a disk for possible filesystem superblocks.
gdb_regofs A simple tool that prints out a register offset table
@@ -29,7 +27,6 @@ genericize Turn a kernel config into something that can more easily
be diffed against the appropriate GENERIC.
git Tools to simplify the use of git by committers.
hcomp Compress header files by removing comments and whitespace.
-html-mv Rename HTML generated filenames to human readable filenames.
ifinfo Uses the interface MIB to print out all the information
an interface exports in an ugly form.
indent_wrapper Tool for style(9) checking SVN/GIT patches.
@@ -46,7 +43,6 @@ kernxref Shellscript to cross reference symbols in the LINT kernel.
kttcp An in-kernel version of the ttcp network performance tool
man Scripts useful for working on man pages.
mctest A multicast test program
-mid Create a Message-ID database for mailing lists.
mwl Tools specific to the Marvell 88W8363 support
ncpus Count the number of processors
netmap Test applications for netmap(4)
@@ -55,8 +51,8 @@ npe Tools specific to the Intel IXP4XXX NPE device
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.
-portsinfo Generate list of new ports for last two weeks.
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 9f2f4a7249cd..2967029e7925 100644
--- a/tools/tools/aac/Makefile
+++ b/tools/tools/aac/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= aac_checkq
MAN=
BINDIR?=/usr/local/bin
diff --git a/tools/tools/aac/aac_checkq.c b/tools/tools/aac/aac_checkq.c
index 62eedb20aa51..007f224ba003 100644
--- a/tools/tools/aac/aac_checkq.c
+++ b/tools/tools/aac/aac_checkq.c
@@ -23,9 +23,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
diff --git a/tools/tools/ansify/Makefile b/tools/tools/ansify/Makefile
index 9519a4ce9fb2..b1dc9ec037d9 100644
--- a/tools/tools/ansify/Makefile
+++ b/tools/tools/ansify/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SCRIPTS= ansify.pl
BINDIR?= /usr/local/bin
diff --git a/tools/tools/ansify/ansify.pl b/tools/tools/ansify/ansify.pl
index e35546548425..3664c7fcb484 100644
--- a/tools/tools/ansify/ansify.pl
+++ b/tools/tools/ansify/ansify.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl -w
#-
-# Copyright (c) 2005 Dag-Erling Coïdan Smørgrav
+# Copyright (c) 2005 Dag-Erling Smørgrav
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
use v5.6.0;
diff --git a/tools/tools/ath/Makefile b/tools/tools/ath/Makefile
index 1b5543909b63..dd4526d7ab46 100644
--- a/tools/tools/ath/Makefile
+++ b/tools/tools/ath/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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 0eb8bb998aee..705d318948b0 100644
--- a/tools/tools/ath/Makefile.inc
+++ b/tools/tools/ath/Makefile.inc
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/ath/arcode/Makefile b/tools/tools/ath/arcode/Makefile
index b18fad426027..1c4aa6558f43 100644
--- a/tools/tools/ath/arcode/Makefile
+++ b/tools/tools/ath/arcode/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= arcode
MAN=
diff --git a/tools/tools/ath/arcode/arcode.c b/tools/tools/ath/arcode/arcode.c
index 463b954637a8..9fc2f98d2308 100644
--- a/tools/tools/ath/arcode/arcode.c
+++ b/tools/tools/ath/arcode/arcode.c
@@ -12,8 +12,6 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_9287_print/9287.c b/tools/tools/ath/ath_ee_9287_print/9287.c
index 3ed970cba65d..149f2c54c375 100644
--- a/tools/tools/ath/ath_ee_9287_print/9287.c
+++ b/tools/tools/ath/ath_ee_9287_print/9287.c
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_9287_print/9287.h b/tools/tools/ath/ath_ee_9287_print/9287.h
index 4cfc4241fdf3..ff14b72c8a91 100644
--- a/tools/tools/ath/ath_ee_9287_print/9287.h
+++ b/tools/tools/ath/ath_ee_9287_print/9287.h
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#ifndef __9287_H__
#define __9287_H__
diff --git a/tools/tools/ath/ath_ee_9287_print/Makefile b/tools/tools/ath/ath_ee_9287_print/Makefile
index e6765c48a47e..7948141c0e00 100644
--- a/tools/tools/ath/ath_ee_9287_print/Makefile
+++ b/tools/tools/ath/ath_ee_9287_print/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_9287_print
diff --git a/tools/tools/ath/ath_ee_9287_print/eeprom.c b/tools/tools/ath/ath_ee_9287_print/eeprom.c
index 9e5c865a48da..4c9aec948547 100644
--- a/tools/tools/ath/ath_ee_9287_print/eeprom.c
+++ b/tools/tools/ath/ath_ee_9287_print/eeprom.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_9287_print/eeprom.h b/tools/tools/ath/ath_ee_9287_print/eeprom.h
index a5fc76a9b58d..3eb8e0da912d 100644
--- a/tools/tools/ath/ath_ee_9287_print/eeprom.h
+++ b/tools/tools/ath/ath_ee_9287_print/eeprom.h
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#ifndef __EEPROM_H__
#define __EEPROM_H__
diff --git a/tools/tools/ath/ath_ee_9287_print/main.c b/tools/tools/ath/ath_ee_9287_print/main.c
index 128b01fe4092..3e9bc5f3d77e 100644
--- a/tools/tools/ath/ath_ee_9287_print/main.c
+++ b/tools/tools/ath/ath_ee_9287_print/main.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_9300_print/Makefile b/tools/tools/ath/ath_ee_9300_print/Makefile
index ad68eac3f9fb..c57f7e8c83bf 100644
--- a/tools/tools/ath/ath_ee_9300_print/Makefile
+++ b/tools/tools/ath/ath_ee_9300_print/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_9300_print
diff --git a/tools/tools/ath/ath_ee_9300_print/Makefile.depend b/tools/tools/ath/ath_ee_9300_print/Makefile.depend
index 8d409f5263ac..6ef78fac5cbf 100644
--- a/tools/tools/ath/ath_ee_9300_print/Makefile.depend
+++ b/tools/tools/ath/ath_ee_9300_print/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
diff --git a/tools/tools/ath/ath_ee_9300_print/main.c b/tools/tools/ath/ath_ee_9300_print/main.c
index 38dd879b55a1..82ecd982a85d 100644
--- a/tools/tools/ath/ath_ee_9300_print/main.c
+++ b/tools/tools/ath/ath_ee_9300_print/main.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_v14_print/Makefile b/tools/tools/ath/ath_ee_v14_print/Makefile
index 34e87782897c..c85903d423bd 100644
--- a/tools/tools/ath/ath_ee_v14_print/Makefile
+++ b/tools/tools/ath/ath_ee_v14_print/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_v14_print
diff --git a/tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c b/tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c
index 1340c78a814a..84587331269f 100644
--- a/tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c
+++ b/tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_v4k_print/Makefile b/tools/tools/ath/ath_ee_v4k_print/Makefile
index 89e415603bb9..a75e7fba8786 100644
--- a/tools/tools/ath/ath_ee_v4k_print/Makefile
+++ b/tools/tools/ath/ath_ee_v4k_print/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= ath_ee_v4k_print
diff --git a/tools/tools/ath/ath_ee_v4k_print/eeprom.c b/tools/tools/ath/ath_ee_v4k_print/eeprom.c
index 9e5c865a48da..4c9aec948547 100644
--- a/tools/tools/ath/ath_ee_v4k_print/eeprom.c
+++ b/tools/tools/ath/ath_ee_v4k_print/eeprom.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_v4k_print/eeprom.h b/tools/tools/ath/ath_ee_v4k_print/eeprom.h
index a5fc76a9b58d..3eb8e0da912d 100644
--- a/tools/tools/ath/ath_ee_v4k_print/eeprom.h
+++ b/tools/tools/ath/ath_ee_v4k_print/eeprom.h
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#ifndef __EEPROM_H__
#define __EEPROM_H__
diff --git a/tools/tools/ath/ath_ee_v4k_print/main.c b/tools/tools/ath/ath_ee_v4k_print/main.c
index 5ce3c3347766..b7dd1789f9ee 100644
--- a/tools/tools/ath/ath_ee_v4k_print/main.c
+++ b/tools/tools/ath/ath_ee_v4k_print/main.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/ath/ath_ee_v4k_print/v4k.c b/tools/tools/ath/ath_ee_v4k_print/v4k.c
index 72dc142fcc01..92ef0ebaf7dd 100644
--- a/tools/tools/ath/ath_ee_v4k_print/v4k.c
+++ b/tools/tools/ath/ath_ee_v4k_print/v4k.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/ath/ath_ee_v4k_print/v4k.h b/tools/tools/ath/ath_ee_v4k_print/v4k.h
index efe2dc945b86..356312dc1aa8 100644
--- a/tools/tools/ath/ath_ee_v4k_print/v4k.h
+++ b/tools/tools/ath/ath_ee_v4k_print/v4k.h
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#ifndef __V4K_H__
#define __V4K_H__
diff --git a/tools/tools/ath/ath_prom_read/Makefile b/tools/tools/ath/ath_prom_read/Makefile
index 52512fc7a860..7338a6b8a220 100644
--- a/tools/tools/ath/ath_prom_read/Makefile
+++ b/tools/tools/ath/ath_prom_read/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ath_prom_read
.include <bsd.prog.mk>
diff --git a/tools/tools/ath/ath_prom_read/ath_prom_read.c b/tools/tools/ath/ath_prom_read/ath_prom_read.c
index 3111021f56e6..40a7884a2903 100644
--- a/tools/tools/ath/ath_prom_read/ath_prom_read.c
+++ b/tools/tools/ath/ath_prom_read/ath_prom_read.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athaggrstats/Makefile b/tools/tools/ath/athaggrstats/Makefile
index 42b195cb440e..ea79e5734b29 100644
--- a/tools/tools/ath/athaggrstats/Makefile
+++ b/tools/tools/ath/athaggrstats/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= athaggrstats
diff --git a/tools/tools/ath/athaggrstats/athaggrstats.c b/tools/tools/ath/athaggrstats/athaggrstats.c
index 345ff9a419c9..30a214d65e36 100644
--- a/tools/tools/ath/athaggrstats/athaggrstats.c
+++ b/tools/tools/ath/athaggrstats/athaggrstats.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/ath/athaggrstats/athaggrstats.h b/tools/tools/ath/athaggrstats/athaggrstats.h
index c58a2eecb343..8bafd36ceaa8 100644
--- a/tools/tools/ath/athaggrstats/athaggrstats.h
+++ b/tools/tools/ath/athaggrstats/athaggrstats.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _ATHAGGRSTATS_H_
diff --git a/tools/tools/ath/athaggrstats/main.c b/tools/tools/ath/athaggrstats/main.c
index 6a0de98b0069..0e4e718ff593 100644
--- a/tools/tools/ath/athaggrstats/main.c
+++ b/tools/tools/ath/athaggrstats/main.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/ath/athalq/Makefile b/tools/tools/ath/athalq/Makefile
index 7370b7ac90b7..c8bb2f4446e7 100644
--- a/tools/tools/ath/athalq/Makefile
+++ b/tools/tools/ath/athalq/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athalq
MAN=
diff --git a/tools/tools/ath/athalq/ar5210_ds.c b/tools/tools/ath/athalq/ar5210_ds.c
index 624092ec45e3..5db5dcaf9bcf 100644
--- a/tools/tools/ath/athalq/ar5210_ds.c
+++ b/tools/tools/ath/athalq/ar5210_ds.c
@@ -16,8 +16,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/ar5210_ds.h b/tools/tools/ath/athalq/ar5210_ds.h
index 754a1372c521..76c368707ff6 100644
--- a/tools/tools/ath/athalq/ar5210_ds.h
+++ b/tools/tools/ath/athalq/ar5210_ds.h
@@ -13,8 +13,6 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#ifndef __AR5210_DS_H__
#define __AR5210_DS_H__
diff --git a/tools/tools/ath/athalq/ar5211_ds.c b/tools/tools/ath/athalq/ar5211_ds.c
index d389b5a55ca8..844da8f1cf8b 100644
--- a/tools/tools/ath/athalq/ar5211_ds.c
+++ b/tools/tools/ath/athalq/ar5211_ds.c
@@ -16,8 +16,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/ar5211_ds.h b/tools/tools/ath/athalq/ar5211_ds.h
index 96d22ac5c2b0..04b15edc6726 100644
--- a/tools/tools/ath/athalq/ar5211_ds.h
+++ b/tools/tools/ath/athalq/ar5211_ds.h
@@ -13,8 +13,6 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#ifndef __AR5211_DS_H__
#define __AR5211_DS_H__
diff --git a/tools/tools/ath/athalq/ar5212_ds.c b/tools/tools/ath/athalq/ar5212_ds.c
index f752f151d416..b8eb978a2d0e 100644
--- a/tools/tools/ath/athalq/ar5212_ds.c
+++ b/tools/tools/ath/athalq/ar5212_ds.c
@@ -16,8 +16,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/ar5212_ds.h b/tools/tools/ath/athalq/ar5212_ds.h
index 508046cd0536..af1ee61e1246 100644
--- a/tools/tools/ath/athalq/ar5212_ds.h
+++ b/tools/tools/ath/athalq/ar5212_ds.h
@@ -13,8 +13,6 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#ifndef __AR5212_DS_H__
#define __AR5212_DS_H__
diff --git a/tools/tools/ath/athalq/ar5416_ds.c b/tools/tools/ath/athalq/ar5416_ds.c
index c7d1bb42ec59..bb1d7e9e56d7 100644
--- a/tools/tools/ath/athalq/ar5416_ds.c
+++ b/tools/tools/ath/athalq/ar5416_ds.c
@@ -16,8 +16,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/ar5416_ds.h b/tools/tools/ath/athalq/ar5416_ds.h
index 76d816346203..e5a6b981e039 100644
--- a/tools/tools/ath/athalq/ar5416_ds.h
+++ b/tools/tools/ath/athalq/ar5416_ds.h
@@ -13,8 +13,6 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#ifndef __AR5416_DS_H__
#define __AR5416_DS_H__
diff --git a/tools/tools/ath/athalq/ar5416_ds_tdma.c b/tools/tools/ath/athalq/ar5416_ds_tdma.c
index 42a61cb58642..febea0f8ef3d 100644
--- a/tools/tools/ath/athalq/ar5416_ds_tdma.c
+++ b/tools/tools/ath/athalq/ar5416_ds_tdma.c
@@ -16,8 +16,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/ar9300_ds.c b/tools/tools/ath/athalq/ar9300_ds.c
index 541ee39eaf7c..18a077e8594e 100644
--- a/tools/tools/ath/athalq/ar9300_ds.c
+++ b/tools/tools/ath/athalq/ar9300_ds.c
@@ -15,8 +15,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/ar9300_ds.h b/tools/tools/ath/athalq/ar9300_ds.h
index d0394cb3fe22..e4971539b42d 100644
--- a/tools/tools/ath/athalq/ar9300_ds.h
+++ b/tools/tools/ath/athalq/ar9300_ds.h
@@ -12,8 +12,6 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#ifndef __AR9300_DS_H__
#define __AR9300_DS_H__
diff --git a/tools/tools/ath/athalq/main.c b/tools/tools/ath/athalq/main.c
index c8c2c335f561..5319942e0026 100644
--- a/tools/tools/ath/athalq/main.c
+++ b/tools/tools/ath/athalq/main.c
@@ -15,8 +15,6 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/tdma.c b/tools/tools/ath/athalq/tdma.c
index 55772de33f9d..8f18fa1b0628 100644
--- a/tools/tools/ath/athalq/tdma.c
+++ b/tools/tools/ath/athalq/tdma.c
@@ -16,8 +16,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/tools/tools/ath/athalq/tdma.h b/tools/tools/ath/athalq/tdma.h
index 25fa7dea44eb..3cdda97f8277 100644
--- a/tools/tools/ath/athalq/tdma.h
+++ b/tools/tools/ath/athalq/tdma.h
@@ -13,8 +13,6 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * $FreeBSD$
*/
#ifndef __TDMA_H__
#define __TDMA_H__
diff --git a/tools/tools/ath/athalq/txdiff.pl b/tools/tools/ath/athalq/txdiff.pl
index dff940503a31..a3980f23e6a1 100755
--- a/tools/tools/ath/athalq/txdiff.pl
+++ b/tools/tools/ath/athalq/txdiff.pl
@@ -2,8 +2,6 @@
use strict;
-# $FreeBSD$
-
# [1360537229.753890] [100494] TXD
# [1360537229.754292] [100494] TXSTATUS: TxDone=1, TS=0x5ccfa5c7
diff --git a/tools/tools/ath/athani/Makefile b/tools/tools/ath/athani/Makefile
index b475a6b0ed63..af1325af55f9 100644
--- a/tools/tools/ath/athani/Makefile
+++ b/tools/tools/ath/athani/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athani
MAN=
diff --git a/tools/tools/ath/athani/main.c b/tools/tools/ath/athani/main.c
index 5c29a0665f62..85ecaa49b160 100644
--- a/tools/tools/ath/athani/main.c
+++ b/tools/tools/ath/athani/main.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athctrl.sh b/tools/tools/ath/athctrl.sh
index 5adee1c3c4a4..82710a74809e 100644
--- a/tools/tools/ath/athctrl.sh
+++ b/tools/tools/ath/athctrl.sh
@@ -4,7 +4,6 @@
# point-to-point use at a specific distance. Based on a
# program by Gunter Burchardt.
#
-# $FreeBSD$
#
DEV=ath0
d=0
diff --git a/tools/tools/ath/athdebug/Makefile b/tools/tools/ath/athdebug/Makefile
index 0b75f26662b0..f05e11fc5d0b 100644
--- a/tools/tools/ath/athdebug/Makefile
+++ b/tools/tools/ath/athdebug/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athdebug
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athdebug/athdebug.c b/tools/tools/ath/athdebug/athdebug.c
index 5dba663ecb76..27e3b73b68ea 100644
--- a/tools/tools/ath/athdebug/athdebug.c
+++ b/tools/tools/ath/athdebug/athdebug.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/ath/athdecode/Makefile b/tools/tools/ath/athdecode/Makefile
index d829b52890c8..5687e445c6a9 100644
--- a/tools/tools/ath/athdecode/Makefile
+++ b/tools/tools/ath/athdecode/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
PROG= athdecode
diff --git a/tools/tools/ath/athdecode/main.c b/tools/tools/ath/athdecode/main.c
index e565698f4fbf..5693f04ca9a2 100644
--- a/tools/tools/ath/athdecode/main.c
+++ b/tools/tools/ath/athdecode/main.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athkey/Makefile b/tools/tools/ath/athkey/Makefile
index 071caa686fd4..f03223cfc437 100644
--- a/tools/tools/ath/athkey/Makefile
+++ b/tools/tools/ath/athkey/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athkey
SRCS= athkey.c
diff --git a/tools/tools/ath/athkey/athkey.c b/tools/tools/ath/athkey/athkey.c
index 7604e4e6da7c..5a7db3a9283b 100644
--- a/tools/tools/ath/athkey/athkey.c
+++ b/tools/tools/ath/athkey/athkey.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athpoke/Makefile b/tools/tools/ath/athpoke/Makefile
index 39295606318a..e82c3f81fcc8 100644
--- a/tools/tools/ath/athpoke/Makefile
+++ b/tools/tools/ath/athpoke/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athpoke
LINKS= ${BINDIR}/${PROG} ${BINDIR}/athpeek
diff --git a/tools/tools/ath/athpoke/athpoke.c b/tools/tools/ath/athpoke/athpoke.c
index 9f19f47d60d6..02a21676e91f 100644
--- a/tools/tools/ath/athpoke/athpoke.c
+++ b/tools/tools/ath/athpoke/athpoke.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
@@ -91,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;
@@ -134,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];
}
@@ -149,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 f3b36731db16..cfa6c8d5a3df 100644
--- a/tools/tools/ath/athpow/Makefile
+++ b/tools/tools/ath/athpow/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athpow
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athpow/athpow.c b/tools/tools/ath/athpow/athpow.c
index 2b2683d9e6da..85e0275b952a 100644
--- a/tools/tools/ath/athpow/athpow.c
+++ b/tools/tools/ath/athpow/athpow.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athprom/Makefile b/tools/tools/ath/athprom/Makefile
index 82a5d2bb294d..dc273a35a79a 100644
--- a/tools/tools/ath/athprom/Makefile
+++ b/tools/tools/ath/athprom/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athprom
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athprom/athprom.c b/tools/tools/ath/athprom/athprom.c
index 1010c0bf5315..015035a151f3 100644
--- a/tools/tools/ath/athprom/athprom.c
+++ b/tools/tools/ath/athprom/athprom.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athprom/eeprom-14 b/tools/tools/ath/athprom/eeprom-14
index ef2b1c69dd03..33087edcf186 100644
--- a/tools/tools/ath/athprom/eeprom-14
+++ b/tools/tools/ath/athprom/eeprom-14
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# v14 format EEPROM template (AR5416 and later 11n parts)
#
diff --git a/tools/tools/ath/athprom/eeprom-3 b/tools/tools/ath/athprom/eeprom-3
index 73c7033705d6..af1e9a01aa60 100644
--- a/tools/tools/ath/athprom/eeprom-3
+++ b/tools/tools/ath/athprom/eeprom-3
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# v3 format EEPROM template
#
diff --git a/tools/tools/ath/athprom/eeprom-4 b/tools/tools/ath/athprom/eeprom-4
index 0d4708bebc63..0fe2fcd9d3f4 100644
--- a/tools/tools/ath/athprom/eeprom-4
+++ b/tools/tools/ath/athprom/eeprom-4
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# v4 format EEPROM template
#
diff --git a/tools/tools/ath/athprom/eeprom-5 b/tools/tools/ath/athprom/eeprom-5
index b48a42ad3e91..6675a3a09ff3 100644
--- a/tools/tools/ath/athprom/eeprom-5
+++ b/tools/tools/ath/athprom/eeprom-5
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# v5 format EEPROM template
#
diff --git a/tools/tools/ath/athradar/Makefile b/tools/tools/ath/athradar/Makefile
index 3e24a438fe69..542a1401e13a 100644
--- a/tools/tools/ath/athradar/Makefile
+++ b/tools/tools/ath/athradar/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athradar
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athradar/athradar.c b/tools/tools/ath/athradar/athradar.c
index 69f441658a85..f04ada9697f6 100644
--- a/tools/tools/ath/athradar/athradar.c
+++ b/tools/tools/ath/athradar/athradar.c
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athratestats/Makefile b/tools/tools/ath/athratestats/Makefile
index c924370a31e7..cd2eb507326b 100644
--- a/tools/tools/ath/athratestats/Makefile
+++ b/tools/tools/ath/athratestats/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
.PATH: ${.CURDIR}/../../../../sys/dev/ath/
diff --git a/tools/tools/ath/athratestats/main.c b/tools/tools/ath/athratestats/main.c
index 317b025c1854..c3b101442155 100644
--- a/tools/tools/ath/athratestats/main.c
+++ b/tools/tools/ath/athratestats/main.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "opt_ah.h"
diff --git a/tools/tools/ath/athrd/Makefile b/tools/tools/ath/athrd/Makefile
index 352d712e621a..07e48492dfc2 100644
--- a/tools/tools/ath/athrd/Makefile
+++ b/tools/tools/ath/athrd/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
PROG= athrd
diff --git a/tools/tools/ath/athrd/athrd.1 b/tools/tools/ath/athrd/athrd.1
index 9f72fc10da15..346727366cf3 100644
--- a/tools/tools/ath/athrd/athrd.1
+++ b/tools/tools/ath/athrd/athrd.1
@@ -25,8 +25,6 @@
.\" 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.
-.\"
-.\" $FreeBSD$
.\"/
.Dd January 27, 2009
.Dt ATHRD 1
diff --git a/tools/tools/ath/athrd/athrd.c b/tools/tools/ath/athrd/athrd.c
index feb020eb9291..ec69937b0e12 100644
--- a/tools/tools/ath/athrd/athrd.c
+++ b/tools/tools/ath/athrd/athrd.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "opt_ah.h"
diff --git a/tools/tools/ath/athrd/run.sh b/tools/tools/ath/athrd/run.sh
index 3e1e01a27be4..d7dbf9c0dda8 100755
--- a/tools/tools/ath/athrd/run.sh
+++ b/tools/tools/ath/athrd/run.sh
@@ -1,4 +1,3 @@
-# $FreeBSD$
COUNTRIES=${@:-"
DB NA AL DZ AR AM AU AT AZ BH BY BE BZ BO BR BN BG
diff --git a/tools/tools/ath/athregs/Makefile b/tools/tools/ath/athregs/Makefile
index 886354ae9cd2..3bc6d38a5945 100644
--- a/tools/tools/ath/athregs/Makefile
+++ b/tools/tools/ath/athregs/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athregs
CFLAGS+= -I${.CURDIR}/../common/
diff --git a/tools/tools/ath/athregs/dumpregs.c b/tools/tools/ath/athregs/dumpregs.c
index a5f510af165f..15b08f4bd3b8 100644
--- a/tools/tools/ath/athregs/dumpregs.c
+++ b/tools/tools/ath/athregs/dumpregs.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athspectral/Makefile b/tools/tools/ath/athspectral/Makefile
index e13891fec72c..ef683994335b 100644
--- a/tools/tools/ath/athspectral/Makefile
+++ b/tools/tools/ath/athspectral/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athspectral
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athspectral/athspectral.c b/tools/tools/ath/athspectral/athspectral.c
index 48c497c481b6..66011c87a5dc 100644
--- a/tools/tools/ath/athspectral/athspectral.c
+++ b/tools/tools/ath/athspectral/athspectral.c
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/athstats/Makefile b/tools/tools/ath/athstats/Makefile
index f0243f75379d..0c90fe355793 100644
--- a/tools/tools/ath/athstats/Makefile
+++ b/tools/tools/ath/athstats/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
MAN=
.include <bsd.own.mk>
diff --git a/tools/tools/ath/athstats/athstats.c b/tools/tools/ath/athstats/athstats.c
index 34e95b7c3885..d4bc004383d0 100644
--- a/tools/tools/ath/athstats/athstats.c
+++ b/tools/tools/ath/athstats/athstats.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "opt_ah.h"
diff --git a/tools/tools/ath/athstats/athstats.h b/tools/tools/ath/athstats/athstats.h
index 543bec92cfb9..f65db171ce3c 100644
--- a/tools/tools/ath/athstats/athstats.h
+++ b/tools/tools/ath/athstats/athstats.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _ATHSTATS_H_
diff --git a/tools/tools/ath/athstats/main.c b/tools/tools/ath/athstats/main.c
index 23bdb25981d5..0bfce9342cd7 100644
--- a/tools/tools/ath/athstats/main.c
+++ b/tools/tools/ath/athstats/main.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/ath/athsurvey/Makefile b/tools/tools/ath/athsurvey/Makefile
index 6c0106095016..68fd0881fd65 100644
--- a/tools/tools/ath/athsurvey/Makefile
+++ b/tools/tools/ath/athsurvey/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= athsurvey
.include <../Makefile.inc>
diff --git a/tools/tools/ath/athsurvey/athsurvey.c b/tools/tools/ath/athsurvey/athsurvey.c
index df2ae4d4dc8b..4918259b4c43 100644
--- a/tools/tools/ath/athsurvey/athsurvey.c
+++ b/tools/tools/ath/athsurvey/athsurvey.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include "diag.h"
diff --git a/tools/tools/ath/common/ah_osdep.h b/tools/tools/ath/common/ah_osdep.h
index 93b018503def..b5819e1ced34 100644
--- a/tools/tools/ath/common/ah_osdep.h
+++ b/tools/tools/ath/common/ah_osdep.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _ATH_AH_OSDEP_H_
#define _ATH_AH_OSDEP_H_
diff --git a/tools/tools/ath/common/ctrl.c b/tools/tools/ath/common/ctrl.c
index e5de77d980f8..ccea1b13401a 100644
--- a/tools/tools/ath/common/ctrl.c
+++ b/tools/tools/ath/common/ctrl.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -89,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/ath/common/ctrl.h b/tools/tools/ath/common/ctrl.h
index ca95e58959a5..a24b46608c76 100644
--- a/tools/tools/ath/common/ctrl.h
+++ b/tools/tools/ath/common/ctrl.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef __ATH_CTRL_H__
#define __ATH_CTRL_H__
diff --git a/tools/tools/ath/common/diag.h b/tools/tools/ath/common/diag.h
index c2af7b0f70b6..5eb2970f5ab6 100644
--- a/tools/tools/ath/common/diag.h
+++ b/tools/tools/ath/common/diag.h
@@ -27,8 +27,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/file.h>
diff --git a/tools/tools/ath/common/dumpregs.h b/tools/tools/ath/common/dumpregs.h
index 88689cf766a3..68f759405c91 100644
--- a/tools/tools/ath/common/dumpregs.h
+++ b/tools/tools/ath/common/dumpregs.h
@@ -27,8 +27,6 @@
* 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.
- *
- * $FreeBSD$
*/
#define __constructor __attribute__((constructor))
diff --git a/tools/tools/ath/common/dumpregs_5210.c b/tools/tools/ath/common/dumpregs_5210.c
index ac6e8041e08e..19fc46bd1ba6 100644
--- a/tools/tools/ath/common/dumpregs_5210.c
+++ b/tools/tools/ath/common/dumpregs_5210.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/ath/common/dumpregs_5211.c b/tools/tools/ath/common/dumpregs_5211.c
index ae8e2329f2a7..e6e9d1acd564 100644
--- a/tools/tools/ath/common/dumpregs_5211.c
+++ b/tools/tools/ath/common/dumpregs_5211.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/ath/common/dumpregs_5212.c b/tools/tools/ath/common/dumpregs_5212.c
index 33f67d41d945..bfef374b0ea2 100644
--- a/tools/tools/ath/common/dumpregs_5212.c
+++ b/tools/tools/ath/common/dumpregs_5212.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/ath/common/dumpregs_5416.c b/tools/tools/ath/common/dumpregs_5416.c
index 31bf21cdc2c9..985f5b5588ac 100644
--- a/tools/tools/ath/common/dumpregs_5416.c
+++ b/tools/tools/ath/common/dumpregs_5416.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/bhyve/Makefile b/tools/tools/bhyve/Makefile
new file mode 100644
index 000000000000..3d9ea4167bab
--- /dev/null
+++ b/tools/tools/bhyve/Makefile
@@ -0,0 +1,8 @@
+PROGS= fwctl_fetch
+MAN=
+BINDIR?= /usr/local/bin
+
+# fwctl_fetch: fetch the value of fwctl nodes from a guest
+LIBADD.fwctl_fetch+= util
+
+.include <bsd.progs.mk>
diff --git a/tools/tools/bhyve/fwctl_fetch.c b/tools/tools/bhyve/fwctl_fetch.c
new file mode 100644
index 000000000000..1f504dc499cf
--- /dev/null
+++ b/tools/tools/bhyve/fwctl_fetch.c
@@ -0,0 +1,143 @@
+/*-
+ * Copyright (c) 2023 John Baldwin <jhb@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+/*
+ * Fetch the value of fwctl nodes from a guest.
+ *
+ * Usage: fwctl_fetch <node>
+ */
+
+#include <sys/param.h>
+#include <err.h>
+#include <fcntl.h>
+#include <libutil.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <machine/cpufunc.h>
+
+#define OP_GET 3
+#define OP_GET_LEN 4
+
+/* I/O ports */
+#define FWCTL_OUT 0x510
+#define FWCTL_IN 0x511
+
+static void
+reset_fwctl(void)
+{
+ char buf[4];
+
+ outw(FWCTL_OUT, 0);
+ for (u_int i = 0; i < 4; i++)
+ buf[i] = inb(FWCTL_IN);
+ if (memcmp(buf, "BHYV", 4) != 0)
+ errx(1, "Signature mismatch: %.4s", buf);
+}
+
+static void
+send_node_name(const char *name)
+{
+ uint32_t value;
+ size_t len;
+
+ len = strlen(name) + 1;
+ while (len > 4) {
+ memcpy(&value, name, 4);
+ outl(FWCTL_OUT, value);
+ name += 4;
+ len -= 4;
+ }
+
+ if (len > 0) {
+ value = 0;
+ memcpy(&value, name, len);
+ outl(FWCTL_OUT, value);
+ }
+}
+
+static void
+fwctl_op(uint32_t op, uint32_t id, const char *name, void *buf, size_t len)
+{
+ char *cp;
+ uint32_t value, rsplen;
+
+ /* Length */
+ outl(FWCTL_OUT, 12 + strlen(name) + 1);
+
+ /* Operation */
+ outl(FWCTL_OUT, op);
+
+ /* Transaction ID */
+ outl(FWCTL_OUT, id);
+
+ send_node_name(name);
+
+ /* Length */
+ rsplen = inl(FWCTL_IN);
+
+ /* If there is an error, the response will have no payload. */
+ if (rsplen < 4 * sizeof(value))
+ errx(1, "Invalid response length (%u): %u", id, rsplen);
+
+ /* Operation */
+ value = inl(FWCTL_IN);
+ if (value != op)
+ errx(1, "Invalid response type (%u): %u", id, value);
+
+ /* Transaction ID */
+ value = inl(FWCTL_IN);
+ if (value != id)
+ errx(1, "Invalid response ID (%u): %u", id, value);
+
+ /* Error */
+ value = inl(FWCTL_IN);
+ if (value != 0)
+ errx(1, "Error from op %u (%u): %u", op, id, value);
+
+ /* If there wasn't an error, require payload length to match */
+ if (rsplen != 4 * sizeof(value) + len)
+ errx(1, "Response payload length mismatch (%u): %zu vs %zu", id,
+ rsplen - 4 * sizeof(value), len);
+
+ cp = buf;
+ while (len > 0) {
+ value = inl(FWCTL_IN);
+ memcpy(cp, &value, 4);
+ cp += 4;
+ len -= 4;
+ }
+}
+
+int
+main(int ac, char **av)
+{
+ char *p;
+ size_t len, buflen, len2;
+
+ if (ac != 2)
+ errx(1, "Need node name");
+
+ if (open("/dev/io", O_RDWR) == -1)
+ err(1, "Failed to open /dev/io");
+
+ reset_fwctl();
+
+ fwctl_op(OP_GET_LEN, 1, av[1], &len, sizeof(len));
+ if (len == 0)
+ errx(1, "Node has length of 0");
+
+ /* Buffer includes embedded length followed by value. */
+ buflen = sizeof(size_t) + roundup2(len, 4);
+ p = malloc(buflen);
+ fwctl_op(OP_GET, 2, av[1], p, buflen);
+ memcpy(&len2, p, sizeof(len2));
+ if (len2 != len)
+ errx(1, "Length mismatch: %zu vs %zu", len, len2);
+ hexdump(p + sizeof(len2), len, NULL, 0);
+
+ return (0);
+}
diff --git a/tools/tools/bootparttest/Makefile b/tools/tools/bootparttest/Makefile
index 7d54dfca0427..296a178bda3f 100644
--- a/tools/tools/bootparttest/Makefile
+++ b/tools/tools/bootparttest/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${SRCTOP}/stand/common
BINDIR?= /usr/bin
diff --git a/tools/tools/bootparttest/bootparttest.c b/tools/tools/bootparttest/bootparttest.c
index 82e991c6776e..7556f02929f8 100644
--- a/tools/tools/bootparttest/bootparttest.c
+++ b/tools/tools/bootparttest/bootparttest.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/tools/tools/bootparttest/stub.c b/tools/tools/bootparttest/stub.c
index 88e31d48ae51..660b1d39c9b3 100644
--- a/tools/tools/bootparttest/stub.c
+++ b/tools/tools/bootparttest/stub.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdlib.h>
#include <stdio.h>
diff --git a/tools/tools/build_option_survey/listallopts.sh b/tools/tools/build_option_survey/listallopts.sh
index 77c859aaee48..771bbfa084f2 100644
--- a/tools/tools/build_option_survey/listallopts.sh
+++ b/tools/tools/build_option_survey/listallopts.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# This file is in the public domain
diff --git a/tools/tools/build_option_survey/mkhtml.sh b/tools/tools/build_option_survey/mkhtml.sh
index 9ae4683576f6..26a4a8120ac8 100644
--- a/tools/tools/build_option_survey/mkhtml.sh
+++ b/tools/tools/build_option_survey/mkhtml.sh
@@ -1,6 +1,5 @@
#!/bin/sh
# This file is in the public domain
-# $FreeBSD$
set -e
diff --git a/tools/tools/build_option_survey/option_survey.sh b/tools/tools/build_option_survey/option_survey.sh
index 2ebfcc7fd59e..c787125c9acd 100644
--- a/tools/tools/build_option_survey/option_survey.sh
+++ b/tools/tools/build_option_survey/option_survey.sh
@@ -1,6 +1,5 @@
#!/bin/sh
# This file is in the public domain
-# $FreeBSD$
set -ex
@@ -118,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/build_option_survey/reduce.sh b/tools/tools/build_option_survey/reduce.sh
index 375574987574..26f8579beed9 100644
--- a/tools/tools/build_option_survey/reduce.sh
+++ b/tools/tools/build_option_survey/reduce.sh
@@ -1,6 +1,5 @@
#!/bin/sh
# This file is in the public domain
-# $FreeBSD$
set -e
diff --git a/tools/tools/cd2dvd/cd2dvd.sh b/tools/tools/cd2dvd/cd2dvd.sh
index 8032c2f141f1..13dfe4e30754 100755
--- a/tools/tools/cd2dvd/cd2dvd.sh
+++ b/tools/tools/cd2dvd/cd2dvd.sh
@@ -25,7 +25,6 @@
#
# Merges FreeBSD's several CD installation medias to the single DVD disk.
#
-# $FreeBSD$
## Helper functions
usage () {
diff --git a/tools/tools/cfi/Makefile b/tools/tools/cfi/Makefile
index 9f4dd10a2828..5c6f5eee36e3 100644
--- a/tools/tools/cfi/Makefile
+++ b/tools/tools/cfi/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= cfi
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/cfi/cfi.c b/tools/tools/cfi/cfi.c
index e80ac7f3ccea..485c2270cbad 100644
--- a/tools/tools/cfi/cfi.c
+++ b/tools/tools/cfi/cfi.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/commitsdb/make_commit_db b/tools/tools/commitsdb/make_commit_db
index d33d47806fcf..46a8309effe8 100644
--- a/tools/tools/commitsdb/make_commit_db
+++ b/tools/tools/commitsdb/make_commit_db
@@ -1,7 +1,5 @@
#!/usr/bin/perl -w
-# $FreeBSD$
-
# This script walks the tree from the current directory
# and spits out a database generated by md5'ing the cvs log
# messages of each revision of every file in the tree.
diff --git a/tools/tools/commitsdb/query_commit_db b/tools/tools/commitsdb/query_commit_db
index e855efb06766..cd2e02e3ccac 100644
--- a/tools/tools/commitsdb/query_commit_db
+++ b/tools/tools/commitsdb/query_commit_db
@@ -1,7 +1,5 @@
#!/usr/bin/perl -w
-# $FreeBSD$
-
# This script takes a filename and revision number as arguments
# and spits out a list of other files and their revisions that share
# the same log message. This is done by referring to the database
diff --git a/tools/tools/crypto/Makefile b/tools/tools/crypto/Makefile
index 6d9daaa17f15..d1aa55526248 100644
--- a/tools/tools/crypto/Makefile
+++ b/tools/tools/crypto/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# Copyright (c) 2018 Conrad Meyer <cem@FreeBSD.org>
# Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
diff --git a/tools/tools/crypto/README b/tools/tools/crypto/README
index 16b6bdb0d8ca..afe6d2851271 100644
--- a/tools/tools/crypto/README
+++ b/tools/tools/crypto/README
@@ -1,4 +1,3 @@
-$FreeBSD$
The cryptotest program repeatedly encrypts and decrypts a buffer
with the built-in iv and key, using hardware crypto. At the end,
diff --git a/tools/tools/crypto/cryptocheck.c b/tools/tools/crypto/cryptocheck.c
index bf2bf9e41340..6506671455ac 100644
--- a/tools/tools/crypto/cryptocheck.c
+++ b/tools/tools/crypto/cryptocheck.c
@@ -58,8 +58,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -138,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>
@@ -255,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 },
};
@@ -539,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)
{
@@ -566,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
@@ -592,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))
@@ -673,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))
@@ -702,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)
{
@@ -710,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
@@ -810,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))
@@ -857,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);
@@ -972,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,
@@ -1062,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);
@@ -1070,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)
{
@@ -1078,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
@@ -1156,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))
@@ -1180,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)
{
@@ -1189,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
@@ -1227,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))
@@ -1251,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)
@@ -1260,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
@@ -1345,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)
@@ -1354,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
@@ -1492,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) {
@@ -1528,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,
@@ -1604,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/crypto/cryptorun.sh b/tools/tools/crypto/cryptorun.sh
index bd457f6443ad..8761b16c4d96 100755
--- a/tools/tools/crypto/cryptorun.sh
+++ b/tools/tools/crypto/cryptorun.sh
@@ -11,7 +11,6 @@
#
# Test aes with 1, 2 and 4 processes, and at sizes of 256 and 512 bytes.
#
-# $FreeBSD$
#
threads=1
diff --git a/tools/tools/crypto/cryptostats.c b/tools/tools/crypto/cryptostats.c
index b69938d5ae92..99b0364bae4d 100644
--- a/tools/tools/crypto/cryptostats.c
+++ b/tools/tools/crypto/cryptostats.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/crypto/cryptotest.c b/tools/tools/crypto/cryptotest.c
index 83473e883b17..7845c3994d0c 100644
--- a/tools/tools/crypto/cryptotest.c
+++ b/tools/tools/crypto/cryptotest.c
@@ -28,8 +28,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/crypto/hifnstats.c b/tools/tools/crypto/hifnstats.c
index f073d86d7395..71c826f8e66e 100644
--- a/tools/tools/crypto/hifnstats.c
+++ b/tools/tools/crypto/hifnstats.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/crypto/ipsecstats.c b/tools/tools/crypto/ipsecstats.c
index 760200f46112..108360c91cf0 100644
--- a/tools/tools/crypto/ipsecstats.c
+++ b/tools/tools/crypto/ipsecstats.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/crypto/safestats.c b/tools/tools/crypto/safestats.c
index acaab6e1e483..ace3050778bf 100644
--- a/tools/tools/crypto/safestats.c
+++ b/tools/tools/crypto/safestats.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/cxgbtool/Makefile b/tools/tools/cxgbtool/Makefile
index 2fb608d2f410..b8f8348cc708 100644
--- a/tools/tools/cxgbtool/Makefile
+++ b/tools/tools/cxgbtool/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= cxgbtool
SRCS= cxgbtool.c
MAN=
diff --git a/tools/tools/cxgbtool/cxgbtool.c b/tools/tools/cxgbtool/cxgbtool.c
index a78c7931eebd..b871d67700f3 100644
--- a/tools/tools/cxgbtool/cxgbtool.c
+++ b/tools/tools/cxgbtool/cxgbtool.c
@@ -33,8 +33,6 @@ POSSIBILITY OF SUCH DAMAGE.
***************************************************************************/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
diff --git a/tools/tools/cxgbtool/reg_defs.c b/tools/tools/cxgbtool/reg_defs.c
index 687bb75cee9f..fc65a652601a 100644
--- a/tools/tools/cxgbtool/reg_defs.c
+++ b/tools/tools/cxgbtool/reg_defs.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
/* This file is automatically generated --- do not edit */
diff --git a/tools/tools/cxgbtool/reg_defs_t3.c b/tools/tools/cxgbtool/reg_defs_t3.c
index 6e9b8b1176f0..d4259b4e5434 100644
--- a/tools/tools/cxgbtool/reg_defs_t3.c
+++ b/tools/tools/cxgbtool/reg_defs_t3.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
diff --git a/tools/tools/cxgbtool/reg_defs_t3b.c b/tools/tools/cxgbtool/reg_defs_t3b.c
index cd85d840a1dd..31942e335ebc 100644
--- a/tools/tools/cxgbtool/reg_defs_t3b.c
+++ b/tools/tools/cxgbtool/reg_defs_t3b.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
/* This file is automatically generated --- do not edit */
diff --git a/tools/tools/cxgbtool/reg_defs_t3c.c b/tools/tools/cxgbtool/reg_defs_t3c.c
index b9181b68e9a9..75c89a90b0b9 100644
--- a/tools/tools/cxgbtool/reg_defs_t3c.c
+++ b/tools/tools/cxgbtool/reg_defs_t3c.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
/* This file is automatically generated --- do not edit */
diff --git a/tools/tools/cxgbtool/version.h b/tools/tools/cxgbtool/version.h
index 403a8beeafc2..183684bdb188 100644
--- a/tools/tools/cxgbtool/version.h
+++ b/tools/tools/cxgbtool/version.h
@@ -19,7 +19,6 @@
/* $Date: 2007/02/05 18:46:24 $ $RCSfile: version.h,v $ $Revision: 1.9 $ */
/*
- * $FreeBSD$
*/
#ifndef __CXGBTOOL_VERSION_H
diff --git a/tools/tools/decioctl/Makefile b/tools/tools/decioctl/Makefile
index 55aa78550e60..0b54c9c6d792 100644
--- a/tools/tools/decioctl/Makefile
+++ b/tools/tools/decioctl/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= decioctl
SRCS= decioctl.c
MAN=
diff --git a/tools/tools/decioctl/decioctl.c b/tools/tools/decioctl/decioctl.c
index f9af0f5a3a92..2be99e9f9f4e 100644
--- a/tools/tools/decioctl/decioctl.c
+++ b/tools/tools/decioctl/decioctl.c
@@ -24,8 +24,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/ioccom.h>
#include <ctype.h>
#include <errno.h>
diff --git a/tools/tools/dmardump/Makefile b/tools/tools/dmardump/Makefile
index 67b32438ef95..9ef73583bcbe 100644
--- a/tools/tools/dmardump/Makefile
+++ b/tools/tools/dmardump/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= dmardump
SRCS= dmardump.c
MAN=
diff --git a/tools/tools/dmardump/dmardump.c b/tools/tools/dmardump/dmardump.c
index 43a2779dd6b8..6888200983bc 100644
--- a/tools/tools/dmardump/dmardump.c
+++ b/tools/tools/dmardump/dmardump.c
@@ -25,9 +25,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/endian.h>
#include <sys/pciio.h>
diff --git a/tools/tools/drm/README b/tools/tools/drm/README
index 35660ed08279..555536c7fd9e 100644
--- a/tools/tools/drm/README
+++ b/tools/tools/drm/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
gen-drm_pciids Generate drm_pciids.h based on Linux' drm_pciids.h, FreeBSD's
drm_pciids.h and misc/pciids database.
diff --git a/tools/tools/drm/gen-drm_pciids b/tools/tools/drm/gen-drm_pciids
index 02ed5620e2f0..472c75cb80dc 100755
--- a/tools/tools/drm/gen-drm_pciids
+++ b/tools/tools/drm/gen-drm_pciids
@@ -1,5 +1,4 @@
#!/usr/bin/perl
-# $FreeBSD$
use strict;
use warnings;
@@ -158,10 +157,6 @@ foreach my $vendor_define (sort keys(%linux_pciids)) {
print STDERR "\nWrite FreeBSD header to stdout...\n";
print <<"EOF";
/*
- * \$FreeBSD\$
- */
-
-/*
* Generated by $progname from:
* o previous FreeBSD's drm_pciids.h
* o Linux' drm_pciids.h
diff --git a/tools/tools/drm/radeon/README b/tools/tools/drm/radeon/README
index a05878ebb9e9..a77c3220934e 100644
--- a/tools/tools/drm/radeon/README
+++ b/tools/tools/drm/radeon/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
firmwares Tools to handle Radeon firmwares imported into the tree.
mkregtable Generate headers used to build the Radeon driver.
diff --git a/tools/tools/drm/radeon/firmwares/README b/tools/tools/drm/radeon/firmwares/README
index 1a28c83941da..9d03202a111a 100644
--- a/tools/tools/drm/radeon/firmwares/README
+++ b/tools/tools/drm/radeon/firmwares/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
To update firmwares:
diff --git a/tools/tools/drm/radeon/firmwares/encode-firmwares b/tools/tools/drm/radeon/firmwares/encode-firmwares
index e95c0d2393f6..8e8b873c199a 100755
--- a/tools/tools/drm/radeon/firmwares/encode-firmwares
+++ b/tools/tools/drm/radeon/firmwares/encode-firmwares
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
set -e
diff --git a/tools/tools/drm/radeon/mkregtable/Makefile b/tools/tools/drm/radeon/mkregtable/Makefile
index 49bc2ec16e3c..e6fadef710a9 100644
--- a/tools/tools/drm/radeon/mkregtable/Makefile
+++ b/tools/tools/drm/radeon/mkregtable/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
all: regtables
PROG= mkregtable
diff --git a/tools/tools/drm/radeon/mkregtable/Makefile.depend b/tools/tools/drm/radeon/mkregtable/Makefile.depend
index 8d409f5263ac..6ef78fac5cbf 100644
--- a/tools/tools/drm/radeon/mkregtable/Makefile.depend
+++ b/tools/tools/drm/radeon/mkregtable/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
diff --git a/tools/tools/drm/radeon/mkregtable/README b/tools/tools/drm/radeon/mkregtable/README
index 12b86994b1ba..f9f1a67418f7 100644
--- a/tools/tools/drm/radeon/mkregtable/README
+++ b/tools/tools/drm/radeon/mkregtable/README
@@ -1,4 +1,3 @@
-# $FreeBSD$
"mkregtable" is a tool used to generate headers for the radeonkms
driver. Headers are regenerated by running "make" in this directory.
diff --git a/tools/tools/drm/radeon/mkregtable/mkregtable.c b/tools/tools/drm/radeon/mkregtable/mkregtable.c
index 51b8f909cd2a..5a82b6b75849 100644
--- a/tools/tools/drm/radeon/mkregtable/mkregtable.c
+++ b/tools/tools/drm/radeon/mkregtable/mkregtable.c
@@ -9,9 +9,6 @@
* Dave Airlie
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
@@ -595,11 +592,6 @@ static void table_print(struct table *t)
nlloop = (t->nentry + 3) / 4;
c = t->nentry;
- printf(
- "#include <sys/cdefs.h>\n"
- "__FBSDID(\"$" "FreeBSD" "$\");\n"
- "\n"
- );
printf("static const unsigned %s_reg_safe_bm[%d] = {\n", t->gpu_prefix,
t->nentry);
for (i = 0, id = 0; i < nlloop; i++) {
diff --git a/tools/tools/editing/freebsd.vim b/tools/tools/editing/freebsd.vim
index fa7977b30361..e515f81890df 100644
--- a/tools/tools/editing/freebsd.vim
+++ b/tools/tools/editing/freebsd.vim
@@ -21,8 +21,6 @@
" 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.
-"
-" $FreeBSD$
" This is a plugin for Vim (tested with Vim v7.1) to follow the FreeBSD style(9)
" indentation. It registers a macro (see below) for changing a buffer's
diff --git a/tools/tools/epfe/epfe.pl b/tools/tools/epfe/epfe.pl
deleted file mode 100644
index 0aea2c247a64..000000000000
--- a/tools/tools/epfe/epfe.pl
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/perl
-# Copyright (c) 1996 Wolfram Schneider <wosch@FreeBSD.org>. Berlin.
-#
-# epfe - extract printing filter examples from printing.sgml
-#
-# usage:
-# $ cd /usr/share/examples/printing
-# $ epfe < ../../doc/handbook/printing.sgml
-#
-# $FreeBSD$
-
-$in = 0; @a = ();
-sub Print { s/\&amp\;/&/g; push(@a,$_); }
-sub out {
- local($name, *lines) = @_;
- open(F, "> $name") || die "open $_[0]: $!\n";
- print F @lines;
- close F;
-}
-
-while(<>) {
- if (/^<code>/) {
- $in = 1;
- } elsif (m%</code>% && $in > 0) {
- if ($in > 1) {
- $name = 'unknown' if !$name;
- while(1) { if ($d{$name}) { $name .= 'X'; } else { last } }
- &out("$name", *a);
- $d{$name} = $name;
- }
- $in = 0; $name = ''; @a = ();
- } elsif ($in == 1 && /^\#\s*!/) {
- $in++; &Print;
- } elsif ($in > 1) {
- $name = $1 if (!$name && /^\#\s+(\S+)\s+-\s+/);
- $in++; &Print;
- }
-}
diff --git a/tools/tools/ether_reflect/Makefile b/tools/tools/ether_reflect/Makefile
index 040a5bd5fba6..9bff3abb7be0 100644
--- a/tools/tools/ether_reflect/Makefile
+++ b/tools/tools/ether_reflect/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# A Makefile that builds both the ether_reflect program and its manual page.
diff --git a/tools/tools/ether_reflect/ether_reflect.1 b/tools/tools/ether_reflect/ether_reflect.1
index 95fe60f762aa..9e94661211aa 100644
--- a/tools/tools/ether_reflect/ether_reflect.1
+++ b/tools/tools/ether_reflect/ether_reflect.1
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd December 23, 2008
.Dt ETHER_REFLECT 1
.Os
@@ -42,7 +40,7 @@
The
.Nm
command implements a simple ethernet packet reflector using the
-.Xr PCAP 3
+.Xr pcap 3
library and
.Xr bpf 4 ,
the Berkeley Packet Filter.
@@ -96,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 2 ,
-.Xr pcap 4 ,
+.Xr pcap 3 ,
+.Xr bpf 4 ,
.Xr ifconfig 8
.Sh HISTORY
The
diff --git a/tools/tools/ether_reflect/ether_reflect.c b/tools/tools/ether_reflect/ether_reflect.c
index bb6d865ec2d2..ade6ea132a6a 100644
--- a/tools/tools/ether_reflect/ether_reflect.c
+++ b/tools/tools/ether_reflect/ether_reflect.c
@@ -32,8 +32,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <unistd.h>
#include <stdlib.h>
#include <strings.h>
diff --git a/tools/tools/fetchbench/fetchbench b/tools/tools/fetchbench/fetchbench
index 1a50f050381e..1c5fb8451b8b 100755
--- a/tools/tools/fetchbench/fetchbench
+++ b/tools/tools/fetchbench/fetchbench
@@ -27,7 +27,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
# This is a simple HTTP benchmark. It works by running a number of fetch(1)
# instances in parallel, 10 by default, each performing a number of fetches,
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 428a79e29200..0642ccf2d945 100644
--- a/tools/tools/find-sb/Makefile
+++ b/tools/tools/find-sb/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= find-sb
MAN=
diff --git a/tools/tools/find-sb/README b/tools/tools/find-sb/README
index fae701c816c3..bf35ceba3cad 100644
--- a/tools/tools/find-sb/README
+++ b/tools/tools/find-sb/README
@@ -1,4 +1,3 @@
-$FreeBSD$
find-sb is a program which scans the input file you specify (normally a
raw disk slice) for filesystems. It's not very smart, nor particularly
diff --git a/tools/tools/find-sb/find-sb.c b/tools/tools/find-sb/find-sb.c
index fd4de42194b8..b914f177f663 100644
--- a/tools/tools/find-sb/find-sb.c
+++ b/tools/tools/find-sb/find-sb.c
@@ -1,8 +1,6 @@
/*
* This program, created 2002-10-03 by Garrett A. Wollman
* <wollman@FreeBSD.org>, is in the public domain. Use at your own risk.
- *
- * $FreeBSD$
*/
#ifdef __FreeBSD__
diff --git a/tools/tools/find-sb/mini_ufs.h b/tools/tools/find-sb/mini_ufs.h
index 82a864dd6a8e..0fd340ab29f5 100644
--- a/tools/tools/find-sb/mini_ufs.h
+++ b/tools/tools/find-sb/mini_ufs.h
@@ -1,8 +1,6 @@
/*
* This program, created 2002-10-03 by Garrett A. Wollman
* <wollman@FreeBSD.org>, is in the public domain. Use at your own risk.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/fixwhite/Makefile b/tools/tools/fixwhite/Makefile
index 235d5c7b9e34..299bf4704717 100644
--- a/tools/tools/fixwhite/Makefile
+++ b/tools/tools/fixwhite/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= fixwhite
BINDIR= /usr/bin
diff --git a/tools/tools/fixwhite/fixwhite.1 b/tools/tools/fixwhite/fixwhite.1
index 016e24bc59cd..36cae97171e4 100644
--- a/tools/tools/fixwhite/fixwhite.1
+++ b/tools/tools/fixwhite/fixwhite.1
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd February 6, 2012
.Dt FIXWHITE 1
.Os
diff --git a/tools/tools/fixwhite/fixwhite.c b/tools/tools/fixwhite/fixwhite.c
index 2b1763060e06..4cfe49e4ed35 100644
--- a/tools/tools/fixwhite/fixwhite.c
+++ b/tools/tools/fixwhite/fixwhite.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <ctype.h>
#include <stdbool.h>
#include <stdio.h>
diff --git a/tools/tools/gdb_regofs/Makefile b/tools/tools/gdb_regofs/Makefile
index a23b171c9740..c22a107b8553 100644
--- a/tools/tools/gdb_regofs/Makefile
+++ b/tools/tools/gdb_regofs/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
PROG=gdb_regofs
SRCS=${MACHINE_ARCH}.c
MAN=
diff --git a/tools/tools/genericize/Makefile b/tools/tools/genericize/Makefile
index 5df77b99f910..15374b3558a6 100644
--- a/tools/tools/genericize/Makefile
+++ b/tools/tools/genericize/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SCRIPTS= genericize.pl
BINDIR?= /usr/local/bin
diff --git a/tools/tools/genericize/genericize.pl b/tools/tools/genericize/genericize.pl
index 6ba135e4432a..6ed2d1d60e85 100755
--- a/tools/tools/genericize/genericize.pl
+++ b/tools/tools/genericize/genericize.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl -w
#-
-# Copyright (c) 2004 Dag-Erling Coïdan Smørgrav
+# Copyright (c) 2004 Dag-Erling Smørgrav
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
use strict;
diff --git a/tools/tools/gensnmpdef/Makefile b/tools/tools/gensnmpdef/Makefile
index 104c97d66f45..fd06ee5a64e0 100644
--- a/tools/tools/gensnmpdef/Makefile
+++ b/tools/tools/gensnmpdef/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# NB: Install ports/net-mgmt/libsmi
diff --git a/tools/tools/git/HOWTO b/tools/tools/git/HOWTO
index 160696c4d236..7595376564c4 100644
--- a/tools/tools/git/HOWTO
+++ b/tools/tools/git/HOWTO
@@ -1,4 +1,3 @@
-# $FreeBSD$
This directory contains tools intended to help committers use git when
interacting with standard FreeBSD project resources like Differential.
@@ -28,7 +27,7 @@ commits. The intended workflow is:
Differential, so try to give each commit a meaningful commit message that
gives your reviewers the necessary context to understand your change.
-2. Create your reviews bu running this command in your git repo:
+2. Create your reviews by running this command in your git repo:
$ arcgit -r C1~..C2 -R reviewer -T testplan
C1 should be the first commit that you want reviewed, and C2 should be the
@@ -36,7 +35,7 @@ commits. The intended workflow is:
specifying the -R option multiple times. You can CC (AKA subscribe) people
to a review with the -C option. Note that if you subscribe a mailing list
to a review, the mailing list will be emailed for every comment or change
- made to each review. Please be judicious when subscibing mailing lists to
+ made to each review. Please be judicious when subscribing mailing lists to
reviews. It may be better to instead send a single email to the appropriate
list announcing all of the reviews and giving a short summary of the change
as a whole, along with a link to the individual reviews.
@@ -75,7 +74,7 @@ commits. The intended workflow is:
4. Once the reviews have been approved, you need to prepare your patch series
to be committed. This involves squashing the fixes made in code review
back into the original commit that they applied to. This gives you a clean
- series of commits that are ready to be commited back to svn.
+ series of commits that are ready to be pushed to git.
First, merge each of your review branches back into your main development
branch. For example:
diff --git a/tools/tools/git/arcgit b/tools/tools/git/arcgit
index 60d9abe58595..adf64a11e7a4 100755
--- a/tools/tools/git/arcgit
+++ b/tools/tools/git/arcgit
@@ -23,7 +23,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
# This script is used to submit a series of git commits to Differential. Each
# commit is submitted as a separate review. For each review, this script will
@@ -35,8 +34,8 @@
#
# When your reviews are complete, merge all of the review_DXXXX branches
# together, and then do a git rebase -ik to meld the code review fixes into the
-# commit that they fixed. Now you have a clean series of patches to commit to
-# svn.
+# commit that they fixed. Now you have a clean series of patches to push to
+# git.
usage()
{
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 984b1e8f32e5..a056a2223e0e 100644
--- a/tools/tools/git/git-arc.1
+++ b/tools/tools/git/git-arc.1
@@ -1,5 +1,5 @@
.\"
-.\" SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+.\" SPDX-License-Identifier: BSD-2-Clause
.\"
.\" Copyright (c) 2021 Daniel Ebdrup Jensen
.\"
@@ -24,12 +24,12 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd November 17, 2021
+.Dd Janurary 15, 2025
.Dt GIT-ARC 1
.Os
.Sh NAME
-.Nm git arc
-.Nd a wrapper to improve integration betwen git and arcanist
+.Nm "git arc"
+.Nd a wrapper to improve integration between git and arcanist
.Sh SYNOPSIS
.Nm
.Cm create
@@ -37,31 +37,38 @@
.Op Fl r Ar reviewer1 Ns Op Cm \&, Ns Ar reviewer2 ...
.Op Fl s Ar subscriber1 Ns Op Cm \&, Ns Ar subscriber2 ...
.Op Fl p Ar parent
-.Op Ar commit Ns | Ns Ar commit-range
+.Op Ar commit ... Ns | Ns Ar commit-range
.Nm
-.Cm list Ar commit Ns | Ns Ar commit-range
+.Cm list Ar commit ... Ns | Ns Ar commit-range
.Nm
-.Cm patch Ar diff1 Ns Op Cm \&, Ns Ar diff2
+.Cm patch
+.Op Fl c
+.Ar diff1 Ns Op Cm \&, Ns Ar diff2
.Nm
.Cm stage
.Op Fl b Ar branch
-.Op Ar commit Ns | Ns Ar commit-range
+.Op Ar commit ... Ns | Ns Ar commit-range
.Nm
.Cm update
-.Op Ar commit Ns | Ns Ar commit-range Oc
+.Op Fl l
+.Op Fl m Ar message
+.Op Ar commit ... Ns | Ns Ar commit-range
.Sh DESCRIPTION
The
.Nm
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.
In particular, the commit summaries must be unique across all open
-Differential Revisions authored the submitter.
+Differential Revisions authored by the submitter.
.Pp
The first parameter must be a verb.
The available verbs are:
@@ -69,25 +76,27 @@ 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.
-.It Fl r Ar subscriber
+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.
-Argument(s) must be existing Phabricator user or group.
+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
Print the associated Differential Revisions for the specified commits.
.It Cm patch
-Try to apply a patch from a Differential revision to the currently
+Try to apply a patch from a Differential Revision to the currently
checked out tree.
.It Cm stage
Prepare a series of commits to be pushed to the upstream
@@ -104,7 +113,21 @@ Revisions.
Synchronize the Differential Revisions associated with the
specified commits.
Currently only the diff is updated; the review description and other
-metadata is not synchronized.
+metadata are not synchronized.
+If a message is specified with
+.Fl m ,
+that message is added as a note to the Differential Revision.
+If no message is supplied,
+the user's editor will be opened to provide an update message for
+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
@@ -126,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
@@ -141,14 +164,14 @@ Defaults to false.
.Sh EXAMPLES
The typical end-to-end usage looks something like this.
.Pp
-Commit changes with a message and create a Differential review:
+Commit changes with a message and create a Differential Review:
.Bd -literal -offset indent
$ git commit -m "kern: Rewrite in Rust"
$ git arc create HEAD
.Ed
.Pp
Make changes to the diff based on review feedback, then amend the
-changes to the existing commit and update the Differential review:
+changes to the existing commit and update the Differential Review:
.Bd -literal -offset indent
$ git commit --amend
$ git arc update HEAD
@@ -164,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:
@@ -181,6 +207,11 @@ $ git arc create HEAD~3..HEAD
Pairs of consecutive commits are linked into a patch stack.
Note that the first commit in the specified range is excluded.
.Pp
+Create a series of separate reviews for each of the following commits:
+.Bd -literal -offset indent
+$ git arc create b409afcfedcdda ca03ed1345aff0
+.Ed
+.Pp
Update the review corresponding to commit b409afcfedcdda:
.Bd -literal -offset indent
$ git arc update b409afcfedcdda
@@ -196,11 +227,27 @@ and stage it:
$ git arc patch D12345
.Ed
.Pp
+Apply the patch in review D23456 to the currently checked-out tree,
+and commit it to the tree with the commit message in the review and
+make the best guess for what to use for author.
+If the guess is considered unreliable, the user is prompted to see
+if they wish to use it (or abort).
+.Bd -literal -offset indent
+$ git arc patch -c D23456
+.Ed
+.Pp
List the status of reviews for all the commits in the branch
.Dq feature :
.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 835fbd91a7a1..22df0c61293a 100644
--- a/tools/tools/git/git-arc.sh
+++ b/tools/tools/git/git-arc.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019-2021 Mark Johnston <markj@FreeBSD.org>
# Copyright (c) 2021 John Baldwin <jhb@FreeBSD.org>
@@ -43,6 +43,14 @@ err()
exit 1
}
+cleanup()
+{
+ rc=$?
+ rm -fr "$GITARC_TMPDIR"
+ trap - EXIT
+ exit $rc
+}
+
err_usage()
{
cat >&2 <<__EOF__
@@ -51,9 +59,9 @@ Usage: git arc [-vy] <command> <arguments>
Commands:
create [-l] [-r <reviewer1>[,<reviewer2>...]] [-s subscriber[,...]] [<commit>|<commit range>]
list <commit>|<commit range>
- patch <diff1> [<diff2> ...]
+ patch [-c] <diff1> [<diff2> ...]
stage [-b branch] [<commit>|<commit range>]
- update [<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
@@ -133,6 +141,11 @@ Examples:
$ git arc patch D12345
+ Apply the patch in review D12345 to the currently checked-out tree, and
+ commit it using the review's title, summary and author.
+
+ $ git arc patch -c D12345
+
List the status of reviews for all the commits in the branch "feature":
$ git arc list main..feature
@@ -142,6 +155,42 @@ __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
+# a warning is generated. It's likely a local config error, but we should work
+# in the face of that.
+#
+arc_call_conduit()
+{
+ arc call-conduit "$@" | grep -v '^Warning: '
+}
+
+#
+# Filter the output of arc list to remove the warnings as above, as well as
+# the bolding sequence (the color sequence remains intact).
+#
+arc_list()
+{
+ arc list "$@" | grep -v '^Warning: ' | sed -E 's/\x1b\[1m//g;s/\x1b\[m//g'
+}
+
diff2phid()
{
local diff
@@ -152,7 +201,7 @@ diff2phid()
fi
echo '{"names":["'"$diff"'"]}' |
- arc call-conduit -- phid.lookup |
+ arc_call_conduit -- phid.lookup |
jq -r "select(.response != []) | .response.${diff}.phid"
}
@@ -165,12 +214,12 @@ diff2status()
err "invalid diff ID $diff"
fi
- tmp=$(mktemp)
+ tmp=$(xmktemp)
echo '{"names":["'"$diff"'"]}' |
- arc call-conduit -- phid.lookup > "$tmp"
+ 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}"
}
@@ -193,9 +242,8 @@ title2diff()
{
local title
- title=$1
- # arc list output always includes ANSI escape sequences, strip them.
- arc list | sed 's/\x1b\[[0-9;]*m//g' | \
+ title=$(echo $1 | sed 's/"/\\"/g')
+ arc_list --no-ansi |
awk -F': ' '{
if (substr($0, index($0, FS) + length(FS)) == "'"$title"'") {
print substr($1, match($1, "D[1-9][0-9]*"))
@@ -245,9 +293,7 @@ create_one_review()
return 1
fi
- git checkout -q "$commit"
-
- msg=$(mktemp)
+ msg=$(xmktemp)
git show -s --format='%B' "$commit" > "$msg"
printf "\nTest Plan:\n" >> "$msg"
printf "\nReviewers:\n" >> "$msg"
@@ -256,7 +302,8 @@ create_one_review()
printf "%s\n" "${subscribers}" >> "$msg"
yes | env EDITOR=true \
- arc diff --message-file "$msg" --never-apply-patches --create --allow-untracked $BROWSE HEAD~
+ arc diff --message-file "$msg" --never-apply-patches --create \
+ --allow-untracked $BROWSE --head "$commit" "${commit}~"
[ $? -eq 0 ] || err "could not create Phabricator diff"
if [ -n "$parent" ]; then
@@ -272,10 +319,9 @@ create_one_review()
"type": "parents.add",
"value": ["'"${parentphid}"'"]
}
- ]}' |
- arc call-conduit -- differential.revision.edit >&3
+ ]}' |
+ arc_call_conduit -- differential.revision.edit >&3
fi
- rm -f "$msg"
return 0
}
@@ -288,17 +334,17 @@ diff2reviewers()
reviewid=$(diff2phid "$diff")
userids=$( \
echo '{
- "constraints": {"phids": ["'"$reviewid"'"]},
- "attachments": {"reviewers": true}
- }' |
- arc call-conduit -- differential.revision.search |
+ "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
}
@@ -307,7 +353,7 @@ prompt()
local resp
if [ "$ASSUME_YES" ]; then
- return 1
+ return 0
fi
printf "\nDoes this look OK? [y/N] "
@@ -333,24 +379,6 @@ show_and_prompt()
prompt
}
-save_head()
-{
- local orig
-
- if ! orig=$(git symbolic-ref --short -q HEAD); then
- orig=$(git show -s --pretty=%H HEAD)
- fi
- SAVED_HEAD=$orig
-}
-
-restore_head()
-{
- if [ -n "$SAVED_HEAD" ]; then
- git checkout -q "$SAVED_HEAD"
- SAVED_HEAD=
- fi
-}
-
build_commit_list()
{
local chash _commits commits
@@ -359,7 +387,7 @@ build_commit_list()
_commits=$(git rev-parse "${chash}")
if ! git cat-file -e "${chash}"'^{commit}' >/dev/null 2>&1; then
# shellcheck disable=SC2086
- _commits=$(git rev-list $_commits | tail -r)
+ _commits=$(git rev-list --reverse $_commits)
fi
[ -n "$_commits" ] || err "invalid commit ID ${chash}"
commits="$commits $_commits"
@@ -373,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
@@ -382,9 +410,9 @@ gitarc__create()
l)
list=1
;;
- p)
- prev="$OPTARG"
- ;;
+ p)
+ prev="$OPTARG"
+ ;;
r)
reviewers="$OPTARG"
;;
@@ -410,16 +438,14 @@ gitarc__create()
doprompt=
fi
- save_head
for commit in ${commits}; do
if create_one_review "$commit" "$reviewers" "$subscribers" "$prev" \
- "$doprompt"; then
+ "$doprompt"; then
prev=$(commit2diff "$commit")
else
prev=""
fi
done
- restore_head
}
gitarc__list()
@@ -427,27 +453,28 @@ gitarc__list()
local chash commit commits diff openrevs title
commits=$(build_commit_list "$@")
- openrevs=$(arc list)
+ openrevs=$(arc_list --ansi)
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
# differently and keep the entire status.
title=$(git show -s --format=%s "$commit")
diff=$(echo "$openrevs" | \
- awk -F'D[1-9][0-9]*:\.\\[m ' '{if ($2 == "'"$title"'") print $0}')
+ awk -F'D[1-9][0-9]*: ' \
+ '{if ($2 == "'"$(echo $title | sed 's/"/\\"/g')"'") print $0}')
if [ -z "$diff" ]; then
- echo "No Review : $title"
+ 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
@@ -456,18 +483,162 @@ gitarc__list()
done
}
+# Try to guess our way to a good author name. The DWIM is strong in this
+# function, but these heuristics seem to generally produce the right results, in
+# the sample of src commits I checked out.
+find_author()
+{
+ local addr name email author_addr author_name
+
+ addr="$1"
+ name="$2"
+ author_addr="$3"
+ author_name="$4"
+
+ # The Phabricator interface doesn't have a simple way to get author name and
+ # address, so we have to try a number of heuristics to get the right result.
+
+ # Choice 1: It's a FreeBSD committer. These folks have no '.' in their phab
+ # username/addr. Sampled data in phab suggests that there's a high rate of
+ # these people having their local config pointing at something other than
+ # freebsd.org (which isn't surprising for ports committers getting src
+ # commits reviewed).
+ case "${addr}" in
+ *.*) ;; # external user
+ *)
+ 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
+ fi
+
+ # Choice 3: We can find this user in the FreeBSD repo. They've submited
+ # something before, and they happened to use an email that's somewhat
+ # similar to their phab username.
+ email=$(git log -1 --author "$(echo ${addr} | tr _ .)" --pretty="%aN <%aE>")
+ if [ -n "${email}" ]; then
+ echo "${email}"
+ return
+ fi
+
+ # Choice 4: We know this user. They've committed before, and they happened
+ # to use the same name, unless the name has the word 'user' in it. This
+ # 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
+ fi
+
+ # Choice 5: Wing it as best we can. In this scenario, we replace the last _
+ # with a @, and call it the email address...
+ # Annoying fun fact: Phab replaces all non alpha-numerics with _, so we
+ # 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: Turning ${addr} to ${a}" >&2
+ if ! prompt; then
+ echo "ABORT"
+ return
+ fi
+ echo "${a}"
+}
+
+patch_commit()
+{
+ 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=$(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=$(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=$(xmktemp)
+ echo '{"revisionIDs": [ '"${diff#D}"' ]}' | \
+ arc_call_conduit -- differential.querydiffs |
+ jq -r '.response | flatten | .[]' > "$diff_data"
+ # If the differential revision has multiple revisions, just take the first
+ # non-null value we get.
+ author_addr=$(jq -r ".authorEmail?" "$diff_data" | grep -v '^null$' | head -n 1)
+ author_name=$(jq -r ".authorName?" "$diff_data" | grep -v '^null$' | head -n 1)
+
+ 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
+ fi
+
+ 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
+ printf "Reviewed by:\t%s\n" "${reviewers}" >> "$tmp"
+ fi
+ # XXX TODO refactor with gitarc__stage maybe?
+ printf "Differential Revision:\thttps://reviews.freebsd.org/%s\n" "${diff}" >> "$tmp"
+ git commit --author "${author}" --file "$tmp"
+}
+
gitarc__patch()
{
- local rev
+ local rev commit
if [ $# -eq 0 ]; then
err_usage
fi
+ commit=false
+ while getopts c o; do
+ case "$o" in
+ c)
+ require_clean_work_tree "patch -c"
+ commit=true
+ ;;
+ *)
+ err_usage
+ ;;
+ esac
+ done
+ shift $((OPTIND-1))
+
for rev in "$@"; do
arc patch --skip-dependencies --nocommit --nobranch --force "$rev"
echo "Applying ${rev}..."
[ $? -eq 0 ] || break
+ if ${commit}; then
+ patch_commit $rev
+ fi
done
}
@@ -496,7 +667,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")
@@ -521,31 +692,65 @@ gitarc__stage()
gitarc__update()
{
- local commit commits diff
+ local commit commits diff doprompt have_msg list o msg
+
+ 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
+ ;;
+ *)
+ err_usage
+ ;;
+ esac
+ done
+ shift $((OPTIND-1))
commits=$(build_commit_list "$@")
- save_head
+
+ 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
- git checkout -q "$commit"
-
# The linter is stupid and applies patches to the working copy.
# This would be tolerable if it didn't try to correct "misspelled" variable
# names.
- arc diff --allow-untracked --never-apply-patches --update "$diff" HEAD~
+ if [ -n "$have_msg" ]; then
+ arc diff --message "$msg" --allow-untracked --never-apply-patches \
+ --update "$diff" --head "$commit" "${commit}~"
+ else
+ arc diff --allow-untracked --never-apply-patches --update "$diff" \
+ --head "$commit" "${commit}~"
+ fi
done
- restore_head
}
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
@@ -599,6 +804,16 @@ USAGE=
# shellcheck disable=SC1090
. "$git_sh_setup"
+# git commands use GIT_EDITOR instead of EDITOR, so try to provide consistent
+# behaviour. Ditto for PAGER. This makes git-arc play nicer with editor
+# plugins like vim-fugitive.
+if [ -n "$GIT_EDITOR" ]; then
+ EDITOR=$GIT_EDITOR
+fi
+if [ -n "$GIT_PAGER" ]; then
+ PAGER=$GIT_PAGER
+fi
+
# Bail if the working tree is unclean, except for "list" and "patch"
# operations.
case $verb in
@@ -609,10 +824,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
-trap restore_head EXIT INT
+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 e8125f47eb33..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:
#
@@ -52,6 +52,7 @@ $(awk '1;/^#$/{exit}' $1)
# MFC after: <N [day[s]|week[s]|month[s]]. Request a reminder email>
# Relnotes: <Set to 'yes' for mention in release notes.>
# Security: <Vulnerability reference (one per line) or description.>
+# Event: <If this was done at a conference.>
# Sponsored by: <If the change was sponsored by an organization.>
# Pull Request: <https://github.com/freebsd/<repo>/pull/###>
# Differential Revision: <https://reviews.freebsd.org/D###>
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 45f3b645e4ba..000000000000
--- a/tools/tools/git/mfc-candidates.sh
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/bin/sh
-
-#-
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
-#
-# 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/13
- # 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="--author <${author}@ --committer <${author}@"
-fi
-
-# Commits in from_branch after branch point
-commits_from()
-{
- git rev-list --first-parent $authorarg $to_branch..$from_branch "$@" |\
- sort
-}
-
-# "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' |\
- sort
-}
-
-# Turn a list of short hashes (and optional descriptions) into a list of full
-# hashes.
-canonicalize_hashes()
-{
- while read hash rest; do
- 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
-candidate_list=$workdir/candidates
-
-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
-
-comm -23 $from_list $to_list > $candidate_list
-
-if [ -n "$exclude_file" ]; then
- mv $candidate_list $candidate_list.bak
- comm -23 $candidate_list.bak $exclude_list > $candidate_list
-fi
-
-# Sort by (but do not print) commit time
-while read hash; do
- git show --pretty='%ct %h %s' --no-patch $hash
-done < $candidate_list | sort -n | cut -d ' ' -f 2-
-
-rm -rf "$workdir"
diff --git a/tools/tools/hcomp/Makefile b/tools/tools/hcomp/Makefile
index 06029b7a90d0..d1d1f640553c 100644
--- a/tools/tools/hcomp/Makefile
+++ b/tools/tools/hcomp/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
BINDIR ?= ${HOME}/bin
BINOWN ?= ${USER}
BINGRP ?= ${USER}
diff --git a/tools/tools/hcomp/hcomp.pl b/tools/tools/hcomp/hcomp.pl
index 36e3bda1009c..6d15eef08542 100644
--- a/tools/tools/hcomp/hcomp.pl
+++ b/tools/tools/hcomp/hcomp.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl -w
#-
-# Copyright (c) 2003 Dag-Erling Coïdan Smørgrav
+# Copyright (c) 2003 Dag-Erling Smørgrav
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
use strict;
diff --git a/tools/tools/html-mv/html-mv b/tools/tools/html-mv/html-mv
deleted file mode 100644
index 29ea1f2db81d..000000000000
--- a/tools/tools/html-mv/html-mv
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 1997 Wolfram Schneider <wosch@FreeBSD.org>. Berlin.
-# All rights reserved.
-#
-# rename sgml/html generated file names to human readable file names
-#
-# $ cd FAQ
-# $ make FORMATS=html
-# $ html-mv FAQ
-# $ ls
-# FAQ_ACKNOWLEDGMENTS.html
-# FAQ_Any_restrictions_on_how_I_divide_the_disk_up_.html
-# FAQ_Are_there_any_Database_systems_for_FreeBSD_.html
-# FAQ_Are_there_any_commercial_high-performance_X_servers_.html
-# FAQ_Books_on_FreeBSD.html
-# FAQ_Can_FreeBSD_handle_multiport_serial_cards_sharing_irqs_.html
-# [...]
-#
-# $FreeBSD$
-
-case $# in 0)
- echo "usage `basename $0` file"
- exit 1
-esac
-
-file=$1; export file
-
-if [ -f "$file.html" ]; then :
-else
- echo "$file.html does not exist"
- exit 1
-fi
-
-# search for title name
-egrep -i '^<title' $file[1-9]*.html |
- perl -npe 's/<TITLE>[\*\s]*//; s%\s*</TITLE>.*%%;
- s/[^a-zA-Z0-9\_\-\.:\n]/_/g' > .list
-
-# create sed commands
-awk -F: '{print "s/" $1 "/'$file'_" $2 ".html/g;"}' .list > .sed
-
-# create mv(1) shell script
-perl -ne 'chop;($a,$b)=split(/:/);
- print qq[rename ("$a", "$ENV{'file'}_$b.html") || ] .
- qq[die "rename $a $ENV{'file'}_$b.html:\$\!";\n]' .list > .mv
-
-# replace links
-if [ -f "$file.ln" ]; then
- perl -i -p .sed $file.ln
-fi
-
-# replace links
-perl -i -p .sed $file*.html
-
-# rename file names
-perl .mv
-
-rm -f .mv .sed .list
diff --git a/tools/tools/ifinfo/Makefile b/tools/tools/ifinfo/Makefile
index 21c2981fdb6d..3e95a642ca5f 100644
--- a/tools/tools/ifinfo/Makefile
+++ b/tools/tools/ifinfo/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ifinfo
SRCS= ifinfo.c rfc1650.c
MAN=
diff --git a/tools/tools/ifinfo/ifinfo.c b/tools/tools/ifinfo/ifinfo.c
index dea7d6ff8244..89d17f0c75fa 100644
--- a/tools/tools/ifinfo/ifinfo.c
+++ b/tools/tools/ifinfo/ifinfo.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/socket.h> /* for PF_LINK */
diff --git a/tools/tools/ifinfo/ifinfo.h b/tools/tools/ifinfo/ifinfo.h
index c05a8b82eca5..764d623dec2d 100644
--- a/tools/tools/ifinfo/ifinfo.h
+++ b/tools/tools/ifinfo/ifinfo.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef ifinfo_h
#define ifinfo_h 1
diff --git a/tools/tools/ifpifa/Makefile b/tools/tools/ifpifa/Makefile
index 92321cad57d0..b5aa64fe8b76 100644
--- a/tools/tools/ifpifa/Makefile
+++ b/tools/tools/ifpifa/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ifpifa
MAN=
BINDIR?=/usr/local/bin
diff --git a/tools/tools/ifpifa/ifpifa.c b/tools/tools/ifpifa/ifpifa.c
index 3f2a8190fdef..bc8f7352bbb6 100644
--- a/tools/tools/ifpifa/ifpifa.c
+++ b/tools/tools/ifpifa/ifpifa.c
@@ -28,7 +28,7 @@
#include <sys/types.h>
#include <sys/callout.h>
-#include <sys/cdefs.h>
+
#include <sys/param.h>
#include <sys/protosw.h>
#include <sys/queue.h>
@@ -52,9 +52,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
-__FBSDID("$FreeBSD$");
-
static struct nlist nl[] = {
#define N_IFNET 0
{ .n_name = "_ifnet", },
diff --git a/tools/tools/indent_wrapper/Makefile b/tools/tools/indent_wrapper/Makefile
index 87aa812b8049..9cdbcc95b238 100644
--- a/tools/tools/indent_wrapper/Makefile
+++ b/tools/tools/indent_wrapper/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
PREFIX?= /usr/local
LOCALBASE?= /usr/local
BINDIR= ${PREFIX}/sbin
diff --git a/tools/tools/indent_wrapper/indent_wrapper.c b/tools/tools/indent_wrapper/indent_wrapper.c
index d9aab17a0894..8a6dbca146a2 100644
--- a/tools/tools/indent_wrapper/indent_wrapper.c
+++ b/tools/tools/indent_wrapper/indent_wrapper.c
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
diff --git a/tools/tools/intel-ucode-split/Makefile b/tools/tools/intel-ucode-split/Makefile
index 7f20c18834b9..52d355050955 100644
--- a/tools/tools/intel-ucode-split/Makefile
+++ b/tools/tools/intel-ucode-split/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= intel-ucode-split
MAN=
diff --git a/tools/tools/intel-ucode-split/intel-ucode-split.c b/tools/tools/intel-ucode-split/intel-ucode-split.c
index 214b61af5328..2fec7c9df07d 100644
--- a/tools/tools/intel-ucode-split/intel-ucode-split.c
+++ b/tools/tools/intel-ucode-split/intel-ucode-split.c
@@ -1,5 +1,5 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (C) 2018 The FreeBSD Foundation.
*
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <err.h>
diff --git a/tools/tools/ioat/Makefile b/tools/tools/ioat/Makefile
index 32a0478eb0a3..7822cb5b0e93 100644
--- a/tools/tools/ioat/Makefile
+++ b/tools/tools/ioat/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ioatcontrol
MAN= ioatcontrol.8
BINDIR?= /usr/bin
diff --git a/tools/tools/ioat/ioatcontrol.8 b/tools/tools/ioat/ioatcontrol.8
index 35f8d1fecc28..aeb0bc7d0b21 100644
--- a/tools/tools/ioat/ioatcontrol.8
+++ b/tools/tools/ioat/ioatcontrol.8
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd May 27, 2016
.Dt IOATCONTROL 8
.Os
diff --git a/tools/tools/ioat/ioatcontrol.c b/tools/tools/ioat/ioatcontrol.c
index f76af5b0e766..4c4358539420 100644
--- a/tools/tools/ioat/ioatcontrol.c
+++ b/tools/tools/ioat/ioatcontrol.c
@@ -25,8 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/ioctl.h>
#include <sys/queue.h>
diff --git a/tools/tools/ipw/Makefile b/tools/tools/ipw/Makefile
index f952d8807802..cb8fcaf9fa81 100644
--- a/tools/tools/ipw/Makefile
+++ b/tools/tools/ipw/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ipwstats
MAN=
diff --git a/tools/tools/ipw/ipwstats.c b/tools/tools/ipw/ipwstats.c
index fe8c5a83ab1a..8b95607397b0 100644
--- a/tools/tools/ipw/ipwstats.c
+++ b/tools/tools/ipw/ipwstats.c
@@ -25,9 +25,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/sysctl.h>
diff --git a/tools/tools/iso/check-iso3166.pl b/tools/tools/iso/check-iso3166.pl
index a8baf4ee6a78..3acdcdaf177d 100755
--- a/tools/tools/iso/check-iso3166.pl
+++ b/tools/tools/iso/check-iso3166.pl
@@ -1,7 +1,6 @@
#!/usr/bin/perl -w
#
-# $FreeBSD$
#
# This script compares the file iso3166 (from head/share/misc) with the files
# list-en1-semic-3.txt (from
diff --git a/tools/tools/iso/check-iso639.pl b/tools/tools/iso/check-iso639.pl
index 9350df09102c..aa41724ce076 100755
--- a/tools/tools/iso/check-iso639.pl
+++ b/tools/tools/iso/check-iso639.pl
@@ -1,7 +1,6 @@
#!/usr/bin/perl -w
#
-# $FreeBSD$
#
# This script compares the file iso639 (from head/share/misc) with the file
# ISO-639-2_8859-1.txt (from
diff --git a/tools/tools/iwi/Makefile b/tools/tools/iwi/Makefile
index 8ebdd60ebc05..0e3c3c78fe08 100644
--- a/tools/tools/iwi/Makefile
+++ b/tools/tools/iwi/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= iwistats
MAN=
diff --git a/tools/tools/iwi/iwistats.c b/tools/tools/iwi/iwistats.c
index 1034dac7701f..48572e44a875 100644
--- a/tools/tools/iwi/iwistats.c
+++ b/tools/tools/iwi/iwistats.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2005
@@ -27,9 +26,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/sysctl.h>
diff --git a/tools/tools/iwn/Makefile b/tools/tools/iwn/Makefile
index 1f9e93a34fbe..34ec4aa669ef 100644
--- a/tools/tools/iwn/Makefile
+++ b/tools/tools/iwn/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= iwnstats
.include <bsd.subdir.mk>
diff --git a/tools/tools/iwn/iwnstats/Makefile b/tools/tools/iwn/iwnstats/Makefile
index 685e40759fb2..c5cf15a2bce4 100644
--- a/tools/tools/iwn/iwnstats/Makefile
+++ b/tools/tools/iwn/iwnstats/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
MAN=
.include <bsd.own.mk>
diff --git a/tools/tools/iwn/iwnstats/iwn_ioctl.c b/tools/tools/iwn/iwnstats/iwn_ioctl.c
index 4446886285d4..b1a889f74d46 100644
--- a/tools/tools/iwn/iwnstats/iwn_ioctl.c
+++ b/tools/tools/iwn/iwnstats/iwn_ioctl.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/iwn/iwnstats/iwn_ioctl.h b/tools/tools/iwn/iwnstats/iwn_ioctl.h
index bc368ee4a34a..7f406785408b 100644
--- a/tools/tools/iwn/iwnstats/iwn_ioctl.h
+++ b/tools/tools/iwn/iwnstats/iwn_ioctl.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef __IWN_IOCTL_H__
#define __IWN_IOCTL_H__
diff --git a/tools/tools/iwn/iwnstats/iwnstats.h b/tools/tools/iwn/iwnstats/iwnstats.h
index 372a2aa6eb31..3c5b7d52de7e 100644
--- a/tools/tools/iwn/iwnstats/iwnstats.h
+++ b/tools/tools/iwn/iwnstats/iwnstats.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef __IWNSTATS_H__
#define __IWNSTATS_H__
diff --git a/tools/tools/iwn/iwnstats/main.c b/tools/tools/iwn/iwnstats/main.c
index 8717bc48f824..00a7da41d6a0 100644
--- a/tools/tools/iwn/iwnstats/main.c
+++ b/tools/tools/iwn/iwnstats/main.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdbool.h>
diff --git a/tools/tools/kdrv/KernelDriver b/tools/tools/kdrv/KernelDriver
index 60f89d82bf39..8376c951f058 100755
--- a/tools/tools/kdrv/KernelDriver
+++ b/tools/tools/kdrv/KernelDriver
@@ -73,7 +73,6 @@ exec tclsh $0 $*
#
################################################################################
#
-# $FreeBSD$
#
################################################################################
diff --git a/tools/tools/kdrv/sample.drvinfo b/tools/tools/kdrv/sample.drvinfo
index 4941b07082c4..7ffe093656cf 100644
--- a/tools/tools/kdrv/sample.drvinfo
+++ b/tools/tools/kdrv/sample.drvinfo
@@ -2,7 +2,6 @@
# Sample driver information file for KernelDriver. See the top of
# the KernelDriver script for a more exact definition of the syntax.
#
-# $FreeBSD$
# Device driver name
#
diff --git a/tools/tools/kernelcruft/kernelcruft.sh b/tools/tools/kernelcruft/kernelcruft.sh
index 87288c54bd21..5d475d0a5b2e 100644
--- a/tools/tools/kernelcruft/kernelcruft.sh
+++ b/tools/tools/kernelcruft/kernelcruft.sh
@@ -4,7 +4,6 @@
#
# Try to find *.c files in /sys which are orphaned
#
-# $FreeBSD$
cd /sys/conf
cat files* | sed '
diff --git a/tools/tools/kerninclude/kerninclude.sh b/tools/tools/kerninclude/kerninclude.sh
index fd3e4fd4e072..120bd8c5caec 100644
--- a/tools/tools/kerninclude/kerninclude.sh
+++ b/tools/tools/kerninclude/kerninclude.sh
@@ -6,7 +6,6 @@
# this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
# ----------------------------------------------------------------------------
#
-# $FreeBSD$
#
# This script tries to find #include statements which are not needed in
# the FreeBSD kernel tree.
diff --git a/tools/tools/kernxref/kernxref.sh b/tools/tools/kernxref/kernxref.sh
index e729a100b7be..bfb5145f36ca 100644
--- a/tools/tools/kernxref/kernxref.sh
+++ b/tools/tools/kernxref/kernxref.sh
@@ -11,7 +11,6 @@
#
# Sort options by "Matthew Emmerton" <matt@gsicomp.on.ca>
#
-# $FreeBSD$
#
# This shell script will make a cross reference of the symbols of a kernel.
#
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 2f2feb3709bb..cfa275f5d5ef 100644
--- a/tools/tools/kttcp/Makefile
+++ b/tools/tools/kttcp/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SHELL= /bin/sh
PROG= kttcp
diff --git a/tools/tools/kttcp/README b/tools/tools/kttcp/README
index f78c8d66b07a..c2a39465d4fa 100644
--- a/tools/tools/kttcp/README
+++ b/tools/tools/kttcp/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This is a port of Jason Thorpe's kttcp tool for testing network
performance for in-kernel applications (like NFS). The tool consists
diff --git a/tools/tools/kttcp/kttcp.c b/tools/tools/kttcp/kttcp.c
index 44c6613fa90b..52dc1eff7bc5 100644
--- a/tools/tools/kttcp/kttcp.c
+++ b/tools/tools/kttcp/kttcp.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* $NetBSD: kttcp.c,v 1.5 2002/07/11 23:32:35 simonb Exp $ */
/*
diff --git a/tools/tools/kttcp/sys/Makefile b/tools/tools/kttcp/sys/Makefile
index d7815306b4ab..c8f468418892 100644
--- a/tools/tools/kttcp/sys/Makefile
+++ b/tools/tools/kttcp/sys/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
KMOD = kttcp
SRCS = kttcp.c
SRCS += device_if.h
diff --git a/tools/tools/kttcp/sys/kttcp.c b/tools/tools/kttcp/sys/kttcp.c
index 09739600feaf..2adca499b4d1 100644
--- a/tools/tools/kttcp/sys/kttcp.c
+++ b/tools/tools/kttcp/sys/kttcp.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* $NetBSD: kttcp.c,v 1.3 2002/07/03 19:36:52 thorpej Exp $ */
/*
diff --git a/tools/tools/kttcp/sys/kttcpio.h b/tools/tools/kttcp/sys/kttcpio.h
index 1375f6ef6c9d..6b0756528a27 100644
--- a/tools/tools/kttcp/sys/kttcpio.h
+++ b/tools/tools/kttcp/sys/kttcpio.h
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/* $NetBSD$ */
/*
diff --git a/tools/tools/locale/Makefile b/tools/tools/locale/Makefile
index 354812b4fc2b..b49c90e691be 100644
--- a/tools/tools/locale/Makefile
+++ b/tools/tools/locale/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
# See https://wiki.freebsd.org/LocaleNewApproach
# Taken from FreeBSD svn [base]/user/edwin/locale/cldr
#
@@ -7,6 +6,10 @@
#
# Modified by John Marino to suit DragonFly needs
#
+
+CLDRVERSION= 45.0
+UCDVERSION= 15.0.0
+
.if ${.CURDIR} == ${.OBJDIR}
.error Do make obj first.
.endif
@@ -20,13 +23,9 @@ TOOLSDIR= ${BASEDIR}/tools
PATCHDIR= ${BASEDIR}/patch
UNIDIR= ${.OBJDIR:tA}/unicode
-PKGS= openjdk8 \
- p5-XML-Parser \
- p5-Tie-IxHash \
- p5-Text-Iconv
+PKGS= openjdk11 p5-XML-Parser p5-Tie-IxHash p5-Text-Iconv utf8proc
tools-test:
- pkg info -e ${PKGS}
- @echo tools ok.
+ @pkg info -e ${PKGS} || ( echo required packages: ${PKGS}; exit 1 )
KNOWN= monetdef numericdef msgdef colldef ctypedef # timedef
TYPES?= ${KNOWN}
@@ -39,8 +38,8 @@ SETENV= env -i \
TOOLSDIR="${TOOLSDIR}" \
ETCDIR="${ETCDIR}"
-all: posix build afterbuild
-.ORDER: posix build afterbuild
+all: tools-test posix build afterbuild widths
+.ORDER: tools-test posix build afterbuild widths
afterbuild: build
@echo ""
@@ -123,11 +122,10 @@ ENCODINGS= UTF-8 \
UTF-32
# CLDR files
-CLDRVERSION= 41.0
CLDRFILES_CORE= https://unicode.org/Public/cldr/${CLDRVERSION:R}/core.zip
CLDRFILES_KEY= https://unicode.org/Public/cldr/${CLDRVERSION:R}/cldr-keyboards-${CLDRVERSION}.zip
CLDRFILES_TOOLS=https://unicode.org/Public/cldr/${CLDRVERSION:R}/cldr-tools-${CLDRVERSION}.jar
-CLDRFILES_UCD= http://www.unicode.org/Public/zipped/14.0.0/UCD.zip
+CLDRFILES_UCD= https://www.unicode.org/Public/zipped/${UCDVERSION}/UCD.zip
# fetch and extract targets
${UNIDIR}:
@@ -141,12 +139,13 @@ extract-${CLDRFILES_${N}:T}:: ${CLDRFILES_${N}:T} ${UNIDIR}
extract: extract-${CLDRFILES_${N}:T}
.endfor
echo ${CLDRVERSION} > ${UNIDIR}/cldr-version
+ mkdir -p ${UNIDIR}/seed/main
patch::
.if exists(${PATCHDIR})
cd ${UNIDIR} && cat ${PATCHDIR}/patch-* | patch
.endif
-JAVA_CLDR= java -DCLDR_DIR=${UNIDIR:Q} -jar ${.OBJDIR:tA}//${CLDRFILES_TOOLS:T}
+JAVA_CLDR= java -DCLDR_DIR=${UNIDIR:Q} -jar ${.OBJDIR:tA}/${CLDRFILES_TOOLS:T}
posix: posixcm post-posixcm posixsrc
.ORDER: posixcm post-posixcm posixsrc
diff --git a/tools/tools/locale/README b/tools/tools/locale/README
index 380786929b7c..58cf6aff82d6 100644
--- a/tools/tools/locale/README
+++ b/tools/tools/locale/README
@@ -1,12 +1,12 @@
-# $FreeBSD$
-
Files in this directory are used to generate locale source files
-from files in CLDR (Unicode Common Locale Data Repository).
+from files in CLDR (Unicode Common Locale Data Repository).
To generate the files, do the following:
cd /usr/src/tools/tools/locale
make obj (mandatory)
+ make fetch (download the CLDR source)
+ make extract (and extract it)
make -j16 (-jN recommended)
make diff (check if the changes are reasonable)
make install
diff --git a/tools/tools/locale/etc/charmaps.xml b/tools/tools/locale/etc/charmaps.xml
index dcf1644e4371..0193912b9a01 100644
--- a/tools/tools/locale/etc/charmaps.xml
+++ b/tools/tools/locale/etc/charmaps.xml
@@ -1,4 +1,3 @@
-<!-- $FreeBSD$ -->
<data>
<languages>
<!-- Attributes known:
diff --git a/tools/tools/locale/etc/charmaps/ARMSCII-8.TXT b/tools/tools/locale/etc/charmaps/ARMSCII-8.TXT
index cad0c1c89a62..4d56d1d511f0 100644
--- a/tools/tools/locale/etc/charmaps/ARMSCII-8.TXT
+++ b/tools/tools/locale/etc/charmaps/ARMSCII-8.TXT
@@ -5,7 +5,6 @@
#
# Updated with libiconv-1.13.1/tests/ARMSCII-8.TXT
#
-# $FreeBSD$
#
0x00 0x0000
0x01 0x0001
diff --git a/tools/tools/locale/etc/charmaps/Big5.TXT b/tools/tools/locale/etc/charmaps/Big5.TXT
index 7a3f927a04a5..6593c8057f61 100644
--- a/tools/tools/locale/etc/charmaps/Big5.TXT
+++ b/tools/tools/locale/etc/charmaps/Big5.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: BIG5 to Unicode table (complete)
# Unicode version: 1.1
diff --git a/tools/tools/locale/etc/charmaps/CP1131.TXT b/tools/tools/locale/etc/charmaps/CP1131.TXT
index c865ae74427a..cf72e95683e6 100644
--- a/tools/tools/locale/etc/charmaps/CP1131.TXT
+++ b/tools/tools/locale/etc/charmaps/CP1131.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Obtained from
# http://haible.de/bruno/charsets/conversion-tables/CP1131.html
diff --git a/tools/tools/locale/etc/charmaps/CP1251.TXT b/tools/tools/locale/etc/charmaps/CP1251.TXT
index ca3e8f026277..de666c43357b 100644
--- a/tools/tools/locale/etc/charmaps/CP1251.TXT
+++ b/tools/tools/locale/etc/charmaps/CP1251.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: cp1251 to Unicode table
# Unicode version: 2.0
diff --git a/tools/tools/locale/etc/charmaps/CP866.TXT b/tools/tools/locale/etc/charmaps/CP866.TXT
index f38b16812055..d071385fc3b1 100644
--- a/tools/tools/locale/etc/charmaps/CP866.TXT
+++ b/tools/tools/locale/etc/charmaps/CP866.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: cp866_DOSCyrillicRussian to Unicode table
# Unicode version: 2.0
diff --git a/tools/tools/locale/etc/charmaps/GB18030.TXT b/tools/tools/locale/etc/charmaps/GB18030.TXT
index b9706cbf8bde..476df831e172 100644
--- a/tools/tools/locale/etc/charmaps/GB18030.TXT
+++ b/tools/tools/locale/etc/charmaps/GB18030.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Obtained from libiconv-0.13.1
#
diff --git a/tools/tools/locale/etc/charmaps/GB2312.TXT b/tools/tools/locale/etc/charmaps/GB2312.TXT
index be2c3989a7b5..f2f796746da1 100644
--- a/tools/tools/locale/etc/charmaps/GB2312.TXT
+++ b/tools/tools/locale/etc/charmaps/GB2312.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: GB2312-80 to Unicode table (complete, hex format)
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/GBK.TXT b/tools/tools/locale/etc/charmaps/GBK.TXT
index e342b86d9c5f..818f6eb17794 100644
--- a/tools/tools/locale/etc/charmaps/GBK.TXT
+++ b/tools/tools/locale/etc/charmaps/GBK.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Obtained from libiconv-0.13.1
#
diff --git a/tools/tools/locale/etc/charmaps/ISCII-DEV.TXT b/tools/tools/locale/etc/charmaps/ISCII-DEV.TXT
index 7de1f76ca483..77fd05e87277 100644
--- a/tools/tools/locale/etc/charmaps/ISCII-DEV.TXT
+++ b/tools/tools/locale/etc/charmaps/ISCII-DEV.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
#=======================================================================
# File name: DEVANAGA.TXT
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-1.TXT b/tools/tools/locale/etc/charmaps/ISO8859-1.TXT
index 5771a8b5d3a4..b7fbcb7be24f 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-1.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-1.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO/IEC 8859-1:1998 to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-13.TXT b/tools/tools/locale/etc/charmaps/ISO8859-13.TXT
index 76d7e6e065a5..4992046d10c6 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-13.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-13.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO/IEC 8859-13:1998 to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-15.TXT b/tools/tools/locale/etc/charmaps/ISO8859-15.TXT
index 6c251b2594a1..ecbae7700b54 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-15.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-15.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO/IEC 8859-15:1999 to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-2.TXT b/tools/tools/locale/etc/charmaps/ISO8859-2.TXT
index 130a16a6aef6..e40685cd83b7 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-2.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-2.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO 8859-2:1999 to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-4.TXT b/tools/tools/locale/etc/charmaps/ISO8859-4.TXT
index 7e24ab384bd3..2128e686ea11 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-4.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-4.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO/IEC 8859-4:1998 to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-5.TXT b/tools/tools/locale/etc/charmaps/ISO8859-5.TXT
index 895153671f4e..cda5eec0fc96 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-5.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-5.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO 8859-5:1999 to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-7.TXT b/tools/tools/locale/etc/charmaps/ISO8859-7.TXT
index 05dae5ef22c6..42e4b3065ca0 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-7.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-7.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO 8859-7:2003 to Unicode
# Unicode version: 4.0
diff --git a/tools/tools/locale/etc/charmaps/ISO8859-9.TXT b/tools/tools/locale/etc/charmaps/ISO8859-9.TXT
index ea563b2994a6..f65493eee5a7 100644
--- a/tools/tools/locale/etc/charmaps/ISO8859-9.TXT
+++ b/tools/tools/locale/etc/charmaps/ISO8859-9.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: ISO/IEC 8859-9:1999 to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/KOI8-R.TXT b/tools/tools/locale/etc/charmaps/KOI8-R.TXT
index 55d53bbebbb1..9c9d1a1c02ea 100644
--- a/tools/tools/locale/etc/charmaps/KOI8-R.TXT
+++ b/tools/tools/locale/etc/charmaps/KOI8-R.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: KOI8-R (RFC1489) to Unicode
# Unicode version: 3.0
diff --git a/tools/tools/locale/etc/charmaps/KOI8-U.TXT b/tools/tools/locale/etc/charmaps/KOI8-U.TXT
index 4570af2fab2c..c9c8add11fe0 100644
--- a/tools/tools/locale/etc/charmaps/KOI8-U.TXT
+++ b/tools/tools/locale/etc/charmaps/KOI8-U.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: KOI8-U (RFC2319) to Unicode
# Unicode version: 5.1
diff --git a/tools/tools/locale/etc/charmaps/PT154.TXT b/tools/tools/locale/etc/charmaps/PT154.TXT
index df6acbe624d8..40ca39e8d707 100644
--- a/tools/tools/locale/etc/charmaps/PT154.TXT
+++ b/tools/tools/locale/etc/charmaps/PT154.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Charset name:
# PTCP154
diff --git a/tools/tools/locale/etc/charmaps/SJIS.TXT b/tools/tools/locale/etc/charmaps/SJIS.TXT
index ce5dc3455ab4..293eb1695c37 100644
--- a/tools/tools/locale/etc/charmaps/SJIS.TXT
+++ b/tools/tools/locale/etc/charmaps/SJIS.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Obtained from libiconv-0.13.1
#
diff --git a/tools/tools/locale/etc/charmaps/US-ASCII.TXT b/tools/tools/locale/etc/charmaps/US-ASCII.TXT
index c9ce43def3a1..52ffbe236976 100644
--- a/tools/tools/locale/etc/charmaps/US-ASCII.TXT
+++ b/tools/tools/locale/etc/charmaps/US-ASCII.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Format: Three tab-separated columns
# Column #1 is the US-ASCII code (in hex as 0xXX)
diff --git a/tools/tools/locale/etc/charmaps/charmaps.txt b/tools/tools/locale/etc/charmaps/charmaps.txt
index d8f8bb8190b3..876d990f1e06 100644
--- a/tools/tools/locale/etc/charmaps/charmaps.txt
+++ b/tools/tools/locale/etc/charmaps/charmaps.txt
@@ -1,4 +1,3 @@
-$FreeBSD$
Sources:
diff --git a/tools/tools/locale/etc/charmaps/eucCN.TXT b/tools/tools/locale/etc/charmaps/eucCN.TXT
index 1cec36cbb4d8..ebf4d8db5331 100644
--- a/tools/tools/locale/etc/charmaps/eucCN.TXT
+++ b/tools/tools/locale/etc/charmaps/eucCN.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: eucCN-80 to Unicode table (complete, hex format)
# Based on the GB2312.TXT
diff --git a/tools/tools/locale/etc/charmaps/eucJP.TXT b/tools/tools/locale/etc/charmaps/eucJP.TXT
index 0124883d0fe0..ffca30d999fd 100644
--- a/tools/tools/locale/etc/charmaps/eucJP.TXT
+++ b/tools/tools/locale/etc/charmaps/eucJP.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Obtained from libiconv-0.13.1
#
diff --git a/tools/tools/locale/etc/charmaps/eucKR.TXT b/tools/tools/locale/etc/charmaps/eucKR.TXT
index 335079170378..fb5b18e50f21 100644
--- a/tools/tools/locale/etc/charmaps/eucKR.TXT
+++ b/tools/tools/locale/etc/charmaps/eucKR.TXT
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Name: cp949 to Unicode table
# Unicode version: 2.0
diff --git a/tools/tools/locale/etc/final-maps/map.UTF-8 b/tools/tools/locale/etc/final-maps/map.UTF-8
index e16fd6544b6e..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-2022 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"
@@ -3116,6 +3116,7 @@ CHARMAP
<KANNADA_DIGIT_NINE> \xE0\xB3\xAF
<KANNADA_SIGN_JIHVAMULIYA> \xE0\xB3\xB1
<KANNADA_SIGN_UPADHMANIYA> \xE0\xB3\xB2
+<KANNADA_SIGN_COMBINING_ANUSVARA_ABOVE_RIGHT> \xE0\xB3\xB3
<MALAYALAM_SIGN_COMBINING_ANUSVARA_ABOVE> \xE0\xB4\x80
<MALAYALAM_SIGN_CANDRABINDU> \xE0\xB4\x81
<MALAYALAM_SIGN_ANUSVARA> \xE0\xB4\x82
@@ -3480,6 +3481,7 @@ CHARMAP
<LAO_TONE_MAI_CATAWA> \xE0\xBB\x8B
<LAO_CANCELLATION_MARK> \xE0\xBB\x8C
<LAO_NIGGAHITA> \xE0\xBB\x8D
+<LAO_YAMAKKAN> \xE0\xBB\x8E
<LAO_DIGIT_ZERO> \xE0\xBB\x90
<LAO_DIGIT_ONE> \xE0\xBB\x91
<LAO_DIGIT_TWO> \xE0\xBB\x92
@@ -11370,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
@@ -11844,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
@@ -64676,6 +64683,9 @@ CHARMAP
<YEZIDI_HYPHENATION_MARK> \xF0\x90\xBA\xAD
<YEZIDI_LETTER_LAM_WITH_DOT_ABOVE> \xF0\x90\xBA\xB0
<YEZIDI_LETTER_YOT_WITH_CIRCUMFLEX_ABOVE> \xF0\x90\xBA\xB1
+<ARABIC_SMALL_LOW_WORD_SAKTA> \xF0\x90\xBB\xBD
+<ARABIC_SMALL_LOW_WORD_QASR> \xF0\x90\xBB\xBE
+<ARABIC_SMALL_LOW_WORD_MADDA> \xF0\x90\xBB\xBF
<OLD_SOGDIAN_LETTER_ALEPH> \xF0\x90\xBC\x80
<OLD_SOGDIAN_LETTER_FINAL_ALEPH> \xF0\x90\xBC\x81
<OLD_SOGDIAN_LETTER_BETH> \xF0\x90\xBC\x82
@@ -65341,6 +65351,9 @@ CHARMAP
<KHOJKI_DOUBLE_SECTION_MARK> \xF0\x91\x88\xBC
<KHOJKI_ABBREVIATION_SIGN> \xF0\x91\x88\xBD
<KHOJKI_SIGN_SUKUN> \xF0\x91\x88\xBE
+<KHOJKI_LETTER_QA> \xF0\x91\x88\xBF
+<KHOJKI_LETTER_SHORT_I> \xF0\x91\x89\x80
+<KHOJKI_VOWEL_SIGN_VOCALIC_R> \xF0\x91\x89\x81
<MULTANI_LETTER_A> \xF0\x91\x8A\x80
<MULTANI_LETTER_I> \xF0\x91\x8A\x81
<MULTANI_LETTER_U> \xF0\x91\x8A\x82
@@ -66539,6 +66552,16 @@ CHARMAP
<PAU_CIN_HAU_LOW-FALLING_TONE_LONG_FINAL> \xF0\x91\xAB\xB6
<PAU_CIN_HAU_LOW-FALLING_TONE_FINAL> \xF0\x91\xAB\xB7
<PAU_CIN_HAU_GLOTTAL_STOP_FINAL> \xF0\x91\xAB\xB8
+<DEVANAGARI_HEAD_MARK> \xF0\x91\xAC\x80
+<DEVANAGARI_HEAD_MARK_WITH_HEADSTROKE> \xF0\x91\xAC\x81
+<DEVANAGARI_SIGN_BHALE> \xF0\x91\xAC\x82
+<DEVANAGARI_SIGN_BHALE_WITH_HOOK> \xF0\x91\xAC\x83
+<DEVANAGARI_SIGN_EXTENDED_BHALE> \xF0\x91\xAC\x84
+<DEVANAGARI_SIGN_EXTENDED_BHALE_WITH_HOOK> \xF0\x91\xAC\x85
+<DEVANAGARI_SIGN_WESTERN_FIVE-LIKE_BHALE> \xF0\x91\xAC\x86
+<DEVANAGARI_SIGN_WESTERN_NINE-LIKE_BHALE> \xF0\x91\xAC\x87
+<DEVANAGARI_SIGN_REVERSED_NINE-LIKE_BHALE> \xF0\x91\xAC\x88
+<DEVANAGARI_SIGN_MINDU> \xF0\x91\xAC\x89
<BHAIKSUKI_LETTER_A> \xF0\x91\xB0\x80
<BHAIKSUKI_LETTER_AA> \xF0\x91\xB0\x81
<BHAIKSUKI_LETTER_I> \xF0\x91\xB0\x82
@@ -66867,6 +66890,92 @@ CHARMAP
<MAKASAR_VOWEL_SIGN_O> \xF0\x91\xBB\xB6
<MAKASAR_PASSIMBANG> \xF0\x91\xBB\xB7
<MAKASAR_END_OF_SECTION> \xF0\x91\xBB\xB8
+<KAWI_SIGN_CANDRABINDU> \xF0\x91\xBC\x80
+<KAWI_SIGN_ANUSVARA> \xF0\x91\xBC\x81
+<KAWI_SIGN_REPHA> \xF0\x91\xBC\x82
+<KAWI_SIGN_VISARGA> \xF0\x91\xBC\x83
+<KAWI_LETTER_A> \xF0\x91\xBC\x84
+<KAWI_LETTER_AA> \xF0\x91\xBC\x85
+<KAWI_LETTER_I> \xF0\x91\xBC\x86
+<KAWI_LETTER_II> \xF0\x91\xBC\x87
+<KAWI_LETTER_U> \xF0\x91\xBC\x88
+<KAWI_LETTER_UU> \xF0\x91\xBC\x89
+<KAWI_LETTER_VOCALIC_R> \xF0\x91\xBC\x8A
+<KAWI_LETTER_VOCALIC_RR> \xF0\x91\xBC\x8B
+<KAWI_LETTER_VOCALIC_L> \xF0\x91\xBC\x8C
+<KAWI_LETTER_VOCALIC_LL> \xF0\x91\xBC\x8D
+<KAWI_LETTER_E> \xF0\x91\xBC\x8E
+<KAWI_LETTER_AI> \xF0\x91\xBC\x8F
+<KAWI_LETTER_O> \xF0\x91\xBC\x90
+<KAWI_LETTER_KA> \xF0\x91\xBC\x92
+<KAWI_LETTER_KHA> \xF0\x91\xBC\x93
+<KAWI_LETTER_GA> \xF0\x91\xBC\x94
+<KAWI_LETTER_GHA> \xF0\x91\xBC\x95
+<KAWI_LETTER_NGA> \xF0\x91\xBC\x96
+<KAWI_LETTER_CA> \xF0\x91\xBC\x97
+<KAWI_LETTER_CHA> \xF0\x91\xBC\x98
+<KAWI_LETTER_JA> \xF0\x91\xBC\x99
+<KAWI_LETTER_JHA> \xF0\x91\xBC\x9A
+<KAWI_LETTER_NYA> \xF0\x91\xBC\x9B
+<KAWI_LETTER_TTA> \xF0\x91\xBC\x9C
+<KAWI_LETTER_TTHA> \xF0\x91\xBC\x9D
+<KAWI_LETTER_DDA> \xF0\x91\xBC\x9E
+<KAWI_LETTER_DDHA> \xF0\x91\xBC\x9F
+<KAWI_LETTER_NNA> \xF0\x91\xBC\xA0
+<KAWI_LETTER_TA> \xF0\x91\xBC\xA1
+<KAWI_LETTER_THA> \xF0\x91\xBC\xA2
+<KAWI_LETTER_DA> \xF0\x91\xBC\xA3
+<KAWI_LETTER_DHA> \xF0\x91\xBC\xA4
+<KAWI_LETTER_NA> \xF0\x91\xBC\xA5
+<KAWI_LETTER_PA> \xF0\x91\xBC\xA6
+<KAWI_LETTER_PHA> \xF0\x91\xBC\xA7
+<KAWI_LETTER_BA> \xF0\x91\xBC\xA8
+<KAWI_LETTER_BHA> \xF0\x91\xBC\xA9
+<KAWI_LETTER_MA> \xF0\x91\xBC\xAA
+<KAWI_LETTER_YA> \xF0\x91\xBC\xAB
+<KAWI_LETTER_RA> \xF0\x91\xBC\xAC
+<KAWI_LETTER_LA> \xF0\x91\xBC\xAD
+<KAWI_LETTER_WA> \xF0\x91\xBC\xAE
+<KAWI_LETTER_SHA> \xF0\x91\xBC\xAF
+<KAWI_LETTER_SSA> \xF0\x91\xBC\xB0
+<KAWI_LETTER_SA> \xF0\x91\xBC\xB1
+<KAWI_LETTER_HA> \xF0\x91\xBC\xB2
+<KAWI_LETTER_JNYA> \xF0\x91\xBC\xB3
+<KAWI_VOWEL_SIGN_AA> \xF0\x91\xBC\xB4
+<KAWI_VOWEL_SIGN_ALTERNATE_AA> \xF0\x91\xBC\xB5
+<KAWI_VOWEL_SIGN_I> \xF0\x91\xBC\xB6
+<KAWI_VOWEL_SIGN_II> \xF0\x91\xBC\xB7
+<KAWI_VOWEL_SIGN_U> \xF0\x91\xBC\xB8
+<KAWI_VOWEL_SIGN_UU> \xF0\x91\xBC\xB9
+<KAWI_VOWEL_SIGN_VOCALIC_R> \xF0\x91\xBC\xBA
+<KAWI_VOWEL_SIGN_E> \xF0\x91\xBC\xBE
+<KAWI_VOWEL_SIGN_AI> \xF0\x91\xBC\xBF
+<KAWI_VOWEL_SIGN_EU> \xF0\x91\xBD\x80
+<KAWI_SIGN_KILLER> \xF0\x91\xBD\x81
+<KAWI_CONJOINER> \xF0\x91\xBD\x82
+<KAWI_DANDA> \xF0\x91\xBD\x83
+<KAWI_DOUBLE_DANDA> \xF0\x91\xBD\x84
+<KAWI_PUNCTUATION_SECTION_MARKER> \xF0\x91\xBD\x85
+<KAWI_PUNCTUATION_ALTERNATE_SECTION_MARKER> \xF0\x91\xBD\x86
+<KAWI_PUNCTUATION_FLOWER> \xF0\x91\xBD\x87
+<KAWI_PUNCTUATION_SPACE_FILLER> \xF0\x91\xBD\x88
+<KAWI_PUNCTUATION_DOT> \xF0\x91\xBD\x89
+<KAWI_PUNCTUATION_DOUBLE_DOT> \xF0\x91\xBD\x8A
+<KAWI_PUNCTUATION_TRIPLE_DOT> \xF0\x91\xBD\x8B
+<KAWI_PUNCTUATION_CIRCLE> \xF0\x91\xBD\x8C
+<KAWI_PUNCTUATION_FILLED_CIRCLE> \xF0\x91\xBD\x8D
+<KAWI_PUNCTUATION_SPIRAL> \xF0\x91\xBD\x8E
+<KAWI_PUNCTUATION_CLOSING_SPIRAL> \xF0\x91\xBD\x8F
+<KAWI_DIGIT_ZERO> \xF0\x91\xBD\x90
+<KAWI_DIGIT_ONE> \xF0\x91\xBD\x91
+<KAWI_DIGIT_TWO> \xF0\x91\xBD\x92
+<KAWI_DIGIT_THREE> \xF0\x91\xBD\x93
+<KAWI_DIGIT_FOUR> \xF0\x91\xBD\x94
+<KAWI_DIGIT_FIVE> \xF0\x91\xBD\x95
+<KAWI_DIGIT_SIX> \xF0\x91\xBD\x96
+<KAWI_DIGIT_SEVEN> \xF0\x91\xBD\x97
+<KAWI_DIGIT_EIGHT> \xF0\x91\xBD\x98
+<KAWI_DIGIT_NINE> \xF0\x91\xBD\x99
<LISU_LETTER_YHA> \xF0\x91\xBE\xB0
<TAMIL_FRACTION_ONE_THREE-HUNDRED-AND-TWENTIETH> \xF0\x91\xBF\x80
<TAMIL_FRACTION_ONE_ONE-HUNDRED-AND-SIXTIETH> \xF0\x91\xBF\x81
@@ -69323,6 +69432,7 @@ CHARMAP
<EGYPTIAN_HIEROGLYPH_AA030> \xF0\x93\x90\xAC
<EGYPTIAN_HIEROGLYPH_AA031> \xF0\x93\x90\xAD
<EGYPTIAN_HIEROGLYPH_AA032> \xF0\x93\x90\xAE
+<EGYPTIAN_HIEROGLYPH_V011D> \xF0\x93\x90\xAF
<EGYPTIAN_HIEROGLYPH_VERTICAL_JOINER> \xF0\x93\x90\xB0
<EGYPTIAN_HIEROGLYPH_HORIZONTAL_JOINER> \xF0\x93\x90\xB1
<EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_START> \xF0\x93\x90\xB2
@@ -69332,6 +69442,35 @@ CHARMAP
<EGYPTIAN_HIEROGLYPH_OVERLAY_MIDDLE> \xF0\x93\x90\xB6
<EGYPTIAN_HIEROGLYPH_BEGIN_SEGMENT> \xF0\x93\x90\xB7
<EGYPTIAN_HIEROGLYPH_END_SEGMENT> \xF0\x93\x90\xB8
+<EGYPTIAN_HIEROGLYPH_INSERT_AT_MIDDLE> \xF0\x93\x90\xB9
+<EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP> \xF0\x93\x90\xBA
+<EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM> \xF0\x93\x90\xBB
+<EGYPTIAN_HIEROGLYPH_BEGIN_ENCLOSURE> \xF0\x93\x90\xBC
+<EGYPTIAN_HIEROGLYPH_END_ENCLOSURE> \xF0\x93\x90\xBD
+<EGYPTIAN_HIEROGLYPH_BEGIN_WALLED_ENCLOSURE> \xF0\x93\x90\xBE
+<EGYPTIAN_HIEROGLYPH_END_WALLED_ENCLOSURE> \xF0\x93\x90\xBF
+<EGYPTIAN_HIEROGLYPH_MIRROR_HORIZONTALLY> \xF0\x93\x91\x80
+<EGYPTIAN_HIEROGLYPH_FULL_BLANK> \xF0\x93\x91\x81
+<EGYPTIAN_HIEROGLYPH_HALF_BLANK> \xF0\x93\x91\x82
+<EGYPTIAN_HIEROGLYPH_LOST_SIGN> \xF0\x93\x91\x83
+<EGYPTIAN_HIEROGLYPH_HALF_LOST_SIGN> \xF0\x93\x91\x84
+<EGYPTIAN_HIEROGLYPH_TALL_LOST_SIGN> \xF0\x93\x91\x85
+<EGYPTIAN_HIEROGLYPH_WIDE_LOST_SIGN> \xF0\x93\x91\x86
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_START> \xF0\x93\x91\x87
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_START> \xF0\x93\x91\x88
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_START> \xF0\x93\x91\x89
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_END> \xF0\x93\x91\x8A
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP> \xF0\x93\x91\x8B
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_START_AND_TOP_END> \xF0\x93\x91\x8C
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_START_AND_TOP> \xF0\x93\x91\x8D
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_END> \xF0\x93\x91\x8E
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_START_AND_BOTTOM_END> \xF0\x93\x91\x8F
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM> \xF0\x93\x91\x90
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_START_AND_BOTTOM> \xF0\x93\x91\x91
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_END> \xF0\x93\x91\x92
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_AND_END> \xF0\x93\x91\x93
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_AND_END> \xF0\x93\x91\x94
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED> \xF0\x93\x91\x95
<ANATOLIAN_HIEROGLYPH_A001> \xF0\x94\x90\x80
<ANATOLIAN_HIEROGLYPH_A002> \xF0\x94\x90\x81
<ANATOLIAN_HIEROGLYPH_A003> \xF0\x94\x90\x82
@@ -78713,9 +78852,11 @@ CHARMAP
<KATAKANA_LETTER_ARCHAIC_YI> \xF0\x9B\x84\xA0
<KATAKANA_LETTER_ARCHAIC_YE> \xF0\x9B\x84\xA1
<KATAKANA_LETTER_ARCHAIC_WU> \xF0\x9B\x84\xA2
+<HIRAGANA_LETTER_SMALL_KO> \xF0\x9B\x84\xB2
<HIRAGANA_LETTER_SMALL_WI> \xF0\x9B\x85\x90
<HIRAGANA_LETTER_SMALL_WE> \xF0\x9B\x85\x91
<HIRAGANA_LETTER_SMALL_WO> \xF0\x9B\x85\x92
+<KATAKANA_LETTER_SMALL_KO> \xF0\x9B\x85\x95
<KATAKANA_LETTER_SMALL_WI> \xF0\x9B\x85\xA4
<KATAKANA_LETTER_SMALL_WE> \xF0\x9B\x85\xA5
<KATAKANA_LETTER_SMALL_WO> \xF0\x9B\x85\xA6
@@ -79997,6 +80138,26 @@ CHARMAP
<COMBINING_GREEK_MUSICAL_TETRASEME> \xF0\x9D\x89\x83
<COMBINING_GREEK_MUSICAL_PENTASEME> \xF0\x9D\x89\x84
<GREEK_MUSICAL_LEIMMA> \xF0\x9D\x89\x85
+<KAKTOVIK_NUMERAL_ZERO> \xF0\x9D\x8B\x80
+<KAKTOVIK_NUMERAL_ONE> \xF0\x9D\x8B\x81
+<KAKTOVIK_NUMERAL_TWO> \xF0\x9D\x8B\x82
+<KAKTOVIK_NUMERAL_THREE> \xF0\x9D\x8B\x83
+<KAKTOVIK_NUMERAL_FOUR> \xF0\x9D\x8B\x84
+<KAKTOVIK_NUMERAL_FIVE> \xF0\x9D\x8B\x85
+<KAKTOVIK_NUMERAL_SIX> \xF0\x9D\x8B\x86
+<KAKTOVIK_NUMERAL_SEVEN> \xF0\x9D\x8B\x87
+<KAKTOVIK_NUMERAL_EIGHT> \xF0\x9D\x8B\x88
+<KAKTOVIK_NUMERAL_NINE> \xF0\x9D\x8B\x89
+<KAKTOVIK_NUMERAL_TEN> \xF0\x9D\x8B\x8A
+<KAKTOVIK_NUMERAL_ELEVEN> \xF0\x9D\x8B\x8B
+<KAKTOVIK_NUMERAL_TWELVE> \xF0\x9D\x8B\x8C
+<KAKTOVIK_NUMERAL_THIRTEEN> \xF0\x9D\x8B\x8D
+<KAKTOVIK_NUMERAL_FOURTEEN> \xF0\x9D\x8B\x8E
+<KAKTOVIK_NUMERAL_FIFTEEN> \xF0\x9D\x8B\x8F
+<KAKTOVIK_NUMERAL_SIXTEEN> \xF0\x9D\x8B\x90
+<KAKTOVIK_NUMERAL_SEVENTEEN> \xF0\x9D\x8B\x91
+<KAKTOVIK_NUMERAL_EIGHTEEN> \xF0\x9D\x8B\x92
+<KAKTOVIK_NUMERAL_NINETEEN> \xF0\x9D\x8B\x93
<MAYAN_NUMERAL_ZERO> \xF0\x9D\x8B\xA0
<MAYAN_NUMERAL_ONE> \xF0\x9D\x8B\xA1
<MAYAN_NUMERAL_TWO> \xF0\x9D\x8B\xA2
@@ -81828,6 +81989,12 @@ CHARMAP
<LATIN_SMALL_LETTER_TESH_DIGRAPH_WITH_RETROFLEX_HOOK> \xF0\x9D\xBC\x9C
<LATIN_SMALL_LETTER_C_WITH_RETROFLEX_HOOK> \xF0\x9D\xBC\x9D
<LATIN_SMALL_LETTER_S_WITH_CURL> \xF0\x9D\xBC\x9E
+<LATIN_SMALL_LETTER_D_WITH_MID-HEIGHT_LEFT_HOOK> \xF0\x9D\xBC\xA5
+<LATIN_SMALL_LETTER_L_WITH_MID-HEIGHT_LEFT_HOOK> \xF0\x9D\xBC\xA6
+<LATIN_SMALL_LETTER_N_WITH_MID-HEIGHT_LEFT_HOOK> \xF0\x9D\xBC\xA7
+<LATIN_SMALL_LETTER_R_WITH_MID-HEIGHT_LEFT_HOOK> \xF0\x9D\xBC\xA8
+<LATIN_SMALL_LETTER_S_WITH_MID-HEIGHT_LEFT_HOOK> \xF0\x9D\xBC\xA9
+<LATIN_SMALL_LETTER_T_WITH_MID-HEIGHT_LEFT_HOOK> \xF0\x9D\xBC\xAA
<COMBINING_GLAGOLITIC_LETTER_AZU> \xF0\x9E\x80\x80
<COMBINING_GLAGOLITIC_LETTER_BUKY> \xF0\x9E\x80\x81
<COMBINING_GLAGOLITIC_LETTER_VEDE> \xF0\x9E\x80\x82
@@ -81866,6 +82033,69 @@ CHARMAP
<COMBINING_GLAGOLITIC_LETTER_BIG_YUS> \xF0\x9E\x80\xA8
<COMBINING_GLAGOLITIC_LETTER_IOTATED_BIG_YUS> \xF0\x9E\x80\xA9
<COMBINING_GLAGOLITIC_LETTER_FITA> \xF0\x9E\x80\xAA
+<MODIFIER_LETTER_CYRILLIC_SMALL_A> \xF0\x9E\x80\xB0
+<MODIFIER_LETTER_CYRILLIC_SMALL_BE> \xF0\x9E\x80\xB1
+<MODIFIER_LETTER_CYRILLIC_SMALL_VE> \xF0\x9E\x80\xB2
+<MODIFIER_LETTER_CYRILLIC_SMALL_GHE> \xF0\x9E\x80\xB3
+<MODIFIER_LETTER_CYRILLIC_SMALL_DE> \xF0\x9E\x80\xB4
+<MODIFIER_LETTER_CYRILLIC_SMALL_IE> \xF0\x9E\x80\xB5
+<MODIFIER_LETTER_CYRILLIC_SMALL_ZHE> \xF0\x9E\x80\xB6
+<MODIFIER_LETTER_CYRILLIC_SMALL_ZE> \xF0\x9E\x80\xB7
+<MODIFIER_LETTER_CYRILLIC_SMALL_I> \xF0\x9E\x80\xB8
+<MODIFIER_LETTER_CYRILLIC_SMALL_KA> \xF0\x9E\x80\xB9
+<MODIFIER_LETTER_CYRILLIC_SMALL_EL> \xF0\x9E\x80\xBA
+<MODIFIER_LETTER_CYRILLIC_SMALL_EM> \xF0\x9E\x80\xBB
+<MODIFIER_LETTER_CYRILLIC_SMALL_O> \xF0\x9E\x80\xBC
+<MODIFIER_LETTER_CYRILLIC_SMALL_PE> \xF0\x9E\x80\xBD
+<MODIFIER_LETTER_CYRILLIC_SMALL_ER> \xF0\x9E\x80\xBE
+<MODIFIER_LETTER_CYRILLIC_SMALL_ES> \xF0\x9E\x80\xBF
+<MODIFIER_LETTER_CYRILLIC_SMALL_TE> \xF0\x9E\x81\x80
+<MODIFIER_LETTER_CYRILLIC_SMALL_U> \xF0\x9E\x81\x81
+<MODIFIER_LETTER_CYRILLIC_SMALL_EF> \xF0\x9E\x81\x82
+<MODIFIER_LETTER_CYRILLIC_SMALL_HA> \xF0\x9E\x81\x83
+<MODIFIER_LETTER_CYRILLIC_SMALL_TSE> \xF0\x9E\x81\x84
+<MODIFIER_LETTER_CYRILLIC_SMALL_CHE> \xF0\x9E\x81\x85
+<MODIFIER_LETTER_CYRILLIC_SMALL_SHA> \xF0\x9E\x81\x86
+<MODIFIER_LETTER_CYRILLIC_SMALL_YERU> \xF0\x9E\x81\x87
+<MODIFIER_LETTER_CYRILLIC_SMALL_E> \xF0\x9E\x81\x88
+<MODIFIER_LETTER_CYRILLIC_SMALL_YU> \xF0\x9E\x81\x89
+<MODIFIER_LETTER_CYRILLIC_SMALL_DZZE> \xF0\x9E\x81\x8A
+<MODIFIER_LETTER_CYRILLIC_SMALL_SCHWA> \xF0\x9E\x81\x8B
+<MODIFIER_LETTER_CYRILLIC_SMALL_BYELORUSSIAN-UKRAINIAN_I> \xF0\x9E\x81\x8C
+<MODIFIER_LETTER_CYRILLIC_SMALL_JE> \xF0\x9E\x81\x8D
+<MODIFIER_LETTER_CYRILLIC_SMALL_BARRED_O> \xF0\x9E\x81\x8E
+<MODIFIER_LETTER_CYRILLIC_SMALL_STRAIGHT_U> \xF0\x9E\x81\x8F
+<MODIFIER_LETTER_CYRILLIC_SMALL_PALOCHKA> \xF0\x9E\x81\x90
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_A> \xF0\x9E\x81\x91
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_BE> \xF0\x9E\x81\x92
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_VE> \xF0\x9E\x81\x93
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_GHE> \xF0\x9E\x81\x94
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_DE> \xF0\x9E\x81\x95
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_IE> \xF0\x9E\x81\x96
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_ZHE> \xF0\x9E\x81\x97
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_ZE> \xF0\x9E\x81\x98
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_I> \xF0\x9E\x81\x99
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_KA> \xF0\x9E\x81\x9A
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_EL> \xF0\x9E\x81\x9B
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_O> \xF0\x9E\x81\x9C
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_PE> \xF0\x9E\x81\x9D
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_ES> \xF0\x9E\x81\x9E
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_U> \xF0\x9E\x81\x9F
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_EF> \xF0\x9E\x81\xA0
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_HA> \xF0\x9E\x81\xA1
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_TSE> \xF0\x9E\x81\xA2
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_CHE> \xF0\x9E\x81\xA3
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_SHA> \xF0\x9E\x81\xA4
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_HARD_SIGN> \xF0\x9E\x81\xA5
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_YERU> \xF0\x9E\x81\xA6
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_GHE_WITH_UPTURN> \xF0\x9E\x81\xA7
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_BYELORUSSIAN-UKRAINIAN_I> \xF0\x9E\x81\xA8
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_DZE> \xF0\x9E\x81\xA9
+<CYRILLIC_SUBSCRIPT_SMALL_LETTER_DZHE> \xF0\x9E\x81\xAA
+<MODIFIER_LETTER_CYRILLIC_SMALL_ES_WITH_DESCENDER> \xF0\x9E\x81\xAB
+<MODIFIER_LETTER_CYRILLIC_SMALL_YERU_WITH_BACK_YER> \xF0\x9E\x81\xAC
+<MODIFIER_LETTER_CYRILLIC_SMALL_STRAIGHT_U_WITH_STROKE> \xF0\x9E\x81\xAD
+<COMBINING_CYRILLIC_SMALL_LETTER_BYELORUSSIAN-UKRAINIAN_I> \xF0\x9E\x82\x8F
<NYIAKENG_PUACHUE_HMONG_LETTER_MA> \xF0\x9E\x84\x80
<NYIAKENG_PUACHUE_HMONG_LETTER_TSA> \xF0\x9E\x84\x81
<NYIAKENG_PUACHUE_HMONG_LETTER_NTA> \xF0\x9E\x84\x82
@@ -82027,6 +82257,48 @@ CHARMAP
<WANCHO_DIGIT_EIGHT> \xF0\x9E\x8B\xB8
<WANCHO_DIGIT_NINE> \xF0\x9E\x8B\xB9
<WANCHO_NGUN_SIGN> \xF0\x9E\x8B\xBF
+<NAG_MUNDARI_LETTER_O> \xF0\x9E\x93\x90
+<NAG_MUNDARI_LETTER_OP> \xF0\x9E\x93\x91
+<NAG_MUNDARI_LETTER_OL> \xF0\x9E\x93\x92
+<NAG_MUNDARI_LETTER_OY> \xF0\x9E\x93\x93
+<NAG_MUNDARI_LETTER_ONG> \xF0\x9E\x93\x94
+<NAG_MUNDARI_LETTER_A> \xF0\x9E\x93\x95
+<NAG_MUNDARI_LETTER_AJ> \xF0\x9E\x93\x96
+<NAG_MUNDARI_LETTER_AB> \xF0\x9E\x93\x97
+<NAG_MUNDARI_LETTER_ANY> \xF0\x9E\x93\x98
+<NAG_MUNDARI_LETTER_AH> \xF0\x9E\x93\x99
+<NAG_MUNDARI_LETTER_I> \xF0\x9E\x93\x9A
+<NAG_MUNDARI_LETTER_IS> \xF0\x9E\x93\x9B
+<NAG_MUNDARI_LETTER_IDD> \xF0\x9E\x93\x9C
+<NAG_MUNDARI_LETTER_IT> \xF0\x9E\x93\x9D
+<NAG_MUNDARI_LETTER_IH> \xF0\x9E\x93\x9E
+<NAG_MUNDARI_LETTER_U> \xF0\x9E\x93\x9F
+<NAG_MUNDARI_LETTER_UC> \xF0\x9E\x93\xA0
+<NAG_MUNDARI_LETTER_UD> \xF0\x9E\x93\xA1
+<NAG_MUNDARI_LETTER_UK> \xF0\x9E\x93\xA2
+<NAG_MUNDARI_LETTER_UR> \xF0\x9E\x93\xA3
+<NAG_MUNDARI_LETTER_E> \xF0\x9E\x93\xA4
+<NAG_MUNDARI_LETTER_ENN> \xF0\x9E\x93\xA5
+<NAG_MUNDARI_LETTER_EG> \xF0\x9E\x93\xA6
+<NAG_MUNDARI_LETTER_EM> \xF0\x9E\x93\xA7
+<NAG_MUNDARI_LETTER_EN> \xF0\x9E\x93\xA8
+<NAG_MUNDARI_LETTER_ETT> \xF0\x9E\x93\xA9
+<NAG_MUNDARI_LETTER_ELL> \xF0\x9E\x93\xAA
+<NAG_MUNDARI_SIGN_OJOD> \xF0\x9E\x93\xAB
+<NAG_MUNDARI_SIGN_MUHOR> \xF0\x9E\x93\xAC
+<NAG_MUNDARI_SIGN_TOYOR> \xF0\x9E\x93\xAD
+<NAG_MUNDARI_SIGN_IKIR> \xF0\x9E\x93\xAE
+<NAG_MUNDARI_SIGN_SUTUH> \xF0\x9E\x93\xAF
+<NAG_MUNDARI_DIGIT_ZERO> \xF0\x9E\x93\xB0
+<NAG_MUNDARI_DIGIT_ONE> \xF0\x9E\x93\xB1
+<NAG_MUNDARI_DIGIT_TWO> \xF0\x9E\x93\xB2
+<NAG_MUNDARI_DIGIT_THREE> \xF0\x9E\x93\xB3
+<NAG_MUNDARI_DIGIT_FOUR> \xF0\x9E\x93\xB4
+<NAG_MUNDARI_DIGIT_FIVE> \xF0\x9E\x93\xB5
+<NAG_MUNDARI_DIGIT_SIX> \xF0\x9E\x93\xB6
+<NAG_MUNDARI_DIGIT_SEVEN> \xF0\x9E\x93\xB7
+<NAG_MUNDARI_DIGIT_EIGHT> \xF0\x9E\x93\xB8
+<NAG_MUNDARI_DIGIT_NINE> \xF0\x9E\x93\xB9
<ETHIOPIC_SYLLABLE_HHYA> \xF0\x9E\x9F\xA0
<ETHIOPIC_SYLLABLE_HHYU> \xF0\x9E\x9F\xA1
<ETHIOPIC_SYLLABLE_HHYI> \xF0\x9E\x9F\xA2
@@ -84102,6 +84374,7 @@ CHARMAP
<HINDU_TEMPLE> \xF0\x9F\x9B\x95
<HUT> \xF0\x9F\x9B\x96
<ELEVATOR> \xF0\x9F\x9B\x97
+<WIRELESS> \xF0\x9F\x9B\x9C
<PLAYGROUND_SLIDE> \xF0\x9F\x9B\x9D
<WHEEL> \xF0\x9F\x9B\x9E
<RING_BUOY> \xF0\x9F\x9B\x9F
@@ -84247,6 +84520,14 @@ CHARMAP
<ALCHEMICAL_SYMBOL_FOR_MONTH> \xF0\x9F\x9D\xB1
<ALCHEMICAL_SYMBOL_FOR_HALF_DRAM> \xF0\x9F\x9D\xB2
<ALCHEMICAL_SYMBOL_FOR_HALF_OUNCE> \xF0\x9F\x9D\xB3
+<LOT_OF_FORTUNE> \xF0\x9F\x9D\xB4
+<OCCULTATION> \xF0\x9F\x9D\xB5
+<LUNAR_ECLIPSE> \xF0\x9F\x9D\xB6
+<HAUMEA> \xF0\x9F\x9D\xBB
+<MAKEMAKE> \xF0\x9F\x9D\xBC
+<GONGGONG> \xF0\x9F\x9D\xBD
+<QUAOAR> \xF0\x9F\x9D\xBE
+<ORCUS> \xF0\x9F\x9D\xBF
<BLACK_LEFT-POINTING_ISOSCELES_RIGHT_TRIANGLE> \xF0\x9F\x9E\x80
<BLACK_UP-POINTING_ISOSCELES_RIGHT_TRIANGLE> \xF0\x9F\x9E\x81
<BLACK_RIGHT-POINTING_ISOSCELES_RIGHT_TRIANGLE> \xF0\x9F\x9E\x82
@@ -84336,6 +84617,7 @@ CHARMAP
<NEGATIVE_CIRCLED_TRIANGLE> \xF0\x9F\x9F\x96
<CIRCLED_SQUARE> \xF0\x9F\x9F\x97
<NEGATIVE_CIRCLED_SQUARE> \xF0\x9F\x9F\x98
+<NINE_POINTED_WHITE_STAR> \xF0\x9F\x9F\x99
<LARGE_ORANGE_CIRCLE> \xF0\x9F\x9F\xA0
<LARGE_YELLOW_CIRCLE> \xF0\x9F\x9F\xA1
<LARGE_GREEN_CIRCLE> \xF0\x9F\x9F\xA2
@@ -84858,6 +85140,9 @@ CHARMAP
<BRIEFS> \xF0\x9F\xA9\xB2
<SHORTS> \xF0\x9F\xA9\xB3
<THONG_SANDAL> \xF0\x9F\xA9\xB4
+<LIGHT_BLUE_HEART> \xF0\x9F\xA9\xB5
+<GREY_HEART> \xF0\x9F\xA9\xB6
+<PINK_HEART> \xF0\x9F\xA9\xB7
<DROP_OF_BLOOD> \xF0\x9F\xA9\xB8
<ADHESIVE_BANDAGE> \xF0\x9F\xA9\xB9
<STETHOSCOPE> \xF0\x9F\xA9\xBA
@@ -84870,6 +85155,8 @@ CHARMAP
<MAGIC_WAND> \xF0\x9F\xAA\x84
<PINATA> \xF0\x9F\xAA\x85
<NESTING_DOLLS> \xF0\x9F\xAA\x86
+<MARACAS> \xF0\x9F\xAA\x87
+<FLUTE> \xF0\x9F\xAA\x88
<RINGED_PLANET> \xF0\x9F\xAA\x90
<CHAIR> \xF0\x9F\xAA\x91
<RAZOR> \xF0\x9F\xAA\x92
@@ -84899,6 +85186,9 @@ CHARMAP
<IDENTIFICATION_CARD> \xF0\x9F\xAA\xAA
<LOW_BATTERY> \xF0\x9F\xAA\xAB
<HAMSA> \xF0\x9F\xAA\xAC
+<FOLDING_HAND_FAN> \xF0\x9F\xAA\xAD
+<HAIR_PICK> \xF0\x9F\xAA\xAE
+<KHANDA> \xF0\x9F\xAA\xAF
<FLY> \xF0\x9F\xAA\xB0
<WORM> \xF0\x9F\xAA\xB1
<BEETLE> \xF0\x9F\xAA\xB2
@@ -84910,12 +85200,18 @@ CHARMAP
<CORAL> \xF0\x9F\xAA\xB8
<EMPTY_NEST> \xF0\x9F\xAA\xB9
<NEST_WITH_EGGS> \xF0\x9F\xAA\xBA
+<HYACINTH> \xF0\x9F\xAA\xBB
+<JELLYFISH> \xF0\x9F\xAA\xBC
+<WING> \xF0\x9F\xAA\xBD
+<GOOSE> \xF0\x9F\xAA\xBF
<ANATOMICAL_HEART> \xF0\x9F\xAB\x80
<LUNGS> \xF0\x9F\xAB\x81
<PEOPLE_HUGGING> \xF0\x9F\xAB\x82
<PREGNANT_MAN> \xF0\x9F\xAB\x83
<PREGNANT_PERSON> \xF0\x9F\xAB\x84
<PERSON_WITH_CROWN> \xF0\x9F\xAB\x85
+<MOOSE> \xF0\x9F\xAB\x8E
+<DONKEY> \xF0\x9F\xAB\x8F
<BLUEBERRIES> \xF0\x9F\xAB\x90
<BELL_PEPPER> \xF0\x9F\xAB\x91
<OLIVE> \xF0\x9F\xAB\x92
@@ -84926,6 +85222,8 @@ CHARMAP
<POURING_LIQUID> \xF0\x9F\xAB\x97
<BEANS> \xF0\x9F\xAB\x98
<JAR> \xF0\x9F\xAB\x99
+<GINGER_ROOT> \xF0\x9F\xAB\x9A
+<PEA_POD> \xF0\x9F\xAB\x9B
<MELTING_FACE> \xF0\x9F\xAB\xA0
<SALUTING_FACE> \xF0\x9F\xAB\xA1
<FACE_WITH_OPEN_EYES_AND_HAND_OVER_MOUTH> \xF0\x9F\xAB\xA2
@@ -84934,6 +85232,7 @@ CHARMAP
<DOTTED_LINE_FACE> \xF0\x9F\xAB\xA5
<BITING_LIP> \xF0\x9F\xAB\xA6
<BUBBLES> \xF0\x9F\xAB\xA7
+<SHAKING_FACE> \xF0\x9F\xAB\xA8
<HAND_WITH_INDEX_FINGER_AND_THUMB_CROSSED> \xF0\x9F\xAB\xB0
<RIGHTWARDS_HAND> \xF0\x9F\xAB\xB1
<LEFTWARDS_HAND> \xF0\x9F\xAB\xB2
@@ -84941,6 +85240,8 @@ CHARMAP
<PALM_UP_HAND> \xF0\x9F\xAB\xB4
<INDEX_POINTING_AT_THE_VIEWER> \xF0\x9F\xAB\xB5
<HEART_HANDS> \xF0\x9F\xAB\xB6
+<LEFTWARDS_PUSHING_HAND> \xF0\x9F\xAB\xB7
+<RIGHTWARDS_PUSHING_HAND> \xF0\x9F\xAB\xB8
<BLOCK_SEXTANT-1> \xF0\x9F\xAC\x80
<BLOCK_SEXTANT-2> \xF0\x9F\xAC\x81
<BLOCK_SEXTANT-12> \xF0\x9F\xAC\x82
@@ -132026,6 +132327,7 @@ CHARMAP
<CJK_UNIFIED_IDEOGRAPH-2B736> \xF0\xAB\x9C\xB6
<CJK_UNIFIED_IDEOGRAPH-2B737> \xF0\xAB\x9C\xB7
<CJK_UNIFIED_IDEOGRAPH-2B738> \xF0\xAB\x9C\xB8
+<CJK_UNIFIED_IDEOGRAPH-2B739> \xF0\xAB\x9C\xB9
<CJK_UNIFIED_IDEOGRAPH-2B740> \xF0\xAB\x9D\x80
<CJK_UNIFIED_IDEOGRAPH-2B741> \xF0\xAB\x9D\x81
<CJK_UNIFIED_IDEOGRAPH-2B742> \xF0\xAB\x9D\x82
@@ -145483,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
@@ -150964,6 +151888,4198 @@ CHARMAP
<CJK_UNIFIED_IDEOGRAPH-31348> \xF0\xB1\x8D\x88
<CJK_UNIFIED_IDEOGRAPH-31349> \xF0\xB1\x8D\x89
<CJK_UNIFIED_IDEOGRAPH-3134A> \xF0\xB1\x8D\x8A
+<CJK_UNIFIED_IDEOGRAPH-31350> \xF0\xB1\x8D\x90
+<CJK_UNIFIED_IDEOGRAPH-31351> \xF0\xB1\x8D\x91
+<CJK_UNIFIED_IDEOGRAPH-31352> \xF0\xB1\x8D\x92
+<CJK_UNIFIED_IDEOGRAPH-31353> \xF0\xB1\x8D\x93
+<CJK_UNIFIED_IDEOGRAPH-31354> \xF0\xB1\x8D\x94
+<CJK_UNIFIED_IDEOGRAPH-31355> \xF0\xB1\x8D\x95
+<CJK_UNIFIED_IDEOGRAPH-31356> \xF0\xB1\x8D\x96
+<CJK_UNIFIED_IDEOGRAPH-31357> \xF0\xB1\x8D\x97
+<CJK_UNIFIED_IDEOGRAPH-31358> \xF0\xB1\x8D\x98
+<CJK_UNIFIED_IDEOGRAPH-31359> \xF0\xB1\x8D\x99
+<CJK_UNIFIED_IDEOGRAPH-3135A> \xF0\xB1\x8D\x9A
+<CJK_UNIFIED_IDEOGRAPH-3135B> \xF0\xB1\x8D\x9B
+<CJK_UNIFIED_IDEOGRAPH-3135C> \xF0\xB1\x8D\x9C
+<CJK_UNIFIED_IDEOGRAPH-3135D> \xF0\xB1\x8D\x9D
+<CJK_UNIFIED_IDEOGRAPH-3135E> \xF0\xB1\x8D\x9E
+<CJK_UNIFIED_IDEOGRAPH-3135F> \xF0\xB1\x8D\x9F
+<CJK_UNIFIED_IDEOGRAPH-31360> \xF0\xB1\x8D\xA0
+<CJK_UNIFIED_IDEOGRAPH-31361> \xF0\xB1\x8D\xA1
+<CJK_UNIFIED_IDEOGRAPH-31362> \xF0\xB1\x8D\xA2
+<CJK_UNIFIED_IDEOGRAPH-31363> \xF0\xB1\x8D\xA3
+<CJK_UNIFIED_IDEOGRAPH-31364> \xF0\xB1\x8D\xA4
+<CJK_UNIFIED_IDEOGRAPH-31365> \xF0\xB1\x8D\xA5
+<CJK_UNIFIED_IDEOGRAPH-31366> \xF0\xB1\x8D\xA6
+<CJK_UNIFIED_IDEOGRAPH-31367> \xF0\xB1\x8D\xA7
+<CJK_UNIFIED_IDEOGRAPH-31368> \xF0\xB1\x8D\xA8
+<CJK_UNIFIED_IDEOGRAPH-31369> \xF0\xB1\x8D\xA9
+<CJK_UNIFIED_IDEOGRAPH-3136A> \xF0\xB1\x8D\xAA
+<CJK_UNIFIED_IDEOGRAPH-3136B> \xF0\xB1\x8D\xAB
+<CJK_UNIFIED_IDEOGRAPH-3136C> \xF0\xB1\x8D\xAC
+<CJK_UNIFIED_IDEOGRAPH-3136D> \xF0\xB1\x8D\xAD
+<CJK_UNIFIED_IDEOGRAPH-3136E> \xF0\xB1\x8D\xAE
+<CJK_UNIFIED_IDEOGRAPH-3136F> \xF0\xB1\x8D\xAF
+<CJK_UNIFIED_IDEOGRAPH-31370> \xF0\xB1\x8D\xB0
+<CJK_UNIFIED_IDEOGRAPH-31371> \xF0\xB1\x8D\xB1
+<CJK_UNIFIED_IDEOGRAPH-31372> \xF0\xB1\x8D\xB2
+<CJK_UNIFIED_IDEOGRAPH-31373> \xF0\xB1\x8D\xB3
+<CJK_UNIFIED_IDEOGRAPH-31374> \xF0\xB1\x8D\xB4
+<CJK_UNIFIED_IDEOGRAPH-31375> \xF0\xB1\x8D\xB5
+<CJK_UNIFIED_IDEOGRAPH-31376> \xF0\xB1\x8D\xB6
+<CJK_UNIFIED_IDEOGRAPH-31377> \xF0\xB1\x8D\xB7
+<CJK_UNIFIED_IDEOGRAPH-31378> \xF0\xB1\x8D\xB8
+<CJK_UNIFIED_IDEOGRAPH-31379> \xF0\xB1\x8D\xB9
+<CJK_UNIFIED_IDEOGRAPH-3137A> \xF0\xB1\x8D\xBA
+<CJK_UNIFIED_IDEOGRAPH-3137B> \xF0\xB1\x8D\xBB
+<CJK_UNIFIED_IDEOGRAPH-3137C> \xF0\xB1\x8D\xBC
+<CJK_UNIFIED_IDEOGRAPH-3137D> \xF0\xB1\x8D\xBD
+<CJK_UNIFIED_IDEOGRAPH-3137E> \xF0\xB1\x8D\xBE
+<CJK_UNIFIED_IDEOGRAPH-3137F> \xF0\xB1\x8D\xBF
+<CJK_UNIFIED_IDEOGRAPH-31380> \xF0\xB1\x8E\x80
+<CJK_UNIFIED_IDEOGRAPH-31381> \xF0\xB1\x8E\x81
+<CJK_UNIFIED_IDEOGRAPH-31382> \xF0\xB1\x8E\x82
+<CJK_UNIFIED_IDEOGRAPH-31383> \xF0\xB1\x8E\x83
+<CJK_UNIFIED_IDEOGRAPH-31384> \xF0\xB1\x8E\x84
+<CJK_UNIFIED_IDEOGRAPH-31385> \xF0\xB1\x8E\x85
+<CJK_UNIFIED_IDEOGRAPH-31386> \xF0\xB1\x8E\x86
+<CJK_UNIFIED_IDEOGRAPH-31387> \xF0\xB1\x8E\x87
+<CJK_UNIFIED_IDEOGRAPH-31388> \xF0\xB1\x8E\x88
+<CJK_UNIFIED_IDEOGRAPH-31389> \xF0\xB1\x8E\x89
+<CJK_UNIFIED_IDEOGRAPH-3138A> \xF0\xB1\x8E\x8A
+<CJK_UNIFIED_IDEOGRAPH-3138B> \xF0\xB1\x8E\x8B
+<CJK_UNIFIED_IDEOGRAPH-3138C> \xF0\xB1\x8E\x8C
+<CJK_UNIFIED_IDEOGRAPH-3138D> \xF0\xB1\x8E\x8D
+<CJK_UNIFIED_IDEOGRAPH-3138E> \xF0\xB1\x8E\x8E
+<CJK_UNIFIED_IDEOGRAPH-3138F> \xF0\xB1\x8E\x8F
+<CJK_UNIFIED_IDEOGRAPH-31390> \xF0\xB1\x8E\x90
+<CJK_UNIFIED_IDEOGRAPH-31391> \xF0\xB1\x8E\x91
+<CJK_UNIFIED_IDEOGRAPH-31392> \xF0\xB1\x8E\x92
+<CJK_UNIFIED_IDEOGRAPH-31393> \xF0\xB1\x8E\x93
+<CJK_UNIFIED_IDEOGRAPH-31394> \xF0\xB1\x8E\x94
+<CJK_UNIFIED_IDEOGRAPH-31395> \xF0\xB1\x8E\x95
+<CJK_UNIFIED_IDEOGRAPH-31396> \xF0\xB1\x8E\x96
+<CJK_UNIFIED_IDEOGRAPH-31397> \xF0\xB1\x8E\x97
+<CJK_UNIFIED_IDEOGRAPH-31398> \xF0\xB1\x8E\x98
+<CJK_UNIFIED_IDEOGRAPH-31399> \xF0\xB1\x8E\x99
+<CJK_UNIFIED_IDEOGRAPH-3139A> \xF0\xB1\x8E\x9A
+<CJK_UNIFIED_IDEOGRAPH-3139B> \xF0\xB1\x8E\x9B
+<CJK_UNIFIED_IDEOGRAPH-3139C> \xF0\xB1\x8E\x9C
+<CJK_UNIFIED_IDEOGRAPH-3139D> \xF0\xB1\x8E\x9D
+<CJK_UNIFIED_IDEOGRAPH-3139E> \xF0\xB1\x8E\x9E
+<CJK_UNIFIED_IDEOGRAPH-3139F> \xF0\xB1\x8E\x9F
+<CJK_UNIFIED_IDEOGRAPH-313A0> \xF0\xB1\x8E\xA0
+<CJK_UNIFIED_IDEOGRAPH-313A1> \xF0\xB1\x8E\xA1
+<CJK_UNIFIED_IDEOGRAPH-313A2> \xF0\xB1\x8E\xA2
+<CJK_UNIFIED_IDEOGRAPH-313A3> \xF0\xB1\x8E\xA3
+<CJK_UNIFIED_IDEOGRAPH-313A4> \xF0\xB1\x8E\xA4
+<CJK_UNIFIED_IDEOGRAPH-313A5> \xF0\xB1\x8E\xA5
+<CJK_UNIFIED_IDEOGRAPH-313A6> \xF0\xB1\x8E\xA6
+<CJK_UNIFIED_IDEOGRAPH-313A7> \xF0\xB1\x8E\xA7
+<CJK_UNIFIED_IDEOGRAPH-313A8> \xF0\xB1\x8E\xA8
+<CJK_UNIFIED_IDEOGRAPH-313A9> \xF0\xB1\x8E\xA9
+<CJK_UNIFIED_IDEOGRAPH-313AA> \xF0\xB1\x8E\xAA
+<CJK_UNIFIED_IDEOGRAPH-313AB> \xF0\xB1\x8E\xAB
+<CJK_UNIFIED_IDEOGRAPH-313AC> \xF0\xB1\x8E\xAC
+<CJK_UNIFIED_IDEOGRAPH-313AD> \xF0\xB1\x8E\xAD
+<CJK_UNIFIED_IDEOGRAPH-313AE> \xF0\xB1\x8E\xAE
+<CJK_UNIFIED_IDEOGRAPH-313AF> \xF0\xB1\x8E\xAF
+<CJK_UNIFIED_IDEOGRAPH-313B0> \xF0\xB1\x8E\xB0
+<CJK_UNIFIED_IDEOGRAPH-313B1> \xF0\xB1\x8E\xB1
+<CJK_UNIFIED_IDEOGRAPH-313B2> \xF0\xB1\x8E\xB2
+<CJK_UNIFIED_IDEOGRAPH-313B3> \xF0\xB1\x8E\xB3
+<CJK_UNIFIED_IDEOGRAPH-313B4> \xF0\xB1\x8E\xB4
+<CJK_UNIFIED_IDEOGRAPH-313B5> \xF0\xB1\x8E\xB5
+<CJK_UNIFIED_IDEOGRAPH-313B6> \xF0\xB1\x8E\xB6
+<CJK_UNIFIED_IDEOGRAPH-313B7> \xF0\xB1\x8E\xB7
+<CJK_UNIFIED_IDEOGRAPH-313B8> \xF0\xB1\x8E\xB8
+<CJK_UNIFIED_IDEOGRAPH-313B9> \xF0\xB1\x8E\xB9
+<CJK_UNIFIED_IDEOGRAPH-313BA> \xF0\xB1\x8E\xBA
+<CJK_UNIFIED_IDEOGRAPH-313BB> \xF0\xB1\x8E\xBB
+<CJK_UNIFIED_IDEOGRAPH-313BC> \xF0\xB1\x8E\xBC
+<CJK_UNIFIED_IDEOGRAPH-313BD> \xF0\xB1\x8E\xBD
+<CJK_UNIFIED_IDEOGRAPH-313BE> \xF0\xB1\x8E\xBE
+<CJK_UNIFIED_IDEOGRAPH-313BF> \xF0\xB1\x8E\xBF
+<CJK_UNIFIED_IDEOGRAPH-313C0> \xF0\xB1\x8F\x80
+<CJK_UNIFIED_IDEOGRAPH-313C1> \xF0\xB1\x8F\x81
+<CJK_UNIFIED_IDEOGRAPH-313C2> \xF0\xB1\x8F\x82
+<CJK_UNIFIED_IDEOGRAPH-313C3> \xF0\xB1\x8F\x83
+<CJK_UNIFIED_IDEOGRAPH-313C4> \xF0\xB1\x8F\x84
+<CJK_UNIFIED_IDEOGRAPH-313C5> \xF0\xB1\x8F\x85
+<CJK_UNIFIED_IDEOGRAPH-313C6> \xF0\xB1\x8F\x86
+<CJK_UNIFIED_IDEOGRAPH-313C7> \xF0\xB1\x8F\x87
+<CJK_UNIFIED_IDEOGRAPH-313C8> \xF0\xB1\x8F\x88
+<CJK_UNIFIED_IDEOGRAPH-313C9> \xF0\xB1\x8F\x89
+<CJK_UNIFIED_IDEOGRAPH-313CA> \xF0\xB1\x8F\x8A
+<CJK_UNIFIED_IDEOGRAPH-313CB> \xF0\xB1\x8F\x8B
+<CJK_UNIFIED_IDEOGRAPH-313CC> \xF0\xB1\x8F\x8C
+<CJK_UNIFIED_IDEOGRAPH-313CD> \xF0\xB1\x8F\x8D
+<CJK_UNIFIED_IDEOGRAPH-313CE> \xF0\xB1\x8F\x8E
+<CJK_UNIFIED_IDEOGRAPH-313CF> \xF0\xB1\x8F\x8F
+<CJK_UNIFIED_IDEOGRAPH-313D0> \xF0\xB1\x8F\x90
+<CJK_UNIFIED_IDEOGRAPH-313D1> \xF0\xB1\x8F\x91
+<CJK_UNIFIED_IDEOGRAPH-313D2> \xF0\xB1\x8F\x92
+<CJK_UNIFIED_IDEOGRAPH-313D3> \xF0\xB1\x8F\x93
+<CJK_UNIFIED_IDEOGRAPH-313D4> \xF0\xB1\x8F\x94
+<CJK_UNIFIED_IDEOGRAPH-313D5> \xF0\xB1\x8F\x95
+<CJK_UNIFIED_IDEOGRAPH-313D6> \xF0\xB1\x8F\x96
+<CJK_UNIFIED_IDEOGRAPH-313D7> \xF0\xB1\x8F\x97
+<CJK_UNIFIED_IDEOGRAPH-313D8> \xF0\xB1\x8F\x98
+<CJK_UNIFIED_IDEOGRAPH-313D9> \xF0\xB1\x8F\x99
+<CJK_UNIFIED_IDEOGRAPH-313DA> \xF0\xB1\x8F\x9A
+<CJK_UNIFIED_IDEOGRAPH-313DB> \xF0\xB1\x8F\x9B
+<CJK_UNIFIED_IDEOGRAPH-313DC> \xF0\xB1\x8F\x9C
+<CJK_UNIFIED_IDEOGRAPH-313DD> \xF0\xB1\x8F\x9D
+<CJK_UNIFIED_IDEOGRAPH-313DE> \xF0\xB1\x8F\x9E
+<CJK_UNIFIED_IDEOGRAPH-313DF> \xF0\xB1\x8F\x9F
+<CJK_UNIFIED_IDEOGRAPH-313E0> \xF0\xB1\x8F\xA0
+<CJK_UNIFIED_IDEOGRAPH-313E1> \xF0\xB1\x8F\xA1
+<CJK_UNIFIED_IDEOGRAPH-313E2> \xF0\xB1\x8F\xA2
+<CJK_UNIFIED_IDEOGRAPH-313E3> \xF0\xB1\x8F\xA3
+<CJK_UNIFIED_IDEOGRAPH-313E4> \xF0\xB1\x8F\xA4
+<CJK_UNIFIED_IDEOGRAPH-313E5> \xF0\xB1\x8F\xA5
+<CJK_UNIFIED_IDEOGRAPH-313E6> \xF0\xB1\x8F\xA6
+<CJK_UNIFIED_IDEOGRAPH-313E7> \xF0\xB1\x8F\xA7
+<CJK_UNIFIED_IDEOGRAPH-313E8> \xF0\xB1\x8F\xA8
+<CJK_UNIFIED_IDEOGRAPH-313E9> \xF0\xB1\x8F\xA9
+<CJK_UNIFIED_IDEOGRAPH-313EA> \xF0\xB1\x8F\xAA
+<CJK_UNIFIED_IDEOGRAPH-313EB> \xF0\xB1\x8F\xAB
+<CJK_UNIFIED_IDEOGRAPH-313EC> \xF0\xB1\x8F\xAC
+<CJK_UNIFIED_IDEOGRAPH-313ED> \xF0\xB1\x8F\xAD
+<CJK_UNIFIED_IDEOGRAPH-313EE> \xF0\xB1\x8F\xAE
+<CJK_UNIFIED_IDEOGRAPH-313EF> \xF0\xB1\x8F\xAF
+<CJK_UNIFIED_IDEOGRAPH-313F0> \xF0\xB1\x8F\xB0
+<CJK_UNIFIED_IDEOGRAPH-313F1> \xF0\xB1\x8F\xB1
+<CJK_UNIFIED_IDEOGRAPH-313F2> \xF0\xB1\x8F\xB2
+<CJK_UNIFIED_IDEOGRAPH-313F3> \xF0\xB1\x8F\xB3
+<CJK_UNIFIED_IDEOGRAPH-313F4> \xF0\xB1\x8F\xB4
+<CJK_UNIFIED_IDEOGRAPH-313F5> \xF0\xB1\x8F\xB5
+<CJK_UNIFIED_IDEOGRAPH-313F6> \xF0\xB1\x8F\xB6
+<CJK_UNIFIED_IDEOGRAPH-313F7> \xF0\xB1\x8F\xB7
+<CJK_UNIFIED_IDEOGRAPH-313F8> \xF0\xB1\x8F\xB8
+<CJK_UNIFIED_IDEOGRAPH-313F9> \xF0\xB1\x8F\xB9
+<CJK_UNIFIED_IDEOGRAPH-313FA> \xF0\xB1\x8F\xBA
+<CJK_UNIFIED_IDEOGRAPH-313FB> \xF0\xB1\x8F\xBB
+<CJK_UNIFIED_IDEOGRAPH-313FC> \xF0\xB1\x8F\xBC
+<CJK_UNIFIED_IDEOGRAPH-313FD> \xF0\xB1\x8F\xBD
+<CJK_UNIFIED_IDEOGRAPH-313FE> \xF0\xB1\x8F\xBE
+<CJK_UNIFIED_IDEOGRAPH-313FF> \xF0\xB1\x8F\xBF
+<CJK_UNIFIED_IDEOGRAPH-31400> \xF0\xB1\x90\x80
+<CJK_UNIFIED_IDEOGRAPH-31401> \xF0\xB1\x90\x81
+<CJK_UNIFIED_IDEOGRAPH-31402> \xF0\xB1\x90\x82
+<CJK_UNIFIED_IDEOGRAPH-31403> \xF0\xB1\x90\x83
+<CJK_UNIFIED_IDEOGRAPH-31404> \xF0\xB1\x90\x84
+<CJK_UNIFIED_IDEOGRAPH-31405> \xF0\xB1\x90\x85
+<CJK_UNIFIED_IDEOGRAPH-31406> \xF0\xB1\x90\x86
+<CJK_UNIFIED_IDEOGRAPH-31407> \xF0\xB1\x90\x87
+<CJK_UNIFIED_IDEOGRAPH-31408> \xF0\xB1\x90\x88
+<CJK_UNIFIED_IDEOGRAPH-31409> \xF0\xB1\x90\x89
+<CJK_UNIFIED_IDEOGRAPH-3140A> \xF0\xB1\x90\x8A
+<CJK_UNIFIED_IDEOGRAPH-3140B> \xF0\xB1\x90\x8B
+<CJK_UNIFIED_IDEOGRAPH-3140C> \xF0\xB1\x90\x8C
+<CJK_UNIFIED_IDEOGRAPH-3140D> \xF0\xB1\x90\x8D
+<CJK_UNIFIED_IDEOGRAPH-3140E> \xF0\xB1\x90\x8E
+<CJK_UNIFIED_IDEOGRAPH-3140F> \xF0\xB1\x90\x8F
+<CJK_UNIFIED_IDEOGRAPH-31410> \xF0\xB1\x90\x90
+<CJK_UNIFIED_IDEOGRAPH-31411> \xF0\xB1\x90\x91
+<CJK_UNIFIED_IDEOGRAPH-31412> \xF0\xB1\x90\x92
+<CJK_UNIFIED_IDEOGRAPH-31413> \xF0\xB1\x90\x93
+<CJK_UNIFIED_IDEOGRAPH-31414> \xF0\xB1\x90\x94
+<CJK_UNIFIED_IDEOGRAPH-31415> \xF0\xB1\x90\x95
+<CJK_UNIFIED_IDEOGRAPH-31416> \xF0\xB1\x90\x96
+<CJK_UNIFIED_IDEOGRAPH-31417> \xF0\xB1\x90\x97
+<CJK_UNIFIED_IDEOGRAPH-31418> \xF0\xB1\x90\x98
+<CJK_UNIFIED_IDEOGRAPH-31419> \xF0\xB1\x90\x99
+<CJK_UNIFIED_IDEOGRAPH-3141A> \xF0\xB1\x90\x9A
+<CJK_UNIFIED_IDEOGRAPH-3141B> \xF0\xB1\x90\x9B
+<CJK_UNIFIED_IDEOGRAPH-3141C> \xF0\xB1\x90\x9C
+<CJK_UNIFIED_IDEOGRAPH-3141D> \xF0\xB1\x90\x9D
+<CJK_UNIFIED_IDEOGRAPH-3141E> \xF0\xB1\x90\x9E
+<CJK_UNIFIED_IDEOGRAPH-3141F> \xF0\xB1\x90\x9F
+<CJK_UNIFIED_IDEOGRAPH-31420> \xF0\xB1\x90\xA0
+<CJK_UNIFIED_IDEOGRAPH-31421> \xF0\xB1\x90\xA1
+<CJK_UNIFIED_IDEOGRAPH-31422> \xF0\xB1\x90\xA2
+<CJK_UNIFIED_IDEOGRAPH-31423> \xF0\xB1\x90\xA3
+<CJK_UNIFIED_IDEOGRAPH-31424> \xF0\xB1\x90\xA4
+<CJK_UNIFIED_IDEOGRAPH-31425> \xF0\xB1\x90\xA5
+<CJK_UNIFIED_IDEOGRAPH-31426> \xF0\xB1\x90\xA6
+<CJK_UNIFIED_IDEOGRAPH-31427> \xF0\xB1\x90\xA7
+<CJK_UNIFIED_IDEOGRAPH-31428> \xF0\xB1\x90\xA8
+<CJK_UNIFIED_IDEOGRAPH-31429> \xF0\xB1\x90\xA9
+<CJK_UNIFIED_IDEOGRAPH-3142A> \xF0\xB1\x90\xAA
+<CJK_UNIFIED_IDEOGRAPH-3142B> \xF0\xB1\x90\xAB
+<CJK_UNIFIED_IDEOGRAPH-3142C> \xF0\xB1\x90\xAC
+<CJK_UNIFIED_IDEOGRAPH-3142D> \xF0\xB1\x90\xAD
+<CJK_UNIFIED_IDEOGRAPH-3142E> \xF0\xB1\x90\xAE
+<CJK_UNIFIED_IDEOGRAPH-3142F> \xF0\xB1\x90\xAF
+<CJK_UNIFIED_IDEOGRAPH-31430> \xF0\xB1\x90\xB0
+<CJK_UNIFIED_IDEOGRAPH-31431> \xF0\xB1\x90\xB1
+<CJK_UNIFIED_IDEOGRAPH-31432> \xF0\xB1\x90\xB2
+<CJK_UNIFIED_IDEOGRAPH-31433> \xF0\xB1\x90\xB3
+<CJK_UNIFIED_IDEOGRAPH-31434> \xF0\xB1\x90\xB4
+<CJK_UNIFIED_IDEOGRAPH-31435> \xF0\xB1\x90\xB5
+<CJK_UNIFIED_IDEOGRAPH-31436> \xF0\xB1\x90\xB6
+<CJK_UNIFIED_IDEOGRAPH-31437> \xF0\xB1\x90\xB7
+<CJK_UNIFIED_IDEOGRAPH-31438> \xF0\xB1\x90\xB8
+<CJK_UNIFIED_IDEOGRAPH-31439> \xF0\xB1\x90\xB9
+<CJK_UNIFIED_IDEOGRAPH-3143A> \xF0\xB1\x90\xBA
+<CJK_UNIFIED_IDEOGRAPH-3143B> \xF0\xB1\x90\xBB
+<CJK_UNIFIED_IDEOGRAPH-3143C> \xF0\xB1\x90\xBC
+<CJK_UNIFIED_IDEOGRAPH-3143D> \xF0\xB1\x90\xBD
+<CJK_UNIFIED_IDEOGRAPH-3143E> \xF0\xB1\x90\xBE
+<CJK_UNIFIED_IDEOGRAPH-3143F> \xF0\xB1\x90\xBF
+<CJK_UNIFIED_IDEOGRAPH-31440> \xF0\xB1\x91\x80
+<CJK_UNIFIED_IDEOGRAPH-31441> \xF0\xB1\x91\x81
+<CJK_UNIFIED_IDEOGRAPH-31442> \xF0\xB1\x91\x82
+<CJK_UNIFIED_IDEOGRAPH-31443> \xF0\xB1\x91\x83
+<CJK_UNIFIED_IDEOGRAPH-31444> \xF0\xB1\x91\x84
+<CJK_UNIFIED_IDEOGRAPH-31445> \xF0\xB1\x91\x85
+<CJK_UNIFIED_IDEOGRAPH-31446> \xF0\xB1\x91\x86
+<CJK_UNIFIED_IDEOGRAPH-31447> \xF0\xB1\x91\x87
+<CJK_UNIFIED_IDEOGRAPH-31448> \xF0\xB1\x91\x88
+<CJK_UNIFIED_IDEOGRAPH-31449> \xF0\xB1\x91\x89
+<CJK_UNIFIED_IDEOGRAPH-3144A> \xF0\xB1\x91\x8A
+<CJK_UNIFIED_IDEOGRAPH-3144B> \xF0\xB1\x91\x8B
+<CJK_UNIFIED_IDEOGRAPH-3144C> \xF0\xB1\x91\x8C
+<CJK_UNIFIED_IDEOGRAPH-3144D> \xF0\xB1\x91\x8D
+<CJK_UNIFIED_IDEOGRAPH-3144E> \xF0\xB1\x91\x8E
+<CJK_UNIFIED_IDEOGRAPH-3144F> \xF0\xB1\x91\x8F
+<CJK_UNIFIED_IDEOGRAPH-31450> \xF0\xB1\x91\x90
+<CJK_UNIFIED_IDEOGRAPH-31451> \xF0\xB1\x91\x91
+<CJK_UNIFIED_IDEOGRAPH-31452> \xF0\xB1\x91\x92
+<CJK_UNIFIED_IDEOGRAPH-31453> \xF0\xB1\x91\x93
+<CJK_UNIFIED_IDEOGRAPH-31454> \xF0\xB1\x91\x94
+<CJK_UNIFIED_IDEOGRAPH-31455> \xF0\xB1\x91\x95
+<CJK_UNIFIED_IDEOGRAPH-31456> \xF0\xB1\x91\x96
+<CJK_UNIFIED_IDEOGRAPH-31457> \xF0\xB1\x91\x97
+<CJK_UNIFIED_IDEOGRAPH-31458> \xF0\xB1\x91\x98
+<CJK_UNIFIED_IDEOGRAPH-31459> \xF0\xB1\x91\x99
+<CJK_UNIFIED_IDEOGRAPH-3145A> \xF0\xB1\x91\x9A
+<CJK_UNIFIED_IDEOGRAPH-3145B> \xF0\xB1\x91\x9B
+<CJK_UNIFIED_IDEOGRAPH-3145C> \xF0\xB1\x91\x9C
+<CJK_UNIFIED_IDEOGRAPH-3145D> \xF0\xB1\x91\x9D
+<CJK_UNIFIED_IDEOGRAPH-3145E> \xF0\xB1\x91\x9E
+<CJK_UNIFIED_IDEOGRAPH-3145F> \xF0\xB1\x91\x9F
+<CJK_UNIFIED_IDEOGRAPH-31460> \xF0\xB1\x91\xA0
+<CJK_UNIFIED_IDEOGRAPH-31461> \xF0\xB1\x91\xA1
+<CJK_UNIFIED_IDEOGRAPH-31462> \xF0\xB1\x91\xA2
+<CJK_UNIFIED_IDEOGRAPH-31463> \xF0\xB1\x91\xA3
+<CJK_UNIFIED_IDEOGRAPH-31464> \xF0\xB1\x91\xA4
+<CJK_UNIFIED_IDEOGRAPH-31465> \xF0\xB1\x91\xA5
+<CJK_UNIFIED_IDEOGRAPH-31466> \xF0\xB1\x91\xA6
+<CJK_UNIFIED_IDEOGRAPH-31467> \xF0\xB1\x91\xA7
+<CJK_UNIFIED_IDEOGRAPH-31468> \xF0\xB1\x91\xA8
+<CJK_UNIFIED_IDEOGRAPH-31469> \xF0\xB1\x91\xA9
+<CJK_UNIFIED_IDEOGRAPH-3146A> \xF0\xB1\x91\xAA
+<CJK_UNIFIED_IDEOGRAPH-3146B> \xF0\xB1\x91\xAB
+<CJK_UNIFIED_IDEOGRAPH-3146C> \xF0\xB1\x91\xAC
+<CJK_UNIFIED_IDEOGRAPH-3146D> \xF0\xB1\x91\xAD
+<CJK_UNIFIED_IDEOGRAPH-3146E> \xF0\xB1\x91\xAE
+<CJK_UNIFIED_IDEOGRAPH-3146F> \xF0\xB1\x91\xAF
+<CJK_UNIFIED_IDEOGRAPH-31470> \xF0\xB1\x91\xB0
+<CJK_UNIFIED_IDEOGRAPH-31471> \xF0\xB1\x91\xB1
+<CJK_UNIFIED_IDEOGRAPH-31472> \xF0\xB1\x91\xB2
+<CJK_UNIFIED_IDEOGRAPH-31473> \xF0\xB1\x91\xB3
+<CJK_UNIFIED_IDEOGRAPH-31474> \xF0\xB1\x91\xB4
+<CJK_UNIFIED_IDEOGRAPH-31475> \xF0\xB1\x91\xB5
+<CJK_UNIFIED_IDEOGRAPH-31476> \xF0\xB1\x91\xB6
+<CJK_UNIFIED_IDEOGRAPH-31477> \xF0\xB1\x91\xB7
+<CJK_UNIFIED_IDEOGRAPH-31478> \xF0\xB1\x91\xB8
+<CJK_UNIFIED_IDEOGRAPH-31479> \xF0\xB1\x91\xB9
+<CJK_UNIFIED_IDEOGRAPH-3147A> \xF0\xB1\x91\xBA
+<CJK_UNIFIED_IDEOGRAPH-3147B> \xF0\xB1\x91\xBB
+<CJK_UNIFIED_IDEOGRAPH-3147C> \xF0\xB1\x91\xBC
+<CJK_UNIFIED_IDEOGRAPH-3147D> \xF0\xB1\x91\xBD
+<CJK_UNIFIED_IDEOGRAPH-3147E> \xF0\xB1\x91\xBE
+<CJK_UNIFIED_IDEOGRAPH-3147F> \xF0\xB1\x91\xBF
+<CJK_UNIFIED_IDEOGRAPH-31480> \xF0\xB1\x92\x80
+<CJK_UNIFIED_IDEOGRAPH-31481> \xF0\xB1\x92\x81
+<CJK_UNIFIED_IDEOGRAPH-31482> \xF0\xB1\x92\x82
+<CJK_UNIFIED_IDEOGRAPH-31483> \xF0\xB1\x92\x83
+<CJK_UNIFIED_IDEOGRAPH-31484> \xF0\xB1\x92\x84
+<CJK_UNIFIED_IDEOGRAPH-31485> \xF0\xB1\x92\x85
+<CJK_UNIFIED_IDEOGRAPH-31486> \xF0\xB1\x92\x86
+<CJK_UNIFIED_IDEOGRAPH-31487> \xF0\xB1\x92\x87
+<CJK_UNIFIED_IDEOGRAPH-31488> \xF0\xB1\x92\x88
+<CJK_UNIFIED_IDEOGRAPH-31489> \xF0\xB1\x92\x89
+<CJK_UNIFIED_IDEOGRAPH-3148A> \xF0\xB1\x92\x8A
+<CJK_UNIFIED_IDEOGRAPH-3148B> \xF0\xB1\x92\x8B
+<CJK_UNIFIED_IDEOGRAPH-3148C> \xF0\xB1\x92\x8C
+<CJK_UNIFIED_IDEOGRAPH-3148D> \xF0\xB1\x92\x8D
+<CJK_UNIFIED_IDEOGRAPH-3148E> \xF0\xB1\x92\x8E
+<CJK_UNIFIED_IDEOGRAPH-3148F> \xF0\xB1\x92\x8F
+<CJK_UNIFIED_IDEOGRAPH-31490> \xF0\xB1\x92\x90
+<CJK_UNIFIED_IDEOGRAPH-31491> \xF0\xB1\x92\x91
+<CJK_UNIFIED_IDEOGRAPH-31492> \xF0\xB1\x92\x92
+<CJK_UNIFIED_IDEOGRAPH-31493> \xF0\xB1\x92\x93
+<CJK_UNIFIED_IDEOGRAPH-31494> \xF0\xB1\x92\x94
+<CJK_UNIFIED_IDEOGRAPH-31495> \xF0\xB1\x92\x95
+<CJK_UNIFIED_IDEOGRAPH-31496> \xF0\xB1\x92\x96
+<CJK_UNIFIED_IDEOGRAPH-31497> \xF0\xB1\x92\x97
+<CJK_UNIFIED_IDEOGRAPH-31498> \xF0\xB1\x92\x98
+<CJK_UNIFIED_IDEOGRAPH-31499> \xF0\xB1\x92\x99
+<CJK_UNIFIED_IDEOGRAPH-3149A> \xF0\xB1\x92\x9A
+<CJK_UNIFIED_IDEOGRAPH-3149B> \xF0\xB1\x92\x9B
+<CJK_UNIFIED_IDEOGRAPH-3149C> \xF0\xB1\x92\x9C
+<CJK_UNIFIED_IDEOGRAPH-3149D> \xF0\xB1\x92\x9D
+<CJK_UNIFIED_IDEOGRAPH-3149E> \xF0\xB1\x92\x9E
+<CJK_UNIFIED_IDEOGRAPH-3149F> \xF0\xB1\x92\x9F
+<CJK_UNIFIED_IDEOGRAPH-314A0> \xF0\xB1\x92\xA0
+<CJK_UNIFIED_IDEOGRAPH-314A1> \xF0\xB1\x92\xA1
+<CJK_UNIFIED_IDEOGRAPH-314A2> \xF0\xB1\x92\xA2
+<CJK_UNIFIED_IDEOGRAPH-314A3> \xF0\xB1\x92\xA3
+<CJK_UNIFIED_IDEOGRAPH-314A4> \xF0\xB1\x92\xA4
+<CJK_UNIFIED_IDEOGRAPH-314A5> \xF0\xB1\x92\xA5
+<CJK_UNIFIED_IDEOGRAPH-314A6> \xF0\xB1\x92\xA6
+<CJK_UNIFIED_IDEOGRAPH-314A7> \xF0\xB1\x92\xA7
+<CJK_UNIFIED_IDEOGRAPH-314A8> \xF0\xB1\x92\xA8
+<CJK_UNIFIED_IDEOGRAPH-314A9> \xF0\xB1\x92\xA9
+<CJK_UNIFIED_IDEOGRAPH-314AA> \xF0\xB1\x92\xAA
+<CJK_UNIFIED_IDEOGRAPH-314AB> \xF0\xB1\x92\xAB
+<CJK_UNIFIED_IDEOGRAPH-314AC> \xF0\xB1\x92\xAC
+<CJK_UNIFIED_IDEOGRAPH-314AD> \xF0\xB1\x92\xAD
+<CJK_UNIFIED_IDEOGRAPH-314AE> \xF0\xB1\x92\xAE
+<CJK_UNIFIED_IDEOGRAPH-314AF> \xF0\xB1\x92\xAF
+<CJK_UNIFIED_IDEOGRAPH-314B0> \xF0\xB1\x92\xB0
+<CJK_UNIFIED_IDEOGRAPH-314B1> \xF0\xB1\x92\xB1
+<CJK_UNIFIED_IDEOGRAPH-314B2> \xF0\xB1\x92\xB2
+<CJK_UNIFIED_IDEOGRAPH-314B3> \xF0\xB1\x92\xB3
+<CJK_UNIFIED_IDEOGRAPH-314B4> \xF0\xB1\x92\xB4
+<CJK_UNIFIED_IDEOGRAPH-314B5> \xF0\xB1\x92\xB5
+<CJK_UNIFIED_IDEOGRAPH-314B6> \xF0\xB1\x92\xB6
+<CJK_UNIFIED_IDEOGRAPH-314B7> \xF0\xB1\x92\xB7
+<CJK_UNIFIED_IDEOGRAPH-314B8> \xF0\xB1\x92\xB8
+<CJK_UNIFIED_IDEOGRAPH-314B9> \xF0\xB1\x92\xB9
+<CJK_UNIFIED_IDEOGRAPH-314BA> \xF0\xB1\x92\xBA
+<CJK_UNIFIED_IDEOGRAPH-314BB> \xF0\xB1\x92\xBB
+<CJK_UNIFIED_IDEOGRAPH-314BC> \xF0\xB1\x92\xBC
+<CJK_UNIFIED_IDEOGRAPH-314BD> \xF0\xB1\x92\xBD
+<CJK_UNIFIED_IDEOGRAPH-314BE> \xF0\xB1\x92\xBE
+<CJK_UNIFIED_IDEOGRAPH-314BF> \xF0\xB1\x92\xBF
+<CJK_UNIFIED_IDEOGRAPH-314C0> \xF0\xB1\x93\x80
+<CJK_UNIFIED_IDEOGRAPH-314C1> \xF0\xB1\x93\x81
+<CJK_UNIFIED_IDEOGRAPH-314C2> \xF0\xB1\x93\x82
+<CJK_UNIFIED_IDEOGRAPH-314C3> \xF0\xB1\x93\x83
+<CJK_UNIFIED_IDEOGRAPH-314C4> \xF0\xB1\x93\x84
+<CJK_UNIFIED_IDEOGRAPH-314C5> \xF0\xB1\x93\x85
+<CJK_UNIFIED_IDEOGRAPH-314C6> \xF0\xB1\x93\x86
+<CJK_UNIFIED_IDEOGRAPH-314C7> \xF0\xB1\x93\x87
+<CJK_UNIFIED_IDEOGRAPH-314C8> \xF0\xB1\x93\x88
+<CJK_UNIFIED_IDEOGRAPH-314C9> \xF0\xB1\x93\x89
+<CJK_UNIFIED_IDEOGRAPH-314CA> \xF0\xB1\x93\x8A
+<CJK_UNIFIED_IDEOGRAPH-314CB> \xF0\xB1\x93\x8B
+<CJK_UNIFIED_IDEOGRAPH-314CC> \xF0\xB1\x93\x8C
+<CJK_UNIFIED_IDEOGRAPH-314CD> \xF0\xB1\x93\x8D
+<CJK_UNIFIED_IDEOGRAPH-314CE> \xF0\xB1\x93\x8E
+<CJK_UNIFIED_IDEOGRAPH-314CF> \xF0\xB1\x93\x8F
+<CJK_UNIFIED_IDEOGRAPH-314D0> \xF0\xB1\x93\x90
+<CJK_UNIFIED_IDEOGRAPH-314D1> \xF0\xB1\x93\x91
+<CJK_UNIFIED_IDEOGRAPH-314D2> \xF0\xB1\x93\x92
+<CJK_UNIFIED_IDEOGRAPH-314D3> \xF0\xB1\x93\x93
+<CJK_UNIFIED_IDEOGRAPH-314D4> \xF0\xB1\x93\x94
+<CJK_UNIFIED_IDEOGRAPH-314D5> \xF0\xB1\x93\x95
+<CJK_UNIFIED_IDEOGRAPH-314D6> \xF0\xB1\x93\x96
+<CJK_UNIFIED_IDEOGRAPH-314D7> \xF0\xB1\x93\x97
+<CJK_UNIFIED_IDEOGRAPH-314D8> \xF0\xB1\x93\x98
+<CJK_UNIFIED_IDEOGRAPH-314D9> \xF0\xB1\x93\x99
+<CJK_UNIFIED_IDEOGRAPH-314DA> \xF0\xB1\x93\x9A
+<CJK_UNIFIED_IDEOGRAPH-314DB> \xF0\xB1\x93\x9B
+<CJK_UNIFIED_IDEOGRAPH-314DC> \xF0\xB1\x93\x9C
+<CJK_UNIFIED_IDEOGRAPH-314DD> \xF0\xB1\x93\x9D
+<CJK_UNIFIED_IDEOGRAPH-314DE> \xF0\xB1\x93\x9E
+<CJK_UNIFIED_IDEOGRAPH-314DF> \xF0\xB1\x93\x9F
+<CJK_UNIFIED_IDEOGRAPH-314E0> \xF0\xB1\x93\xA0
+<CJK_UNIFIED_IDEOGRAPH-314E1> \xF0\xB1\x93\xA1
+<CJK_UNIFIED_IDEOGRAPH-314E2> \xF0\xB1\x93\xA2
+<CJK_UNIFIED_IDEOGRAPH-314E3> \xF0\xB1\x93\xA3
+<CJK_UNIFIED_IDEOGRAPH-314E4> \xF0\xB1\x93\xA4
+<CJK_UNIFIED_IDEOGRAPH-314E5> \xF0\xB1\x93\xA5
+<CJK_UNIFIED_IDEOGRAPH-314E6> \xF0\xB1\x93\xA6
+<CJK_UNIFIED_IDEOGRAPH-314E7> \xF0\xB1\x93\xA7
+<CJK_UNIFIED_IDEOGRAPH-314E8> \xF0\xB1\x93\xA8
+<CJK_UNIFIED_IDEOGRAPH-314E9> \xF0\xB1\x93\xA9
+<CJK_UNIFIED_IDEOGRAPH-314EA> \xF0\xB1\x93\xAA
+<CJK_UNIFIED_IDEOGRAPH-314EB> \xF0\xB1\x93\xAB
+<CJK_UNIFIED_IDEOGRAPH-314EC> \xF0\xB1\x93\xAC
+<CJK_UNIFIED_IDEOGRAPH-314ED> \xF0\xB1\x93\xAD
+<CJK_UNIFIED_IDEOGRAPH-314EE> \xF0\xB1\x93\xAE
+<CJK_UNIFIED_IDEOGRAPH-314EF> \xF0\xB1\x93\xAF
+<CJK_UNIFIED_IDEOGRAPH-314F0> \xF0\xB1\x93\xB0
+<CJK_UNIFIED_IDEOGRAPH-314F1> \xF0\xB1\x93\xB1
+<CJK_UNIFIED_IDEOGRAPH-314F2> \xF0\xB1\x93\xB2
+<CJK_UNIFIED_IDEOGRAPH-314F3> \xF0\xB1\x93\xB3
+<CJK_UNIFIED_IDEOGRAPH-314F4> \xF0\xB1\x93\xB4
+<CJK_UNIFIED_IDEOGRAPH-314F5> \xF0\xB1\x93\xB5
+<CJK_UNIFIED_IDEOGRAPH-314F6> \xF0\xB1\x93\xB6
+<CJK_UNIFIED_IDEOGRAPH-314F7> \xF0\xB1\x93\xB7
+<CJK_UNIFIED_IDEOGRAPH-314F8> \xF0\xB1\x93\xB8
+<CJK_UNIFIED_IDEOGRAPH-314F9> \xF0\xB1\x93\xB9
+<CJK_UNIFIED_IDEOGRAPH-314FA> \xF0\xB1\x93\xBA
+<CJK_UNIFIED_IDEOGRAPH-314FB> \xF0\xB1\x93\xBB
+<CJK_UNIFIED_IDEOGRAPH-314FC> \xF0\xB1\x93\xBC
+<CJK_UNIFIED_IDEOGRAPH-314FD> \xF0\xB1\x93\xBD
+<CJK_UNIFIED_IDEOGRAPH-314FE> \xF0\xB1\x93\xBE
+<CJK_UNIFIED_IDEOGRAPH-314FF> \xF0\xB1\x93\xBF
+<CJK_UNIFIED_IDEOGRAPH-31500> \xF0\xB1\x94\x80
+<CJK_UNIFIED_IDEOGRAPH-31501> \xF0\xB1\x94\x81
+<CJK_UNIFIED_IDEOGRAPH-31502> \xF0\xB1\x94\x82
+<CJK_UNIFIED_IDEOGRAPH-31503> \xF0\xB1\x94\x83
+<CJK_UNIFIED_IDEOGRAPH-31504> \xF0\xB1\x94\x84
+<CJK_UNIFIED_IDEOGRAPH-31505> \xF0\xB1\x94\x85
+<CJK_UNIFIED_IDEOGRAPH-31506> \xF0\xB1\x94\x86
+<CJK_UNIFIED_IDEOGRAPH-31507> \xF0\xB1\x94\x87
+<CJK_UNIFIED_IDEOGRAPH-31508> \xF0\xB1\x94\x88
+<CJK_UNIFIED_IDEOGRAPH-31509> \xF0\xB1\x94\x89
+<CJK_UNIFIED_IDEOGRAPH-3150A> \xF0\xB1\x94\x8A
+<CJK_UNIFIED_IDEOGRAPH-3150B> \xF0\xB1\x94\x8B
+<CJK_UNIFIED_IDEOGRAPH-3150C> \xF0\xB1\x94\x8C
+<CJK_UNIFIED_IDEOGRAPH-3150D> \xF0\xB1\x94\x8D
+<CJK_UNIFIED_IDEOGRAPH-3150E> \xF0\xB1\x94\x8E
+<CJK_UNIFIED_IDEOGRAPH-3150F> \xF0\xB1\x94\x8F
+<CJK_UNIFIED_IDEOGRAPH-31510> \xF0\xB1\x94\x90
+<CJK_UNIFIED_IDEOGRAPH-31511> \xF0\xB1\x94\x91
+<CJK_UNIFIED_IDEOGRAPH-31512> \xF0\xB1\x94\x92
+<CJK_UNIFIED_IDEOGRAPH-31513> \xF0\xB1\x94\x93
+<CJK_UNIFIED_IDEOGRAPH-31514> \xF0\xB1\x94\x94
+<CJK_UNIFIED_IDEOGRAPH-31515> \xF0\xB1\x94\x95
+<CJK_UNIFIED_IDEOGRAPH-31516> \xF0\xB1\x94\x96
+<CJK_UNIFIED_IDEOGRAPH-31517> \xF0\xB1\x94\x97
+<CJK_UNIFIED_IDEOGRAPH-31518> \xF0\xB1\x94\x98
+<CJK_UNIFIED_IDEOGRAPH-31519> \xF0\xB1\x94\x99
+<CJK_UNIFIED_IDEOGRAPH-3151A> \xF0\xB1\x94\x9A
+<CJK_UNIFIED_IDEOGRAPH-3151B> \xF0\xB1\x94\x9B
+<CJK_UNIFIED_IDEOGRAPH-3151C> \xF0\xB1\x94\x9C
+<CJK_UNIFIED_IDEOGRAPH-3151D> \xF0\xB1\x94\x9D
+<CJK_UNIFIED_IDEOGRAPH-3151E> \xF0\xB1\x94\x9E
+<CJK_UNIFIED_IDEOGRAPH-3151F> \xF0\xB1\x94\x9F
+<CJK_UNIFIED_IDEOGRAPH-31520> \xF0\xB1\x94\xA0
+<CJK_UNIFIED_IDEOGRAPH-31521> \xF0\xB1\x94\xA1
+<CJK_UNIFIED_IDEOGRAPH-31522> \xF0\xB1\x94\xA2
+<CJK_UNIFIED_IDEOGRAPH-31523> \xF0\xB1\x94\xA3
+<CJK_UNIFIED_IDEOGRAPH-31524> \xF0\xB1\x94\xA4
+<CJK_UNIFIED_IDEOGRAPH-31525> \xF0\xB1\x94\xA5
+<CJK_UNIFIED_IDEOGRAPH-31526> \xF0\xB1\x94\xA6
+<CJK_UNIFIED_IDEOGRAPH-31527> \xF0\xB1\x94\xA7
+<CJK_UNIFIED_IDEOGRAPH-31528> \xF0\xB1\x94\xA8
+<CJK_UNIFIED_IDEOGRAPH-31529> \xF0\xB1\x94\xA9
+<CJK_UNIFIED_IDEOGRAPH-3152A> \xF0\xB1\x94\xAA
+<CJK_UNIFIED_IDEOGRAPH-3152B> \xF0\xB1\x94\xAB
+<CJK_UNIFIED_IDEOGRAPH-3152C> \xF0\xB1\x94\xAC
+<CJK_UNIFIED_IDEOGRAPH-3152D> \xF0\xB1\x94\xAD
+<CJK_UNIFIED_IDEOGRAPH-3152E> \xF0\xB1\x94\xAE
+<CJK_UNIFIED_IDEOGRAPH-3152F> \xF0\xB1\x94\xAF
+<CJK_UNIFIED_IDEOGRAPH-31530> \xF0\xB1\x94\xB0
+<CJK_UNIFIED_IDEOGRAPH-31531> \xF0\xB1\x94\xB1
+<CJK_UNIFIED_IDEOGRAPH-31532> \xF0\xB1\x94\xB2
+<CJK_UNIFIED_IDEOGRAPH-31533> \xF0\xB1\x94\xB3
+<CJK_UNIFIED_IDEOGRAPH-31534> \xF0\xB1\x94\xB4
+<CJK_UNIFIED_IDEOGRAPH-31535> \xF0\xB1\x94\xB5
+<CJK_UNIFIED_IDEOGRAPH-31536> \xF0\xB1\x94\xB6
+<CJK_UNIFIED_IDEOGRAPH-31537> \xF0\xB1\x94\xB7
+<CJK_UNIFIED_IDEOGRAPH-31538> \xF0\xB1\x94\xB8
+<CJK_UNIFIED_IDEOGRAPH-31539> \xF0\xB1\x94\xB9
+<CJK_UNIFIED_IDEOGRAPH-3153A> \xF0\xB1\x94\xBA
+<CJK_UNIFIED_IDEOGRAPH-3153B> \xF0\xB1\x94\xBB
+<CJK_UNIFIED_IDEOGRAPH-3153C> \xF0\xB1\x94\xBC
+<CJK_UNIFIED_IDEOGRAPH-3153D> \xF0\xB1\x94\xBD
+<CJK_UNIFIED_IDEOGRAPH-3153E> \xF0\xB1\x94\xBE
+<CJK_UNIFIED_IDEOGRAPH-3153F> \xF0\xB1\x94\xBF
+<CJK_UNIFIED_IDEOGRAPH-31540> \xF0\xB1\x95\x80
+<CJK_UNIFIED_IDEOGRAPH-31541> \xF0\xB1\x95\x81
+<CJK_UNIFIED_IDEOGRAPH-31542> \xF0\xB1\x95\x82
+<CJK_UNIFIED_IDEOGRAPH-31543> \xF0\xB1\x95\x83
+<CJK_UNIFIED_IDEOGRAPH-31544> \xF0\xB1\x95\x84
+<CJK_UNIFIED_IDEOGRAPH-31545> \xF0\xB1\x95\x85
+<CJK_UNIFIED_IDEOGRAPH-31546> \xF0\xB1\x95\x86
+<CJK_UNIFIED_IDEOGRAPH-31547> \xF0\xB1\x95\x87
+<CJK_UNIFIED_IDEOGRAPH-31548> \xF0\xB1\x95\x88
+<CJK_UNIFIED_IDEOGRAPH-31549> \xF0\xB1\x95\x89
+<CJK_UNIFIED_IDEOGRAPH-3154A> \xF0\xB1\x95\x8A
+<CJK_UNIFIED_IDEOGRAPH-3154B> \xF0\xB1\x95\x8B
+<CJK_UNIFIED_IDEOGRAPH-3154C> \xF0\xB1\x95\x8C
+<CJK_UNIFIED_IDEOGRAPH-3154D> \xF0\xB1\x95\x8D
+<CJK_UNIFIED_IDEOGRAPH-3154E> \xF0\xB1\x95\x8E
+<CJK_UNIFIED_IDEOGRAPH-3154F> \xF0\xB1\x95\x8F
+<CJK_UNIFIED_IDEOGRAPH-31550> \xF0\xB1\x95\x90
+<CJK_UNIFIED_IDEOGRAPH-31551> \xF0\xB1\x95\x91
+<CJK_UNIFIED_IDEOGRAPH-31552> \xF0\xB1\x95\x92
+<CJK_UNIFIED_IDEOGRAPH-31553> \xF0\xB1\x95\x93
+<CJK_UNIFIED_IDEOGRAPH-31554> \xF0\xB1\x95\x94
+<CJK_UNIFIED_IDEOGRAPH-31555> \xF0\xB1\x95\x95
+<CJK_UNIFIED_IDEOGRAPH-31556> \xF0\xB1\x95\x96
+<CJK_UNIFIED_IDEOGRAPH-31557> \xF0\xB1\x95\x97
+<CJK_UNIFIED_IDEOGRAPH-31558> \xF0\xB1\x95\x98
+<CJK_UNIFIED_IDEOGRAPH-31559> \xF0\xB1\x95\x99
+<CJK_UNIFIED_IDEOGRAPH-3155A> \xF0\xB1\x95\x9A
+<CJK_UNIFIED_IDEOGRAPH-3155B> \xF0\xB1\x95\x9B
+<CJK_UNIFIED_IDEOGRAPH-3155C> \xF0\xB1\x95\x9C
+<CJK_UNIFIED_IDEOGRAPH-3155D> \xF0\xB1\x95\x9D
+<CJK_UNIFIED_IDEOGRAPH-3155E> \xF0\xB1\x95\x9E
+<CJK_UNIFIED_IDEOGRAPH-3155F> \xF0\xB1\x95\x9F
+<CJK_UNIFIED_IDEOGRAPH-31560> \xF0\xB1\x95\xA0
+<CJK_UNIFIED_IDEOGRAPH-31561> \xF0\xB1\x95\xA1
+<CJK_UNIFIED_IDEOGRAPH-31562> \xF0\xB1\x95\xA2
+<CJK_UNIFIED_IDEOGRAPH-31563> \xF0\xB1\x95\xA3
+<CJK_UNIFIED_IDEOGRAPH-31564> \xF0\xB1\x95\xA4
+<CJK_UNIFIED_IDEOGRAPH-31565> \xF0\xB1\x95\xA5
+<CJK_UNIFIED_IDEOGRAPH-31566> \xF0\xB1\x95\xA6
+<CJK_UNIFIED_IDEOGRAPH-31567> \xF0\xB1\x95\xA7
+<CJK_UNIFIED_IDEOGRAPH-31568> \xF0\xB1\x95\xA8
+<CJK_UNIFIED_IDEOGRAPH-31569> \xF0\xB1\x95\xA9
+<CJK_UNIFIED_IDEOGRAPH-3156A> \xF0\xB1\x95\xAA
+<CJK_UNIFIED_IDEOGRAPH-3156B> \xF0\xB1\x95\xAB
+<CJK_UNIFIED_IDEOGRAPH-3156C> \xF0\xB1\x95\xAC
+<CJK_UNIFIED_IDEOGRAPH-3156D> \xF0\xB1\x95\xAD
+<CJK_UNIFIED_IDEOGRAPH-3156E> \xF0\xB1\x95\xAE
+<CJK_UNIFIED_IDEOGRAPH-3156F> \xF0\xB1\x95\xAF
+<CJK_UNIFIED_IDEOGRAPH-31570> \xF0\xB1\x95\xB0
+<CJK_UNIFIED_IDEOGRAPH-31571> \xF0\xB1\x95\xB1
+<CJK_UNIFIED_IDEOGRAPH-31572> \xF0\xB1\x95\xB2
+<CJK_UNIFIED_IDEOGRAPH-31573> \xF0\xB1\x95\xB3
+<CJK_UNIFIED_IDEOGRAPH-31574> \xF0\xB1\x95\xB4
+<CJK_UNIFIED_IDEOGRAPH-31575> \xF0\xB1\x95\xB5
+<CJK_UNIFIED_IDEOGRAPH-31576> \xF0\xB1\x95\xB6
+<CJK_UNIFIED_IDEOGRAPH-31577> \xF0\xB1\x95\xB7
+<CJK_UNIFIED_IDEOGRAPH-31578> \xF0\xB1\x95\xB8
+<CJK_UNIFIED_IDEOGRAPH-31579> \xF0\xB1\x95\xB9
+<CJK_UNIFIED_IDEOGRAPH-3157A> \xF0\xB1\x95\xBA
+<CJK_UNIFIED_IDEOGRAPH-3157B> \xF0\xB1\x95\xBB
+<CJK_UNIFIED_IDEOGRAPH-3157C> \xF0\xB1\x95\xBC
+<CJK_UNIFIED_IDEOGRAPH-3157D> \xF0\xB1\x95\xBD
+<CJK_UNIFIED_IDEOGRAPH-3157E> \xF0\xB1\x95\xBE
+<CJK_UNIFIED_IDEOGRAPH-3157F> \xF0\xB1\x95\xBF
+<CJK_UNIFIED_IDEOGRAPH-31580> \xF0\xB1\x96\x80
+<CJK_UNIFIED_IDEOGRAPH-31581> \xF0\xB1\x96\x81
+<CJK_UNIFIED_IDEOGRAPH-31582> \xF0\xB1\x96\x82
+<CJK_UNIFIED_IDEOGRAPH-31583> \xF0\xB1\x96\x83
+<CJK_UNIFIED_IDEOGRAPH-31584> \xF0\xB1\x96\x84
+<CJK_UNIFIED_IDEOGRAPH-31585> \xF0\xB1\x96\x85
+<CJK_UNIFIED_IDEOGRAPH-31586> \xF0\xB1\x96\x86
+<CJK_UNIFIED_IDEOGRAPH-31587> \xF0\xB1\x96\x87
+<CJK_UNIFIED_IDEOGRAPH-31588> \xF0\xB1\x96\x88
+<CJK_UNIFIED_IDEOGRAPH-31589> \xF0\xB1\x96\x89
+<CJK_UNIFIED_IDEOGRAPH-3158A> \xF0\xB1\x96\x8A
+<CJK_UNIFIED_IDEOGRAPH-3158B> \xF0\xB1\x96\x8B
+<CJK_UNIFIED_IDEOGRAPH-3158C> \xF0\xB1\x96\x8C
+<CJK_UNIFIED_IDEOGRAPH-3158D> \xF0\xB1\x96\x8D
+<CJK_UNIFIED_IDEOGRAPH-3158E> \xF0\xB1\x96\x8E
+<CJK_UNIFIED_IDEOGRAPH-3158F> \xF0\xB1\x96\x8F
+<CJK_UNIFIED_IDEOGRAPH-31590> \xF0\xB1\x96\x90
+<CJK_UNIFIED_IDEOGRAPH-31591> \xF0\xB1\x96\x91
+<CJK_UNIFIED_IDEOGRAPH-31592> \xF0\xB1\x96\x92
+<CJK_UNIFIED_IDEOGRAPH-31593> \xF0\xB1\x96\x93
+<CJK_UNIFIED_IDEOGRAPH-31594> \xF0\xB1\x96\x94
+<CJK_UNIFIED_IDEOGRAPH-31595> \xF0\xB1\x96\x95
+<CJK_UNIFIED_IDEOGRAPH-31596> \xF0\xB1\x96\x96
+<CJK_UNIFIED_IDEOGRAPH-31597> \xF0\xB1\x96\x97
+<CJK_UNIFIED_IDEOGRAPH-31598> \xF0\xB1\x96\x98
+<CJK_UNIFIED_IDEOGRAPH-31599> \xF0\xB1\x96\x99
+<CJK_UNIFIED_IDEOGRAPH-3159A> \xF0\xB1\x96\x9A
+<CJK_UNIFIED_IDEOGRAPH-3159B> \xF0\xB1\x96\x9B
+<CJK_UNIFIED_IDEOGRAPH-3159C> \xF0\xB1\x96\x9C
+<CJK_UNIFIED_IDEOGRAPH-3159D> \xF0\xB1\x96\x9D
+<CJK_UNIFIED_IDEOGRAPH-3159E> \xF0\xB1\x96\x9E
+<CJK_UNIFIED_IDEOGRAPH-3159F> \xF0\xB1\x96\x9F
+<CJK_UNIFIED_IDEOGRAPH-315A0> \xF0\xB1\x96\xA0
+<CJK_UNIFIED_IDEOGRAPH-315A1> \xF0\xB1\x96\xA1
+<CJK_UNIFIED_IDEOGRAPH-315A2> \xF0\xB1\x96\xA2
+<CJK_UNIFIED_IDEOGRAPH-315A3> \xF0\xB1\x96\xA3
+<CJK_UNIFIED_IDEOGRAPH-315A4> \xF0\xB1\x96\xA4
+<CJK_UNIFIED_IDEOGRAPH-315A5> \xF0\xB1\x96\xA5
+<CJK_UNIFIED_IDEOGRAPH-315A6> \xF0\xB1\x96\xA6
+<CJK_UNIFIED_IDEOGRAPH-315A7> \xF0\xB1\x96\xA7
+<CJK_UNIFIED_IDEOGRAPH-315A8> \xF0\xB1\x96\xA8
+<CJK_UNIFIED_IDEOGRAPH-315A9> \xF0\xB1\x96\xA9
+<CJK_UNIFIED_IDEOGRAPH-315AA> \xF0\xB1\x96\xAA
+<CJK_UNIFIED_IDEOGRAPH-315AB> \xF0\xB1\x96\xAB
+<CJK_UNIFIED_IDEOGRAPH-315AC> \xF0\xB1\x96\xAC
+<CJK_UNIFIED_IDEOGRAPH-315AD> \xF0\xB1\x96\xAD
+<CJK_UNIFIED_IDEOGRAPH-315AE> \xF0\xB1\x96\xAE
+<CJK_UNIFIED_IDEOGRAPH-315AF> \xF0\xB1\x96\xAF
+<CJK_UNIFIED_IDEOGRAPH-315B0> \xF0\xB1\x96\xB0
+<CJK_UNIFIED_IDEOGRAPH-315B1> \xF0\xB1\x96\xB1
+<CJK_UNIFIED_IDEOGRAPH-315B2> \xF0\xB1\x96\xB2
+<CJK_UNIFIED_IDEOGRAPH-315B3> \xF0\xB1\x96\xB3
+<CJK_UNIFIED_IDEOGRAPH-315B4> \xF0\xB1\x96\xB4
+<CJK_UNIFIED_IDEOGRAPH-315B5> \xF0\xB1\x96\xB5
+<CJK_UNIFIED_IDEOGRAPH-315B6> \xF0\xB1\x96\xB6
+<CJK_UNIFIED_IDEOGRAPH-315B7> \xF0\xB1\x96\xB7
+<CJK_UNIFIED_IDEOGRAPH-315B8> \xF0\xB1\x96\xB8
+<CJK_UNIFIED_IDEOGRAPH-315B9> \xF0\xB1\x96\xB9
+<CJK_UNIFIED_IDEOGRAPH-315BA> \xF0\xB1\x96\xBA
+<CJK_UNIFIED_IDEOGRAPH-315BB> \xF0\xB1\x96\xBB
+<CJK_UNIFIED_IDEOGRAPH-315BC> \xF0\xB1\x96\xBC
+<CJK_UNIFIED_IDEOGRAPH-315BD> \xF0\xB1\x96\xBD
+<CJK_UNIFIED_IDEOGRAPH-315BE> \xF0\xB1\x96\xBE
+<CJK_UNIFIED_IDEOGRAPH-315BF> \xF0\xB1\x96\xBF
+<CJK_UNIFIED_IDEOGRAPH-315C0> \xF0\xB1\x97\x80
+<CJK_UNIFIED_IDEOGRAPH-315C1> \xF0\xB1\x97\x81
+<CJK_UNIFIED_IDEOGRAPH-315C2> \xF0\xB1\x97\x82
+<CJK_UNIFIED_IDEOGRAPH-315C3> \xF0\xB1\x97\x83
+<CJK_UNIFIED_IDEOGRAPH-315C4> \xF0\xB1\x97\x84
+<CJK_UNIFIED_IDEOGRAPH-315C5> \xF0\xB1\x97\x85
+<CJK_UNIFIED_IDEOGRAPH-315C6> \xF0\xB1\x97\x86
+<CJK_UNIFIED_IDEOGRAPH-315C7> \xF0\xB1\x97\x87
+<CJK_UNIFIED_IDEOGRAPH-315C8> \xF0\xB1\x97\x88
+<CJK_UNIFIED_IDEOGRAPH-315C9> \xF0\xB1\x97\x89
+<CJK_UNIFIED_IDEOGRAPH-315CA> \xF0\xB1\x97\x8A
+<CJK_UNIFIED_IDEOGRAPH-315CB> \xF0\xB1\x97\x8B
+<CJK_UNIFIED_IDEOGRAPH-315CC> \xF0\xB1\x97\x8C
+<CJK_UNIFIED_IDEOGRAPH-315CD> \xF0\xB1\x97\x8D
+<CJK_UNIFIED_IDEOGRAPH-315CE> \xF0\xB1\x97\x8E
+<CJK_UNIFIED_IDEOGRAPH-315CF> \xF0\xB1\x97\x8F
+<CJK_UNIFIED_IDEOGRAPH-315D0> \xF0\xB1\x97\x90
+<CJK_UNIFIED_IDEOGRAPH-315D1> \xF0\xB1\x97\x91
+<CJK_UNIFIED_IDEOGRAPH-315D2> \xF0\xB1\x97\x92
+<CJK_UNIFIED_IDEOGRAPH-315D3> \xF0\xB1\x97\x93
+<CJK_UNIFIED_IDEOGRAPH-315D4> \xF0\xB1\x97\x94
+<CJK_UNIFIED_IDEOGRAPH-315D5> \xF0\xB1\x97\x95
+<CJK_UNIFIED_IDEOGRAPH-315D6> \xF0\xB1\x97\x96
+<CJK_UNIFIED_IDEOGRAPH-315D7> \xF0\xB1\x97\x97
+<CJK_UNIFIED_IDEOGRAPH-315D8> \xF0\xB1\x97\x98
+<CJK_UNIFIED_IDEOGRAPH-315D9> \xF0\xB1\x97\x99
+<CJK_UNIFIED_IDEOGRAPH-315DA> \xF0\xB1\x97\x9A
+<CJK_UNIFIED_IDEOGRAPH-315DB> \xF0\xB1\x97\x9B
+<CJK_UNIFIED_IDEOGRAPH-315DC> \xF0\xB1\x97\x9C
+<CJK_UNIFIED_IDEOGRAPH-315DD> \xF0\xB1\x97\x9D
+<CJK_UNIFIED_IDEOGRAPH-315DE> \xF0\xB1\x97\x9E
+<CJK_UNIFIED_IDEOGRAPH-315DF> \xF0\xB1\x97\x9F
+<CJK_UNIFIED_IDEOGRAPH-315E0> \xF0\xB1\x97\xA0
+<CJK_UNIFIED_IDEOGRAPH-315E1> \xF0\xB1\x97\xA1
+<CJK_UNIFIED_IDEOGRAPH-315E2> \xF0\xB1\x97\xA2
+<CJK_UNIFIED_IDEOGRAPH-315E3> \xF0\xB1\x97\xA3
+<CJK_UNIFIED_IDEOGRAPH-315E4> \xF0\xB1\x97\xA4
+<CJK_UNIFIED_IDEOGRAPH-315E5> \xF0\xB1\x97\xA5
+<CJK_UNIFIED_IDEOGRAPH-315E6> \xF0\xB1\x97\xA6
+<CJK_UNIFIED_IDEOGRAPH-315E7> \xF0\xB1\x97\xA7
+<CJK_UNIFIED_IDEOGRAPH-315E8> \xF0\xB1\x97\xA8
+<CJK_UNIFIED_IDEOGRAPH-315E9> \xF0\xB1\x97\xA9
+<CJK_UNIFIED_IDEOGRAPH-315EA> \xF0\xB1\x97\xAA
+<CJK_UNIFIED_IDEOGRAPH-315EB> \xF0\xB1\x97\xAB
+<CJK_UNIFIED_IDEOGRAPH-315EC> \xF0\xB1\x97\xAC
+<CJK_UNIFIED_IDEOGRAPH-315ED> \xF0\xB1\x97\xAD
+<CJK_UNIFIED_IDEOGRAPH-315EE> \xF0\xB1\x97\xAE
+<CJK_UNIFIED_IDEOGRAPH-315EF> \xF0\xB1\x97\xAF
+<CJK_UNIFIED_IDEOGRAPH-315F0> \xF0\xB1\x97\xB0
+<CJK_UNIFIED_IDEOGRAPH-315F1> \xF0\xB1\x97\xB1
+<CJK_UNIFIED_IDEOGRAPH-315F2> \xF0\xB1\x97\xB2
+<CJK_UNIFIED_IDEOGRAPH-315F3> \xF0\xB1\x97\xB3
+<CJK_UNIFIED_IDEOGRAPH-315F4> \xF0\xB1\x97\xB4
+<CJK_UNIFIED_IDEOGRAPH-315F5> \xF0\xB1\x97\xB5
+<CJK_UNIFIED_IDEOGRAPH-315F6> \xF0\xB1\x97\xB6
+<CJK_UNIFIED_IDEOGRAPH-315F7> \xF0\xB1\x97\xB7
+<CJK_UNIFIED_IDEOGRAPH-315F8> \xF0\xB1\x97\xB8
+<CJK_UNIFIED_IDEOGRAPH-315F9> \xF0\xB1\x97\xB9
+<CJK_UNIFIED_IDEOGRAPH-315FA> \xF0\xB1\x97\xBA
+<CJK_UNIFIED_IDEOGRAPH-315FB> \xF0\xB1\x97\xBB
+<CJK_UNIFIED_IDEOGRAPH-315FC> \xF0\xB1\x97\xBC
+<CJK_UNIFIED_IDEOGRAPH-315FD> \xF0\xB1\x97\xBD
+<CJK_UNIFIED_IDEOGRAPH-315FE> \xF0\xB1\x97\xBE
+<CJK_UNIFIED_IDEOGRAPH-315FF> \xF0\xB1\x97\xBF
+<CJK_UNIFIED_IDEOGRAPH-31600> \xF0\xB1\x98\x80
+<CJK_UNIFIED_IDEOGRAPH-31601> \xF0\xB1\x98\x81
+<CJK_UNIFIED_IDEOGRAPH-31602> \xF0\xB1\x98\x82
+<CJK_UNIFIED_IDEOGRAPH-31603> \xF0\xB1\x98\x83
+<CJK_UNIFIED_IDEOGRAPH-31604> \xF0\xB1\x98\x84
+<CJK_UNIFIED_IDEOGRAPH-31605> \xF0\xB1\x98\x85
+<CJK_UNIFIED_IDEOGRAPH-31606> \xF0\xB1\x98\x86
+<CJK_UNIFIED_IDEOGRAPH-31607> \xF0\xB1\x98\x87
+<CJK_UNIFIED_IDEOGRAPH-31608> \xF0\xB1\x98\x88
+<CJK_UNIFIED_IDEOGRAPH-31609> \xF0\xB1\x98\x89
+<CJK_UNIFIED_IDEOGRAPH-3160A> \xF0\xB1\x98\x8A
+<CJK_UNIFIED_IDEOGRAPH-3160B> \xF0\xB1\x98\x8B
+<CJK_UNIFIED_IDEOGRAPH-3160C> \xF0\xB1\x98\x8C
+<CJK_UNIFIED_IDEOGRAPH-3160D> \xF0\xB1\x98\x8D
+<CJK_UNIFIED_IDEOGRAPH-3160E> \xF0\xB1\x98\x8E
+<CJK_UNIFIED_IDEOGRAPH-3160F> \xF0\xB1\x98\x8F
+<CJK_UNIFIED_IDEOGRAPH-31610> \xF0\xB1\x98\x90
+<CJK_UNIFIED_IDEOGRAPH-31611> \xF0\xB1\x98\x91
+<CJK_UNIFIED_IDEOGRAPH-31612> \xF0\xB1\x98\x92
+<CJK_UNIFIED_IDEOGRAPH-31613> \xF0\xB1\x98\x93
+<CJK_UNIFIED_IDEOGRAPH-31614> \xF0\xB1\x98\x94
+<CJK_UNIFIED_IDEOGRAPH-31615> \xF0\xB1\x98\x95
+<CJK_UNIFIED_IDEOGRAPH-31616> \xF0\xB1\x98\x96
+<CJK_UNIFIED_IDEOGRAPH-31617> \xF0\xB1\x98\x97
+<CJK_UNIFIED_IDEOGRAPH-31618> \xF0\xB1\x98\x98
+<CJK_UNIFIED_IDEOGRAPH-31619> \xF0\xB1\x98\x99
+<CJK_UNIFIED_IDEOGRAPH-3161A> \xF0\xB1\x98\x9A
+<CJK_UNIFIED_IDEOGRAPH-3161B> \xF0\xB1\x98\x9B
+<CJK_UNIFIED_IDEOGRAPH-3161C> \xF0\xB1\x98\x9C
+<CJK_UNIFIED_IDEOGRAPH-3161D> \xF0\xB1\x98\x9D
+<CJK_UNIFIED_IDEOGRAPH-3161E> \xF0\xB1\x98\x9E
+<CJK_UNIFIED_IDEOGRAPH-3161F> \xF0\xB1\x98\x9F
+<CJK_UNIFIED_IDEOGRAPH-31620> \xF0\xB1\x98\xA0
+<CJK_UNIFIED_IDEOGRAPH-31621> \xF0\xB1\x98\xA1
+<CJK_UNIFIED_IDEOGRAPH-31622> \xF0\xB1\x98\xA2
+<CJK_UNIFIED_IDEOGRAPH-31623> \xF0\xB1\x98\xA3
+<CJK_UNIFIED_IDEOGRAPH-31624> \xF0\xB1\x98\xA4
+<CJK_UNIFIED_IDEOGRAPH-31625> \xF0\xB1\x98\xA5
+<CJK_UNIFIED_IDEOGRAPH-31626> \xF0\xB1\x98\xA6
+<CJK_UNIFIED_IDEOGRAPH-31627> \xF0\xB1\x98\xA7
+<CJK_UNIFIED_IDEOGRAPH-31628> \xF0\xB1\x98\xA8
+<CJK_UNIFIED_IDEOGRAPH-31629> \xF0\xB1\x98\xA9
+<CJK_UNIFIED_IDEOGRAPH-3162A> \xF0\xB1\x98\xAA
+<CJK_UNIFIED_IDEOGRAPH-3162B> \xF0\xB1\x98\xAB
+<CJK_UNIFIED_IDEOGRAPH-3162C> \xF0\xB1\x98\xAC
+<CJK_UNIFIED_IDEOGRAPH-3162D> \xF0\xB1\x98\xAD
+<CJK_UNIFIED_IDEOGRAPH-3162E> \xF0\xB1\x98\xAE
+<CJK_UNIFIED_IDEOGRAPH-3162F> \xF0\xB1\x98\xAF
+<CJK_UNIFIED_IDEOGRAPH-31630> \xF0\xB1\x98\xB0
+<CJK_UNIFIED_IDEOGRAPH-31631> \xF0\xB1\x98\xB1
+<CJK_UNIFIED_IDEOGRAPH-31632> \xF0\xB1\x98\xB2
+<CJK_UNIFIED_IDEOGRAPH-31633> \xF0\xB1\x98\xB3
+<CJK_UNIFIED_IDEOGRAPH-31634> \xF0\xB1\x98\xB4
+<CJK_UNIFIED_IDEOGRAPH-31635> \xF0\xB1\x98\xB5
+<CJK_UNIFIED_IDEOGRAPH-31636> \xF0\xB1\x98\xB6
+<CJK_UNIFIED_IDEOGRAPH-31637> \xF0\xB1\x98\xB7
+<CJK_UNIFIED_IDEOGRAPH-31638> \xF0\xB1\x98\xB8
+<CJK_UNIFIED_IDEOGRAPH-31639> \xF0\xB1\x98\xB9
+<CJK_UNIFIED_IDEOGRAPH-3163A> \xF0\xB1\x98\xBA
+<CJK_UNIFIED_IDEOGRAPH-3163B> \xF0\xB1\x98\xBB
+<CJK_UNIFIED_IDEOGRAPH-3163C> \xF0\xB1\x98\xBC
+<CJK_UNIFIED_IDEOGRAPH-3163D> \xF0\xB1\x98\xBD
+<CJK_UNIFIED_IDEOGRAPH-3163E> \xF0\xB1\x98\xBE
+<CJK_UNIFIED_IDEOGRAPH-3163F> \xF0\xB1\x98\xBF
+<CJK_UNIFIED_IDEOGRAPH-31640> \xF0\xB1\x99\x80
+<CJK_UNIFIED_IDEOGRAPH-31641> \xF0\xB1\x99\x81
+<CJK_UNIFIED_IDEOGRAPH-31642> \xF0\xB1\x99\x82
+<CJK_UNIFIED_IDEOGRAPH-31643> \xF0\xB1\x99\x83
+<CJK_UNIFIED_IDEOGRAPH-31644> \xF0\xB1\x99\x84
+<CJK_UNIFIED_IDEOGRAPH-31645> \xF0\xB1\x99\x85
+<CJK_UNIFIED_IDEOGRAPH-31646> \xF0\xB1\x99\x86
+<CJK_UNIFIED_IDEOGRAPH-31647> \xF0\xB1\x99\x87
+<CJK_UNIFIED_IDEOGRAPH-31648> \xF0\xB1\x99\x88
+<CJK_UNIFIED_IDEOGRAPH-31649> \xF0\xB1\x99\x89
+<CJK_UNIFIED_IDEOGRAPH-3164A> \xF0\xB1\x99\x8A
+<CJK_UNIFIED_IDEOGRAPH-3164B> \xF0\xB1\x99\x8B
+<CJK_UNIFIED_IDEOGRAPH-3164C> \xF0\xB1\x99\x8C
+<CJK_UNIFIED_IDEOGRAPH-3164D> \xF0\xB1\x99\x8D
+<CJK_UNIFIED_IDEOGRAPH-3164E> \xF0\xB1\x99\x8E
+<CJK_UNIFIED_IDEOGRAPH-3164F> \xF0\xB1\x99\x8F
+<CJK_UNIFIED_IDEOGRAPH-31650> \xF0\xB1\x99\x90
+<CJK_UNIFIED_IDEOGRAPH-31651> \xF0\xB1\x99\x91
+<CJK_UNIFIED_IDEOGRAPH-31652> \xF0\xB1\x99\x92
+<CJK_UNIFIED_IDEOGRAPH-31653> \xF0\xB1\x99\x93
+<CJK_UNIFIED_IDEOGRAPH-31654> \xF0\xB1\x99\x94
+<CJK_UNIFIED_IDEOGRAPH-31655> \xF0\xB1\x99\x95
+<CJK_UNIFIED_IDEOGRAPH-31656> \xF0\xB1\x99\x96
+<CJK_UNIFIED_IDEOGRAPH-31657> \xF0\xB1\x99\x97
+<CJK_UNIFIED_IDEOGRAPH-31658> \xF0\xB1\x99\x98
+<CJK_UNIFIED_IDEOGRAPH-31659> \xF0\xB1\x99\x99
+<CJK_UNIFIED_IDEOGRAPH-3165A> \xF0\xB1\x99\x9A
+<CJK_UNIFIED_IDEOGRAPH-3165B> \xF0\xB1\x99\x9B
+<CJK_UNIFIED_IDEOGRAPH-3165C> \xF0\xB1\x99\x9C
+<CJK_UNIFIED_IDEOGRAPH-3165D> \xF0\xB1\x99\x9D
+<CJK_UNIFIED_IDEOGRAPH-3165E> \xF0\xB1\x99\x9E
+<CJK_UNIFIED_IDEOGRAPH-3165F> \xF0\xB1\x99\x9F
+<CJK_UNIFIED_IDEOGRAPH-31660> \xF0\xB1\x99\xA0
+<CJK_UNIFIED_IDEOGRAPH-31661> \xF0\xB1\x99\xA1
+<CJK_UNIFIED_IDEOGRAPH-31662> \xF0\xB1\x99\xA2
+<CJK_UNIFIED_IDEOGRAPH-31663> \xF0\xB1\x99\xA3
+<CJK_UNIFIED_IDEOGRAPH-31664> \xF0\xB1\x99\xA4
+<CJK_UNIFIED_IDEOGRAPH-31665> \xF0\xB1\x99\xA5
+<CJK_UNIFIED_IDEOGRAPH-31666> \xF0\xB1\x99\xA6
+<CJK_UNIFIED_IDEOGRAPH-31667> \xF0\xB1\x99\xA7
+<CJK_UNIFIED_IDEOGRAPH-31668> \xF0\xB1\x99\xA8
+<CJK_UNIFIED_IDEOGRAPH-31669> \xF0\xB1\x99\xA9
+<CJK_UNIFIED_IDEOGRAPH-3166A> \xF0\xB1\x99\xAA
+<CJK_UNIFIED_IDEOGRAPH-3166B> \xF0\xB1\x99\xAB
+<CJK_UNIFIED_IDEOGRAPH-3166C> \xF0\xB1\x99\xAC
+<CJK_UNIFIED_IDEOGRAPH-3166D> \xF0\xB1\x99\xAD
+<CJK_UNIFIED_IDEOGRAPH-3166E> \xF0\xB1\x99\xAE
+<CJK_UNIFIED_IDEOGRAPH-3166F> \xF0\xB1\x99\xAF
+<CJK_UNIFIED_IDEOGRAPH-31670> \xF0\xB1\x99\xB0
+<CJK_UNIFIED_IDEOGRAPH-31671> \xF0\xB1\x99\xB1
+<CJK_UNIFIED_IDEOGRAPH-31672> \xF0\xB1\x99\xB2
+<CJK_UNIFIED_IDEOGRAPH-31673> \xF0\xB1\x99\xB3
+<CJK_UNIFIED_IDEOGRAPH-31674> \xF0\xB1\x99\xB4
+<CJK_UNIFIED_IDEOGRAPH-31675> \xF0\xB1\x99\xB5
+<CJK_UNIFIED_IDEOGRAPH-31676> \xF0\xB1\x99\xB6
+<CJK_UNIFIED_IDEOGRAPH-31677> \xF0\xB1\x99\xB7
+<CJK_UNIFIED_IDEOGRAPH-31678> \xF0\xB1\x99\xB8
+<CJK_UNIFIED_IDEOGRAPH-31679> \xF0\xB1\x99\xB9
+<CJK_UNIFIED_IDEOGRAPH-3167A> \xF0\xB1\x99\xBA
+<CJK_UNIFIED_IDEOGRAPH-3167B> \xF0\xB1\x99\xBB
+<CJK_UNIFIED_IDEOGRAPH-3167C> \xF0\xB1\x99\xBC
+<CJK_UNIFIED_IDEOGRAPH-3167D> \xF0\xB1\x99\xBD
+<CJK_UNIFIED_IDEOGRAPH-3167E> \xF0\xB1\x99\xBE
+<CJK_UNIFIED_IDEOGRAPH-3167F> \xF0\xB1\x99\xBF
+<CJK_UNIFIED_IDEOGRAPH-31680> \xF0\xB1\x9A\x80
+<CJK_UNIFIED_IDEOGRAPH-31681> \xF0\xB1\x9A\x81
+<CJK_UNIFIED_IDEOGRAPH-31682> \xF0\xB1\x9A\x82
+<CJK_UNIFIED_IDEOGRAPH-31683> \xF0\xB1\x9A\x83
+<CJK_UNIFIED_IDEOGRAPH-31684> \xF0\xB1\x9A\x84
+<CJK_UNIFIED_IDEOGRAPH-31685> \xF0\xB1\x9A\x85
+<CJK_UNIFIED_IDEOGRAPH-31686> \xF0\xB1\x9A\x86
+<CJK_UNIFIED_IDEOGRAPH-31687> \xF0\xB1\x9A\x87
+<CJK_UNIFIED_IDEOGRAPH-31688> \xF0\xB1\x9A\x88
+<CJK_UNIFIED_IDEOGRAPH-31689> \xF0\xB1\x9A\x89
+<CJK_UNIFIED_IDEOGRAPH-3168A> \xF0\xB1\x9A\x8A
+<CJK_UNIFIED_IDEOGRAPH-3168B> \xF0\xB1\x9A\x8B
+<CJK_UNIFIED_IDEOGRAPH-3168C> \xF0\xB1\x9A\x8C
+<CJK_UNIFIED_IDEOGRAPH-3168D> \xF0\xB1\x9A\x8D
+<CJK_UNIFIED_IDEOGRAPH-3168E> \xF0\xB1\x9A\x8E
+<CJK_UNIFIED_IDEOGRAPH-3168F> \xF0\xB1\x9A\x8F
+<CJK_UNIFIED_IDEOGRAPH-31690> \xF0\xB1\x9A\x90
+<CJK_UNIFIED_IDEOGRAPH-31691> \xF0\xB1\x9A\x91
+<CJK_UNIFIED_IDEOGRAPH-31692> \xF0\xB1\x9A\x92
+<CJK_UNIFIED_IDEOGRAPH-31693> \xF0\xB1\x9A\x93
+<CJK_UNIFIED_IDEOGRAPH-31694> \xF0\xB1\x9A\x94
+<CJK_UNIFIED_IDEOGRAPH-31695> \xF0\xB1\x9A\x95
+<CJK_UNIFIED_IDEOGRAPH-31696> \xF0\xB1\x9A\x96
+<CJK_UNIFIED_IDEOGRAPH-31697> \xF0\xB1\x9A\x97
+<CJK_UNIFIED_IDEOGRAPH-31698> \xF0\xB1\x9A\x98
+<CJK_UNIFIED_IDEOGRAPH-31699> \xF0\xB1\x9A\x99
+<CJK_UNIFIED_IDEOGRAPH-3169A> \xF0\xB1\x9A\x9A
+<CJK_UNIFIED_IDEOGRAPH-3169B> \xF0\xB1\x9A\x9B
+<CJK_UNIFIED_IDEOGRAPH-3169C> \xF0\xB1\x9A\x9C
+<CJK_UNIFIED_IDEOGRAPH-3169D> \xF0\xB1\x9A\x9D
+<CJK_UNIFIED_IDEOGRAPH-3169E> \xF0\xB1\x9A\x9E
+<CJK_UNIFIED_IDEOGRAPH-3169F> \xF0\xB1\x9A\x9F
+<CJK_UNIFIED_IDEOGRAPH-316A0> \xF0\xB1\x9A\xA0
+<CJK_UNIFIED_IDEOGRAPH-316A1> \xF0\xB1\x9A\xA1
+<CJK_UNIFIED_IDEOGRAPH-316A2> \xF0\xB1\x9A\xA2
+<CJK_UNIFIED_IDEOGRAPH-316A3> \xF0\xB1\x9A\xA3
+<CJK_UNIFIED_IDEOGRAPH-316A4> \xF0\xB1\x9A\xA4
+<CJK_UNIFIED_IDEOGRAPH-316A5> \xF0\xB1\x9A\xA5
+<CJK_UNIFIED_IDEOGRAPH-316A6> \xF0\xB1\x9A\xA6
+<CJK_UNIFIED_IDEOGRAPH-316A7> \xF0\xB1\x9A\xA7
+<CJK_UNIFIED_IDEOGRAPH-316A8> \xF0\xB1\x9A\xA8
+<CJK_UNIFIED_IDEOGRAPH-316A9> \xF0\xB1\x9A\xA9
+<CJK_UNIFIED_IDEOGRAPH-316AA> \xF0\xB1\x9A\xAA
+<CJK_UNIFIED_IDEOGRAPH-316AB> \xF0\xB1\x9A\xAB
+<CJK_UNIFIED_IDEOGRAPH-316AC> \xF0\xB1\x9A\xAC
+<CJK_UNIFIED_IDEOGRAPH-316AD> \xF0\xB1\x9A\xAD
+<CJK_UNIFIED_IDEOGRAPH-316AE> \xF0\xB1\x9A\xAE
+<CJK_UNIFIED_IDEOGRAPH-316AF> \xF0\xB1\x9A\xAF
+<CJK_UNIFIED_IDEOGRAPH-316B0> \xF0\xB1\x9A\xB0
+<CJK_UNIFIED_IDEOGRAPH-316B1> \xF0\xB1\x9A\xB1
+<CJK_UNIFIED_IDEOGRAPH-316B2> \xF0\xB1\x9A\xB2
+<CJK_UNIFIED_IDEOGRAPH-316B3> \xF0\xB1\x9A\xB3
+<CJK_UNIFIED_IDEOGRAPH-316B4> \xF0\xB1\x9A\xB4
+<CJK_UNIFIED_IDEOGRAPH-316B5> \xF0\xB1\x9A\xB5
+<CJK_UNIFIED_IDEOGRAPH-316B6> \xF0\xB1\x9A\xB6
+<CJK_UNIFIED_IDEOGRAPH-316B7> \xF0\xB1\x9A\xB7
+<CJK_UNIFIED_IDEOGRAPH-316B8> \xF0\xB1\x9A\xB8
+<CJK_UNIFIED_IDEOGRAPH-316B9> \xF0\xB1\x9A\xB9
+<CJK_UNIFIED_IDEOGRAPH-316BA> \xF0\xB1\x9A\xBA
+<CJK_UNIFIED_IDEOGRAPH-316BB> \xF0\xB1\x9A\xBB
+<CJK_UNIFIED_IDEOGRAPH-316BC> \xF0\xB1\x9A\xBC
+<CJK_UNIFIED_IDEOGRAPH-316BD> \xF0\xB1\x9A\xBD
+<CJK_UNIFIED_IDEOGRAPH-316BE> \xF0\xB1\x9A\xBE
+<CJK_UNIFIED_IDEOGRAPH-316BF> \xF0\xB1\x9A\xBF
+<CJK_UNIFIED_IDEOGRAPH-316C0> \xF0\xB1\x9B\x80
+<CJK_UNIFIED_IDEOGRAPH-316C1> \xF0\xB1\x9B\x81
+<CJK_UNIFIED_IDEOGRAPH-316C2> \xF0\xB1\x9B\x82
+<CJK_UNIFIED_IDEOGRAPH-316C3> \xF0\xB1\x9B\x83
+<CJK_UNIFIED_IDEOGRAPH-316C4> \xF0\xB1\x9B\x84
+<CJK_UNIFIED_IDEOGRAPH-316C5> \xF0\xB1\x9B\x85
+<CJK_UNIFIED_IDEOGRAPH-316C6> \xF0\xB1\x9B\x86
+<CJK_UNIFIED_IDEOGRAPH-316C7> \xF0\xB1\x9B\x87
+<CJK_UNIFIED_IDEOGRAPH-316C8> \xF0\xB1\x9B\x88
+<CJK_UNIFIED_IDEOGRAPH-316C9> \xF0\xB1\x9B\x89
+<CJK_UNIFIED_IDEOGRAPH-316CA> \xF0\xB1\x9B\x8A
+<CJK_UNIFIED_IDEOGRAPH-316CB> \xF0\xB1\x9B\x8B
+<CJK_UNIFIED_IDEOGRAPH-316CC> \xF0\xB1\x9B\x8C
+<CJK_UNIFIED_IDEOGRAPH-316CD> \xF0\xB1\x9B\x8D
+<CJK_UNIFIED_IDEOGRAPH-316CE> \xF0\xB1\x9B\x8E
+<CJK_UNIFIED_IDEOGRAPH-316CF> \xF0\xB1\x9B\x8F
+<CJK_UNIFIED_IDEOGRAPH-316D0> \xF0\xB1\x9B\x90
+<CJK_UNIFIED_IDEOGRAPH-316D1> \xF0\xB1\x9B\x91
+<CJK_UNIFIED_IDEOGRAPH-316D2> \xF0\xB1\x9B\x92
+<CJK_UNIFIED_IDEOGRAPH-316D3> \xF0\xB1\x9B\x93
+<CJK_UNIFIED_IDEOGRAPH-316D4> \xF0\xB1\x9B\x94
+<CJK_UNIFIED_IDEOGRAPH-316D5> \xF0\xB1\x9B\x95
+<CJK_UNIFIED_IDEOGRAPH-316D6> \xF0\xB1\x9B\x96
+<CJK_UNIFIED_IDEOGRAPH-316D7> \xF0\xB1\x9B\x97
+<CJK_UNIFIED_IDEOGRAPH-316D8> \xF0\xB1\x9B\x98
+<CJK_UNIFIED_IDEOGRAPH-316D9> \xF0\xB1\x9B\x99
+<CJK_UNIFIED_IDEOGRAPH-316DA> \xF0\xB1\x9B\x9A
+<CJK_UNIFIED_IDEOGRAPH-316DB> \xF0\xB1\x9B\x9B
+<CJK_UNIFIED_IDEOGRAPH-316DC> \xF0\xB1\x9B\x9C
+<CJK_UNIFIED_IDEOGRAPH-316DD> \xF0\xB1\x9B\x9D
+<CJK_UNIFIED_IDEOGRAPH-316DE> \xF0\xB1\x9B\x9E
+<CJK_UNIFIED_IDEOGRAPH-316DF> \xF0\xB1\x9B\x9F
+<CJK_UNIFIED_IDEOGRAPH-316E0> \xF0\xB1\x9B\xA0
+<CJK_UNIFIED_IDEOGRAPH-316E1> \xF0\xB1\x9B\xA1
+<CJK_UNIFIED_IDEOGRAPH-316E2> \xF0\xB1\x9B\xA2
+<CJK_UNIFIED_IDEOGRAPH-316E3> \xF0\xB1\x9B\xA3
+<CJK_UNIFIED_IDEOGRAPH-316E4> \xF0\xB1\x9B\xA4
+<CJK_UNIFIED_IDEOGRAPH-316E5> \xF0\xB1\x9B\xA5
+<CJK_UNIFIED_IDEOGRAPH-316E6> \xF0\xB1\x9B\xA6
+<CJK_UNIFIED_IDEOGRAPH-316E7> \xF0\xB1\x9B\xA7
+<CJK_UNIFIED_IDEOGRAPH-316E8> \xF0\xB1\x9B\xA8
+<CJK_UNIFIED_IDEOGRAPH-316E9> \xF0\xB1\x9B\xA9
+<CJK_UNIFIED_IDEOGRAPH-316EA> \xF0\xB1\x9B\xAA
+<CJK_UNIFIED_IDEOGRAPH-316EB> \xF0\xB1\x9B\xAB
+<CJK_UNIFIED_IDEOGRAPH-316EC> \xF0\xB1\x9B\xAC
+<CJK_UNIFIED_IDEOGRAPH-316ED> \xF0\xB1\x9B\xAD
+<CJK_UNIFIED_IDEOGRAPH-316EE> \xF0\xB1\x9B\xAE
+<CJK_UNIFIED_IDEOGRAPH-316EF> \xF0\xB1\x9B\xAF
+<CJK_UNIFIED_IDEOGRAPH-316F0> \xF0\xB1\x9B\xB0
+<CJK_UNIFIED_IDEOGRAPH-316F1> \xF0\xB1\x9B\xB1
+<CJK_UNIFIED_IDEOGRAPH-316F2> \xF0\xB1\x9B\xB2
+<CJK_UNIFIED_IDEOGRAPH-316F3> \xF0\xB1\x9B\xB3
+<CJK_UNIFIED_IDEOGRAPH-316F4> \xF0\xB1\x9B\xB4
+<CJK_UNIFIED_IDEOGRAPH-316F5> \xF0\xB1\x9B\xB5
+<CJK_UNIFIED_IDEOGRAPH-316F6> \xF0\xB1\x9B\xB6
+<CJK_UNIFIED_IDEOGRAPH-316F7> \xF0\xB1\x9B\xB7
+<CJK_UNIFIED_IDEOGRAPH-316F8> \xF0\xB1\x9B\xB8
+<CJK_UNIFIED_IDEOGRAPH-316F9> \xF0\xB1\x9B\xB9
+<CJK_UNIFIED_IDEOGRAPH-316FA> \xF0\xB1\x9B\xBA
+<CJK_UNIFIED_IDEOGRAPH-316FB> \xF0\xB1\x9B\xBB
+<CJK_UNIFIED_IDEOGRAPH-316FC> \xF0\xB1\x9B\xBC
+<CJK_UNIFIED_IDEOGRAPH-316FD> \xF0\xB1\x9B\xBD
+<CJK_UNIFIED_IDEOGRAPH-316FE> \xF0\xB1\x9B\xBE
+<CJK_UNIFIED_IDEOGRAPH-316FF> \xF0\xB1\x9B\xBF
+<CJK_UNIFIED_IDEOGRAPH-31700> \xF0\xB1\x9C\x80
+<CJK_UNIFIED_IDEOGRAPH-31701> \xF0\xB1\x9C\x81
+<CJK_UNIFIED_IDEOGRAPH-31702> \xF0\xB1\x9C\x82
+<CJK_UNIFIED_IDEOGRAPH-31703> \xF0\xB1\x9C\x83
+<CJK_UNIFIED_IDEOGRAPH-31704> \xF0\xB1\x9C\x84
+<CJK_UNIFIED_IDEOGRAPH-31705> \xF0\xB1\x9C\x85
+<CJK_UNIFIED_IDEOGRAPH-31706> \xF0\xB1\x9C\x86
+<CJK_UNIFIED_IDEOGRAPH-31707> \xF0\xB1\x9C\x87
+<CJK_UNIFIED_IDEOGRAPH-31708> \xF0\xB1\x9C\x88
+<CJK_UNIFIED_IDEOGRAPH-31709> \xF0\xB1\x9C\x89
+<CJK_UNIFIED_IDEOGRAPH-3170A> \xF0\xB1\x9C\x8A
+<CJK_UNIFIED_IDEOGRAPH-3170B> \xF0\xB1\x9C\x8B
+<CJK_UNIFIED_IDEOGRAPH-3170C> \xF0\xB1\x9C\x8C
+<CJK_UNIFIED_IDEOGRAPH-3170D> \xF0\xB1\x9C\x8D
+<CJK_UNIFIED_IDEOGRAPH-3170E> \xF0\xB1\x9C\x8E
+<CJK_UNIFIED_IDEOGRAPH-3170F> \xF0\xB1\x9C\x8F
+<CJK_UNIFIED_IDEOGRAPH-31710> \xF0\xB1\x9C\x90
+<CJK_UNIFIED_IDEOGRAPH-31711> \xF0\xB1\x9C\x91
+<CJK_UNIFIED_IDEOGRAPH-31712> \xF0\xB1\x9C\x92
+<CJK_UNIFIED_IDEOGRAPH-31713> \xF0\xB1\x9C\x93
+<CJK_UNIFIED_IDEOGRAPH-31714> \xF0\xB1\x9C\x94
+<CJK_UNIFIED_IDEOGRAPH-31715> \xF0\xB1\x9C\x95
+<CJK_UNIFIED_IDEOGRAPH-31716> \xF0\xB1\x9C\x96
+<CJK_UNIFIED_IDEOGRAPH-31717> \xF0\xB1\x9C\x97
+<CJK_UNIFIED_IDEOGRAPH-31718> \xF0\xB1\x9C\x98
+<CJK_UNIFIED_IDEOGRAPH-31719> \xF0\xB1\x9C\x99
+<CJK_UNIFIED_IDEOGRAPH-3171A> \xF0\xB1\x9C\x9A
+<CJK_UNIFIED_IDEOGRAPH-3171B> \xF0\xB1\x9C\x9B
+<CJK_UNIFIED_IDEOGRAPH-3171C> \xF0\xB1\x9C\x9C
+<CJK_UNIFIED_IDEOGRAPH-3171D> \xF0\xB1\x9C\x9D
+<CJK_UNIFIED_IDEOGRAPH-3171E> \xF0\xB1\x9C\x9E
+<CJK_UNIFIED_IDEOGRAPH-3171F> \xF0\xB1\x9C\x9F
+<CJK_UNIFIED_IDEOGRAPH-31720> \xF0\xB1\x9C\xA0
+<CJK_UNIFIED_IDEOGRAPH-31721> \xF0\xB1\x9C\xA1
+<CJK_UNIFIED_IDEOGRAPH-31722> \xF0\xB1\x9C\xA2
+<CJK_UNIFIED_IDEOGRAPH-31723> \xF0\xB1\x9C\xA3
+<CJK_UNIFIED_IDEOGRAPH-31724> \xF0\xB1\x9C\xA4
+<CJK_UNIFIED_IDEOGRAPH-31725> \xF0\xB1\x9C\xA5
+<CJK_UNIFIED_IDEOGRAPH-31726> \xF0\xB1\x9C\xA6
+<CJK_UNIFIED_IDEOGRAPH-31727> \xF0\xB1\x9C\xA7
+<CJK_UNIFIED_IDEOGRAPH-31728> \xF0\xB1\x9C\xA8
+<CJK_UNIFIED_IDEOGRAPH-31729> \xF0\xB1\x9C\xA9
+<CJK_UNIFIED_IDEOGRAPH-3172A> \xF0\xB1\x9C\xAA
+<CJK_UNIFIED_IDEOGRAPH-3172B> \xF0\xB1\x9C\xAB
+<CJK_UNIFIED_IDEOGRAPH-3172C> \xF0\xB1\x9C\xAC
+<CJK_UNIFIED_IDEOGRAPH-3172D> \xF0\xB1\x9C\xAD
+<CJK_UNIFIED_IDEOGRAPH-3172E> \xF0\xB1\x9C\xAE
+<CJK_UNIFIED_IDEOGRAPH-3172F> \xF0\xB1\x9C\xAF
+<CJK_UNIFIED_IDEOGRAPH-31730> \xF0\xB1\x9C\xB0
+<CJK_UNIFIED_IDEOGRAPH-31731> \xF0\xB1\x9C\xB1
+<CJK_UNIFIED_IDEOGRAPH-31732> \xF0\xB1\x9C\xB2
+<CJK_UNIFIED_IDEOGRAPH-31733> \xF0\xB1\x9C\xB3
+<CJK_UNIFIED_IDEOGRAPH-31734> \xF0\xB1\x9C\xB4
+<CJK_UNIFIED_IDEOGRAPH-31735> \xF0\xB1\x9C\xB5
+<CJK_UNIFIED_IDEOGRAPH-31736> \xF0\xB1\x9C\xB6
+<CJK_UNIFIED_IDEOGRAPH-31737> \xF0\xB1\x9C\xB7
+<CJK_UNIFIED_IDEOGRAPH-31738> \xF0\xB1\x9C\xB8
+<CJK_UNIFIED_IDEOGRAPH-31739> \xF0\xB1\x9C\xB9
+<CJK_UNIFIED_IDEOGRAPH-3173A> \xF0\xB1\x9C\xBA
+<CJK_UNIFIED_IDEOGRAPH-3173B> \xF0\xB1\x9C\xBB
+<CJK_UNIFIED_IDEOGRAPH-3173C> \xF0\xB1\x9C\xBC
+<CJK_UNIFIED_IDEOGRAPH-3173D> \xF0\xB1\x9C\xBD
+<CJK_UNIFIED_IDEOGRAPH-3173E> \xF0\xB1\x9C\xBE
+<CJK_UNIFIED_IDEOGRAPH-3173F> \xF0\xB1\x9C\xBF
+<CJK_UNIFIED_IDEOGRAPH-31740> \xF0\xB1\x9D\x80
+<CJK_UNIFIED_IDEOGRAPH-31741> \xF0\xB1\x9D\x81
+<CJK_UNIFIED_IDEOGRAPH-31742> \xF0\xB1\x9D\x82
+<CJK_UNIFIED_IDEOGRAPH-31743> \xF0\xB1\x9D\x83
+<CJK_UNIFIED_IDEOGRAPH-31744> \xF0\xB1\x9D\x84
+<CJK_UNIFIED_IDEOGRAPH-31745> \xF0\xB1\x9D\x85
+<CJK_UNIFIED_IDEOGRAPH-31746> \xF0\xB1\x9D\x86
+<CJK_UNIFIED_IDEOGRAPH-31747> \xF0\xB1\x9D\x87
+<CJK_UNIFIED_IDEOGRAPH-31748> \xF0\xB1\x9D\x88
+<CJK_UNIFIED_IDEOGRAPH-31749> \xF0\xB1\x9D\x89
+<CJK_UNIFIED_IDEOGRAPH-3174A> \xF0\xB1\x9D\x8A
+<CJK_UNIFIED_IDEOGRAPH-3174B> \xF0\xB1\x9D\x8B
+<CJK_UNIFIED_IDEOGRAPH-3174C> \xF0\xB1\x9D\x8C
+<CJK_UNIFIED_IDEOGRAPH-3174D> \xF0\xB1\x9D\x8D
+<CJK_UNIFIED_IDEOGRAPH-3174E> \xF0\xB1\x9D\x8E
+<CJK_UNIFIED_IDEOGRAPH-3174F> \xF0\xB1\x9D\x8F
+<CJK_UNIFIED_IDEOGRAPH-31750> \xF0\xB1\x9D\x90
+<CJK_UNIFIED_IDEOGRAPH-31751> \xF0\xB1\x9D\x91
+<CJK_UNIFIED_IDEOGRAPH-31752> \xF0\xB1\x9D\x92
+<CJK_UNIFIED_IDEOGRAPH-31753> \xF0\xB1\x9D\x93
+<CJK_UNIFIED_IDEOGRAPH-31754> \xF0\xB1\x9D\x94
+<CJK_UNIFIED_IDEOGRAPH-31755> \xF0\xB1\x9D\x95
+<CJK_UNIFIED_IDEOGRAPH-31756> \xF0\xB1\x9D\x96
+<CJK_UNIFIED_IDEOGRAPH-31757> \xF0\xB1\x9D\x97
+<CJK_UNIFIED_IDEOGRAPH-31758> \xF0\xB1\x9D\x98
+<CJK_UNIFIED_IDEOGRAPH-31759> \xF0\xB1\x9D\x99
+<CJK_UNIFIED_IDEOGRAPH-3175A> \xF0\xB1\x9D\x9A
+<CJK_UNIFIED_IDEOGRAPH-3175B> \xF0\xB1\x9D\x9B
+<CJK_UNIFIED_IDEOGRAPH-3175C> \xF0\xB1\x9D\x9C
+<CJK_UNIFIED_IDEOGRAPH-3175D> \xF0\xB1\x9D\x9D
+<CJK_UNIFIED_IDEOGRAPH-3175E> \xF0\xB1\x9D\x9E
+<CJK_UNIFIED_IDEOGRAPH-3175F> \xF0\xB1\x9D\x9F
+<CJK_UNIFIED_IDEOGRAPH-31760> \xF0\xB1\x9D\xA0
+<CJK_UNIFIED_IDEOGRAPH-31761> \xF0\xB1\x9D\xA1
+<CJK_UNIFIED_IDEOGRAPH-31762> \xF0\xB1\x9D\xA2
+<CJK_UNIFIED_IDEOGRAPH-31763> \xF0\xB1\x9D\xA3
+<CJK_UNIFIED_IDEOGRAPH-31764> \xF0\xB1\x9D\xA4
+<CJK_UNIFIED_IDEOGRAPH-31765> \xF0\xB1\x9D\xA5
+<CJK_UNIFIED_IDEOGRAPH-31766> \xF0\xB1\x9D\xA6
+<CJK_UNIFIED_IDEOGRAPH-31767> \xF0\xB1\x9D\xA7
+<CJK_UNIFIED_IDEOGRAPH-31768> \xF0\xB1\x9D\xA8
+<CJK_UNIFIED_IDEOGRAPH-31769> \xF0\xB1\x9D\xA9
+<CJK_UNIFIED_IDEOGRAPH-3176A> \xF0\xB1\x9D\xAA
+<CJK_UNIFIED_IDEOGRAPH-3176B> \xF0\xB1\x9D\xAB
+<CJK_UNIFIED_IDEOGRAPH-3176C> \xF0\xB1\x9D\xAC
+<CJK_UNIFIED_IDEOGRAPH-3176D> \xF0\xB1\x9D\xAD
+<CJK_UNIFIED_IDEOGRAPH-3176E> \xF0\xB1\x9D\xAE
+<CJK_UNIFIED_IDEOGRAPH-3176F> \xF0\xB1\x9D\xAF
+<CJK_UNIFIED_IDEOGRAPH-31770> \xF0\xB1\x9D\xB0
+<CJK_UNIFIED_IDEOGRAPH-31771> \xF0\xB1\x9D\xB1
+<CJK_UNIFIED_IDEOGRAPH-31772> \xF0\xB1\x9D\xB2
+<CJK_UNIFIED_IDEOGRAPH-31773> \xF0\xB1\x9D\xB3
+<CJK_UNIFIED_IDEOGRAPH-31774> \xF0\xB1\x9D\xB4
+<CJK_UNIFIED_IDEOGRAPH-31775> \xF0\xB1\x9D\xB5
+<CJK_UNIFIED_IDEOGRAPH-31776> \xF0\xB1\x9D\xB6
+<CJK_UNIFIED_IDEOGRAPH-31777> \xF0\xB1\x9D\xB7
+<CJK_UNIFIED_IDEOGRAPH-31778> \xF0\xB1\x9D\xB8
+<CJK_UNIFIED_IDEOGRAPH-31779> \xF0\xB1\x9D\xB9
+<CJK_UNIFIED_IDEOGRAPH-3177A> \xF0\xB1\x9D\xBA
+<CJK_UNIFIED_IDEOGRAPH-3177B> \xF0\xB1\x9D\xBB
+<CJK_UNIFIED_IDEOGRAPH-3177C> \xF0\xB1\x9D\xBC
+<CJK_UNIFIED_IDEOGRAPH-3177D> \xF0\xB1\x9D\xBD
+<CJK_UNIFIED_IDEOGRAPH-3177E> \xF0\xB1\x9D\xBE
+<CJK_UNIFIED_IDEOGRAPH-3177F> \xF0\xB1\x9D\xBF
+<CJK_UNIFIED_IDEOGRAPH-31780> \xF0\xB1\x9E\x80
+<CJK_UNIFIED_IDEOGRAPH-31781> \xF0\xB1\x9E\x81
+<CJK_UNIFIED_IDEOGRAPH-31782> \xF0\xB1\x9E\x82
+<CJK_UNIFIED_IDEOGRAPH-31783> \xF0\xB1\x9E\x83
+<CJK_UNIFIED_IDEOGRAPH-31784> \xF0\xB1\x9E\x84
+<CJK_UNIFIED_IDEOGRAPH-31785> \xF0\xB1\x9E\x85
+<CJK_UNIFIED_IDEOGRAPH-31786> \xF0\xB1\x9E\x86
+<CJK_UNIFIED_IDEOGRAPH-31787> \xF0\xB1\x9E\x87
+<CJK_UNIFIED_IDEOGRAPH-31788> \xF0\xB1\x9E\x88
+<CJK_UNIFIED_IDEOGRAPH-31789> \xF0\xB1\x9E\x89
+<CJK_UNIFIED_IDEOGRAPH-3178A> \xF0\xB1\x9E\x8A
+<CJK_UNIFIED_IDEOGRAPH-3178B> \xF0\xB1\x9E\x8B
+<CJK_UNIFIED_IDEOGRAPH-3178C> \xF0\xB1\x9E\x8C
+<CJK_UNIFIED_IDEOGRAPH-3178D> \xF0\xB1\x9E\x8D
+<CJK_UNIFIED_IDEOGRAPH-3178E> \xF0\xB1\x9E\x8E
+<CJK_UNIFIED_IDEOGRAPH-3178F> \xF0\xB1\x9E\x8F
+<CJK_UNIFIED_IDEOGRAPH-31790> \xF0\xB1\x9E\x90
+<CJK_UNIFIED_IDEOGRAPH-31791> \xF0\xB1\x9E\x91
+<CJK_UNIFIED_IDEOGRAPH-31792> \xF0\xB1\x9E\x92
+<CJK_UNIFIED_IDEOGRAPH-31793> \xF0\xB1\x9E\x93
+<CJK_UNIFIED_IDEOGRAPH-31794> \xF0\xB1\x9E\x94
+<CJK_UNIFIED_IDEOGRAPH-31795> \xF0\xB1\x9E\x95
+<CJK_UNIFIED_IDEOGRAPH-31796> \xF0\xB1\x9E\x96
+<CJK_UNIFIED_IDEOGRAPH-31797> \xF0\xB1\x9E\x97
+<CJK_UNIFIED_IDEOGRAPH-31798> \xF0\xB1\x9E\x98
+<CJK_UNIFIED_IDEOGRAPH-31799> \xF0\xB1\x9E\x99
+<CJK_UNIFIED_IDEOGRAPH-3179A> \xF0\xB1\x9E\x9A
+<CJK_UNIFIED_IDEOGRAPH-3179B> \xF0\xB1\x9E\x9B
+<CJK_UNIFIED_IDEOGRAPH-3179C> \xF0\xB1\x9E\x9C
+<CJK_UNIFIED_IDEOGRAPH-3179D> \xF0\xB1\x9E\x9D
+<CJK_UNIFIED_IDEOGRAPH-3179E> \xF0\xB1\x9E\x9E
+<CJK_UNIFIED_IDEOGRAPH-3179F> \xF0\xB1\x9E\x9F
+<CJK_UNIFIED_IDEOGRAPH-317A0> \xF0\xB1\x9E\xA0
+<CJK_UNIFIED_IDEOGRAPH-317A1> \xF0\xB1\x9E\xA1
+<CJK_UNIFIED_IDEOGRAPH-317A2> \xF0\xB1\x9E\xA2
+<CJK_UNIFIED_IDEOGRAPH-317A3> \xF0\xB1\x9E\xA3
+<CJK_UNIFIED_IDEOGRAPH-317A4> \xF0\xB1\x9E\xA4
+<CJK_UNIFIED_IDEOGRAPH-317A5> \xF0\xB1\x9E\xA5
+<CJK_UNIFIED_IDEOGRAPH-317A6> \xF0\xB1\x9E\xA6
+<CJK_UNIFIED_IDEOGRAPH-317A7> \xF0\xB1\x9E\xA7
+<CJK_UNIFIED_IDEOGRAPH-317A8> \xF0\xB1\x9E\xA8
+<CJK_UNIFIED_IDEOGRAPH-317A9> \xF0\xB1\x9E\xA9
+<CJK_UNIFIED_IDEOGRAPH-317AA> \xF0\xB1\x9E\xAA
+<CJK_UNIFIED_IDEOGRAPH-317AB> \xF0\xB1\x9E\xAB
+<CJK_UNIFIED_IDEOGRAPH-317AC> \xF0\xB1\x9E\xAC
+<CJK_UNIFIED_IDEOGRAPH-317AD> \xF0\xB1\x9E\xAD
+<CJK_UNIFIED_IDEOGRAPH-317AE> \xF0\xB1\x9E\xAE
+<CJK_UNIFIED_IDEOGRAPH-317AF> \xF0\xB1\x9E\xAF
+<CJK_UNIFIED_IDEOGRAPH-317B0> \xF0\xB1\x9E\xB0
+<CJK_UNIFIED_IDEOGRAPH-317B1> \xF0\xB1\x9E\xB1
+<CJK_UNIFIED_IDEOGRAPH-317B2> \xF0\xB1\x9E\xB2
+<CJK_UNIFIED_IDEOGRAPH-317B3> \xF0\xB1\x9E\xB3
+<CJK_UNIFIED_IDEOGRAPH-317B4> \xF0\xB1\x9E\xB4
+<CJK_UNIFIED_IDEOGRAPH-317B5> \xF0\xB1\x9E\xB5
+<CJK_UNIFIED_IDEOGRAPH-317B6> \xF0\xB1\x9E\xB6
+<CJK_UNIFIED_IDEOGRAPH-317B7> \xF0\xB1\x9E\xB7
+<CJK_UNIFIED_IDEOGRAPH-317B8> \xF0\xB1\x9E\xB8
+<CJK_UNIFIED_IDEOGRAPH-317B9> \xF0\xB1\x9E\xB9
+<CJK_UNIFIED_IDEOGRAPH-317BA> \xF0\xB1\x9E\xBA
+<CJK_UNIFIED_IDEOGRAPH-317BB> \xF0\xB1\x9E\xBB
+<CJK_UNIFIED_IDEOGRAPH-317BC> \xF0\xB1\x9E\xBC
+<CJK_UNIFIED_IDEOGRAPH-317BD> \xF0\xB1\x9E\xBD
+<CJK_UNIFIED_IDEOGRAPH-317BE> \xF0\xB1\x9E\xBE
+<CJK_UNIFIED_IDEOGRAPH-317BF> \xF0\xB1\x9E\xBF
+<CJK_UNIFIED_IDEOGRAPH-317C0> \xF0\xB1\x9F\x80
+<CJK_UNIFIED_IDEOGRAPH-317C1> \xF0\xB1\x9F\x81
+<CJK_UNIFIED_IDEOGRAPH-317C2> \xF0\xB1\x9F\x82
+<CJK_UNIFIED_IDEOGRAPH-317C3> \xF0\xB1\x9F\x83
+<CJK_UNIFIED_IDEOGRAPH-317C4> \xF0\xB1\x9F\x84
+<CJK_UNIFIED_IDEOGRAPH-317C5> \xF0\xB1\x9F\x85
+<CJK_UNIFIED_IDEOGRAPH-317C6> \xF0\xB1\x9F\x86
+<CJK_UNIFIED_IDEOGRAPH-317C7> \xF0\xB1\x9F\x87
+<CJK_UNIFIED_IDEOGRAPH-317C8> \xF0\xB1\x9F\x88
+<CJK_UNIFIED_IDEOGRAPH-317C9> \xF0\xB1\x9F\x89
+<CJK_UNIFIED_IDEOGRAPH-317CA> \xF0\xB1\x9F\x8A
+<CJK_UNIFIED_IDEOGRAPH-317CB> \xF0\xB1\x9F\x8B
+<CJK_UNIFIED_IDEOGRAPH-317CC> \xF0\xB1\x9F\x8C
+<CJK_UNIFIED_IDEOGRAPH-317CD> \xF0\xB1\x9F\x8D
+<CJK_UNIFIED_IDEOGRAPH-317CE> \xF0\xB1\x9F\x8E
+<CJK_UNIFIED_IDEOGRAPH-317CF> \xF0\xB1\x9F\x8F
+<CJK_UNIFIED_IDEOGRAPH-317D0> \xF0\xB1\x9F\x90
+<CJK_UNIFIED_IDEOGRAPH-317D1> \xF0\xB1\x9F\x91
+<CJK_UNIFIED_IDEOGRAPH-317D2> \xF0\xB1\x9F\x92
+<CJK_UNIFIED_IDEOGRAPH-317D3> \xF0\xB1\x9F\x93
+<CJK_UNIFIED_IDEOGRAPH-317D4> \xF0\xB1\x9F\x94
+<CJK_UNIFIED_IDEOGRAPH-317D5> \xF0\xB1\x9F\x95
+<CJK_UNIFIED_IDEOGRAPH-317D6> \xF0\xB1\x9F\x96
+<CJK_UNIFIED_IDEOGRAPH-317D7> \xF0\xB1\x9F\x97
+<CJK_UNIFIED_IDEOGRAPH-317D8> \xF0\xB1\x9F\x98
+<CJK_UNIFIED_IDEOGRAPH-317D9> \xF0\xB1\x9F\x99
+<CJK_UNIFIED_IDEOGRAPH-317DA> \xF0\xB1\x9F\x9A
+<CJK_UNIFIED_IDEOGRAPH-317DB> \xF0\xB1\x9F\x9B
+<CJK_UNIFIED_IDEOGRAPH-317DC> \xF0\xB1\x9F\x9C
+<CJK_UNIFIED_IDEOGRAPH-317DD> \xF0\xB1\x9F\x9D
+<CJK_UNIFIED_IDEOGRAPH-317DE> \xF0\xB1\x9F\x9E
+<CJK_UNIFIED_IDEOGRAPH-317DF> \xF0\xB1\x9F\x9F
+<CJK_UNIFIED_IDEOGRAPH-317E0> \xF0\xB1\x9F\xA0
+<CJK_UNIFIED_IDEOGRAPH-317E1> \xF0\xB1\x9F\xA1
+<CJK_UNIFIED_IDEOGRAPH-317E2> \xF0\xB1\x9F\xA2
+<CJK_UNIFIED_IDEOGRAPH-317E3> \xF0\xB1\x9F\xA3
+<CJK_UNIFIED_IDEOGRAPH-317E4> \xF0\xB1\x9F\xA4
+<CJK_UNIFIED_IDEOGRAPH-317E5> \xF0\xB1\x9F\xA5
+<CJK_UNIFIED_IDEOGRAPH-317E6> \xF0\xB1\x9F\xA6
+<CJK_UNIFIED_IDEOGRAPH-317E7> \xF0\xB1\x9F\xA7
+<CJK_UNIFIED_IDEOGRAPH-317E8> \xF0\xB1\x9F\xA8
+<CJK_UNIFIED_IDEOGRAPH-317E9> \xF0\xB1\x9F\xA9
+<CJK_UNIFIED_IDEOGRAPH-317EA> \xF0\xB1\x9F\xAA
+<CJK_UNIFIED_IDEOGRAPH-317EB> \xF0\xB1\x9F\xAB
+<CJK_UNIFIED_IDEOGRAPH-317EC> \xF0\xB1\x9F\xAC
+<CJK_UNIFIED_IDEOGRAPH-317ED> \xF0\xB1\x9F\xAD
+<CJK_UNIFIED_IDEOGRAPH-317EE> \xF0\xB1\x9F\xAE
+<CJK_UNIFIED_IDEOGRAPH-317EF> \xF0\xB1\x9F\xAF
+<CJK_UNIFIED_IDEOGRAPH-317F0> \xF0\xB1\x9F\xB0
+<CJK_UNIFIED_IDEOGRAPH-317F1> \xF0\xB1\x9F\xB1
+<CJK_UNIFIED_IDEOGRAPH-317F2> \xF0\xB1\x9F\xB2
+<CJK_UNIFIED_IDEOGRAPH-317F3> \xF0\xB1\x9F\xB3
+<CJK_UNIFIED_IDEOGRAPH-317F4> \xF0\xB1\x9F\xB4
+<CJK_UNIFIED_IDEOGRAPH-317F5> \xF0\xB1\x9F\xB5
+<CJK_UNIFIED_IDEOGRAPH-317F6> \xF0\xB1\x9F\xB6
+<CJK_UNIFIED_IDEOGRAPH-317F7> \xF0\xB1\x9F\xB7
+<CJK_UNIFIED_IDEOGRAPH-317F8> \xF0\xB1\x9F\xB8
+<CJK_UNIFIED_IDEOGRAPH-317F9> \xF0\xB1\x9F\xB9
+<CJK_UNIFIED_IDEOGRAPH-317FA> \xF0\xB1\x9F\xBA
+<CJK_UNIFIED_IDEOGRAPH-317FB> \xF0\xB1\x9F\xBB
+<CJK_UNIFIED_IDEOGRAPH-317FC> \xF0\xB1\x9F\xBC
+<CJK_UNIFIED_IDEOGRAPH-317FD> \xF0\xB1\x9F\xBD
+<CJK_UNIFIED_IDEOGRAPH-317FE> \xF0\xB1\x9F\xBE
+<CJK_UNIFIED_IDEOGRAPH-317FF> \xF0\xB1\x9F\xBF
+<CJK_UNIFIED_IDEOGRAPH-31800> \xF0\xB1\xA0\x80
+<CJK_UNIFIED_IDEOGRAPH-31801> \xF0\xB1\xA0\x81
+<CJK_UNIFIED_IDEOGRAPH-31802> \xF0\xB1\xA0\x82
+<CJK_UNIFIED_IDEOGRAPH-31803> \xF0\xB1\xA0\x83
+<CJK_UNIFIED_IDEOGRAPH-31804> \xF0\xB1\xA0\x84
+<CJK_UNIFIED_IDEOGRAPH-31805> \xF0\xB1\xA0\x85
+<CJK_UNIFIED_IDEOGRAPH-31806> \xF0\xB1\xA0\x86
+<CJK_UNIFIED_IDEOGRAPH-31807> \xF0\xB1\xA0\x87
+<CJK_UNIFIED_IDEOGRAPH-31808> \xF0\xB1\xA0\x88
+<CJK_UNIFIED_IDEOGRAPH-31809> \xF0\xB1\xA0\x89
+<CJK_UNIFIED_IDEOGRAPH-3180A> \xF0\xB1\xA0\x8A
+<CJK_UNIFIED_IDEOGRAPH-3180B> \xF0\xB1\xA0\x8B
+<CJK_UNIFIED_IDEOGRAPH-3180C> \xF0\xB1\xA0\x8C
+<CJK_UNIFIED_IDEOGRAPH-3180D> \xF0\xB1\xA0\x8D
+<CJK_UNIFIED_IDEOGRAPH-3180E> \xF0\xB1\xA0\x8E
+<CJK_UNIFIED_IDEOGRAPH-3180F> \xF0\xB1\xA0\x8F
+<CJK_UNIFIED_IDEOGRAPH-31810> \xF0\xB1\xA0\x90
+<CJK_UNIFIED_IDEOGRAPH-31811> \xF0\xB1\xA0\x91
+<CJK_UNIFIED_IDEOGRAPH-31812> \xF0\xB1\xA0\x92
+<CJK_UNIFIED_IDEOGRAPH-31813> \xF0\xB1\xA0\x93
+<CJK_UNIFIED_IDEOGRAPH-31814> \xF0\xB1\xA0\x94
+<CJK_UNIFIED_IDEOGRAPH-31815> \xF0\xB1\xA0\x95
+<CJK_UNIFIED_IDEOGRAPH-31816> \xF0\xB1\xA0\x96
+<CJK_UNIFIED_IDEOGRAPH-31817> \xF0\xB1\xA0\x97
+<CJK_UNIFIED_IDEOGRAPH-31818> \xF0\xB1\xA0\x98
+<CJK_UNIFIED_IDEOGRAPH-31819> \xF0\xB1\xA0\x99
+<CJK_UNIFIED_IDEOGRAPH-3181A> \xF0\xB1\xA0\x9A
+<CJK_UNIFIED_IDEOGRAPH-3181B> \xF0\xB1\xA0\x9B
+<CJK_UNIFIED_IDEOGRAPH-3181C> \xF0\xB1\xA0\x9C
+<CJK_UNIFIED_IDEOGRAPH-3181D> \xF0\xB1\xA0\x9D
+<CJK_UNIFIED_IDEOGRAPH-3181E> \xF0\xB1\xA0\x9E
+<CJK_UNIFIED_IDEOGRAPH-3181F> \xF0\xB1\xA0\x9F
+<CJK_UNIFIED_IDEOGRAPH-31820> \xF0\xB1\xA0\xA0
+<CJK_UNIFIED_IDEOGRAPH-31821> \xF0\xB1\xA0\xA1
+<CJK_UNIFIED_IDEOGRAPH-31822> \xF0\xB1\xA0\xA2
+<CJK_UNIFIED_IDEOGRAPH-31823> \xF0\xB1\xA0\xA3
+<CJK_UNIFIED_IDEOGRAPH-31824> \xF0\xB1\xA0\xA4
+<CJK_UNIFIED_IDEOGRAPH-31825> \xF0\xB1\xA0\xA5
+<CJK_UNIFIED_IDEOGRAPH-31826> \xF0\xB1\xA0\xA6
+<CJK_UNIFIED_IDEOGRAPH-31827> \xF0\xB1\xA0\xA7
+<CJK_UNIFIED_IDEOGRAPH-31828> \xF0\xB1\xA0\xA8
+<CJK_UNIFIED_IDEOGRAPH-31829> \xF0\xB1\xA0\xA9
+<CJK_UNIFIED_IDEOGRAPH-3182A> \xF0\xB1\xA0\xAA
+<CJK_UNIFIED_IDEOGRAPH-3182B> \xF0\xB1\xA0\xAB
+<CJK_UNIFIED_IDEOGRAPH-3182C> \xF0\xB1\xA0\xAC
+<CJK_UNIFIED_IDEOGRAPH-3182D> \xF0\xB1\xA0\xAD
+<CJK_UNIFIED_IDEOGRAPH-3182E> \xF0\xB1\xA0\xAE
+<CJK_UNIFIED_IDEOGRAPH-3182F> \xF0\xB1\xA0\xAF
+<CJK_UNIFIED_IDEOGRAPH-31830> \xF0\xB1\xA0\xB0
+<CJK_UNIFIED_IDEOGRAPH-31831> \xF0\xB1\xA0\xB1
+<CJK_UNIFIED_IDEOGRAPH-31832> \xF0\xB1\xA0\xB2
+<CJK_UNIFIED_IDEOGRAPH-31833> \xF0\xB1\xA0\xB3
+<CJK_UNIFIED_IDEOGRAPH-31834> \xF0\xB1\xA0\xB4
+<CJK_UNIFIED_IDEOGRAPH-31835> \xF0\xB1\xA0\xB5
+<CJK_UNIFIED_IDEOGRAPH-31836> \xF0\xB1\xA0\xB6
+<CJK_UNIFIED_IDEOGRAPH-31837> \xF0\xB1\xA0\xB7
+<CJK_UNIFIED_IDEOGRAPH-31838> \xF0\xB1\xA0\xB8
+<CJK_UNIFIED_IDEOGRAPH-31839> \xF0\xB1\xA0\xB9
+<CJK_UNIFIED_IDEOGRAPH-3183A> \xF0\xB1\xA0\xBA
+<CJK_UNIFIED_IDEOGRAPH-3183B> \xF0\xB1\xA0\xBB
+<CJK_UNIFIED_IDEOGRAPH-3183C> \xF0\xB1\xA0\xBC
+<CJK_UNIFIED_IDEOGRAPH-3183D> \xF0\xB1\xA0\xBD
+<CJK_UNIFIED_IDEOGRAPH-3183E> \xF0\xB1\xA0\xBE
+<CJK_UNIFIED_IDEOGRAPH-3183F> \xF0\xB1\xA0\xBF
+<CJK_UNIFIED_IDEOGRAPH-31840> \xF0\xB1\xA1\x80
+<CJK_UNIFIED_IDEOGRAPH-31841> \xF0\xB1\xA1\x81
+<CJK_UNIFIED_IDEOGRAPH-31842> \xF0\xB1\xA1\x82
+<CJK_UNIFIED_IDEOGRAPH-31843> \xF0\xB1\xA1\x83
+<CJK_UNIFIED_IDEOGRAPH-31844> \xF0\xB1\xA1\x84
+<CJK_UNIFIED_IDEOGRAPH-31845> \xF0\xB1\xA1\x85
+<CJK_UNIFIED_IDEOGRAPH-31846> \xF0\xB1\xA1\x86
+<CJK_UNIFIED_IDEOGRAPH-31847> \xF0\xB1\xA1\x87
+<CJK_UNIFIED_IDEOGRAPH-31848> \xF0\xB1\xA1\x88
+<CJK_UNIFIED_IDEOGRAPH-31849> \xF0\xB1\xA1\x89
+<CJK_UNIFIED_IDEOGRAPH-3184A> \xF0\xB1\xA1\x8A
+<CJK_UNIFIED_IDEOGRAPH-3184B> \xF0\xB1\xA1\x8B
+<CJK_UNIFIED_IDEOGRAPH-3184C> \xF0\xB1\xA1\x8C
+<CJK_UNIFIED_IDEOGRAPH-3184D> \xF0\xB1\xA1\x8D
+<CJK_UNIFIED_IDEOGRAPH-3184E> \xF0\xB1\xA1\x8E
+<CJK_UNIFIED_IDEOGRAPH-3184F> \xF0\xB1\xA1\x8F
+<CJK_UNIFIED_IDEOGRAPH-31850> \xF0\xB1\xA1\x90
+<CJK_UNIFIED_IDEOGRAPH-31851> \xF0\xB1\xA1\x91
+<CJK_UNIFIED_IDEOGRAPH-31852> \xF0\xB1\xA1\x92
+<CJK_UNIFIED_IDEOGRAPH-31853> \xF0\xB1\xA1\x93
+<CJK_UNIFIED_IDEOGRAPH-31854> \xF0\xB1\xA1\x94
+<CJK_UNIFIED_IDEOGRAPH-31855> \xF0\xB1\xA1\x95
+<CJK_UNIFIED_IDEOGRAPH-31856> \xF0\xB1\xA1\x96
+<CJK_UNIFIED_IDEOGRAPH-31857> \xF0\xB1\xA1\x97
+<CJK_UNIFIED_IDEOGRAPH-31858> \xF0\xB1\xA1\x98
+<CJK_UNIFIED_IDEOGRAPH-31859> \xF0\xB1\xA1\x99
+<CJK_UNIFIED_IDEOGRAPH-3185A> \xF0\xB1\xA1\x9A
+<CJK_UNIFIED_IDEOGRAPH-3185B> \xF0\xB1\xA1\x9B
+<CJK_UNIFIED_IDEOGRAPH-3185C> \xF0\xB1\xA1\x9C
+<CJK_UNIFIED_IDEOGRAPH-3185D> \xF0\xB1\xA1\x9D
+<CJK_UNIFIED_IDEOGRAPH-3185E> \xF0\xB1\xA1\x9E
+<CJK_UNIFIED_IDEOGRAPH-3185F> \xF0\xB1\xA1\x9F
+<CJK_UNIFIED_IDEOGRAPH-31860> \xF0\xB1\xA1\xA0
+<CJK_UNIFIED_IDEOGRAPH-31861> \xF0\xB1\xA1\xA1
+<CJK_UNIFIED_IDEOGRAPH-31862> \xF0\xB1\xA1\xA2
+<CJK_UNIFIED_IDEOGRAPH-31863> \xF0\xB1\xA1\xA3
+<CJK_UNIFIED_IDEOGRAPH-31864> \xF0\xB1\xA1\xA4
+<CJK_UNIFIED_IDEOGRAPH-31865> \xF0\xB1\xA1\xA5
+<CJK_UNIFIED_IDEOGRAPH-31866> \xF0\xB1\xA1\xA6
+<CJK_UNIFIED_IDEOGRAPH-31867> \xF0\xB1\xA1\xA7
+<CJK_UNIFIED_IDEOGRAPH-31868> \xF0\xB1\xA1\xA8
+<CJK_UNIFIED_IDEOGRAPH-31869> \xF0\xB1\xA1\xA9
+<CJK_UNIFIED_IDEOGRAPH-3186A> \xF0\xB1\xA1\xAA
+<CJK_UNIFIED_IDEOGRAPH-3186B> \xF0\xB1\xA1\xAB
+<CJK_UNIFIED_IDEOGRAPH-3186C> \xF0\xB1\xA1\xAC
+<CJK_UNIFIED_IDEOGRAPH-3186D> \xF0\xB1\xA1\xAD
+<CJK_UNIFIED_IDEOGRAPH-3186E> \xF0\xB1\xA1\xAE
+<CJK_UNIFIED_IDEOGRAPH-3186F> \xF0\xB1\xA1\xAF
+<CJK_UNIFIED_IDEOGRAPH-31870> \xF0\xB1\xA1\xB0
+<CJK_UNIFIED_IDEOGRAPH-31871> \xF0\xB1\xA1\xB1
+<CJK_UNIFIED_IDEOGRAPH-31872> \xF0\xB1\xA1\xB2
+<CJK_UNIFIED_IDEOGRAPH-31873> \xF0\xB1\xA1\xB3
+<CJK_UNIFIED_IDEOGRAPH-31874> \xF0\xB1\xA1\xB4
+<CJK_UNIFIED_IDEOGRAPH-31875> \xF0\xB1\xA1\xB5
+<CJK_UNIFIED_IDEOGRAPH-31876> \xF0\xB1\xA1\xB6
+<CJK_UNIFIED_IDEOGRAPH-31877> \xF0\xB1\xA1\xB7
+<CJK_UNIFIED_IDEOGRAPH-31878> \xF0\xB1\xA1\xB8
+<CJK_UNIFIED_IDEOGRAPH-31879> \xF0\xB1\xA1\xB9
+<CJK_UNIFIED_IDEOGRAPH-3187A> \xF0\xB1\xA1\xBA
+<CJK_UNIFIED_IDEOGRAPH-3187B> \xF0\xB1\xA1\xBB
+<CJK_UNIFIED_IDEOGRAPH-3187C> \xF0\xB1\xA1\xBC
+<CJK_UNIFIED_IDEOGRAPH-3187D> \xF0\xB1\xA1\xBD
+<CJK_UNIFIED_IDEOGRAPH-3187E> \xF0\xB1\xA1\xBE
+<CJK_UNIFIED_IDEOGRAPH-3187F> \xF0\xB1\xA1\xBF
+<CJK_UNIFIED_IDEOGRAPH-31880> \xF0\xB1\xA2\x80
+<CJK_UNIFIED_IDEOGRAPH-31881> \xF0\xB1\xA2\x81
+<CJK_UNIFIED_IDEOGRAPH-31882> \xF0\xB1\xA2\x82
+<CJK_UNIFIED_IDEOGRAPH-31883> \xF0\xB1\xA2\x83
+<CJK_UNIFIED_IDEOGRAPH-31884> \xF0\xB1\xA2\x84
+<CJK_UNIFIED_IDEOGRAPH-31885> \xF0\xB1\xA2\x85
+<CJK_UNIFIED_IDEOGRAPH-31886> \xF0\xB1\xA2\x86
+<CJK_UNIFIED_IDEOGRAPH-31887> \xF0\xB1\xA2\x87
+<CJK_UNIFIED_IDEOGRAPH-31888> \xF0\xB1\xA2\x88
+<CJK_UNIFIED_IDEOGRAPH-31889> \xF0\xB1\xA2\x89
+<CJK_UNIFIED_IDEOGRAPH-3188A> \xF0\xB1\xA2\x8A
+<CJK_UNIFIED_IDEOGRAPH-3188B> \xF0\xB1\xA2\x8B
+<CJK_UNIFIED_IDEOGRAPH-3188C> \xF0\xB1\xA2\x8C
+<CJK_UNIFIED_IDEOGRAPH-3188D> \xF0\xB1\xA2\x8D
+<CJK_UNIFIED_IDEOGRAPH-3188E> \xF0\xB1\xA2\x8E
+<CJK_UNIFIED_IDEOGRAPH-3188F> \xF0\xB1\xA2\x8F
+<CJK_UNIFIED_IDEOGRAPH-31890> \xF0\xB1\xA2\x90
+<CJK_UNIFIED_IDEOGRAPH-31891> \xF0\xB1\xA2\x91
+<CJK_UNIFIED_IDEOGRAPH-31892> \xF0\xB1\xA2\x92
+<CJK_UNIFIED_IDEOGRAPH-31893> \xF0\xB1\xA2\x93
+<CJK_UNIFIED_IDEOGRAPH-31894> \xF0\xB1\xA2\x94
+<CJK_UNIFIED_IDEOGRAPH-31895> \xF0\xB1\xA2\x95
+<CJK_UNIFIED_IDEOGRAPH-31896> \xF0\xB1\xA2\x96
+<CJK_UNIFIED_IDEOGRAPH-31897> \xF0\xB1\xA2\x97
+<CJK_UNIFIED_IDEOGRAPH-31898> \xF0\xB1\xA2\x98
+<CJK_UNIFIED_IDEOGRAPH-31899> \xF0\xB1\xA2\x99
+<CJK_UNIFIED_IDEOGRAPH-3189A> \xF0\xB1\xA2\x9A
+<CJK_UNIFIED_IDEOGRAPH-3189B> \xF0\xB1\xA2\x9B
+<CJK_UNIFIED_IDEOGRAPH-3189C> \xF0\xB1\xA2\x9C
+<CJK_UNIFIED_IDEOGRAPH-3189D> \xF0\xB1\xA2\x9D
+<CJK_UNIFIED_IDEOGRAPH-3189E> \xF0\xB1\xA2\x9E
+<CJK_UNIFIED_IDEOGRAPH-3189F> \xF0\xB1\xA2\x9F
+<CJK_UNIFIED_IDEOGRAPH-318A0> \xF0\xB1\xA2\xA0
+<CJK_UNIFIED_IDEOGRAPH-318A1> \xF0\xB1\xA2\xA1
+<CJK_UNIFIED_IDEOGRAPH-318A2> \xF0\xB1\xA2\xA2
+<CJK_UNIFIED_IDEOGRAPH-318A3> \xF0\xB1\xA2\xA3
+<CJK_UNIFIED_IDEOGRAPH-318A4> \xF0\xB1\xA2\xA4
+<CJK_UNIFIED_IDEOGRAPH-318A5> \xF0\xB1\xA2\xA5
+<CJK_UNIFIED_IDEOGRAPH-318A6> \xF0\xB1\xA2\xA6
+<CJK_UNIFIED_IDEOGRAPH-318A7> \xF0\xB1\xA2\xA7
+<CJK_UNIFIED_IDEOGRAPH-318A8> \xF0\xB1\xA2\xA8
+<CJK_UNIFIED_IDEOGRAPH-318A9> \xF0\xB1\xA2\xA9
+<CJK_UNIFIED_IDEOGRAPH-318AA> \xF0\xB1\xA2\xAA
+<CJK_UNIFIED_IDEOGRAPH-318AB> \xF0\xB1\xA2\xAB
+<CJK_UNIFIED_IDEOGRAPH-318AC> \xF0\xB1\xA2\xAC
+<CJK_UNIFIED_IDEOGRAPH-318AD> \xF0\xB1\xA2\xAD
+<CJK_UNIFIED_IDEOGRAPH-318AE> \xF0\xB1\xA2\xAE
+<CJK_UNIFIED_IDEOGRAPH-318AF> \xF0\xB1\xA2\xAF
+<CJK_UNIFIED_IDEOGRAPH-318B0> \xF0\xB1\xA2\xB0
+<CJK_UNIFIED_IDEOGRAPH-318B1> \xF0\xB1\xA2\xB1
+<CJK_UNIFIED_IDEOGRAPH-318B2> \xF0\xB1\xA2\xB2
+<CJK_UNIFIED_IDEOGRAPH-318B3> \xF0\xB1\xA2\xB3
+<CJK_UNIFIED_IDEOGRAPH-318B4> \xF0\xB1\xA2\xB4
+<CJK_UNIFIED_IDEOGRAPH-318B5> \xF0\xB1\xA2\xB5
+<CJK_UNIFIED_IDEOGRAPH-318B6> \xF0\xB1\xA2\xB6
+<CJK_UNIFIED_IDEOGRAPH-318B7> \xF0\xB1\xA2\xB7
+<CJK_UNIFIED_IDEOGRAPH-318B8> \xF0\xB1\xA2\xB8
+<CJK_UNIFIED_IDEOGRAPH-318B9> \xF0\xB1\xA2\xB9
+<CJK_UNIFIED_IDEOGRAPH-318BA> \xF0\xB1\xA2\xBA
+<CJK_UNIFIED_IDEOGRAPH-318BB> \xF0\xB1\xA2\xBB
+<CJK_UNIFIED_IDEOGRAPH-318BC> \xF0\xB1\xA2\xBC
+<CJK_UNIFIED_IDEOGRAPH-318BD> \xF0\xB1\xA2\xBD
+<CJK_UNIFIED_IDEOGRAPH-318BE> \xF0\xB1\xA2\xBE
+<CJK_UNIFIED_IDEOGRAPH-318BF> \xF0\xB1\xA2\xBF
+<CJK_UNIFIED_IDEOGRAPH-318C0> \xF0\xB1\xA3\x80
+<CJK_UNIFIED_IDEOGRAPH-318C1> \xF0\xB1\xA3\x81
+<CJK_UNIFIED_IDEOGRAPH-318C2> \xF0\xB1\xA3\x82
+<CJK_UNIFIED_IDEOGRAPH-318C3> \xF0\xB1\xA3\x83
+<CJK_UNIFIED_IDEOGRAPH-318C4> \xF0\xB1\xA3\x84
+<CJK_UNIFIED_IDEOGRAPH-318C5> \xF0\xB1\xA3\x85
+<CJK_UNIFIED_IDEOGRAPH-318C6> \xF0\xB1\xA3\x86
+<CJK_UNIFIED_IDEOGRAPH-318C7> \xF0\xB1\xA3\x87
+<CJK_UNIFIED_IDEOGRAPH-318C8> \xF0\xB1\xA3\x88
+<CJK_UNIFIED_IDEOGRAPH-318C9> \xF0\xB1\xA3\x89
+<CJK_UNIFIED_IDEOGRAPH-318CA> \xF0\xB1\xA3\x8A
+<CJK_UNIFIED_IDEOGRAPH-318CB> \xF0\xB1\xA3\x8B
+<CJK_UNIFIED_IDEOGRAPH-318CC> \xF0\xB1\xA3\x8C
+<CJK_UNIFIED_IDEOGRAPH-318CD> \xF0\xB1\xA3\x8D
+<CJK_UNIFIED_IDEOGRAPH-318CE> \xF0\xB1\xA3\x8E
+<CJK_UNIFIED_IDEOGRAPH-318CF> \xF0\xB1\xA3\x8F
+<CJK_UNIFIED_IDEOGRAPH-318D0> \xF0\xB1\xA3\x90
+<CJK_UNIFIED_IDEOGRAPH-318D1> \xF0\xB1\xA3\x91
+<CJK_UNIFIED_IDEOGRAPH-318D2> \xF0\xB1\xA3\x92
+<CJK_UNIFIED_IDEOGRAPH-318D3> \xF0\xB1\xA3\x93
+<CJK_UNIFIED_IDEOGRAPH-318D4> \xF0\xB1\xA3\x94
+<CJK_UNIFIED_IDEOGRAPH-318D5> \xF0\xB1\xA3\x95
+<CJK_UNIFIED_IDEOGRAPH-318D6> \xF0\xB1\xA3\x96
+<CJK_UNIFIED_IDEOGRAPH-318D7> \xF0\xB1\xA3\x97
+<CJK_UNIFIED_IDEOGRAPH-318D8> \xF0\xB1\xA3\x98
+<CJK_UNIFIED_IDEOGRAPH-318D9> \xF0\xB1\xA3\x99
+<CJK_UNIFIED_IDEOGRAPH-318DA> \xF0\xB1\xA3\x9A
+<CJK_UNIFIED_IDEOGRAPH-318DB> \xF0\xB1\xA3\x9B
+<CJK_UNIFIED_IDEOGRAPH-318DC> \xF0\xB1\xA3\x9C
+<CJK_UNIFIED_IDEOGRAPH-318DD> \xF0\xB1\xA3\x9D
+<CJK_UNIFIED_IDEOGRAPH-318DE> \xF0\xB1\xA3\x9E
+<CJK_UNIFIED_IDEOGRAPH-318DF> \xF0\xB1\xA3\x9F
+<CJK_UNIFIED_IDEOGRAPH-318E0> \xF0\xB1\xA3\xA0
+<CJK_UNIFIED_IDEOGRAPH-318E1> \xF0\xB1\xA3\xA1
+<CJK_UNIFIED_IDEOGRAPH-318E2> \xF0\xB1\xA3\xA2
+<CJK_UNIFIED_IDEOGRAPH-318E3> \xF0\xB1\xA3\xA3
+<CJK_UNIFIED_IDEOGRAPH-318E4> \xF0\xB1\xA3\xA4
+<CJK_UNIFIED_IDEOGRAPH-318E5> \xF0\xB1\xA3\xA5
+<CJK_UNIFIED_IDEOGRAPH-318E6> \xF0\xB1\xA3\xA6
+<CJK_UNIFIED_IDEOGRAPH-318E7> \xF0\xB1\xA3\xA7
+<CJK_UNIFIED_IDEOGRAPH-318E8> \xF0\xB1\xA3\xA8
+<CJK_UNIFIED_IDEOGRAPH-318E9> \xF0\xB1\xA3\xA9
+<CJK_UNIFIED_IDEOGRAPH-318EA> \xF0\xB1\xA3\xAA
+<CJK_UNIFIED_IDEOGRAPH-318EB> \xF0\xB1\xA3\xAB
+<CJK_UNIFIED_IDEOGRAPH-318EC> \xF0\xB1\xA3\xAC
+<CJK_UNIFIED_IDEOGRAPH-318ED> \xF0\xB1\xA3\xAD
+<CJK_UNIFIED_IDEOGRAPH-318EE> \xF0\xB1\xA3\xAE
+<CJK_UNIFIED_IDEOGRAPH-318EF> \xF0\xB1\xA3\xAF
+<CJK_UNIFIED_IDEOGRAPH-318F0> \xF0\xB1\xA3\xB0
+<CJK_UNIFIED_IDEOGRAPH-318F1> \xF0\xB1\xA3\xB1
+<CJK_UNIFIED_IDEOGRAPH-318F2> \xF0\xB1\xA3\xB2
+<CJK_UNIFIED_IDEOGRAPH-318F3> \xF0\xB1\xA3\xB3
+<CJK_UNIFIED_IDEOGRAPH-318F4> \xF0\xB1\xA3\xB4
+<CJK_UNIFIED_IDEOGRAPH-318F5> \xF0\xB1\xA3\xB5
+<CJK_UNIFIED_IDEOGRAPH-318F6> \xF0\xB1\xA3\xB6
+<CJK_UNIFIED_IDEOGRAPH-318F7> \xF0\xB1\xA3\xB7
+<CJK_UNIFIED_IDEOGRAPH-318F8> \xF0\xB1\xA3\xB8
+<CJK_UNIFIED_IDEOGRAPH-318F9> \xF0\xB1\xA3\xB9
+<CJK_UNIFIED_IDEOGRAPH-318FA> \xF0\xB1\xA3\xBA
+<CJK_UNIFIED_IDEOGRAPH-318FB> \xF0\xB1\xA3\xBB
+<CJK_UNIFIED_IDEOGRAPH-318FC> \xF0\xB1\xA3\xBC
+<CJK_UNIFIED_IDEOGRAPH-318FD> \xF0\xB1\xA3\xBD
+<CJK_UNIFIED_IDEOGRAPH-318FE> \xF0\xB1\xA3\xBE
+<CJK_UNIFIED_IDEOGRAPH-318FF> \xF0\xB1\xA3\xBF
+<CJK_UNIFIED_IDEOGRAPH-31900> \xF0\xB1\xA4\x80
+<CJK_UNIFIED_IDEOGRAPH-31901> \xF0\xB1\xA4\x81
+<CJK_UNIFIED_IDEOGRAPH-31902> \xF0\xB1\xA4\x82
+<CJK_UNIFIED_IDEOGRAPH-31903> \xF0\xB1\xA4\x83
+<CJK_UNIFIED_IDEOGRAPH-31904> \xF0\xB1\xA4\x84
+<CJK_UNIFIED_IDEOGRAPH-31905> \xF0\xB1\xA4\x85
+<CJK_UNIFIED_IDEOGRAPH-31906> \xF0\xB1\xA4\x86
+<CJK_UNIFIED_IDEOGRAPH-31907> \xF0\xB1\xA4\x87
+<CJK_UNIFIED_IDEOGRAPH-31908> \xF0\xB1\xA4\x88
+<CJK_UNIFIED_IDEOGRAPH-31909> \xF0\xB1\xA4\x89
+<CJK_UNIFIED_IDEOGRAPH-3190A> \xF0\xB1\xA4\x8A
+<CJK_UNIFIED_IDEOGRAPH-3190B> \xF0\xB1\xA4\x8B
+<CJK_UNIFIED_IDEOGRAPH-3190C> \xF0\xB1\xA4\x8C
+<CJK_UNIFIED_IDEOGRAPH-3190D> \xF0\xB1\xA4\x8D
+<CJK_UNIFIED_IDEOGRAPH-3190E> \xF0\xB1\xA4\x8E
+<CJK_UNIFIED_IDEOGRAPH-3190F> \xF0\xB1\xA4\x8F
+<CJK_UNIFIED_IDEOGRAPH-31910> \xF0\xB1\xA4\x90
+<CJK_UNIFIED_IDEOGRAPH-31911> \xF0\xB1\xA4\x91
+<CJK_UNIFIED_IDEOGRAPH-31912> \xF0\xB1\xA4\x92
+<CJK_UNIFIED_IDEOGRAPH-31913> \xF0\xB1\xA4\x93
+<CJK_UNIFIED_IDEOGRAPH-31914> \xF0\xB1\xA4\x94
+<CJK_UNIFIED_IDEOGRAPH-31915> \xF0\xB1\xA4\x95
+<CJK_UNIFIED_IDEOGRAPH-31916> \xF0\xB1\xA4\x96
+<CJK_UNIFIED_IDEOGRAPH-31917> \xF0\xB1\xA4\x97
+<CJK_UNIFIED_IDEOGRAPH-31918> \xF0\xB1\xA4\x98
+<CJK_UNIFIED_IDEOGRAPH-31919> \xF0\xB1\xA4\x99
+<CJK_UNIFIED_IDEOGRAPH-3191A> \xF0\xB1\xA4\x9A
+<CJK_UNIFIED_IDEOGRAPH-3191B> \xF0\xB1\xA4\x9B
+<CJK_UNIFIED_IDEOGRAPH-3191C> \xF0\xB1\xA4\x9C
+<CJK_UNIFIED_IDEOGRAPH-3191D> \xF0\xB1\xA4\x9D
+<CJK_UNIFIED_IDEOGRAPH-3191E> \xF0\xB1\xA4\x9E
+<CJK_UNIFIED_IDEOGRAPH-3191F> \xF0\xB1\xA4\x9F
+<CJK_UNIFIED_IDEOGRAPH-31920> \xF0\xB1\xA4\xA0
+<CJK_UNIFIED_IDEOGRAPH-31921> \xF0\xB1\xA4\xA1
+<CJK_UNIFIED_IDEOGRAPH-31922> \xF0\xB1\xA4\xA2
+<CJK_UNIFIED_IDEOGRAPH-31923> \xF0\xB1\xA4\xA3
+<CJK_UNIFIED_IDEOGRAPH-31924> \xF0\xB1\xA4\xA4
+<CJK_UNIFIED_IDEOGRAPH-31925> \xF0\xB1\xA4\xA5
+<CJK_UNIFIED_IDEOGRAPH-31926> \xF0\xB1\xA4\xA6
+<CJK_UNIFIED_IDEOGRAPH-31927> \xF0\xB1\xA4\xA7
+<CJK_UNIFIED_IDEOGRAPH-31928> \xF0\xB1\xA4\xA8
+<CJK_UNIFIED_IDEOGRAPH-31929> \xF0\xB1\xA4\xA9
+<CJK_UNIFIED_IDEOGRAPH-3192A> \xF0\xB1\xA4\xAA
+<CJK_UNIFIED_IDEOGRAPH-3192B> \xF0\xB1\xA4\xAB
+<CJK_UNIFIED_IDEOGRAPH-3192C> \xF0\xB1\xA4\xAC
+<CJK_UNIFIED_IDEOGRAPH-3192D> \xF0\xB1\xA4\xAD
+<CJK_UNIFIED_IDEOGRAPH-3192E> \xF0\xB1\xA4\xAE
+<CJK_UNIFIED_IDEOGRAPH-3192F> \xF0\xB1\xA4\xAF
+<CJK_UNIFIED_IDEOGRAPH-31930> \xF0\xB1\xA4\xB0
+<CJK_UNIFIED_IDEOGRAPH-31931> \xF0\xB1\xA4\xB1
+<CJK_UNIFIED_IDEOGRAPH-31932> \xF0\xB1\xA4\xB2
+<CJK_UNIFIED_IDEOGRAPH-31933> \xF0\xB1\xA4\xB3
+<CJK_UNIFIED_IDEOGRAPH-31934> \xF0\xB1\xA4\xB4
+<CJK_UNIFIED_IDEOGRAPH-31935> \xF0\xB1\xA4\xB5
+<CJK_UNIFIED_IDEOGRAPH-31936> \xF0\xB1\xA4\xB6
+<CJK_UNIFIED_IDEOGRAPH-31937> \xF0\xB1\xA4\xB7
+<CJK_UNIFIED_IDEOGRAPH-31938> \xF0\xB1\xA4\xB8
+<CJK_UNIFIED_IDEOGRAPH-31939> \xF0\xB1\xA4\xB9
+<CJK_UNIFIED_IDEOGRAPH-3193A> \xF0\xB1\xA4\xBA
+<CJK_UNIFIED_IDEOGRAPH-3193B> \xF0\xB1\xA4\xBB
+<CJK_UNIFIED_IDEOGRAPH-3193C> \xF0\xB1\xA4\xBC
+<CJK_UNIFIED_IDEOGRAPH-3193D> \xF0\xB1\xA4\xBD
+<CJK_UNIFIED_IDEOGRAPH-3193E> \xF0\xB1\xA4\xBE
+<CJK_UNIFIED_IDEOGRAPH-3193F> \xF0\xB1\xA4\xBF
+<CJK_UNIFIED_IDEOGRAPH-31940> \xF0\xB1\xA5\x80
+<CJK_UNIFIED_IDEOGRAPH-31941> \xF0\xB1\xA5\x81
+<CJK_UNIFIED_IDEOGRAPH-31942> \xF0\xB1\xA5\x82
+<CJK_UNIFIED_IDEOGRAPH-31943> \xF0\xB1\xA5\x83
+<CJK_UNIFIED_IDEOGRAPH-31944> \xF0\xB1\xA5\x84
+<CJK_UNIFIED_IDEOGRAPH-31945> \xF0\xB1\xA5\x85
+<CJK_UNIFIED_IDEOGRAPH-31946> \xF0\xB1\xA5\x86
+<CJK_UNIFIED_IDEOGRAPH-31947> \xF0\xB1\xA5\x87
+<CJK_UNIFIED_IDEOGRAPH-31948> \xF0\xB1\xA5\x88
+<CJK_UNIFIED_IDEOGRAPH-31949> \xF0\xB1\xA5\x89
+<CJK_UNIFIED_IDEOGRAPH-3194A> \xF0\xB1\xA5\x8A
+<CJK_UNIFIED_IDEOGRAPH-3194B> \xF0\xB1\xA5\x8B
+<CJK_UNIFIED_IDEOGRAPH-3194C> \xF0\xB1\xA5\x8C
+<CJK_UNIFIED_IDEOGRAPH-3194D> \xF0\xB1\xA5\x8D
+<CJK_UNIFIED_IDEOGRAPH-3194E> \xF0\xB1\xA5\x8E
+<CJK_UNIFIED_IDEOGRAPH-3194F> \xF0\xB1\xA5\x8F
+<CJK_UNIFIED_IDEOGRAPH-31950> \xF0\xB1\xA5\x90
+<CJK_UNIFIED_IDEOGRAPH-31951> \xF0\xB1\xA5\x91
+<CJK_UNIFIED_IDEOGRAPH-31952> \xF0\xB1\xA5\x92
+<CJK_UNIFIED_IDEOGRAPH-31953> \xF0\xB1\xA5\x93
+<CJK_UNIFIED_IDEOGRAPH-31954> \xF0\xB1\xA5\x94
+<CJK_UNIFIED_IDEOGRAPH-31955> \xF0\xB1\xA5\x95
+<CJK_UNIFIED_IDEOGRAPH-31956> \xF0\xB1\xA5\x96
+<CJK_UNIFIED_IDEOGRAPH-31957> \xF0\xB1\xA5\x97
+<CJK_UNIFIED_IDEOGRAPH-31958> \xF0\xB1\xA5\x98
+<CJK_UNIFIED_IDEOGRAPH-31959> \xF0\xB1\xA5\x99
+<CJK_UNIFIED_IDEOGRAPH-3195A> \xF0\xB1\xA5\x9A
+<CJK_UNIFIED_IDEOGRAPH-3195B> \xF0\xB1\xA5\x9B
+<CJK_UNIFIED_IDEOGRAPH-3195C> \xF0\xB1\xA5\x9C
+<CJK_UNIFIED_IDEOGRAPH-3195D> \xF0\xB1\xA5\x9D
+<CJK_UNIFIED_IDEOGRAPH-3195E> \xF0\xB1\xA5\x9E
+<CJK_UNIFIED_IDEOGRAPH-3195F> \xF0\xB1\xA5\x9F
+<CJK_UNIFIED_IDEOGRAPH-31960> \xF0\xB1\xA5\xA0
+<CJK_UNIFIED_IDEOGRAPH-31961> \xF0\xB1\xA5\xA1
+<CJK_UNIFIED_IDEOGRAPH-31962> \xF0\xB1\xA5\xA2
+<CJK_UNIFIED_IDEOGRAPH-31963> \xF0\xB1\xA5\xA3
+<CJK_UNIFIED_IDEOGRAPH-31964> \xF0\xB1\xA5\xA4
+<CJK_UNIFIED_IDEOGRAPH-31965> \xF0\xB1\xA5\xA5
+<CJK_UNIFIED_IDEOGRAPH-31966> \xF0\xB1\xA5\xA6
+<CJK_UNIFIED_IDEOGRAPH-31967> \xF0\xB1\xA5\xA7
+<CJK_UNIFIED_IDEOGRAPH-31968> \xF0\xB1\xA5\xA8
+<CJK_UNIFIED_IDEOGRAPH-31969> \xF0\xB1\xA5\xA9
+<CJK_UNIFIED_IDEOGRAPH-3196A> \xF0\xB1\xA5\xAA
+<CJK_UNIFIED_IDEOGRAPH-3196B> \xF0\xB1\xA5\xAB
+<CJK_UNIFIED_IDEOGRAPH-3196C> \xF0\xB1\xA5\xAC
+<CJK_UNIFIED_IDEOGRAPH-3196D> \xF0\xB1\xA5\xAD
+<CJK_UNIFIED_IDEOGRAPH-3196E> \xF0\xB1\xA5\xAE
+<CJK_UNIFIED_IDEOGRAPH-3196F> \xF0\xB1\xA5\xAF
+<CJK_UNIFIED_IDEOGRAPH-31970> \xF0\xB1\xA5\xB0
+<CJK_UNIFIED_IDEOGRAPH-31971> \xF0\xB1\xA5\xB1
+<CJK_UNIFIED_IDEOGRAPH-31972> \xF0\xB1\xA5\xB2
+<CJK_UNIFIED_IDEOGRAPH-31973> \xF0\xB1\xA5\xB3
+<CJK_UNIFIED_IDEOGRAPH-31974> \xF0\xB1\xA5\xB4
+<CJK_UNIFIED_IDEOGRAPH-31975> \xF0\xB1\xA5\xB5
+<CJK_UNIFIED_IDEOGRAPH-31976> \xF0\xB1\xA5\xB6
+<CJK_UNIFIED_IDEOGRAPH-31977> \xF0\xB1\xA5\xB7
+<CJK_UNIFIED_IDEOGRAPH-31978> \xF0\xB1\xA5\xB8
+<CJK_UNIFIED_IDEOGRAPH-31979> \xF0\xB1\xA5\xB9
+<CJK_UNIFIED_IDEOGRAPH-3197A> \xF0\xB1\xA5\xBA
+<CJK_UNIFIED_IDEOGRAPH-3197B> \xF0\xB1\xA5\xBB
+<CJK_UNIFIED_IDEOGRAPH-3197C> \xF0\xB1\xA5\xBC
+<CJK_UNIFIED_IDEOGRAPH-3197D> \xF0\xB1\xA5\xBD
+<CJK_UNIFIED_IDEOGRAPH-3197E> \xF0\xB1\xA5\xBE
+<CJK_UNIFIED_IDEOGRAPH-3197F> \xF0\xB1\xA5\xBF
+<CJK_UNIFIED_IDEOGRAPH-31980> \xF0\xB1\xA6\x80
+<CJK_UNIFIED_IDEOGRAPH-31981> \xF0\xB1\xA6\x81
+<CJK_UNIFIED_IDEOGRAPH-31982> \xF0\xB1\xA6\x82
+<CJK_UNIFIED_IDEOGRAPH-31983> \xF0\xB1\xA6\x83
+<CJK_UNIFIED_IDEOGRAPH-31984> \xF0\xB1\xA6\x84
+<CJK_UNIFIED_IDEOGRAPH-31985> \xF0\xB1\xA6\x85
+<CJK_UNIFIED_IDEOGRAPH-31986> \xF0\xB1\xA6\x86
+<CJK_UNIFIED_IDEOGRAPH-31987> \xF0\xB1\xA6\x87
+<CJK_UNIFIED_IDEOGRAPH-31988> \xF0\xB1\xA6\x88
+<CJK_UNIFIED_IDEOGRAPH-31989> \xF0\xB1\xA6\x89
+<CJK_UNIFIED_IDEOGRAPH-3198A> \xF0\xB1\xA6\x8A
+<CJK_UNIFIED_IDEOGRAPH-3198B> \xF0\xB1\xA6\x8B
+<CJK_UNIFIED_IDEOGRAPH-3198C> \xF0\xB1\xA6\x8C
+<CJK_UNIFIED_IDEOGRAPH-3198D> \xF0\xB1\xA6\x8D
+<CJK_UNIFIED_IDEOGRAPH-3198E> \xF0\xB1\xA6\x8E
+<CJK_UNIFIED_IDEOGRAPH-3198F> \xF0\xB1\xA6\x8F
+<CJK_UNIFIED_IDEOGRAPH-31990> \xF0\xB1\xA6\x90
+<CJK_UNIFIED_IDEOGRAPH-31991> \xF0\xB1\xA6\x91
+<CJK_UNIFIED_IDEOGRAPH-31992> \xF0\xB1\xA6\x92
+<CJK_UNIFIED_IDEOGRAPH-31993> \xF0\xB1\xA6\x93
+<CJK_UNIFIED_IDEOGRAPH-31994> \xF0\xB1\xA6\x94
+<CJK_UNIFIED_IDEOGRAPH-31995> \xF0\xB1\xA6\x95
+<CJK_UNIFIED_IDEOGRAPH-31996> \xF0\xB1\xA6\x96
+<CJK_UNIFIED_IDEOGRAPH-31997> \xF0\xB1\xA6\x97
+<CJK_UNIFIED_IDEOGRAPH-31998> \xF0\xB1\xA6\x98
+<CJK_UNIFIED_IDEOGRAPH-31999> \xF0\xB1\xA6\x99
+<CJK_UNIFIED_IDEOGRAPH-3199A> \xF0\xB1\xA6\x9A
+<CJK_UNIFIED_IDEOGRAPH-3199B> \xF0\xB1\xA6\x9B
+<CJK_UNIFIED_IDEOGRAPH-3199C> \xF0\xB1\xA6\x9C
+<CJK_UNIFIED_IDEOGRAPH-3199D> \xF0\xB1\xA6\x9D
+<CJK_UNIFIED_IDEOGRAPH-3199E> \xF0\xB1\xA6\x9E
+<CJK_UNIFIED_IDEOGRAPH-3199F> \xF0\xB1\xA6\x9F
+<CJK_UNIFIED_IDEOGRAPH-319A0> \xF0\xB1\xA6\xA0
+<CJK_UNIFIED_IDEOGRAPH-319A1> \xF0\xB1\xA6\xA1
+<CJK_UNIFIED_IDEOGRAPH-319A2> \xF0\xB1\xA6\xA2
+<CJK_UNIFIED_IDEOGRAPH-319A3> \xF0\xB1\xA6\xA3
+<CJK_UNIFIED_IDEOGRAPH-319A4> \xF0\xB1\xA6\xA4
+<CJK_UNIFIED_IDEOGRAPH-319A5> \xF0\xB1\xA6\xA5
+<CJK_UNIFIED_IDEOGRAPH-319A6> \xF0\xB1\xA6\xA6
+<CJK_UNIFIED_IDEOGRAPH-319A7> \xF0\xB1\xA6\xA7
+<CJK_UNIFIED_IDEOGRAPH-319A8> \xF0\xB1\xA6\xA8
+<CJK_UNIFIED_IDEOGRAPH-319A9> \xF0\xB1\xA6\xA9
+<CJK_UNIFIED_IDEOGRAPH-319AA> \xF0\xB1\xA6\xAA
+<CJK_UNIFIED_IDEOGRAPH-319AB> \xF0\xB1\xA6\xAB
+<CJK_UNIFIED_IDEOGRAPH-319AC> \xF0\xB1\xA6\xAC
+<CJK_UNIFIED_IDEOGRAPH-319AD> \xF0\xB1\xA6\xAD
+<CJK_UNIFIED_IDEOGRAPH-319AE> \xF0\xB1\xA6\xAE
+<CJK_UNIFIED_IDEOGRAPH-319AF> \xF0\xB1\xA6\xAF
+<CJK_UNIFIED_IDEOGRAPH-319B0> \xF0\xB1\xA6\xB0
+<CJK_UNIFIED_IDEOGRAPH-319B1> \xF0\xB1\xA6\xB1
+<CJK_UNIFIED_IDEOGRAPH-319B2> \xF0\xB1\xA6\xB2
+<CJK_UNIFIED_IDEOGRAPH-319B3> \xF0\xB1\xA6\xB3
+<CJK_UNIFIED_IDEOGRAPH-319B4> \xF0\xB1\xA6\xB4
+<CJK_UNIFIED_IDEOGRAPH-319B5> \xF0\xB1\xA6\xB5
+<CJK_UNIFIED_IDEOGRAPH-319B6> \xF0\xB1\xA6\xB6
+<CJK_UNIFIED_IDEOGRAPH-319B7> \xF0\xB1\xA6\xB7
+<CJK_UNIFIED_IDEOGRAPH-319B8> \xF0\xB1\xA6\xB8
+<CJK_UNIFIED_IDEOGRAPH-319B9> \xF0\xB1\xA6\xB9
+<CJK_UNIFIED_IDEOGRAPH-319BA> \xF0\xB1\xA6\xBA
+<CJK_UNIFIED_IDEOGRAPH-319BB> \xF0\xB1\xA6\xBB
+<CJK_UNIFIED_IDEOGRAPH-319BC> \xF0\xB1\xA6\xBC
+<CJK_UNIFIED_IDEOGRAPH-319BD> \xF0\xB1\xA6\xBD
+<CJK_UNIFIED_IDEOGRAPH-319BE> \xF0\xB1\xA6\xBE
+<CJK_UNIFIED_IDEOGRAPH-319BF> \xF0\xB1\xA6\xBF
+<CJK_UNIFIED_IDEOGRAPH-319C0> \xF0\xB1\xA7\x80
+<CJK_UNIFIED_IDEOGRAPH-319C1> \xF0\xB1\xA7\x81
+<CJK_UNIFIED_IDEOGRAPH-319C2> \xF0\xB1\xA7\x82
+<CJK_UNIFIED_IDEOGRAPH-319C3> \xF0\xB1\xA7\x83
+<CJK_UNIFIED_IDEOGRAPH-319C4> \xF0\xB1\xA7\x84
+<CJK_UNIFIED_IDEOGRAPH-319C5> \xF0\xB1\xA7\x85
+<CJK_UNIFIED_IDEOGRAPH-319C6> \xF0\xB1\xA7\x86
+<CJK_UNIFIED_IDEOGRAPH-319C7> \xF0\xB1\xA7\x87
+<CJK_UNIFIED_IDEOGRAPH-319C8> \xF0\xB1\xA7\x88
+<CJK_UNIFIED_IDEOGRAPH-319C9> \xF0\xB1\xA7\x89
+<CJK_UNIFIED_IDEOGRAPH-319CA> \xF0\xB1\xA7\x8A
+<CJK_UNIFIED_IDEOGRAPH-319CB> \xF0\xB1\xA7\x8B
+<CJK_UNIFIED_IDEOGRAPH-319CC> \xF0\xB1\xA7\x8C
+<CJK_UNIFIED_IDEOGRAPH-319CD> \xF0\xB1\xA7\x8D
+<CJK_UNIFIED_IDEOGRAPH-319CE> \xF0\xB1\xA7\x8E
+<CJK_UNIFIED_IDEOGRAPH-319CF> \xF0\xB1\xA7\x8F
+<CJK_UNIFIED_IDEOGRAPH-319D0> \xF0\xB1\xA7\x90
+<CJK_UNIFIED_IDEOGRAPH-319D1> \xF0\xB1\xA7\x91
+<CJK_UNIFIED_IDEOGRAPH-319D2> \xF0\xB1\xA7\x92
+<CJK_UNIFIED_IDEOGRAPH-319D3> \xF0\xB1\xA7\x93
+<CJK_UNIFIED_IDEOGRAPH-319D4> \xF0\xB1\xA7\x94
+<CJK_UNIFIED_IDEOGRAPH-319D5> \xF0\xB1\xA7\x95
+<CJK_UNIFIED_IDEOGRAPH-319D6> \xF0\xB1\xA7\x96
+<CJK_UNIFIED_IDEOGRAPH-319D7> \xF0\xB1\xA7\x97
+<CJK_UNIFIED_IDEOGRAPH-319D8> \xF0\xB1\xA7\x98
+<CJK_UNIFIED_IDEOGRAPH-319D9> \xF0\xB1\xA7\x99
+<CJK_UNIFIED_IDEOGRAPH-319DA> \xF0\xB1\xA7\x9A
+<CJK_UNIFIED_IDEOGRAPH-319DB> \xF0\xB1\xA7\x9B
+<CJK_UNIFIED_IDEOGRAPH-319DC> \xF0\xB1\xA7\x9C
+<CJK_UNIFIED_IDEOGRAPH-319DD> \xF0\xB1\xA7\x9D
+<CJK_UNIFIED_IDEOGRAPH-319DE> \xF0\xB1\xA7\x9E
+<CJK_UNIFIED_IDEOGRAPH-319DF> \xF0\xB1\xA7\x9F
+<CJK_UNIFIED_IDEOGRAPH-319E0> \xF0\xB1\xA7\xA0
+<CJK_UNIFIED_IDEOGRAPH-319E1> \xF0\xB1\xA7\xA1
+<CJK_UNIFIED_IDEOGRAPH-319E2> \xF0\xB1\xA7\xA2
+<CJK_UNIFIED_IDEOGRAPH-319E3> \xF0\xB1\xA7\xA3
+<CJK_UNIFIED_IDEOGRAPH-319E4> \xF0\xB1\xA7\xA4
+<CJK_UNIFIED_IDEOGRAPH-319E5> \xF0\xB1\xA7\xA5
+<CJK_UNIFIED_IDEOGRAPH-319E6> \xF0\xB1\xA7\xA6
+<CJK_UNIFIED_IDEOGRAPH-319E7> \xF0\xB1\xA7\xA7
+<CJK_UNIFIED_IDEOGRAPH-319E8> \xF0\xB1\xA7\xA8
+<CJK_UNIFIED_IDEOGRAPH-319E9> \xF0\xB1\xA7\xA9
+<CJK_UNIFIED_IDEOGRAPH-319EA> \xF0\xB1\xA7\xAA
+<CJK_UNIFIED_IDEOGRAPH-319EB> \xF0\xB1\xA7\xAB
+<CJK_UNIFIED_IDEOGRAPH-319EC> \xF0\xB1\xA7\xAC
+<CJK_UNIFIED_IDEOGRAPH-319ED> \xF0\xB1\xA7\xAD
+<CJK_UNIFIED_IDEOGRAPH-319EE> \xF0\xB1\xA7\xAE
+<CJK_UNIFIED_IDEOGRAPH-319EF> \xF0\xB1\xA7\xAF
+<CJK_UNIFIED_IDEOGRAPH-319F0> \xF0\xB1\xA7\xB0
+<CJK_UNIFIED_IDEOGRAPH-319F1> \xF0\xB1\xA7\xB1
+<CJK_UNIFIED_IDEOGRAPH-319F2> \xF0\xB1\xA7\xB2
+<CJK_UNIFIED_IDEOGRAPH-319F3> \xF0\xB1\xA7\xB3
+<CJK_UNIFIED_IDEOGRAPH-319F4> \xF0\xB1\xA7\xB4
+<CJK_UNIFIED_IDEOGRAPH-319F5> \xF0\xB1\xA7\xB5
+<CJK_UNIFIED_IDEOGRAPH-319F6> \xF0\xB1\xA7\xB6
+<CJK_UNIFIED_IDEOGRAPH-319F7> \xF0\xB1\xA7\xB7
+<CJK_UNIFIED_IDEOGRAPH-319F8> \xF0\xB1\xA7\xB8
+<CJK_UNIFIED_IDEOGRAPH-319F9> \xF0\xB1\xA7\xB9
+<CJK_UNIFIED_IDEOGRAPH-319FA> \xF0\xB1\xA7\xBA
+<CJK_UNIFIED_IDEOGRAPH-319FB> \xF0\xB1\xA7\xBB
+<CJK_UNIFIED_IDEOGRAPH-319FC> \xF0\xB1\xA7\xBC
+<CJK_UNIFIED_IDEOGRAPH-319FD> \xF0\xB1\xA7\xBD
+<CJK_UNIFIED_IDEOGRAPH-319FE> \xF0\xB1\xA7\xBE
+<CJK_UNIFIED_IDEOGRAPH-319FF> \xF0\xB1\xA7\xBF
+<CJK_UNIFIED_IDEOGRAPH-31A00> \xF0\xB1\xA8\x80
+<CJK_UNIFIED_IDEOGRAPH-31A01> \xF0\xB1\xA8\x81
+<CJK_UNIFIED_IDEOGRAPH-31A02> \xF0\xB1\xA8\x82
+<CJK_UNIFIED_IDEOGRAPH-31A03> \xF0\xB1\xA8\x83
+<CJK_UNIFIED_IDEOGRAPH-31A04> \xF0\xB1\xA8\x84
+<CJK_UNIFIED_IDEOGRAPH-31A05> \xF0\xB1\xA8\x85
+<CJK_UNIFIED_IDEOGRAPH-31A06> \xF0\xB1\xA8\x86
+<CJK_UNIFIED_IDEOGRAPH-31A07> \xF0\xB1\xA8\x87
+<CJK_UNIFIED_IDEOGRAPH-31A08> \xF0\xB1\xA8\x88
+<CJK_UNIFIED_IDEOGRAPH-31A09> \xF0\xB1\xA8\x89
+<CJK_UNIFIED_IDEOGRAPH-31A0A> \xF0\xB1\xA8\x8A
+<CJK_UNIFIED_IDEOGRAPH-31A0B> \xF0\xB1\xA8\x8B
+<CJK_UNIFIED_IDEOGRAPH-31A0C> \xF0\xB1\xA8\x8C
+<CJK_UNIFIED_IDEOGRAPH-31A0D> \xF0\xB1\xA8\x8D
+<CJK_UNIFIED_IDEOGRAPH-31A0E> \xF0\xB1\xA8\x8E
+<CJK_UNIFIED_IDEOGRAPH-31A0F> \xF0\xB1\xA8\x8F
+<CJK_UNIFIED_IDEOGRAPH-31A10> \xF0\xB1\xA8\x90
+<CJK_UNIFIED_IDEOGRAPH-31A11> \xF0\xB1\xA8\x91
+<CJK_UNIFIED_IDEOGRAPH-31A12> \xF0\xB1\xA8\x92
+<CJK_UNIFIED_IDEOGRAPH-31A13> \xF0\xB1\xA8\x93
+<CJK_UNIFIED_IDEOGRAPH-31A14> \xF0\xB1\xA8\x94
+<CJK_UNIFIED_IDEOGRAPH-31A15> \xF0\xB1\xA8\x95
+<CJK_UNIFIED_IDEOGRAPH-31A16> \xF0\xB1\xA8\x96
+<CJK_UNIFIED_IDEOGRAPH-31A17> \xF0\xB1\xA8\x97
+<CJK_UNIFIED_IDEOGRAPH-31A18> \xF0\xB1\xA8\x98
+<CJK_UNIFIED_IDEOGRAPH-31A19> \xF0\xB1\xA8\x99
+<CJK_UNIFIED_IDEOGRAPH-31A1A> \xF0\xB1\xA8\x9A
+<CJK_UNIFIED_IDEOGRAPH-31A1B> \xF0\xB1\xA8\x9B
+<CJK_UNIFIED_IDEOGRAPH-31A1C> \xF0\xB1\xA8\x9C
+<CJK_UNIFIED_IDEOGRAPH-31A1D> \xF0\xB1\xA8\x9D
+<CJK_UNIFIED_IDEOGRAPH-31A1E> \xF0\xB1\xA8\x9E
+<CJK_UNIFIED_IDEOGRAPH-31A1F> \xF0\xB1\xA8\x9F
+<CJK_UNIFIED_IDEOGRAPH-31A20> \xF0\xB1\xA8\xA0
+<CJK_UNIFIED_IDEOGRAPH-31A21> \xF0\xB1\xA8\xA1
+<CJK_UNIFIED_IDEOGRAPH-31A22> \xF0\xB1\xA8\xA2
+<CJK_UNIFIED_IDEOGRAPH-31A23> \xF0\xB1\xA8\xA3
+<CJK_UNIFIED_IDEOGRAPH-31A24> \xF0\xB1\xA8\xA4
+<CJK_UNIFIED_IDEOGRAPH-31A25> \xF0\xB1\xA8\xA5
+<CJK_UNIFIED_IDEOGRAPH-31A26> \xF0\xB1\xA8\xA6
+<CJK_UNIFIED_IDEOGRAPH-31A27> \xF0\xB1\xA8\xA7
+<CJK_UNIFIED_IDEOGRAPH-31A28> \xF0\xB1\xA8\xA8
+<CJK_UNIFIED_IDEOGRAPH-31A29> \xF0\xB1\xA8\xA9
+<CJK_UNIFIED_IDEOGRAPH-31A2A> \xF0\xB1\xA8\xAA
+<CJK_UNIFIED_IDEOGRAPH-31A2B> \xF0\xB1\xA8\xAB
+<CJK_UNIFIED_IDEOGRAPH-31A2C> \xF0\xB1\xA8\xAC
+<CJK_UNIFIED_IDEOGRAPH-31A2D> \xF0\xB1\xA8\xAD
+<CJK_UNIFIED_IDEOGRAPH-31A2E> \xF0\xB1\xA8\xAE
+<CJK_UNIFIED_IDEOGRAPH-31A2F> \xF0\xB1\xA8\xAF
+<CJK_UNIFIED_IDEOGRAPH-31A30> \xF0\xB1\xA8\xB0
+<CJK_UNIFIED_IDEOGRAPH-31A31> \xF0\xB1\xA8\xB1
+<CJK_UNIFIED_IDEOGRAPH-31A32> \xF0\xB1\xA8\xB2
+<CJK_UNIFIED_IDEOGRAPH-31A33> \xF0\xB1\xA8\xB3
+<CJK_UNIFIED_IDEOGRAPH-31A34> \xF0\xB1\xA8\xB4
+<CJK_UNIFIED_IDEOGRAPH-31A35> \xF0\xB1\xA8\xB5
+<CJK_UNIFIED_IDEOGRAPH-31A36> \xF0\xB1\xA8\xB6
+<CJK_UNIFIED_IDEOGRAPH-31A37> \xF0\xB1\xA8\xB7
+<CJK_UNIFIED_IDEOGRAPH-31A38> \xF0\xB1\xA8\xB8
+<CJK_UNIFIED_IDEOGRAPH-31A39> \xF0\xB1\xA8\xB9
+<CJK_UNIFIED_IDEOGRAPH-31A3A> \xF0\xB1\xA8\xBA
+<CJK_UNIFIED_IDEOGRAPH-31A3B> \xF0\xB1\xA8\xBB
+<CJK_UNIFIED_IDEOGRAPH-31A3C> \xF0\xB1\xA8\xBC
+<CJK_UNIFIED_IDEOGRAPH-31A3D> \xF0\xB1\xA8\xBD
+<CJK_UNIFIED_IDEOGRAPH-31A3E> \xF0\xB1\xA8\xBE
+<CJK_UNIFIED_IDEOGRAPH-31A3F> \xF0\xB1\xA8\xBF
+<CJK_UNIFIED_IDEOGRAPH-31A40> \xF0\xB1\xA9\x80
+<CJK_UNIFIED_IDEOGRAPH-31A41> \xF0\xB1\xA9\x81
+<CJK_UNIFIED_IDEOGRAPH-31A42> \xF0\xB1\xA9\x82
+<CJK_UNIFIED_IDEOGRAPH-31A43> \xF0\xB1\xA9\x83
+<CJK_UNIFIED_IDEOGRAPH-31A44> \xF0\xB1\xA9\x84
+<CJK_UNIFIED_IDEOGRAPH-31A45> \xF0\xB1\xA9\x85
+<CJK_UNIFIED_IDEOGRAPH-31A46> \xF0\xB1\xA9\x86
+<CJK_UNIFIED_IDEOGRAPH-31A47> \xF0\xB1\xA9\x87
+<CJK_UNIFIED_IDEOGRAPH-31A48> \xF0\xB1\xA9\x88
+<CJK_UNIFIED_IDEOGRAPH-31A49> \xF0\xB1\xA9\x89
+<CJK_UNIFIED_IDEOGRAPH-31A4A> \xF0\xB1\xA9\x8A
+<CJK_UNIFIED_IDEOGRAPH-31A4B> \xF0\xB1\xA9\x8B
+<CJK_UNIFIED_IDEOGRAPH-31A4C> \xF0\xB1\xA9\x8C
+<CJK_UNIFIED_IDEOGRAPH-31A4D> \xF0\xB1\xA9\x8D
+<CJK_UNIFIED_IDEOGRAPH-31A4E> \xF0\xB1\xA9\x8E
+<CJK_UNIFIED_IDEOGRAPH-31A4F> \xF0\xB1\xA9\x8F
+<CJK_UNIFIED_IDEOGRAPH-31A50> \xF0\xB1\xA9\x90
+<CJK_UNIFIED_IDEOGRAPH-31A51> \xF0\xB1\xA9\x91
+<CJK_UNIFIED_IDEOGRAPH-31A52> \xF0\xB1\xA9\x92
+<CJK_UNIFIED_IDEOGRAPH-31A53> \xF0\xB1\xA9\x93
+<CJK_UNIFIED_IDEOGRAPH-31A54> \xF0\xB1\xA9\x94
+<CJK_UNIFIED_IDEOGRAPH-31A55> \xF0\xB1\xA9\x95
+<CJK_UNIFIED_IDEOGRAPH-31A56> \xF0\xB1\xA9\x96
+<CJK_UNIFIED_IDEOGRAPH-31A57> \xF0\xB1\xA9\x97
+<CJK_UNIFIED_IDEOGRAPH-31A58> \xF0\xB1\xA9\x98
+<CJK_UNIFIED_IDEOGRAPH-31A59> \xF0\xB1\xA9\x99
+<CJK_UNIFIED_IDEOGRAPH-31A5A> \xF0\xB1\xA9\x9A
+<CJK_UNIFIED_IDEOGRAPH-31A5B> \xF0\xB1\xA9\x9B
+<CJK_UNIFIED_IDEOGRAPH-31A5C> \xF0\xB1\xA9\x9C
+<CJK_UNIFIED_IDEOGRAPH-31A5D> \xF0\xB1\xA9\x9D
+<CJK_UNIFIED_IDEOGRAPH-31A5E> \xF0\xB1\xA9\x9E
+<CJK_UNIFIED_IDEOGRAPH-31A5F> \xF0\xB1\xA9\x9F
+<CJK_UNIFIED_IDEOGRAPH-31A60> \xF0\xB1\xA9\xA0
+<CJK_UNIFIED_IDEOGRAPH-31A61> \xF0\xB1\xA9\xA1
+<CJK_UNIFIED_IDEOGRAPH-31A62> \xF0\xB1\xA9\xA2
+<CJK_UNIFIED_IDEOGRAPH-31A63> \xF0\xB1\xA9\xA3
+<CJK_UNIFIED_IDEOGRAPH-31A64> \xF0\xB1\xA9\xA4
+<CJK_UNIFIED_IDEOGRAPH-31A65> \xF0\xB1\xA9\xA5
+<CJK_UNIFIED_IDEOGRAPH-31A66> \xF0\xB1\xA9\xA6
+<CJK_UNIFIED_IDEOGRAPH-31A67> \xF0\xB1\xA9\xA7
+<CJK_UNIFIED_IDEOGRAPH-31A68> \xF0\xB1\xA9\xA8
+<CJK_UNIFIED_IDEOGRAPH-31A69> \xF0\xB1\xA9\xA9
+<CJK_UNIFIED_IDEOGRAPH-31A6A> \xF0\xB1\xA9\xAA
+<CJK_UNIFIED_IDEOGRAPH-31A6B> \xF0\xB1\xA9\xAB
+<CJK_UNIFIED_IDEOGRAPH-31A6C> \xF0\xB1\xA9\xAC
+<CJK_UNIFIED_IDEOGRAPH-31A6D> \xF0\xB1\xA9\xAD
+<CJK_UNIFIED_IDEOGRAPH-31A6E> \xF0\xB1\xA9\xAE
+<CJK_UNIFIED_IDEOGRAPH-31A6F> \xF0\xB1\xA9\xAF
+<CJK_UNIFIED_IDEOGRAPH-31A70> \xF0\xB1\xA9\xB0
+<CJK_UNIFIED_IDEOGRAPH-31A71> \xF0\xB1\xA9\xB1
+<CJK_UNIFIED_IDEOGRAPH-31A72> \xF0\xB1\xA9\xB2
+<CJK_UNIFIED_IDEOGRAPH-31A73> \xF0\xB1\xA9\xB3
+<CJK_UNIFIED_IDEOGRAPH-31A74> \xF0\xB1\xA9\xB4
+<CJK_UNIFIED_IDEOGRAPH-31A75> \xF0\xB1\xA9\xB5
+<CJK_UNIFIED_IDEOGRAPH-31A76> \xF0\xB1\xA9\xB6
+<CJK_UNIFIED_IDEOGRAPH-31A77> \xF0\xB1\xA9\xB7
+<CJK_UNIFIED_IDEOGRAPH-31A78> \xF0\xB1\xA9\xB8
+<CJK_UNIFIED_IDEOGRAPH-31A79> \xF0\xB1\xA9\xB9
+<CJK_UNIFIED_IDEOGRAPH-31A7A> \xF0\xB1\xA9\xBA
+<CJK_UNIFIED_IDEOGRAPH-31A7B> \xF0\xB1\xA9\xBB
+<CJK_UNIFIED_IDEOGRAPH-31A7C> \xF0\xB1\xA9\xBC
+<CJK_UNIFIED_IDEOGRAPH-31A7D> \xF0\xB1\xA9\xBD
+<CJK_UNIFIED_IDEOGRAPH-31A7E> \xF0\xB1\xA9\xBE
+<CJK_UNIFIED_IDEOGRAPH-31A7F> \xF0\xB1\xA9\xBF
+<CJK_UNIFIED_IDEOGRAPH-31A80> \xF0\xB1\xAA\x80
+<CJK_UNIFIED_IDEOGRAPH-31A81> \xF0\xB1\xAA\x81
+<CJK_UNIFIED_IDEOGRAPH-31A82> \xF0\xB1\xAA\x82
+<CJK_UNIFIED_IDEOGRAPH-31A83> \xF0\xB1\xAA\x83
+<CJK_UNIFIED_IDEOGRAPH-31A84> \xF0\xB1\xAA\x84
+<CJK_UNIFIED_IDEOGRAPH-31A85> \xF0\xB1\xAA\x85
+<CJK_UNIFIED_IDEOGRAPH-31A86> \xF0\xB1\xAA\x86
+<CJK_UNIFIED_IDEOGRAPH-31A87> \xF0\xB1\xAA\x87
+<CJK_UNIFIED_IDEOGRAPH-31A88> \xF0\xB1\xAA\x88
+<CJK_UNIFIED_IDEOGRAPH-31A89> \xF0\xB1\xAA\x89
+<CJK_UNIFIED_IDEOGRAPH-31A8A> \xF0\xB1\xAA\x8A
+<CJK_UNIFIED_IDEOGRAPH-31A8B> \xF0\xB1\xAA\x8B
+<CJK_UNIFIED_IDEOGRAPH-31A8C> \xF0\xB1\xAA\x8C
+<CJK_UNIFIED_IDEOGRAPH-31A8D> \xF0\xB1\xAA\x8D
+<CJK_UNIFIED_IDEOGRAPH-31A8E> \xF0\xB1\xAA\x8E
+<CJK_UNIFIED_IDEOGRAPH-31A8F> \xF0\xB1\xAA\x8F
+<CJK_UNIFIED_IDEOGRAPH-31A90> \xF0\xB1\xAA\x90
+<CJK_UNIFIED_IDEOGRAPH-31A91> \xF0\xB1\xAA\x91
+<CJK_UNIFIED_IDEOGRAPH-31A92> \xF0\xB1\xAA\x92
+<CJK_UNIFIED_IDEOGRAPH-31A93> \xF0\xB1\xAA\x93
+<CJK_UNIFIED_IDEOGRAPH-31A94> \xF0\xB1\xAA\x94
+<CJK_UNIFIED_IDEOGRAPH-31A95> \xF0\xB1\xAA\x95
+<CJK_UNIFIED_IDEOGRAPH-31A96> \xF0\xB1\xAA\x96
+<CJK_UNIFIED_IDEOGRAPH-31A97> \xF0\xB1\xAA\x97
+<CJK_UNIFIED_IDEOGRAPH-31A98> \xF0\xB1\xAA\x98
+<CJK_UNIFIED_IDEOGRAPH-31A99> \xF0\xB1\xAA\x99
+<CJK_UNIFIED_IDEOGRAPH-31A9A> \xF0\xB1\xAA\x9A
+<CJK_UNIFIED_IDEOGRAPH-31A9B> \xF0\xB1\xAA\x9B
+<CJK_UNIFIED_IDEOGRAPH-31A9C> \xF0\xB1\xAA\x9C
+<CJK_UNIFIED_IDEOGRAPH-31A9D> \xF0\xB1\xAA\x9D
+<CJK_UNIFIED_IDEOGRAPH-31A9E> \xF0\xB1\xAA\x9E
+<CJK_UNIFIED_IDEOGRAPH-31A9F> \xF0\xB1\xAA\x9F
+<CJK_UNIFIED_IDEOGRAPH-31AA0> \xF0\xB1\xAA\xA0
+<CJK_UNIFIED_IDEOGRAPH-31AA1> \xF0\xB1\xAA\xA1
+<CJK_UNIFIED_IDEOGRAPH-31AA2> \xF0\xB1\xAA\xA2
+<CJK_UNIFIED_IDEOGRAPH-31AA3> \xF0\xB1\xAA\xA3
+<CJK_UNIFIED_IDEOGRAPH-31AA4> \xF0\xB1\xAA\xA4
+<CJK_UNIFIED_IDEOGRAPH-31AA5> \xF0\xB1\xAA\xA5
+<CJK_UNIFIED_IDEOGRAPH-31AA6> \xF0\xB1\xAA\xA6
+<CJK_UNIFIED_IDEOGRAPH-31AA7> \xF0\xB1\xAA\xA7
+<CJK_UNIFIED_IDEOGRAPH-31AA8> \xF0\xB1\xAA\xA8
+<CJK_UNIFIED_IDEOGRAPH-31AA9> \xF0\xB1\xAA\xA9
+<CJK_UNIFIED_IDEOGRAPH-31AAA> \xF0\xB1\xAA\xAA
+<CJK_UNIFIED_IDEOGRAPH-31AAB> \xF0\xB1\xAA\xAB
+<CJK_UNIFIED_IDEOGRAPH-31AAC> \xF0\xB1\xAA\xAC
+<CJK_UNIFIED_IDEOGRAPH-31AAD> \xF0\xB1\xAA\xAD
+<CJK_UNIFIED_IDEOGRAPH-31AAE> \xF0\xB1\xAA\xAE
+<CJK_UNIFIED_IDEOGRAPH-31AAF> \xF0\xB1\xAA\xAF
+<CJK_UNIFIED_IDEOGRAPH-31AB0> \xF0\xB1\xAA\xB0
+<CJK_UNIFIED_IDEOGRAPH-31AB1> \xF0\xB1\xAA\xB1
+<CJK_UNIFIED_IDEOGRAPH-31AB2> \xF0\xB1\xAA\xB2
+<CJK_UNIFIED_IDEOGRAPH-31AB3> \xF0\xB1\xAA\xB3
+<CJK_UNIFIED_IDEOGRAPH-31AB4> \xF0\xB1\xAA\xB4
+<CJK_UNIFIED_IDEOGRAPH-31AB5> \xF0\xB1\xAA\xB5
+<CJK_UNIFIED_IDEOGRAPH-31AB6> \xF0\xB1\xAA\xB6
+<CJK_UNIFIED_IDEOGRAPH-31AB7> \xF0\xB1\xAA\xB7
+<CJK_UNIFIED_IDEOGRAPH-31AB8> \xF0\xB1\xAA\xB8
+<CJK_UNIFIED_IDEOGRAPH-31AB9> \xF0\xB1\xAA\xB9
+<CJK_UNIFIED_IDEOGRAPH-31ABA> \xF0\xB1\xAA\xBA
+<CJK_UNIFIED_IDEOGRAPH-31ABB> \xF0\xB1\xAA\xBB
+<CJK_UNIFIED_IDEOGRAPH-31ABC> \xF0\xB1\xAA\xBC
+<CJK_UNIFIED_IDEOGRAPH-31ABD> \xF0\xB1\xAA\xBD
+<CJK_UNIFIED_IDEOGRAPH-31ABE> \xF0\xB1\xAA\xBE
+<CJK_UNIFIED_IDEOGRAPH-31ABF> \xF0\xB1\xAA\xBF
+<CJK_UNIFIED_IDEOGRAPH-31AC0> \xF0\xB1\xAB\x80
+<CJK_UNIFIED_IDEOGRAPH-31AC1> \xF0\xB1\xAB\x81
+<CJK_UNIFIED_IDEOGRAPH-31AC2> \xF0\xB1\xAB\x82
+<CJK_UNIFIED_IDEOGRAPH-31AC3> \xF0\xB1\xAB\x83
+<CJK_UNIFIED_IDEOGRAPH-31AC4> \xF0\xB1\xAB\x84
+<CJK_UNIFIED_IDEOGRAPH-31AC5> \xF0\xB1\xAB\x85
+<CJK_UNIFIED_IDEOGRAPH-31AC6> \xF0\xB1\xAB\x86
+<CJK_UNIFIED_IDEOGRAPH-31AC7> \xF0\xB1\xAB\x87
+<CJK_UNIFIED_IDEOGRAPH-31AC8> \xF0\xB1\xAB\x88
+<CJK_UNIFIED_IDEOGRAPH-31AC9> \xF0\xB1\xAB\x89
+<CJK_UNIFIED_IDEOGRAPH-31ACA> \xF0\xB1\xAB\x8A
+<CJK_UNIFIED_IDEOGRAPH-31ACB> \xF0\xB1\xAB\x8B
+<CJK_UNIFIED_IDEOGRAPH-31ACC> \xF0\xB1\xAB\x8C
+<CJK_UNIFIED_IDEOGRAPH-31ACD> \xF0\xB1\xAB\x8D
+<CJK_UNIFIED_IDEOGRAPH-31ACE> \xF0\xB1\xAB\x8E
+<CJK_UNIFIED_IDEOGRAPH-31ACF> \xF0\xB1\xAB\x8F
+<CJK_UNIFIED_IDEOGRAPH-31AD0> \xF0\xB1\xAB\x90
+<CJK_UNIFIED_IDEOGRAPH-31AD1> \xF0\xB1\xAB\x91
+<CJK_UNIFIED_IDEOGRAPH-31AD2> \xF0\xB1\xAB\x92
+<CJK_UNIFIED_IDEOGRAPH-31AD3> \xF0\xB1\xAB\x93
+<CJK_UNIFIED_IDEOGRAPH-31AD4> \xF0\xB1\xAB\x94
+<CJK_UNIFIED_IDEOGRAPH-31AD5> \xF0\xB1\xAB\x95
+<CJK_UNIFIED_IDEOGRAPH-31AD6> \xF0\xB1\xAB\x96
+<CJK_UNIFIED_IDEOGRAPH-31AD7> \xF0\xB1\xAB\x97
+<CJK_UNIFIED_IDEOGRAPH-31AD8> \xF0\xB1\xAB\x98
+<CJK_UNIFIED_IDEOGRAPH-31AD9> \xF0\xB1\xAB\x99
+<CJK_UNIFIED_IDEOGRAPH-31ADA> \xF0\xB1\xAB\x9A
+<CJK_UNIFIED_IDEOGRAPH-31ADB> \xF0\xB1\xAB\x9B
+<CJK_UNIFIED_IDEOGRAPH-31ADC> \xF0\xB1\xAB\x9C
+<CJK_UNIFIED_IDEOGRAPH-31ADD> \xF0\xB1\xAB\x9D
+<CJK_UNIFIED_IDEOGRAPH-31ADE> \xF0\xB1\xAB\x9E
+<CJK_UNIFIED_IDEOGRAPH-31ADF> \xF0\xB1\xAB\x9F
+<CJK_UNIFIED_IDEOGRAPH-31AE0> \xF0\xB1\xAB\xA0
+<CJK_UNIFIED_IDEOGRAPH-31AE1> \xF0\xB1\xAB\xA1
+<CJK_UNIFIED_IDEOGRAPH-31AE2> \xF0\xB1\xAB\xA2
+<CJK_UNIFIED_IDEOGRAPH-31AE3> \xF0\xB1\xAB\xA3
+<CJK_UNIFIED_IDEOGRAPH-31AE4> \xF0\xB1\xAB\xA4
+<CJK_UNIFIED_IDEOGRAPH-31AE5> \xF0\xB1\xAB\xA5
+<CJK_UNIFIED_IDEOGRAPH-31AE6> \xF0\xB1\xAB\xA6
+<CJK_UNIFIED_IDEOGRAPH-31AE7> \xF0\xB1\xAB\xA7
+<CJK_UNIFIED_IDEOGRAPH-31AE8> \xF0\xB1\xAB\xA8
+<CJK_UNIFIED_IDEOGRAPH-31AE9> \xF0\xB1\xAB\xA9
+<CJK_UNIFIED_IDEOGRAPH-31AEA> \xF0\xB1\xAB\xAA
+<CJK_UNIFIED_IDEOGRAPH-31AEB> \xF0\xB1\xAB\xAB
+<CJK_UNIFIED_IDEOGRAPH-31AEC> \xF0\xB1\xAB\xAC
+<CJK_UNIFIED_IDEOGRAPH-31AED> \xF0\xB1\xAB\xAD
+<CJK_UNIFIED_IDEOGRAPH-31AEE> \xF0\xB1\xAB\xAE
+<CJK_UNIFIED_IDEOGRAPH-31AEF> \xF0\xB1\xAB\xAF
+<CJK_UNIFIED_IDEOGRAPH-31AF0> \xF0\xB1\xAB\xB0
+<CJK_UNIFIED_IDEOGRAPH-31AF1> \xF0\xB1\xAB\xB1
+<CJK_UNIFIED_IDEOGRAPH-31AF2> \xF0\xB1\xAB\xB2
+<CJK_UNIFIED_IDEOGRAPH-31AF3> \xF0\xB1\xAB\xB3
+<CJK_UNIFIED_IDEOGRAPH-31AF4> \xF0\xB1\xAB\xB4
+<CJK_UNIFIED_IDEOGRAPH-31AF5> \xF0\xB1\xAB\xB5
+<CJK_UNIFIED_IDEOGRAPH-31AF6> \xF0\xB1\xAB\xB6
+<CJK_UNIFIED_IDEOGRAPH-31AF7> \xF0\xB1\xAB\xB7
+<CJK_UNIFIED_IDEOGRAPH-31AF8> \xF0\xB1\xAB\xB8
+<CJK_UNIFIED_IDEOGRAPH-31AF9> \xF0\xB1\xAB\xB9
+<CJK_UNIFIED_IDEOGRAPH-31AFA> \xF0\xB1\xAB\xBA
+<CJK_UNIFIED_IDEOGRAPH-31AFB> \xF0\xB1\xAB\xBB
+<CJK_UNIFIED_IDEOGRAPH-31AFC> \xF0\xB1\xAB\xBC
+<CJK_UNIFIED_IDEOGRAPH-31AFD> \xF0\xB1\xAB\xBD
+<CJK_UNIFIED_IDEOGRAPH-31AFE> \xF0\xB1\xAB\xBE
+<CJK_UNIFIED_IDEOGRAPH-31AFF> \xF0\xB1\xAB\xBF
+<CJK_UNIFIED_IDEOGRAPH-31B00> \xF0\xB1\xAC\x80
+<CJK_UNIFIED_IDEOGRAPH-31B01> \xF0\xB1\xAC\x81
+<CJK_UNIFIED_IDEOGRAPH-31B02> \xF0\xB1\xAC\x82
+<CJK_UNIFIED_IDEOGRAPH-31B03> \xF0\xB1\xAC\x83
+<CJK_UNIFIED_IDEOGRAPH-31B04> \xF0\xB1\xAC\x84
+<CJK_UNIFIED_IDEOGRAPH-31B05> \xF0\xB1\xAC\x85
+<CJK_UNIFIED_IDEOGRAPH-31B06> \xF0\xB1\xAC\x86
+<CJK_UNIFIED_IDEOGRAPH-31B07> \xF0\xB1\xAC\x87
+<CJK_UNIFIED_IDEOGRAPH-31B08> \xF0\xB1\xAC\x88
+<CJK_UNIFIED_IDEOGRAPH-31B09> \xF0\xB1\xAC\x89
+<CJK_UNIFIED_IDEOGRAPH-31B0A> \xF0\xB1\xAC\x8A
+<CJK_UNIFIED_IDEOGRAPH-31B0B> \xF0\xB1\xAC\x8B
+<CJK_UNIFIED_IDEOGRAPH-31B0C> \xF0\xB1\xAC\x8C
+<CJK_UNIFIED_IDEOGRAPH-31B0D> \xF0\xB1\xAC\x8D
+<CJK_UNIFIED_IDEOGRAPH-31B0E> \xF0\xB1\xAC\x8E
+<CJK_UNIFIED_IDEOGRAPH-31B0F> \xF0\xB1\xAC\x8F
+<CJK_UNIFIED_IDEOGRAPH-31B10> \xF0\xB1\xAC\x90
+<CJK_UNIFIED_IDEOGRAPH-31B11> \xF0\xB1\xAC\x91
+<CJK_UNIFIED_IDEOGRAPH-31B12> \xF0\xB1\xAC\x92
+<CJK_UNIFIED_IDEOGRAPH-31B13> \xF0\xB1\xAC\x93
+<CJK_UNIFIED_IDEOGRAPH-31B14> \xF0\xB1\xAC\x94
+<CJK_UNIFIED_IDEOGRAPH-31B15> \xF0\xB1\xAC\x95
+<CJK_UNIFIED_IDEOGRAPH-31B16> \xF0\xB1\xAC\x96
+<CJK_UNIFIED_IDEOGRAPH-31B17> \xF0\xB1\xAC\x97
+<CJK_UNIFIED_IDEOGRAPH-31B18> \xF0\xB1\xAC\x98
+<CJK_UNIFIED_IDEOGRAPH-31B19> \xF0\xB1\xAC\x99
+<CJK_UNIFIED_IDEOGRAPH-31B1A> \xF0\xB1\xAC\x9A
+<CJK_UNIFIED_IDEOGRAPH-31B1B> \xF0\xB1\xAC\x9B
+<CJK_UNIFIED_IDEOGRAPH-31B1C> \xF0\xB1\xAC\x9C
+<CJK_UNIFIED_IDEOGRAPH-31B1D> \xF0\xB1\xAC\x9D
+<CJK_UNIFIED_IDEOGRAPH-31B1E> \xF0\xB1\xAC\x9E
+<CJK_UNIFIED_IDEOGRAPH-31B1F> \xF0\xB1\xAC\x9F
+<CJK_UNIFIED_IDEOGRAPH-31B20> \xF0\xB1\xAC\xA0
+<CJK_UNIFIED_IDEOGRAPH-31B21> \xF0\xB1\xAC\xA1
+<CJK_UNIFIED_IDEOGRAPH-31B22> \xF0\xB1\xAC\xA2
+<CJK_UNIFIED_IDEOGRAPH-31B23> \xF0\xB1\xAC\xA3
+<CJK_UNIFIED_IDEOGRAPH-31B24> \xF0\xB1\xAC\xA4
+<CJK_UNIFIED_IDEOGRAPH-31B25> \xF0\xB1\xAC\xA5
+<CJK_UNIFIED_IDEOGRAPH-31B26> \xF0\xB1\xAC\xA6
+<CJK_UNIFIED_IDEOGRAPH-31B27> \xF0\xB1\xAC\xA7
+<CJK_UNIFIED_IDEOGRAPH-31B28> \xF0\xB1\xAC\xA8
+<CJK_UNIFIED_IDEOGRAPH-31B29> \xF0\xB1\xAC\xA9
+<CJK_UNIFIED_IDEOGRAPH-31B2A> \xF0\xB1\xAC\xAA
+<CJK_UNIFIED_IDEOGRAPH-31B2B> \xF0\xB1\xAC\xAB
+<CJK_UNIFIED_IDEOGRAPH-31B2C> \xF0\xB1\xAC\xAC
+<CJK_UNIFIED_IDEOGRAPH-31B2D> \xF0\xB1\xAC\xAD
+<CJK_UNIFIED_IDEOGRAPH-31B2E> \xF0\xB1\xAC\xAE
+<CJK_UNIFIED_IDEOGRAPH-31B2F> \xF0\xB1\xAC\xAF
+<CJK_UNIFIED_IDEOGRAPH-31B30> \xF0\xB1\xAC\xB0
+<CJK_UNIFIED_IDEOGRAPH-31B31> \xF0\xB1\xAC\xB1
+<CJK_UNIFIED_IDEOGRAPH-31B32> \xF0\xB1\xAC\xB2
+<CJK_UNIFIED_IDEOGRAPH-31B33> \xF0\xB1\xAC\xB3
+<CJK_UNIFIED_IDEOGRAPH-31B34> \xF0\xB1\xAC\xB4
+<CJK_UNIFIED_IDEOGRAPH-31B35> \xF0\xB1\xAC\xB5
+<CJK_UNIFIED_IDEOGRAPH-31B36> \xF0\xB1\xAC\xB6
+<CJK_UNIFIED_IDEOGRAPH-31B37> \xF0\xB1\xAC\xB7
+<CJK_UNIFIED_IDEOGRAPH-31B38> \xF0\xB1\xAC\xB8
+<CJK_UNIFIED_IDEOGRAPH-31B39> \xF0\xB1\xAC\xB9
+<CJK_UNIFIED_IDEOGRAPH-31B3A> \xF0\xB1\xAC\xBA
+<CJK_UNIFIED_IDEOGRAPH-31B3B> \xF0\xB1\xAC\xBB
+<CJK_UNIFIED_IDEOGRAPH-31B3C> \xF0\xB1\xAC\xBC
+<CJK_UNIFIED_IDEOGRAPH-31B3D> \xF0\xB1\xAC\xBD
+<CJK_UNIFIED_IDEOGRAPH-31B3E> \xF0\xB1\xAC\xBE
+<CJK_UNIFIED_IDEOGRAPH-31B3F> \xF0\xB1\xAC\xBF
+<CJK_UNIFIED_IDEOGRAPH-31B40> \xF0\xB1\xAD\x80
+<CJK_UNIFIED_IDEOGRAPH-31B41> \xF0\xB1\xAD\x81
+<CJK_UNIFIED_IDEOGRAPH-31B42> \xF0\xB1\xAD\x82
+<CJK_UNIFIED_IDEOGRAPH-31B43> \xF0\xB1\xAD\x83
+<CJK_UNIFIED_IDEOGRAPH-31B44> \xF0\xB1\xAD\x84
+<CJK_UNIFIED_IDEOGRAPH-31B45> \xF0\xB1\xAD\x85
+<CJK_UNIFIED_IDEOGRAPH-31B46> \xF0\xB1\xAD\x86
+<CJK_UNIFIED_IDEOGRAPH-31B47> \xF0\xB1\xAD\x87
+<CJK_UNIFIED_IDEOGRAPH-31B48> \xF0\xB1\xAD\x88
+<CJK_UNIFIED_IDEOGRAPH-31B49> \xF0\xB1\xAD\x89
+<CJK_UNIFIED_IDEOGRAPH-31B4A> \xF0\xB1\xAD\x8A
+<CJK_UNIFIED_IDEOGRAPH-31B4B> \xF0\xB1\xAD\x8B
+<CJK_UNIFIED_IDEOGRAPH-31B4C> \xF0\xB1\xAD\x8C
+<CJK_UNIFIED_IDEOGRAPH-31B4D> \xF0\xB1\xAD\x8D
+<CJK_UNIFIED_IDEOGRAPH-31B4E> \xF0\xB1\xAD\x8E
+<CJK_UNIFIED_IDEOGRAPH-31B4F> \xF0\xB1\xAD\x8F
+<CJK_UNIFIED_IDEOGRAPH-31B50> \xF0\xB1\xAD\x90
+<CJK_UNIFIED_IDEOGRAPH-31B51> \xF0\xB1\xAD\x91
+<CJK_UNIFIED_IDEOGRAPH-31B52> \xF0\xB1\xAD\x92
+<CJK_UNIFIED_IDEOGRAPH-31B53> \xF0\xB1\xAD\x93
+<CJK_UNIFIED_IDEOGRAPH-31B54> \xF0\xB1\xAD\x94
+<CJK_UNIFIED_IDEOGRAPH-31B55> \xF0\xB1\xAD\x95
+<CJK_UNIFIED_IDEOGRAPH-31B56> \xF0\xB1\xAD\x96
+<CJK_UNIFIED_IDEOGRAPH-31B57> \xF0\xB1\xAD\x97
+<CJK_UNIFIED_IDEOGRAPH-31B58> \xF0\xB1\xAD\x98
+<CJK_UNIFIED_IDEOGRAPH-31B59> \xF0\xB1\xAD\x99
+<CJK_UNIFIED_IDEOGRAPH-31B5A> \xF0\xB1\xAD\x9A
+<CJK_UNIFIED_IDEOGRAPH-31B5B> \xF0\xB1\xAD\x9B
+<CJK_UNIFIED_IDEOGRAPH-31B5C> \xF0\xB1\xAD\x9C
+<CJK_UNIFIED_IDEOGRAPH-31B5D> \xF0\xB1\xAD\x9D
+<CJK_UNIFIED_IDEOGRAPH-31B5E> \xF0\xB1\xAD\x9E
+<CJK_UNIFIED_IDEOGRAPH-31B5F> \xF0\xB1\xAD\x9F
+<CJK_UNIFIED_IDEOGRAPH-31B60> \xF0\xB1\xAD\xA0
+<CJK_UNIFIED_IDEOGRAPH-31B61> \xF0\xB1\xAD\xA1
+<CJK_UNIFIED_IDEOGRAPH-31B62> \xF0\xB1\xAD\xA2
+<CJK_UNIFIED_IDEOGRAPH-31B63> \xF0\xB1\xAD\xA3
+<CJK_UNIFIED_IDEOGRAPH-31B64> \xF0\xB1\xAD\xA4
+<CJK_UNIFIED_IDEOGRAPH-31B65> \xF0\xB1\xAD\xA5
+<CJK_UNIFIED_IDEOGRAPH-31B66> \xF0\xB1\xAD\xA6
+<CJK_UNIFIED_IDEOGRAPH-31B67> \xF0\xB1\xAD\xA7
+<CJK_UNIFIED_IDEOGRAPH-31B68> \xF0\xB1\xAD\xA8
+<CJK_UNIFIED_IDEOGRAPH-31B69> \xF0\xB1\xAD\xA9
+<CJK_UNIFIED_IDEOGRAPH-31B6A> \xF0\xB1\xAD\xAA
+<CJK_UNIFIED_IDEOGRAPH-31B6B> \xF0\xB1\xAD\xAB
+<CJK_UNIFIED_IDEOGRAPH-31B6C> \xF0\xB1\xAD\xAC
+<CJK_UNIFIED_IDEOGRAPH-31B6D> \xF0\xB1\xAD\xAD
+<CJK_UNIFIED_IDEOGRAPH-31B6E> \xF0\xB1\xAD\xAE
+<CJK_UNIFIED_IDEOGRAPH-31B6F> \xF0\xB1\xAD\xAF
+<CJK_UNIFIED_IDEOGRAPH-31B70> \xF0\xB1\xAD\xB0
+<CJK_UNIFIED_IDEOGRAPH-31B71> \xF0\xB1\xAD\xB1
+<CJK_UNIFIED_IDEOGRAPH-31B72> \xF0\xB1\xAD\xB2
+<CJK_UNIFIED_IDEOGRAPH-31B73> \xF0\xB1\xAD\xB3
+<CJK_UNIFIED_IDEOGRAPH-31B74> \xF0\xB1\xAD\xB4
+<CJK_UNIFIED_IDEOGRAPH-31B75> \xF0\xB1\xAD\xB5
+<CJK_UNIFIED_IDEOGRAPH-31B76> \xF0\xB1\xAD\xB6
+<CJK_UNIFIED_IDEOGRAPH-31B77> \xF0\xB1\xAD\xB7
+<CJK_UNIFIED_IDEOGRAPH-31B78> \xF0\xB1\xAD\xB8
+<CJK_UNIFIED_IDEOGRAPH-31B79> \xF0\xB1\xAD\xB9
+<CJK_UNIFIED_IDEOGRAPH-31B7A> \xF0\xB1\xAD\xBA
+<CJK_UNIFIED_IDEOGRAPH-31B7B> \xF0\xB1\xAD\xBB
+<CJK_UNIFIED_IDEOGRAPH-31B7C> \xF0\xB1\xAD\xBC
+<CJK_UNIFIED_IDEOGRAPH-31B7D> \xF0\xB1\xAD\xBD
+<CJK_UNIFIED_IDEOGRAPH-31B7E> \xF0\xB1\xAD\xBE
+<CJK_UNIFIED_IDEOGRAPH-31B7F> \xF0\xB1\xAD\xBF
+<CJK_UNIFIED_IDEOGRAPH-31B80> \xF0\xB1\xAE\x80
+<CJK_UNIFIED_IDEOGRAPH-31B81> \xF0\xB1\xAE\x81
+<CJK_UNIFIED_IDEOGRAPH-31B82> \xF0\xB1\xAE\x82
+<CJK_UNIFIED_IDEOGRAPH-31B83> \xF0\xB1\xAE\x83
+<CJK_UNIFIED_IDEOGRAPH-31B84> \xF0\xB1\xAE\x84
+<CJK_UNIFIED_IDEOGRAPH-31B85> \xF0\xB1\xAE\x85
+<CJK_UNIFIED_IDEOGRAPH-31B86> \xF0\xB1\xAE\x86
+<CJK_UNIFIED_IDEOGRAPH-31B87> \xF0\xB1\xAE\x87
+<CJK_UNIFIED_IDEOGRAPH-31B88> \xF0\xB1\xAE\x88
+<CJK_UNIFIED_IDEOGRAPH-31B89> \xF0\xB1\xAE\x89
+<CJK_UNIFIED_IDEOGRAPH-31B8A> \xF0\xB1\xAE\x8A
+<CJK_UNIFIED_IDEOGRAPH-31B8B> \xF0\xB1\xAE\x8B
+<CJK_UNIFIED_IDEOGRAPH-31B8C> \xF0\xB1\xAE\x8C
+<CJK_UNIFIED_IDEOGRAPH-31B8D> \xF0\xB1\xAE\x8D
+<CJK_UNIFIED_IDEOGRAPH-31B8E> \xF0\xB1\xAE\x8E
+<CJK_UNIFIED_IDEOGRAPH-31B8F> \xF0\xB1\xAE\x8F
+<CJK_UNIFIED_IDEOGRAPH-31B90> \xF0\xB1\xAE\x90
+<CJK_UNIFIED_IDEOGRAPH-31B91> \xF0\xB1\xAE\x91
+<CJK_UNIFIED_IDEOGRAPH-31B92> \xF0\xB1\xAE\x92
+<CJK_UNIFIED_IDEOGRAPH-31B93> \xF0\xB1\xAE\x93
+<CJK_UNIFIED_IDEOGRAPH-31B94> \xF0\xB1\xAE\x94
+<CJK_UNIFIED_IDEOGRAPH-31B95> \xF0\xB1\xAE\x95
+<CJK_UNIFIED_IDEOGRAPH-31B96> \xF0\xB1\xAE\x96
+<CJK_UNIFIED_IDEOGRAPH-31B97> \xF0\xB1\xAE\x97
+<CJK_UNIFIED_IDEOGRAPH-31B98> \xF0\xB1\xAE\x98
+<CJK_UNIFIED_IDEOGRAPH-31B99> \xF0\xB1\xAE\x99
+<CJK_UNIFIED_IDEOGRAPH-31B9A> \xF0\xB1\xAE\x9A
+<CJK_UNIFIED_IDEOGRAPH-31B9B> \xF0\xB1\xAE\x9B
+<CJK_UNIFIED_IDEOGRAPH-31B9C> \xF0\xB1\xAE\x9C
+<CJK_UNIFIED_IDEOGRAPH-31B9D> \xF0\xB1\xAE\x9D
+<CJK_UNIFIED_IDEOGRAPH-31B9E> \xF0\xB1\xAE\x9E
+<CJK_UNIFIED_IDEOGRAPH-31B9F> \xF0\xB1\xAE\x9F
+<CJK_UNIFIED_IDEOGRAPH-31BA0> \xF0\xB1\xAE\xA0
+<CJK_UNIFIED_IDEOGRAPH-31BA1> \xF0\xB1\xAE\xA1
+<CJK_UNIFIED_IDEOGRAPH-31BA2> \xF0\xB1\xAE\xA2
+<CJK_UNIFIED_IDEOGRAPH-31BA3> \xF0\xB1\xAE\xA3
+<CJK_UNIFIED_IDEOGRAPH-31BA4> \xF0\xB1\xAE\xA4
+<CJK_UNIFIED_IDEOGRAPH-31BA5> \xF0\xB1\xAE\xA5
+<CJK_UNIFIED_IDEOGRAPH-31BA6> \xF0\xB1\xAE\xA6
+<CJK_UNIFIED_IDEOGRAPH-31BA7> \xF0\xB1\xAE\xA7
+<CJK_UNIFIED_IDEOGRAPH-31BA8> \xF0\xB1\xAE\xA8
+<CJK_UNIFIED_IDEOGRAPH-31BA9> \xF0\xB1\xAE\xA9
+<CJK_UNIFIED_IDEOGRAPH-31BAA> \xF0\xB1\xAE\xAA
+<CJK_UNIFIED_IDEOGRAPH-31BAB> \xF0\xB1\xAE\xAB
+<CJK_UNIFIED_IDEOGRAPH-31BAC> \xF0\xB1\xAE\xAC
+<CJK_UNIFIED_IDEOGRAPH-31BAD> \xF0\xB1\xAE\xAD
+<CJK_UNIFIED_IDEOGRAPH-31BAE> \xF0\xB1\xAE\xAE
+<CJK_UNIFIED_IDEOGRAPH-31BAF> \xF0\xB1\xAE\xAF
+<CJK_UNIFIED_IDEOGRAPH-31BB0> \xF0\xB1\xAE\xB0
+<CJK_UNIFIED_IDEOGRAPH-31BB1> \xF0\xB1\xAE\xB1
+<CJK_UNIFIED_IDEOGRAPH-31BB2> \xF0\xB1\xAE\xB2
+<CJK_UNIFIED_IDEOGRAPH-31BB3> \xF0\xB1\xAE\xB3
+<CJK_UNIFIED_IDEOGRAPH-31BB4> \xF0\xB1\xAE\xB4
+<CJK_UNIFIED_IDEOGRAPH-31BB5> \xF0\xB1\xAE\xB5
+<CJK_UNIFIED_IDEOGRAPH-31BB6> \xF0\xB1\xAE\xB6
+<CJK_UNIFIED_IDEOGRAPH-31BB7> \xF0\xB1\xAE\xB7
+<CJK_UNIFIED_IDEOGRAPH-31BB8> \xF0\xB1\xAE\xB8
+<CJK_UNIFIED_IDEOGRAPH-31BB9> \xF0\xB1\xAE\xB9
+<CJK_UNIFIED_IDEOGRAPH-31BBA> \xF0\xB1\xAE\xBA
+<CJK_UNIFIED_IDEOGRAPH-31BBB> \xF0\xB1\xAE\xBB
+<CJK_UNIFIED_IDEOGRAPH-31BBC> \xF0\xB1\xAE\xBC
+<CJK_UNIFIED_IDEOGRAPH-31BBD> \xF0\xB1\xAE\xBD
+<CJK_UNIFIED_IDEOGRAPH-31BBE> \xF0\xB1\xAE\xBE
+<CJK_UNIFIED_IDEOGRAPH-31BBF> \xF0\xB1\xAE\xBF
+<CJK_UNIFIED_IDEOGRAPH-31BC0> \xF0\xB1\xAF\x80
+<CJK_UNIFIED_IDEOGRAPH-31BC1> \xF0\xB1\xAF\x81
+<CJK_UNIFIED_IDEOGRAPH-31BC2> \xF0\xB1\xAF\x82
+<CJK_UNIFIED_IDEOGRAPH-31BC3> \xF0\xB1\xAF\x83
+<CJK_UNIFIED_IDEOGRAPH-31BC4> \xF0\xB1\xAF\x84
+<CJK_UNIFIED_IDEOGRAPH-31BC5> \xF0\xB1\xAF\x85
+<CJK_UNIFIED_IDEOGRAPH-31BC6> \xF0\xB1\xAF\x86
+<CJK_UNIFIED_IDEOGRAPH-31BC7> \xF0\xB1\xAF\x87
+<CJK_UNIFIED_IDEOGRAPH-31BC8> \xF0\xB1\xAF\x88
+<CJK_UNIFIED_IDEOGRAPH-31BC9> \xF0\xB1\xAF\x89
+<CJK_UNIFIED_IDEOGRAPH-31BCA> \xF0\xB1\xAF\x8A
+<CJK_UNIFIED_IDEOGRAPH-31BCB> \xF0\xB1\xAF\x8B
+<CJK_UNIFIED_IDEOGRAPH-31BCC> \xF0\xB1\xAF\x8C
+<CJK_UNIFIED_IDEOGRAPH-31BCD> \xF0\xB1\xAF\x8D
+<CJK_UNIFIED_IDEOGRAPH-31BCE> \xF0\xB1\xAF\x8E
+<CJK_UNIFIED_IDEOGRAPH-31BCF> \xF0\xB1\xAF\x8F
+<CJK_UNIFIED_IDEOGRAPH-31BD0> \xF0\xB1\xAF\x90
+<CJK_UNIFIED_IDEOGRAPH-31BD1> \xF0\xB1\xAF\x91
+<CJK_UNIFIED_IDEOGRAPH-31BD2> \xF0\xB1\xAF\x92
+<CJK_UNIFIED_IDEOGRAPH-31BD3> \xF0\xB1\xAF\x93
+<CJK_UNIFIED_IDEOGRAPH-31BD4> \xF0\xB1\xAF\x94
+<CJK_UNIFIED_IDEOGRAPH-31BD5> \xF0\xB1\xAF\x95
+<CJK_UNIFIED_IDEOGRAPH-31BD6> \xF0\xB1\xAF\x96
+<CJK_UNIFIED_IDEOGRAPH-31BD7> \xF0\xB1\xAF\x97
+<CJK_UNIFIED_IDEOGRAPH-31BD8> \xF0\xB1\xAF\x98
+<CJK_UNIFIED_IDEOGRAPH-31BD9> \xF0\xB1\xAF\x99
+<CJK_UNIFIED_IDEOGRAPH-31BDA> \xF0\xB1\xAF\x9A
+<CJK_UNIFIED_IDEOGRAPH-31BDB> \xF0\xB1\xAF\x9B
+<CJK_UNIFIED_IDEOGRAPH-31BDC> \xF0\xB1\xAF\x9C
+<CJK_UNIFIED_IDEOGRAPH-31BDD> \xF0\xB1\xAF\x9D
+<CJK_UNIFIED_IDEOGRAPH-31BDE> \xF0\xB1\xAF\x9E
+<CJK_UNIFIED_IDEOGRAPH-31BDF> \xF0\xB1\xAF\x9F
+<CJK_UNIFIED_IDEOGRAPH-31BE0> \xF0\xB1\xAF\xA0
+<CJK_UNIFIED_IDEOGRAPH-31BE1> \xF0\xB1\xAF\xA1
+<CJK_UNIFIED_IDEOGRAPH-31BE2> \xF0\xB1\xAF\xA2
+<CJK_UNIFIED_IDEOGRAPH-31BE3> \xF0\xB1\xAF\xA3
+<CJK_UNIFIED_IDEOGRAPH-31BE4> \xF0\xB1\xAF\xA4
+<CJK_UNIFIED_IDEOGRAPH-31BE5> \xF0\xB1\xAF\xA5
+<CJK_UNIFIED_IDEOGRAPH-31BE6> \xF0\xB1\xAF\xA6
+<CJK_UNIFIED_IDEOGRAPH-31BE7> \xF0\xB1\xAF\xA7
+<CJK_UNIFIED_IDEOGRAPH-31BE8> \xF0\xB1\xAF\xA8
+<CJK_UNIFIED_IDEOGRAPH-31BE9> \xF0\xB1\xAF\xA9
+<CJK_UNIFIED_IDEOGRAPH-31BEA> \xF0\xB1\xAF\xAA
+<CJK_UNIFIED_IDEOGRAPH-31BEB> \xF0\xB1\xAF\xAB
+<CJK_UNIFIED_IDEOGRAPH-31BEC> \xF0\xB1\xAF\xAC
+<CJK_UNIFIED_IDEOGRAPH-31BED> \xF0\xB1\xAF\xAD
+<CJK_UNIFIED_IDEOGRAPH-31BEE> \xF0\xB1\xAF\xAE
+<CJK_UNIFIED_IDEOGRAPH-31BEF> \xF0\xB1\xAF\xAF
+<CJK_UNIFIED_IDEOGRAPH-31BF0> \xF0\xB1\xAF\xB0
+<CJK_UNIFIED_IDEOGRAPH-31BF1> \xF0\xB1\xAF\xB1
+<CJK_UNIFIED_IDEOGRAPH-31BF2> \xF0\xB1\xAF\xB2
+<CJK_UNIFIED_IDEOGRAPH-31BF3> \xF0\xB1\xAF\xB3
+<CJK_UNIFIED_IDEOGRAPH-31BF4> \xF0\xB1\xAF\xB4
+<CJK_UNIFIED_IDEOGRAPH-31BF5> \xF0\xB1\xAF\xB5
+<CJK_UNIFIED_IDEOGRAPH-31BF6> \xF0\xB1\xAF\xB6
+<CJK_UNIFIED_IDEOGRAPH-31BF7> \xF0\xB1\xAF\xB7
+<CJK_UNIFIED_IDEOGRAPH-31BF8> \xF0\xB1\xAF\xB8
+<CJK_UNIFIED_IDEOGRAPH-31BF9> \xF0\xB1\xAF\xB9
+<CJK_UNIFIED_IDEOGRAPH-31BFA> \xF0\xB1\xAF\xBA
+<CJK_UNIFIED_IDEOGRAPH-31BFB> \xF0\xB1\xAF\xBB
+<CJK_UNIFIED_IDEOGRAPH-31BFC> \xF0\xB1\xAF\xBC
+<CJK_UNIFIED_IDEOGRAPH-31BFD> \xF0\xB1\xAF\xBD
+<CJK_UNIFIED_IDEOGRAPH-31BFE> \xF0\xB1\xAF\xBE
+<CJK_UNIFIED_IDEOGRAPH-31BFF> \xF0\xB1\xAF\xBF
+<CJK_UNIFIED_IDEOGRAPH-31C00> \xF0\xB1\xB0\x80
+<CJK_UNIFIED_IDEOGRAPH-31C01> \xF0\xB1\xB0\x81
+<CJK_UNIFIED_IDEOGRAPH-31C02> \xF0\xB1\xB0\x82
+<CJK_UNIFIED_IDEOGRAPH-31C03> \xF0\xB1\xB0\x83
+<CJK_UNIFIED_IDEOGRAPH-31C04> \xF0\xB1\xB0\x84
+<CJK_UNIFIED_IDEOGRAPH-31C05> \xF0\xB1\xB0\x85
+<CJK_UNIFIED_IDEOGRAPH-31C06> \xF0\xB1\xB0\x86
+<CJK_UNIFIED_IDEOGRAPH-31C07> \xF0\xB1\xB0\x87
+<CJK_UNIFIED_IDEOGRAPH-31C08> \xF0\xB1\xB0\x88
+<CJK_UNIFIED_IDEOGRAPH-31C09> \xF0\xB1\xB0\x89
+<CJK_UNIFIED_IDEOGRAPH-31C0A> \xF0\xB1\xB0\x8A
+<CJK_UNIFIED_IDEOGRAPH-31C0B> \xF0\xB1\xB0\x8B
+<CJK_UNIFIED_IDEOGRAPH-31C0C> \xF0\xB1\xB0\x8C
+<CJK_UNIFIED_IDEOGRAPH-31C0D> \xF0\xB1\xB0\x8D
+<CJK_UNIFIED_IDEOGRAPH-31C0E> \xF0\xB1\xB0\x8E
+<CJK_UNIFIED_IDEOGRAPH-31C0F> \xF0\xB1\xB0\x8F
+<CJK_UNIFIED_IDEOGRAPH-31C10> \xF0\xB1\xB0\x90
+<CJK_UNIFIED_IDEOGRAPH-31C11> \xF0\xB1\xB0\x91
+<CJK_UNIFIED_IDEOGRAPH-31C12> \xF0\xB1\xB0\x92
+<CJK_UNIFIED_IDEOGRAPH-31C13> \xF0\xB1\xB0\x93
+<CJK_UNIFIED_IDEOGRAPH-31C14> \xF0\xB1\xB0\x94
+<CJK_UNIFIED_IDEOGRAPH-31C15> \xF0\xB1\xB0\x95
+<CJK_UNIFIED_IDEOGRAPH-31C16> \xF0\xB1\xB0\x96
+<CJK_UNIFIED_IDEOGRAPH-31C17> \xF0\xB1\xB0\x97
+<CJK_UNIFIED_IDEOGRAPH-31C18> \xF0\xB1\xB0\x98
+<CJK_UNIFIED_IDEOGRAPH-31C19> \xF0\xB1\xB0\x99
+<CJK_UNIFIED_IDEOGRAPH-31C1A> \xF0\xB1\xB0\x9A
+<CJK_UNIFIED_IDEOGRAPH-31C1B> \xF0\xB1\xB0\x9B
+<CJK_UNIFIED_IDEOGRAPH-31C1C> \xF0\xB1\xB0\x9C
+<CJK_UNIFIED_IDEOGRAPH-31C1D> \xF0\xB1\xB0\x9D
+<CJK_UNIFIED_IDEOGRAPH-31C1E> \xF0\xB1\xB0\x9E
+<CJK_UNIFIED_IDEOGRAPH-31C1F> \xF0\xB1\xB0\x9F
+<CJK_UNIFIED_IDEOGRAPH-31C20> \xF0\xB1\xB0\xA0
+<CJK_UNIFIED_IDEOGRAPH-31C21> \xF0\xB1\xB0\xA1
+<CJK_UNIFIED_IDEOGRAPH-31C22> \xF0\xB1\xB0\xA2
+<CJK_UNIFIED_IDEOGRAPH-31C23> \xF0\xB1\xB0\xA3
+<CJK_UNIFIED_IDEOGRAPH-31C24> \xF0\xB1\xB0\xA4
+<CJK_UNIFIED_IDEOGRAPH-31C25> \xF0\xB1\xB0\xA5
+<CJK_UNIFIED_IDEOGRAPH-31C26> \xF0\xB1\xB0\xA6
+<CJK_UNIFIED_IDEOGRAPH-31C27> \xF0\xB1\xB0\xA7
+<CJK_UNIFIED_IDEOGRAPH-31C28> \xF0\xB1\xB0\xA8
+<CJK_UNIFIED_IDEOGRAPH-31C29> \xF0\xB1\xB0\xA9
+<CJK_UNIFIED_IDEOGRAPH-31C2A> \xF0\xB1\xB0\xAA
+<CJK_UNIFIED_IDEOGRAPH-31C2B> \xF0\xB1\xB0\xAB
+<CJK_UNIFIED_IDEOGRAPH-31C2C> \xF0\xB1\xB0\xAC
+<CJK_UNIFIED_IDEOGRAPH-31C2D> \xF0\xB1\xB0\xAD
+<CJK_UNIFIED_IDEOGRAPH-31C2E> \xF0\xB1\xB0\xAE
+<CJK_UNIFIED_IDEOGRAPH-31C2F> \xF0\xB1\xB0\xAF
+<CJK_UNIFIED_IDEOGRAPH-31C30> \xF0\xB1\xB0\xB0
+<CJK_UNIFIED_IDEOGRAPH-31C31> \xF0\xB1\xB0\xB1
+<CJK_UNIFIED_IDEOGRAPH-31C32> \xF0\xB1\xB0\xB2
+<CJK_UNIFIED_IDEOGRAPH-31C33> \xF0\xB1\xB0\xB3
+<CJK_UNIFIED_IDEOGRAPH-31C34> \xF0\xB1\xB0\xB4
+<CJK_UNIFIED_IDEOGRAPH-31C35> \xF0\xB1\xB0\xB5
+<CJK_UNIFIED_IDEOGRAPH-31C36> \xF0\xB1\xB0\xB6
+<CJK_UNIFIED_IDEOGRAPH-31C37> \xF0\xB1\xB0\xB7
+<CJK_UNIFIED_IDEOGRAPH-31C38> \xF0\xB1\xB0\xB8
+<CJK_UNIFIED_IDEOGRAPH-31C39> \xF0\xB1\xB0\xB9
+<CJK_UNIFIED_IDEOGRAPH-31C3A> \xF0\xB1\xB0\xBA
+<CJK_UNIFIED_IDEOGRAPH-31C3B> \xF0\xB1\xB0\xBB
+<CJK_UNIFIED_IDEOGRAPH-31C3C> \xF0\xB1\xB0\xBC
+<CJK_UNIFIED_IDEOGRAPH-31C3D> \xF0\xB1\xB0\xBD
+<CJK_UNIFIED_IDEOGRAPH-31C3E> \xF0\xB1\xB0\xBE
+<CJK_UNIFIED_IDEOGRAPH-31C3F> \xF0\xB1\xB0\xBF
+<CJK_UNIFIED_IDEOGRAPH-31C40> \xF0\xB1\xB1\x80
+<CJK_UNIFIED_IDEOGRAPH-31C41> \xF0\xB1\xB1\x81
+<CJK_UNIFIED_IDEOGRAPH-31C42> \xF0\xB1\xB1\x82
+<CJK_UNIFIED_IDEOGRAPH-31C43> \xF0\xB1\xB1\x83
+<CJK_UNIFIED_IDEOGRAPH-31C44> \xF0\xB1\xB1\x84
+<CJK_UNIFIED_IDEOGRAPH-31C45> \xF0\xB1\xB1\x85
+<CJK_UNIFIED_IDEOGRAPH-31C46> \xF0\xB1\xB1\x86
+<CJK_UNIFIED_IDEOGRAPH-31C47> \xF0\xB1\xB1\x87
+<CJK_UNIFIED_IDEOGRAPH-31C48> \xF0\xB1\xB1\x88
+<CJK_UNIFIED_IDEOGRAPH-31C49> \xF0\xB1\xB1\x89
+<CJK_UNIFIED_IDEOGRAPH-31C4A> \xF0\xB1\xB1\x8A
+<CJK_UNIFIED_IDEOGRAPH-31C4B> \xF0\xB1\xB1\x8B
+<CJK_UNIFIED_IDEOGRAPH-31C4C> \xF0\xB1\xB1\x8C
+<CJK_UNIFIED_IDEOGRAPH-31C4D> \xF0\xB1\xB1\x8D
+<CJK_UNIFIED_IDEOGRAPH-31C4E> \xF0\xB1\xB1\x8E
+<CJK_UNIFIED_IDEOGRAPH-31C4F> \xF0\xB1\xB1\x8F
+<CJK_UNIFIED_IDEOGRAPH-31C50> \xF0\xB1\xB1\x90
+<CJK_UNIFIED_IDEOGRAPH-31C51> \xF0\xB1\xB1\x91
+<CJK_UNIFIED_IDEOGRAPH-31C52> \xF0\xB1\xB1\x92
+<CJK_UNIFIED_IDEOGRAPH-31C53> \xF0\xB1\xB1\x93
+<CJK_UNIFIED_IDEOGRAPH-31C54> \xF0\xB1\xB1\x94
+<CJK_UNIFIED_IDEOGRAPH-31C55> \xF0\xB1\xB1\x95
+<CJK_UNIFIED_IDEOGRAPH-31C56> \xF0\xB1\xB1\x96
+<CJK_UNIFIED_IDEOGRAPH-31C57> \xF0\xB1\xB1\x97
+<CJK_UNIFIED_IDEOGRAPH-31C58> \xF0\xB1\xB1\x98
+<CJK_UNIFIED_IDEOGRAPH-31C59> \xF0\xB1\xB1\x99
+<CJK_UNIFIED_IDEOGRAPH-31C5A> \xF0\xB1\xB1\x9A
+<CJK_UNIFIED_IDEOGRAPH-31C5B> \xF0\xB1\xB1\x9B
+<CJK_UNIFIED_IDEOGRAPH-31C5C> \xF0\xB1\xB1\x9C
+<CJK_UNIFIED_IDEOGRAPH-31C5D> \xF0\xB1\xB1\x9D
+<CJK_UNIFIED_IDEOGRAPH-31C5E> \xF0\xB1\xB1\x9E
+<CJK_UNIFIED_IDEOGRAPH-31C5F> \xF0\xB1\xB1\x9F
+<CJK_UNIFIED_IDEOGRAPH-31C60> \xF0\xB1\xB1\xA0
+<CJK_UNIFIED_IDEOGRAPH-31C61> \xF0\xB1\xB1\xA1
+<CJK_UNIFIED_IDEOGRAPH-31C62> \xF0\xB1\xB1\xA2
+<CJK_UNIFIED_IDEOGRAPH-31C63> \xF0\xB1\xB1\xA3
+<CJK_UNIFIED_IDEOGRAPH-31C64> \xF0\xB1\xB1\xA4
+<CJK_UNIFIED_IDEOGRAPH-31C65> \xF0\xB1\xB1\xA5
+<CJK_UNIFIED_IDEOGRAPH-31C66> \xF0\xB1\xB1\xA6
+<CJK_UNIFIED_IDEOGRAPH-31C67> \xF0\xB1\xB1\xA7
+<CJK_UNIFIED_IDEOGRAPH-31C68> \xF0\xB1\xB1\xA8
+<CJK_UNIFIED_IDEOGRAPH-31C69> \xF0\xB1\xB1\xA9
+<CJK_UNIFIED_IDEOGRAPH-31C6A> \xF0\xB1\xB1\xAA
+<CJK_UNIFIED_IDEOGRAPH-31C6B> \xF0\xB1\xB1\xAB
+<CJK_UNIFIED_IDEOGRAPH-31C6C> \xF0\xB1\xB1\xAC
+<CJK_UNIFIED_IDEOGRAPH-31C6D> \xF0\xB1\xB1\xAD
+<CJK_UNIFIED_IDEOGRAPH-31C6E> \xF0\xB1\xB1\xAE
+<CJK_UNIFIED_IDEOGRAPH-31C6F> \xF0\xB1\xB1\xAF
+<CJK_UNIFIED_IDEOGRAPH-31C70> \xF0\xB1\xB1\xB0
+<CJK_UNIFIED_IDEOGRAPH-31C71> \xF0\xB1\xB1\xB1
+<CJK_UNIFIED_IDEOGRAPH-31C72> \xF0\xB1\xB1\xB2
+<CJK_UNIFIED_IDEOGRAPH-31C73> \xF0\xB1\xB1\xB3
+<CJK_UNIFIED_IDEOGRAPH-31C74> \xF0\xB1\xB1\xB4
+<CJK_UNIFIED_IDEOGRAPH-31C75> \xF0\xB1\xB1\xB5
+<CJK_UNIFIED_IDEOGRAPH-31C76> \xF0\xB1\xB1\xB6
+<CJK_UNIFIED_IDEOGRAPH-31C77> \xF0\xB1\xB1\xB7
+<CJK_UNIFIED_IDEOGRAPH-31C78> \xF0\xB1\xB1\xB8
+<CJK_UNIFIED_IDEOGRAPH-31C79> \xF0\xB1\xB1\xB9
+<CJK_UNIFIED_IDEOGRAPH-31C7A> \xF0\xB1\xB1\xBA
+<CJK_UNIFIED_IDEOGRAPH-31C7B> \xF0\xB1\xB1\xBB
+<CJK_UNIFIED_IDEOGRAPH-31C7C> \xF0\xB1\xB1\xBC
+<CJK_UNIFIED_IDEOGRAPH-31C7D> \xF0\xB1\xB1\xBD
+<CJK_UNIFIED_IDEOGRAPH-31C7E> \xF0\xB1\xB1\xBE
+<CJK_UNIFIED_IDEOGRAPH-31C7F> \xF0\xB1\xB1\xBF
+<CJK_UNIFIED_IDEOGRAPH-31C80> \xF0\xB1\xB2\x80
+<CJK_UNIFIED_IDEOGRAPH-31C81> \xF0\xB1\xB2\x81
+<CJK_UNIFIED_IDEOGRAPH-31C82> \xF0\xB1\xB2\x82
+<CJK_UNIFIED_IDEOGRAPH-31C83> \xF0\xB1\xB2\x83
+<CJK_UNIFIED_IDEOGRAPH-31C84> \xF0\xB1\xB2\x84
+<CJK_UNIFIED_IDEOGRAPH-31C85> \xF0\xB1\xB2\x85
+<CJK_UNIFIED_IDEOGRAPH-31C86> \xF0\xB1\xB2\x86
+<CJK_UNIFIED_IDEOGRAPH-31C87> \xF0\xB1\xB2\x87
+<CJK_UNIFIED_IDEOGRAPH-31C88> \xF0\xB1\xB2\x88
+<CJK_UNIFIED_IDEOGRAPH-31C89> \xF0\xB1\xB2\x89
+<CJK_UNIFIED_IDEOGRAPH-31C8A> \xF0\xB1\xB2\x8A
+<CJK_UNIFIED_IDEOGRAPH-31C8B> \xF0\xB1\xB2\x8B
+<CJK_UNIFIED_IDEOGRAPH-31C8C> \xF0\xB1\xB2\x8C
+<CJK_UNIFIED_IDEOGRAPH-31C8D> \xF0\xB1\xB2\x8D
+<CJK_UNIFIED_IDEOGRAPH-31C8E> \xF0\xB1\xB2\x8E
+<CJK_UNIFIED_IDEOGRAPH-31C8F> \xF0\xB1\xB2\x8F
+<CJK_UNIFIED_IDEOGRAPH-31C90> \xF0\xB1\xB2\x90
+<CJK_UNIFIED_IDEOGRAPH-31C91> \xF0\xB1\xB2\x91
+<CJK_UNIFIED_IDEOGRAPH-31C92> \xF0\xB1\xB2\x92
+<CJK_UNIFIED_IDEOGRAPH-31C93> \xF0\xB1\xB2\x93
+<CJK_UNIFIED_IDEOGRAPH-31C94> \xF0\xB1\xB2\x94
+<CJK_UNIFIED_IDEOGRAPH-31C95> \xF0\xB1\xB2\x95
+<CJK_UNIFIED_IDEOGRAPH-31C96> \xF0\xB1\xB2\x96
+<CJK_UNIFIED_IDEOGRAPH-31C97> \xF0\xB1\xB2\x97
+<CJK_UNIFIED_IDEOGRAPH-31C98> \xF0\xB1\xB2\x98
+<CJK_UNIFIED_IDEOGRAPH-31C99> \xF0\xB1\xB2\x99
+<CJK_UNIFIED_IDEOGRAPH-31C9A> \xF0\xB1\xB2\x9A
+<CJK_UNIFIED_IDEOGRAPH-31C9B> \xF0\xB1\xB2\x9B
+<CJK_UNIFIED_IDEOGRAPH-31C9C> \xF0\xB1\xB2\x9C
+<CJK_UNIFIED_IDEOGRAPH-31C9D> \xF0\xB1\xB2\x9D
+<CJK_UNIFIED_IDEOGRAPH-31C9E> \xF0\xB1\xB2\x9E
+<CJK_UNIFIED_IDEOGRAPH-31C9F> \xF0\xB1\xB2\x9F
+<CJK_UNIFIED_IDEOGRAPH-31CA0> \xF0\xB1\xB2\xA0
+<CJK_UNIFIED_IDEOGRAPH-31CA1> \xF0\xB1\xB2\xA1
+<CJK_UNIFIED_IDEOGRAPH-31CA2> \xF0\xB1\xB2\xA2
+<CJK_UNIFIED_IDEOGRAPH-31CA3> \xF0\xB1\xB2\xA3
+<CJK_UNIFIED_IDEOGRAPH-31CA4> \xF0\xB1\xB2\xA4
+<CJK_UNIFIED_IDEOGRAPH-31CA5> \xF0\xB1\xB2\xA5
+<CJK_UNIFIED_IDEOGRAPH-31CA6> \xF0\xB1\xB2\xA6
+<CJK_UNIFIED_IDEOGRAPH-31CA7> \xF0\xB1\xB2\xA7
+<CJK_UNIFIED_IDEOGRAPH-31CA8> \xF0\xB1\xB2\xA8
+<CJK_UNIFIED_IDEOGRAPH-31CA9> \xF0\xB1\xB2\xA9
+<CJK_UNIFIED_IDEOGRAPH-31CAA> \xF0\xB1\xB2\xAA
+<CJK_UNIFIED_IDEOGRAPH-31CAB> \xF0\xB1\xB2\xAB
+<CJK_UNIFIED_IDEOGRAPH-31CAC> \xF0\xB1\xB2\xAC
+<CJK_UNIFIED_IDEOGRAPH-31CAD> \xF0\xB1\xB2\xAD
+<CJK_UNIFIED_IDEOGRAPH-31CAE> \xF0\xB1\xB2\xAE
+<CJK_UNIFIED_IDEOGRAPH-31CAF> \xF0\xB1\xB2\xAF
+<CJK_UNIFIED_IDEOGRAPH-31CB0> \xF0\xB1\xB2\xB0
+<CJK_UNIFIED_IDEOGRAPH-31CB1> \xF0\xB1\xB2\xB1
+<CJK_UNIFIED_IDEOGRAPH-31CB2> \xF0\xB1\xB2\xB2
+<CJK_UNIFIED_IDEOGRAPH-31CB3> \xF0\xB1\xB2\xB3
+<CJK_UNIFIED_IDEOGRAPH-31CB4> \xF0\xB1\xB2\xB4
+<CJK_UNIFIED_IDEOGRAPH-31CB5> \xF0\xB1\xB2\xB5
+<CJK_UNIFIED_IDEOGRAPH-31CB6> \xF0\xB1\xB2\xB6
+<CJK_UNIFIED_IDEOGRAPH-31CB7> \xF0\xB1\xB2\xB7
+<CJK_UNIFIED_IDEOGRAPH-31CB8> \xF0\xB1\xB2\xB8
+<CJK_UNIFIED_IDEOGRAPH-31CB9> \xF0\xB1\xB2\xB9
+<CJK_UNIFIED_IDEOGRAPH-31CBA> \xF0\xB1\xB2\xBA
+<CJK_UNIFIED_IDEOGRAPH-31CBB> \xF0\xB1\xB2\xBB
+<CJK_UNIFIED_IDEOGRAPH-31CBC> \xF0\xB1\xB2\xBC
+<CJK_UNIFIED_IDEOGRAPH-31CBD> \xF0\xB1\xB2\xBD
+<CJK_UNIFIED_IDEOGRAPH-31CBE> \xF0\xB1\xB2\xBE
+<CJK_UNIFIED_IDEOGRAPH-31CBF> \xF0\xB1\xB2\xBF
+<CJK_UNIFIED_IDEOGRAPH-31CC0> \xF0\xB1\xB3\x80
+<CJK_UNIFIED_IDEOGRAPH-31CC1> \xF0\xB1\xB3\x81
+<CJK_UNIFIED_IDEOGRAPH-31CC2> \xF0\xB1\xB3\x82
+<CJK_UNIFIED_IDEOGRAPH-31CC3> \xF0\xB1\xB3\x83
+<CJK_UNIFIED_IDEOGRAPH-31CC4> \xF0\xB1\xB3\x84
+<CJK_UNIFIED_IDEOGRAPH-31CC5> \xF0\xB1\xB3\x85
+<CJK_UNIFIED_IDEOGRAPH-31CC6> \xF0\xB1\xB3\x86
+<CJK_UNIFIED_IDEOGRAPH-31CC7> \xF0\xB1\xB3\x87
+<CJK_UNIFIED_IDEOGRAPH-31CC8> \xF0\xB1\xB3\x88
+<CJK_UNIFIED_IDEOGRAPH-31CC9> \xF0\xB1\xB3\x89
+<CJK_UNIFIED_IDEOGRAPH-31CCA> \xF0\xB1\xB3\x8A
+<CJK_UNIFIED_IDEOGRAPH-31CCB> \xF0\xB1\xB3\x8B
+<CJK_UNIFIED_IDEOGRAPH-31CCC> \xF0\xB1\xB3\x8C
+<CJK_UNIFIED_IDEOGRAPH-31CCD> \xF0\xB1\xB3\x8D
+<CJK_UNIFIED_IDEOGRAPH-31CCE> \xF0\xB1\xB3\x8E
+<CJK_UNIFIED_IDEOGRAPH-31CCF> \xF0\xB1\xB3\x8F
+<CJK_UNIFIED_IDEOGRAPH-31CD0> \xF0\xB1\xB3\x90
+<CJK_UNIFIED_IDEOGRAPH-31CD1> \xF0\xB1\xB3\x91
+<CJK_UNIFIED_IDEOGRAPH-31CD2> \xF0\xB1\xB3\x92
+<CJK_UNIFIED_IDEOGRAPH-31CD3> \xF0\xB1\xB3\x93
+<CJK_UNIFIED_IDEOGRAPH-31CD4> \xF0\xB1\xB3\x94
+<CJK_UNIFIED_IDEOGRAPH-31CD5> \xF0\xB1\xB3\x95
+<CJK_UNIFIED_IDEOGRAPH-31CD6> \xF0\xB1\xB3\x96
+<CJK_UNIFIED_IDEOGRAPH-31CD7> \xF0\xB1\xB3\x97
+<CJK_UNIFIED_IDEOGRAPH-31CD8> \xF0\xB1\xB3\x98
+<CJK_UNIFIED_IDEOGRAPH-31CD9> \xF0\xB1\xB3\x99
+<CJK_UNIFIED_IDEOGRAPH-31CDA> \xF0\xB1\xB3\x9A
+<CJK_UNIFIED_IDEOGRAPH-31CDB> \xF0\xB1\xB3\x9B
+<CJK_UNIFIED_IDEOGRAPH-31CDC> \xF0\xB1\xB3\x9C
+<CJK_UNIFIED_IDEOGRAPH-31CDD> \xF0\xB1\xB3\x9D
+<CJK_UNIFIED_IDEOGRAPH-31CDE> \xF0\xB1\xB3\x9E
+<CJK_UNIFIED_IDEOGRAPH-31CDF> \xF0\xB1\xB3\x9F
+<CJK_UNIFIED_IDEOGRAPH-31CE0> \xF0\xB1\xB3\xA0
+<CJK_UNIFIED_IDEOGRAPH-31CE1> \xF0\xB1\xB3\xA1
+<CJK_UNIFIED_IDEOGRAPH-31CE2> \xF0\xB1\xB3\xA2
+<CJK_UNIFIED_IDEOGRAPH-31CE3> \xF0\xB1\xB3\xA3
+<CJK_UNIFIED_IDEOGRAPH-31CE4> \xF0\xB1\xB3\xA4
+<CJK_UNIFIED_IDEOGRAPH-31CE5> \xF0\xB1\xB3\xA5
+<CJK_UNIFIED_IDEOGRAPH-31CE6> \xF0\xB1\xB3\xA6
+<CJK_UNIFIED_IDEOGRAPH-31CE7> \xF0\xB1\xB3\xA7
+<CJK_UNIFIED_IDEOGRAPH-31CE8> \xF0\xB1\xB3\xA8
+<CJK_UNIFIED_IDEOGRAPH-31CE9> \xF0\xB1\xB3\xA9
+<CJK_UNIFIED_IDEOGRAPH-31CEA> \xF0\xB1\xB3\xAA
+<CJK_UNIFIED_IDEOGRAPH-31CEB> \xF0\xB1\xB3\xAB
+<CJK_UNIFIED_IDEOGRAPH-31CEC> \xF0\xB1\xB3\xAC
+<CJK_UNIFIED_IDEOGRAPH-31CED> \xF0\xB1\xB3\xAD
+<CJK_UNIFIED_IDEOGRAPH-31CEE> \xF0\xB1\xB3\xAE
+<CJK_UNIFIED_IDEOGRAPH-31CEF> \xF0\xB1\xB3\xAF
+<CJK_UNIFIED_IDEOGRAPH-31CF0> \xF0\xB1\xB3\xB0
+<CJK_UNIFIED_IDEOGRAPH-31CF1> \xF0\xB1\xB3\xB1
+<CJK_UNIFIED_IDEOGRAPH-31CF2> \xF0\xB1\xB3\xB2
+<CJK_UNIFIED_IDEOGRAPH-31CF3> \xF0\xB1\xB3\xB3
+<CJK_UNIFIED_IDEOGRAPH-31CF4> \xF0\xB1\xB3\xB4
+<CJK_UNIFIED_IDEOGRAPH-31CF5> \xF0\xB1\xB3\xB5
+<CJK_UNIFIED_IDEOGRAPH-31CF6> \xF0\xB1\xB3\xB6
+<CJK_UNIFIED_IDEOGRAPH-31CF7> \xF0\xB1\xB3\xB7
+<CJK_UNIFIED_IDEOGRAPH-31CF8> \xF0\xB1\xB3\xB8
+<CJK_UNIFIED_IDEOGRAPH-31CF9> \xF0\xB1\xB3\xB9
+<CJK_UNIFIED_IDEOGRAPH-31CFA> \xF0\xB1\xB3\xBA
+<CJK_UNIFIED_IDEOGRAPH-31CFB> \xF0\xB1\xB3\xBB
+<CJK_UNIFIED_IDEOGRAPH-31CFC> \xF0\xB1\xB3\xBC
+<CJK_UNIFIED_IDEOGRAPH-31CFD> \xF0\xB1\xB3\xBD
+<CJK_UNIFIED_IDEOGRAPH-31CFE> \xF0\xB1\xB3\xBE
+<CJK_UNIFIED_IDEOGRAPH-31CFF> \xF0\xB1\xB3\xBF
+<CJK_UNIFIED_IDEOGRAPH-31D00> \xF0\xB1\xB4\x80
+<CJK_UNIFIED_IDEOGRAPH-31D01> \xF0\xB1\xB4\x81
+<CJK_UNIFIED_IDEOGRAPH-31D02> \xF0\xB1\xB4\x82
+<CJK_UNIFIED_IDEOGRAPH-31D03> \xF0\xB1\xB4\x83
+<CJK_UNIFIED_IDEOGRAPH-31D04> \xF0\xB1\xB4\x84
+<CJK_UNIFIED_IDEOGRAPH-31D05> \xF0\xB1\xB4\x85
+<CJK_UNIFIED_IDEOGRAPH-31D06> \xF0\xB1\xB4\x86
+<CJK_UNIFIED_IDEOGRAPH-31D07> \xF0\xB1\xB4\x87
+<CJK_UNIFIED_IDEOGRAPH-31D08> \xF0\xB1\xB4\x88
+<CJK_UNIFIED_IDEOGRAPH-31D09> \xF0\xB1\xB4\x89
+<CJK_UNIFIED_IDEOGRAPH-31D0A> \xF0\xB1\xB4\x8A
+<CJK_UNIFIED_IDEOGRAPH-31D0B> \xF0\xB1\xB4\x8B
+<CJK_UNIFIED_IDEOGRAPH-31D0C> \xF0\xB1\xB4\x8C
+<CJK_UNIFIED_IDEOGRAPH-31D0D> \xF0\xB1\xB4\x8D
+<CJK_UNIFIED_IDEOGRAPH-31D0E> \xF0\xB1\xB4\x8E
+<CJK_UNIFIED_IDEOGRAPH-31D0F> \xF0\xB1\xB4\x8F
+<CJK_UNIFIED_IDEOGRAPH-31D10> \xF0\xB1\xB4\x90
+<CJK_UNIFIED_IDEOGRAPH-31D11> \xF0\xB1\xB4\x91
+<CJK_UNIFIED_IDEOGRAPH-31D12> \xF0\xB1\xB4\x92
+<CJK_UNIFIED_IDEOGRAPH-31D13> \xF0\xB1\xB4\x93
+<CJK_UNIFIED_IDEOGRAPH-31D14> \xF0\xB1\xB4\x94
+<CJK_UNIFIED_IDEOGRAPH-31D15> \xF0\xB1\xB4\x95
+<CJK_UNIFIED_IDEOGRAPH-31D16> \xF0\xB1\xB4\x96
+<CJK_UNIFIED_IDEOGRAPH-31D17> \xF0\xB1\xB4\x97
+<CJK_UNIFIED_IDEOGRAPH-31D18> \xF0\xB1\xB4\x98
+<CJK_UNIFIED_IDEOGRAPH-31D19> \xF0\xB1\xB4\x99
+<CJK_UNIFIED_IDEOGRAPH-31D1A> \xF0\xB1\xB4\x9A
+<CJK_UNIFIED_IDEOGRAPH-31D1B> \xF0\xB1\xB4\x9B
+<CJK_UNIFIED_IDEOGRAPH-31D1C> \xF0\xB1\xB4\x9C
+<CJK_UNIFIED_IDEOGRAPH-31D1D> \xF0\xB1\xB4\x9D
+<CJK_UNIFIED_IDEOGRAPH-31D1E> \xF0\xB1\xB4\x9E
+<CJK_UNIFIED_IDEOGRAPH-31D1F> \xF0\xB1\xB4\x9F
+<CJK_UNIFIED_IDEOGRAPH-31D20> \xF0\xB1\xB4\xA0
+<CJK_UNIFIED_IDEOGRAPH-31D21> \xF0\xB1\xB4\xA1
+<CJK_UNIFIED_IDEOGRAPH-31D22> \xF0\xB1\xB4\xA2
+<CJK_UNIFIED_IDEOGRAPH-31D23> \xF0\xB1\xB4\xA3
+<CJK_UNIFIED_IDEOGRAPH-31D24> \xF0\xB1\xB4\xA4
+<CJK_UNIFIED_IDEOGRAPH-31D25> \xF0\xB1\xB4\xA5
+<CJK_UNIFIED_IDEOGRAPH-31D26> \xF0\xB1\xB4\xA6
+<CJK_UNIFIED_IDEOGRAPH-31D27> \xF0\xB1\xB4\xA7
+<CJK_UNIFIED_IDEOGRAPH-31D28> \xF0\xB1\xB4\xA8
+<CJK_UNIFIED_IDEOGRAPH-31D29> \xF0\xB1\xB4\xA9
+<CJK_UNIFIED_IDEOGRAPH-31D2A> \xF0\xB1\xB4\xAA
+<CJK_UNIFIED_IDEOGRAPH-31D2B> \xF0\xB1\xB4\xAB
+<CJK_UNIFIED_IDEOGRAPH-31D2C> \xF0\xB1\xB4\xAC
+<CJK_UNIFIED_IDEOGRAPH-31D2D> \xF0\xB1\xB4\xAD
+<CJK_UNIFIED_IDEOGRAPH-31D2E> \xF0\xB1\xB4\xAE
+<CJK_UNIFIED_IDEOGRAPH-31D2F> \xF0\xB1\xB4\xAF
+<CJK_UNIFIED_IDEOGRAPH-31D30> \xF0\xB1\xB4\xB0
+<CJK_UNIFIED_IDEOGRAPH-31D31> \xF0\xB1\xB4\xB1
+<CJK_UNIFIED_IDEOGRAPH-31D32> \xF0\xB1\xB4\xB2
+<CJK_UNIFIED_IDEOGRAPH-31D33> \xF0\xB1\xB4\xB3
+<CJK_UNIFIED_IDEOGRAPH-31D34> \xF0\xB1\xB4\xB4
+<CJK_UNIFIED_IDEOGRAPH-31D35> \xF0\xB1\xB4\xB5
+<CJK_UNIFIED_IDEOGRAPH-31D36> \xF0\xB1\xB4\xB6
+<CJK_UNIFIED_IDEOGRAPH-31D37> \xF0\xB1\xB4\xB7
+<CJK_UNIFIED_IDEOGRAPH-31D38> \xF0\xB1\xB4\xB8
+<CJK_UNIFIED_IDEOGRAPH-31D39> \xF0\xB1\xB4\xB9
+<CJK_UNIFIED_IDEOGRAPH-31D3A> \xF0\xB1\xB4\xBA
+<CJK_UNIFIED_IDEOGRAPH-31D3B> \xF0\xB1\xB4\xBB
+<CJK_UNIFIED_IDEOGRAPH-31D3C> \xF0\xB1\xB4\xBC
+<CJK_UNIFIED_IDEOGRAPH-31D3D> \xF0\xB1\xB4\xBD
+<CJK_UNIFIED_IDEOGRAPH-31D3E> \xF0\xB1\xB4\xBE
+<CJK_UNIFIED_IDEOGRAPH-31D3F> \xF0\xB1\xB4\xBF
+<CJK_UNIFIED_IDEOGRAPH-31D40> \xF0\xB1\xB5\x80
+<CJK_UNIFIED_IDEOGRAPH-31D41> \xF0\xB1\xB5\x81
+<CJK_UNIFIED_IDEOGRAPH-31D42> \xF0\xB1\xB5\x82
+<CJK_UNIFIED_IDEOGRAPH-31D43> \xF0\xB1\xB5\x83
+<CJK_UNIFIED_IDEOGRAPH-31D44> \xF0\xB1\xB5\x84
+<CJK_UNIFIED_IDEOGRAPH-31D45> \xF0\xB1\xB5\x85
+<CJK_UNIFIED_IDEOGRAPH-31D46> \xF0\xB1\xB5\x86
+<CJK_UNIFIED_IDEOGRAPH-31D47> \xF0\xB1\xB5\x87
+<CJK_UNIFIED_IDEOGRAPH-31D48> \xF0\xB1\xB5\x88
+<CJK_UNIFIED_IDEOGRAPH-31D49> \xF0\xB1\xB5\x89
+<CJK_UNIFIED_IDEOGRAPH-31D4A> \xF0\xB1\xB5\x8A
+<CJK_UNIFIED_IDEOGRAPH-31D4B> \xF0\xB1\xB5\x8B
+<CJK_UNIFIED_IDEOGRAPH-31D4C> \xF0\xB1\xB5\x8C
+<CJK_UNIFIED_IDEOGRAPH-31D4D> \xF0\xB1\xB5\x8D
+<CJK_UNIFIED_IDEOGRAPH-31D4E> \xF0\xB1\xB5\x8E
+<CJK_UNIFIED_IDEOGRAPH-31D4F> \xF0\xB1\xB5\x8F
+<CJK_UNIFIED_IDEOGRAPH-31D50> \xF0\xB1\xB5\x90
+<CJK_UNIFIED_IDEOGRAPH-31D51> \xF0\xB1\xB5\x91
+<CJK_UNIFIED_IDEOGRAPH-31D52> \xF0\xB1\xB5\x92
+<CJK_UNIFIED_IDEOGRAPH-31D53> \xF0\xB1\xB5\x93
+<CJK_UNIFIED_IDEOGRAPH-31D54> \xF0\xB1\xB5\x94
+<CJK_UNIFIED_IDEOGRAPH-31D55> \xF0\xB1\xB5\x95
+<CJK_UNIFIED_IDEOGRAPH-31D56> \xF0\xB1\xB5\x96
+<CJK_UNIFIED_IDEOGRAPH-31D57> \xF0\xB1\xB5\x97
+<CJK_UNIFIED_IDEOGRAPH-31D58> \xF0\xB1\xB5\x98
+<CJK_UNIFIED_IDEOGRAPH-31D59> \xF0\xB1\xB5\x99
+<CJK_UNIFIED_IDEOGRAPH-31D5A> \xF0\xB1\xB5\x9A
+<CJK_UNIFIED_IDEOGRAPH-31D5B> \xF0\xB1\xB5\x9B
+<CJK_UNIFIED_IDEOGRAPH-31D5C> \xF0\xB1\xB5\x9C
+<CJK_UNIFIED_IDEOGRAPH-31D5D> \xF0\xB1\xB5\x9D
+<CJK_UNIFIED_IDEOGRAPH-31D5E> \xF0\xB1\xB5\x9E
+<CJK_UNIFIED_IDEOGRAPH-31D5F> \xF0\xB1\xB5\x9F
+<CJK_UNIFIED_IDEOGRAPH-31D60> \xF0\xB1\xB5\xA0
+<CJK_UNIFIED_IDEOGRAPH-31D61> \xF0\xB1\xB5\xA1
+<CJK_UNIFIED_IDEOGRAPH-31D62> \xF0\xB1\xB5\xA2
+<CJK_UNIFIED_IDEOGRAPH-31D63> \xF0\xB1\xB5\xA3
+<CJK_UNIFIED_IDEOGRAPH-31D64> \xF0\xB1\xB5\xA4
+<CJK_UNIFIED_IDEOGRAPH-31D65> \xF0\xB1\xB5\xA5
+<CJK_UNIFIED_IDEOGRAPH-31D66> \xF0\xB1\xB5\xA6
+<CJK_UNIFIED_IDEOGRAPH-31D67> \xF0\xB1\xB5\xA7
+<CJK_UNIFIED_IDEOGRAPH-31D68> \xF0\xB1\xB5\xA8
+<CJK_UNIFIED_IDEOGRAPH-31D69> \xF0\xB1\xB5\xA9
+<CJK_UNIFIED_IDEOGRAPH-31D6A> \xF0\xB1\xB5\xAA
+<CJK_UNIFIED_IDEOGRAPH-31D6B> \xF0\xB1\xB5\xAB
+<CJK_UNIFIED_IDEOGRAPH-31D6C> \xF0\xB1\xB5\xAC
+<CJK_UNIFIED_IDEOGRAPH-31D6D> \xF0\xB1\xB5\xAD
+<CJK_UNIFIED_IDEOGRAPH-31D6E> \xF0\xB1\xB5\xAE
+<CJK_UNIFIED_IDEOGRAPH-31D6F> \xF0\xB1\xB5\xAF
+<CJK_UNIFIED_IDEOGRAPH-31D70> \xF0\xB1\xB5\xB0
+<CJK_UNIFIED_IDEOGRAPH-31D71> \xF0\xB1\xB5\xB1
+<CJK_UNIFIED_IDEOGRAPH-31D72> \xF0\xB1\xB5\xB2
+<CJK_UNIFIED_IDEOGRAPH-31D73> \xF0\xB1\xB5\xB3
+<CJK_UNIFIED_IDEOGRAPH-31D74> \xF0\xB1\xB5\xB4
+<CJK_UNIFIED_IDEOGRAPH-31D75> \xF0\xB1\xB5\xB5
+<CJK_UNIFIED_IDEOGRAPH-31D76> \xF0\xB1\xB5\xB6
+<CJK_UNIFIED_IDEOGRAPH-31D77> \xF0\xB1\xB5\xB7
+<CJK_UNIFIED_IDEOGRAPH-31D78> \xF0\xB1\xB5\xB8
+<CJK_UNIFIED_IDEOGRAPH-31D79> \xF0\xB1\xB5\xB9
+<CJK_UNIFIED_IDEOGRAPH-31D7A> \xF0\xB1\xB5\xBA
+<CJK_UNIFIED_IDEOGRAPH-31D7B> \xF0\xB1\xB5\xBB
+<CJK_UNIFIED_IDEOGRAPH-31D7C> \xF0\xB1\xB5\xBC
+<CJK_UNIFIED_IDEOGRAPH-31D7D> \xF0\xB1\xB5\xBD
+<CJK_UNIFIED_IDEOGRAPH-31D7E> \xF0\xB1\xB5\xBE
+<CJK_UNIFIED_IDEOGRAPH-31D7F> \xF0\xB1\xB5\xBF
+<CJK_UNIFIED_IDEOGRAPH-31D80> \xF0\xB1\xB6\x80
+<CJK_UNIFIED_IDEOGRAPH-31D81> \xF0\xB1\xB6\x81
+<CJK_UNIFIED_IDEOGRAPH-31D82> \xF0\xB1\xB6\x82
+<CJK_UNIFIED_IDEOGRAPH-31D83> \xF0\xB1\xB6\x83
+<CJK_UNIFIED_IDEOGRAPH-31D84> \xF0\xB1\xB6\x84
+<CJK_UNIFIED_IDEOGRAPH-31D85> \xF0\xB1\xB6\x85
+<CJK_UNIFIED_IDEOGRAPH-31D86> \xF0\xB1\xB6\x86
+<CJK_UNIFIED_IDEOGRAPH-31D87> \xF0\xB1\xB6\x87
+<CJK_UNIFIED_IDEOGRAPH-31D88> \xF0\xB1\xB6\x88
+<CJK_UNIFIED_IDEOGRAPH-31D89> \xF0\xB1\xB6\x89
+<CJK_UNIFIED_IDEOGRAPH-31D8A> \xF0\xB1\xB6\x8A
+<CJK_UNIFIED_IDEOGRAPH-31D8B> \xF0\xB1\xB6\x8B
+<CJK_UNIFIED_IDEOGRAPH-31D8C> \xF0\xB1\xB6\x8C
+<CJK_UNIFIED_IDEOGRAPH-31D8D> \xF0\xB1\xB6\x8D
+<CJK_UNIFIED_IDEOGRAPH-31D8E> \xF0\xB1\xB6\x8E
+<CJK_UNIFIED_IDEOGRAPH-31D8F> \xF0\xB1\xB6\x8F
+<CJK_UNIFIED_IDEOGRAPH-31D90> \xF0\xB1\xB6\x90
+<CJK_UNIFIED_IDEOGRAPH-31D91> \xF0\xB1\xB6\x91
+<CJK_UNIFIED_IDEOGRAPH-31D92> \xF0\xB1\xB6\x92
+<CJK_UNIFIED_IDEOGRAPH-31D93> \xF0\xB1\xB6\x93
+<CJK_UNIFIED_IDEOGRAPH-31D94> \xF0\xB1\xB6\x94
+<CJK_UNIFIED_IDEOGRAPH-31D95> \xF0\xB1\xB6\x95
+<CJK_UNIFIED_IDEOGRAPH-31D96> \xF0\xB1\xB6\x96
+<CJK_UNIFIED_IDEOGRAPH-31D97> \xF0\xB1\xB6\x97
+<CJK_UNIFIED_IDEOGRAPH-31D98> \xF0\xB1\xB6\x98
+<CJK_UNIFIED_IDEOGRAPH-31D99> \xF0\xB1\xB6\x99
+<CJK_UNIFIED_IDEOGRAPH-31D9A> \xF0\xB1\xB6\x9A
+<CJK_UNIFIED_IDEOGRAPH-31D9B> \xF0\xB1\xB6\x9B
+<CJK_UNIFIED_IDEOGRAPH-31D9C> \xF0\xB1\xB6\x9C
+<CJK_UNIFIED_IDEOGRAPH-31D9D> \xF0\xB1\xB6\x9D
+<CJK_UNIFIED_IDEOGRAPH-31D9E> \xF0\xB1\xB6\x9E
+<CJK_UNIFIED_IDEOGRAPH-31D9F> \xF0\xB1\xB6\x9F
+<CJK_UNIFIED_IDEOGRAPH-31DA0> \xF0\xB1\xB6\xA0
+<CJK_UNIFIED_IDEOGRAPH-31DA1> \xF0\xB1\xB6\xA1
+<CJK_UNIFIED_IDEOGRAPH-31DA2> \xF0\xB1\xB6\xA2
+<CJK_UNIFIED_IDEOGRAPH-31DA3> \xF0\xB1\xB6\xA3
+<CJK_UNIFIED_IDEOGRAPH-31DA4> \xF0\xB1\xB6\xA4
+<CJK_UNIFIED_IDEOGRAPH-31DA5> \xF0\xB1\xB6\xA5
+<CJK_UNIFIED_IDEOGRAPH-31DA6> \xF0\xB1\xB6\xA6
+<CJK_UNIFIED_IDEOGRAPH-31DA7> \xF0\xB1\xB6\xA7
+<CJK_UNIFIED_IDEOGRAPH-31DA8> \xF0\xB1\xB6\xA8
+<CJK_UNIFIED_IDEOGRAPH-31DA9> \xF0\xB1\xB6\xA9
+<CJK_UNIFIED_IDEOGRAPH-31DAA> \xF0\xB1\xB6\xAA
+<CJK_UNIFIED_IDEOGRAPH-31DAB> \xF0\xB1\xB6\xAB
+<CJK_UNIFIED_IDEOGRAPH-31DAC> \xF0\xB1\xB6\xAC
+<CJK_UNIFIED_IDEOGRAPH-31DAD> \xF0\xB1\xB6\xAD
+<CJK_UNIFIED_IDEOGRAPH-31DAE> \xF0\xB1\xB6\xAE
+<CJK_UNIFIED_IDEOGRAPH-31DAF> \xF0\xB1\xB6\xAF
+<CJK_UNIFIED_IDEOGRAPH-31DB0> \xF0\xB1\xB6\xB0
+<CJK_UNIFIED_IDEOGRAPH-31DB1> \xF0\xB1\xB6\xB1
+<CJK_UNIFIED_IDEOGRAPH-31DB2> \xF0\xB1\xB6\xB2
+<CJK_UNIFIED_IDEOGRAPH-31DB3> \xF0\xB1\xB6\xB3
+<CJK_UNIFIED_IDEOGRAPH-31DB4> \xF0\xB1\xB6\xB4
+<CJK_UNIFIED_IDEOGRAPH-31DB5> \xF0\xB1\xB6\xB5
+<CJK_UNIFIED_IDEOGRAPH-31DB6> \xF0\xB1\xB6\xB6
+<CJK_UNIFIED_IDEOGRAPH-31DB7> \xF0\xB1\xB6\xB7
+<CJK_UNIFIED_IDEOGRAPH-31DB8> \xF0\xB1\xB6\xB8
+<CJK_UNIFIED_IDEOGRAPH-31DB9> \xF0\xB1\xB6\xB9
+<CJK_UNIFIED_IDEOGRAPH-31DBA> \xF0\xB1\xB6\xBA
+<CJK_UNIFIED_IDEOGRAPH-31DBB> \xF0\xB1\xB6\xBB
+<CJK_UNIFIED_IDEOGRAPH-31DBC> \xF0\xB1\xB6\xBC
+<CJK_UNIFIED_IDEOGRAPH-31DBD> \xF0\xB1\xB6\xBD
+<CJK_UNIFIED_IDEOGRAPH-31DBE> \xF0\xB1\xB6\xBE
+<CJK_UNIFIED_IDEOGRAPH-31DBF> \xF0\xB1\xB6\xBF
+<CJK_UNIFIED_IDEOGRAPH-31DC0> \xF0\xB1\xB7\x80
+<CJK_UNIFIED_IDEOGRAPH-31DC1> \xF0\xB1\xB7\x81
+<CJK_UNIFIED_IDEOGRAPH-31DC2> \xF0\xB1\xB7\x82
+<CJK_UNIFIED_IDEOGRAPH-31DC3> \xF0\xB1\xB7\x83
+<CJK_UNIFIED_IDEOGRAPH-31DC4> \xF0\xB1\xB7\x84
+<CJK_UNIFIED_IDEOGRAPH-31DC5> \xF0\xB1\xB7\x85
+<CJK_UNIFIED_IDEOGRAPH-31DC6> \xF0\xB1\xB7\x86
+<CJK_UNIFIED_IDEOGRAPH-31DC7> \xF0\xB1\xB7\x87
+<CJK_UNIFIED_IDEOGRAPH-31DC8> \xF0\xB1\xB7\x88
+<CJK_UNIFIED_IDEOGRAPH-31DC9> \xF0\xB1\xB7\x89
+<CJK_UNIFIED_IDEOGRAPH-31DCA> \xF0\xB1\xB7\x8A
+<CJK_UNIFIED_IDEOGRAPH-31DCB> \xF0\xB1\xB7\x8B
+<CJK_UNIFIED_IDEOGRAPH-31DCC> \xF0\xB1\xB7\x8C
+<CJK_UNIFIED_IDEOGRAPH-31DCD> \xF0\xB1\xB7\x8D
+<CJK_UNIFIED_IDEOGRAPH-31DCE> \xF0\xB1\xB7\x8E
+<CJK_UNIFIED_IDEOGRAPH-31DCF> \xF0\xB1\xB7\x8F
+<CJK_UNIFIED_IDEOGRAPH-31DD0> \xF0\xB1\xB7\x90
+<CJK_UNIFIED_IDEOGRAPH-31DD1> \xF0\xB1\xB7\x91
+<CJK_UNIFIED_IDEOGRAPH-31DD2> \xF0\xB1\xB7\x92
+<CJK_UNIFIED_IDEOGRAPH-31DD3> \xF0\xB1\xB7\x93
+<CJK_UNIFIED_IDEOGRAPH-31DD4> \xF0\xB1\xB7\x94
+<CJK_UNIFIED_IDEOGRAPH-31DD5> \xF0\xB1\xB7\x95
+<CJK_UNIFIED_IDEOGRAPH-31DD6> \xF0\xB1\xB7\x96
+<CJK_UNIFIED_IDEOGRAPH-31DD7> \xF0\xB1\xB7\x97
+<CJK_UNIFIED_IDEOGRAPH-31DD8> \xF0\xB1\xB7\x98
+<CJK_UNIFIED_IDEOGRAPH-31DD9> \xF0\xB1\xB7\x99
+<CJK_UNIFIED_IDEOGRAPH-31DDA> \xF0\xB1\xB7\x9A
+<CJK_UNIFIED_IDEOGRAPH-31DDB> \xF0\xB1\xB7\x9B
+<CJK_UNIFIED_IDEOGRAPH-31DDC> \xF0\xB1\xB7\x9C
+<CJK_UNIFIED_IDEOGRAPH-31DDD> \xF0\xB1\xB7\x9D
+<CJK_UNIFIED_IDEOGRAPH-31DDE> \xF0\xB1\xB7\x9E
+<CJK_UNIFIED_IDEOGRAPH-31DDF> \xF0\xB1\xB7\x9F
+<CJK_UNIFIED_IDEOGRAPH-31DE0> \xF0\xB1\xB7\xA0
+<CJK_UNIFIED_IDEOGRAPH-31DE1> \xF0\xB1\xB7\xA1
+<CJK_UNIFIED_IDEOGRAPH-31DE2> \xF0\xB1\xB7\xA2
+<CJK_UNIFIED_IDEOGRAPH-31DE3> \xF0\xB1\xB7\xA3
+<CJK_UNIFIED_IDEOGRAPH-31DE4> \xF0\xB1\xB7\xA4
+<CJK_UNIFIED_IDEOGRAPH-31DE5> \xF0\xB1\xB7\xA5
+<CJK_UNIFIED_IDEOGRAPH-31DE6> \xF0\xB1\xB7\xA6
+<CJK_UNIFIED_IDEOGRAPH-31DE7> \xF0\xB1\xB7\xA7
+<CJK_UNIFIED_IDEOGRAPH-31DE8> \xF0\xB1\xB7\xA8
+<CJK_UNIFIED_IDEOGRAPH-31DE9> \xF0\xB1\xB7\xA9
+<CJK_UNIFIED_IDEOGRAPH-31DEA> \xF0\xB1\xB7\xAA
+<CJK_UNIFIED_IDEOGRAPH-31DEB> \xF0\xB1\xB7\xAB
+<CJK_UNIFIED_IDEOGRAPH-31DEC> \xF0\xB1\xB7\xAC
+<CJK_UNIFIED_IDEOGRAPH-31DED> \xF0\xB1\xB7\xAD
+<CJK_UNIFIED_IDEOGRAPH-31DEE> \xF0\xB1\xB7\xAE
+<CJK_UNIFIED_IDEOGRAPH-31DEF> \xF0\xB1\xB7\xAF
+<CJK_UNIFIED_IDEOGRAPH-31DF0> \xF0\xB1\xB7\xB0
+<CJK_UNIFIED_IDEOGRAPH-31DF1> \xF0\xB1\xB7\xB1
+<CJK_UNIFIED_IDEOGRAPH-31DF2> \xF0\xB1\xB7\xB2
+<CJK_UNIFIED_IDEOGRAPH-31DF3> \xF0\xB1\xB7\xB3
+<CJK_UNIFIED_IDEOGRAPH-31DF4> \xF0\xB1\xB7\xB4
+<CJK_UNIFIED_IDEOGRAPH-31DF5> \xF0\xB1\xB7\xB5
+<CJK_UNIFIED_IDEOGRAPH-31DF6> \xF0\xB1\xB7\xB6
+<CJK_UNIFIED_IDEOGRAPH-31DF7> \xF0\xB1\xB7\xB7
+<CJK_UNIFIED_IDEOGRAPH-31DF8> \xF0\xB1\xB7\xB8
+<CJK_UNIFIED_IDEOGRAPH-31DF9> \xF0\xB1\xB7\xB9
+<CJK_UNIFIED_IDEOGRAPH-31DFA> \xF0\xB1\xB7\xBA
+<CJK_UNIFIED_IDEOGRAPH-31DFB> \xF0\xB1\xB7\xBB
+<CJK_UNIFIED_IDEOGRAPH-31DFC> \xF0\xB1\xB7\xBC
+<CJK_UNIFIED_IDEOGRAPH-31DFD> \xF0\xB1\xB7\xBD
+<CJK_UNIFIED_IDEOGRAPH-31DFE> \xF0\xB1\xB7\xBE
+<CJK_UNIFIED_IDEOGRAPH-31DFF> \xF0\xB1\xB7\xBF
+<CJK_UNIFIED_IDEOGRAPH-31E00> \xF0\xB1\xB8\x80
+<CJK_UNIFIED_IDEOGRAPH-31E01> \xF0\xB1\xB8\x81
+<CJK_UNIFIED_IDEOGRAPH-31E02> \xF0\xB1\xB8\x82
+<CJK_UNIFIED_IDEOGRAPH-31E03> \xF0\xB1\xB8\x83
+<CJK_UNIFIED_IDEOGRAPH-31E04> \xF0\xB1\xB8\x84
+<CJK_UNIFIED_IDEOGRAPH-31E05> \xF0\xB1\xB8\x85
+<CJK_UNIFIED_IDEOGRAPH-31E06> \xF0\xB1\xB8\x86
+<CJK_UNIFIED_IDEOGRAPH-31E07> \xF0\xB1\xB8\x87
+<CJK_UNIFIED_IDEOGRAPH-31E08> \xF0\xB1\xB8\x88
+<CJK_UNIFIED_IDEOGRAPH-31E09> \xF0\xB1\xB8\x89
+<CJK_UNIFIED_IDEOGRAPH-31E0A> \xF0\xB1\xB8\x8A
+<CJK_UNIFIED_IDEOGRAPH-31E0B> \xF0\xB1\xB8\x8B
+<CJK_UNIFIED_IDEOGRAPH-31E0C> \xF0\xB1\xB8\x8C
+<CJK_UNIFIED_IDEOGRAPH-31E0D> \xF0\xB1\xB8\x8D
+<CJK_UNIFIED_IDEOGRAPH-31E0E> \xF0\xB1\xB8\x8E
+<CJK_UNIFIED_IDEOGRAPH-31E0F> \xF0\xB1\xB8\x8F
+<CJK_UNIFIED_IDEOGRAPH-31E10> \xF0\xB1\xB8\x90
+<CJK_UNIFIED_IDEOGRAPH-31E11> \xF0\xB1\xB8\x91
+<CJK_UNIFIED_IDEOGRAPH-31E12> \xF0\xB1\xB8\x92
+<CJK_UNIFIED_IDEOGRAPH-31E13> \xF0\xB1\xB8\x93
+<CJK_UNIFIED_IDEOGRAPH-31E14> \xF0\xB1\xB8\x94
+<CJK_UNIFIED_IDEOGRAPH-31E15> \xF0\xB1\xB8\x95
+<CJK_UNIFIED_IDEOGRAPH-31E16> \xF0\xB1\xB8\x96
+<CJK_UNIFIED_IDEOGRAPH-31E17> \xF0\xB1\xB8\x97
+<CJK_UNIFIED_IDEOGRAPH-31E18> \xF0\xB1\xB8\x98
+<CJK_UNIFIED_IDEOGRAPH-31E19> \xF0\xB1\xB8\x99
+<CJK_UNIFIED_IDEOGRAPH-31E1A> \xF0\xB1\xB8\x9A
+<CJK_UNIFIED_IDEOGRAPH-31E1B> \xF0\xB1\xB8\x9B
+<CJK_UNIFIED_IDEOGRAPH-31E1C> \xF0\xB1\xB8\x9C
+<CJK_UNIFIED_IDEOGRAPH-31E1D> \xF0\xB1\xB8\x9D
+<CJK_UNIFIED_IDEOGRAPH-31E1E> \xF0\xB1\xB8\x9E
+<CJK_UNIFIED_IDEOGRAPH-31E1F> \xF0\xB1\xB8\x9F
+<CJK_UNIFIED_IDEOGRAPH-31E20> \xF0\xB1\xB8\xA0
+<CJK_UNIFIED_IDEOGRAPH-31E21> \xF0\xB1\xB8\xA1
+<CJK_UNIFIED_IDEOGRAPH-31E22> \xF0\xB1\xB8\xA2
+<CJK_UNIFIED_IDEOGRAPH-31E23> \xF0\xB1\xB8\xA3
+<CJK_UNIFIED_IDEOGRAPH-31E24> \xF0\xB1\xB8\xA4
+<CJK_UNIFIED_IDEOGRAPH-31E25> \xF0\xB1\xB8\xA5
+<CJK_UNIFIED_IDEOGRAPH-31E26> \xF0\xB1\xB8\xA6
+<CJK_UNIFIED_IDEOGRAPH-31E27> \xF0\xB1\xB8\xA7
+<CJK_UNIFIED_IDEOGRAPH-31E28> \xF0\xB1\xB8\xA8
+<CJK_UNIFIED_IDEOGRAPH-31E29> \xF0\xB1\xB8\xA9
+<CJK_UNIFIED_IDEOGRAPH-31E2A> \xF0\xB1\xB8\xAA
+<CJK_UNIFIED_IDEOGRAPH-31E2B> \xF0\xB1\xB8\xAB
+<CJK_UNIFIED_IDEOGRAPH-31E2C> \xF0\xB1\xB8\xAC
+<CJK_UNIFIED_IDEOGRAPH-31E2D> \xF0\xB1\xB8\xAD
+<CJK_UNIFIED_IDEOGRAPH-31E2E> \xF0\xB1\xB8\xAE
+<CJK_UNIFIED_IDEOGRAPH-31E2F> \xF0\xB1\xB8\xAF
+<CJK_UNIFIED_IDEOGRAPH-31E30> \xF0\xB1\xB8\xB0
+<CJK_UNIFIED_IDEOGRAPH-31E31> \xF0\xB1\xB8\xB1
+<CJK_UNIFIED_IDEOGRAPH-31E32> \xF0\xB1\xB8\xB2
+<CJK_UNIFIED_IDEOGRAPH-31E33> \xF0\xB1\xB8\xB3
+<CJK_UNIFIED_IDEOGRAPH-31E34> \xF0\xB1\xB8\xB4
+<CJK_UNIFIED_IDEOGRAPH-31E35> \xF0\xB1\xB8\xB5
+<CJK_UNIFIED_IDEOGRAPH-31E36> \xF0\xB1\xB8\xB6
+<CJK_UNIFIED_IDEOGRAPH-31E37> \xF0\xB1\xB8\xB7
+<CJK_UNIFIED_IDEOGRAPH-31E38> \xF0\xB1\xB8\xB8
+<CJK_UNIFIED_IDEOGRAPH-31E39> \xF0\xB1\xB8\xB9
+<CJK_UNIFIED_IDEOGRAPH-31E3A> \xF0\xB1\xB8\xBA
+<CJK_UNIFIED_IDEOGRAPH-31E3B> \xF0\xB1\xB8\xBB
+<CJK_UNIFIED_IDEOGRAPH-31E3C> \xF0\xB1\xB8\xBC
+<CJK_UNIFIED_IDEOGRAPH-31E3D> \xF0\xB1\xB8\xBD
+<CJK_UNIFIED_IDEOGRAPH-31E3E> \xF0\xB1\xB8\xBE
+<CJK_UNIFIED_IDEOGRAPH-31E3F> \xF0\xB1\xB8\xBF
+<CJK_UNIFIED_IDEOGRAPH-31E40> \xF0\xB1\xB9\x80
+<CJK_UNIFIED_IDEOGRAPH-31E41> \xF0\xB1\xB9\x81
+<CJK_UNIFIED_IDEOGRAPH-31E42> \xF0\xB1\xB9\x82
+<CJK_UNIFIED_IDEOGRAPH-31E43> \xF0\xB1\xB9\x83
+<CJK_UNIFIED_IDEOGRAPH-31E44> \xF0\xB1\xB9\x84
+<CJK_UNIFIED_IDEOGRAPH-31E45> \xF0\xB1\xB9\x85
+<CJK_UNIFIED_IDEOGRAPH-31E46> \xF0\xB1\xB9\x86
+<CJK_UNIFIED_IDEOGRAPH-31E47> \xF0\xB1\xB9\x87
+<CJK_UNIFIED_IDEOGRAPH-31E48> \xF0\xB1\xB9\x88
+<CJK_UNIFIED_IDEOGRAPH-31E49> \xF0\xB1\xB9\x89
+<CJK_UNIFIED_IDEOGRAPH-31E4A> \xF0\xB1\xB9\x8A
+<CJK_UNIFIED_IDEOGRAPH-31E4B> \xF0\xB1\xB9\x8B
+<CJK_UNIFIED_IDEOGRAPH-31E4C> \xF0\xB1\xB9\x8C
+<CJK_UNIFIED_IDEOGRAPH-31E4D> \xF0\xB1\xB9\x8D
+<CJK_UNIFIED_IDEOGRAPH-31E4E> \xF0\xB1\xB9\x8E
+<CJK_UNIFIED_IDEOGRAPH-31E4F> \xF0\xB1\xB9\x8F
+<CJK_UNIFIED_IDEOGRAPH-31E50> \xF0\xB1\xB9\x90
+<CJK_UNIFIED_IDEOGRAPH-31E51> \xF0\xB1\xB9\x91
+<CJK_UNIFIED_IDEOGRAPH-31E52> \xF0\xB1\xB9\x92
+<CJK_UNIFIED_IDEOGRAPH-31E53> \xF0\xB1\xB9\x93
+<CJK_UNIFIED_IDEOGRAPH-31E54> \xF0\xB1\xB9\x94
+<CJK_UNIFIED_IDEOGRAPH-31E55> \xF0\xB1\xB9\x95
+<CJK_UNIFIED_IDEOGRAPH-31E56> \xF0\xB1\xB9\x96
+<CJK_UNIFIED_IDEOGRAPH-31E57> \xF0\xB1\xB9\x97
+<CJK_UNIFIED_IDEOGRAPH-31E58> \xF0\xB1\xB9\x98
+<CJK_UNIFIED_IDEOGRAPH-31E59> \xF0\xB1\xB9\x99
+<CJK_UNIFIED_IDEOGRAPH-31E5A> \xF0\xB1\xB9\x9A
+<CJK_UNIFIED_IDEOGRAPH-31E5B> \xF0\xB1\xB9\x9B
+<CJK_UNIFIED_IDEOGRAPH-31E5C> \xF0\xB1\xB9\x9C
+<CJK_UNIFIED_IDEOGRAPH-31E5D> \xF0\xB1\xB9\x9D
+<CJK_UNIFIED_IDEOGRAPH-31E5E> \xF0\xB1\xB9\x9E
+<CJK_UNIFIED_IDEOGRAPH-31E5F> \xF0\xB1\xB9\x9F
+<CJK_UNIFIED_IDEOGRAPH-31E60> \xF0\xB1\xB9\xA0
+<CJK_UNIFIED_IDEOGRAPH-31E61> \xF0\xB1\xB9\xA1
+<CJK_UNIFIED_IDEOGRAPH-31E62> \xF0\xB1\xB9\xA2
+<CJK_UNIFIED_IDEOGRAPH-31E63> \xF0\xB1\xB9\xA3
+<CJK_UNIFIED_IDEOGRAPH-31E64> \xF0\xB1\xB9\xA4
+<CJK_UNIFIED_IDEOGRAPH-31E65> \xF0\xB1\xB9\xA5
+<CJK_UNIFIED_IDEOGRAPH-31E66> \xF0\xB1\xB9\xA6
+<CJK_UNIFIED_IDEOGRAPH-31E67> \xF0\xB1\xB9\xA7
+<CJK_UNIFIED_IDEOGRAPH-31E68> \xF0\xB1\xB9\xA8
+<CJK_UNIFIED_IDEOGRAPH-31E69> \xF0\xB1\xB9\xA9
+<CJK_UNIFIED_IDEOGRAPH-31E6A> \xF0\xB1\xB9\xAA
+<CJK_UNIFIED_IDEOGRAPH-31E6B> \xF0\xB1\xB9\xAB
+<CJK_UNIFIED_IDEOGRAPH-31E6C> \xF0\xB1\xB9\xAC
+<CJK_UNIFIED_IDEOGRAPH-31E6D> \xF0\xB1\xB9\xAD
+<CJK_UNIFIED_IDEOGRAPH-31E6E> \xF0\xB1\xB9\xAE
+<CJK_UNIFIED_IDEOGRAPH-31E6F> \xF0\xB1\xB9\xAF
+<CJK_UNIFIED_IDEOGRAPH-31E70> \xF0\xB1\xB9\xB0
+<CJK_UNIFIED_IDEOGRAPH-31E71> \xF0\xB1\xB9\xB1
+<CJK_UNIFIED_IDEOGRAPH-31E72> \xF0\xB1\xB9\xB2
+<CJK_UNIFIED_IDEOGRAPH-31E73> \xF0\xB1\xB9\xB3
+<CJK_UNIFIED_IDEOGRAPH-31E74> \xF0\xB1\xB9\xB4
+<CJK_UNIFIED_IDEOGRAPH-31E75> \xF0\xB1\xB9\xB5
+<CJK_UNIFIED_IDEOGRAPH-31E76> \xF0\xB1\xB9\xB6
+<CJK_UNIFIED_IDEOGRAPH-31E77> \xF0\xB1\xB9\xB7
+<CJK_UNIFIED_IDEOGRAPH-31E78> \xF0\xB1\xB9\xB8
+<CJK_UNIFIED_IDEOGRAPH-31E79> \xF0\xB1\xB9\xB9
+<CJK_UNIFIED_IDEOGRAPH-31E7A> \xF0\xB1\xB9\xBA
+<CJK_UNIFIED_IDEOGRAPH-31E7B> \xF0\xB1\xB9\xBB
+<CJK_UNIFIED_IDEOGRAPH-31E7C> \xF0\xB1\xB9\xBC
+<CJK_UNIFIED_IDEOGRAPH-31E7D> \xF0\xB1\xB9\xBD
+<CJK_UNIFIED_IDEOGRAPH-31E7E> \xF0\xB1\xB9\xBE
+<CJK_UNIFIED_IDEOGRAPH-31E7F> \xF0\xB1\xB9\xBF
+<CJK_UNIFIED_IDEOGRAPH-31E80> \xF0\xB1\xBA\x80
+<CJK_UNIFIED_IDEOGRAPH-31E81> \xF0\xB1\xBA\x81
+<CJK_UNIFIED_IDEOGRAPH-31E82> \xF0\xB1\xBA\x82
+<CJK_UNIFIED_IDEOGRAPH-31E83> \xF0\xB1\xBA\x83
+<CJK_UNIFIED_IDEOGRAPH-31E84> \xF0\xB1\xBA\x84
+<CJK_UNIFIED_IDEOGRAPH-31E85> \xF0\xB1\xBA\x85
+<CJK_UNIFIED_IDEOGRAPH-31E86> \xF0\xB1\xBA\x86
+<CJK_UNIFIED_IDEOGRAPH-31E87> \xF0\xB1\xBA\x87
+<CJK_UNIFIED_IDEOGRAPH-31E88> \xF0\xB1\xBA\x88
+<CJK_UNIFIED_IDEOGRAPH-31E89> \xF0\xB1\xBA\x89
+<CJK_UNIFIED_IDEOGRAPH-31E8A> \xF0\xB1\xBA\x8A
+<CJK_UNIFIED_IDEOGRAPH-31E8B> \xF0\xB1\xBA\x8B
+<CJK_UNIFIED_IDEOGRAPH-31E8C> \xF0\xB1\xBA\x8C
+<CJK_UNIFIED_IDEOGRAPH-31E8D> \xF0\xB1\xBA\x8D
+<CJK_UNIFIED_IDEOGRAPH-31E8E> \xF0\xB1\xBA\x8E
+<CJK_UNIFIED_IDEOGRAPH-31E8F> \xF0\xB1\xBA\x8F
+<CJK_UNIFIED_IDEOGRAPH-31E90> \xF0\xB1\xBA\x90
+<CJK_UNIFIED_IDEOGRAPH-31E91> \xF0\xB1\xBA\x91
+<CJK_UNIFIED_IDEOGRAPH-31E92> \xF0\xB1\xBA\x92
+<CJK_UNIFIED_IDEOGRAPH-31E93> \xF0\xB1\xBA\x93
+<CJK_UNIFIED_IDEOGRAPH-31E94> \xF0\xB1\xBA\x94
+<CJK_UNIFIED_IDEOGRAPH-31E95> \xF0\xB1\xBA\x95
+<CJK_UNIFIED_IDEOGRAPH-31E96> \xF0\xB1\xBA\x96
+<CJK_UNIFIED_IDEOGRAPH-31E97> \xF0\xB1\xBA\x97
+<CJK_UNIFIED_IDEOGRAPH-31E98> \xF0\xB1\xBA\x98
+<CJK_UNIFIED_IDEOGRAPH-31E99> \xF0\xB1\xBA\x99
+<CJK_UNIFIED_IDEOGRAPH-31E9A> \xF0\xB1\xBA\x9A
+<CJK_UNIFIED_IDEOGRAPH-31E9B> \xF0\xB1\xBA\x9B
+<CJK_UNIFIED_IDEOGRAPH-31E9C> \xF0\xB1\xBA\x9C
+<CJK_UNIFIED_IDEOGRAPH-31E9D> \xF0\xB1\xBA\x9D
+<CJK_UNIFIED_IDEOGRAPH-31E9E> \xF0\xB1\xBA\x9E
+<CJK_UNIFIED_IDEOGRAPH-31E9F> \xF0\xB1\xBA\x9F
+<CJK_UNIFIED_IDEOGRAPH-31EA0> \xF0\xB1\xBA\xA0
+<CJK_UNIFIED_IDEOGRAPH-31EA1> \xF0\xB1\xBA\xA1
+<CJK_UNIFIED_IDEOGRAPH-31EA2> \xF0\xB1\xBA\xA2
+<CJK_UNIFIED_IDEOGRAPH-31EA3> \xF0\xB1\xBA\xA3
+<CJK_UNIFIED_IDEOGRAPH-31EA4> \xF0\xB1\xBA\xA4
+<CJK_UNIFIED_IDEOGRAPH-31EA5> \xF0\xB1\xBA\xA5
+<CJK_UNIFIED_IDEOGRAPH-31EA6> \xF0\xB1\xBA\xA6
+<CJK_UNIFIED_IDEOGRAPH-31EA7> \xF0\xB1\xBA\xA7
+<CJK_UNIFIED_IDEOGRAPH-31EA8> \xF0\xB1\xBA\xA8
+<CJK_UNIFIED_IDEOGRAPH-31EA9> \xF0\xB1\xBA\xA9
+<CJK_UNIFIED_IDEOGRAPH-31EAA> \xF0\xB1\xBA\xAA
+<CJK_UNIFIED_IDEOGRAPH-31EAB> \xF0\xB1\xBA\xAB
+<CJK_UNIFIED_IDEOGRAPH-31EAC> \xF0\xB1\xBA\xAC
+<CJK_UNIFIED_IDEOGRAPH-31EAD> \xF0\xB1\xBA\xAD
+<CJK_UNIFIED_IDEOGRAPH-31EAE> \xF0\xB1\xBA\xAE
+<CJK_UNIFIED_IDEOGRAPH-31EAF> \xF0\xB1\xBA\xAF
+<CJK_UNIFIED_IDEOGRAPH-31EB0> \xF0\xB1\xBA\xB0
+<CJK_UNIFIED_IDEOGRAPH-31EB1> \xF0\xB1\xBA\xB1
+<CJK_UNIFIED_IDEOGRAPH-31EB2> \xF0\xB1\xBA\xB2
+<CJK_UNIFIED_IDEOGRAPH-31EB3> \xF0\xB1\xBA\xB3
+<CJK_UNIFIED_IDEOGRAPH-31EB4> \xF0\xB1\xBA\xB4
+<CJK_UNIFIED_IDEOGRAPH-31EB5> \xF0\xB1\xBA\xB5
+<CJK_UNIFIED_IDEOGRAPH-31EB6> \xF0\xB1\xBA\xB6
+<CJK_UNIFIED_IDEOGRAPH-31EB7> \xF0\xB1\xBA\xB7
+<CJK_UNIFIED_IDEOGRAPH-31EB8> \xF0\xB1\xBA\xB8
+<CJK_UNIFIED_IDEOGRAPH-31EB9> \xF0\xB1\xBA\xB9
+<CJK_UNIFIED_IDEOGRAPH-31EBA> \xF0\xB1\xBA\xBA
+<CJK_UNIFIED_IDEOGRAPH-31EBB> \xF0\xB1\xBA\xBB
+<CJK_UNIFIED_IDEOGRAPH-31EBC> \xF0\xB1\xBA\xBC
+<CJK_UNIFIED_IDEOGRAPH-31EBD> \xF0\xB1\xBA\xBD
+<CJK_UNIFIED_IDEOGRAPH-31EBE> \xF0\xB1\xBA\xBE
+<CJK_UNIFIED_IDEOGRAPH-31EBF> \xF0\xB1\xBA\xBF
+<CJK_UNIFIED_IDEOGRAPH-31EC0> \xF0\xB1\xBB\x80
+<CJK_UNIFIED_IDEOGRAPH-31EC1> \xF0\xB1\xBB\x81
+<CJK_UNIFIED_IDEOGRAPH-31EC2> \xF0\xB1\xBB\x82
+<CJK_UNIFIED_IDEOGRAPH-31EC3> \xF0\xB1\xBB\x83
+<CJK_UNIFIED_IDEOGRAPH-31EC4> \xF0\xB1\xBB\x84
+<CJK_UNIFIED_IDEOGRAPH-31EC5> \xF0\xB1\xBB\x85
+<CJK_UNIFIED_IDEOGRAPH-31EC6> \xF0\xB1\xBB\x86
+<CJK_UNIFIED_IDEOGRAPH-31EC7> \xF0\xB1\xBB\x87
+<CJK_UNIFIED_IDEOGRAPH-31EC8> \xF0\xB1\xBB\x88
+<CJK_UNIFIED_IDEOGRAPH-31EC9> \xF0\xB1\xBB\x89
+<CJK_UNIFIED_IDEOGRAPH-31ECA> \xF0\xB1\xBB\x8A
+<CJK_UNIFIED_IDEOGRAPH-31ECB> \xF0\xB1\xBB\x8B
+<CJK_UNIFIED_IDEOGRAPH-31ECC> \xF0\xB1\xBB\x8C
+<CJK_UNIFIED_IDEOGRAPH-31ECD> \xF0\xB1\xBB\x8D
+<CJK_UNIFIED_IDEOGRAPH-31ECE> \xF0\xB1\xBB\x8E
+<CJK_UNIFIED_IDEOGRAPH-31ECF> \xF0\xB1\xBB\x8F
+<CJK_UNIFIED_IDEOGRAPH-31ED0> \xF0\xB1\xBB\x90
+<CJK_UNIFIED_IDEOGRAPH-31ED1> \xF0\xB1\xBB\x91
+<CJK_UNIFIED_IDEOGRAPH-31ED2> \xF0\xB1\xBB\x92
+<CJK_UNIFIED_IDEOGRAPH-31ED3> \xF0\xB1\xBB\x93
+<CJK_UNIFIED_IDEOGRAPH-31ED4> \xF0\xB1\xBB\x94
+<CJK_UNIFIED_IDEOGRAPH-31ED5> \xF0\xB1\xBB\x95
+<CJK_UNIFIED_IDEOGRAPH-31ED6> \xF0\xB1\xBB\x96
+<CJK_UNIFIED_IDEOGRAPH-31ED7> \xF0\xB1\xBB\x97
+<CJK_UNIFIED_IDEOGRAPH-31ED8> \xF0\xB1\xBB\x98
+<CJK_UNIFIED_IDEOGRAPH-31ED9> \xF0\xB1\xBB\x99
+<CJK_UNIFIED_IDEOGRAPH-31EDA> \xF0\xB1\xBB\x9A
+<CJK_UNIFIED_IDEOGRAPH-31EDB> \xF0\xB1\xBB\x9B
+<CJK_UNIFIED_IDEOGRAPH-31EDC> \xF0\xB1\xBB\x9C
+<CJK_UNIFIED_IDEOGRAPH-31EDD> \xF0\xB1\xBB\x9D
+<CJK_UNIFIED_IDEOGRAPH-31EDE> \xF0\xB1\xBB\x9E
+<CJK_UNIFIED_IDEOGRAPH-31EDF> \xF0\xB1\xBB\x9F
+<CJK_UNIFIED_IDEOGRAPH-31EE0> \xF0\xB1\xBB\xA0
+<CJK_UNIFIED_IDEOGRAPH-31EE1> \xF0\xB1\xBB\xA1
+<CJK_UNIFIED_IDEOGRAPH-31EE2> \xF0\xB1\xBB\xA2
+<CJK_UNIFIED_IDEOGRAPH-31EE3> \xF0\xB1\xBB\xA3
+<CJK_UNIFIED_IDEOGRAPH-31EE4> \xF0\xB1\xBB\xA4
+<CJK_UNIFIED_IDEOGRAPH-31EE5> \xF0\xB1\xBB\xA5
+<CJK_UNIFIED_IDEOGRAPH-31EE6> \xF0\xB1\xBB\xA6
+<CJK_UNIFIED_IDEOGRAPH-31EE7> \xF0\xB1\xBB\xA7
+<CJK_UNIFIED_IDEOGRAPH-31EE8> \xF0\xB1\xBB\xA8
+<CJK_UNIFIED_IDEOGRAPH-31EE9> \xF0\xB1\xBB\xA9
+<CJK_UNIFIED_IDEOGRAPH-31EEA> \xF0\xB1\xBB\xAA
+<CJK_UNIFIED_IDEOGRAPH-31EEB> \xF0\xB1\xBB\xAB
+<CJK_UNIFIED_IDEOGRAPH-31EEC> \xF0\xB1\xBB\xAC
+<CJK_UNIFIED_IDEOGRAPH-31EED> \xF0\xB1\xBB\xAD
+<CJK_UNIFIED_IDEOGRAPH-31EEE> \xF0\xB1\xBB\xAE
+<CJK_UNIFIED_IDEOGRAPH-31EEF> \xF0\xB1\xBB\xAF
+<CJK_UNIFIED_IDEOGRAPH-31EF0> \xF0\xB1\xBB\xB0
+<CJK_UNIFIED_IDEOGRAPH-31EF1> \xF0\xB1\xBB\xB1
+<CJK_UNIFIED_IDEOGRAPH-31EF2> \xF0\xB1\xBB\xB2
+<CJK_UNIFIED_IDEOGRAPH-31EF3> \xF0\xB1\xBB\xB3
+<CJK_UNIFIED_IDEOGRAPH-31EF4> \xF0\xB1\xBB\xB4
+<CJK_UNIFIED_IDEOGRAPH-31EF5> \xF0\xB1\xBB\xB5
+<CJK_UNIFIED_IDEOGRAPH-31EF6> \xF0\xB1\xBB\xB6
+<CJK_UNIFIED_IDEOGRAPH-31EF7> \xF0\xB1\xBB\xB7
+<CJK_UNIFIED_IDEOGRAPH-31EF8> \xF0\xB1\xBB\xB8
+<CJK_UNIFIED_IDEOGRAPH-31EF9> \xF0\xB1\xBB\xB9
+<CJK_UNIFIED_IDEOGRAPH-31EFA> \xF0\xB1\xBB\xBA
+<CJK_UNIFIED_IDEOGRAPH-31EFB> \xF0\xB1\xBB\xBB
+<CJK_UNIFIED_IDEOGRAPH-31EFC> \xF0\xB1\xBB\xBC
+<CJK_UNIFIED_IDEOGRAPH-31EFD> \xF0\xB1\xBB\xBD
+<CJK_UNIFIED_IDEOGRAPH-31EFE> \xF0\xB1\xBB\xBE
+<CJK_UNIFIED_IDEOGRAPH-31EFF> \xF0\xB1\xBB\xBF
+<CJK_UNIFIED_IDEOGRAPH-31F00> \xF0\xB1\xBC\x80
+<CJK_UNIFIED_IDEOGRAPH-31F01> \xF0\xB1\xBC\x81
+<CJK_UNIFIED_IDEOGRAPH-31F02> \xF0\xB1\xBC\x82
+<CJK_UNIFIED_IDEOGRAPH-31F03> \xF0\xB1\xBC\x83
+<CJK_UNIFIED_IDEOGRAPH-31F04> \xF0\xB1\xBC\x84
+<CJK_UNIFIED_IDEOGRAPH-31F05> \xF0\xB1\xBC\x85
+<CJK_UNIFIED_IDEOGRAPH-31F06> \xF0\xB1\xBC\x86
+<CJK_UNIFIED_IDEOGRAPH-31F07> \xF0\xB1\xBC\x87
+<CJK_UNIFIED_IDEOGRAPH-31F08> \xF0\xB1\xBC\x88
+<CJK_UNIFIED_IDEOGRAPH-31F09> \xF0\xB1\xBC\x89
+<CJK_UNIFIED_IDEOGRAPH-31F0A> \xF0\xB1\xBC\x8A
+<CJK_UNIFIED_IDEOGRAPH-31F0B> \xF0\xB1\xBC\x8B
+<CJK_UNIFIED_IDEOGRAPH-31F0C> \xF0\xB1\xBC\x8C
+<CJK_UNIFIED_IDEOGRAPH-31F0D> \xF0\xB1\xBC\x8D
+<CJK_UNIFIED_IDEOGRAPH-31F0E> \xF0\xB1\xBC\x8E
+<CJK_UNIFIED_IDEOGRAPH-31F0F> \xF0\xB1\xBC\x8F
+<CJK_UNIFIED_IDEOGRAPH-31F10> \xF0\xB1\xBC\x90
+<CJK_UNIFIED_IDEOGRAPH-31F11> \xF0\xB1\xBC\x91
+<CJK_UNIFIED_IDEOGRAPH-31F12> \xF0\xB1\xBC\x92
+<CJK_UNIFIED_IDEOGRAPH-31F13> \xF0\xB1\xBC\x93
+<CJK_UNIFIED_IDEOGRAPH-31F14> \xF0\xB1\xBC\x94
+<CJK_UNIFIED_IDEOGRAPH-31F15> \xF0\xB1\xBC\x95
+<CJK_UNIFIED_IDEOGRAPH-31F16> \xF0\xB1\xBC\x96
+<CJK_UNIFIED_IDEOGRAPH-31F17> \xF0\xB1\xBC\x97
+<CJK_UNIFIED_IDEOGRAPH-31F18> \xF0\xB1\xBC\x98
+<CJK_UNIFIED_IDEOGRAPH-31F19> \xF0\xB1\xBC\x99
+<CJK_UNIFIED_IDEOGRAPH-31F1A> \xF0\xB1\xBC\x9A
+<CJK_UNIFIED_IDEOGRAPH-31F1B> \xF0\xB1\xBC\x9B
+<CJK_UNIFIED_IDEOGRAPH-31F1C> \xF0\xB1\xBC\x9C
+<CJK_UNIFIED_IDEOGRAPH-31F1D> \xF0\xB1\xBC\x9D
+<CJK_UNIFIED_IDEOGRAPH-31F1E> \xF0\xB1\xBC\x9E
+<CJK_UNIFIED_IDEOGRAPH-31F1F> \xF0\xB1\xBC\x9F
+<CJK_UNIFIED_IDEOGRAPH-31F20> \xF0\xB1\xBC\xA0
+<CJK_UNIFIED_IDEOGRAPH-31F21> \xF0\xB1\xBC\xA1
+<CJK_UNIFIED_IDEOGRAPH-31F22> \xF0\xB1\xBC\xA2
+<CJK_UNIFIED_IDEOGRAPH-31F23> \xF0\xB1\xBC\xA3
+<CJK_UNIFIED_IDEOGRAPH-31F24> \xF0\xB1\xBC\xA4
+<CJK_UNIFIED_IDEOGRAPH-31F25> \xF0\xB1\xBC\xA5
+<CJK_UNIFIED_IDEOGRAPH-31F26> \xF0\xB1\xBC\xA6
+<CJK_UNIFIED_IDEOGRAPH-31F27> \xF0\xB1\xBC\xA7
+<CJK_UNIFIED_IDEOGRAPH-31F28> \xF0\xB1\xBC\xA8
+<CJK_UNIFIED_IDEOGRAPH-31F29> \xF0\xB1\xBC\xA9
+<CJK_UNIFIED_IDEOGRAPH-31F2A> \xF0\xB1\xBC\xAA
+<CJK_UNIFIED_IDEOGRAPH-31F2B> \xF0\xB1\xBC\xAB
+<CJK_UNIFIED_IDEOGRAPH-31F2C> \xF0\xB1\xBC\xAC
+<CJK_UNIFIED_IDEOGRAPH-31F2D> \xF0\xB1\xBC\xAD
+<CJK_UNIFIED_IDEOGRAPH-31F2E> \xF0\xB1\xBC\xAE
+<CJK_UNIFIED_IDEOGRAPH-31F2F> \xF0\xB1\xBC\xAF
+<CJK_UNIFIED_IDEOGRAPH-31F30> \xF0\xB1\xBC\xB0
+<CJK_UNIFIED_IDEOGRAPH-31F31> \xF0\xB1\xBC\xB1
+<CJK_UNIFIED_IDEOGRAPH-31F32> \xF0\xB1\xBC\xB2
+<CJK_UNIFIED_IDEOGRAPH-31F33> \xF0\xB1\xBC\xB3
+<CJK_UNIFIED_IDEOGRAPH-31F34> \xF0\xB1\xBC\xB4
+<CJK_UNIFIED_IDEOGRAPH-31F35> \xF0\xB1\xBC\xB5
+<CJK_UNIFIED_IDEOGRAPH-31F36> \xF0\xB1\xBC\xB6
+<CJK_UNIFIED_IDEOGRAPH-31F37> \xF0\xB1\xBC\xB7
+<CJK_UNIFIED_IDEOGRAPH-31F38> \xF0\xB1\xBC\xB8
+<CJK_UNIFIED_IDEOGRAPH-31F39> \xF0\xB1\xBC\xB9
+<CJK_UNIFIED_IDEOGRAPH-31F3A> \xF0\xB1\xBC\xBA
+<CJK_UNIFIED_IDEOGRAPH-31F3B> \xF0\xB1\xBC\xBB
+<CJK_UNIFIED_IDEOGRAPH-31F3C> \xF0\xB1\xBC\xBC
+<CJK_UNIFIED_IDEOGRAPH-31F3D> \xF0\xB1\xBC\xBD
+<CJK_UNIFIED_IDEOGRAPH-31F3E> \xF0\xB1\xBC\xBE
+<CJK_UNIFIED_IDEOGRAPH-31F3F> \xF0\xB1\xBC\xBF
+<CJK_UNIFIED_IDEOGRAPH-31F40> \xF0\xB1\xBD\x80
+<CJK_UNIFIED_IDEOGRAPH-31F41> \xF0\xB1\xBD\x81
+<CJK_UNIFIED_IDEOGRAPH-31F42> \xF0\xB1\xBD\x82
+<CJK_UNIFIED_IDEOGRAPH-31F43> \xF0\xB1\xBD\x83
+<CJK_UNIFIED_IDEOGRAPH-31F44> \xF0\xB1\xBD\x84
+<CJK_UNIFIED_IDEOGRAPH-31F45> \xF0\xB1\xBD\x85
+<CJK_UNIFIED_IDEOGRAPH-31F46> \xF0\xB1\xBD\x86
+<CJK_UNIFIED_IDEOGRAPH-31F47> \xF0\xB1\xBD\x87
+<CJK_UNIFIED_IDEOGRAPH-31F48> \xF0\xB1\xBD\x88
+<CJK_UNIFIED_IDEOGRAPH-31F49> \xF0\xB1\xBD\x89
+<CJK_UNIFIED_IDEOGRAPH-31F4A> \xF0\xB1\xBD\x8A
+<CJK_UNIFIED_IDEOGRAPH-31F4B> \xF0\xB1\xBD\x8B
+<CJK_UNIFIED_IDEOGRAPH-31F4C> \xF0\xB1\xBD\x8C
+<CJK_UNIFIED_IDEOGRAPH-31F4D> \xF0\xB1\xBD\x8D
+<CJK_UNIFIED_IDEOGRAPH-31F4E> \xF0\xB1\xBD\x8E
+<CJK_UNIFIED_IDEOGRAPH-31F4F> \xF0\xB1\xBD\x8F
+<CJK_UNIFIED_IDEOGRAPH-31F50> \xF0\xB1\xBD\x90
+<CJK_UNIFIED_IDEOGRAPH-31F51> \xF0\xB1\xBD\x91
+<CJK_UNIFIED_IDEOGRAPH-31F52> \xF0\xB1\xBD\x92
+<CJK_UNIFIED_IDEOGRAPH-31F53> \xF0\xB1\xBD\x93
+<CJK_UNIFIED_IDEOGRAPH-31F54> \xF0\xB1\xBD\x94
+<CJK_UNIFIED_IDEOGRAPH-31F55> \xF0\xB1\xBD\x95
+<CJK_UNIFIED_IDEOGRAPH-31F56> \xF0\xB1\xBD\x96
+<CJK_UNIFIED_IDEOGRAPH-31F57> \xF0\xB1\xBD\x97
+<CJK_UNIFIED_IDEOGRAPH-31F58> \xF0\xB1\xBD\x98
+<CJK_UNIFIED_IDEOGRAPH-31F59> \xF0\xB1\xBD\x99
+<CJK_UNIFIED_IDEOGRAPH-31F5A> \xF0\xB1\xBD\x9A
+<CJK_UNIFIED_IDEOGRAPH-31F5B> \xF0\xB1\xBD\x9B
+<CJK_UNIFIED_IDEOGRAPH-31F5C> \xF0\xB1\xBD\x9C
+<CJK_UNIFIED_IDEOGRAPH-31F5D> \xF0\xB1\xBD\x9D
+<CJK_UNIFIED_IDEOGRAPH-31F5E> \xF0\xB1\xBD\x9E
+<CJK_UNIFIED_IDEOGRAPH-31F5F> \xF0\xB1\xBD\x9F
+<CJK_UNIFIED_IDEOGRAPH-31F60> \xF0\xB1\xBD\xA0
+<CJK_UNIFIED_IDEOGRAPH-31F61> \xF0\xB1\xBD\xA1
+<CJK_UNIFIED_IDEOGRAPH-31F62> \xF0\xB1\xBD\xA2
+<CJK_UNIFIED_IDEOGRAPH-31F63> \xF0\xB1\xBD\xA3
+<CJK_UNIFIED_IDEOGRAPH-31F64> \xF0\xB1\xBD\xA4
+<CJK_UNIFIED_IDEOGRAPH-31F65> \xF0\xB1\xBD\xA5
+<CJK_UNIFIED_IDEOGRAPH-31F66> \xF0\xB1\xBD\xA6
+<CJK_UNIFIED_IDEOGRAPH-31F67> \xF0\xB1\xBD\xA7
+<CJK_UNIFIED_IDEOGRAPH-31F68> \xF0\xB1\xBD\xA8
+<CJK_UNIFIED_IDEOGRAPH-31F69> \xF0\xB1\xBD\xA9
+<CJK_UNIFIED_IDEOGRAPH-31F6A> \xF0\xB1\xBD\xAA
+<CJK_UNIFIED_IDEOGRAPH-31F6B> \xF0\xB1\xBD\xAB
+<CJK_UNIFIED_IDEOGRAPH-31F6C> \xF0\xB1\xBD\xAC
+<CJK_UNIFIED_IDEOGRAPH-31F6D> \xF0\xB1\xBD\xAD
+<CJK_UNIFIED_IDEOGRAPH-31F6E> \xF0\xB1\xBD\xAE
+<CJK_UNIFIED_IDEOGRAPH-31F6F> \xF0\xB1\xBD\xAF
+<CJK_UNIFIED_IDEOGRAPH-31F70> \xF0\xB1\xBD\xB0
+<CJK_UNIFIED_IDEOGRAPH-31F71> \xF0\xB1\xBD\xB1
+<CJK_UNIFIED_IDEOGRAPH-31F72> \xF0\xB1\xBD\xB2
+<CJK_UNIFIED_IDEOGRAPH-31F73> \xF0\xB1\xBD\xB3
+<CJK_UNIFIED_IDEOGRAPH-31F74> \xF0\xB1\xBD\xB4
+<CJK_UNIFIED_IDEOGRAPH-31F75> \xF0\xB1\xBD\xB5
+<CJK_UNIFIED_IDEOGRAPH-31F76> \xF0\xB1\xBD\xB6
+<CJK_UNIFIED_IDEOGRAPH-31F77> \xF0\xB1\xBD\xB7
+<CJK_UNIFIED_IDEOGRAPH-31F78> \xF0\xB1\xBD\xB8
+<CJK_UNIFIED_IDEOGRAPH-31F79> \xF0\xB1\xBD\xB9
+<CJK_UNIFIED_IDEOGRAPH-31F7A> \xF0\xB1\xBD\xBA
+<CJK_UNIFIED_IDEOGRAPH-31F7B> \xF0\xB1\xBD\xBB
+<CJK_UNIFIED_IDEOGRAPH-31F7C> \xF0\xB1\xBD\xBC
+<CJK_UNIFIED_IDEOGRAPH-31F7D> \xF0\xB1\xBD\xBD
+<CJK_UNIFIED_IDEOGRAPH-31F7E> \xF0\xB1\xBD\xBE
+<CJK_UNIFIED_IDEOGRAPH-31F7F> \xF0\xB1\xBD\xBF
+<CJK_UNIFIED_IDEOGRAPH-31F80> \xF0\xB1\xBE\x80
+<CJK_UNIFIED_IDEOGRAPH-31F81> \xF0\xB1\xBE\x81
+<CJK_UNIFIED_IDEOGRAPH-31F82> \xF0\xB1\xBE\x82
+<CJK_UNIFIED_IDEOGRAPH-31F83> \xF0\xB1\xBE\x83
+<CJK_UNIFIED_IDEOGRAPH-31F84> \xF0\xB1\xBE\x84
+<CJK_UNIFIED_IDEOGRAPH-31F85> \xF0\xB1\xBE\x85
+<CJK_UNIFIED_IDEOGRAPH-31F86> \xF0\xB1\xBE\x86
+<CJK_UNIFIED_IDEOGRAPH-31F87> \xF0\xB1\xBE\x87
+<CJK_UNIFIED_IDEOGRAPH-31F88> \xF0\xB1\xBE\x88
+<CJK_UNIFIED_IDEOGRAPH-31F89> \xF0\xB1\xBE\x89
+<CJK_UNIFIED_IDEOGRAPH-31F8A> \xF0\xB1\xBE\x8A
+<CJK_UNIFIED_IDEOGRAPH-31F8B> \xF0\xB1\xBE\x8B
+<CJK_UNIFIED_IDEOGRAPH-31F8C> \xF0\xB1\xBE\x8C
+<CJK_UNIFIED_IDEOGRAPH-31F8D> \xF0\xB1\xBE\x8D
+<CJK_UNIFIED_IDEOGRAPH-31F8E> \xF0\xB1\xBE\x8E
+<CJK_UNIFIED_IDEOGRAPH-31F8F> \xF0\xB1\xBE\x8F
+<CJK_UNIFIED_IDEOGRAPH-31F90> \xF0\xB1\xBE\x90
+<CJK_UNIFIED_IDEOGRAPH-31F91> \xF0\xB1\xBE\x91
+<CJK_UNIFIED_IDEOGRAPH-31F92> \xF0\xB1\xBE\x92
+<CJK_UNIFIED_IDEOGRAPH-31F93> \xF0\xB1\xBE\x93
+<CJK_UNIFIED_IDEOGRAPH-31F94> \xF0\xB1\xBE\x94
+<CJK_UNIFIED_IDEOGRAPH-31F95> \xF0\xB1\xBE\x95
+<CJK_UNIFIED_IDEOGRAPH-31F96> \xF0\xB1\xBE\x96
+<CJK_UNIFIED_IDEOGRAPH-31F97> \xF0\xB1\xBE\x97
+<CJK_UNIFIED_IDEOGRAPH-31F98> \xF0\xB1\xBE\x98
+<CJK_UNIFIED_IDEOGRAPH-31F99> \xF0\xB1\xBE\x99
+<CJK_UNIFIED_IDEOGRAPH-31F9A> \xF0\xB1\xBE\x9A
+<CJK_UNIFIED_IDEOGRAPH-31F9B> \xF0\xB1\xBE\x9B
+<CJK_UNIFIED_IDEOGRAPH-31F9C> \xF0\xB1\xBE\x9C
+<CJK_UNIFIED_IDEOGRAPH-31F9D> \xF0\xB1\xBE\x9D
+<CJK_UNIFIED_IDEOGRAPH-31F9E> \xF0\xB1\xBE\x9E
+<CJK_UNIFIED_IDEOGRAPH-31F9F> \xF0\xB1\xBE\x9F
+<CJK_UNIFIED_IDEOGRAPH-31FA0> \xF0\xB1\xBE\xA0
+<CJK_UNIFIED_IDEOGRAPH-31FA1> \xF0\xB1\xBE\xA1
+<CJK_UNIFIED_IDEOGRAPH-31FA2> \xF0\xB1\xBE\xA2
+<CJK_UNIFIED_IDEOGRAPH-31FA3> \xF0\xB1\xBE\xA3
+<CJK_UNIFIED_IDEOGRAPH-31FA4> \xF0\xB1\xBE\xA4
+<CJK_UNIFIED_IDEOGRAPH-31FA5> \xF0\xB1\xBE\xA5
+<CJK_UNIFIED_IDEOGRAPH-31FA6> \xF0\xB1\xBE\xA6
+<CJK_UNIFIED_IDEOGRAPH-31FA7> \xF0\xB1\xBE\xA7
+<CJK_UNIFIED_IDEOGRAPH-31FA8> \xF0\xB1\xBE\xA8
+<CJK_UNIFIED_IDEOGRAPH-31FA9> \xF0\xB1\xBE\xA9
+<CJK_UNIFIED_IDEOGRAPH-31FAA> \xF0\xB1\xBE\xAA
+<CJK_UNIFIED_IDEOGRAPH-31FAB> \xF0\xB1\xBE\xAB
+<CJK_UNIFIED_IDEOGRAPH-31FAC> \xF0\xB1\xBE\xAC
+<CJK_UNIFIED_IDEOGRAPH-31FAD> \xF0\xB1\xBE\xAD
+<CJK_UNIFIED_IDEOGRAPH-31FAE> \xF0\xB1\xBE\xAE
+<CJK_UNIFIED_IDEOGRAPH-31FAF> \xF0\xB1\xBE\xAF
+<CJK_UNIFIED_IDEOGRAPH-31FB0> \xF0\xB1\xBE\xB0
+<CJK_UNIFIED_IDEOGRAPH-31FB1> \xF0\xB1\xBE\xB1
+<CJK_UNIFIED_IDEOGRAPH-31FB2> \xF0\xB1\xBE\xB2
+<CJK_UNIFIED_IDEOGRAPH-31FB3> \xF0\xB1\xBE\xB3
+<CJK_UNIFIED_IDEOGRAPH-31FB4> \xF0\xB1\xBE\xB4
+<CJK_UNIFIED_IDEOGRAPH-31FB5> \xF0\xB1\xBE\xB5
+<CJK_UNIFIED_IDEOGRAPH-31FB6> \xF0\xB1\xBE\xB6
+<CJK_UNIFIED_IDEOGRAPH-31FB7> \xF0\xB1\xBE\xB7
+<CJK_UNIFIED_IDEOGRAPH-31FB8> \xF0\xB1\xBE\xB8
+<CJK_UNIFIED_IDEOGRAPH-31FB9> \xF0\xB1\xBE\xB9
+<CJK_UNIFIED_IDEOGRAPH-31FBA> \xF0\xB1\xBE\xBA
+<CJK_UNIFIED_IDEOGRAPH-31FBB> \xF0\xB1\xBE\xBB
+<CJK_UNIFIED_IDEOGRAPH-31FBC> \xF0\xB1\xBE\xBC
+<CJK_UNIFIED_IDEOGRAPH-31FBD> \xF0\xB1\xBE\xBD
+<CJK_UNIFIED_IDEOGRAPH-31FBE> \xF0\xB1\xBE\xBE
+<CJK_UNIFIED_IDEOGRAPH-31FBF> \xF0\xB1\xBE\xBF
+<CJK_UNIFIED_IDEOGRAPH-31FC0> \xF0\xB1\xBF\x80
+<CJK_UNIFIED_IDEOGRAPH-31FC1> \xF0\xB1\xBF\x81
+<CJK_UNIFIED_IDEOGRAPH-31FC2> \xF0\xB1\xBF\x82
+<CJK_UNIFIED_IDEOGRAPH-31FC3> \xF0\xB1\xBF\x83
+<CJK_UNIFIED_IDEOGRAPH-31FC4> \xF0\xB1\xBF\x84
+<CJK_UNIFIED_IDEOGRAPH-31FC5> \xF0\xB1\xBF\x85
+<CJK_UNIFIED_IDEOGRAPH-31FC6> \xF0\xB1\xBF\x86
+<CJK_UNIFIED_IDEOGRAPH-31FC7> \xF0\xB1\xBF\x87
+<CJK_UNIFIED_IDEOGRAPH-31FC8> \xF0\xB1\xBF\x88
+<CJK_UNIFIED_IDEOGRAPH-31FC9> \xF0\xB1\xBF\x89
+<CJK_UNIFIED_IDEOGRAPH-31FCA> \xF0\xB1\xBF\x8A
+<CJK_UNIFIED_IDEOGRAPH-31FCB> \xF0\xB1\xBF\x8B
+<CJK_UNIFIED_IDEOGRAPH-31FCC> \xF0\xB1\xBF\x8C
+<CJK_UNIFIED_IDEOGRAPH-31FCD> \xF0\xB1\xBF\x8D
+<CJK_UNIFIED_IDEOGRAPH-31FCE> \xF0\xB1\xBF\x8E
+<CJK_UNIFIED_IDEOGRAPH-31FCF> \xF0\xB1\xBF\x8F
+<CJK_UNIFIED_IDEOGRAPH-31FD0> \xF0\xB1\xBF\x90
+<CJK_UNIFIED_IDEOGRAPH-31FD1> \xF0\xB1\xBF\x91
+<CJK_UNIFIED_IDEOGRAPH-31FD2> \xF0\xB1\xBF\x92
+<CJK_UNIFIED_IDEOGRAPH-31FD3> \xF0\xB1\xBF\x93
+<CJK_UNIFIED_IDEOGRAPH-31FD4> \xF0\xB1\xBF\x94
+<CJK_UNIFIED_IDEOGRAPH-31FD5> \xF0\xB1\xBF\x95
+<CJK_UNIFIED_IDEOGRAPH-31FD6> \xF0\xB1\xBF\x96
+<CJK_UNIFIED_IDEOGRAPH-31FD7> \xF0\xB1\xBF\x97
+<CJK_UNIFIED_IDEOGRAPH-31FD8> \xF0\xB1\xBF\x98
+<CJK_UNIFIED_IDEOGRAPH-31FD9> \xF0\xB1\xBF\x99
+<CJK_UNIFIED_IDEOGRAPH-31FDA> \xF0\xB1\xBF\x9A
+<CJK_UNIFIED_IDEOGRAPH-31FDB> \xF0\xB1\xBF\x9B
+<CJK_UNIFIED_IDEOGRAPH-31FDC> \xF0\xB1\xBF\x9C
+<CJK_UNIFIED_IDEOGRAPH-31FDD> \xF0\xB1\xBF\x9D
+<CJK_UNIFIED_IDEOGRAPH-31FDE> \xF0\xB1\xBF\x9E
+<CJK_UNIFIED_IDEOGRAPH-31FDF> \xF0\xB1\xBF\x9F
+<CJK_UNIFIED_IDEOGRAPH-31FE0> \xF0\xB1\xBF\xA0
+<CJK_UNIFIED_IDEOGRAPH-31FE1> \xF0\xB1\xBF\xA1
+<CJK_UNIFIED_IDEOGRAPH-31FE2> \xF0\xB1\xBF\xA2
+<CJK_UNIFIED_IDEOGRAPH-31FE3> \xF0\xB1\xBF\xA3
+<CJK_UNIFIED_IDEOGRAPH-31FE4> \xF0\xB1\xBF\xA4
+<CJK_UNIFIED_IDEOGRAPH-31FE5> \xF0\xB1\xBF\xA5
+<CJK_UNIFIED_IDEOGRAPH-31FE6> \xF0\xB1\xBF\xA6
+<CJK_UNIFIED_IDEOGRAPH-31FE7> \xF0\xB1\xBF\xA7
+<CJK_UNIFIED_IDEOGRAPH-31FE8> \xF0\xB1\xBF\xA8
+<CJK_UNIFIED_IDEOGRAPH-31FE9> \xF0\xB1\xBF\xA9
+<CJK_UNIFIED_IDEOGRAPH-31FEA> \xF0\xB1\xBF\xAA
+<CJK_UNIFIED_IDEOGRAPH-31FEB> \xF0\xB1\xBF\xAB
+<CJK_UNIFIED_IDEOGRAPH-31FEC> \xF0\xB1\xBF\xAC
+<CJK_UNIFIED_IDEOGRAPH-31FED> \xF0\xB1\xBF\xAD
+<CJK_UNIFIED_IDEOGRAPH-31FEE> \xF0\xB1\xBF\xAE
+<CJK_UNIFIED_IDEOGRAPH-31FEF> \xF0\xB1\xBF\xAF
+<CJK_UNIFIED_IDEOGRAPH-31FF0> \xF0\xB1\xBF\xB0
+<CJK_UNIFIED_IDEOGRAPH-31FF1> \xF0\xB1\xBF\xB1
+<CJK_UNIFIED_IDEOGRAPH-31FF2> \xF0\xB1\xBF\xB2
+<CJK_UNIFIED_IDEOGRAPH-31FF3> \xF0\xB1\xBF\xB3
+<CJK_UNIFIED_IDEOGRAPH-31FF4> \xF0\xB1\xBF\xB4
+<CJK_UNIFIED_IDEOGRAPH-31FF5> \xF0\xB1\xBF\xB5
+<CJK_UNIFIED_IDEOGRAPH-31FF6> \xF0\xB1\xBF\xB6
+<CJK_UNIFIED_IDEOGRAPH-31FF7> \xF0\xB1\xBF\xB7
+<CJK_UNIFIED_IDEOGRAPH-31FF8> \xF0\xB1\xBF\xB8
+<CJK_UNIFIED_IDEOGRAPH-31FF9> \xF0\xB1\xBF\xB9
+<CJK_UNIFIED_IDEOGRAPH-31FFA> \xF0\xB1\xBF\xBA
+<CJK_UNIFIED_IDEOGRAPH-31FFB> \xF0\xB1\xBF\xBB
+<CJK_UNIFIED_IDEOGRAPH-31FFC> \xF0\xB1\xBF\xBC
+<CJK_UNIFIED_IDEOGRAPH-31FFD> \xF0\xB1\xBF\xBD
+<CJK_UNIFIED_IDEOGRAPH-31FFE> \xF0\xB1\xBF\xBE
+<CJK_UNIFIED_IDEOGRAPH-31FFF> \xF0\xB1\xBF\xBF
+<CJK_UNIFIED_IDEOGRAPH-32000> \xF0\xB2\x80\x80
+<CJK_UNIFIED_IDEOGRAPH-32001> \xF0\xB2\x80\x81
+<CJK_UNIFIED_IDEOGRAPH-32002> \xF0\xB2\x80\x82
+<CJK_UNIFIED_IDEOGRAPH-32003> \xF0\xB2\x80\x83
+<CJK_UNIFIED_IDEOGRAPH-32004> \xF0\xB2\x80\x84
+<CJK_UNIFIED_IDEOGRAPH-32005> \xF0\xB2\x80\x85
+<CJK_UNIFIED_IDEOGRAPH-32006> \xF0\xB2\x80\x86
+<CJK_UNIFIED_IDEOGRAPH-32007> \xF0\xB2\x80\x87
+<CJK_UNIFIED_IDEOGRAPH-32008> \xF0\xB2\x80\x88
+<CJK_UNIFIED_IDEOGRAPH-32009> \xF0\xB2\x80\x89
+<CJK_UNIFIED_IDEOGRAPH-3200A> \xF0\xB2\x80\x8A
+<CJK_UNIFIED_IDEOGRAPH-3200B> \xF0\xB2\x80\x8B
+<CJK_UNIFIED_IDEOGRAPH-3200C> \xF0\xB2\x80\x8C
+<CJK_UNIFIED_IDEOGRAPH-3200D> \xF0\xB2\x80\x8D
+<CJK_UNIFIED_IDEOGRAPH-3200E> \xF0\xB2\x80\x8E
+<CJK_UNIFIED_IDEOGRAPH-3200F> \xF0\xB2\x80\x8F
+<CJK_UNIFIED_IDEOGRAPH-32010> \xF0\xB2\x80\x90
+<CJK_UNIFIED_IDEOGRAPH-32011> \xF0\xB2\x80\x91
+<CJK_UNIFIED_IDEOGRAPH-32012> \xF0\xB2\x80\x92
+<CJK_UNIFIED_IDEOGRAPH-32013> \xF0\xB2\x80\x93
+<CJK_UNIFIED_IDEOGRAPH-32014> \xF0\xB2\x80\x94
+<CJK_UNIFIED_IDEOGRAPH-32015> \xF0\xB2\x80\x95
+<CJK_UNIFIED_IDEOGRAPH-32016> \xF0\xB2\x80\x96
+<CJK_UNIFIED_IDEOGRAPH-32017> \xF0\xB2\x80\x97
+<CJK_UNIFIED_IDEOGRAPH-32018> \xF0\xB2\x80\x98
+<CJK_UNIFIED_IDEOGRAPH-32019> \xF0\xB2\x80\x99
+<CJK_UNIFIED_IDEOGRAPH-3201A> \xF0\xB2\x80\x9A
+<CJK_UNIFIED_IDEOGRAPH-3201B> \xF0\xB2\x80\x9B
+<CJK_UNIFIED_IDEOGRAPH-3201C> \xF0\xB2\x80\x9C
+<CJK_UNIFIED_IDEOGRAPH-3201D> \xF0\xB2\x80\x9D
+<CJK_UNIFIED_IDEOGRAPH-3201E> \xF0\xB2\x80\x9E
+<CJK_UNIFIED_IDEOGRAPH-3201F> \xF0\xB2\x80\x9F
+<CJK_UNIFIED_IDEOGRAPH-32020> \xF0\xB2\x80\xA0
+<CJK_UNIFIED_IDEOGRAPH-32021> \xF0\xB2\x80\xA1
+<CJK_UNIFIED_IDEOGRAPH-32022> \xF0\xB2\x80\xA2
+<CJK_UNIFIED_IDEOGRAPH-32023> \xF0\xB2\x80\xA3
+<CJK_UNIFIED_IDEOGRAPH-32024> \xF0\xB2\x80\xA4
+<CJK_UNIFIED_IDEOGRAPH-32025> \xF0\xB2\x80\xA5
+<CJK_UNIFIED_IDEOGRAPH-32026> \xF0\xB2\x80\xA6
+<CJK_UNIFIED_IDEOGRAPH-32027> \xF0\xB2\x80\xA7
+<CJK_UNIFIED_IDEOGRAPH-32028> \xF0\xB2\x80\xA8
+<CJK_UNIFIED_IDEOGRAPH-32029> \xF0\xB2\x80\xA9
+<CJK_UNIFIED_IDEOGRAPH-3202A> \xF0\xB2\x80\xAA
+<CJK_UNIFIED_IDEOGRAPH-3202B> \xF0\xB2\x80\xAB
+<CJK_UNIFIED_IDEOGRAPH-3202C> \xF0\xB2\x80\xAC
+<CJK_UNIFIED_IDEOGRAPH-3202D> \xF0\xB2\x80\xAD
+<CJK_UNIFIED_IDEOGRAPH-3202E> \xF0\xB2\x80\xAE
+<CJK_UNIFIED_IDEOGRAPH-3202F> \xF0\xB2\x80\xAF
+<CJK_UNIFIED_IDEOGRAPH-32030> \xF0\xB2\x80\xB0
+<CJK_UNIFIED_IDEOGRAPH-32031> \xF0\xB2\x80\xB1
+<CJK_UNIFIED_IDEOGRAPH-32032> \xF0\xB2\x80\xB2
+<CJK_UNIFIED_IDEOGRAPH-32033> \xF0\xB2\x80\xB3
+<CJK_UNIFIED_IDEOGRAPH-32034> \xF0\xB2\x80\xB4
+<CJK_UNIFIED_IDEOGRAPH-32035> \xF0\xB2\x80\xB5
+<CJK_UNIFIED_IDEOGRAPH-32036> \xF0\xB2\x80\xB6
+<CJK_UNIFIED_IDEOGRAPH-32037> \xF0\xB2\x80\xB7
+<CJK_UNIFIED_IDEOGRAPH-32038> \xF0\xB2\x80\xB8
+<CJK_UNIFIED_IDEOGRAPH-32039> \xF0\xB2\x80\xB9
+<CJK_UNIFIED_IDEOGRAPH-3203A> \xF0\xB2\x80\xBA
+<CJK_UNIFIED_IDEOGRAPH-3203B> \xF0\xB2\x80\xBB
+<CJK_UNIFIED_IDEOGRAPH-3203C> \xF0\xB2\x80\xBC
+<CJK_UNIFIED_IDEOGRAPH-3203D> \xF0\xB2\x80\xBD
+<CJK_UNIFIED_IDEOGRAPH-3203E> \xF0\xB2\x80\xBE
+<CJK_UNIFIED_IDEOGRAPH-3203F> \xF0\xB2\x80\xBF
+<CJK_UNIFIED_IDEOGRAPH-32040> \xF0\xB2\x81\x80
+<CJK_UNIFIED_IDEOGRAPH-32041> \xF0\xB2\x81\x81
+<CJK_UNIFIED_IDEOGRAPH-32042> \xF0\xB2\x81\x82
+<CJK_UNIFIED_IDEOGRAPH-32043> \xF0\xB2\x81\x83
+<CJK_UNIFIED_IDEOGRAPH-32044> \xF0\xB2\x81\x84
+<CJK_UNIFIED_IDEOGRAPH-32045> \xF0\xB2\x81\x85
+<CJK_UNIFIED_IDEOGRAPH-32046> \xF0\xB2\x81\x86
+<CJK_UNIFIED_IDEOGRAPH-32047> \xF0\xB2\x81\x87
+<CJK_UNIFIED_IDEOGRAPH-32048> \xF0\xB2\x81\x88
+<CJK_UNIFIED_IDEOGRAPH-32049> \xF0\xB2\x81\x89
+<CJK_UNIFIED_IDEOGRAPH-3204A> \xF0\xB2\x81\x8A
+<CJK_UNIFIED_IDEOGRAPH-3204B> \xF0\xB2\x81\x8B
+<CJK_UNIFIED_IDEOGRAPH-3204C> \xF0\xB2\x81\x8C
+<CJK_UNIFIED_IDEOGRAPH-3204D> \xF0\xB2\x81\x8D
+<CJK_UNIFIED_IDEOGRAPH-3204E> \xF0\xB2\x81\x8E
+<CJK_UNIFIED_IDEOGRAPH-3204F> \xF0\xB2\x81\x8F
+<CJK_UNIFIED_IDEOGRAPH-32050> \xF0\xB2\x81\x90
+<CJK_UNIFIED_IDEOGRAPH-32051> \xF0\xB2\x81\x91
+<CJK_UNIFIED_IDEOGRAPH-32052> \xF0\xB2\x81\x92
+<CJK_UNIFIED_IDEOGRAPH-32053> \xF0\xB2\x81\x93
+<CJK_UNIFIED_IDEOGRAPH-32054> \xF0\xB2\x81\x94
+<CJK_UNIFIED_IDEOGRAPH-32055> \xF0\xB2\x81\x95
+<CJK_UNIFIED_IDEOGRAPH-32056> \xF0\xB2\x81\x96
+<CJK_UNIFIED_IDEOGRAPH-32057> \xF0\xB2\x81\x97
+<CJK_UNIFIED_IDEOGRAPH-32058> \xF0\xB2\x81\x98
+<CJK_UNIFIED_IDEOGRAPH-32059> \xF0\xB2\x81\x99
+<CJK_UNIFIED_IDEOGRAPH-3205A> \xF0\xB2\x81\x9A
+<CJK_UNIFIED_IDEOGRAPH-3205B> \xF0\xB2\x81\x9B
+<CJK_UNIFIED_IDEOGRAPH-3205C> \xF0\xB2\x81\x9C
+<CJK_UNIFIED_IDEOGRAPH-3205D> \xF0\xB2\x81\x9D
+<CJK_UNIFIED_IDEOGRAPH-3205E> \xF0\xB2\x81\x9E
+<CJK_UNIFIED_IDEOGRAPH-3205F> \xF0\xB2\x81\x9F
+<CJK_UNIFIED_IDEOGRAPH-32060> \xF0\xB2\x81\xA0
+<CJK_UNIFIED_IDEOGRAPH-32061> \xF0\xB2\x81\xA1
+<CJK_UNIFIED_IDEOGRAPH-32062> \xF0\xB2\x81\xA2
+<CJK_UNIFIED_IDEOGRAPH-32063> \xF0\xB2\x81\xA3
+<CJK_UNIFIED_IDEOGRAPH-32064> \xF0\xB2\x81\xA4
+<CJK_UNIFIED_IDEOGRAPH-32065> \xF0\xB2\x81\xA5
+<CJK_UNIFIED_IDEOGRAPH-32066> \xF0\xB2\x81\xA6
+<CJK_UNIFIED_IDEOGRAPH-32067> \xF0\xB2\x81\xA7
+<CJK_UNIFIED_IDEOGRAPH-32068> \xF0\xB2\x81\xA8
+<CJK_UNIFIED_IDEOGRAPH-32069> \xF0\xB2\x81\xA9
+<CJK_UNIFIED_IDEOGRAPH-3206A> \xF0\xB2\x81\xAA
+<CJK_UNIFIED_IDEOGRAPH-3206B> \xF0\xB2\x81\xAB
+<CJK_UNIFIED_IDEOGRAPH-3206C> \xF0\xB2\x81\xAC
+<CJK_UNIFIED_IDEOGRAPH-3206D> \xF0\xB2\x81\xAD
+<CJK_UNIFIED_IDEOGRAPH-3206E> \xF0\xB2\x81\xAE
+<CJK_UNIFIED_IDEOGRAPH-3206F> \xF0\xB2\x81\xAF
+<CJK_UNIFIED_IDEOGRAPH-32070> \xF0\xB2\x81\xB0
+<CJK_UNIFIED_IDEOGRAPH-32071> \xF0\xB2\x81\xB1
+<CJK_UNIFIED_IDEOGRAPH-32072> \xF0\xB2\x81\xB2
+<CJK_UNIFIED_IDEOGRAPH-32073> \xF0\xB2\x81\xB3
+<CJK_UNIFIED_IDEOGRAPH-32074> \xF0\xB2\x81\xB4
+<CJK_UNIFIED_IDEOGRAPH-32075> \xF0\xB2\x81\xB5
+<CJK_UNIFIED_IDEOGRAPH-32076> \xF0\xB2\x81\xB6
+<CJK_UNIFIED_IDEOGRAPH-32077> \xF0\xB2\x81\xB7
+<CJK_UNIFIED_IDEOGRAPH-32078> \xF0\xB2\x81\xB8
+<CJK_UNIFIED_IDEOGRAPH-32079> \xF0\xB2\x81\xB9
+<CJK_UNIFIED_IDEOGRAPH-3207A> \xF0\xB2\x81\xBA
+<CJK_UNIFIED_IDEOGRAPH-3207B> \xF0\xB2\x81\xBB
+<CJK_UNIFIED_IDEOGRAPH-3207C> \xF0\xB2\x81\xBC
+<CJK_UNIFIED_IDEOGRAPH-3207D> \xF0\xB2\x81\xBD
+<CJK_UNIFIED_IDEOGRAPH-3207E> \xF0\xB2\x81\xBE
+<CJK_UNIFIED_IDEOGRAPH-3207F> \xF0\xB2\x81\xBF
+<CJK_UNIFIED_IDEOGRAPH-32080> \xF0\xB2\x82\x80
+<CJK_UNIFIED_IDEOGRAPH-32081> \xF0\xB2\x82\x81
+<CJK_UNIFIED_IDEOGRAPH-32082> \xF0\xB2\x82\x82
+<CJK_UNIFIED_IDEOGRAPH-32083> \xF0\xB2\x82\x83
+<CJK_UNIFIED_IDEOGRAPH-32084> \xF0\xB2\x82\x84
+<CJK_UNIFIED_IDEOGRAPH-32085> \xF0\xB2\x82\x85
+<CJK_UNIFIED_IDEOGRAPH-32086> \xF0\xB2\x82\x86
+<CJK_UNIFIED_IDEOGRAPH-32087> \xF0\xB2\x82\x87
+<CJK_UNIFIED_IDEOGRAPH-32088> \xF0\xB2\x82\x88
+<CJK_UNIFIED_IDEOGRAPH-32089> \xF0\xB2\x82\x89
+<CJK_UNIFIED_IDEOGRAPH-3208A> \xF0\xB2\x82\x8A
+<CJK_UNIFIED_IDEOGRAPH-3208B> \xF0\xB2\x82\x8B
+<CJK_UNIFIED_IDEOGRAPH-3208C> \xF0\xB2\x82\x8C
+<CJK_UNIFIED_IDEOGRAPH-3208D> \xF0\xB2\x82\x8D
+<CJK_UNIFIED_IDEOGRAPH-3208E> \xF0\xB2\x82\x8E
+<CJK_UNIFIED_IDEOGRAPH-3208F> \xF0\xB2\x82\x8F
+<CJK_UNIFIED_IDEOGRAPH-32090> \xF0\xB2\x82\x90
+<CJK_UNIFIED_IDEOGRAPH-32091> \xF0\xB2\x82\x91
+<CJK_UNIFIED_IDEOGRAPH-32092> \xF0\xB2\x82\x92
+<CJK_UNIFIED_IDEOGRAPH-32093> \xF0\xB2\x82\x93
+<CJK_UNIFIED_IDEOGRAPH-32094> \xF0\xB2\x82\x94
+<CJK_UNIFIED_IDEOGRAPH-32095> \xF0\xB2\x82\x95
+<CJK_UNIFIED_IDEOGRAPH-32096> \xF0\xB2\x82\x96
+<CJK_UNIFIED_IDEOGRAPH-32097> \xF0\xB2\x82\x97
+<CJK_UNIFIED_IDEOGRAPH-32098> \xF0\xB2\x82\x98
+<CJK_UNIFIED_IDEOGRAPH-32099> \xF0\xB2\x82\x99
+<CJK_UNIFIED_IDEOGRAPH-3209A> \xF0\xB2\x82\x9A
+<CJK_UNIFIED_IDEOGRAPH-3209B> \xF0\xB2\x82\x9B
+<CJK_UNIFIED_IDEOGRAPH-3209C> \xF0\xB2\x82\x9C
+<CJK_UNIFIED_IDEOGRAPH-3209D> \xF0\xB2\x82\x9D
+<CJK_UNIFIED_IDEOGRAPH-3209E> \xF0\xB2\x82\x9E
+<CJK_UNIFIED_IDEOGRAPH-3209F> \xF0\xB2\x82\x9F
+<CJK_UNIFIED_IDEOGRAPH-320A0> \xF0\xB2\x82\xA0
+<CJK_UNIFIED_IDEOGRAPH-320A1> \xF0\xB2\x82\xA1
+<CJK_UNIFIED_IDEOGRAPH-320A2> \xF0\xB2\x82\xA2
+<CJK_UNIFIED_IDEOGRAPH-320A3> \xF0\xB2\x82\xA3
+<CJK_UNIFIED_IDEOGRAPH-320A4> \xF0\xB2\x82\xA4
+<CJK_UNIFIED_IDEOGRAPH-320A5> \xF0\xB2\x82\xA5
+<CJK_UNIFIED_IDEOGRAPH-320A6> \xF0\xB2\x82\xA6
+<CJK_UNIFIED_IDEOGRAPH-320A7> \xF0\xB2\x82\xA7
+<CJK_UNIFIED_IDEOGRAPH-320A8> \xF0\xB2\x82\xA8
+<CJK_UNIFIED_IDEOGRAPH-320A9> \xF0\xB2\x82\xA9
+<CJK_UNIFIED_IDEOGRAPH-320AA> \xF0\xB2\x82\xAA
+<CJK_UNIFIED_IDEOGRAPH-320AB> \xF0\xB2\x82\xAB
+<CJK_UNIFIED_IDEOGRAPH-320AC> \xF0\xB2\x82\xAC
+<CJK_UNIFIED_IDEOGRAPH-320AD> \xF0\xB2\x82\xAD
+<CJK_UNIFIED_IDEOGRAPH-320AE> \xF0\xB2\x82\xAE
+<CJK_UNIFIED_IDEOGRAPH-320AF> \xF0\xB2\x82\xAF
+<CJK_UNIFIED_IDEOGRAPH-320B0> \xF0\xB2\x82\xB0
+<CJK_UNIFIED_IDEOGRAPH-320B1> \xF0\xB2\x82\xB1
+<CJK_UNIFIED_IDEOGRAPH-320B2> \xF0\xB2\x82\xB2
+<CJK_UNIFIED_IDEOGRAPH-320B3> \xF0\xB2\x82\xB3
+<CJK_UNIFIED_IDEOGRAPH-320B4> \xF0\xB2\x82\xB4
+<CJK_UNIFIED_IDEOGRAPH-320B5> \xF0\xB2\x82\xB5
+<CJK_UNIFIED_IDEOGRAPH-320B6> \xF0\xB2\x82\xB6
+<CJK_UNIFIED_IDEOGRAPH-320B7> \xF0\xB2\x82\xB7
+<CJK_UNIFIED_IDEOGRAPH-320B8> \xF0\xB2\x82\xB8
+<CJK_UNIFIED_IDEOGRAPH-320B9> \xF0\xB2\x82\xB9
+<CJK_UNIFIED_IDEOGRAPH-320BA> \xF0\xB2\x82\xBA
+<CJK_UNIFIED_IDEOGRAPH-320BB> \xF0\xB2\x82\xBB
+<CJK_UNIFIED_IDEOGRAPH-320BC> \xF0\xB2\x82\xBC
+<CJK_UNIFIED_IDEOGRAPH-320BD> \xF0\xB2\x82\xBD
+<CJK_UNIFIED_IDEOGRAPH-320BE> \xF0\xB2\x82\xBE
+<CJK_UNIFIED_IDEOGRAPH-320BF> \xF0\xB2\x82\xBF
+<CJK_UNIFIED_IDEOGRAPH-320C0> \xF0\xB2\x83\x80
+<CJK_UNIFIED_IDEOGRAPH-320C1> \xF0\xB2\x83\x81
+<CJK_UNIFIED_IDEOGRAPH-320C2> \xF0\xB2\x83\x82
+<CJK_UNIFIED_IDEOGRAPH-320C3> \xF0\xB2\x83\x83
+<CJK_UNIFIED_IDEOGRAPH-320C4> \xF0\xB2\x83\x84
+<CJK_UNIFIED_IDEOGRAPH-320C5> \xF0\xB2\x83\x85
+<CJK_UNIFIED_IDEOGRAPH-320C6> \xF0\xB2\x83\x86
+<CJK_UNIFIED_IDEOGRAPH-320C7> \xF0\xB2\x83\x87
+<CJK_UNIFIED_IDEOGRAPH-320C8> \xF0\xB2\x83\x88
+<CJK_UNIFIED_IDEOGRAPH-320C9> \xF0\xB2\x83\x89
+<CJK_UNIFIED_IDEOGRAPH-320CA> \xF0\xB2\x83\x8A
+<CJK_UNIFIED_IDEOGRAPH-320CB> \xF0\xB2\x83\x8B
+<CJK_UNIFIED_IDEOGRAPH-320CC> \xF0\xB2\x83\x8C
+<CJK_UNIFIED_IDEOGRAPH-320CD> \xF0\xB2\x83\x8D
+<CJK_UNIFIED_IDEOGRAPH-320CE> \xF0\xB2\x83\x8E
+<CJK_UNIFIED_IDEOGRAPH-320CF> \xF0\xB2\x83\x8F
+<CJK_UNIFIED_IDEOGRAPH-320D0> \xF0\xB2\x83\x90
+<CJK_UNIFIED_IDEOGRAPH-320D1> \xF0\xB2\x83\x91
+<CJK_UNIFIED_IDEOGRAPH-320D2> \xF0\xB2\x83\x92
+<CJK_UNIFIED_IDEOGRAPH-320D3> \xF0\xB2\x83\x93
+<CJK_UNIFIED_IDEOGRAPH-320D4> \xF0\xB2\x83\x94
+<CJK_UNIFIED_IDEOGRAPH-320D5> \xF0\xB2\x83\x95
+<CJK_UNIFIED_IDEOGRAPH-320D6> \xF0\xB2\x83\x96
+<CJK_UNIFIED_IDEOGRAPH-320D7> \xF0\xB2\x83\x97
+<CJK_UNIFIED_IDEOGRAPH-320D8> \xF0\xB2\x83\x98
+<CJK_UNIFIED_IDEOGRAPH-320D9> \xF0\xB2\x83\x99
+<CJK_UNIFIED_IDEOGRAPH-320DA> \xF0\xB2\x83\x9A
+<CJK_UNIFIED_IDEOGRAPH-320DB> \xF0\xB2\x83\x9B
+<CJK_UNIFIED_IDEOGRAPH-320DC> \xF0\xB2\x83\x9C
+<CJK_UNIFIED_IDEOGRAPH-320DD> \xF0\xB2\x83\x9D
+<CJK_UNIFIED_IDEOGRAPH-320DE> \xF0\xB2\x83\x9E
+<CJK_UNIFIED_IDEOGRAPH-320DF> \xF0\xB2\x83\x9F
+<CJK_UNIFIED_IDEOGRAPH-320E0> \xF0\xB2\x83\xA0
+<CJK_UNIFIED_IDEOGRAPH-320E1> \xF0\xB2\x83\xA1
+<CJK_UNIFIED_IDEOGRAPH-320E2> \xF0\xB2\x83\xA2
+<CJK_UNIFIED_IDEOGRAPH-320E3> \xF0\xB2\x83\xA3
+<CJK_UNIFIED_IDEOGRAPH-320E4> \xF0\xB2\x83\xA4
+<CJK_UNIFIED_IDEOGRAPH-320E5> \xF0\xB2\x83\xA5
+<CJK_UNIFIED_IDEOGRAPH-320E6> \xF0\xB2\x83\xA6
+<CJK_UNIFIED_IDEOGRAPH-320E7> \xF0\xB2\x83\xA7
+<CJK_UNIFIED_IDEOGRAPH-320E8> \xF0\xB2\x83\xA8
+<CJK_UNIFIED_IDEOGRAPH-320E9> \xF0\xB2\x83\xA9
+<CJK_UNIFIED_IDEOGRAPH-320EA> \xF0\xB2\x83\xAA
+<CJK_UNIFIED_IDEOGRAPH-320EB> \xF0\xB2\x83\xAB
+<CJK_UNIFIED_IDEOGRAPH-320EC> \xF0\xB2\x83\xAC
+<CJK_UNIFIED_IDEOGRAPH-320ED> \xF0\xB2\x83\xAD
+<CJK_UNIFIED_IDEOGRAPH-320EE> \xF0\xB2\x83\xAE
+<CJK_UNIFIED_IDEOGRAPH-320EF> \xF0\xB2\x83\xAF
+<CJK_UNIFIED_IDEOGRAPH-320F0> \xF0\xB2\x83\xB0
+<CJK_UNIFIED_IDEOGRAPH-320F1> \xF0\xB2\x83\xB1
+<CJK_UNIFIED_IDEOGRAPH-320F2> \xF0\xB2\x83\xB2
+<CJK_UNIFIED_IDEOGRAPH-320F3> \xF0\xB2\x83\xB3
+<CJK_UNIFIED_IDEOGRAPH-320F4> \xF0\xB2\x83\xB4
+<CJK_UNIFIED_IDEOGRAPH-320F5> \xF0\xB2\x83\xB5
+<CJK_UNIFIED_IDEOGRAPH-320F6> \xF0\xB2\x83\xB6
+<CJK_UNIFIED_IDEOGRAPH-320F7> \xF0\xB2\x83\xB7
+<CJK_UNIFIED_IDEOGRAPH-320F8> \xF0\xB2\x83\xB8
+<CJK_UNIFIED_IDEOGRAPH-320F9> \xF0\xB2\x83\xB9
+<CJK_UNIFIED_IDEOGRAPH-320FA> \xF0\xB2\x83\xBA
+<CJK_UNIFIED_IDEOGRAPH-320FB> \xF0\xB2\x83\xBB
+<CJK_UNIFIED_IDEOGRAPH-320FC> \xF0\xB2\x83\xBC
+<CJK_UNIFIED_IDEOGRAPH-320FD> \xF0\xB2\x83\xBD
+<CJK_UNIFIED_IDEOGRAPH-320FE> \xF0\xB2\x83\xBE
+<CJK_UNIFIED_IDEOGRAPH-320FF> \xF0\xB2\x83\xBF
+<CJK_UNIFIED_IDEOGRAPH-32100> \xF0\xB2\x84\x80
+<CJK_UNIFIED_IDEOGRAPH-32101> \xF0\xB2\x84\x81
+<CJK_UNIFIED_IDEOGRAPH-32102> \xF0\xB2\x84\x82
+<CJK_UNIFIED_IDEOGRAPH-32103> \xF0\xB2\x84\x83
+<CJK_UNIFIED_IDEOGRAPH-32104> \xF0\xB2\x84\x84
+<CJK_UNIFIED_IDEOGRAPH-32105> \xF0\xB2\x84\x85
+<CJK_UNIFIED_IDEOGRAPH-32106> \xF0\xB2\x84\x86
+<CJK_UNIFIED_IDEOGRAPH-32107> \xF0\xB2\x84\x87
+<CJK_UNIFIED_IDEOGRAPH-32108> \xF0\xB2\x84\x88
+<CJK_UNIFIED_IDEOGRAPH-32109> \xF0\xB2\x84\x89
+<CJK_UNIFIED_IDEOGRAPH-3210A> \xF0\xB2\x84\x8A
+<CJK_UNIFIED_IDEOGRAPH-3210B> \xF0\xB2\x84\x8B
+<CJK_UNIFIED_IDEOGRAPH-3210C> \xF0\xB2\x84\x8C
+<CJK_UNIFIED_IDEOGRAPH-3210D> \xF0\xB2\x84\x8D
+<CJK_UNIFIED_IDEOGRAPH-3210E> \xF0\xB2\x84\x8E
+<CJK_UNIFIED_IDEOGRAPH-3210F> \xF0\xB2\x84\x8F
+<CJK_UNIFIED_IDEOGRAPH-32110> \xF0\xB2\x84\x90
+<CJK_UNIFIED_IDEOGRAPH-32111> \xF0\xB2\x84\x91
+<CJK_UNIFIED_IDEOGRAPH-32112> \xF0\xB2\x84\x92
+<CJK_UNIFIED_IDEOGRAPH-32113> \xF0\xB2\x84\x93
+<CJK_UNIFIED_IDEOGRAPH-32114> \xF0\xB2\x84\x94
+<CJK_UNIFIED_IDEOGRAPH-32115> \xF0\xB2\x84\x95
+<CJK_UNIFIED_IDEOGRAPH-32116> \xF0\xB2\x84\x96
+<CJK_UNIFIED_IDEOGRAPH-32117> \xF0\xB2\x84\x97
+<CJK_UNIFIED_IDEOGRAPH-32118> \xF0\xB2\x84\x98
+<CJK_UNIFIED_IDEOGRAPH-32119> \xF0\xB2\x84\x99
+<CJK_UNIFIED_IDEOGRAPH-3211A> \xF0\xB2\x84\x9A
+<CJK_UNIFIED_IDEOGRAPH-3211B> \xF0\xB2\x84\x9B
+<CJK_UNIFIED_IDEOGRAPH-3211C> \xF0\xB2\x84\x9C
+<CJK_UNIFIED_IDEOGRAPH-3211D> \xF0\xB2\x84\x9D
+<CJK_UNIFIED_IDEOGRAPH-3211E> \xF0\xB2\x84\x9E
+<CJK_UNIFIED_IDEOGRAPH-3211F> \xF0\xB2\x84\x9F
+<CJK_UNIFIED_IDEOGRAPH-32120> \xF0\xB2\x84\xA0
+<CJK_UNIFIED_IDEOGRAPH-32121> \xF0\xB2\x84\xA1
+<CJK_UNIFIED_IDEOGRAPH-32122> \xF0\xB2\x84\xA2
+<CJK_UNIFIED_IDEOGRAPH-32123> \xF0\xB2\x84\xA3
+<CJK_UNIFIED_IDEOGRAPH-32124> \xF0\xB2\x84\xA4
+<CJK_UNIFIED_IDEOGRAPH-32125> \xF0\xB2\x84\xA5
+<CJK_UNIFIED_IDEOGRAPH-32126> \xF0\xB2\x84\xA6
+<CJK_UNIFIED_IDEOGRAPH-32127> \xF0\xB2\x84\xA7
+<CJK_UNIFIED_IDEOGRAPH-32128> \xF0\xB2\x84\xA8
+<CJK_UNIFIED_IDEOGRAPH-32129> \xF0\xB2\x84\xA9
+<CJK_UNIFIED_IDEOGRAPH-3212A> \xF0\xB2\x84\xAA
+<CJK_UNIFIED_IDEOGRAPH-3212B> \xF0\xB2\x84\xAB
+<CJK_UNIFIED_IDEOGRAPH-3212C> \xF0\xB2\x84\xAC
+<CJK_UNIFIED_IDEOGRAPH-3212D> \xF0\xB2\x84\xAD
+<CJK_UNIFIED_IDEOGRAPH-3212E> \xF0\xB2\x84\xAE
+<CJK_UNIFIED_IDEOGRAPH-3212F> \xF0\xB2\x84\xAF
+<CJK_UNIFIED_IDEOGRAPH-32130> \xF0\xB2\x84\xB0
+<CJK_UNIFIED_IDEOGRAPH-32131> \xF0\xB2\x84\xB1
+<CJK_UNIFIED_IDEOGRAPH-32132> \xF0\xB2\x84\xB2
+<CJK_UNIFIED_IDEOGRAPH-32133> \xF0\xB2\x84\xB3
+<CJK_UNIFIED_IDEOGRAPH-32134> \xF0\xB2\x84\xB4
+<CJK_UNIFIED_IDEOGRAPH-32135> \xF0\xB2\x84\xB5
+<CJK_UNIFIED_IDEOGRAPH-32136> \xF0\xB2\x84\xB6
+<CJK_UNIFIED_IDEOGRAPH-32137> \xF0\xB2\x84\xB7
+<CJK_UNIFIED_IDEOGRAPH-32138> \xF0\xB2\x84\xB8
+<CJK_UNIFIED_IDEOGRAPH-32139> \xF0\xB2\x84\xB9
+<CJK_UNIFIED_IDEOGRAPH-3213A> \xF0\xB2\x84\xBA
+<CJK_UNIFIED_IDEOGRAPH-3213B> \xF0\xB2\x84\xBB
+<CJK_UNIFIED_IDEOGRAPH-3213C> \xF0\xB2\x84\xBC
+<CJK_UNIFIED_IDEOGRAPH-3213D> \xF0\xB2\x84\xBD
+<CJK_UNIFIED_IDEOGRAPH-3213E> \xF0\xB2\x84\xBE
+<CJK_UNIFIED_IDEOGRAPH-3213F> \xF0\xB2\x84\xBF
+<CJK_UNIFIED_IDEOGRAPH-32140> \xF0\xB2\x85\x80
+<CJK_UNIFIED_IDEOGRAPH-32141> \xF0\xB2\x85\x81
+<CJK_UNIFIED_IDEOGRAPH-32142> \xF0\xB2\x85\x82
+<CJK_UNIFIED_IDEOGRAPH-32143> \xF0\xB2\x85\x83
+<CJK_UNIFIED_IDEOGRAPH-32144> \xF0\xB2\x85\x84
+<CJK_UNIFIED_IDEOGRAPH-32145> \xF0\xB2\x85\x85
+<CJK_UNIFIED_IDEOGRAPH-32146> \xF0\xB2\x85\x86
+<CJK_UNIFIED_IDEOGRAPH-32147> \xF0\xB2\x85\x87
+<CJK_UNIFIED_IDEOGRAPH-32148> \xF0\xB2\x85\x88
+<CJK_UNIFIED_IDEOGRAPH-32149> \xF0\xB2\x85\x89
+<CJK_UNIFIED_IDEOGRAPH-3214A> \xF0\xB2\x85\x8A
+<CJK_UNIFIED_IDEOGRAPH-3214B> \xF0\xB2\x85\x8B
+<CJK_UNIFIED_IDEOGRAPH-3214C> \xF0\xB2\x85\x8C
+<CJK_UNIFIED_IDEOGRAPH-3214D> \xF0\xB2\x85\x8D
+<CJK_UNIFIED_IDEOGRAPH-3214E> \xF0\xB2\x85\x8E
+<CJK_UNIFIED_IDEOGRAPH-3214F> \xF0\xB2\x85\x8F
+<CJK_UNIFIED_IDEOGRAPH-32150> \xF0\xB2\x85\x90
+<CJK_UNIFIED_IDEOGRAPH-32151> \xF0\xB2\x85\x91
+<CJK_UNIFIED_IDEOGRAPH-32152> \xF0\xB2\x85\x92
+<CJK_UNIFIED_IDEOGRAPH-32153> \xF0\xB2\x85\x93
+<CJK_UNIFIED_IDEOGRAPH-32154> \xF0\xB2\x85\x94
+<CJK_UNIFIED_IDEOGRAPH-32155> \xF0\xB2\x85\x95
+<CJK_UNIFIED_IDEOGRAPH-32156> \xF0\xB2\x85\x96
+<CJK_UNIFIED_IDEOGRAPH-32157> \xF0\xB2\x85\x97
+<CJK_UNIFIED_IDEOGRAPH-32158> \xF0\xB2\x85\x98
+<CJK_UNIFIED_IDEOGRAPH-32159> \xF0\xB2\x85\x99
+<CJK_UNIFIED_IDEOGRAPH-3215A> \xF0\xB2\x85\x9A
+<CJK_UNIFIED_IDEOGRAPH-3215B> \xF0\xB2\x85\x9B
+<CJK_UNIFIED_IDEOGRAPH-3215C> \xF0\xB2\x85\x9C
+<CJK_UNIFIED_IDEOGRAPH-3215D> \xF0\xB2\x85\x9D
+<CJK_UNIFIED_IDEOGRAPH-3215E> \xF0\xB2\x85\x9E
+<CJK_UNIFIED_IDEOGRAPH-3215F> \xF0\xB2\x85\x9F
+<CJK_UNIFIED_IDEOGRAPH-32160> \xF0\xB2\x85\xA0
+<CJK_UNIFIED_IDEOGRAPH-32161> \xF0\xB2\x85\xA1
+<CJK_UNIFIED_IDEOGRAPH-32162> \xF0\xB2\x85\xA2
+<CJK_UNIFIED_IDEOGRAPH-32163> \xF0\xB2\x85\xA3
+<CJK_UNIFIED_IDEOGRAPH-32164> \xF0\xB2\x85\xA4
+<CJK_UNIFIED_IDEOGRAPH-32165> \xF0\xB2\x85\xA5
+<CJK_UNIFIED_IDEOGRAPH-32166> \xF0\xB2\x85\xA6
+<CJK_UNIFIED_IDEOGRAPH-32167> \xF0\xB2\x85\xA7
+<CJK_UNIFIED_IDEOGRAPH-32168> \xF0\xB2\x85\xA8
+<CJK_UNIFIED_IDEOGRAPH-32169> \xF0\xB2\x85\xA9
+<CJK_UNIFIED_IDEOGRAPH-3216A> \xF0\xB2\x85\xAA
+<CJK_UNIFIED_IDEOGRAPH-3216B> \xF0\xB2\x85\xAB
+<CJK_UNIFIED_IDEOGRAPH-3216C> \xF0\xB2\x85\xAC
+<CJK_UNIFIED_IDEOGRAPH-3216D> \xF0\xB2\x85\xAD
+<CJK_UNIFIED_IDEOGRAPH-3216E> \xF0\xB2\x85\xAE
+<CJK_UNIFIED_IDEOGRAPH-3216F> \xF0\xB2\x85\xAF
+<CJK_UNIFIED_IDEOGRAPH-32170> \xF0\xB2\x85\xB0
+<CJK_UNIFIED_IDEOGRAPH-32171> \xF0\xB2\x85\xB1
+<CJK_UNIFIED_IDEOGRAPH-32172> \xF0\xB2\x85\xB2
+<CJK_UNIFIED_IDEOGRAPH-32173> \xF0\xB2\x85\xB3
+<CJK_UNIFIED_IDEOGRAPH-32174> \xF0\xB2\x85\xB4
+<CJK_UNIFIED_IDEOGRAPH-32175> \xF0\xB2\x85\xB5
+<CJK_UNIFIED_IDEOGRAPH-32176> \xF0\xB2\x85\xB6
+<CJK_UNIFIED_IDEOGRAPH-32177> \xF0\xB2\x85\xB7
+<CJK_UNIFIED_IDEOGRAPH-32178> \xF0\xB2\x85\xB8
+<CJK_UNIFIED_IDEOGRAPH-32179> \xF0\xB2\x85\xB9
+<CJK_UNIFIED_IDEOGRAPH-3217A> \xF0\xB2\x85\xBA
+<CJK_UNIFIED_IDEOGRAPH-3217B> \xF0\xB2\x85\xBB
+<CJK_UNIFIED_IDEOGRAPH-3217C> \xF0\xB2\x85\xBC
+<CJK_UNIFIED_IDEOGRAPH-3217D> \xF0\xB2\x85\xBD
+<CJK_UNIFIED_IDEOGRAPH-3217E> \xF0\xB2\x85\xBE
+<CJK_UNIFIED_IDEOGRAPH-3217F> \xF0\xB2\x85\xBF
+<CJK_UNIFIED_IDEOGRAPH-32180> \xF0\xB2\x86\x80
+<CJK_UNIFIED_IDEOGRAPH-32181> \xF0\xB2\x86\x81
+<CJK_UNIFIED_IDEOGRAPH-32182> \xF0\xB2\x86\x82
+<CJK_UNIFIED_IDEOGRAPH-32183> \xF0\xB2\x86\x83
+<CJK_UNIFIED_IDEOGRAPH-32184> \xF0\xB2\x86\x84
+<CJK_UNIFIED_IDEOGRAPH-32185> \xF0\xB2\x86\x85
+<CJK_UNIFIED_IDEOGRAPH-32186> \xF0\xB2\x86\x86
+<CJK_UNIFIED_IDEOGRAPH-32187> \xF0\xB2\x86\x87
+<CJK_UNIFIED_IDEOGRAPH-32188> \xF0\xB2\x86\x88
+<CJK_UNIFIED_IDEOGRAPH-32189> \xF0\xB2\x86\x89
+<CJK_UNIFIED_IDEOGRAPH-3218A> \xF0\xB2\x86\x8A
+<CJK_UNIFIED_IDEOGRAPH-3218B> \xF0\xB2\x86\x8B
+<CJK_UNIFIED_IDEOGRAPH-3218C> \xF0\xB2\x86\x8C
+<CJK_UNIFIED_IDEOGRAPH-3218D> \xF0\xB2\x86\x8D
+<CJK_UNIFIED_IDEOGRAPH-3218E> \xF0\xB2\x86\x8E
+<CJK_UNIFIED_IDEOGRAPH-3218F> \xF0\xB2\x86\x8F
+<CJK_UNIFIED_IDEOGRAPH-32190> \xF0\xB2\x86\x90
+<CJK_UNIFIED_IDEOGRAPH-32191> \xF0\xB2\x86\x91
+<CJK_UNIFIED_IDEOGRAPH-32192> \xF0\xB2\x86\x92
+<CJK_UNIFIED_IDEOGRAPH-32193> \xF0\xB2\x86\x93
+<CJK_UNIFIED_IDEOGRAPH-32194> \xF0\xB2\x86\x94
+<CJK_UNIFIED_IDEOGRAPH-32195> \xF0\xB2\x86\x95
+<CJK_UNIFIED_IDEOGRAPH-32196> \xF0\xB2\x86\x96
+<CJK_UNIFIED_IDEOGRAPH-32197> \xF0\xB2\x86\x97
+<CJK_UNIFIED_IDEOGRAPH-32198> \xF0\xB2\x86\x98
+<CJK_UNIFIED_IDEOGRAPH-32199> \xF0\xB2\x86\x99
+<CJK_UNIFIED_IDEOGRAPH-3219A> \xF0\xB2\x86\x9A
+<CJK_UNIFIED_IDEOGRAPH-3219B> \xF0\xB2\x86\x9B
+<CJK_UNIFIED_IDEOGRAPH-3219C> \xF0\xB2\x86\x9C
+<CJK_UNIFIED_IDEOGRAPH-3219D> \xF0\xB2\x86\x9D
+<CJK_UNIFIED_IDEOGRAPH-3219E> \xF0\xB2\x86\x9E
+<CJK_UNIFIED_IDEOGRAPH-3219F> \xF0\xB2\x86\x9F
+<CJK_UNIFIED_IDEOGRAPH-321A0> \xF0\xB2\x86\xA0
+<CJK_UNIFIED_IDEOGRAPH-321A1> \xF0\xB2\x86\xA1
+<CJK_UNIFIED_IDEOGRAPH-321A2> \xF0\xB2\x86\xA2
+<CJK_UNIFIED_IDEOGRAPH-321A3> \xF0\xB2\x86\xA3
+<CJK_UNIFIED_IDEOGRAPH-321A4> \xF0\xB2\x86\xA4
+<CJK_UNIFIED_IDEOGRAPH-321A5> \xF0\xB2\x86\xA5
+<CJK_UNIFIED_IDEOGRAPH-321A6> \xF0\xB2\x86\xA6
+<CJK_UNIFIED_IDEOGRAPH-321A7> \xF0\xB2\x86\xA7
+<CJK_UNIFIED_IDEOGRAPH-321A8> \xF0\xB2\x86\xA8
+<CJK_UNIFIED_IDEOGRAPH-321A9> \xF0\xB2\x86\xA9
+<CJK_UNIFIED_IDEOGRAPH-321AA> \xF0\xB2\x86\xAA
+<CJK_UNIFIED_IDEOGRAPH-321AB> \xF0\xB2\x86\xAB
+<CJK_UNIFIED_IDEOGRAPH-321AC> \xF0\xB2\x86\xAC
+<CJK_UNIFIED_IDEOGRAPH-321AD> \xF0\xB2\x86\xAD
+<CJK_UNIFIED_IDEOGRAPH-321AE> \xF0\xB2\x86\xAE
+<CJK_UNIFIED_IDEOGRAPH-321AF> \xF0\xB2\x86\xAF
+<CJK_UNIFIED_IDEOGRAPH-321B0> \xF0\xB2\x86\xB0
+<CJK_UNIFIED_IDEOGRAPH-321B1> \xF0\xB2\x86\xB1
+<CJK_UNIFIED_IDEOGRAPH-321B2> \xF0\xB2\x86\xB2
+<CJK_UNIFIED_IDEOGRAPH-321B3> \xF0\xB2\x86\xB3
+<CJK_UNIFIED_IDEOGRAPH-321B4> \xF0\xB2\x86\xB4
+<CJK_UNIFIED_IDEOGRAPH-321B5> \xF0\xB2\x86\xB5
+<CJK_UNIFIED_IDEOGRAPH-321B6> \xF0\xB2\x86\xB6
+<CJK_UNIFIED_IDEOGRAPH-321B7> \xF0\xB2\x86\xB7
+<CJK_UNIFIED_IDEOGRAPH-321B8> \xF0\xB2\x86\xB8
+<CJK_UNIFIED_IDEOGRAPH-321B9> \xF0\xB2\x86\xB9
+<CJK_UNIFIED_IDEOGRAPH-321BA> \xF0\xB2\x86\xBA
+<CJK_UNIFIED_IDEOGRAPH-321BB> \xF0\xB2\x86\xBB
+<CJK_UNIFIED_IDEOGRAPH-321BC> \xF0\xB2\x86\xBC
+<CJK_UNIFIED_IDEOGRAPH-321BD> \xF0\xB2\x86\xBD
+<CJK_UNIFIED_IDEOGRAPH-321BE> \xF0\xB2\x86\xBE
+<CJK_UNIFIED_IDEOGRAPH-321BF> \xF0\xB2\x86\xBF
+<CJK_UNIFIED_IDEOGRAPH-321C0> \xF0\xB2\x87\x80
+<CJK_UNIFIED_IDEOGRAPH-321C1> \xF0\xB2\x87\x81
+<CJK_UNIFIED_IDEOGRAPH-321C2> \xF0\xB2\x87\x82
+<CJK_UNIFIED_IDEOGRAPH-321C3> \xF0\xB2\x87\x83
+<CJK_UNIFIED_IDEOGRAPH-321C4> \xF0\xB2\x87\x84
+<CJK_UNIFIED_IDEOGRAPH-321C5> \xF0\xB2\x87\x85
+<CJK_UNIFIED_IDEOGRAPH-321C6> \xF0\xB2\x87\x86
+<CJK_UNIFIED_IDEOGRAPH-321C7> \xF0\xB2\x87\x87
+<CJK_UNIFIED_IDEOGRAPH-321C8> \xF0\xB2\x87\x88
+<CJK_UNIFIED_IDEOGRAPH-321C9> \xF0\xB2\x87\x89
+<CJK_UNIFIED_IDEOGRAPH-321CA> \xF0\xB2\x87\x8A
+<CJK_UNIFIED_IDEOGRAPH-321CB> \xF0\xB2\x87\x8B
+<CJK_UNIFIED_IDEOGRAPH-321CC> \xF0\xB2\x87\x8C
+<CJK_UNIFIED_IDEOGRAPH-321CD> \xF0\xB2\x87\x8D
+<CJK_UNIFIED_IDEOGRAPH-321CE> \xF0\xB2\x87\x8E
+<CJK_UNIFIED_IDEOGRAPH-321CF> \xF0\xB2\x87\x8F
+<CJK_UNIFIED_IDEOGRAPH-321D0> \xF0\xB2\x87\x90
+<CJK_UNIFIED_IDEOGRAPH-321D1> \xF0\xB2\x87\x91
+<CJK_UNIFIED_IDEOGRAPH-321D2> \xF0\xB2\x87\x92
+<CJK_UNIFIED_IDEOGRAPH-321D3> \xF0\xB2\x87\x93
+<CJK_UNIFIED_IDEOGRAPH-321D4> \xF0\xB2\x87\x94
+<CJK_UNIFIED_IDEOGRAPH-321D5> \xF0\xB2\x87\x95
+<CJK_UNIFIED_IDEOGRAPH-321D6> \xF0\xB2\x87\x96
+<CJK_UNIFIED_IDEOGRAPH-321D7> \xF0\xB2\x87\x97
+<CJK_UNIFIED_IDEOGRAPH-321D8> \xF0\xB2\x87\x98
+<CJK_UNIFIED_IDEOGRAPH-321D9> \xF0\xB2\x87\x99
+<CJK_UNIFIED_IDEOGRAPH-321DA> \xF0\xB2\x87\x9A
+<CJK_UNIFIED_IDEOGRAPH-321DB> \xF0\xB2\x87\x9B
+<CJK_UNIFIED_IDEOGRAPH-321DC> \xF0\xB2\x87\x9C
+<CJK_UNIFIED_IDEOGRAPH-321DD> \xF0\xB2\x87\x9D
+<CJK_UNIFIED_IDEOGRAPH-321DE> \xF0\xB2\x87\x9E
+<CJK_UNIFIED_IDEOGRAPH-321DF> \xF0\xB2\x87\x9F
+<CJK_UNIFIED_IDEOGRAPH-321E0> \xF0\xB2\x87\xA0
+<CJK_UNIFIED_IDEOGRAPH-321E1> \xF0\xB2\x87\xA1
+<CJK_UNIFIED_IDEOGRAPH-321E2> \xF0\xB2\x87\xA2
+<CJK_UNIFIED_IDEOGRAPH-321E3> \xF0\xB2\x87\xA3
+<CJK_UNIFIED_IDEOGRAPH-321E4> \xF0\xB2\x87\xA4
+<CJK_UNIFIED_IDEOGRAPH-321E5> \xF0\xB2\x87\xA5
+<CJK_UNIFIED_IDEOGRAPH-321E6> \xF0\xB2\x87\xA6
+<CJK_UNIFIED_IDEOGRAPH-321E7> \xF0\xB2\x87\xA7
+<CJK_UNIFIED_IDEOGRAPH-321E8> \xF0\xB2\x87\xA8
+<CJK_UNIFIED_IDEOGRAPH-321E9> \xF0\xB2\x87\xA9
+<CJK_UNIFIED_IDEOGRAPH-321EA> \xF0\xB2\x87\xAA
+<CJK_UNIFIED_IDEOGRAPH-321EB> \xF0\xB2\x87\xAB
+<CJK_UNIFIED_IDEOGRAPH-321EC> \xF0\xB2\x87\xAC
+<CJK_UNIFIED_IDEOGRAPH-321ED> \xF0\xB2\x87\xAD
+<CJK_UNIFIED_IDEOGRAPH-321EE> \xF0\xB2\x87\xAE
+<CJK_UNIFIED_IDEOGRAPH-321EF> \xF0\xB2\x87\xAF
+<CJK_UNIFIED_IDEOGRAPH-321F0> \xF0\xB2\x87\xB0
+<CJK_UNIFIED_IDEOGRAPH-321F1> \xF0\xB2\x87\xB1
+<CJK_UNIFIED_IDEOGRAPH-321F2> \xF0\xB2\x87\xB2
+<CJK_UNIFIED_IDEOGRAPH-321F3> \xF0\xB2\x87\xB3
+<CJK_UNIFIED_IDEOGRAPH-321F4> \xF0\xB2\x87\xB4
+<CJK_UNIFIED_IDEOGRAPH-321F5> \xF0\xB2\x87\xB5
+<CJK_UNIFIED_IDEOGRAPH-321F6> \xF0\xB2\x87\xB6
+<CJK_UNIFIED_IDEOGRAPH-321F7> \xF0\xB2\x87\xB7
+<CJK_UNIFIED_IDEOGRAPH-321F8> \xF0\xB2\x87\xB8
+<CJK_UNIFIED_IDEOGRAPH-321F9> \xF0\xB2\x87\xB9
+<CJK_UNIFIED_IDEOGRAPH-321FA> \xF0\xB2\x87\xBA
+<CJK_UNIFIED_IDEOGRAPH-321FB> \xF0\xB2\x87\xBB
+<CJK_UNIFIED_IDEOGRAPH-321FC> \xF0\xB2\x87\xBC
+<CJK_UNIFIED_IDEOGRAPH-321FD> \xF0\xB2\x87\xBD
+<CJK_UNIFIED_IDEOGRAPH-321FE> \xF0\xB2\x87\xBE
+<CJK_UNIFIED_IDEOGRAPH-321FF> \xF0\xB2\x87\xBF
+<CJK_UNIFIED_IDEOGRAPH-32200> \xF0\xB2\x88\x80
+<CJK_UNIFIED_IDEOGRAPH-32201> \xF0\xB2\x88\x81
+<CJK_UNIFIED_IDEOGRAPH-32202> \xF0\xB2\x88\x82
+<CJK_UNIFIED_IDEOGRAPH-32203> \xF0\xB2\x88\x83
+<CJK_UNIFIED_IDEOGRAPH-32204> \xF0\xB2\x88\x84
+<CJK_UNIFIED_IDEOGRAPH-32205> \xF0\xB2\x88\x85
+<CJK_UNIFIED_IDEOGRAPH-32206> \xF0\xB2\x88\x86
+<CJK_UNIFIED_IDEOGRAPH-32207> \xF0\xB2\x88\x87
+<CJK_UNIFIED_IDEOGRAPH-32208> \xF0\xB2\x88\x88
+<CJK_UNIFIED_IDEOGRAPH-32209> \xF0\xB2\x88\x89
+<CJK_UNIFIED_IDEOGRAPH-3220A> \xF0\xB2\x88\x8A
+<CJK_UNIFIED_IDEOGRAPH-3220B> \xF0\xB2\x88\x8B
+<CJK_UNIFIED_IDEOGRAPH-3220C> \xF0\xB2\x88\x8C
+<CJK_UNIFIED_IDEOGRAPH-3220D> \xF0\xB2\x88\x8D
+<CJK_UNIFIED_IDEOGRAPH-3220E> \xF0\xB2\x88\x8E
+<CJK_UNIFIED_IDEOGRAPH-3220F> \xF0\xB2\x88\x8F
+<CJK_UNIFIED_IDEOGRAPH-32210> \xF0\xB2\x88\x90
+<CJK_UNIFIED_IDEOGRAPH-32211> \xF0\xB2\x88\x91
+<CJK_UNIFIED_IDEOGRAPH-32212> \xF0\xB2\x88\x92
+<CJK_UNIFIED_IDEOGRAPH-32213> \xF0\xB2\x88\x93
+<CJK_UNIFIED_IDEOGRAPH-32214> \xF0\xB2\x88\x94
+<CJK_UNIFIED_IDEOGRAPH-32215> \xF0\xB2\x88\x95
+<CJK_UNIFIED_IDEOGRAPH-32216> \xF0\xB2\x88\x96
+<CJK_UNIFIED_IDEOGRAPH-32217> \xF0\xB2\x88\x97
+<CJK_UNIFIED_IDEOGRAPH-32218> \xF0\xB2\x88\x98
+<CJK_UNIFIED_IDEOGRAPH-32219> \xF0\xB2\x88\x99
+<CJK_UNIFIED_IDEOGRAPH-3221A> \xF0\xB2\x88\x9A
+<CJK_UNIFIED_IDEOGRAPH-3221B> \xF0\xB2\x88\x9B
+<CJK_UNIFIED_IDEOGRAPH-3221C> \xF0\xB2\x88\x9C
+<CJK_UNIFIED_IDEOGRAPH-3221D> \xF0\xB2\x88\x9D
+<CJK_UNIFIED_IDEOGRAPH-3221E> \xF0\xB2\x88\x9E
+<CJK_UNIFIED_IDEOGRAPH-3221F> \xF0\xB2\x88\x9F
+<CJK_UNIFIED_IDEOGRAPH-32220> \xF0\xB2\x88\xA0
+<CJK_UNIFIED_IDEOGRAPH-32221> \xF0\xB2\x88\xA1
+<CJK_UNIFIED_IDEOGRAPH-32222> \xF0\xB2\x88\xA2
+<CJK_UNIFIED_IDEOGRAPH-32223> \xF0\xB2\x88\xA3
+<CJK_UNIFIED_IDEOGRAPH-32224> \xF0\xB2\x88\xA4
+<CJK_UNIFIED_IDEOGRAPH-32225> \xF0\xB2\x88\xA5
+<CJK_UNIFIED_IDEOGRAPH-32226> \xF0\xB2\x88\xA6
+<CJK_UNIFIED_IDEOGRAPH-32227> \xF0\xB2\x88\xA7
+<CJK_UNIFIED_IDEOGRAPH-32228> \xF0\xB2\x88\xA8
+<CJK_UNIFIED_IDEOGRAPH-32229> \xF0\xB2\x88\xA9
+<CJK_UNIFIED_IDEOGRAPH-3222A> \xF0\xB2\x88\xAA
+<CJK_UNIFIED_IDEOGRAPH-3222B> \xF0\xB2\x88\xAB
+<CJK_UNIFIED_IDEOGRAPH-3222C> \xF0\xB2\x88\xAC
+<CJK_UNIFIED_IDEOGRAPH-3222D> \xF0\xB2\x88\xAD
+<CJK_UNIFIED_IDEOGRAPH-3222E> \xF0\xB2\x88\xAE
+<CJK_UNIFIED_IDEOGRAPH-3222F> \xF0\xB2\x88\xAF
+<CJK_UNIFIED_IDEOGRAPH-32230> \xF0\xB2\x88\xB0
+<CJK_UNIFIED_IDEOGRAPH-32231> \xF0\xB2\x88\xB1
+<CJK_UNIFIED_IDEOGRAPH-32232> \xF0\xB2\x88\xB2
+<CJK_UNIFIED_IDEOGRAPH-32233> \xF0\xB2\x88\xB3
+<CJK_UNIFIED_IDEOGRAPH-32234> \xF0\xB2\x88\xB4
+<CJK_UNIFIED_IDEOGRAPH-32235> \xF0\xB2\x88\xB5
+<CJK_UNIFIED_IDEOGRAPH-32236> \xF0\xB2\x88\xB6
+<CJK_UNIFIED_IDEOGRAPH-32237> \xF0\xB2\x88\xB7
+<CJK_UNIFIED_IDEOGRAPH-32238> \xF0\xB2\x88\xB8
+<CJK_UNIFIED_IDEOGRAPH-32239> \xF0\xB2\x88\xB9
+<CJK_UNIFIED_IDEOGRAPH-3223A> \xF0\xB2\x88\xBA
+<CJK_UNIFIED_IDEOGRAPH-3223B> \xF0\xB2\x88\xBB
+<CJK_UNIFIED_IDEOGRAPH-3223C> \xF0\xB2\x88\xBC
+<CJK_UNIFIED_IDEOGRAPH-3223D> \xF0\xB2\x88\xBD
+<CJK_UNIFIED_IDEOGRAPH-3223E> \xF0\xB2\x88\xBE
+<CJK_UNIFIED_IDEOGRAPH-3223F> \xF0\xB2\x88\xBF
+<CJK_UNIFIED_IDEOGRAPH-32240> \xF0\xB2\x89\x80
+<CJK_UNIFIED_IDEOGRAPH-32241> \xF0\xB2\x89\x81
+<CJK_UNIFIED_IDEOGRAPH-32242> \xF0\xB2\x89\x82
+<CJK_UNIFIED_IDEOGRAPH-32243> \xF0\xB2\x89\x83
+<CJK_UNIFIED_IDEOGRAPH-32244> \xF0\xB2\x89\x84
+<CJK_UNIFIED_IDEOGRAPH-32245> \xF0\xB2\x89\x85
+<CJK_UNIFIED_IDEOGRAPH-32246> \xF0\xB2\x89\x86
+<CJK_UNIFIED_IDEOGRAPH-32247> \xF0\xB2\x89\x87
+<CJK_UNIFIED_IDEOGRAPH-32248> \xF0\xB2\x89\x88
+<CJK_UNIFIED_IDEOGRAPH-32249> \xF0\xB2\x89\x89
+<CJK_UNIFIED_IDEOGRAPH-3224A> \xF0\xB2\x89\x8A
+<CJK_UNIFIED_IDEOGRAPH-3224B> \xF0\xB2\x89\x8B
+<CJK_UNIFIED_IDEOGRAPH-3224C> \xF0\xB2\x89\x8C
+<CJK_UNIFIED_IDEOGRAPH-3224D> \xF0\xB2\x89\x8D
+<CJK_UNIFIED_IDEOGRAPH-3224E> \xF0\xB2\x89\x8E
+<CJK_UNIFIED_IDEOGRAPH-3224F> \xF0\xB2\x89\x8F
+<CJK_UNIFIED_IDEOGRAPH-32250> \xF0\xB2\x89\x90
+<CJK_UNIFIED_IDEOGRAPH-32251> \xF0\xB2\x89\x91
+<CJK_UNIFIED_IDEOGRAPH-32252> \xF0\xB2\x89\x92
+<CJK_UNIFIED_IDEOGRAPH-32253> \xF0\xB2\x89\x93
+<CJK_UNIFIED_IDEOGRAPH-32254> \xF0\xB2\x89\x94
+<CJK_UNIFIED_IDEOGRAPH-32255> \xF0\xB2\x89\x95
+<CJK_UNIFIED_IDEOGRAPH-32256> \xF0\xB2\x89\x96
+<CJK_UNIFIED_IDEOGRAPH-32257> \xF0\xB2\x89\x97
+<CJK_UNIFIED_IDEOGRAPH-32258> \xF0\xB2\x89\x98
+<CJK_UNIFIED_IDEOGRAPH-32259> \xF0\xB2\x89\x99
+<CJK_UNIFIED_IDEOGRAPH-3225A> \xF0\xB2\x89\x9A
+<CJK_UNIFIED_IDEOGRAPH-3225B> \xF0\xB2\x89\x9B
+<CJK_UNIFIED_IDEOGRAPH-3225C> \xF0\xB2\x89\x9C
+<CJK_UNIFIED_IDEOGRAPH-3225D> \xF0\xB2\x89\x9D
+<CJK_UNIFIED_IDEOGRAPH-3225E> \xF0\xB2\x89\x9E
+<CJK_UNIFIED_IDEOGRAPH-3225F> \xF0\xB2\x89\x9F
+<CJK_UNIFIED_IDEOGRAPH-32260> \xF0\xB2\x89\xA0
+<CJK_UNIFIED_IDEOGRAPH-32261> \xF0\xB2\x89\xA1
+<CJK_UNIFIED_IDEOGRAPH-32262> \xF0\xB2\x89\xA2
+<CJK_UNIFIED_IDEOGRAPH-32263> \xF0\xB2\x89\xA3
+<CJK_UNIFIED_IDEOGRAPH-32264> \xF0\xB2\x89\xA4
+<CJK_UNIFIED_IDEOGRAPH-32265> \xF0\xB2\x89\xA5
+<CJK_UNIFIED_IDEOGRAPH-32266> \xF0\xB2\x89\xA6
+<CJK_UNIFIED_IDEOGRAPH-32267> \xF0\xB2\x89\xA7
+<CJK_UNIFIED_IDEOGRAPH-32268> \xF0\xB2\x89\xA8
+<CJK_UNIFIED_IDEOGRAPH-32269> \xF0\xB2\x89\xA9
+<CJK_UNIFIED_IDEOGRAPH-3226A> \xF0\xB2\x89\xAA
+<CJK_UNIFIED_IDEOGRAPH-3226B> \xF0\xB2\x89\xAB
+<CJK_UNIFIED_IDEOGRAPH-3226C> \xF0\xB2\x89\xAC
+<CJK_UNIFIED_IDEOGRAPH-3226D> \xF0\xB2\x89\xAD
+<CJK_UNIFIED_IDEOGRAPH-3226E> \xF0\xB2\x89\xAE
+<CJK_UNIFIED_IDEOGRAPH-3226F> \xF0\xB2\x89\xAF
+<CJK_UNIFIED_IDEOGRAPH-32270> \xF0\xB2\x89\xB0
+<CJK_UNIFIED_IDEOGRAPH-32271> \xF0\xB2\x89\xB1
+<CJK_UNIFIED_IDEOGRAPH-32272> \xF0\xB2\x89\xB2
+<CJK_UNIFIED_IDEOGRAPH-32273> \xF0\xB2\x89\xB3
+<CJK_UNIFIED_IDEOGRAPH-32274> \xF0\xB2\x89\xB4
+<CJK_UNIFIED_IDEOGRAPH-32275> \xF0\xB2\x89\xB5
+<CJK_UNIFIED_IDEOGRAPH-32276> \xF0\xB2\x89\xB6
+<CJK_UNIFIED_IDEOGRAPH-32277> \xF0\xB2\x89\xB7
+<CJK_UNIFIED_IDEOGRAPH-32278> \xF0\xB2\x89\xB8
+<CJK_UNIFIED_IDEOGRAPH-32279> \xF0\xB2\x89\xB9
+<CJK_UNIFIED_IDEOGRAPH-3227A> \xF0\xB2\x89\xBA
+<CJK_UNIFIED_IDEOGRAPH-3227B> \xF0\xB2\x89\xBB
+<CJK_UNIFIED_IDEOGRAPH-3227C> \xF0\xB2\x89\xBC
+<CJK_UNIFIED_IDEOGRAPH-3227D> \xF0\xB2\x89\xBD
+<CJK_UNIFIED_IDEOGRAPH-3227E> \xF0\xB2\x89\xBE
+<CJK_UNIFIED_IDEOGRAPH-3227F> \xF0\xB2\x89\xBF
+<CJK_UNIFIED_IDEOGRAPH-32280> \xF0\xB2\x8A\x80
+<CJK_UNIFIED_IDEOGRAPH-32281> \xF0\xB2\x8A\x81
+<CJK_UNIFIED_IDEOGRAPH-32282> \xF0\xB2\x8A\x82
+<CJK_UNIFIED_IDEOGRAPH-32283> \xF0\xB2\x8A\x83
+<CJK_UNIFIED_IDEOGRAPH-32284> \xF0\xB2\x8A\x84
+<CJK_UNIFIED_IDEOGRAPH-32285> \xF0\xB2\x8A\x85
+<CJK_UNIFIED_IDEOGRAPH-32286> \xF0\xB2\x8A\x86
+<CJK_UNIFIED_IDEOGRAPH-32287> \xF0\xB2\x8A\x87
+<CJK_UNIFIED_IDEOGRAPH-32288> \xF0\xB2\x8A\x88
+<CJK_UNIFIED_IDEOGRAPH-32289> \xF0\xB2\x8A\x89
+<CJK_UNIFIED_IDEOGRAPH-3228A> \xF0\xB2\x8A\x8A
+<CJK_UNIFIED_IDEOGRAPH-3228B> \xF0\xB2\x8A\x8B
+<CJK_UNIFIED_IDEOGRAPH-3228C> \xF0\xB2\x8A\x8C
+<CJK_UNIFIED_IDEOGRAPH-3228D> \xF0\xB2\x8A\x8D
+<CJK_UNIFIED_IDEOGRAPH-3228E> \xF0\xB2\x8A\x8E
+<CJK_UNIFIED_IDEOGRAPH-3228F> \xF0\xB2\x8A\x8F
+<CJK_UNIFIED_IDEOGRAPH-32290> \xF0\xB2\x8A\x90
+<CJK_UNIFIED_IDEOGRAPH-32291> \xF0\xB2\x8A\x91
+<CJK_UNIFIED_IDEOGRAPH-32292> \xF0\xB2\x8A\x92
+<CJK_UNIFIED_IDEOGRAPH-32293> \xF0\xB2\x8A\x93
+<CJK_UNIFIED_IDEOGRAPH-32294> \xF0\xB2\x8A\x94
+<CJK_UNIFIED_IDEOGRAPH-32295> \xF0\xB2\x8A\x95
+<CJK_UNIFIED_IDEOGRAPH-32296> \xF0\xB2\x8A\x96
+<CJK_UNIFIED_IDEOGRAPH-32297> \xF0\xB2\x8A\x97
+<CJK_UNIFIED_IDEOGRAPH-32298> \xF0\xB2\x8A\x98
+<CJK_UNIFIED_IDEOGRAPH-32299> \xF0\xB2\x8A\x99
+<CJK_UNIFIED_IDEOGRAPH-3229A> \xF0\xB2\x8A\x9A
+<CJK_UNIFIED_IDEOGRAPH-3229B> \xF0\xB2\x8A\x9B
+<CJK_UNIFIED_IDEOGRAPH-3229C> \xF0\xB2\x8A\x9C
+<CJK_UNIFIED_IDEOGRAPH-3229D> \xF0\xB2\x8A\x9D
+<CJK_UNIFIED_IDEOGRAPH-3229E> \xF0\xB2\x8A\x9E
+<CJK_UNIFIED_IDEOGRAPH-3229F> \xF0\xB2\x8A\x9F
+<CJK_UNIFIED_IDEOGRAPH-322A0> \xF0\xB2\x8A\xA0
+<CJK_UNIFIED_IDEOGRAPH-322A1> \xF0\xB2\x8A\xA1
+<CJK_UNIFIED_IDEOGRAPH-322A2> \xF0\xB2\x8A\xA2
+<CJK_UNIFIED_IDEOGRAPH-322A3> \xF0\xB2\x8A\xA3
+<CJK_UNIFIED_IDEOGRAPH-322A4> \xF0\xB2\x8A\xA4
+<CJK_UNIFIED_IDEOGRAPH-322A5> \xF0\xB2\x8A\xA5
+<CJK_UNIFIED_IDEOGRAPH-322A6> \xF0\xB2\x8A\xA6
+<CJK_UNIFIED_IDEOGRAPH-322A7> \xF0\xB2\x8A\xA7
+<CJK_UNIFIED_IDEOGRAPH-322A8> \xF0\xB2\x8A\xA8
+<CJK_UNIFIED_IDEOGRAPH-322A9> \xF0\xB2\x8A\xA9
+<CJK_UNIFIED_IDEOGRAPH-322AA> \xF0\xB2\x8A\xAA
+<CJK_UNIFIED_IDEOGRAPH-322AB> \xF0\xB2\x8A\xAB
+<CJK_UNIFIED_IDEOGRAPH-322AC> \xF0\xB2\x8A\xAC
+<CJK_UNIFIED_IDEOGRAPH-322AD> \xF0\xB2\x8A\xAD
+<CJK_UNIFIED_IDEOGRAPH-322AE> \xF0\xB2\x8A\xAE
+<CJK_UNIFIED_IDEOGRAPH-322AF> \xF0\xB2\x8A\xAF
+<CJK_UNIFIED_IDEOGRAPH-322B0> \xF0\xB2\x8A\xB0
+<CJK_UNIFIED_IDEOGRAPH-322B1> \xF0\xB2\x8A\xB1
+<CJK_UNIFIED_IDEOGRAPH-322B2> \xF0\xB2\x8A\xB2
+<CJK_UNIFIED_IDEOGRAPH-322B3> \xF0\xB2\x8A\xB3
+<CJK_UNIFIED_IDEOGRAPH-322B4> \xF0\xB2\x8A\xB4
+<CJK_UNIFIED_IDEOGRAPH-322B5> \xF0\xB2\x8A\xB5
+<CJK_UNIFIED_IDEOGRAPH-322B6> \xF0\xB2\x8A\xB6
+<CJK_UNIFIED_IDEOGRAPH-322B7> \xF0\xB2\x8A\xB7
+<CJK_UNIFIED_IDEOGRAPH-322B8> \xF0\xB2\x8A\xB8
+<CJK_UNIFIED_IDEOGRAPH-322B9> \xF0\xB2\x8A\xB9
+<CJK_UNIFIED_IDEOGRAPH-322BA> \xF0\xB2\x8A\xBA
+<CJK_UNIFIED_IDEOGRAPH-322BB> \xF0\xB2\x8A\xBB
+<CJK_UNIFIED_IDEOGRAPH-322BC> \xF0\xB2\x8A\xBC
+<CJK_UNIFIED_IDEOGRAPH-322BD> \xF0\xB2\x8A\xBD
+<CJK_UNIFIED_IDEOGRAPH-322BE> \xF0\xB2\x8A\xBE
+<CJK_UNIFIED_IDEOGRAPH-322BF> \xF0\xB2\x8A\xBF
+<CJK_UNIFIED_IDEOGRAPH-322C0> \xF0\xB2\x8B\x80
+<CJK_UNIFIED_IDEOGRAPH-322C1> \xF0\xB2\x8B\x81
+<CJK_UNIFIED_IDEOGRAPH-322C2> \xF0\xB2\x8B\x82
+<CJK_UNIFIED_IDEOGRAPH-322C3> \xF0\xB2\x8B\x83
+<CJK_UNIFIED_IDEOGRAPH-322C4> \xF0\xB2\x8B\x84
+<CJK_UNIFIED_IDEOGRAPH-322C5> \xF0\xB2\x8B\x85
+<CJK_UNIFIED_IDEOGRAPH-322C6> \xF0\xB2\x8B\x86
+<CJK_UNIFIED_IDEOGRAPH-322C7> \xF0\xB2\x8B\x87
+<CJK_UNIFIED_IDEOGRAPH-322C8> \xF0\xB2\x8B\x88
+<CJK_UNIFIED_IDEOGRAPH-322C9> \xF0\xB2\x8B\x89
+<CJK_UNIFIED_IDEOGRAPH-322CA> \xF0\xB2\x8B\x8A
+<CJK_UNIFIED_IDEOGRAPH-322CB> \xF0\xB2\x8B\x8B
+<CJK_UNIFIED_IDEOGRAPH-322CC> \xF0\xB2\x8B\x8C
+<CJK_UNIFIED_IDEOGRAPH-322CD> \xF0\xB2\x8B\x8D
+<CJK_UNIFIED_IDEOGRAPH-322CE> \xF0\xB2\x8B\x8E
+<CJK_UNIFIED_IDEOGRAPH-322CF> \xF0\xB2\x8B\x8F
+<CJK_UNIFIED_IDEOGRAPH-322D0> \xF0\xB2\x8B\x90
+<CJK_UNIFIED_IDEOGRAPH-322D1> \xF0\xB2\x8B\x91
+<CJK_UNIFIED_IDEOGRAPH-322D2> \xF0\xB2\x8B\x92
+<CJK_UNIFIED_IDEOGRAPH-322D3> \xF0\xB2\x8B\x93
+<CJK_UNIFIED_IDEOGRAPH-322D4> \xF0\xB2\x8B\x94
+<CJK_UNIFIED_IDEOGRAPH-322D5> \xF0\xB2\x8B\x95
+<CJK_UNIFIED_IDEOGRAPH-322D6> \xF0\xB2\x8B\x96
+<CJK_UNIFIED_IDEOGRAPH-322D7> \xF0\xB2\x8B\x97
+<CJK_UNIFIED_IDEOGRAPH-322D8> \xF0\xB2\x8B\x98
+<CJK_UNIFIED_IDEOGRAPH-322D9> \xF0\xB2\x8B\x99
+<CJK_UNIFIED_IDEOGRAPH-322DA> \xF0\xB2\x8B\x9A
+<CJK_UNIFIED_IDEOGRAPH-322DB> \xF0\xB2\x8B\x9B
+<CJK_UNIFIED_IDEOGRAPH-322DC> \xF0\xB2\x8B\x9C
+<CJK_UNIFIED_IDEOGRAPH-322DD> \xF0\xB2\x8B\x9D
+<CJK_UNIFIED_IDEOGRAPH-322DE> \xF0\xB2\x8B\x9E
+<CJK_UNIFIED_IDEOGRAPH-322DF> \xF0\xB2\x8B\x9F
+<CJK_UNIFIED_IDEOGRAPH-322E0> \xF0\xB2\x8B\xA0
+<CJK_UNIFIED_IDEOGRAPH-322E1> \xF0\xB2\x8B\xA1
+<CJK_UNIFIED_IDEOGRAPH-322E2> \xF0\xB2\x8B\xA2
+<CJK_UNIFIED_IDEOGRAPH-322E3> \xF0\xB2\x8B\xA3
+<CJK_UNIFIED_IDEOGRAPH-322E4> \xF0\xB2\x8B\xA4
+<CJK_UNIFIED_IDEOGRAPH-322E5> \xF0\xB2\x8B\xA5
+<CJK_UNIFIED_IDEOGRAPH-322E6> \xF0\xB2\x8B\xA6
+<CJK_UNIFIED_IDEOGRAPH-322E7> \xF0\xB2\x8B\xA7
+<CJK_UNIFIED_IDEOGRAPH-322E8> \xF0\xB2\x8B\xA8
+<CJK_UNIFIED_IDEOGRAPH-322E9> \xF0\xB2\x8B\xA9
+<CJK_UNIFIED_IDEOGRAPH-322EA> \xF0\xB2\x8B\xAA
+<CJK_UNIFIED_IDEOGRAPH-322EB> \xF0\xB2\x8B\xAB
+<CJK_UNIFIED_IDEOGRAPH-322EC> \xF0\xB2\x8B\xAC
+<CJK_UNIFIED_IDEOGRAPH-322ED> \xF0\xB2\x8B\xAD
+<CJK_UNIFIED_IDEOGRAPH-322EE> \xF0\xB2\x8B\xAE
+<CJK_UNIFIED_IDEOGRAPH-322EF> \xF0\xB2\x8B\xAF
+<CJK_UNIFIED_IDEOGRAPH-322F0> \xF0\xB2\x8B\xB0
+<CJK_UNIFIED_IDEOGRAPH-322F1> \xF0\xB2\x8B\xB1
+<CJK_UNIFIED_IDEOGRAPH-322F2> \xF0\xB2\x8B\xB2
+<CJK_UNIFIED_IDEOGRAPH-322F3> \xF0\xB2\x8B\xB3
+<CJK_UNIFIED_IDEOGRAPH-322F4> \xF0\xB2\x8B\xB4
+<CJK_UNIFIED_IDEOGRAPH-322F5> \xF0\xB2\x8B\xB5
+<CJK_UNIFIED_IDEOGRAPH-322F6> \xF0\xB2\x8B\xB6
+<CJK_UNIFIED_IDEOGRAPH-322F7> \xF0\xB2\x8B\xB7
+<CJK_UNIFIED_IDEOGRAPH-322F8> \xF0\xB2\x8B\xB8
+<CJK_UNIFIED_IDEOGRAPH-322F9> \xF0\xB2\x8B\xB9
+<CJK_UNIFIED_IDEOGRAPH-322FA> \xF0\xB2\x8B\xBA
+<CJK_UNIFIED_IDEOGRAPH-322FB> \xF0\xB2\x8B\xBB
+<CJK_UNIFIED_IDEOGRAPH-322FC> \xF0\xB2\x8B\xBC
+<CJK_UNIFIED_IDEOGRAPH-322FD> \xF0\xB2\x8B\xBD
+<CJK_UNIFIED_IDEOGRAPH-322FE> \xF0\xB2\x8B\xBE
+<CJK_UNIFIED_IDEOGRAPH-322FF> \xF0\xB2\x8B\xBF
+<CJK_UNIFIED_IDEOGRAPH-32300> \xF0\xB2\x8C\x80
+<CJK_UNIFIED_IDEOGRAPH-32301> \xF0\xB2\x8C\x81
+<CJK_UNIFIED_IDEOGRAPH-32302> \xF0\xB2\x8C\x82
+<CJK_UNIFIED_IDEOGRAPH-32303> \xF0\xB2\x8C\x83
+<CJK_UNIFIED_IDEOGRAPH-32304> \xF0\xB2\x8C\x84
+<CJK_UNIFIED_IDEOGRAPH-32305> \xF0\xB2\x8C\x85
+<CJK_UNIFIED_IDEOGRAPH-32306> \xF0\xB2\x8C\x86
+<CJK_UNIFIED_IDEOGRAPH-32307> \xF0\xB2\x8C\x87
+<CJK_UNIFIED_IDEOGRAPH-32308> \xF0\xB2\x8C\x88
+<CJK_UNIFIED_IDEOGRAPH-32309> \xF0\xB2\x8C\x89
+<CJK_UNIFIED_IDEOGRAPH-3230A> \xF0\xB2\x8C\x8A
+<CJK_UNIFIED_IDEOGRAPH-3230B> \xF0\xB2\x8C\x8B
+<CJK_UNIFIED_IDEOGRAPH-3230C> \xF0\xB2\x8C\x8C
+<CJK_UNIFIED_IDEOGRAPH-3230D> \xF0\xB2\x8C\x8D
+<CJK_UNIFIED_IDEOGRAPH-3230E> \xF0\xB2\x8C\x8E
+<CJK_UNIFIED_IDEOGRAPH-3230F> \xF0\xB2\x8C\x8F
+<CJK_UNIFIED_IDEOGRAPH-32310> \xF0\xB2\x8C\x90
+<CJK_UNIFIED_IDEOGRAPH-32311> \xF0\xB2\x8C\x91
+<CJK_UNIFIED_IDEOGRAPH-32312> \xF0\xB2\x8C\x92
+<CJK_UNIFIED_IDEOGRAPH-32313> \xF0\xB2\x8C\x93
+<CJK_UNIFIED_IDEOGRAPH-32314> \xF0\xB2\x8C\x94
+<CJK_UNIFIED_IDEOGRAPH-32315> \xF0\xB2\x8C\x95
+<CJK_UNIFIED_IDEOGRAPH-32316> \xF0\xB2\x8C\x96
+<CJK_UNIFIED_IDEOGRAPH-32317> \xF0\xB2\x8C\x97
+<CJK_UNIFIED_IDEOGRAPH-32318> \xF0\xB2\x8C\x98
+<CJK_UNIFIED_IDEOGRAPH-32319> \xF0\xB2\x8C\x99
+<CJK_UNIFIED_IDEOGRAPH-3231A> \xF0\xB2\x8C\x9A
+<CJK_UNIFIED_IDEOGRAPH-3231B> \xF0\xB2\x8C\x9B
+<CJK_UNIFIED_IDEOGRAPH-3231C> \xF0\xB2\x8C\x9C
+<CJK_UNIFIED_IDEOGRAPH-3231D> \xF0\xB2\x8C\x9D
+<CJK_UNIFIED_IDEOGRAPH-3231E> \xF0\xB2\x8C\x9E
+<CJK_UNIFIED_IDEOGRAPH-3231F> \xF0\xB2\x8C\x9F
+<CJK_UNIFIED_IDEOGRAPH-32320> \xF0\xB2\x8C\xA0
+<CJK_UNIFIED_IDEOGRAPH-32321> \xF0\xB2\x8C\xA1
+<CJK_UNIFIED_IDEOGRAPH-32322> \xF0\xB2\x8C\xA2
+<CJK_UNIFIED_IDEOGRAPH-32323> \xF0\xB2\x8C\xA3
+<CJK_UNIFIED_IDEOGRAPH-32324> \xF0\xB2\x8C\xA4
+<CJK_UNIFIED_IDEOGRAPH-32325> \xF0\xB2\x8C\xA5
+<CJK_UNIFIED_IDEOGRAPH-32326> \xF0\xB2\x8C\xA6
+<CJK_UNIFIED_IDEOGRAPH-32327> \xF0\xB2\x8C\xA7
+<CJK_UNIFIED_IDEOGRAPH-32328> \xF0\xB2\x8C\xA8
+<CJK_UNIFIED_IDEOGRAPH-32329> \xF0\xB2\x8C\xA9
+<CJK_UNIFIED_IDEOGRAPH-3232A> \xF0\xB2\x8C\xAA
+<CJK_UNIFIED_IDEOGRAPH-3232B> \xF0\xB2\x8C\xAB
+<CJK_UNIFIED_IDEOGRAPH-3232C> \xF0\xB2\x8C\xAC
+<CJK_UNIFIED_IDEOGRAPH-3232D> \xF0\xB2\x8C\xAD
+<CJK_UNIFIED_IDEOGRAPH-3232E> \xF0\xB2\x8C\xAE
+<CJK_UNIFIED_IDEOGRAPH-3232F> \xF0\xB2\x8C\xAF
+<CJK_UNIFIED_IDEOGRAPH-32330> \xF0\xB2\x8C\xB0
+<CJK_UNIFIED_IDEOGRAPH-32331> \xF0\xB2\x8C\xB1
+<CJK_UNIFIED_IDEOGRAPH-32332> \xF0\xB2\x8C\xB2
+<CJK_UNIFIED_IDEOGRAPH-32333> \xF0\xB2\x8C\xB3
+<CJK_UNIFIED_IDEOGRAPH-32334> \xF0\xB2\x8C\xB4
+<CJK_UNIFIED_IDEOGRAPH-32335> \xF0\xB2\x8C\xB5
+<CJK_UNIFIED_IDEOGRAPH-32336> \xF0\xB2\x8C\xB6
+<CJK_UNIFIED_IDEOGRAPH-32337> \xF0\xB2\x8C\xB7
+<CJK_UNIFIED_IDEOGRAPH-32338> \xF0\xB2\x8C\xB8
+<CJK_UNIFIED_IDEOGRAPH-32339> \xF0\xB2\x8C\xB9
+<CJK_UNIFIED_IDEOGRAPH-3233A> \xF0\xB2\x8C\xBA
+<CJK_UNIFIED_IDEOGRAPH-3233B> \xF0\xB2\x8C\xBB
+<CJK_UNIFIED_IDEOGRAPH-3233C> \xF0\xB2\x8C\xBC
+<CJK_UNIFIED_IDEOGRAPH-3233D> \xF0\xB2\x8C\xBD
+<CJK_UNIFIED_IDEOGRAPH-3233E> \xF0\xB2\x8C\xBE
+<CJK_UNIFIED_IDEOGRAPH-3233F> \xF0\xB2\x8C\xBF
+<CJK_UNIFIED_IDEOGRAPH-32340> \xF0\xB2\x8D\x80
+<CJK_UNIFIED_IDEOGRAPH-32341> \xF0\xB2\x8D\x81
+<CJK_UNIFIED_IDEOGRAPH-32342> \xF0\xB2\x8D\x82
+<CJK_UNIFIED_IDEOGRAPH-32343> \xF0\xB2\x8D\x83
+<CJK_UNIFIED_IDEOGRAPH-32344> \xF0\xB2\x8D\x84
+<CJK_UNIFIED_IDEOGRAPH-32345> \xF0\xB2\x8D\x85
+<CJK_UNIFIED_IDEOGRAPH-32346> \xF0\xB2\x8D\x86
+<CJK_UNIFIED_IDEOGRAPH-32347> \xF0\xB2\x8D\x87
+<CJK_UNIFIED_IDEOGRAPH-32348> \xF0\xB2\x8D\x88
+<CJK_UNIFIED_IDEOGRAPH-32349> \xF0\xB2\x8D\x89
+<CJK_UNIFIED_IDEOGRAPH-3234A> \xF0\xB2\x8D\x8A
+<CJK_UNIFIED_IDEOGRAPH-3234B> \xF0\xB2\x8D\x8B
+<CJK_UNIFIED_IDEOGRAPH-3234C> \xF0\xB2\x8D\x8C
+<CJK_UNIFIED_IDEOGRAPH-3234D> \xF0\xB2\x8D\x8D
+<CJK_UNIFIED_IDEOGRAPH-3234E> \xF0\xB2\x8D\x8E
+<CJK_UNIFIED_IDEOGRAPH-3234F> \xF0\xB2\x8D\x8F
+<CJK_UNIFIED_IDEOGRAPH-32350> \xF0\xB2\x8D\x90
+<CJK_UNIFIED_IDEOGRAPH-32351> \xF0\xB2\x8D\x91
+<CJK_UNIFIED_IDEOGRAPH-32352> \xF0\xB2\x8D\x92
+<CJK_UNIFIED_IDEOGRAPH-32353> \xF0\xB2\x8D\x93
+<CJK_UNIFIED_IDEOGRAPH-32354> \xF0\xB2\x8D\x94
+<CJK_UNIFIED_IDEOGRAPH-32355> \xF0\xB2\x8D\x95
+<CJK_UNIFIED_IDEOGRAPH-32356> \xF0\xB2\x8D\x96
+<CJK_UNIFIED_IDEOGRAPH-32357> \xF0\xB2\x8D\x97
+<CJK_UNIFIED_IDEOGRAPH-32358> \xF0\xB2\x8D\x98
+<CJK_UNIFIED_IDEOGRAPH-32359> \xF0\xB2\x8D\x99
+<CJK_UNIFIED_IDEOGRAPH-3235A> \xF0\xB2\x8D\x9A
+<CJK_UNIFIED_IDEOGRAPH-3235B> \xF0\xB2\x8D\x9B
+<CJK_UNIFIED_IDEOGRAPH-3235C> \xF0\xB2\x8D\x9C
+<CJK_UNIFIED_IDEOGRAPH-3235D> \xF0\xB2\x8D\x9D
+<CJK_UNIFIED_IDEOGRAPH-3235E> \xF0\xB2\x8D\x9E
+<CJK_UNIFIED_IDEOGRAPH-3235F> \xF0\xB2\x8D\x9F
+<CJK_UNIFIED_IDEOGRAPH-32360> \xF0\xB2\x8D\xA0
+<CJK_UNIFIED_IDEOGRAPH-32361> \xF0\xB2\x8D\xA1
+<CJK_UNIFIED_IDEOGRAPH-32362> \xF0\xB2\x8D\xA2
+<CJK_UNIFIED_IDEOGRAPH-32363> \xF0\xB2\x8D\xA3
+<CJK_UNIFIED_IDEOGRAPH-32364> \xF0\xB2\x8D\xA4
+<CJK_UNIFIED_IDEOGRAPH-32365> \xF0\xB2\x8D\xA5
+<CJK_UNIFIED_IDEOGRAPH-32366> \xF0\xB2\x8D\xA6
+<CJK_UNIFIED_IDEOGRAPH-32367> \xF0\xB2\x8D\xA7
+<CJK_UNIFIED_IDEOGRAPH-32368> \xF0\xB2\x8D\xA8
+<CJK_UNIFIED_IDEOGRAPH-32369> \xF0\xB2\x8D\xA9
+<CJK_UNIFIED_IDEOGRAPH-3236A> \xF0\xB2\x8D\xAA
+<CJK_UNIFIED_IDEOGRAPH-3236B> \xF0\xB2\x8D\xAB
+<CJK_UNIFIED_IDEOGRAPH-3236C> \xF0\xB2\x8D\xAC
+<CJK_UNIFIED_IDEOGRAPH-3236D> \xF0\xB2\x8D\xAD
+<CJK_UNIFIED_IDEOGRAPH-3236E> \xF0\xB2\x8D\xAE
+<CJK_UNIFIED_IDEOGRAPH-3236F> \xF0\xB2\x8D\xAF
+<CJK_UNIFIED_IDEOGRAPH-32370> \xF0\xB2\x8D\xB0
+<CJK_UNIFIED_IDEOGRAPH-32371> \xF0\xB2\x8D\xB1
+<CJK_UNIFIED_IDEOGRAPH-32372> \xF0\xB2\x8D\xB2
+<CJK_UNIFIED_IDEOGRAPH-32373> \xF0\xB2\x8D\xB3
+<CJK_UNIFIED_IDEOGRAPH-32374> \xF0\xB2\x8D\xB4
+<CJK_UNIFIED_IDEOGRAPH-32375> \xF0\xB2\x8D\xB5
+<CJK_UNIFIED_IDEOGRAPH-32376> \xF0\xB2\x8D\xB6
+<CJK_UNIFIED_IDEOGRAPH-32377> \xF0\xB2\x8D\xB7
+<CJK_UNIFIED_IDEOGRAPH-32378> \xF0\xB2\x8D\xB8
+<CJK_UNIFIED_IDEOGRAPH-32379> \xF0\xB2\x8D\xB9
+<CJK_UNIFIED_IDEOGRAPH-3237A> \xF0\xB2\x8D\xBA
+<CJK_UNIFIED_IDEOGRAPH-3237B> \xF0\xB2\x8D\xBB
+<CJK_UNIFIED_IDEOGRAPH-3237C> \xF0\xB2\x8D\xBC
+<CJK_UNIFIED_IDEOGRAPH-3237D> \xF0\xB2\x8D\xBD
+<CJK_UNIFIED_IDEOGRAPH-3237E> \xF0\xB2\x8D\xBE
+<CJK_UNIFIED_IDEOGRAPH-3237F> \xF0\xB2\x8D\xBF
+<CJK_UNIFIED_IDEOGRAPH-32380> \xF0\xB2\x8E\x80
+<CJK_UNIFIED_IDEOGRAPH-32381> \xF0\xB2\x8E\x81
+<CJK_UNIFIED_IDEOGRAPH-32382> \xF0\xB2\x8E\x82
+<CJK_UNIFIED_IDEOGRAPH-32383> \xF0\xB2\x8E\x83
+<CJK_UNIFIED_IDEOGRAPH-32384> \xF0\xB2\x8E\x84
+<CJK_UNIFIED_IDEOGRAPH-32385> \xF0\xB2\x8E\x85
+<CJK_UNIFIED_IDEOGRAPH-32386> \xF0\xB2\x8E\x86
+<CJK_UNIFIED_IDEOGRAPH-32387> \xF0\xB2\x8E\x87
+<CJK_UNIFIED_IDEOGRAPH-32388> \xF0\xB2\x8E\x88
+<CJK_UNIFIED_IDEOGRAPH-32389> \xF0\xB2\x8E\x89
+<CJK_UNIFIED_IDEOGRAPH-3238A> \xF0\xB2\x8E\x8A
+<CJK_UNIFIED_IDEOGRAPH-3238B> \xF0\xB2\x8E\x8B
+<CJK_UNIFIED_IDEOGRAPH-3238C> \xF0\xB2\x8E\x8C
+<CJK_UNIFIED_IDEOGRAPH-3238D> \xF0\xB2\x8E\x8D
+<CJK_UNIFIED_IDEOGRAPH-3238E> \xF0\xB2\x8E\x8E
+<CJK_UNIFIED_IDEOGRAPH-3238F> \xF0\xB2\x8E\x8F
+<CJK_UNIFIED_IDEOGRAPH-32390> \xF0\xB2\x8E\x90
+<CJK_UNIFIED_IDEOGRAPH-32391> \xF0\xB2\x8E\x91
+<CJK_UNIFIED_IDEOGRAPH-32392> \xF0\xB2\x8E\x92
+<CJK_UNIFIED_IDEOGRAPH-32393> \xF0\xB2\x8E\x93
+<CJK_UNIFIED_IDEOGRAPH-32394> \xF0\xB2\x8E\x94
+<CJK_UNIFIED_IDEOGRAPH-32395> \xF0\xB2\x8E\x95
+<CJK_UNIFIED_IDEOGRAPH-32396> \xF0\xB2\x8E\x96
+<CJK_UNIFIED_IDEOGRAPH-32397> \xF0\xB2\x8E\x97
+<CJK_UNIFIED_IDEOGRAPH-32398> \xF0\xB2\x8E\x98
+<CJK_UNIFIED_IDEOGRAPH-32399> \xF0\xB2\x8E\x99
+<CJK_UNIFIED_IDEOGRAPH-3239A> \xF0\xB2\x8E\x9A
+<CJK_UNIFIED_IDEOGRAPH-3239B> \xF0\xB2\x8E\x9B
+<CJK_UNIFIED_IDEOGRAPH-3239C> \xF0\xB2\x8E\x9C
+<CJK_UNIFIED_IDEOGRAPH-3239D> \xF0\xB2\x8E\x9D
+<CJK_UNIFIED_IDEOGRAPH-3239E> \xF0\xB2\x8E\x9E
+<CJK_UNIFIED_IDEOGRAPH-3239F> \xF0\xB2\x8E\x9F
+<CJK_UNIFIED_IDEOGRAPH-323A0> \xF0\xB2\x8E\xA0
+<CJK_UNIFIED_IDEOGRAPH-323A1> \xF0\xB2\x8E\xA1
+<CJK_UNIFIED_IDEOGRAPH-323A2> \xF0\xB2\x8E\xA2
+<CJK_UNIFIED_IDEOGRAPH-323A3> \xF0\xB2\x8E\xA3
+<CJK_UNIFIED_IDEOGRAPH-323A4> \xF0\xB2\x8E\xA4
+<CJK_UNIFIED_IDEOGRAPH-323A5> \xF0\xB2\x8E\xA5
+<CJK_UNIFIED_IDEOGRAPH-323A6> \xF0\xB2\x8E\xA6
+<CJK_UNIFIED_IDEOGRAPH-323A7> \xF0\xB2\x8E\xA7
+<CJK_UNIFIED_IDEOGRAPH-323A8> \xF0\xB2\x8E\xA8
+<CJK_UNIFIED_IDEOGRAPH-323A9> \xF0\xB2\x8E\xA9
+<CJK_UNIFIED_IDEOGRAPH-323AA> \xF0\xB2\x8E\xAA
+<CJK_UNIFIED_IDEOGRAPH-323AB> \xF0\xB2\x8E\xAB
+<CJK_UNIFIED_IDEOGRAPH-323AC> \xF0\xB2\x8E\xAC
+<CJK_UNIFIED_IDEOGRAPH-323AD> \xF0\xB2\x8E\xAD
+<CJK_UNIFIED_IDEOGRAPH-323AE> \xF0\xB2\x8E\xAE
+<CJK_UNIFIED_IDEOGRAPH-323AF> \xF0\xB2\x8E\xAF
<LANGUAGE_TAG> \xF3\xA0\x80\x81
<TAG_SPACE> \xF3\xA0\x80\xA0
<TAG_EXCLAMATION_MARK> \xF3\xA0\x80\xA1
diff --git a/tools/tools/locale/etc/final-maps/widths.txt b/tools/tools/locale/etc/final-maps/widths.txt
index 74c28ac58463..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.5.0.
+# utf8proc 2.9.0.
# -----------------------------------------------------------------------------
WIDTH
<COMBINING_GRAVE_ACCENT> 0
@@ -307,6 +307,25 @@ WIDTH
<MANDAIC_AFFRICATION_MARK> 0
<MANDAIC_VOCALIZATION_MARK> 0
<MANDAIC_GEMINATION_MARK> 0
+<ARABIC_POUND_MARK_ABOVE> 0
+<ARABIC_PIASTRE_MARK_ABOVE> 0
+<ARABIC_SMALL_HIGH_WORD_AL-JUZ> 0
+<ARABIC_SMALL_LOW_WORD_ISHMAAM> 0
+<ARABIC_SMALL_LOW_WORD_IMAALA> 0
+<ARABIC_SMALL_LOW_WORD_TASHEEL> 0
+<ARABIC_MADDA_WAAJIB> 0
+<ARABIC_SUPERSCRIPT_ALEF_MOKHASSAS> 0
+<ARABIC_DOUBLED_MADDA> 0
+<ARABIC_HALF_MADDA_OVER_MADDA> 0
+<ARABIC_SMALL_HIGH_FARSI_YEH> 0
+<ARABIC_SMALL_HIGH_YEH_BARREE_WITH_TWO_DOTS_BELOW> 0
+<ARABIC_SMALL_HIGH_WORD_SAH> 0
+<ARABIC_SMALL_HIGH_ZAH> 0
+<ARABIC_LARGE_ROUND_DOT_ABOVE> 0
+<ARABIC_LARGE_ROUND_DOT_BELOW> 0
+<ARABIC_SUKUN_BELOW> 0
+<ARABIC_LARGE_CIRCLE_BELOW> 0
+<ARABIC_LARGE_ROUND_DOT_INSIDE_CIRCLE_BELOW> 0
<ARABIC_SMALL_LOW_WAW> 0
<ARABIC_SMALL_HIGH_WORD_AR-RUB> 0
<ARABIC_SMALL_HIGH_SAD> 0
@@ -466,6 +485,7 @@ WIDTH
<ORIYA_VOWEL_SIGN_O> 0
<ORIYA_VOWEL_SIGN_AU> 0
<ORIYA_SIGN_VIRAMA> 0
+<ORIYA_SIGN_OVERLINE> 0
<ORIYA_AI_LENGTH_MARK> 0
<ORIYA_AU_LENGTH_MARK> 0
<ORIYA_VOWEL_SIGN_VOCALIC_L> 0
@@ -489,6 +509,7 @@ WIDTH
<TELUGU_SIGN_ANUSVARA> 0
<TELUGU_SIGN_VISARGA> 0
<TELUGU_SIGN_COMBINING_ANUSVARA_ABOVE> 0
+<TELUGU_SIGN_NUKTA> 0
<TELUGU_VOWEL_SIGN_AA> 0
<TELUGU_VOWEL_SIGN_I> 0
<TELUGU_VOWEL_SIGN_II> 0
@@ -529,6 +550,7 @@ WIDTH
<KANNADA_AI_LENGTH_MARK> 0
<KANNADA_VOWEL_SIGN_VOCALIC_L> 0
<KANNADA_VOWEL_SIGN_VOCALIC_LL> 0
+<KANNADA_SIGN_COMBINING_ANUSVARA_ABOVE_RIGHT> 0
<MALAYALAM_SIGN_COMBINING_ANUSVARA_ABOVE> 0
<MALAYALAM_SIGN_CANDRABINDU> 0
<MALAYALAM_SIGN_ANUSVARA> 0
@@ -552,6 +574,7 @@ WIDTH
<MALAYALAM_AU_LENGTH_MARK> 0
<MALAYALAM_VOWEL_SIGN_VOCALIC_L> 0
<MALAYALAM_VOWEL_SIGN_VOCALIC_LL> 0
+<SINHALA_SIGN_CANDRABINDU> 0
<SINHALA_SIGN_ANUSVARAYA> 0
<SINHALA_SIGN_VISARGAYA> 0
<SINHALA_SIGN_AL-LAKUNA> 0
@@ -604,6 +627,7 @@ WIDTH
<LAO_TONE_MAI_CATAWA> 0
<LAO_CANCELLATION_MARK> 0
<LAO_NIGGAHITA> 0
+<LAO_YAMAKKAN> 0
<TIBETAN_ASTROLOGICAL_SIGN_-KHYUD_PA> 0
<TIBETAN_ASTROLOGICAL_SIGN_SDONG_TSHUGS> 0
<TIBETAN_MARK_NGAS_BZUNG_NYI_ZLA> 0
@@ -835,12 +859,173 @@ 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
<TAGALOG_VOWEL_SIGN_I> 0
<TAGALOG_VOWEL_SIGN_U> 0
<TAGALOG_SIGN_VIRAMA> 0
+<TAGALOG_SIGN_PAMUDPOD> 0
<HANUNOO_VOWEL_SIGN_I> 0
<HANUNOO_VOWEL_SIGN_U> 0
<HANUNOO_SIGN_PAMUDPOD> 0
@@ -885,6 +1070,7 @@ WIDTH
<MONGOLIAN_FREE_VARIATION_SELECTOR_TWO> 0
<MONGOLIAN_FREE_VARIATION_SELECTOR_THREE> 0
<MONGOLIAN_VOWEL_SEPARATOR> 0
+<MONGOLIAN_FREE_VARIATION_SELECTOR_FOUR> 0
<MONGOLIAN_LETTER_ALI_GALI_BALUDA> 0
<MONGOLIAN_LETTER_ALI_GALI_THREE_BALUDA> 0
<MONGOLIAN_LETTER_ALI_GALI_DAGALGA> 0
@@ -972,6 +1158,22 @@ WIDTH
<COMBINING_DOUBLE_PARENTHESES_ABOVE> 0
<COMBINING_PARENTHESES_BELOW> 0
<COMBINING_PARENTHESES_OVERLAY> 0
+<COMBINING_LATIN_SMALL_LETTER_W_BELOW> 0
+<COMBINING_LATIN_SMALL_LETTER_TURNED_W_BELOW> 0
+<COMBINING_LEFT_PARENTHESIS_ABOVE_LEFT> 0
+<COMBINING_RIGHT_PARENTHESIS_ABOVE_RIGHT> 0
+<COMBINING_LEFT_PARENTHESIS_BELOW_LEFT> 0
+<COMBINING_RIGHT_PARENTHESIS_BELOW_RIGHT> 0
+<COMBINING_SQUARE_BRACKETS_ABOVE> 0
+<COMBINING_NUMBER_SIGN_ABOVE> 0
+<COMBINING_INVERTED_DOUBLE_ARCH_ABOVE> 0
+<COMBINING_PLUS_SIGN_ABOVE> 0
+<COMBINING_DOUBLE_PLUS_SIGN_ABOVE> 0
+<COMBINING_DOUBLE_PLUS_SIGN_BELOW> 0
+<COMBINING_TRIPLE_ACUTE_ACCENT> 0
+<COMBINING_LATIN_SMALL_LETTER_INSULAR_G> 0
+<COMBINING_LATIN_SMALL_LETTER_INSULAR_R> 0
+<COMBINING_LATIN_SMALL_LETTER_INSULAR_T> 0
<BALINESE_SIGN_ULU_RICEM> 0
<BALINESE_SIGN_ULU_CANDRA> 0
<BALINESE_SIGN_CECEK> 0
@@ -1140,6 +1342,7 @@ WIDTH
<COMBINING_KAVYKA_ABOVE_LEFT> 0
<COMBINING_DOT_ABOVE_LEFT> 0
<COMBINING_WIDE_INVERTED_BRIDGE_BELOW> 0
+<COMBINING_DOT_BELOW_LEFT> 0
<COMBINING_DELETION_MARK> 0
<COMBINING_DOUBLE_INVERTED_BREVE_BELOW> 0
<COMBINING_ALMOST_EQUAL_TO_BELOW> 0
@@ -1644,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
@@ -2076,6 +2283,11 @@ WIDTH
<BOPOMOFO_LETTER_GH> 2
<BOPOMOFO_LETTER_LH> 2
<BOPOMOFO_LETTER_ZY> 2
+<BOPOMOFO_FINAL_LETTER_G> 2
+<BOPOMOFO_LETTER_GW> 2
+<BOPOMOFO_LETTER_KW> 2
+<BOPOMOFO_LETTER_OE> 2
+<BOPOMOFO_LETTER_AH> 2
<CJK_STROKE_T> 2
<CJK_STROKE_WG> 2
<CJK_STROKE_XG> 2
@@ -2112,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
@@ -2374,6 +2587,7 @@ WIDTH
<CIRCLED_KATAKANA_WI> 2
<CIRCLED_KATAKANA_WE> 2
<CIRCLED_KATAKANA_WO> 2
+<SQUARE_ERA_NAME_REIWA> 2
<SQUARE_APAATO> 2
<SQUARE_ARUHUA> 2
<SQUARE_ANPEA> 2
@@ -9212,6 +9426,16 @@ WIDTH
<CJK_UNIFIED_IDEOGRAPH-4DB3> 2
<CJK_UNIFIED_IDEOGRAPH-4DB4> 2
<CJK_UNIFIED_IDEOGRAPH-4DB5> 2
+<CJK_UNIFIED_IDEOGRAPH-4DB6> 2
+<CJK_UNIFIED_IDEOGRAPH-4DB7> 2
+<CJK_UNIFIED_IDEOGRAPH-4DB8> 2
+<CJK_UNIFIED_IDEOGRAPH-4DB9> 2
+<CJK_UNIFIED_IDEOGRAPH-4DBA> 2
+<CJK_UNIFIED_IDEOGRAPH-4DBB> 2
+<CJK_UNIFIED_IDEOGRAPH-4DBC> 2
+<CJK_UNIFIED_IDEOGRAPH-4DBD> 2
+<CJK_UNIFIED_IDEOGRAPH-4DBE> 2
+<CJK_UNIFIED_IDEOGRAPH-4DBF> 2
<CJK_UNIFIED_IDEOGRAPH-4E00> 2
<CJK_UNIFIED_IDEOGRAPH-4E01> 2
<CJK_UNIFIED_IDEOGRAPH-4E02> 2
@@ -30188,6 +30412,22 @@ WIDTH
<CJK_UNIFIED_IDEOGRAPH-9FED> 2
<CJK_UNIFIED_IDEOGRAPH-9FEE> 2
<CJK_UNIFIED_IDEOGRAPH-9FEF> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF0> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF1> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF2> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF3> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF4> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF5> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF6> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF7> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF8> 2
+<CJK_UNIFIED_IDEOGRAPH-9FF9> 2
+<CJK_UNIFIED_IDEOGRAPH-9FFA> 2
+<CJK_UNIFIED_IDEOGRAPH-9FFB> 2
+<CJK_UNIFIED_IDEOGRAPH-9FFC> 2
+<CJK_UNIFIED_IDEOGRAPH-9FFD> 2
+<CJK_UNIFIED_IDEOGRAPH-9FFE> 2
+<CJK_UNIFIED_IDEOGRAPH-9FFF> 2
<YI_SYLLABLE_IT> 2
<YI_SYLLABLE_IX> 2
<YI_SYLLABLE_I> 2
@@ -31434,6 +31674,7 @@ WIDTH
<SYLOTI_NAGRI_VOWEL_SIGN_U> 0
<SYLOTI_NAGRI_VOWEL_SIGN_E> 0
<SYLOTI_NAGRI_VOWEL_SIGN_OO> 0
+<SYLOTI_NAGRI_SIGN_ALTERNATE_HASANTA> 0
<SAURASHTRA_SIGN_ANUSVARA> 0
<SAURASHTRA_SIGN_VISARGA> 0
<SAURASHTRA_CONSONANT_SIGN_HAARU> 0
@@ -43465,6 +43706,11 @@ WIDTH
<HANIFI_ROHINGYA_SIGN_TAHALA> 0
<HANIFI_ROHINGYA_SIGN_TANA> 0
<HANIFI_ROHINGYA_SIGN_TASSI> 0
+<YEZIDI_COMBINING_HAMZA_MARK> 0
+<YEZIDI_COMBINING_MADDA_MARK> 0
+<ARABIC_SMALL_LOW_WORD_SAKTA> 0
+<ARABIC_SMALL_LOW_WORD_QASR> 0
+<ARABIC_SMALL_LOW_WORD_MADDA> 0
<SOGDIAN_COMBINING_DOT_BELOW> 0
<SOGDIAN_COMBINING_TWO_DOTS_BELOW> 0
<SOGDIAN_COMBINING_DOT_ABOVE> 0
@@ -43476,6 +43722,10 @@ WIDTH
<SOGDIAN_COMBINING_LONG_HOOK_BELOW> 0
<SOGDIAN_COMBINING_RESH_BELOW> 0
<SOGDIAN_COMBINING_STROKE_BELOW> 0
+<OLD_UYGHUR_COMBINING_DOT_ABOVE> 0
+<OLD_UYGHUR_COMBINING_DOT_BELOW> 0
+<OLD_UYGHUR_COMBINING_TWO_DOTS_ABOVE> 0
+<OLD_UYGHUR_COMBINING_TWO_DOTS_BELOW> 0
<BRAHMI_SIGN_CANDRABINDU> 0
<BRAHMI_SIGN_ANUSVARA> 0
<BRAHMI_SIGN_VISARGA> 0
@@ -43494,6 +43744,9 @@ WIDTH
<BRAHMI_VOWEL_SIGN_O> 0
<BRAHMI_VOWEL_SIGN_AU> 0
<BRAHMI_VIRAMA> 0
+<BRAHMI_SIGN_OLD_TAMIL_VIRAMA> 0
+<BRAHMI_VOWEL_SIGN_OLD_TAMIL_SHORT_E> 0
+<BRAHMI_VOWEL_SIGN_OLD_TAMIL_SHORT_O> 0
<BRAHMI_NUMBER_JOINER> 0
<KAITHI_SIGN_CANDRABINDU> 0
<KAITHI_SIGN_ANUSVARA> 0
@@ -43510,6 +43763,7 @@ WIDTH
<KAITHI_SIGN_VIRAMA> 0
<KAITHI_SIGN_NUKTA> 0
<KAITHI_NUMBER_SIGN> 0
+<KAITHI_VOWEL_SIGN_VOCALIC_R> 0
<KAITHI_NUMBER_SIGN_ABOVE> 0
<CHAKMA_SIGN_CANDRABINDU> 0
<CHAKMA_SIGN_ANUSVARA> 0
@@ -43552,6 +43806,8 @@ WIDTH
<SHARADA_SIGN_NUKTA> 0
<SHARADA_VOWEL_MODIFIER_MARK> 0
<SHARADA_EXTRA_SHORT_VOWEL_MARK> 0
+<SHARADA_VOWEL_SIGN_PRISHTHAMATRA_E> 0
+<SHARADA_SIGN_INVERTED_CANDRABINDU> 0
<KHOJKI_VOWEL_SIGN_AA> 0
<KHOJKI_VOWEL_SIGN_I> 0
<KHOJKI_VOWEL_SIGN_II> 0
@@ -43565,6 +43821,7 @@ WIDTH
<KHOJKI_SIGN_NUKTA> 0
<KHOJKI_SIGN_SHADDA> 0
<KHOJKI_SIGN_SUKUN> 0
+<KHOJKI_VOWEL_SIGN_VOCALIC_R> 0
<KHUDAWADI_SIGN_ANUSVARA> 0
<KHUDAWADI_VOWEL_SIGN_AA> 0
<KHUDAWADI_VOWEL_SIGN_I> 0
@@ -43727,6 +43984,21 @@ WIDTH
<DOGRA_SIGN_VISARGA> 0
<DOGRA_SIGN_VIRAMA> 0
<DOGRA_SIGN_NUKTA> 0
+<DIVES_AKURU_VOWEL_SIGN_AA> 0
+<DIVES_AKURU_VOWEL_SIGN_I> 0
+<DIVES_AKURU_VOWEL_SIGN_II> 0
+<DIVES_AKURU_VOWEL_SIGN_U> 0
+<DIVES_AKURU_VOWEL_SIGN_UU> 0
+<DIVES_AKURU_VOWEL_SIGN_E> 0
+<DIVES_AKURU_VOWEL_SIGN_AI> 0
+<DIVES_AKURU_VOWEL_SIGN_O> 0
+<DIVES_AKURU_SIGN_ANUSVARA> 0
+<DIVES_AKURU_SIGN_CANDRABINDU> 0
+<DIVES_AKURU_SIGN_HALANTA> 0
+<DIVES_AKURU_VIRAMA> 0
+<DIVES_AKURU_MEDIAL_YA> 0
+<DIVES_AKURU_MEDIAL_RA> 0
+<DIVES_AKURU_SIGN_NUKTA> 0
<NANDINAGARI_VOWEL_SIGN_AA> 0
<NANDINAGARI_VOWEL_SIGN_I> 0
<NANDINAGARI_VOWEL_SIGN_II> 0
@@ -43876,6 +44148,21 @@ WIDTH
<MAKASAR_VOWEL_SIGN_U> 0
<MAKASAR_VOWEL_SIGN_E> 0
<MAKASAR_VOWEL_SIGN_O> 0
+<KAWI_SIGN_CANDRABINDU> 0
+<KAWI_SIGN_ANUSVARA> 0
+<KAWI_SIGN_VISARGA> 0
+<KAWI_VOWEL_SIGN_AA> 0
+<KAWI_VOWEL_SIGN_ALTERNATE_AA> 0
+<KAWI_VOWEL_SIGN_I> 0
+<KAWI_VOWEL_SIGN_II> 0
+<KAWI_VOWEL_SIGN_U> 0
+<KAWI_VOWEL_SIGN_UU> 0
+<KAWI_VOWEL_SIGN_VOCALIC_R> 0
+<KAWI_VOWEL_SIGN_E> 0
+<KAWI_VOWEL_SIGN_AI> 0
+<KAWI_VOWEL_SIGN_EU> 0
+<KAWI_SIGN_KILLER> 0
+<KAWI_CONJOINER> 0
<EGYPTIAN_HIEROGLYPH_VERTICAL_JOINER> 0
<EGYPTIAN_HIEROGLYPH_HORIZONTAL_JOINER> 0
<EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_START> 0
@@ -43885,6 +44172,29 @@ WIDTH
<EGYPTIAN_HIEROGLYPH_OVERLAY_MIDDLE> 0
<EGYPTIAN_HIEROGLYPH_BEGIN_SEGMENT> 0
<EGYPTIAN_HIEROGLYPH_END_SEGMENT> 0
+<EGYPTIAN_HIEROGLYPH_INSERT_AT_MIDDLE> 0
+<EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP> 0
+<EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM> 0
+<EGYPTIAN_HIEROGLYPH_BEGIN_ENCLOSURE> 0
+<EGYPTIAN_HIEROGLYPH_END_ENCLOSURE> 0
+<EGYPTIAN_HIEROGLYPH_BEGIN_WALLED_ENCLOSURE> 0
+<EGYPTIAN_HIEROGLYPH_END_WALLED_ENCLOSURE> 0
+<EGYPTIAN_HIEROGLYPH_MIRROR_HORIZONTALLY> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_START> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_START> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_START> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_END> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_START_AND_TOP_END> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_START_AND_TOP> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_END> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_START_AND_BOTTOM_END> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_START_AND_BOTTOM> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_END> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_TOP_AND_END> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED_AT_BOTTOM_AND_END> 0
+<EGYPTIAN_HIEROGLYPH_MODIFIER_DAMAGED> 0
<BASSA_VAH_COMBINING_HIGH_TONE> 0
<BASSA_VAH_COMBINING_LOW_TONE> 0
<BASSA_VAH_COMBINING_MID_TONE> 0
@@ -43961,6 +44271,9 @@ WIDTH
<NUSHU_ITERATION_MARK> 2
<OLD_CHINESE_HOOK_MARK> 2
<OLD_CHINESE_ITERATION_MARK> 2
+<KHITAN_SMALL_SCRIPT_FILLER> 0
+<VIETNAMESE_ALTERNATE_READING_MARK_CA> 2
+<VIETNAMESE_ALTERNATE_READING_MARK_NHAY> 2
<TANGUT_IDEOGRAPH-17000> 2
<TANGUT_IDEOGRAPH-17001> 2
<TANGUT_IDEOGRAPH-17002> 2
@@ -50852,6 +51165,511 @@ WIDTH
<TANGUT_COMPONENT-753> 2
<TANGUT_COMPONENT-754> 2
<TANGUT_COMPONENT-755> 2
+<TANGUT_COMPONENT-756> 2
+<TANGUT_COMPONENT-757> 2
+<TANGUT_COMPONENT-758> 2
+<TANGUT_COMPONENT-759> 2
+<TANGUT_COMPONENT-760> 2
+<TANGUT_COMPONENT-761> 2
+<TANGUT_COMPONENT-762> 2
+<TANGUT_COMPONENT-763> 2
+<TANGUT_COMPONENT-764> 2
+<TANGUT_COMPONENT-765> 2
+<TANGUT_COMPONENT-766> 2
+<TANGUT_COMPONENT-767> 2
+<TANGUT_COMPONENT-768> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B00> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B01> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B02> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B03> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B04> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B05> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B06> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B07> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B08> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B09> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B0A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B0B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B0C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B0D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B0E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B0F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B10> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B11> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B12> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B13> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B14> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B15> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B16> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B17> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B18> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B19> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B1A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B1B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B1C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B1D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B1E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B1F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B20> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B21> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B22> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B23> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B24> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B25> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B26> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B27> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B28> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B29> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B2A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B2B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B2C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B2D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B2E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B2F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B30> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B31> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B32> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B33> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B34> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B35> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B36> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B37> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B38> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B39> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B3A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B3B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B3C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B3D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B3E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B3F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B40> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B41> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B42> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B43> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B44> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B45> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B46> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B47> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B48> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B49> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B4A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B4B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B4C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B4D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B4E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B4F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B50> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B51> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B52> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B53> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B54> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B55> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B56> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B57> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B58> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B59> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B5A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B5B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B5C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B5D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B5E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B5F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B60> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B61> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B62> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B63> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B64> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B65> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B66> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B67> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B68> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B69> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B6A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B6B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B6C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B6D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B6E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B6F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B70> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B71> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B72> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B73> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B74> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B75> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B76> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B77> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B78> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B79> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B7A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B7B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B7C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B7D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B7E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B7F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B80> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B81> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B82> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B83> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B84> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B85> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B86> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B87> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B88> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B89> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B8A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B8B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B8C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B8D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B8E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B8F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B90> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B91> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B92> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B93> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B94> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B95> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B96> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B97> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B98> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B99> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B9A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B9B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B9C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B9D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B9E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18B9F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BA9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BAA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BAB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BAC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BAD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BAE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BAF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BB9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BBA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BBB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BBC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BBD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BBE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BBF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BC9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BCA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BCB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BCC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BCD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BCE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BCF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BD9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BDA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BDB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BDC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BDD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BDE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BDF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BE9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BEA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BEB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BEC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BED> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BEE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BEF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BF9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BFA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BFB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BFC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BFD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BFE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18BFF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C00> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C01> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C02> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C03> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C04> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C05> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C06> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C07> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C08> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C09> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C0A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C0B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C0C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C0D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C0E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C0F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C10> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C11> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C12> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C13> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C14> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C15> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C16> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C17> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C18> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C19> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C1A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C1B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C1C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C1D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C1E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C1F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C20> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C21> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C22> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C23> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C24> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C25> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C26> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C27> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C28> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C29> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C2A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C2B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C2C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C2D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C2E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C2F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C30> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C31> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C32> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C33> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C34> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C35> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C36> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C37> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C38> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C39> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C3A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C3B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C3C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C3D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C3E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C3F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C40> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C41> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C42> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C43> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C44> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C45> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C46> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C47> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C48> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C49> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C4A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C4B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C4C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C4D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C4E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C4F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C50> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C51> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C52> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C53> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C54> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C55> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C56> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C57> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C58> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C59> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C5A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C5B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C5C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C5D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C5E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C5F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C60> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C61> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C62> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C63> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C64> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C65> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C66> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C67> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C68> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C69> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C6A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C6B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C6C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C6D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C6E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C6F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C70> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C71> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C72> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C73> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C74> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C75> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C76> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C77> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C78> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C79> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C7A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C7B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C7C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C7D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C7E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C7F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C80> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C81> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C82> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C83> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C84> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C85> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C86> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C87> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C88> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C89> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C8A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C8B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C8C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C8D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C8E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C8F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C90> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C91> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C92> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C93> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C94> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C95> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C96> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C97> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C98> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C99> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C9A> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C9B> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C9C> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C9D> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C9E> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18C9F> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CA9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CAA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CAB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CAC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CAD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CAE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CAF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CB9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CBA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CBB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CBC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CBD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CBE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CBF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC5> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC6> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC7> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC8> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CC9> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CCA> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CCB> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CCC> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CCD> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CCE> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CCF> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CD0> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CD1> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CD2> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CD3> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CD4> 2
+<KHITAN_SMALL_SCRIPT_CHARACTER-18CD5> 2
+<TANGUT_IDEOGRAPH-18D00> 2
+<TANGUT_IDEOGRAPH-18D01> 2
+<TANGUT_IDEOGRAPH-18D02> 2
+<TANGUT_IDEOGRAPH-18D03> 2
+<TANGUT_IDEOGRAPH-18D04> 2
+<TANGUT_IDEOGRAPH-18D05> 2
+<TANGUT_IDEOGRAPH-18D06> 2
+<TANGUT_IDEOGRAPH-18D07> 2
+<TANGUT_IDEOGRAPH-18D08> 2
+<KATAKANA_LETTER_MINNAN_TONE-2> 2
+<KATAKANA_LETTER_MINNAN_TONE-3> 2
+<KATAKANA_LETTER_MINNAN_TONE-4> 2
+<KATAKANA_LETTER_MINNAN_TONE-5> 2
+<KATAKANA_LETTER_MINNAN_TONE-7> 2
+<KATAKANA_LETTER_MINNAN_TONE-8> 2
+<KATAKANA_LETTER_MINNAN_NASALIZED_TONE-1> 2
+<KATAKANA_LETTER_MINNAN_NASALIZED_TONE-2> 2
+<KATAKANA_LETTER_MINNAN_NASALIZED_TONE-3> 2
+<KATAKANA_LETTER_MINNAN_NASALIZED_TONE-4> 2
+<KATAKANA_LETTER_MINNAN_NASALIZED_TONE-5> 2
+<KATAKANA_LETTER_MINNAN_NASALIZED_TONE-7> 2
+<KATAKANA_LETTER_MINNAN_NASALIZED_TONE-8> 2
<KATAKANA_LETTER_ARCHAIC_E> 2
<HIRAGANA_LETTER_ARCHAIC_YE> 2
<HENTAIGANA_LETTER_A-1> 2
@@ -51139,9 +51957,15 @@ WIDTH
<HENTAIGANA_LETTER_WO-7> 2
<HENTAIGANA_LETTER_N-MU-MO-1> 2
<HENTAIGANA_LETTER_N-MU-MO-2> 2
+<HIRAGANA_LETTER_ARCHAIC_WU> 2
+<KATAKANA_LETTER_ARCHAIC_YI> 2
+<KATAKANA_LETTER_ARCHAIC_YE> 2
+<KATAKANA_LETTER_ARCHAIC_WU> 2
+<HIRAGANA_LETTER_SMALL_KO> 2
<HIRAGANA_LETTER_SMALL_WI> 2
<HIRAGANA_LETTER_SMALL_WE> 2
<HIRAGANA_LETTER_SMALL_WO> 2
+<KATAKANA_LETTER_SMALL_KO> 2
<KATAKANA_LETTER_SMALL_WI> 2
<KATAKANA_LETTER_SMALL_WE> 2
<KATAKANA_LETTER_SMALL_WO> 2
@@ -51548,6 +52372,75 @@ WIDTH
<SHORTHAND_FORMAT_CONTINUING_OVERLAP> 0
<SHORTHAND_FORMAT_DOWN_STEP> 0
<SHORTHAND_FORMAT_UP_STEP> 0
+<ZNAMENNY_COMBINING_MARK_GORAZDO_NIZKO_S_KRYZHEM_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_NIZKO_S_KRYZHEM_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_TSATA_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_GORAZDO_NIZKO_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_NIZKO_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_SREDNE_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_MALO_POVYSHE_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_POVYSHE_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_VYSOKO_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_MALO_POVYSHE_S_KHOKHLOM_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_POVYSHE_S_KHOKHLOM_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_VYSOKO_S_KHOKHLOM_ON_LEFT> 0
+<ZNAMENNY_COMBINING_MARK_GORAZDO_NIZKO_S_KRYZHEM_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_NIZKO_S_KRYZHEM_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_TSATA_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_GORAZDO_NIZKO_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_NIZKO_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_SREDNE_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_MALO_POVYSHE_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_POVYSHE_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_VYSOKO_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_MALO_POVYSHE_S_KHOKHLOM_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_POVYSHE_S_KHOKHLOM_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_VYSOKO_S_KHOKHLOM_ON_RIGHT> 0
+<ZNAMENNY_COMBINING_MARK_TSATA_S_KRYZHEM> 0
+<ZNAMENNY_COMBINING_MARK_MALO_POVYSHE_S_KRYZHEM> 0
+<ZNAMENNY_COMBINING_MARK_STRANNO_MALO_POVYSHE> 0
+<ZNAMENNY_COMBINING_MARK_POVYSHE_S_KRYZHEM> 0
+<ZNAMENNY_COMBINING_MARK_POVYSHE_STRANNO> 0
+<ZNAMENNY_COMBINING_MARK_VYSOKO_S_KRYZHEM> 0
+<ZNAMENNY_COMBINING_MARK_MALO_POVYSHE_STRANNO> 0
+<ZNAMENNY_COMBINING_MARK_GORAZDO_VYSOKO> 0
+<ZNAMENNY_COMBINING_MARK_ZELO> 0
+<ZNAMENNY_COMBINING_MARK_ON> 0
+<ZNAMENNY_COMBINING_MARK_RAVNO> 0
+<ZNAMENNY_COMBINING_MARK_TIKHAYA> 0
+<ZNAMENNY_COMBINING_MARK_BORZAYA> 0
+<ZNAMENNY_COMBINING_MARK_UDARKA> 0
+<ZNAMENNY_COMBINING_MARK_PODVERTKA> 0
+<ZNAMENNY_COMBINING_MARK_LOMKA> 0
+<ZNAMENNY_COMBINING_MARK_KUPNAYA> 0
+<ZNAMENNY_COMBINING_MARK_KACHKA> 0
+<ZNAMENNY_COMBINING_MARK_ZEVOK> 0
+<ZNAMENNY_COMBINING_MARK_SKOBA> 0
+<ZNAMENNY_COMBINING_MARK_RAZSEKA> 0
+<ZNAMENNY_COMBINING_MARK_KRYZH_ON_LEFT> 0
+<ZNAMENNY_COMBINING_TONAL_RANGE_MARK_MRACHNO> 0
+<ZNAMENNY_COMBINING_TONAL_RANGE_MARK_SVETLO> 0
+<ZNAMENNY_COMBINING_TONAL_RANGE_MARK_TRESVETLO> 0
+<ZNAMENNY_COMBINING_MARK_ZADERZHKA> 0
+<ZNAMENNY_COMBINING_MARK_DEMESTVENNY_ZADERZHKA> 0
+<ZNAMENNY_COMBINING_MARK_OTSECHKA> 0
+<ZNAMENNY_COMBINING_MARK_PODCHASHIE> 0
+<ZNAMENNY_COMBINING_MARK_PODCHASHIE_WITH_VERTICAL_STROKE> 0
+<ZNAMENNY_COMBINING_MARK_CHASHKA> 0
+<ZNAMENNY_COMBINING_MARK_CHASHKA_POLNAYA> 0
+<ZNAMENNY_COMBINING_MARK_OBLACHKO> 0
+<ZNAMENNY_COMBINING_MARK_SOROCHYA_NOZHKA> 0
+<ZNAMENNY_COMBINING_MARK_TOCHKA> 0
+<ZNAMENNY_COMBINING_MARK_DVOETOCHIE> 0
+<ZNAMENNY_COMBINING_ATTACHING_VERTICAL_OMET> 0
+<ZNAMENNY_COMBINING_MARK_CURVED_OMET> 0
+<ZNAMENNY_COMBINING_MARK_KRYZH> 0
+<ZNAMENNY_COMBINING_LOWER_TONAL_RANGE_INDICATOR> 0
+<ZNAMENNY_PRIZNAK_MODIFIER_LEVEL-2> 0
+<ZNAMENNY_PRIZNAK_MODIFIER_LEVEL-3> 0
+<ZNAMENNY_PRIZNAK_MODIFIER_DIRECTION_FLIP> 0
+<ZNAMENNY_PRIZNAK_MODIFIER_KRYZH> 0
+<ZNAMENNY_PRIZNAK_MODIFIER_ROG> 0
<MUSICAL_SYMBOL_COMBINING_STEM> 0
<MUSICAL_SYMBOL_COMBINING_SPRECHGESANG_STEM> 0
<MUSICAL_SYMBOL_COMBINING_TREMOLO-1> 0
@@ -51754,6 +52647,7 @@ WIDTH
<COMBINING_GLAGOLITIC_LETTER_BIG_YUS> 0
<COMBINING_GLAGOLITIC_LETTER_IOTATED_BIG_YUS> 0
<COMBINING_GLAGOLITIC_LETTER_FITA> 0
+<COMBINING_CYRILLIC_SMALL_LETTER_BYELORUSSIAN-UKRAINIAN_I> 0
<NYIAKENG_PUACHUE_HMONG_TONE-B> 0
<NYIAKENG_PUACHUE_HMONG_TONE-M> 0
<NYIAKENG_PUACHUE_HMONG_TONE-J> 0
@@ -51761,10 +52655,15 @@ WIDTH
<NYIAKENG_PUACHUE_HMONG_TONE-S> 0
<NYIAKENG_PUACHUE_HMONG_TONE-G> 0
<NYIAKENG_PUACHUE_HMONG_TONE-D> 0
+<TOTO_SIGN_RISING_TONE> 0
<WANCHO_TONE_TUP> 0
<WANCHO_TONE_TUPNI> 0
<WANCHO_TONE_KOI> 0
<WANCHO_TONE_KOINI> 0
+<NAG_MUNDARI_SIGN_MUHOR> 0
+<NAG_MUNDARI_SIGN_TOYOR> 0
+<NAG_MUNDARI_SIGN_IKIR> 0
+<NAG_MUNDARI_SIGN_SUTUH> 0
<MENDE_KIKAKUI_COMBINING_NUMBER_TEENS> 0
<MENDE_KIKAKUI_COMBINING_NUMBER_TENS> 0
<MENDE_KIKAKUI_COMBINING_NUMBER_HUNDREDS> 0
@@ -52570,6 +53469,12 @@ WIDTH
<OCTAGONAL_SIGN> 2
<SHOPPING_TROLLEY> 2
<HINDU_TEMPLE> 2
+<HUT> 2
+<ELEVATOR> 2
+<WIRELESS> 2
+<PLAYGROUND_SLIDE> 2
+<WHEEL> 2
+<RING_BUOY> 2
<AIRPLANE_DEPARTURE> 2
<AIRPLANE_ARRIVING> 2
<SCOOTER> 2
@@ -52579,6 +53484,8 @@ WIDTH
<FLYING_SAUCER> 2
<SKATEBOARD> 2
<AUTO_RICKSHAW> 2
+<PICKUP_TRUCK> 2
+<ROLLER_SKATE> 2
<LARGE_ORANGE_CIRCLE> 2
<LARGE_YELLOW_CIRCLE> 2
<LARGE_GREEN_CIRCLE> 2
@@ -52591,6 +53498,8 @@ WIDTH
<LARGE_GREEN_SQUARE> 2
<LARGE_PURPLE_SQUARE> 2
<LARGE_BROWN_SQUARE> 2
+<HEAVY_EQUALS_SIGN> 2
+<PINCHED_FINGERS> 2
<WHITE_HEART> 2
<BROWN_HEART> 2
<PINCHING_HAND> 2
@@ -52690,10 +53599,14 @@ WIDTH
<BAGEL> 2
<SMILING_FACE_WITH_SMILING_EYES_AND_THREE_HEARTS> 2
<YAWNING_FACE> 2
+<SMILING_FACE_WITH_TEAR> 2
<FACE_WITH_PARTY_HORN_AND_PARTY_HAT> 2
<FACE_WITH_UNEVEN_EYES_AND_WAVY_MOUTH> 2
<OVERHEATED_FACE> 2
<FREEZING_FACE> 2
+<NINJA> 2
+<DISGUISED_FACE> 2
+<FACE_HOLDING_BACK_TEARS> 2
<FACE_WITH_PLEADING_EYES> 2
<SARI> 2
<LAB_COAT> 2
@@ -52735,12 +53648,17 @@ WIDTH
<MICROBE> 2
<BADGER> 2
<SWAN> 2
+<MAMMOTH> 2
+<DODO> 2
<SLOTH> 2
<OTTER> 2
<ORANGUTAN> 2
<SKUNK> 2
<FLAMINGO> 2
<OYSTER> 2
+<BEAVER> 2
+<BISON> 2
+<SEAL> 2
<GUIDE_DOG> 2
<PROBING_CANE> 2
<EMOJI_COMPONENT_RED_HAIR> 2
@@ -52770,6 +53688,8 @@ WIDTH
<BUTTER> 2
<MATE_DRINK> 2
<ICE_CUBE> 2
+<BUBBLE_TEA> 2
+<TROLL> 2
<STANDING_PERSON> 2
<KNEELING_PERSON> 2
<DEAF_PERSON> 2
@@ -52825,18 +53745,109 @@ WIDTH
<ONE-PIECE_SWIMSUIT> 2
<BRIEFS> 2
<SHORTS> 2
+<THONG_SANDAL> 2
+<LIGHT_BLUE_HEART> 2
+<GREY_HEART> 2
+<PINK_HEART> 2
<DROP_OF_BLOOD> 2
<ADHESIVE_BANDAGE> 2
<STETHOSCOPE> 2
+<X-RAY> 2
+<CRUTCH> 2
<YO-YO> 2
<KITE> 2
<PARACHUTE> 2
+<BOOMERANG> 2
+<MAGIC_WAND> 2
+<PINATA> 2
+<NESTING_DOLLS> 2
+<MARACAS> 2
+<FLUTE> 2
<RINGED_PLANET> 2
<CHAIR> 2
<RAZOR> 2
<AXE> 2
<DIYA_LAMP> 2
<BANJO> 2
+<MILITARY_HELMET> 2
+<ACCORDION> 2
+<LONG_DRUM> 2
+<COIN> 2
+<CARPENTRY_SAW> 2
+<SCREWDRIVER> 2
+<LADDER> 2
+<HOOK> 2
+<MIRROR> 2
+<WINDOW> 2
+<PLUNGER> 2
+<SEWING_NEEDLE> 2
+<KNOT> 2
+<BUCKET> 2
+<MOUSE_TRAP> 2
+<TOOTHBRUSH> 2
+<HEADSTONE> 2
+<PLACARD> 2
+<ROCK> 2
+<MIRROR_BALL> 2
+<IDENTIFICATION_CARD> 2
+<LOW_BATTERY> 2
+<HAMSA> 2
+<FOLDING_HAND_FAN> 2
+<HAIR_PICK> 2
+<KHANDA> 2
+<FLY> 2
+<WORM> 2
+<BEETLE> 2
+<COCKROACH> 2
+<POTTED_PLANT> 2
+<WOOD> 2
+<FEATHER> 2
+<LOTUS> 2
+<CORAL> 2
+<EMPTY_NEST> 2
+<NEST_WITH_EGGS> 2
+<HYACINTH> 2
+<JELLYFISH> 2
+<WING> 2
+<GOOSE> 2
+<ANATOMICAL_HEART> 2
+<LUNGS> 2
+<PEOPLE_HUGGING> 2
+<PREGNANT_MAN> 2
+<PREGNANT_PERSON> 2
+<PERSON_WITH_CROWN> 2
+<MOOSE> 2
+<DONKEY> 2
+<BLUEBERRIES> 2
+<BELL_PEPPER> 2
+<OLIVE> 2
+<FLATBREAD> 2
+<TAMALE> 2
+<FONDUE> 2
+<TEAPOT> 2
+<POURING_LIQUID> 2
+<BEANS> 2
+<JAR> 2
+<GINGER_ROOT> 2
+<PEA_POD> 2
+<MELTING_FACE> 2
+<SALUTING_FACE> 2
+<FACE_WITH_OPEN_EYES_AND_HAND_OVER_MOUTH> 2
+<FACE_WITH_PEEKING_EYE> 2
+<FACE_WITH_DIAGONAL_MOUTH> 2
+<DOTTED_LINE_FACE> 2
+<BITING_LIP> 2
+<BUBBLES> 2
+<SHAKING_FACE> 2
+<HAND_WITH_INDEX_FINGER_AND_THUMB_CROSSED> 2
+<RIGHTWARDS_HAND> 2
+<LEFTWARDS_HAND> 2
+<PALM_DOWN_HAND> 2
+<PALM_UP_HAND> 2
+<INDEX_POINTING_AT_THE_VIEWER> 2
+<HEART_HANDS> 2
+<LEFTWARDS_PUSHING_HAND> 2
+<RIGHTWARDS_PUSHING_HAND> 2
<CJK_UNIFIED_IDEOGRAPH-20000> 2
<CJK_UNIFIED_IDEOGRAPH-20001> 2
<CJK_UNIFIED_IDEOGRAPH-20002> 2
@@ -95548,6 +96559,15 @@ WIDTH
<CJK_UNIFIED_IDEOGRAPH-2A6D4> 2
<CJK_UNIFIED_IDEOGRAPH-2A6D5> 2
<CJK_UNIFIED_IDEOGRAPH-2A6D6> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6D7> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6D8> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6D9> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6DA> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6DB> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6DC> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6DD> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6DE> 2
+<CJK_UNIFIED_IDEOGRAPH-2A6DF> 2
<CJK_UNIFIED_IDEOGRAPH-2A700> 2
<CJK_UNIFIED_IDEOGRAPH-2A701> 2
<CJK_UNIFIED_IDEOGRAPH-2A702> 2
@@ -99697,6 +100717,11 @@ WIDTH
<CJK_UNIFIED_IDEOGRAPH-2B732> 2
<CJK_UNIFIED_IDEOGRAPH-2B733> 2
<CJK_UNIFIED_IDEOGRAPH-2B734> 2
+<CJK_UNIFIED_IDEOGRAPH-2B735> 2
+<CJK_UNIFIED_IDEOGRAPH-2B736> 2
+<CJK_UNIFIED_IDEOGRAPH-2B737> 2
+<CJK_UNIFIED_IDEOGRAPH-2B738> 2
+<CJK_UNIFIED_IDEOGRAPH-2B739> 2
<CJK_UNIFIED_IDEOGRAPH-2B740> 2
<CJK_UNIFIED_IDEOGRAPH-2B741> 2
<CJK_UNIFIED_IDEOGRAPH-2B742> 2
@@ -113154,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
@@ -113696,6 +115343,9137 @@ WIDTH
<CJK_COMPATIBILITY_IDEOGRAPH-2FA1B> 2
<CJK_COMPATIBILITY_IDEOGRAPH-2FA1C> 2
<CJK_COMPATIBILITY_IDEOGRAPH-2FA1D> 2
+<CJK_UNIFIED_IDEOGRAPH-30000> 2
+<CJK_UNIFIED_IDEOGRAPH-30001> 2
+<CJK_UNIFIED_IDEOGRAPH-30002> 2
+<CJK_UNIFIED_IDEOGRAPH-30003> 2
+<CJK_UNIFIED_IDEOGRAPH-30004> 2
+<CJK_UNIFIED_IDEOGRAPH-30005> 2
+<CJK_UNIFIED_IDEOGRAPH-30006> 2
+<CJK_UNIFIED_IDEOGRAPH-30007> 2
+<CJK_UNIFIED_IDEOGRAPH-30008> 2
+<CJK_UNIFIED_IDEOGRAPH-30009> 2
+<CJK_UNIFIED_IDEOGRAPH-3000A> 2
+<CJK_UNIFIED_IDEOGRAPH-3000B> 2
+<CJK_UNIFIED_IDEOGRAPH-3000C> 2
+<CJK_UNIFIED_IDEOGRAPH-3000D> 2
+<CJK_UNIFIED_IDEOGRAPH-3000E> 2
+<CJK_UNIFIED_IDEOGRAPH-3000F> 2
+<CJK_UNIFIED_IDEOGRAPH-30010> 2
+<CJK_UNIFIED_IDEOGRAPH-30011> 2
+<CJK_UNIFIED_IDEOGRAPH-30012> 2
+<CJK_UNIFIED_IDEOGRAPH-30013> 2
+<CJK_UNIFIED_IDEOGRAPH-30014> 2
+<CJK_UNIFIED_IDEOGRAPH-30015> 2
+<CJK_UNIFIED_IDEOGRAPH-30016> 2
+<CJK_UNIFIED_IDEOGRAPH-30017> 2
+<CJK_UNIFIED_IDEOGRAPH-30018> 2
+<CJK_UNIFIED_IDEOGRAPH-30019> 2
+<CJK_UNIFIED_IDEOGRAPH-3001A> 2
+<CJK_UNIFIED_IDEOGRAPH-3001B> 2
+<CJK_UNIFIED_IDEOGRAPH-3001C> 2
+<CJK_UNIFIED_IDEOGRAPH-3001D> 2
+<CJK_UNIFIED_IDEOGRAPH-3001E> 2
+<CJK_UNIFIED_IDEOGRAPH-3001F> 2
+<CJK_UNIFIED_IDEOGRAPH-30020> 2
+<CJK_UNIFIED_IDEOGRAPH-30021> 2
+<CJK_UNIFIED_IDEOGRAPH-30022> 2
+<CJK_UNIFIED_IDEOGRAPH-30023> 2
+<CJK_UNIFIED_IDEOGRAPH-30024> 2
+<CJK_UNIFIED_IDEOGRAPH-30025> 2
+<CJK_UNIFIED_IDEOGRAPH-30026> 2
+<CJK_UNIFIED_IDEOGRAPH-30027> 2
+<CJK_UNIFIED_IDEOGRAPH-30028> 2
+<CJK_UNIFIED_IDEOGRAPH-30029> 2
+<CJK_UNIFIED_IDEOGRAPH-3002A> 2
+<CJK_UNIFIED_IDEOGRAPH-3002B> 2
+<CJK_UNIFIED_IDEOGRAPH-3002C> 2
+<CJK_UNIFIED_IDEOGRAPH-3002D> 2
+<CJK_UNIFIED_IDEOGRAPH-3002E> 2
+<CJK_UNIFIED_IDEOGRAPH-3002F> 2
+<CJK_UNIFIED_IDEOGRAPH-30030> 2
+<CJK_UNIFIED_IDEOGRAPH-30031> 2
+<CJK_UNIFIED_IDEOGRAPH-30032> 2
+<CJK_UNIFIED_IDEOGRAPH-30033> 2
+<CJK_UNIFIED_IDEOGRAPH-30034> 2
+<CJK_UNIFIED_IDEOGRAPH-30035> 2
+<CJK_UNIFIED_IDEOGRAPH-30036> 2
+<CJK_UNIFIED_IDEOGRAPH-30037> 2
+<CJK_UNIFIED_IDEOGRAPH-30038> 2
+<CJK_UNIFIED_IDEOGRAPH-30039> 2
+<CJK_UNIFIED_IDEOGRAPH-3003A> 2
+<CJK_UNIFIED_IDEOGRAPH-3003B> 2
+<CJK_UNIFIED_IDEOGRAPH-3003C> 2
+<CJK_UNIFIED_IDEOGRAPH-3003D> 2
+<CJK_UNIFIED_IDEOGRAPH-3003E> 2
+<CJK_UNIFIED_IDEOGRAPH-3003F> 2
+<CJK_UNIFIED_IDEOGRAPH-30040> 2
+<CJK_UNIFIED_IDEOGRAPH-30041> 2
+<CJK_UNIFIED_IDEOGRAPH-30042> 2
+<CJK_UNIFIED_IDEOGRAPH-30043> 2
+<CJK_UNIFIED_IDEOGRAPH-30044> 2
+<CJK_UNIFIED_IDEOGRAPH-30045> 2
+<CJK_UNIFIED_IDEOGRAPH-30046> 2
+<CJK_UNIFIED_IDEOGRAPH-30047> 2
+<CJK_UNIFIED_IDEOGRAPH-30048> 2
+<CJK_UNIFIED_IDEOGRAPH-30049> 2
+<CJK_UNIFIED_IDEOGRAPH-3004A> 2
+<CJK_UNIFIED_IDEOGRAPH-3004B> 2
+<CJK_UNIFIED_IDEOGRAPH-3004C> 2
+<CJK_UNIFIED_IDEOGRAPH-3004D> 2
+<CJK_UNIFIED_IDEOGRAPH-3004E> 2
+<CJK_UNIFIED_IDEOGRAPH-3004F> 2
+<CJK_UNIFIED_IDEOGRAPH-30050> 2
+<CJK_UNIFIED_IDEOGRAPH-30051> 2
+<CJK_UNIFIED_IDEOGRAPH-30052> 2
+<CJK_UNIFIED_IDEOGRAPH-30053> 2
+<CJK_UNIFIED_IDEOGRAPH-30054> 2
+<CJK_UNIFIED_IDEOGRAPH-30055> 2
+<CJK_UNIFIED_IDEOGRAPH-30056> 2
+<CJK_UNIFIED_IDEOGRAPH-30057> 2
+<CJK_UNIFIED_IDEOGRAPH-30058> 2
+<CJK_UNIFIED_IDEOGRAPH-30059> 2
+<CJK_UNIFIED_IDEOGRAPH-3005A> 2
+<CJK_UNIFIED_IDEOGRAPH-3005B> 2
+<CJK_UNIFIED_IDEOGRAPH-3005C> 2
+<CJK_UNIFIED_IDEOGRAPH-3005D> 2
+<CJK_UNIFIED_IDEOGRAPH-3005E> 2
+<CJK_UNIFIED_IDEOGRAPH-3005F> 2
+<CJK_UNIFIED_IDEOGRAPH-30060> 2
+<CJK_UNIFIED_IDEOGRAPH-30061> 2
+<CJK_UNIFIED_IDEOGRAPH-30062> 2
+<CJK_UNIFIED_IDEOGRAPH-30063> 2
+<CJK_UNIFIED_IDEOGRAPH-30064> 2
+<CJK_UNIFIED_IDEOGRAPH-30065> 2
+<CJK_UNIFIED_IDEOGRAPH-30066> 2
+<CJK_UNIFIED_IDEOGRAPH-30067> 2
+<CJK_UNIFIED_IDEOGRAPH-30068> 2
+<CJK_UNIFIED_IDEOGRAPH-30069> 2
+<CJK_UNIFIED_IDEOGRAPH-3006A> 2
+<CJK_UNIFIED_IDEOGRAPH-3006B> 2
+<CJK_UNIFIED_IDEOGRAPH-3006C> 2
+<CJK_UNIFIED_IDEOGRAPH-3006D> 2
+<CJK_UNIFIED_IDEOGRAPH-3006E> 2
+<CJK_UNIFIED_IDEOGRAPH-3006F> 2
+<CJK_UNIFIED_IDEOGRAPH-30070> 2
+<CJK_UNIFIED_IDEOGRAPH-30071> 2
+<CJK_UNIFIED_IDEOGRAPH-30072> 2
+<CJK_UNIFIED_IDEOGRAPH-30073> 2
+<CJK_UNIFIED_IDEOGRAPH-30074> 2
+<CJK_UNIFIED_IDEOGRAPH-30075> 2
+<CJK_UNIFIED_IDEOGRAPH-30076> 2
+<CJK_UNIFIED_IDEOGRAPH-30077> 2
+<CJK_UNIFIED_IDEOGRAPH-30078> 2
+<CJK_UNIFIED_IDEOGRAPH-30079> 2
+<CJK_UNIFIED_IDEOGRAPH-3007A> 2
+<CJK_UNIFIED_IDEOGRAPH-3007B> 2
+<CJK_UNIFIED_IDEOGRAPH-3007C> 2
+<CJK_UNIFIED_IDEOGRAPH-3007D> 2
+<CJK_UNIFIED_IDEOGRAPH-3007E> 2
+<CJK_UNIFIED_IDEOGRAPH-3007F> 2
+<CJK_UNIFIED_IDEOGRAPH-30080> 2
+<CJK_UNIFIED_IDEOGRAPH-30081> 2
+<CJK_UNIFIED_IDEOGRAPH-30082> 2
+<CJK_UNIFIED_IDEOGRAPH-30083> 2
+<CJK_UNIFIED_IDEOGRAPH-30084> 2
+<CJK_UNIFIED_IDEOGRAPH-30085> 2
+<CJK_UNIFIED_IDEOGRAPH-30086> 2
+<CJK_UNIFIED_IDEOGRAPH-30087> 2
+<CJK_UNIFIED_IDEOGRAPH-30088> 2
+<CJK_UNIFIED_IDEOGRAPH-30089> 2
+<CJK_UNIFIED_IDEOGRAPH-3008A> 2
+<CJK_UNIFIED_IDEOGRAPH-3008B> 2
+<CJK_UNIFIED_IDEOGRAPH-3008C> 2
+<CJK_UNIFIED_IDEOGRAPH-3008D> 2
+<CJK_UNIFIED_IDEOGRAPH-3008E> 2
+<CJK_UNIFIED_IDEOGRAPH-3008F> 2
+<CJK_UNIFIED_IDEOGRAPH-30090> 2
+<CJK_UNIFIED_IDEOGRAPH-30091> 2
+<CJK_UNIFIED_IDEOGRAPH-30092> 2
+<CJK_UNIFIED_IDEOGRAPH-30093> 2
+<CJK_UNIFIED_IDEOGRAPH-30094> 2
+<CJK_UNIFIED_IDEOGRAPH-30095> 2
+<CJK_UNIFIED_IDEOGRAPH-30096> 2
+<CJK_UNIFIED_IDEOGRAPH-30097> 2
+<CJK_UNIFIED_IDEOGRAPH-30098> 2
+<CJK_UNIFIED_IDEOGRAPH-30099> 2
+<CJK_UNIFIED_IDEOGRAPH-3009A> 2
+<CJK_UNIFIED_IDEOGRAPH-3009B> 2
+<CJK_UNIFIED_IDEOGRAPH-3009C> 2
+<CJK_UNIFIED_IDEOGRAPH-3009D> 2
+<CJK_UNIFIED_IDEOGRAPH-3009E> 2
+<CJK_UNIFIED_IDEOGRAPH-3009F> 2
+<CJK_UNIFIED_IDEOGRAPH-300A0> 2
+<CJK_UNIFIED_IDEOGRAPH-300A1> 2
+<CJK_UNIFIED_IDEOGRAPH-300A2> 2
+<CJK_UNIFIED_IDEOGRAPH-300A3> 2
+<CJK_UNIFIED_IDEOGRAPH-300A4> 2
+<CJK_UNIFIED_IDEOGRAPH-300A5> 2
+<CJK_UNIFIED_IDEOGRAPH-300A6> 2
+<CJK_UNIFIED_IDEOGRAPH-300A7> 2
+<CJK_UNIFIED_IDEOGRAPH-300A8> 2
+<CJK_UNIFIED_IDEOGRAPH-300A9> 2
+<CJK_UNIFIED_IDEOGRAPH-300AA> 2
+<CJK_UNIFIED_IDEOGRAPH-300AB> 2
+<CJK_UNIFIED_IDEOGRAPH-300AC> 2
+<CJK_UNIFIED_IDEOGRAPH-300AD> 2
+<CJK_UNIFIED_IDEOGRAPH-300AE> 2
+<CJK_UNIFIED_IDEOGRAPH-300AF> 2
+<CJK_UNIFIED_IDEOGRAPH-300B0> 2
+<CJK_UNIFIED_IDEOGRAPH-300B1> 2
+<CJK_UNIFIED_IDEOGRAPH-300B2> 2
+<CJK_UNIFIED_IDEOGRAPH-300B3> 2
+<CJK_UNIFIED_IDEOGRAPH-300B4> 2
+<CJK_UNIFIED_IDEOGRAPH-300B5> 2
+<CJK_UNIFIED_IDEOGRAPH-300B6> 2
+<CJK_UNIFIED_IDEOGRAPH-300B7> 2
+<CJK_UNIFIED_IDEOGRAPH-300B8> 2
+<CJK_UNIFIED_IDEOGRAPH-300B9> 2
+<CJK_UNIFIED_IDEOGRAPH-300BA> 2
+<CJK_UNIFIED_IDEOGRAPH-300BB> 2
+<CJK_UNIFIED_IDEOGRAPH-300BC> 2
+<CJK_UNIFIED_IDEOGRAPH-300BD> 2
+<CJK_UNIFIED_IDEOGRAPH-300BE> 2
+<CJK_UNIFIED_IDEOGRAPH-300BF> 2
+<CJK_UNIFIED_IDEOGRAPH-300C0> 2
+<CJK_UNIFIED_IDEOGRAPH-300C1> 2
+<CJK_UNIFIED_IDEOGRAPH-300C2> 2
+<CJK_UNIFIED_IDEOGRAPH-300C3> 2
+<CJK_UNIFIED_IDEOGRAPH-300C4> 2
+<CJK_UNIFIED_IDEOGRAPH-300C5> 2
+<CJK_UNIFIED_IDEOGRAPH-300C6> 2
+<CJK_UNIFIED_IDEOGRAPH-300C7> 2
+<CJK_UNIFIED_IDEOGRAPH-300C8> 2
+<CJK_UNIFIED_IDEOGRAPH-300C9> 2
+<CJK_UNIFIED_IDEOGRAPH-300CA> 2
+<CJK_UNIFIED_IDEOGRAPH-300CB> 2
+<CJK_UNIFIED_IDEOGRAPH-300CC> 2
+<CJK_UNIFIED_IDEOGRAPH-300CD> 2
+<CJK_UNIFIED_IDEOGRAPH-300CE> 2
+<CJK_UNIFIED_IDEOGRAPH-300CF> 2
+<CJK_UNIFIED_IDEOGRAPH-300D0> 2
+<CJK_UNIFIED_IDEOGRAPH-300D1> 2
+<CJK_UNIFIED_IDEOGRAPH-300D2> 2
+<CJK_UNIFIED_IDEOGRAPH-300D3> 2
+<CJK_UNIFIED_IDEOGRAPH-300D4> 2
+<CJK_UNIFIED_IDEOGRAPH-300D5> 2
+<CJK_UNIFIED_IDEOGRAPH-300D6> 2
+<CJK_UNIFIED_IDEOGRAPH-300D7> 2
+<CJK_UNIFIED_IDEOGRAPH-300D8> 2
+<CJK_UNIFIED_IDEOGRAPH-300D9> 2
+<CJK_UNIFIED_IDEOGRAPH-300DA> 2
+<CJK_UNIFIED_IDEOGRAPH-300DB> 2
+<CJK_UNIFIED_IDEOGRAPH-300DC> 2
+<CJK_UNIFIED_IDEOGRAPH-300DD> 2
+<CJK_UNIFIED_IDEOGRAPH-300DE> 2
+<CJK_UNIFIED_IDEOGRAPH-300DF> 2
+<CJK_UNIFIED_IDEOGRAPH-300E0> 2
+<CJK_UNIFIED_IDEOGRAPH-300E1> 2
+<CJK_UNIFIED_IDEOGRAPH-300E2> 2
+<CJK_UNIFIED_IDEOGRAPH-300E3> 2
+<CJK_UNIFIED_IDEOGRAPH-300E4> 2
+<CJK_UNIFIED_IDEOGRAPH-300E5> 2
+<CJK_UNIFIED_IDEOGRAPH-300E6> 2
+<CJK_UNIFIED_IDEOGRAPH-300E7> 2
+<CJK_UNIFIED_IDEOGRAPH-300E8> 2
+<CJK_UNIFIED_IDEOGRAPH-300E9> 2
+<CJK_UNIFIED_IDEOGRAPH-300EA> 2
+<CJK_UNIFIED_IDEOGRAPH-300EB> 2
+<CJK_UNIFIED_IDEOGRAPH-300EC> 2
+<CJK_UNIFIED_IDEOGRAPH-300ED> 2
+<CJK_UNIFIED_IDEOGRAPH-300EE> 2
+<CJK_UNIFIED_IDEOGRAPH-300EF> 2
+<CJK_UNIFIED_IDEOGRAPH-300F0> 2
+<CJK_UNIFIED_IDEOGRAPH-300F1> 2
+<CJK_UNIFIED_IDEOGRAPH-300F2> 2
+<CJK_UNIFIED_IDEOGRAPH-300F3> 2
+<CJK_UNIFIED_IDEOGRAPH-300F4> 2
+<CJK_UNIFIED_IDEOGRAPH-300F5> 2
+<CJK_UNIFIED_IDEOGRAPH-300F6> 2
+<CJK_UNIFIED_IDEOGRAPH-300F7> 2
+<CJK_UNIFIED_IDEOGRAPH-300F8> 2
+<CJK_UNIFIED_IDEOGRAPH-300F9> 2
+<CJK_UNIFIED_IDEOGRAPH-300FA> 2
+<CJK_UNIFIED_IDEOGRAPH-300FB> 2
+<CJK_UNIFIED_IDEOGRAPH-300FC> 2
+<CJK_UNIFIED_IDEOGRAPH-300FD> 2
+<CJK_UNIFIED_IDEOGRAPH-300FE> 2
+<CJK_UNIFIED_IDEOGRAPH-300FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30100> 2
+<CJK_UNIFIED_IDEOGRAPH-30101> 2
+<CJK_UNIFIED_IDEOGRAPH-30102> 2
+<CJK_UNIFIED_IDEOGRAPH-30103> 2
+<CJK_UNIFIED_IDEOGRAPH-30104> 2
+<CJK_UNIFIED_IDEOGRAPH-30105> 2
+<CJK_UNIFIED_IDEOGRAPH-30106> 2
+<CJK_UNIFIED_IDEOGRAPH-30107> 2
+<CJK_UNIFIED_IDEOGRAPH-30108> 2
+<CJK_UNIFIED_IDEOGRAPH-30109> 2
+<CJK_UNIFIED_IDEOGRAPH-3010A> 2
+<CJK_UNIFIED_IDEOGRAPH-3010B> 2
+<CJK_UNIFIED_IDEOGRAPH-3010C> 2
+<CJK_UNIFIED_IDEOGRAPH-3010D> 2
+<CJK_UNIFIED_IDEOGRAPH-3010E> 2
+<CJK_UNIFIED_IDEOGRAPH-3010F> 2
+<CJK_UNIFIED_IDEOGRAPH-30110> 2
+<CJK_UNIFIED_IDEOGRAPH-30111> 2
+<CJK_UNIFIED_IDEOGRAPH-30112> 2
+<CJK_UNIFIED_IDEOGRAPH-30113> 2
+<CJK_UNIFIED_IDEOGRAPH-30114> 2
+<CJK_UNIFIED_IDEOGRAPH-30115> 2
+<CJK_UNIFIED_IDEOGRAPH-30116> 2
+<CJK_UNIFIED_IDEOGRAPH-30117> 2
+<CJK_UNIFIED_IDEOGRAPH-30118> 2
+<CJK_UNIFIED_IDEOGRAPH-30119> 2
+<CJK_UNIFIED_IDEOGRAPH-3011A> 2
+<CJK_UNIFIED_IDEOGRAPH-3011B> 2
+<CJK_UNIFIED_IDEOGRAPH-3011C> 2
+<CJK_UNIFIED_IDEOGRAPH-3011D> 2
+<CJK_UNIFIED_IDEOGRAPH-3011E> 2
+<CJK_UNIFIED_IDEOGRAPH-3011F> 2
+<CJK_UNIFIED_IDEOGRAPH-30120> 2
+<CJK_UNIFIED_IDEOGRAPH-30121> 2
+<CJK_UNIFIED_IDEOGRAPH-30122> 2
+<CJK_UNIFIED_IDEOGRAPH-30123> 2
+<CJK_UNIFIED_IDEOGRAPH-30124> 2
+<CJK_UNIFIED_IDEOGRAPH-30125> 2
+<CJK_UNIFIED_IDEOGRAPH-30126> 2
+<CJK_UNIFIED_IDEOGRAPH-30127> 2
+<CJK_UNIFIED_IDEOGRAPH-30128> 2
+<CJK_UNIFIED_IDEOGRAPH-30129> 2
+<CJK_UNIFIED_IDEOGRAPH-3012A> 2
+<CJK_UNIFIED_IDEOGRAPH-3012B> 2
+<CJK_UNIFIED_IDEOGRAPH-3012C> 2
+<CJK_UNIFIED_IDEOGRAPH-3012D> 2
+<CJK_UNIFIED_IDEOGRAPH-3012E> 2
+<CJK_UNIFIED_IDEOGRAPH-3012F> 2
+<CJK_UNIFIED_IDEOGRAPH-30130> 2
+<CJK_UNIFIED_IDEOGRAPH-30131> 2
+<CJK_UNIFIED_IDEOGRAPH-30132> 2
+<CJK_UNIFIED_IDEOGRAPH-30133> 2
+<CJK_UNIFIED_IDEOGRAPH-30134> 2
+<CJK_UNIFIED_IDEOGRAPH-30135> 2
+<CJK_UNIFIED_IDEOGRAPH-30136> 2
+<CJK_UNIFIED_IDEOGRAPH-30137> 2
+<CJK_UNIFIED_IDEOGRAPH-30138> 2
+<CJK_UNIFIED_IDEOGRAPH-30139> 2
+<CJK_UNIFIED_IDEOGRAPH-3013A> 2
+<CJK_UNIFIED_IDEOGRAPH-3013B> 2
+<CJK_UNIFIED_IDEOGRAPH-3013C> 2
+<CJK_UNIFIED_IDEOGRAPH-3013D> 2
+<CJK_UNIFIED_IDEOGRAPH-3013E> 2
+<CJK_UNIFIED_IDEOGRAPH-3013F> 2
+<CJK_UNIFIED_IDEOGRAPH-30140> 2
+<CJK_UNIFIED_IDEOGRAPH-30141> 2
+<CJK_UNIFIED_IDEOGRAPH-30142> 2
+<CJK_UNIFIED_IDEOGRAPH-30143> 2
+<CJK_UNIFIED_IDEOGRAPH-30144> 2
+<CJK_UNIFIED_IDEOGRAPH-30145> 2
+<CJK_UNIFIED_IDEOGRAPH-30146> 2
+<CJK_UNIFIED_IDEOGRAPH-30147> 2
+<CJK_UNIFIED_IDEOGRAPH-30148> 2
+<CJK_UNIFIED_IDEOGRAPH-30149> 2
+<CJK_UNIFIED_IDEOGRAPH-3014A> 2
+<CJK_UNIFIED_IDEOGRAPH-3014B> 2
+<CJK_UNIFIED_IDEOGRAPH-3014C> 2
+<CJK_UNIFIED_IDEOGRAPH-3014D> 2
+<CJK_UNIFIED_IDEOGRAPH-3014E> 2
+<CJK_UNIFIED_IDEOGRAPH-3014F> 2
+<CJK_UNIFIED_IDEOGRAPH-30150> 2
+<CJK_UNIFIED_IDEOGRAPH-30151> 2
+<CJK_UNIFIED_IDEOGRAPH-30152> 2
+<CJK_UNIFIED_IDEOGRAPH-30153> 2
+<CJK_UNIFIED_IDEOGRAPH-30154> 2
+<CJK_UNIFIED_IDEOGRAPH-30155> 2
+<CJK_UNIFIED_IDEOGRAPH-30156> 2
+<CJK_UNIFIED_IDEOGRAPH-30157> 2
+<CJK_UNIFIED_IDEOGRAPH-30158> 2
+<CJK_UNIFIED_IDEOGRAPH-30159> 2
+<CJK_UNIFIED_IDEOGRAPH-3015A> 2
+<CJK_UNIFIED_IDEOGRAPH-3015B> 2
+<CJK_UNIFIED_IDEOGRAPH-3015C> 2
+<CJK_UNIFIED_IDEOGRAPH-3015D> 2
+<CJK_UNIFIED_IDEOGRAPH-3015E> 2
+<CJK_UNIFIED_IDEOGRAPH-3015F> 2
+<CJK_UNIFIED_IDEOGRAPH-30160> 2
+<CJK_UNIFIED_IDEOGRAPH-30161> 2
+<CJK_UNIFIED_IDEOGRAPH-30162> 2
+<CJK_UNIFIED_IDEOGRAPH-30163> 2
+<CJK_UNIFIED_IDEOGRAPH-30164> 2
+<CJK_UNIFIED_IDEOGRAPH-30165> 2
+<CJK_UNIFIED_IDEOGRAPH-30166> 2
+<CJK_UNIFIED_IDEOGRAPH-30167> 2
+<CJK_UNIFIED_IDEOGRAPH-30168> 2
+<CJK_UNIFIED_IDEOGRAPH-30169> 2
+<CJK_UNIFIED_IDEOGRAPH-3016A> 2
+<CJK_UNIFIED_IDEOGRAPH-3016B> 2
+<CJK_UNIFIED_IDEOGRAPH-3016C> 2
+<CJK_UNIFIED_IDEOGRAPH-3016D> 2
+<CJK_UNIFIED_IDEOGRAPH-3016E> 2
+<CJK_UNIFIED_IDEOGRAPH-3016F> 2
+<CJK_UNIFIED_IDEOGRAPH-30170> 2
+<CJK_UNIFIED_IDEOGRAPH-30171> 2
+<CJK_UNIFIED_IDEOGRAPH-30172> 2
+<CJK_UNIFIED_IDEOGRAPH-30173> 2
+<CJK_UNIFIED_IDEOGRAPH-30174> 2
+<CJK_UNIFIED_IDEOGRAPH-30175> 2
+<CJK_UNIFIED_IDEOGRAPH-30176> 2
+<CJK_UNIFIED_IDEOGRAPH-30177> 2
+<CJK_UNIFIED_IDEOGRAPH-30178> 2
+<CJK_UNIFIED_IDEOGRAPH-30179> 2
+<CJK_UNIFIED_IDEOGRAPH-3017A> 2
+<CJK_UNIFIED_IDEOGRAPH-3017B> 2
+<CJK_UNIFIED_IDEOGRAPH-3017C> 2
+<CJK_UNIFIED_IDEOGRAPH-3017D> 2
+<CJK_UNIFIED_IDEOGRAPH-3017E> 2
+<CJK_UNIFIED_IDEOGRAPH-3017F> 2
+<CJK_UNIFIED_IDEOGRAPH-30180> 2
+<CJK_UNIFIED_IDEOGRAPH-30181> 2
+<CJK_UNIFIED_IDEOGRAPH-30182> 2
+<CJK_UNIFIED_IDEOGRAPH-30183> 2
+<CJK_UNIFIED_IDEOGRAPH-30184> 2
+<CJK_UNIFIED_IDEOGRAPH-30185> 2
+<CJK_UNIFIED_IDEOGRAPH-30186> 2
+<CJK_UNIFIED_IDEOGRAPH-30187> 2
+<CJK_UNIFIED_IDEOGRAPH-30188> 2
+<CJK_UNIFIED_IDEOGRAPH-30189> 2
+<CJK_UNIFIED_IDEOGRAPH-3018A> 2
+<CJK_UNIFIED_IDEOGRAPH-3018B> 2
+<CJK_UNIFIED_IDEOGRAPH-3018C> 2
+<CJK_UNIFIED_IDEOGRAPH-3018D> 2
+<CJK_UNIFIED_IDEOGRAPH-3018E> 2
+<CJK_UNIFIED_IDEOGRAPH-3018F> 2
+<CJK_UNIFIED_IDEOGRAPH-30190> 2
+<CJK_UNIFIED_IDEOGRAPH-30191> 2
+<CJK_UNIFIED_IDEOGRAPH-30192> 2
+<CJK_UNIFIED_IDEOGRAPH-30193> 2
+<CJK_UNIFIED_IDEOGRAPH-30194> 2
+<CJK_UNIFIED_IDEOGRAPH-30195> 2
+<CJK_UNIFIED_IDEOGRAPH-30196> 2
+<CJK_UNIFIED_IDEOGRAPH-30197> 2
+<CJK_UNIFIED_IDEOGRAPH-30198> 2
+<CJK_UNIFIED_IDEOGRAPH-30199> 2
+<CJK_UNIFIED_IDEOGRAPH-3019A> 2
+<CJK_UNIFIED_IDEOGRAPH-3019B> 2
+<CJK_UNIFIED_IDEOGRAPH-3019C> 2
+<CJK_UNIFIED_IDEOGRAPH-3019D> 2
+<CJK_UNIFIED_IDEOGRAPH-3019E> 2
+<CJK_UNIFIED_IDEOGRAPH-3019F> 2
+<CJK_UNIFIED_IDEOGRAPH-301A0> 2
+<CJK_UNIFIED_IDEOGRAPH-301A1> 2
+<CJK_UNIFIED_IDEOGRAPH-301A2> 2
+<CJK_UNIFIED_IDEOGRAPH-301A3> 2
+<CJK_UNIFIED_IDEOGRAPH-301A4> 2
+<CJK_UNIFIED_IDEOGRAPH-301A5> 2
+<CJK_UNIFIED_IDEOGRAPH-301A6> 2
+<CJK_UNIFIED_IDEOGRAPH-301A7> 2
+<CJK_UNIFIED_IDEOGRAPH-301A8> 2
+<CJK_UNIFIED_IDEOGRAPH-301A9> 2
+<CJK_UNIFIED_IDEOGRAPH-301AA> 2
+<CJK_UNIFIED_IDEOGRAPH-301AB> 2
+<CJK_UNIFIED_IDEOGRAPH-301AC> 2
+<CJK_UNIFIED_IDEOGRAPH-301AD> 2
+<CJK_UNIFIED_IDEOGRAPH-301AE> 2
+<CJK_UNIFIED_IDEOGRAPH-301AF> 2
+<CJK_UNIFIED_IDEOGRAPH-301B0> 2
+<CJK_UNIFIED_IDEOGRAPH-301B1> 2
+<CJK_UNIFIED_IDEOGRAPH-301B2> 2
+<CJK_UNIFIED_IDEOGRAPH-301B3> 2
+<CJK_UNIFIED_IDEOGRAPH-301B4> 2
+<CJK_UNIFIED_IDEOGRAPH-301B5> 2
+<CJK_UNIFIED_IDEOGRAPH-301B6> 2
+<CJK_UNIFIED_IDEOGRAPH-301B7> 2
+<CJK_UNIFIED_IDEOGRAPH-301B8> 2
+<CJK_UNIFIED_IDEOGRAPH-301B9> 2
+<CJK_UNIFIED_IDEOGRAPH-301BA> 2
+<CJK_UNIFIED_IDEOGRAPH-301BB> 2
+<CJK_UNIFIED_IDEOGRAPH-301BC> 2
+<CJK_UNIFIED_IDEOGRAPH-301BD> 2
+<CJK_UNIFIED_IDEOGRAPH-301BE> 2
+<CJK_UNIFIED_IDEOGRAPH-301BF> 2
+<CJK_UNIFIED_IDEOGRAPH-301C0> 2
+<CJK_UNIFIED_IDEOGRAPH-301C1> 2
+<CJK_UNIFIED_IDEOGRAPH-301C2> 2
+<CJK_UNIFIED_IDEOGRAPH-301C3> 2
+<CJK_UNIFIED_IDEOGRAPH-301C4> 2
+<CJK_UNIFIED_IDEOGRAPH-301C5> 2
+<CJK_UNIFIED_IDEOGRAPH-301C6> 2
+<CJK_UNIFIED_IDEOGRAPH-301C7> 2
+<CJK_UNIFIED_IDEOGRAPH-301C8> 2
+<CJK_UNIFIED_IDEOGRAPH-301C9> 2
+<CJK_UNIFIED_IDEOGRAPH-301CA> 2
+<CJK_UNIFIED_IDEOGRAPH-301CB> 2
+<CJK_UNIFIED_IDEOGRAPH-301CC> 2
+<CJK_UNIFIED_IDEOGRAPH-301CD> 2
+<CJK_UNIFIED_IDEOGRAPH-301CE> 2
+<CJK_UNIFIED_IDEOGRAPH-301CF> 2
+<CJK_UNIFIED_IDEOGRAPH-301D0> 2
+<CJK_UNIFIED_IDEOGRAPH-301D1> 2
+<CJK_UNIFIED_IDEOGRAPH-301D2> 2
+<CJK_UNIFIED_IDEOGRAPH-301D3> 2
+<CJK_UNIFIED_IDEOGRAPH-301D4> 2
+<CJK_UNIFIED_IDEOGRAPH-301D5> 2
+<CJK_UNIFIED_IDEOGRAPH-301D6> 2
+<CJK_UNIFIED_IDEOGRAPH-301D7> 2
+<CJK_UNIFIED_IDEOGRAPH-301D8> 2
+<CJK_UNIFIED_IDEOGRAPH-301D9> 2
+<CJK_UNIFIED_IDEOGRAPH-301DA> 2
+<CJK_UNIFIED_IDEOGRAPH-301DB> 2
+<CJK_UNIFIED_IDEOGRAPH-301DC> 2
+<CJK_UNIFIED_IDEOGRAPH-301DD> 2
+<CJK_UNIFIED_IDEOGRAPH-301DE> 2
+<CJK_UNIFIED_IDEOGRAPH-301DF> 2
+<CJK_UNIFIED_IDEOGRAPH-301E0> 2
+<CJK_UNIFIED_IDEOGRAPH-301E1> 2
+<CJK_UNIFIED_IDEOGRAPH-301E2> 2
+<CJK_UNIFIED_IDEOGRAPH-301E3> 2
+<CJK_UNIFIED_IDEOGRAPH-301E4> 2
+<CJK_UNIFIED_IDEOGRAPH-301E5> 2
+<CJK_UNIFIED_IDEOGRAPH-301E6> 2
+<CJK_UNIFIED_IDEOGRAPH-301E7> 2
+<CJK_UNIFIED_IDEOGRAPH-301E8> 2
+<CJK_UNIFIED_IDEOGRAPH-301E9> 2
+<CJK_UNIFIED_IDEOGRAPH-301EA> 2
+<CJK_UNIFIED_IDEOGRAPH-301EB> 2
+<CJK_UNIFIED_IDEOGRAPH-301EC> 2
+<CJK_UNIFIED_IDEOGRAPH-301ED> 2
+<CJK_UNIFIED_IDEOGRAPH-301EE> 2
+<CJK_UNIFIED_IDEOGRAPH-301EF> 2
+<CJK_UNIFIED_IDEOGRAPH-301F0> 2
+<CJK_UNIFIED_IDEOGRAPH-301F1> 2
+<CJK_UNIFIED_IDEOGRAPH-301F2> 2
+<CJK_UNIFIED_IDEOGRAPH-301F3> 2
+<CJK_UNIFIED_IDEOGRAPH-301F4> 2
+<CJK_UNIFIED_IDEOGRAPH-301F5> 2
+<CJK_UNIFIED_IDEOGRAPH-301F6> 2
+<CJK_UNIFIED_IDEOGRAPH-301F7> 2
+<CJK_UNIFIED_IDEOGRAPH-301F8> 2
+<CJK_UNIFIED_IDEOGRAPH-301F9> 2
+<CJK_UNIFIED_IDEOGRAPH-301FA> 2
+<CJK_UNIFIED_IDEOGRAPH-301FB> 2
+<CJK_UNIFIED_IDEOGRAPH-301FC> 2
+<CJK_UNIFIED_IDEOGRAPH-301FD> 2
+<CJK_UNIFIED_IDEOGRAPH-301FE> 2
+<CJK_UNIFIED_IDEOGRAPH-301FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30200> 2
+<CJK_UNIFIED_IDEOGRAPH-30201> 2
+<CJK_UNIFIED_IDEOGRAPH-30202> 2
+<CJK_UNIFIED_IDEOGRAPH-30203> 2
+<CJK_UNIFIED_IDEOGRAPH-30204> 2
+<CJK_UNIFIED_IDEOGRAPH-30205> 2
+<CJK_UNIFIED_IDEOGRAPH-30206> 2
+<CJK_UNIFIED_IDEOGRAPH-30207> 2
+<CJK_UNIFIED_IDEOGRAPH-30208> 2
+<CJK_UNIFIED_IDEOGRAPH-30209> 2
+<CJK_UNIFIED_IDEOGRAPH-3020A> 2
+<CJK_UNIFIED_IDEOGRAPH-3020B> 2
+<CJK_UNIFIED_IDEOGRAPH-3020C> 2
+<CJK_UNIFIED_IDEOGRAPH-3020D> 2
+<CJK_UNIFIED_IDEOGRAPH-3020E> 2
+<CJK_UNIFIED_IDEOGRAPH-3020F> 2
+<CJK_UNIFIED_IDEOGRAPH-30210> 2
+<CJK_UNIFIED_IDEOGRAPH-30211> 2
+<CJK_UNIFIED_IDEOGRAPH-30212> 2
+<CJK_UNIFIED_IDEOGRAPH-30213> 2
+<CJK_UNIFIED_IDEOGRAPH-30214> 2
+<CJK_UNIFIED_IDEOGRAPH-30215> 2
+<CJK_UNIFIED_IDEOGRAPH-30216> 2
+<CJK_UNIFIED_IDEOGRAPH-30217> 2
+<CJK_UNIFIED_IDEOGRAPH-30218> 2
+<CJK_UNIFIED_IDEOGRAPH-30219> 2
+<CJK_UNIFIED_IDEOGRAPH-3021A> 2
+<CJK_UNIFIED_IDEOGRAPH-3021B> 2
+<CJK_UNIFIED_IDEOGRAPH-3021C> 2
+<CJK_UNIFIED_IDEOGRAPH-3021D> 2
+<CJK_UNIFIED_IDEOGRAPH-3021E> 2
+<CJK_UNIFIED_IDEOGRAPH-3021F> 2
+<CJK_UNIFIED_IDEOGRAPH-30220> 2
+<CJK_UNIFIED_IDEOGRAPH-30221> 2
+<CJK_UNIFIED_IDEOGRAPH-30222> 2
+<CJK_UNIFIED_IDEOGRAPH-30223> 2
+<CJK_UNIFIED_IDEOGRAPH-30224> 2
+<CJK_UNIFIED_IDEOGRAPH-30225> 2
+<CJK_UNIFIED_IDEOGRAPH-30226> 2
+<CJK_UNIFIED_IDEOGRAPH-30227> 2
+<CJK_UNIFIED_IDEOGRAPH-30228> 2
+<CJK_UNIFIED_IDEOGRAPH-30229> 2
+<CJK_UNIFIED_IDEOGRAPH-3022A> 2
+<CJK_UNIFIED_IDEOGRAPH-3022B> 2
+<CJK_UNIFIED_IDEOGRAPH-3022C> 2
+<CJK_UNIFIED_IDEOGRAPH-3022D> 2
+<CJK_UNIFIED_IDEOGRAPH-3022E> 2
+<CJK_UNIFIED_IDEOGRAPH-3022F> 2
+<CJK_UNIFIED_IDEOGRAPH-30230> 2
+<CJK_UNIFIED_IDEOGRAPH-30231> 2
+<CJK_UNIFIED_IDEOGRAPH-30232> 2
+<CJK_UNIFIED_IDEOGRAPH-30233> 2
+<CJK_UNIFIED_IDEOGRAPH-30234> 2
+<CJK_UNIFIED_IDEOGRAPH-30235> 2
+<CJK_UNIFIED_IDEOGRAPH-30236> 2
+<CJK_UNIFIED_IDEOGRAPH-30237> 2
+<CJK_UNIFIED_IDEOGRAPH-30238> 2
+<CJK_UNIFIED_IDEOGRAPH-30239> 2
+<CJK_UNIFIED_IDEOGRAPH-3023A> 2
+<CJK_UNIFIED_IDEOGRAPH-3023B> 2
+<CJK_UNIFIED_IDEOGRAPH-3023C> 2
+<CJK_UNIFIED_IDEOGRAPH-3023D> 2
+<CJK_UNIFIED_IDEOGRAPH-3023E> 2
+<CJK_UNIFIED_IDEOGRAPH-3023F> 2
+<CJK_UNIFIED_IDEOGRAPH-30240> 2
+<CJK_UNIFIED_IDEOGRAPH-30241> 2
+<CJK_UNIFIED_IDEOGRAPH-30242> 2
+<CJK_UNIFIED_IDEOGRAPH-30243> 2
+<CJK_UNIFIED_IDEOGRAPH-30244> 2
+<CJK_UNIFIED_IDEOGRAPH-30245> 2
+<CJK_UNIFIED_IDEOGRAPH-30246> 2
+<CJK_UNIFIED_IDEOGRAPH-30247> 2
+<CJK_UNIFIED_IDEOGRAPH-30248> 2
+<CJK_UNIFIED_IDEOGRAPH-30249> 2
+<CJK_UNIFIED_IDEOGRAPH-3024A> 2
+<CJK_UNIFIED_IDEOGRAPH-3024B> 2
+<CJK_UNIFIED_IDEOGRAPH-3024C> 2
+<CJK_UNIFIED_IDEOGRAPH-3024D> 2
+<CJK_UNIFIED_IDEOGRAPH-3024E> 2
+<CJK_UNIFIED_IDEOGRAPH-3024F> 2
+<CJK_UNIFIED_IDEOGRAPH-30250> 2
+<CJK_UNIFIED_IDEOGRAPH-30251> 2
+<CJK_UNIFIED_IDEOGRAPH-30252> 2
+<CJK_UNIFIED_IDEOGRAPH-30253> 2
+<CJK_UNIFIED_IDEOGRAPH-30254> 2
+<CJK_UNIFIED_IDEOGRAPH-30255> 2
+<CJK_UNIFIED_IDEOGRAPH-30256> 2
+<CJK_UNIFIED_IDEOGRAPH-30257> 2
+<CJK_UNIFIED_IDEOGRAPH-30258> 2
+<CJK_UNIFIED_IDEOGRAPH-30259> 2
+<CJK_UNIFIED_IDEOGRAPH-3025A> 2
+<CJK_UNIFIED_IDEOGRAPH-3025B> 2
+<CJK_UNIFIED_IDEOGRAPH-3025C> 2
+<CJK_UNIFIED_IDEOGRAPH-3025D> 2
+<CJK_UNIFIED_IDEOGRAPH-3025E> 2
+<CJK_UNIFIED_IDEOGRAPH-3025F> 2
+<CJK_UNIFIED_IDEOGRAPH-30260> 2
+<CJK_UNIFIED_IDEOGRAPH-30261> 2
+<CJK_UNIFIED_IDEOGRAPH-30262> 2
+<CJK_UNIFIED_IDEOGRAPH-30263> 2
+<CJK_UNIFIED_IDEOGRAPH-30264> 2
+<CJK_UNIFIED_IDEOGRAPH-30265> 2
+<CJK_UNIFIED_IDEOGRAPH-30266> 2
+<CJK_UNIFIED_IDEOGRAPH-30267> 2
+<CJK_UNIFIED_IDEOGRAPH-30268> 2
+<CJK_UNIFIED_IDEOGRAPH-30269> 2
+<CJK_UNIFIED_IDEOGRAPH-3026A> 2
+<CJK_UNIFIED_IDEOGRAPH-3026B> 2
+<CJK_UNIFIED_IDEOGRAPH-3026C> 2
+<CJK_UNIFIED_IDEOGRAPH-3026D> 2
+<CJK_UNIFIED_IDEOGRAPH-3026E> 2
+<CJK_UNIFIED_IDEOGRAPH-3026F> 2
+<CJK_UNIFIED_IDEOGRAPH-30270> 2
+<CJK_UNIFIED_IDEOGRAPH-30271> 2
+<CJK_UNIFIED_IDEOGRAPH-30272> 2
+<CJK_UNIFIED_IDEOGRAPH-30273> 2
+<CJK_UNIFIED_IDEOGRAPH-30274> 2
+<CJK_UNIFIED_IDEOGRAPH-30275> 2
+<CJK_UNIFIED_IDEOGRAPH-30276> 2
+<CJK_UNIFIED_IDEOGRAPH-30277> 2
+<CJK_UNIFIED_IDEOGRAPH-30278> 2
+<CJK_UNIFIED_IDEOGRAPH-30279> 2
+<CJK_UNIFIED_IDEOGRAPH-3027A> 2
+<CJK_UNIFIED_IDEOGRAPH-3027B> 2
+<CJK_UNIFIED_IDEOGRAPH-3027C> 2
+<CJK_UNIFIED_IDEOGRAPH-3027D> 2
+<CJK_UNIFIED_IDEOGRAPH-3027E> 2
+<CJK_UNIFIED_IDEOGRAPH-3027F> 2
+<CJK_UNIFIED_IDEOGRAPH-30280> 2
+<CJK_UNIFIED_IDEOGRAPH-30281> 2
+<CJK_UNIFIED_IDEOGRAPH-30282> 2
+<CJK_UNIFIED_IDEOGRAPH-30283> 2
+<CJK_UNIFIED_IDEOGRAPH-30284> 2
+<CJK_UNIFIED_IDEOGRAPH-30285> 2
+<CJK_UNIFIED_IDEOGRAPH-30286> 2
+<CJK_UNIFIED_IDEOGRAPH-30287> 2
+<CJK_UNIFIED_IDEOGRAPH-30288> 2
+<CJK_UNIFIED_IDEOGRAPH-30289> 2
+<CJK_UNIFIED_IDEOGRAPH-3028A> 2
+<CJK_UNIFIED_IDEOGRAPH-3028B> 2
+<CJK_UNIFIED_IDEOGRAPH-3028C> 2
+<CJK_UNIFIED_IDEOGRAPH-3028D> 2
+<CJK_UNIFIED_IDEOGRAPH-3028E> 2
+<CJK_UNIFIED_IDEOGRAPH-3028F> 2
+<CJK_UNIFIED_IDEOGRAPH-30290> 2
+<CJK_UNIFIED_IDEOGRAPH-30291> 2
+<CJK_UNIFIED_IDEOGRAPH-30292> 2
+<CJK_UNIFIED_IDEOGRAPH-30293> 2
+<CJK_UNIFIED_IDEOGRAPH-30294> 2
+<CJK_UNIFIED_IDEOGRAPH-30295> 2
+<CJK_UNIFIED_IDEOGRAPH-30296> 2
+<CJK_UNIFIED_IDEOGRAPH-30297> 2
+<CJK_UNIFIED_IDEOGRAPH-30298> 2
+<CJK_UNIFIED_IDEOGRAPH-30299> 2
+<CJK_UNIFIED_IDEOGRAPH-3029A> 2
+<CJK_UNIFIED_IDEOGRAPH-3029B> 2
+<CJK_UNIFIED_IDEOGRAPH-3029C> 2
+<CJK_UNIFIED_IDEOGRAPH-3029D> 2
+<CJK_UNIFIED_IDEOGRAPH-3029E> 2
+<CJK_UNIFIED_IDEOGRAPH-3029F> 2
+<CJK_UNIFIED_IDEOGRAPH-302A0> 2
+<CJK_UNIFIED_IDEOGRAPH-302A1> 2
+<CJK_UNIFIED_IDEOGRAPH-302A2> 2
+<CJK_UNIFIED_IDEOGRAPH-302A3> 2
+<CJK_UNIFIED_IDEOGRAPH-302A4> 2
+<CJK_UNIFIED_IDEOGRAPH-302A5> 2
+<CJK_UNIFIED_IDEOGRAPH-302A6> 2
+<CJK_UNIFIED_IDEOGRAPH-302A7> 2
+<CJK_UNIFIED_IDEOGRAPH-302A8> 2
+<CJK_UNIFIED_IDEOGRAPH-302A9> 2
+<CJK_UNIFIED_IDEOGRAPH-302AA> 2
+<CJK_UNIFIED_IDEOGRAPH-302AB> 2
+<CJK_UNIFIED_IDEOGRAPH-302AC> 2
+<CJK_UNIFIED_IDEOGRAPH-302AD> 2
+<CJK_UNIFIED_IDEOGRAPH-302AE> 2
+<CJK_UNIFIED_IDEOGRAPH-302AF> 2
+<CJK_UNIFIED_IDEOGRAPH-302B0> 2
+<CJK_UNIFIED_IDEOGRAPH-302B1> 2
+<CJK_UNIFIED_IDEOGRAPH-302B2> 2
+<CJK_UNIFIED_IDEOGRAPH-302B3> 2
+<CJK_UNIFIED_IDEOGRAPH-302B4> 2
+<CJK_UNIFIED_IDEOGRAPH-302B5> 2
+<CJK_UNIFIED_IDEOGRAPH-302B6> 2
+<CJK_UNIFIED_IDEOGRAPH-302B7> 2
+<CJK_UNIFIED_IDEOGRAPH-302B8> 2
+<CJK_UNIFIED_IDEOGRAPH-302B9> 2
+<CJK_UNIFIED_IDEOGRAPH-302BA> 2
+<CJK_UNIFIED_IDEOGRAPH-302BB> 2
+<CJK_UNIFIED_IDEOGRAPH-302BC> 2
+<CJK_UNIFIED_IDEOGRAPH-302BD> 2
+<CJK_UNIFIED_IDEOGRAPH-302BE> 2
+<CJK_UNIFIED_IDEOGRAPH-302BF> 2
+<CJK_UNIFIED_IDEOGRAPH-302C0> 2
+<CJK_UNIFIED_IDEOGRAPH-302C1> 2
+<CJK_UNIFIED_IDEOGRAPH-302C2> 2
+<CJK_UNIFIED_IDEOGRAPH-302C3> 2
+<CJK_UNIFIED_IDEOGRAPH-302C4> 2
+<CJK_UNIFIED_IDEOGRAPH-302C5> 2
+<CJK_UNIFIED_IDEOGRAPH-302C6> 2
+<CJK_UNIFIED_IDEOGRAPH-302C7> 2
+<CJK_UNIFIED_IDEOGRAPH-302C8> 2
+<CJK_UNIFIED_IDEOGRAPH-302C9> 2
+<CJK_UNIFIED_IDEOGRAPH-302CA> 2
+<CJK_UNIFIED_IDEOGRAPH-302CB> 2
+<CJK_UNIFIED_IDEOGRAPH-302CC> 2
+<CJK_UNIFIED_IDEOGRAPH-302CD> 2
+<CJK_UNIFIED_IDEOGRAPH-302CE> 2
+<CJK_UNIFIED_IDEOGRAPH-302CF> 2
+<CJK_UNIFIED_IDEOGRAPH-302D0> 2
+<CJK_UNIFIED_IDEOGRAPH-302D1> 2
+<CJK_UNIFIED_IDEOGRAPH-302D2> 2
+<CJK_UNIFIED_IDEOGRAPH-302D3> 2
+<CJK_UNIFIED_IDEOGRAPH-302D4> 2
+<CJK_UNIFIED_IDEOGRAPH-302D5> 2
+<CJK_UNIFIED_IDEOGRAPH-302D6> 2
+<CJK_UNIFIED_IDEOGRAPH-302D7> 2
+<CJK_UNIFIED_IDEOGRAPH-302D8> 2
+<CJK_UNIFIED_IDEOGRAPH-302D9> 2
+<CJK_UNIFIED_IDEOGRAPH-302DA> 2
+<CJK_UNIFIED_IDEOGRAPH-302DB> 2
+<CJK_UNIFIED_IDEOGRAPH-302DC> 2
+<CJK_UNIFIED_IDEOGRAPH-302DD> 2
+<CJK_UNIFIED_IDEOGRAPH-302DE> 2
+<CJK_UNIFIED_IDEOGRAPH-302DF> 2
+<CJK_UNIFIED_IDEOGRAPH-302E0> 2
+<CJK_UNIFIED_IDEOGRAPH-302E1> 2
+<CJK_UNIFIED_IDEOGRAPH-302E2> 2
+<CJK_UNIFIED_IDEOGRAPH-302E3> 2
+<CJK_UNIFIED_IDEOGRAPH-302E4> 2
+<CJK_UNIFIED_IDEOGRAPH-302E5> 2
+<CJK_UNIFIED_IDEOGRAPH-302E6> 2
+<CJK_UNIFIED_IDEOGRAPH-302E7> 2
+<CJK_UNIFIED_IDEOGRAPH-302E8> 2
+<CJK_UNIFIED_IDEOGRAPH-302E9> 2
+<CJK_UNIFIED_IDEOGRAPH-302EA> 2
+<CJK_UNIFIED_IDEOGRAPH-302EB> 2
+<CJK_UNIFIED_IDEOGRAPH-302EC> 2
+<CJK_UNIFIED_IDEOGRAPH-302ED> 2
+<CJK_UNIFIED_IDEOGRAPH-302EE> 2
+<CJK_UNIFIED_IDEOGRAPH-302EF> 2
+<CJK_UNIFIED_IDEOGRAPH-302F0> 2
+<CJK_UNIFIED_IDEOGRAPH-302F1> 2
+<CJK_UNIFIED_IDEOGRAPH-302F2> 2
+<CJK_UNIFIED_IDEOGRAPH-302F3> 2
+<CJK_UNIFIED_IDEOGRAPH-302F4> 2
+<CJK_UNIFIED_IDEOGRAPH-302F5> 2
+<CJK_UNIFIED_IDEOGRAPH-302F6> 2
+<CJK_UNIFIED_IDEOGRAPH-302F7> 2
+<CJK_UNIFIED_IDEOGRAPH-302F8> 2
+<CJK_UNIFIED_IDEOGRAPH-302F9> 2
+<CJK_UNIFIED_IDEOGRAPH-302FA> 2
+<CJK_UNIFIED_IDEOGRAPH-302FB> 2
+<CJK_UNIFIED_IDEOGRAPH-302FC> 2
+<CJK_UNIFIED_IDEOGRAPH-302FD> 2
+<CJK_UNIFIED_IDEOGRAPH-302FE> 2
+<CJK_UNIFIED_IDEOGRAPH-302FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30300> 2
+<CJK_UNIFIED_IDEOGRAPH-30301> 2
+<CJK_UNIFIED_IDEOGRAPH-30302> 2
+<CJK_UNIFIED_IDEOGRAPH-30303> 2
+<CJK_UNIFIED_IDEOGRAPH-30304> 2
+<CJK_UNIFIED_IDEOGRAPH-30305> 2
+<CJK_UNIFIED_IDEOGRAPH-30306> 2
+<CJK_UNIFIED_IDEOGRAPH-30307> 2
+<CJK_UNIFIED_IDEOGRAPH-30308> 2
+<CJK_UNIFIED_IDEOGRAPH-30309> 2
+<CJK_UNIFIED_IDEOGRAPH-3030A> 2
+<CJK_UNIFIED_IDEOGRAPH-3030B> 2
+<CJK_UNIFIED_IDEOGRAPH-3030C> 2
+<CJK_UNIFIED_IDEOGRAPH-3030D> 2
+<CJK_UNIFIED_IDEOGRAPH-3030E> 2
+<CJK_UNIFIED_IDEOGRAPH-3030F> 2
+<CJK_UNIFIED_IDEOGRAPH-30310> 2
+<CJK_UNIFIED_IDEOGRAPH-30311> 2
+<CJK_UNIFIED_IDEOGRAPH-30312> 2
+<CJK_UNIFIED_IDEOGRAPH-30313> 2
+<CJK_UNIFIED_IDEOGRAPH-30314> 2
+<CJK_UNIFIED_IDEOGRAPH-30315> 2
+<CJK_UNIFIED_IDEOGRAPH-30316> 2
+<CJK_UNIFIED_IDEOGRAPH-30317> 2
+<CJK_UNIFIED_IDEOGRAPH-30318> 2
+<CJK_UNIFIED_IDEOGRAPH-30319> 2
+<CJK_UNIFIED_IDEOGRAPH-3031A> 2
+<CJK_UNIFIED_IDEOGRAPH-3031B> 2
+<CJK_UNIFIED_IDEOGRAPH-3031C> 2
+<CJK_UNIFIED_IDEOGRAPH-3031D> 2
+<CJK_UNIFIED_IDEOGRAPH-3031E> 2
+<CJK_UNIFIED_IDEOGRAPH-3031F> 2
+<CJK_UNIFIED_IDEOGRAPH-30320> 2
+<CJK_UNIFIED_IDEOGRAPH-30321> 2
+<CJK_UNIFIED_IDEOGRAPH-30322> 2
+<CJK_UNIFIED_IDEOGRAPH-30323> 2
+<CJK_UNIFIED_IDEOGRAPH-30324> 2
+<CJK_UNIFIED_IDEOGRAPH-30325> 2
+<CJK_UNIFIED_IDEOGRAPH-30326> 2
+<CJK_UNIFIED_IDEOGRAPH-30327> 2
+<CJK_UNIFIED_IDEOGRAPH-30328> 2
+<CJK_UNIFIED_IDEOGRAPH-30329> 2
+<CJK_UNIFIED_IDEOGRAPH-3032A> 2
+<CJK_UNIFIED_IDEOGRAPH-3032B> 2
+<CJK_UNIFIED_IDEOGRAPH-3032C> 2
+<CJK_UNIFIED_IDEOGRAPH-3032D> 2
+<CJK_UNIFIED_IDEOGRAPH-3032E> 2
+<CJK_UNIFIED_IDEOGRAPH-3032F> 2
+<CJK_UNIFIED_IDEOGRAPH-30330> 2
+<CJK_UNIFIED_IDEOGRAPH-30331> 2
+<CJK_UNIFIED_IDEOGRAPH-30332> 2
+<CJK_UNIFIED_IDEOGRAPH-30333> 2
+<CJK_UNIFIED_IDEOGRAPH-30334> 2
+<CJK_UNIFIED_IDEOGRAPH-30335> 2
+<CJK_UNIFIED_IDEOGRAPH-30336> 2
+<CJK_UNIFIED_IDEOGRAPH-30337> 2
+<CJK_UNIFIED_IDEOGRAPH-30338> 2
+<CJK_UNIFIED_IDEOGRAPH-30339> 2
+<CJK_UNIFIED_IDEOGRAPH-3033A> 2
+<CJK_UNIFIED_IDEOGRAPH-3033B> 2
+<CJK_UNIFIED_IDEOGRAPH-3033C> 2
+<CJK_UNIFIED_IDEOGRAPH-3033D> 2
+<CJK_UNIFIED_IDEOGRAPH-3033E> 2
+<CJK_UNIFIED_IDEOGRAPH-3033F> 2
+<CJK_UNIFIED_IDEOGRAPH-30340> 2
+<CJK_UNIFIED_IDEOGRAPH-30341> 2
+<CJK_UNIFIED_IDEOGRAPH-30342> 2
+<CJK_UNIFIED_IDEOGRAPH-30343> 2
+<CJK_UNIFIED_IDEOGRAPH-30344> 2
+<CJK_UNIFIED_IDEOGRAPH-30345> 2
+<CJK_UNIFIED_IDEOGRAPH-30346> 2
+<CJK_UNIFIED_IDEOGRAPH-30347> 2
+<CJK_UNIFIED_IDEOGRAPH-30348> 2
+<CJK_UNIFIED_IDEOGRAPH-30349> 2
+<CJK_UNIFIED_IDEOGRAPH-3034A> 2
+<CJK_UNIFIED_IDEOGRAPH-3034B> 2
+<CJK_UNIFIED_IDEOGRAPH-3034C> 2
+<CJK_UNIFIED_IDEOGRAPH-3034D> 2
+<CJK_UNIFIED_IDEOGRAPH-3034E> 2
+<CJK_UNIFIED_IDEOGRAPH-3034F> 2
+<CJK_UNIFIED_IDEOGRAPH-30350> 2
+<CJK_UNIFIED_IDEOGRAPH-30351> 2
+<CJK_UNIFIED_IDEOGRAPH-30352> 2
+<CJK_UNIFIED_IDEOGRAPH-30353> 2
+<CJK_UNIFIED_IDEOGRAPH-30354> 2
+<CJK_UNIFIED_IDEOGRAPH-30355> 2
+<CJK_UNIFIED_IDEOGRAPH-30356> 2
+<CJK_UNIFIED_IDEOGRAPH-30357> 2
+<CJK_UNIFIED_IDEOGRAPH-30358> 2
+<CJK_UNIFIED_IDEOGRAPH-30359> 2
+<CJK_UNIFIED_IDEOGRAPH-3035A> 2
+<CJK_UNIFIED_IDEOGRAPH-3035B> 2
+<CJK_UNIFIED_IDEOGRAPH-3035C> 2
+<CJK_UNIFIED_IDEOGRAPH-3035D> 2
+<CJK_UNIFIED_IDEOGRAPH-3035E> 2
+<CJK_UNIFIED_IDEOGRAPH-3035F> 2
+<CJK_UNIFIED_IDEOGRAPH-30360> 2
+<CJK_UNIFIED_IDEOGRAPH-30361> 2
+<CJK_UNIFIED_IDEOGRAPH-30362> 2
+<CJK_UNIFIED_IDEOGRAPH-30363> 2
+<CJK_UNIFIED_IDEOGRAPH-30364> 2
+<CJK_UNIFIED_IDEOGRAPH-30365> 2
+<CJK_UNIFIED_IDEOGRAPH-30366> 2
+<CJK_UNIFIED_IDEOGRAPH-30367> 2
+<CJK_UNIFIED_IDEOGRAPH-30368> 2
+<CJK_UNIFIED_IDEOGRAPH-30369> 2
+<CJK_UNIFIED_IDEOGRAPH-3036A> 2
+<CJK_UNIFIED_IDEOGRAPH-3036B> 2
+<CJK_UNIFIED_IDEOGRAPH-3036C> 2
+<CJK_UNIFIED_IDEOGRAPH-3036D> 2
+<CJK_UNIFIED_IDEOGRAPH-3036E> 2
+<CJK_UNIFIED_IDEOGRAPH-3036F> 2
+<CJK_UNIFIED_IDEOGRAPH-30370> 2
+<CJK_UNIFIED_IDEOGRAPH-30371> 2
+<CJK_UNIFIED_IDEOGRAPH-30372> 2
+<CJK_UNIFIED_IDEOGRAPH-30373> 2
+<CJK_UNIFIED_IDEOGRAPH-30374> 2
+<CJK_UNIFIED_IDEOGRAPH-30375> 2
+<CJK_UNIFIED_IDEOGRAPH-30376> 2
+<CJK_UNIFIED_IDEOGRAPH-30377> 2
+<CJK_UNIFIED_IDEOGRAPH-30378> 2
+<CJK_UNIFIED_IDEOGRAPH-30379> 2
+<CJK_UNIFIED_IDEOGRAPH-3037A> 2
+<CJK_UNIFIED_IDEOGRAPH-3037B> 2
+<CJK_UNIFIED_IDEOGRAPH-3037C> 2
+<CJK_UNIFIED_IDEOGRAPH-3037D> 2
+<CJK_UNIFIED_IDEOGRAPH-3037E> 2
+<CJK_UNIFIED_IDEOGRAPH-3037F> 2
+<CJK_UNIFIED_IDEOGRAPH-30380> 2
+<CJK_UNIFIED_IDEOGRAPH-30381> 2
+<CJK_UNIFIED_IDEOGRAPH-30382> 2
+<CJK_UNIFIED_IDEOGRAPH-30383> 2
+<CJK_UNIFIED_IDEOGRAPH-30384> 2
+<CJK_UNIFIED_IDEOGRAPH-30385> 2
+<CJK_UNIFIED_IDEOGRAPH-30386> 2
+<CJK_UNIFIED_IDEOGRAPH-30387> 2
+<CJK_UNIFIED_IDEOGRAPH-30388> 2
+<CJK_UNIFIED_IDEOGRAPH-30389> 2
+<CJK_UNIFIED_IDEOGRAPH-3038A> 2
+<CJK_UNIFIED_IDEOGRAPH-3038B> 2
+<CJK_UNIFIED_IDEOGRAPH-3038C> 2
+<CJK_UNIFIED_IDEOGRAPH-3038D> 2
+<CJK_UNIFIED_IDEOGRAPH-3038E> 2
+<CJK_UNIFIED_IDEOGRAPH-3038F> 2
+<CJK_UNIFIED_IDEOGRAPH-30390> 2
+<CJK_UNIFIED_IDEOGRAPH-30391> 2
+<CJK_UNIFIED_IDEOGRAPH-30392> 2
+<CJK_UNIFIED_IDEOGRAPH-30393> 2
+<CJK_UNIFIED_IDEOGRAPH-30394> 2
+<CJK_UNIFIED_IDEOGRAPH-30395> 2
+<CJK_UNIFIED_IDEOGRAPH-30396> 2
+<CJK_UNIFIED_IDEOGRAPH-30397> 2
+<CJK_UNIFIED_IDEOGRAPH-30398> 2
+<CJK_UNIFIED_IDEOGRAPH-30399> 2
+<CJK_UNIFIED_IDEOGRAPH-3039A> 2
+<CJK_UNIFIED_IDEOGRAPH-3039B> 2
+<CJK_UNIFIED_IDEOGRAPH-3039C> 2
+<CJK_UNIFIED_IDEOGRAPH-3039D> 2
+<CJK_UNIFIED_IDEOGRAPH-3039E> 2
+<CJK_UNIFIED_IDEOGRAPH-3039F> 2
+<CJK_UNIFIED_IDEOGRAPH-303A0> 2
+<CJK_UNIFIED_IDEOGRAPH-303A1> 2
+<CJK_UNIFIED_IDEOGRAPH-303A2> 2
+<CJK_UNIFIED_IDEOGRAPH-303A3> 2
+<CJK_UNIFIED_IDEOGRAPH-303A4> 2
+<CJK_UNIFIED_IDEOGRAPH-303A5> 2
+<CJK_UNIFIED_IDEOGRAPH-303A6> 2
+<CJK_UNIFIED_IDEOGRAPH-303A7> 2
+<CJK_UNIFIED_IDEOGRAPH-303A8> 2
+<CJK_UNIFIED_IDEOGRAPH-303A9> 2
+<CJK_UNIFIED_IDEOGRAPH-303AA> 2
+<CJK_UNIFIED_IDEOGRAPH-303AB> 2
+<CJK_UNIFIED_IDEOGRAPH-303AC> 2
+<CJK_UNIFIED_IDEOGRAPH-303AD> 2
+<CJK_UNIFIED_IDEOGRAPH-303AE> 2
+<CJK_UNIFIED_IDEOGRAPH-303AF> 2
+<CJK_UNIFIED_IDEOGRAPH-303B0> 2
+<CJK_UNIFIED_IDEOGRAPH-303B1> 2
+<CJK_UNIFIED_IDEOGRAPH-303B2> 2
+<CJK_UNIFIED_IDEOGRAPH-303B3> 2
+<CJK_UNIFIED_IDEOGRAPH-303B4> 2
+<CJK_UNIFIED_IDEOGRAPH-303B5> 2
+<CJK_UNIFIED_IDEOGRAPH-303B6> 2
+<CJK_UNIFIED_IDEOGRAPH-303B7> 2
+<CJK_UNIFIED_IDEOGRAPH-303B8> 2
+<CJK_UNIFIED_IDEOGRAPH-303B9> 2
+<CJK_UNIFIED_IDEOGRAPH-303BA> 2
+<CJK_UNIFIED_IDEOGRAPH-303BB> 2
+<CJK_UNIFIED_IDEOGRAPH-303BC> 2
+<CJK_UNIFIED_IDEOGRAPH-303BD> 2
+<CJK_UNIFIED_IDEOGRAPH-303BE> 2
+<CJK_UNIFIED_IDEOGRAPH-303BF> 2
+<CJK_UNIFIED_IDEOGRAPH-303C0> 2
+<CJK_UNIFIED_IDEOGRAPH-303C1> 2
+<CJK_UNIFIED_IDEOGRAPH-303C2> 2
+<CJK_UNIFIED_IDEOGRAPH-303C3> 2
+<CJK_UNIFIED_IDEOGRAPH-303C4> 2
+<CJK_UNIFIED_IDEOGRAPH-303C5> 2
+<CJK_UNIFIED_IDEOGRAPH-303C6> 2
+<CJK_UNIFIED_IDEOGRAPH-303C7> 2
+<CJK_UNIFIED_IDEOGRAPH-303C8> 2
+<CJK_UNIFIED_IDEOGRAPH-303C9> 2
+<CJK_UNIFIED_IDEOGRAPH-303CA> 2
+<CJK_UNIFIED_IDEOGRAPH-303CB> 2
+<CJK_UNIFIED_IDEOGRAPH-303CC> 2
+<CJK_UNIFIED_IDEOGRAPH-303CD> 2
+<CJK_UNIFIED_IDEOGRAPH-303CE> 2
+<CJK_UNIFIED_IDEOGRAPH-303CF> 2
+<CJK_UNIFIED_IDEOGRAPH-303D0> 2
+<CJK_UNIFIED_IDEOGRAPH-303D1> 2
+<CJK_UNIFIED_IDEOGRAPH-303D2> 2
+<CJK_UNIFIED_IDEOGRAPH-303D3> 2
+<CJK_UNIFIED_IDEOGRAPH-303D4> 2
+<CJK_UNIFIED_IDEOGRAPH-303D5> 2
+<CJK_UNIFIED_IDEOGRAPH-303D6> 2
+<CJK_UNIFIED_IDEOGRAPH-303D7> 2
+<CJK_UNIFIED_IDEOGRAPH-303D8> 2
+<CJK_UNIFIED_IDEOGRAPH-303D9> 2
+<CJK_UNIFIED_IDEOGRAPH-303DA> 2
+<CJK_UNIFIED_IDEOGRAPH-303DB> 2
+<CJK_UNIFIED_IDEOGRAPH-303DC> 2
+<CJK_UNIFIED_IDEOGRAPH-303DD> 2
+<CJK_UNIFIED_IDEOGRAPH-303DE> 2
+<CJK_UNIFIED_IDEOGRAPH-303DF> 2
+<CJK_UNIFIED_IDEOGRAPH-303E0> 2
+<CJK_UNIFIED_IDEOGRAPH-303E1> 2
+<CJK_UNIFIED_IDEOGRAPH-303E2> 2
+<CJK_UNIFIED_IDEOGRAPH-303E3> 2
+<CJK_UNIFIED_IDEOGRAPH-303E4> 2
+<CJK_UNIFIED_IDEOGRAPH-303E5> 2
+<CJK_UNIFIED_IDEOGRAPH-303E6> 2
+<CJK_UNIFIED_IDEOGRAPH-303E7> 2
+<CJK_UNIFIED_IDEOGRAPH-303E8> 2
+<CJK_UNIFIED_IDEOGRAPH-303E9> 2
+<CJK_UNIFIED_IDEOGRAPH-303EA> 2
+<CJK_UNIFIED_IDEOGRAPH-303EB> 2
+<CJK_UNIFIED_IDEOGRAPH-303EC> 2
+<CJK_UNIFIED_IDEOGRAPH-303ED> 2
+<CJK_UNIFIED_IDEOGRAPH-303EE> 2
+<CJK_UNIFIED_IDEOGRAPH-303EF> 2
+<CJK_UNIFIED_IDEOGRAPH-303F0> 2
+<CJK_UNIFIED_IDEOGRAPH-303F1> 2
+<CJK_UNIFIED_IDEOGRAPH-303F2> 2
+<CJK_UNIFIED_IDEOGRAPH-303F3> 2
+<CJK_UNIFIED_IDEOGRAPH-303F4> 2
+<CJK_UNIFIED_IDEOGRAPH-303F5> 2
+<CJK_UNIFIED_IDEOGRAPH-303F6> 2
+<CJK_UNIFIED_IDEOGRAPH-303F7> 2
+<CJK_UNIFIED_IDEOGRAPH-303F8> 2
+<CJK_UNIFIED_IDEOGRAPH-303F9> 2
+<CJK_UNIFIED_IDEOGRAPH-303FA> 2
+<CJK_UNIFIED_IDEOGRAPH-303FB> 2
+<CJK_UNIFIED_IDEOGRAPH-303FC> 2
+<CJK_UNIFIED_IDEOGRAPH-303FD> 2
+<CJK_UNIFIED_IDEOGRAPH-303FE> 2
+<CJK_UNIFIED_IDEOGRAPH-303FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30400> 2
+<CJK_UNIFIED_IDEOGRAPH-30401> 2
+<CJK_UNIFIED_IDEOGRAPH-30402> 2
+<CJK_UNIFIED_IDEOGRAPH-30403> 2
+<CJK_UNIFIED_IDEOGRAPH-30404> 2
+<CJK_UNIFIED_IDEOGRAPH-30405> 2
+<CJK_UNIFIED_IDEOGRAPH-30406> 2
+<CJK_UNIFIED_IDEOGRAPH-30407> 2
+<CJK_UNIFIED_IDEOGRAPH-30408> 2
+<CJK_UNIFIED_IDEOGRAPH-30409> 2
+<CJK_UNIFIED_IDEOGRAPH-3040A> 2
+<CJK_UNIFIED_IDEOGRAPH-3040B> 2
+<CJK_UNIFIED_IDEOGRAPH-3040C> 2
+<CJK_UNIFIED_IDEOGRAPH-3040D> 2
+<CJK_UNIFIED_IDEOGRAPH-3040E> 2
+<CJK_UNIFIED_IDEOGRAPH-3040F> 2
+<CJK_UNIFIED_IDEOGRAPH-30410> 2
+<CJK_UNIFIED_IDEOGRAPH-30411> 2
+<CJK_UNIFIED_IDEOGRAPH-30412> 2
+<CJK_UNIFIED_IDEOGRAPH-30413> 2
+<CJK_UNIFIED_IDEOGRAPH-30414> 2
+<CJK_UNIFIED_IDEOGRAPH-30415> 2
+<CJK_UNIFIED_IDEOGRAPH-30416> 2
+<CJK_UNIFIED_IDEOGRAPH-30417> 2
+<CJK_UNIFIED_IDEOGRAPH-30418> 2
+<CJK_UNIFIED_IDEOGRAPH-30419> 2
+<CJK_UNIFIED_IDEOGRAPH-3041A> 2
+<CJK_UNIFIED_IDEOGRAPH-3041B> 2
+<CJK_UNIFIED_IDEOGRAPH-3041C> 2
+<CJK_UNIFIED_IDEOGRAPH-3041D> 2
+<CJK_UNIFIED_IDEOGRAPH-3041E> 2
+<CJK_UNIFIED_IDEOGRAPH-3041F> 2
+<CJK_UNIFIED_IDEOGRAPH-30420> 2
+<CJK_UNIFIED_IDEOGRAPH-30421> 2
+<CJK_UNIFIED_IDEOGRAPH-30422> 2
+<CJK_UNIFIED_IDEOGRAPH-30423> 2
+<CJK_UNIFIED_IDEOGRAPH-30424> 2
+<CJK_UNIFIED_IDEOGRAPH-30425> 2
+<CJK_UNIFIED_IDEOGRAPH-30426> 2
+<CJK_UNIFIED_IDEOGRAPH-30427> 2
+<CJK_UNIFIED_IDEOGRAPH-30428> 2
+<CJK_UNIFIED_IDEOGRAPH-30429> 2
+<CJK_UNIFIED_IDEOGRAPH-3042A> 2
+<CJK_UNIFIED_IDEOGRAPH-3042B> 2
+<CJK_UNIFIED_IDEOGRAPH-3042C> 2
+<CJK_UNIFIED_IDEOGRAPH-3042D> 2
+<CJK_UNIFIED_IDEOGRAPH-3042E> 2
+<CJK_UNIFIED_IDEOGRAPH-3042F> 2
+<CJK_UNIFIED_IDEOGRAPH-30430> 2
+<CJK_UNIFIED_IDEOGRAPH-30431> 2
+<CJK_UNIFIED_IDEOGRAPH-30432> 2
+<CJK_UNIFIED_IDEOGRAPH-30433> 2
+<CJK_UNIFIED_IDEOGRAPH-30434> 2
+<CJK_UNIFIED_IDEOGRAPH-30435> 2
+<CJK_UNIFIED_IDEOGRAPH-30436> 2
+<CJK_UNIFIED_IDEOGRAPH-30437> 2
+<CJK_UNIFIED_IDEOGRAPH-30438> 2
+<CJK_UNIFIED_IDEOGRAPH-30439> 2
+<CJK_UNIFIED_IDEOGRAPH-3043A> 2
+<CJK_UNIFIED_IDEOGRAPH-3043B> 2
+<CJK_UNIFIED_IDEOGRAPH-3043C> 2
+<CJK_UNIFIED_IDEOGRAPH-3043D> 2
+<CJK_UNIFIED_IDEOGRAPH-3043E> 2
+<CJK_UNIFIED_IDEOGRAPH-3043F> 2
+<CJK_UNIFIED_IDEOGRAPH-30440> 2
+<CJK_UNIFIED_IDEOGRAPH-30441> 2
+<CJK_UNIFIED_IDEOGRAPH-30442> 2
+<CJK_UNIFIED_IDEOGRAPH-30443> 2
+<CJK_UNIFIED_IDEOGRAPH-30444> 2
+<CJK_UNIFIED_IDEOGRAPH-30445> 2
+<CJK_UNIFIED_IDEOGRAPH-30446> 2
+<CJK_UNIFIED_IDEOGRAPH-30447> 2
+<CJK_UNIFIED_IDEOGRAPH-30448> 2
+<CJK_UNIFIED_IDEOGRAPH-30449> 2
+<CJK_UNIFIED_IDEOGRAPH-3044A> 2
+<CJK_UNIFIED_IDEOGRAPH-3044B> 2
+<CJK_UNIFIED_IDEOGRAPH-3044C> 2
+<CJK_UNIFIED_IDEOGRAPH-3044D> 2
+<CJK_UNIFIED_IDEOGRAPH-3044E> 2
+<CJK_UNIFIED_IDEOGRAPH-3044F> 2
+<CJK_UNIFIED_IDEOGRAPH-30450> 2
+<CJK_UNIFIED_IDEOGRAPH-30451> 2
+<CJK_UNIFIED_IDEOGRAPH-30452> 2
+<CJK_UNIFIED_IDEOGRAPH-30453> 2
+<CJK_UNIFIED_IDEOGRAPH-30454> 2
+<CJK_UNIFIED_IDEOGRAPH-30455> 2
+<CJK_UNIFIED_IDEOGRAPH-30456> 2
+<CJK_UNIFIED_IDEOGRAPH-30457> 2
+<CJK_UNIFIED_IDEOGRAPH-30458> 2
+<CJK_UNIFIED_IDEOGRAPH-30459> 2
+<CJK_UNIFIED_IDEOGRAPH-3045A> 2
+<CJK_UNIFIED_IDEOGRAPH-3045B> 2
+<CJK_UNIFIED_IDEOGRAPH-3045C> 2
+<CJK_UNIFIED_IDEOGRAPH-3045D> 2
+<CJK_UNIFIED_IDEOGRAPH-3045E> 2
+<CJK_UNIFIED_IDEOGRAPH-3045F> 2
+<CJK_UNIFIED_IDEOGRAPH-30460> 2
+<CJK_UNIFIED_IDEOGRAPH-30461> 2
+<CJK_UNIFIED_IDEOGRAPH-30462> 2
+<CJK_UNIFIED_IDEOGRAPH-30463> 2
+<CJK_UNIFIED_IDEOGRAPH-30464> 2
+<CJK_UNIFIED_IDEOGRAPH-30465> 2
+<CJK_UNIFIED_IDEOGRAPH-30466> 2
+<CJK_UNIFIED_IDEOGRAPH-30467> 2
+<CJK_UNIFIED_IDEOGRAPH-30468> 2
+<CJK_UNIFIED_IDEOGRAPH-30469> 2
+<CJK_UNIFIED_IDEOGRAPH-3046A> 2
+<CJK_UNIFIED_IDEOGRAPH-3046B> 2
+<CJK_UNIFIED_IDEOGRAPH-3046C> 2
+<CJK_UNIFIED_IDEOGRAPH-3046D> 2
+<CJK_UNIFIED_IDEOGRAPH-3046E> 2
+<CJK_UNIFIED_IDEOGRAPH-3046F> 2
+<CJK_UNIFIED_IDEOGRAPH-30470> 2
+<CJK_UNIFIED_IDEOGRAPH-30471> 2
+<CJK_UNIFIED_IDEOGRAPH-30472> 2
+<CJK_UNIFIED_IDEOGRAPH-30473> 2
+<CJK_UNIFIED_IDEOGRAPH-30474> 2
+<CJK_UNIFIED_IDEOGRAPH-30475> 2
+<CJK_UNIFIED_IDEOGRAPH-30476> 2
+<CJK_UNIFIED_IDEOGRAPH-30477> 2
+<CJK_UNIFIED_IDEOGRAPH-30478> 2
+<CJK_UNIFIED_IDEOGRAPH-30479> 2
+<CJK_UNIFIED_IDEOGRAPH-3047A> 2
+<CJK_UNIFIED_IDEOGRAPH-3047B> 2
+<CJK_UNIFIED_IDEOGRAPH-3047C> 2
+<CJK_UNIFIED_IDEOGRAPH-3047D> 2
+<CJK_UNIFIED_IDEOGRAPH-3047E> 2
+<CJK_UNIFIED_IDEOGRAPH-3047F> 2
+<CJK_UNIFIED_IDEOGRAPH-30480> 2
+<CJK_UNIFIED_IDEOGRAPH-30481> 2
+<CJK_UNIFIED_IDEOGRAPH-30482> 2
+<CJK_UNIFIED_IDEOGRAPH-30483> 2
+<CJK_UNIFIED_IDEOGRAPH-30484> 2
+<CJK_UNIFIED_IDEOGRAPH-30485> 2
+<CJK_UNIFIED_IDEOGRAPH-30486> 2
+<CJK_UNIFIED_IDEOGRAPH-30487> 2
+<CJK_UNIFIED_IDEOGRAPH-30488> 2
+<CJK_UNIFIED_IDEOGRAPH-30489> 2
+<CJK_UNIFIED_IDEOGRAPH-3048A> 2
+<CJK_UNIFIED_IDEOGRAPH-3048B> 2
+<CJK_UNIFIED_IDEOGRAPH-3048C> 2
+<CJK_UNIFIED_IDEOGRAPH-3048D> 2
+<CJK_UNIFIED_IDEOGRAPH-3048E> 2
+<CJK_UNIFIED_IDEOGRAPH-3048F> 2
+<CJK_UNIFIED_IDEOGRAPH-30490> 2
+<CJK_UNIFIED_IDEOGRAPH-30491> 2
+<CJK_UNIFIED_IDEOGRAPH-30492> 2
+<CJK_UNIFIED_IDEOGRAPH-30493> 2
+<CJK_UNIFIED_IDEOGRAPH-30494> 2
+<CJK_UNIFIED_IDEOGRAPH-30495> 2
+<CJK_UNIFIED_IDEOGRAPH-30496> 2
+<CJK_UNIFIED_IDEOGRAPH-30497> 2
+<CJK_UNIFIED_IDEOGRAPH-30498> 2
+<CJK_UNIFIED_IDEOGRAPH-30499> 2
+<CJK_UNIFIED_IDEOGRAPH-3049A> 2
+<CJK_UNIFIED_IDEOGRAPH-3049B> 2
+<CJK_UNIFIED_IDEOGRAPH-3049C> 2
+<CJK_UNIFIED_IDEOGRAPH-3049D> 2
+<CJK_UNIFIED_IDEOGRAPH-3049E> 2
+<CJK_UNIFIED_IDEOGRAPH-3049F> 2
+<CJK_UNIFIED_IDEOGRAPH-304A0> 2
+<CJK_UNIFIED_IDEOGRAPH-304A1> 2
+<CJK_UNIFIED_IDEOGRAPH-304A2> 2
+<CJK_UNIFIED_IDEOGRAPH-304A3> 2
+<CJK_UNIFIED_IDEOGRAPH-304A4> 2
+<CJK_UNIFIED_IDEOGRAPH-304A5> 2
+<CJK_UNIFIED_IDEOGRAPH-304A6> 2
+<CJK_UNIFIED_IDEOGRAPH-304A7> 2
+<CJK_UNIFIED_IDEOGRAPH-304A8> 2
+<CJK_UNIFIED_IDEOGRAPH-304A9> 2
+<CJK_UNIFIED_IDEOGRAPH-304AA> 2
+<CJK_UNIFIED_IDEOGRAPH-304AB> 2
+<CJK_UNIFIED_IDEOGRAPH-304AC> 2
+<CJK_UNIFIED_IDEOGRAPH-304AD> 2
+<CJK_UNIFIED_IDEOGRAPH-304AE> 2
+<CJK_UNIFIED_IDEOGRAPH-304AF> 2
+<CJK_UNIFIED_IDEOGRAPH-304B0> 2
+<CJK_UNIFIED_IDEOGRAPH-304B1> 2
+<CJK_UNIFIED_IDEOGRAPH-304B2> 2
+<CJK_UNIFIED_IDEOGRAPH-304B3> 2
+<CJK_UNIFIED_IDEOGRAPH-304B4> 2
+<CJK_UNIFIED_IDEOGRAPH-304B5> 2
+<CJK_UNIFIED_IDEOGRAPH-304B6> 2
+<CJK_UNIFIED_IDEOGRAPH-304B7> 2
+<CJK_UNIFIED_IDEOGRAPH-304B8> 2
+<CJK_UNIFIED_IDEOGRAPH-304B9> 2
+<CJK_UNIFIED_IDEOGRAPH-304BA> 2
+<CJK_UNIFIED_IDEOGRAPH-304BB> 2
+<CJK_UNIFIED_IDEOGRAPH-304BC> 2
+<CJK_UNIFIED_IDEOGRAPH-304BD> 2
+<CJK_UNIFIED_IDEOGRAPH-304BE> 2
+<CJK_UNIFIED_IDEOGRAPH-304BF> 2
+<CJK_UNIFIED_IDEOGRAPH-304C0> 2
+<CJK_UNIFIED_IDEOGRAPH-304C1> 2
+<CJK_UNIFIED_IDEOGRAPH-304C2> 2
+<CJK_UNIFIED_IDEOGRAPH-304C3> 2
+<CJK_UNIFIED_IDEOGRAPH-304C4> 2
+<CJK_UNIFIED_IDEOGRAPH-304C5> 2
+<CJK_UNIFIED_IDEOGRAPH-304C6> 2
+<CJK_UNIFIED_IDEOGRAPH-304C7> 2
+<CJK_UNIFIED_IDEOGRAPH-304C8> 2
+<CJK_UNIFIED_IDEOGRAPH-304C9> 2
+<CJK_UNIFIED_IDEOGRAPH-304CA> 2
+<CJK_UNIFIED_IDEOGRAPH-304CB> 2
+<CJK_UNIFIED_IDEOGRAPH-304CC> 2
+<CJK_UNIFIED_IDEOGRAPH-304CD> 2
+<CJK_UNIFIED_IDEOGRAPH-304CE> 2
+<CJK_UNIFIED_IDEOGRAPH-304CF> 2
+<CJK_UNIFIED_IDEOGRAPH-304D0> 2
+<CJK_UNIFIED_IDEOGRAPH-304D1> 2
+<CJK_UNIFIED_IDEOGRAPH-304D2> 2
+<CJK_UNIFIED_IDEOGRAPH-304D3> 2
+<CJK_UNIFIED_IDEOGRAPH-304D4> 2
+<CJK_UNIFIED_IDEOGRAPH-304D5> 2
+<CJK_UNIFIED_IDEOGRAPH-304D6> 2
+<CJK_UNIFIED_IDEOGRAPH-304D7> 2
+<CJK_UNIFIED_IDEOGRAPH-304D8> 2
+<CJK_UNIFIED_IDEOGRAPH-304D9> 2
+<CJK_UNIFIED_IDEOGRAPH-304DA> 2
+<CJK_UNIFIED_IDEOGRAPH-304DB> 2
+<CJK_UNIFIED_IDEOGRAPH-304DC> 2
+<CJK_UNIFIED_IDEOGRAPH-304DD> 2
+<CJK_UNIFIED_IDEOGRAPH-304DE> 2
+<CJK_UNIFIED_IDEOGRAPH-304DF> 2
+<CJK_UNIFIED_IDEOGRAPH-304E0> 2
+<CJK_UNIFIED_IDEOGRAPH-304E1> 2
+<CJK_UNIFIED_IDEOGRAPH-304E2> 2
+<CJK_UNIFIED_IDEOGRAPH-304E3> 2
+<CJK_UNIFIED_IDEOGRAPH-304E4> 2
+<CJK_UNIFIED_IDEOGRAPH-304E5> 2
+<CJK_UNIFIED_IDEOGRAPH-304E6> 2
+<CJK_UNIFIED_IDEOGRAPH-304E7> 2
+<CJK_UNIFIED_IDEOGRAPH-304E8> 2
+<CJK_UNIFIED_IDEOGRAPH-304E9> 2
+<CJK_UNIFIED_IDEOGRAPH-304EA> 2
+<CJK_UNIFIED_IDEOGRAPH-304EB> 2
+<CJK_UNIFIED_IDEOGRAPH-304EC> 2
+<CJK_UNIFIED_IDEOGRAPH-304ED> 2
+<CJK_UNIFIED_IDEOGRAPH-304EE> 2
+<CJK_UNIFIED_IDEOGRAPH-304EF> 2
+<CJK_UNIFIED_IDEOGRAPH-304F0> 2
+<CJK_UNIFIED_IDEOGRAPH-304F1> 2
+<CJK_UNIFIED_IDEOGRAPH-304F2> 2
+<CJK_UNIFIED_IDEOGRAPH-304F3> 2
+<CJK_UNIFIED_IDEOGRAPH-304F4> 2
+<CJK_UNIFIED_IDEOGRAPH-304F5> 2
+<CJK_UNIFIED_IDEOGRAPH-304F6> 2
+<CJK_UNIFIED_IDEOGRAPH-304F7> 2
+<CJK_UNIFIED_IDEOGRAPH-304F8> 2
+<CJK_UNIFIED_IDEOGRAPH-304F9> 2
+<CJK_UNIFIED_IDEOGRAPH-304FA> 2
+<CJK_UNIFIED_IDEOGRAPH-304FB> 2
+<CJK_UNIFIED_IDEOGRAPH-304FC> 2
+<CJK_UNIFIED_IDEOGRAPH-304FD> 2
+<CJK_UNIFIED_IDEOGRAPH-304FE> 2
+<CJK_UNIFIED_IDEOGRAPH-304FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30500> 2
+<CJK_UNIFIED_IDEOGRAPH-30501> 2
+<CJK_UNIFIED_IDEOGRAPH-30502> 2
+<CJK_UNIFIED_IDEOGRAPH-30503> 2
+<CJK_UNIFIED_IDEOGRAPH-30504> 2
+<CJK_UNIFIED_IDEOGRAPH-30505> 2
+<CJK_UNIFIED_IDEOGRAPH-30506> 2
+<CJK_UNIFIED_IDEOGRAPH-30507> 2
+<CJK_UNIFIED_IDEOGRAPH-30508> 2
+<CJK_UNIFIED_IDEOGRAPH-30509> 2
+<CJK_UNIFIED_IDEOGRAPH-3050A> 2
+<CJK_UNIFIED_IDEOGRAPH-3050B> 2
+<CJK_UNIFIED_IDEOGRAPH-3050C> 2
+<CJK_UNIFIED_IDEOGRAPH-3050D> 2
+<CJK_UNIFIED_IDEOGRAPH-3050E> 2
+<CJK_UNIFIED_IDEOGRAPH-3050F> 2
+<CJK_UNIFIED_IDEOGRAPH-30510> 2
+<CJK_UNIFIED_IDEOGRAPH-30511> 2
+<CJK_UNIFIED_IDEOGRAPH-30512> 2
+<CJK_UNIFIED_IDEOGRAPH-30513> 2
+<CJK_UNIFIED_IDEOGRAPH-30514> 2
+<CJK_UNIFIED_IDEOGRAPH-30515> 2
+<CJK_UNIFIED_IDEOGRAPH-30516> 2
+<CJK_UNIFIED_IDEOGRAPH-30517> 2
+<CJK_UNIFIED_IDEOGRAPH-30518> 2
+<CJK_UNIFIED_IDEOGRAPH-30519> 2
+<CJK_UNIFIED_IDEOGRAPH-3051A> 2
+<CJK_UNIFIED_IDEOGRAPH-3051B> 2
+<CJK_UNIFIED_IDEOGRAPH-3051C> 2
+<CJK_UNIFIED_IDEOGRAPH-3051D> 2
+<CJK_UNIFIED_IDEOGRAPH-3051E> 2
+<CJK_UNIFIED_IDEOGRAPH-3051F> 2
+<CJK_UNIFIED_IDEOGRAPH-30520> 2
+<CJK_UNIFIED_IDEOGRAPH-30521> 2
+<CJK_UNIFIED_IDEOGRAPH-30522> 2
+<CJK_UNIFIED_IDEOGRAPH-30523> 2
+<CJK_UNIFIED_IDEOGRAPH-30524> 2
+<CJK_UNIFIED_IDEOGRAPH-30525> 2
+<CJK_UNIFIED_IDEOGRAPH-30526> 2
+<CJK_UNIFIED_IDEOGRAPH-30527> 2
+<CJK_UNIFIED_IDEOGRAPH-30528> 2
+<CJK_UNIFIED_IDEOGRAPH-30529> 2
+<CJK_UNIFIED_IDEOGRAPH-3052A> 2
+<CJK_UNIFIED_IDEOGRAPH-3052B> 2
+<CJK_UNIFIED_IDEOGRAPH-3052C> 2
+<CJK_UNIFIED_IDEOGRAPH-3052D> 2
+<CJK_UNIFIED_IDEOGRAPH-3052E> 2
+<CJK_UNIFIED_IDEOGRAPH-3052F> 2
+<CJK_UNIFIED_IDEOGRAPH-30530> 2
+<CJK_UNIFIED_IDEOGRAPH-30531> 2
+<CJK_UNIFIED_IDEOGRAPH-30532> 2
+<CJK_UNIFIED_IDEOGRAPH-30533> 2
+<CJK_UNIFIED_IDEOGRAPH-30534> 2
+<CJK_UNIFIED_IDEOGRAPH-30535> 2
+<CJK_UNIFIED_IDEOGRAPH-30536> 2
+<CJK_UNIFIED_IDEOGRAPH-30537> 2
+<CJK_UNIFIED_IDEOGRAPH-30538> 2
+<CJK_UNIFIED_IDEOGRAPH-30539> 2
+<CJK_UNIFIED_IDEOGRAPH-3053A> 2
+<CJK_UNIFIED_IDEOGRAPH-3053B> 2
+<CJK_UNIFIED_IDEOGRAPH-3053C> 2
+<CJK_UNIFIED_IDEOGRAPH-3053D> 2
+<CJK_UNIFIED_IDEOGRAPH-3053E> 2
+<CJK_UNIFIED_IDEOGRAPH-3053F> 2
+<CJK_UNIFIED_IDEOGRAPH-30540> 2
+<CJK_UNIFIED_IDEOGRAPH-30541> 2
+<CJK_UNIFIED_IDEOGRAPH-30542> 2
+<CJK_UNIFIED_IDEOGRAPH-30543> 2
+<CJK_UNIFIED_IDEOGRAPH-30544> 2
+<CJK_UNIFIED_IDEOGRAPH-30545> 2
+<CJK_UNIFIED_IDEOGRAPH-30546> 2
+<CJK_UNIFIED_IDEOGRAPH-30547> 2
+<CJK_UNIFIED_IDEOGRAPH-30548> 2
+<CJK_UNIFIED_IDEOGRAPH-30549> 2
+<CJK_UNIFIED_IDEOGRAPH-3054A> 2
+<CJK_UNIFIED_IDEOGRAPH-3054B> 2
+<CJK_UNIFIED_IDEOGRAPH-3054C> 2
+<CJK_UNIFIED_IDEOGRAPH-3054D> 2
+<CJK_UNIFIED_IDEOGRAPH-3054E> 2
+<CJK_UNIFIED_IDEOGRAPH-3054F> 2
+<CJK_UNIFIED_IDEOGRAPH-30550> 2
+<CJK_UNIFIED_IDEOGRAPH-30551> 2
+<CJK_UNIFIED_IDEOGRAPH-30552> 2
+<CJK_UNIFIED_IDEOGRAPH-30553> 2
+<CJK_UNIFIED_IDEOGRAPH-30554> 2
+<CJK_UNIFIED_IDEOGRAPH-30555> 2
+<CJK_UNIFIED_IDEOGRAPH-30556> 2
+<CJK_UNIFIED_IDEOGRAPH-30557> 2
+<CJK_UNIFIED_IDEOGRAPH-30558> 2
+<CJK_UNIFIED_IDEOGRAPH-30559> 2
+<CJK_UNIFIED_IDEOGRAPH-3055A> 2
+<CJK_UNIFIED_IDEOGRAPH-3055B> 2
+<CJK_UNIFIED_IDEOGRAPH-3055C> 2
+<CJK_UNIFIED_IDEOGRAPH-3055D> 2
+<CJK_UNIFIED_IDEOGRAPH-3055E> 2
+<CJK_UNIFIED_IDEOGRAPH-3055F> 2
+<CJK_UNIFIED_IDEOGRAPH-30560> 2
+<CJK_UNIFIED_IDEOGRAPH-30561> 2
+<CJK_UNIFIED_IDEOGRAPH-30562> 2
+<CJK_UNIFIED_IDEOGRAPH-30563> 2
+<CJK_UNIFIED_IDEOGRAPH-30564> 2
+<CJK_UNIFIED_IDEOGRAPH-30565> 2
+<CJK_UNIFIED_IDEOGRAPH-30566> 2
+<CJK_UNIFIED_IDEOGRAPH-30567> 2
+<CJK_UNIFIED_IDEOGRAPH-30568> 2
+<CJK_UNIFIED_IDEOGRAPH-30569> 2
+<CJK_UNIFIED_IDEOGRAPH-3056A> 2
+<CJK_UNIFIED_IDEOGRAPH-3056B> 2
+<CJK_UNIFIED_IDEOGRAPH-3056C> 2
+<CJK_UNIFIED_IDEOGRAPH-3056D> 2
+<CJK_UNIFIED_IDEOGRAPH-3056E> 2
+<CJK_UNIFIED_IDEOGRAPH-3056F> 2
+<CJK_UNIFIED_IDEOGRAPH-30570> 2
+<CJK_UNIFIED_IDEOGRAPH-30571> 2
+<CJK_UNIFIED_IDEOGRAPH-30572> 2
+<CJK_UNIFIED_IDEOGRAPH-30573> 2
+<CJK_UNIFIED_IDEOGRAPH-30574> 2
+<CJK_UNIFIED_IDEOGRAPH-30575> 2
+<CJK_UNIFIED_IDEOGRAPH-30576> 2
+<CJK_UNIFIED_IDEOGRAPH-30577> 2
+<CJK_UNIFIED_IDEOGRAPH-30578> 2
+<CJK_UNIFIED_IDEOGRAPH-30579> 2
+<CJK_UNIFIED_IDEOGRAPH-3057A> 2
+<CJK_UNIFIED_IDEOGRAPH-3057B> 2
+<CJK_UNIFIED_IDEOGRAPH-3057C> 2
+<CJK_UNIFIED_IDEOGRAPH-3057D> 2
+<CJK_UNIFIED_IDEOGRAPH-3057E> 2
+<CJK_UNIFIED_IDEOGRAPH-3057F> 2
+<CJK_UNIFIED_IDEOGRAPH-30580> 2
+<CJK_UNIFIED_IDEOGRAPH-30581> 2
+<CJK_UNIFIED_IDEOGRAPH-30582> 2
+<CJK_UNIFIED_IDEOGRAPH-30583> 2
+<CJK_UNIFIED_IDEOGRAPH-30584> 2
+<CJK_UNIFIED_IDEOGRAPH-30585> 2
+<CJK_UNIFIED_IDEOGRAPH-30586> 2
+<CJK_UNIFIED_IDEOGRAPH-30587> 2
+<CJK_UNIFIED_IDEOGRAPH-30588> 2
+<CJK_UNIFIED_IDEOGRAPH-30589> 2
+<CJK_UNIFIED_IDEOGRAPH-3058A> 2
+<CJK_UNIFIED_IDEOGRAPH-3058B> 2
+<CJK_UNIFIED_IDEOGRAPH-3058C> 2
+<CJK_UNIFIED_IDEOGRAPH-3058D> 2
+<CJK_UNIFIED_IDEOGRAPH-3058E> 2
+<CJK_UNIFIED_IDEOGRAPH-3058F> 2
+<CJK_UNIFIED_IDEOGRAPH-30590> 2
+<CJK_UNIFIED_IDEOGRAPH-30591> 2
+<CJK_UNIFIED_IDEOGRAPH-30592> 2
+<CJK_UNIFIED_IDEOGRAPH-30593> 2
+<CJK_UNIFIED_IDEOGRAPH-30594> 2
+<CJK_UNIFIED_IDEOGRAPH-30595> 2
+<CJK_UNIFIED_IDEOGRAPH-30596> 2
+<CJK_UNIFIED_IDEOGRAPH-30597> 2
+<CJK_UNIFIED_IDEOGRAPH-30598> 2
+<CJK_UNIFIED_IDEOGRAPH-30599> 2
+<CJK_UNIFIED_IDEOGRAPH-3059A> 2
+<CJK_UNIFIED_IDEOGRAPH-3059B> 2
+<CJK_UNIFIED_IDEOGRAPH-3059C> 2
+<CJK_UNIFIED_IDEOGRAPH-3059D> 2
+<CJK_UNIFIED_IDEOGRAPH-3059E> 2
+<CJK_UNIFIED_IDEOGRAPH-3059F> 2
+<CJK_UNIFIED_IDEOGRAPH-305A0> 2
+<CJK_UNIFIED_IDEOGRAPH-305A1> 2
+<CJK_UNIFIED_IDEOGRAPH-305A2> 2
+<CJK_UNIFIED_IDEOGRAPH-305A3> 2
+<CJK_UNIFIED_IDEOGRAPH-305A4> 2
+<CJK_UNIFIED_IDEOGRAPH-305A5> 2
+<CJK_UNIFIED_IDEOGRAPH-305A6> 2
+<CJK_UNIFIED_IDEOGRAPH-305A7> 2
+<CJK_UNIFIED_IDEOGRAPH-305A8> 2
+<CJK_UNIFIED_IDEOGRAPH-305A9> 2
+<CJK_UNIFIED_IDEOGRAPH-305AA> 2
+<CJK_UNIFIED_IDEOGRAPH-305AB> 2
+<CJK_UNIFIED_IDEOGRAPH-305AC> 2
+<CJK_UNIFIED_IDEOGRAPH-305AD> 2
+<CJK_UNIFIED_IDEOGRAPH-305AE> 2
+<CJK_UNIFIED_IDEOGRAPH-305AF> 2
+<CJK_UNIFIED_IDEOGRAPH-305B0> 2
+<CJK_UNIFIED_IDEOGRAPH-305B1> 2
+<CJK_UNIFIED_IDEOGRAPH-305B2> 2
+<CJK_UNIFIED_IDEOGRAPH-305B3> 2
+<CJK_UNIFIED_IDEOGRAPH-305B4> 2
+<CJK_UNIFIED_IDEOGRAPH-305B5> 2
+<CJK_UNIFIED_IDEOGRAPH-305B6> 2
+<CJK_UNIFIED_IDEOGRAPH-305B7> 2
+<CJK_UNIFIED_IDEOGRAPH-305B8> 2
+<CJK_UNIFIED_IDEOGRAPH-305B9> 2
+<CJK_UNIFIED_IDEOGRAPH-305BA> 2
+<CJK_UNIFIED_IDEOGRAPH-305BB> 2
+<CJK_UNIFIED_IDEOGRAPH-305BC> 2
+<CJK_UNIFIED_IDEOGRAPH-305BD> 2
+<CJK_UNIFIED_IDEOGRAPH-305BE> 2
+<CJK_UNIFIED_IDEOGRAPH-305BF> 2
+<CJK_UNIFIED_IDEOGRAPH-305C0> 2
+<CJK_UNIFIED_IDEOGRAPH-305C1> 2
+<CJK_UNIFIED_IDEOGRAPH-305C2> 2
+<CJK_UNIFIED_IDEOGRAPH-305C3> 2
+<CJK_UNIFIED_IDEOGRAPH-305C4> 2
+<CJK_UNIFIED_IDEOGRAPH-305C5> 2
+<CJK_UNIFIED_IDEOGRAPH-305C6> 2
+<CJK_UNIFIED_IDEOGRAPH-305C7> 2
+<CJK_UNIFIED_IDEOGRAPH-305C8> 2
+<CJK_UNIFIED_IDEOGRAPH-305C9> 2
+<CJK_UNIFIED_IDEOGRAPH-305CA> 2
+<CJK_UNIFIED_IDEOGRAPH-305CB> 2
+<CJK_UNIFIED_IDEOGRAPH-305CC> 2
+<CJK_UNIFIED_IDEOGRAPH-305CD> 2
+<CJK_UNIFIED_IDEOGRAPH-305CE> 2
+<CJK_UNIFIED_IDEOGRAPH-305CF> 2
+<CJK_UNIFIED_IDEOGRAPH-305D0> 2
+<CJK_UNIFIED_IDEOGRAPH-305D1> 2
+<CJK_UNIFIED_IDEOGRAPH-305D2> 2
+<CJK_UNIFIED_IDEOGRAPH-305D3> 2
+<CJK_UNIFIED_IDEOGRAPH-305D4> 2
+<CJK_UNIFIED_IDEOGRAPH-305D5> 2
+<CJK_UNIFIED_IDEOGRAPH-305D6> 2
+<CJK_UNIFIED_IDEOGRAPH-305D7> 2
+<CJK_UNIFIED_IDEOGRAPH-305D8> 2
+<CJK_UNIFIED_IDEOGRAPH-305D9> 2
+<CJK_UNIFIED_IDEOGRAPH-305DA> 2
+<CJK_UNIFIED_IDEOGRAPH-305DB> 2
+<CJK_UNIFIED_IDEOGRAPH-305DC> 2
+<CJK_UNIFIED_IDEOGRAPH-305DD> 2
+<CJK_UNIFIED_IDEOGRAPH-305DE> 2
+<CJK_UNIFIED_IDEOGRAPH-305DF> 2
+<CJK_UNIFIED_IDEOGRAPH-305E0> 2
+<CJK_UNIFIED_IDEOGRAPH-305E1> 2
+<CJK_UNIFIED_IDEOGRAPH-305E2> 2
+<CJK_UNIFIED_IDEOGRAPH-305E3> 2
+<CJK_UNIFIED_IDEOGRAPH-305E4> 2
+<CJK_UNIFIED_IDEOGRAPH-305E5> 2
+<CJK_UNIFIED_IDEOGRAPH-305E6> 2
+<CJK_UNIFIED_IDEOGRAPH-305E7> 2
+<CJK_UNIFIED_IDEOGRAPH-305E8> 2
+<CJK_UNIFIED_IDEOGRAPH-305E9> 2
+<CJK_UNIFIED_IDEOGRAPH-305EA> 2
+<CJK_UNIFIED_IDEOGRAPH-305EB> 2
+<CJK_UNIFIED_IDEOGRAPH-305EC> 2
+<CJK_UNIFIED_IDEOGRAPH-305ED> 2
+<CJK_UNIFIED_IDEOGRAPH-305EE> 2
+<CJK_UNIFIED_IDEOGRAPH-305EF> 2
+<CJK_UNIFIED_IDEOGRAPH-305F0> 2
+<CJK_UNIFIED_IDEOGRAPH-305F1> 2
+<CJK_UNIFIED_IDEOGRAPH-305F2> 2
+<CJK_UNIFIED_IDEOGRAPH-305F3> 2
+<CJK_UNIFIED_IDEOGRAPH-305F4> 2
+<CJK_UNIFIED_IDEOGRAPH-305F5> 2
+<CJK_UNIFIED_IDEOGRAPH-305F6> 2
+<CJK_UNIFIED_IDEOGRAPH-305F7> 2
+<CJK_UNIFIED_IDEOGRAPH-305F8> 2
+<CJK_UNIFIED_IDEOGRAPH-305F9> 2
+<CJK_UNIFIED_IDEOGRAPH-305FA> 2
+<CJK_UNIFIED_IDEOGRAPH-305FB> 2
+<CJK_UNIFIED_IDEOGRAPH-305FC> 2
+<CJK_UNIFIED_IDEOGRAPH-305FD> 2
+<CJK_UNIFIED_IDEOGRAPH-305FE> 2
+<CJK_UNIFIED_IDEOGRAPH-305FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30600> 2
+<CJK_UNIFIED_IDEOGRAPH-30601> 2
+<CJK_UNIFIED_IDEOGRAPH-30602> 2
+<CJK_UNIFIED_IDEOGRAPH-30603> 2
+<CJK_UNIFIED_IDEOGRAPH-30604> 2
+<CJK_UNIFIED_IDEOGRAPH-30605> 2
+<CJK_UNIFIED_IDEOGRAPH-30606> 2
+<CJK_UNIFIED_IDEOGRAPH-30607> 2
+<CJK_UNIFIED_IDEOGRAPH-30608> 2
+<CJK_UNIFIED_IDEOGRAPH-30609> 2
+<CJK_UNIFIED_IDEOGRAPH-3060A> 2
+<CJK_UNIFIED_IDEOGRAPH-3060B> 2
+<CJK_UNIFIED_IDEOGRAPH-3060C> 2
+<CJK_UNIFIED_IDEOGRAPH-3060D> 2
+<CJK_UNIFIED_IDEOGRAPH-3060E> 2
+<CJK_UNIFIED_IDEOGRAPH-3060F> 2
+<CJK_UNIFIED_IDEOGRAPH-30610> 2
+<CJK_UNIFIED_IDEOGRAPH-30611> 2
+<CJK_UNIFIED_IDEOGRAPH-30612> 2
+<CJK_UNIFIED_IDEOGRAPH-30613> 2
+<CJK_UNIFIED_IDEOGRAPH-30614> 2
+<CJK_UNIFIED_IDEOGRAPH-30615> 2
+<CJK_UNIFIED_IDEOGRAPH-30616> 2
+<CJK_UNIFIED_IDEOGRAPH-30617> 2
+<CJK_UNIFIED_IDEOGRAPH-30618> 2
+<CJK_UNIFIED_IDEOGRAPH-30619> 2
+<CJK_UNIFIED_IDEOGRAPH-3061A> 2
+<CJK_UNIFIED_IDEOGRAPH-3061B> 2
+<CJK_UNIFIED_IDEOGRAPH-3061C> 2
+<CJK_UNIFIED_IDEOGRAPH-3061D> 2
+<CJK_UNIFIED_IDEOGRAPH-3061E> 2
+<CJK_UNIFIED_IDEOGRAPH-3061F> 2
+<CJK_UNIFIED_IDEOGRAPH-30620> 2
+<CJK_UNIFIED_IDEOGRAPH-30621> 2
+<CJK_UNIFIED_IDEOGRAPH-30622> 2
+<CJK_UNIFIED_IDEOGRAPH-30623> 2
+<CJK_UNIFIED_IDEOGRAPH-30624> 2
+<CJK_UNIFIED_IDEOGRAPH-30625> 2
+<CJK_UNIFIED_IDEOGRAPH-30626> 2
+<CJK_UNIFIED_IDEOGRAPH-30627> 2
+<CJK_UNIFIED_IDEOGRAPH-30628> 2
+<CJK_UNIFIED_IDEOGRAPH-30629> 2
+<CJK_UNIFIED_IDEOGRAPH-3062A> 2
+<CJK_UNIFIED_IDEOGRAPH-3062B> 2
+<CJK_UNIFIED_IDEOGRAPH-3062C> 2
+<CJK_UNIFIED_IDEOGRAPH-3062D> 2
+<CJK_UNIFIED_IDEOGRAPH-3062E> 2
+<CJK_UNIFIED_IDEOGRAPH-3062F> 2
+<CJK_UNIFIED_IDEOGRAPH-30630> 2
+<CJK_UNIFIED_IDEOGRAPH-30631> 2
+<CJK_UNIFIED_IDEOGRAPH-30632> 2
+<CJK_UNIFIED_IDEOGRAPH-30633> 2
+<CJK_UNIFIED_IDEOGRAPH-30634> 2
+<CJK_UNIFIED_IDEOGRAPH-30635> 2
+<CJK_UNIFIED_IDEOGRAPH-30636> 2
+<CJK_UNIFIED_IDEOGRAPH-30637> 2
+<CJK_UNIFIED_IDEOGRAPH-30638> 2
+<CJK_UNIFIED_IDEOGRAPH-30639> 2
+<CJK_UNIFIED_IDEOGRAPH-3063A> 2
+<CJK_UNIFIED_IDEOGRAPH-3063B> 2
+<CJK_UNIFIED_IDEOGRAPH-3063C> 2
+<CJK_UNIFIED_IDEOGRAPH-3063D> 2
+<CJK_UNIFIED_IDEOGRAPH-3063E> 2
+<CJK_UNIFIED_IDEOGRAPH-3063F> 2
+<CJK_UNIFIED_IDEOGRAPH-30640> 2
+<CJK_UNIFIED_IDEOGRAPH-30641> 2
+<CJK_UNIFIED_IDEOGRAPH-30642> 2
+<CJK_UNIFIED_IDEOGRAPH-30643> 2
+<CJK_UNIFIED_IDEOGRAPH-30644> 2
+<CJK_UNIFIED_IDEOGRAPH-30645> 2
+<CJK_UNIFIED_IDEOGRAPH-30646> 2
+<CJK_UNIFIED_IDEOGRAPH-30647> 2
+<CJK_UNIFIED_IDEOGRAPH-30648> 2
+<CJK_UNIFIED_IDEOGRAPH-30649> 2
+<CJK_UNIFIED_IDEOGRAPH-3064A> 2
+<CJK_UNIFIED_IDEOGRAPH-3064B> 2
+<CJK_UNIFIED_IDEOGRAPH-3064C> 2
+<CJK_UNIFIED_IDEOGRAPH-3064D> 2
+<CJK_UNIFIED_IDEOGRAPH-3064E> 2
+<CJK_UNIFIED_IDEOGRAPH-3064F> 2
+<CJK_UNIFIED_IDEOGRAPH-30650> 2
+<CJK_UNIFIED_IDEOGRAPH-30651> 2
+<CJK_UNIFIED_IDEOGRAPH-30652> 2
+<CJK_UNIFIED_IDEOGRAPH-30653> 2
+<CJK_UNIFIED_IDEOGRAPH-30654> 2
+<CJK_UNIFIED_IDEOGRAPH-30655> 2
+<CJK_UNIFIED_IDEOGRAPH-30656> 2
+<CJK_UNIFIED_IDEOGRAPH-30657> 2
+<CJK_UNIFIED_IDEOGRAPH-30658> 2
+<CJK_UNIFIED_IDEOGRAPH-30659> 2
+<CJK_UNIFIED_IDEOGRAPH-3065A> 2
+<CJK_UNIFIED_IDEOGRAPH-3065B> 2
+<CJK_UNIFIED_IDEOGRAPH-3065C> 2
+<CJK_UNIFIED_IDEOGRAPH-3065D> 2
+<CJK_UNIFIED_IDEOGRAPH-3065E> 2
+<CJK_UNIFIED_IDEOGRAPH-3065F> 2
+<CJK_UNIFIED_IDEOGRAPH-30660> 2
+<CJK_UNIFIED_IDEOGRAPH-30661> 2
+<CJK_UNIFIED_IDEOGRAPH-30662> 2
+<CJK_UNIFIED_IDEOGRAPH-30663> 2
+<CJK_UNIFIED_IDEOGRAPH-30664> 2
+<CJK_UNIFIED_IDEOGRAPH-30665> 2
+<CJK_UNIFIED_IDEOGRAPH-30666> 2
+<CJK_UNIFIED_IDEOGRAPH-30667> 2
+<CJK_UNIFIED_IDEOGRAPH-30668> 2
+<CJK_UNIFIED_IDEOGRAPH-30669> 2
+<CJK_UNIFIED_IDEOGRAPH-3066A> 2
+<CJK_UNIFIED_IDEOGRAPH-3066B> 2
+<CJK_UNIFIED_IDEOGRAPH-3066C> 2
+<CJK_UNIFIED_IDEOGRAPH-3066D> 2
+<CJK_UNIFIED_IDEOGRAPH-3066E> 2
+<CJK_UNIFIED_IDEOGRAPH-3066F> 2
+<CJK_UNIFIED_IDEOGRAPH-30670> 2
+<CJK_UNIFIED_IDEOGRAPH-30671> 2
+<CJK_UNIFIED_IDEOGRAPH-30672> 2
+<CJK_UNIFIED_IDEOGRAPH-30673> 2
+<CJK_UNIFIED_IDEOGRAPH-30674> 2
+<CJK_UNIFIED_IDEOGRAPH-30675> 2
+<CJK_UNIFIED_IDEOGRAPH-30676> 2
+<CJK_UNIFIED_IDEOGRAPH-30677> 2
+<CJK_UNIFIED_IDEOGRAPH-30678> 2
+<CJK_UNIFIED_IDEOGRAPH-30679> 2
+<CJK_UNIFIED_IDEOGRAPH-3067A> 2
+<CJK_UNIFIED_IDEOGRAPH-3067B> 2
+<CJK_UNIFIED_IDEOGRAPH-3067C> 2
+<CJK_UNIFIED_IDEOGRAPH-3067D> 2
+<CJK_UNIFIED_IDEOGRAPH-3067E> 2
+<CJK_UNIFIED_IDEOGRAPH-3067F> 2
+<CJK_UNIFIED_IDEOGRAPH-30680> 2
+<CJK_UNIFIED_IDEOGRAPH-30681> 2
+<CJK_UNIFIED_IDEOGRAPH-30682> 2
+<CJK_UNIFIED_IDEOGRAPH-30683> 2
+<CJK_UNIFIED_IDEOGRAPH-30684> 2
+<CJK_UNIFIED_IDEOGRAPH-30685> 2
+<CJK_UNIFIED_IDEOGRAPH-30686> 2
+<CJK_UNIFIED_IDEOGRAPH-30687> 2
+<CJK_UNIFIED_IDEOGRAPH-30688> 2
+<CJK_UNIFIED_IDEOGRAPH-30689> 2
+<CJK_UNIFIED_IDEOGRAPH-3068A> 2
+<CJK_UNIFIED_IDEOGRAPH-3068B> 2
+<CJK_UNIFIED_IDEOGRAPH-3068C> 2
+<CJK_UNIFIED_IDEOGRAPH-3068D> 2
+<CJK_UNIFIED_IDEOGRAPH-3068E> 2
+<CJK_UNIFIED_IDEOGRAPH-3068F> 2
+<CJK_UNIFIED_IDEOGRAPH-30690> 2
+<CJK_UNIFIED_IDEOGRAPH-30691> 2
+<CJK_UNIFIED_IDEOGRAPH-30692> 2
+<CJK_UNIFIED_IDEOGRAPH-30693> 2
+<CJK_UNIFIED_IDEOGRAPH-30694> 2
+<CJK_UNIFIED_IDEOGRAPH-30695> 2
+<CJK_UNIFIED_IDEOGRAPH-30696> 2
+<CJK_UNIFIED_IDEOGRAPH-30697> 2
+<CJK_UNIFIED_IDEOGRAPH-30698> 2
+<CJK_UNIFIED_IDEOGRAPH-30699> 2
+<CJK_UNIFIED_IDEOGRAPH-3069A> 2
+<CJK_UNIFIED_IDEOGRAPH-3069B> 2
+<CJK_UNIFIED_IDEOGRAPH-3069C> 2
+<CJK_UNIFIED_IDEOGRAPH-3069D> 2
+<CJK_UNIFIED_IDEOGRAPH-3069E> 2
+<CJK_UNIFIED_IDEOGRAPH-3069F> 2
+<CJK_UNIFIED_IDEOGRAPH-306A0> 2
+<CJK_UNIFIED_IDEOGRAPH-306A1> 2
+<CJK_UNIFIED_IDEOGRAPH-306A2> 2
+<CJK_UNIFIED_IDEOGRAPH-306A3> 2
+<CJK_UNIFIED_IDEOGRAPH-306A4> 2
+<CJK_UNIFIED_IDEOGRAPH-306A5> 2
+<CJK_UNIFIED_IDEOGRAPH-306A6> 2
+<CJK_UNIFIED_IDEOGRAPH-306A7> 2
+<CJK_UNIFIED_IDEOGRAPH-306A8> 2
+<CJK_UNIFIED_IDEOGRAPH-306A9> 2
+<CJK_UNIFIED_IDEOGRAPH-306AA> 2
+<CJK_UNIFIED_IDEOGRAPH-306AB> 2
+<CJK_UNIFIED_IDEOGRAPH-306AC> 2
+<CJK_UNIFIED_IDEOGRAPH-306AD> 2
+<CJK_UNIFIED_IDEOGRAPH-306AE> 2
+<CJK_UNIFIED_IDEOGRAPH-306AF> 2
+<CJK_UNIFIED_IDEOGRAPH-306B0> 2
+<CJK_UNIFIED_IDEOGRAPH-306B1> 2
+<CJK_UNIFIED_IDEOGRAPH-306B2> 2
+<CJK_UNIFIED_IDEOGRAPH-306B3> 2
+<CJK_UNIFIED_IDEOGRAPH-306B4> 2
+<CJK_UNIFIED_IDEOGRAPH-306B5> 2
+<CJK_UNIFIED_IDEOGRAPH-306B6> 2
+<CJK_UNIFIED_IDEOGRAPH-306B7> 2
+<CJK_UNIFIED_IDEOGRAPH-306B8> 2
+<CJK_UNIFIED_IDEOGRAPH-306B9> 2
+<CJK_UNIFIED_IDEOGRAPH-306BA> 2
+<CJK_UNIFIED_IDEOGRAPH-306BB> 2
+<CJK_UNIFIED_IDEOGRAPH-306BC> 2
+<CJK_UNIFIED_IDEOGRAPH-306BD> 2
+<CJK_UNIFIED_IDEOGRAPH-306BE> 2
+<CJK_UNIFIED_IDEOGRAPH-306BF> 2
+<CJK_UNIFIED_IDEOGRAPH-306C0> 2
+<CJK_UNIFIED_IDEOGRAPH-306C1> 2
+<CJK_UNIFIED_IDEOGRAPH-306C2> 2
+<CJK_UNIFIED_IDEOGRAPH-306C3> 2
+<CJK_UNIFIED_IDEOGRAPH-306C4> 2
+<CJK_UNIFIED_IDEOGRAPH-306C5> 2
+<CJK_UNIFIED_IDEOGRAPH-306C6> 2
+<CJK_UNIFIED_IDEOGRAPH-306C7> 2
+<CJK_UNIFIED_IDEOGRAPH-306C8> 2
+<CJK_UNIFIED_IDEOGRAPH-306C9> 2
+<CJK_UNIFIED_IDEOGRAPH-306CA> 2
+<CJK_UNIFIED_IDEOGRAPH-306CB> 2
+<CJK_UNIFIED_IDEOGRAPH-306CC> 2
+<CJK_UNIFIED_IDEOGRAPH-306CD> 2
+<CJK_UNIFIED_IDEOGRAPH-306CE> 2
+<CJK_UNIFIED_IDEOGRAPH-306CF> 2
+<CJK_UNIFIED_IDEOGRAPH-306D0> 2
+<CJK_UNIFIED_IDEOGRAPH-306D1> 2
+<CJK_UNIFIED_IDEOGRAPH-306D2> 2
+<CJK_UNIFIED_IDEOGRAPH-306D3> 2
+<CJK_UNIFIED_IDEOGRAPH-306D4> 2
+<CJK_UNIFIED_IDEOGRAPH-306D5> 2
+<CJK_UNIFIED_IDEOGRAPH-306D6> 2
+<CJK_UNIFIED_IDEOGRAPH-306D7> 2
+<CJK_UNIFIED_IDEOGRAPH-306D8> 2
+<CJK_UNIFIED_IDEOGRAPH-306D9> 2
+<CJK_UNIFIED_IDEOGRAPH-306DA> 2
+<CJK_UNIFIED_IDEOGRAPH-306DB> 2
+<CJK_UNIFIED_IDEOGRAPH-306DC> 2
+<CJK_UNIFIED_IDEOGRAPH-306DD> 2
+<CJK_UNIFIED_IDEOGRAPH-306DE> 2
+<CJK_UNIFIED_IDEOGRAPH-306DF> 2
+<CJK_UNIFIED_IDEOGRAPH-306E0> 2
+<CJK_UNIFIED_IDEOGRAPH-306E1> 2
+<CJK_UNIFIED_IDEOGRAPH-306E2> 2
+<CJK_UNIFIED_IDEOGRAPH-306E3> 2
+<CJK_UNIFIED_IDEOGRAPH-306E4> 2
+<CJK_UNIFIED_IDEOGRAPH-306E5> 2
+<CJK_UNIFIED_IDEOGRAPH-306E6> 2
+<CJK_UNIFIED_IDEOGRAPH-306E7> 2
+<CJK_UNIFIED_IDEOGRAPH-306E8> 2
+<CJK_UNIFIED_IDEOGRAPH-306E9> 2
+<CJK_UNIFIED_IDEOGRAPH-306EA> 2
+<CJK_UNIFIED_IDEOGRAPH-306EB> 2
+<CJK_UNIFIED_IDEOGRAPH-306EC> 2
+<CJK_UNIFIED_IDEOGRAPH-306ED> 2
+<CJK_UNIFIED_IDEOGRAPH-306EE> 2
+<CJK_UNIFIED_IDEOGRAPH-306EF> 2
+<CJK_UNIFIED_IDEOGRAPH-306F0> 2
+<CJK_UNIFIED_IDEOGRAPH-306F1> 2
+<CJK_UNIFIED_IDEOGRAPH-306F2> 2
+<CJK_UNIFIED_IDEOGRAPH-306F3> 2
+<CJK_UNIFIED_IDEOGRAPH-306F4> 2
+<CJK_UNIFIED_IDEOGRAPH-306F5> 2
+<CJK_UNIFIED_IDEOGRAPH-306F6> 2
+<CJK_UNIFIED_IDEOGRAPH-306F7> 2
+<CJK_UNIFIED_IDEOGRAPH-306F8> 2
+<CJK_UNIFIED_IDEOGRAPH-306F9> 2
+<CJK_UNIFIED_IDEOGRAPH-306FA> 2
+<CJK_UNIFIED_IDEOGRAPH-306FB> 2
+<CJK_UNIFIED_IDEOGRAPH-306FC> 2
+<CJK_UNIFIED_IDEOGRAPH-306FD> 2
+<CJK_UNIFIED_IDEOGRAPH-306FE> 2
+<CJK_UNIFIED_IDEOGRAPH-306FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30700> 2
+<CJK_UNIFIED_IDEOGRAPH-30701> 2
+<CJK_UNIFIED_IDEOGRAPH-30702> 2
+<CJK_UNIFIED_IDEOGRAPH-30703> 2
+<CJK_UNIFIED_IDEOGRAPH-30704> 2
+<CJK_UNIFIED_IDEOGRAPH-30705> 2
+<CJK_UNIFIED_IDEOGRAPH-30706> 2
+<CJK_UNIFIED_IDEOGRAPH-30707> 2
+<CJK_UNIFIED_IDEOGRAPH-30708> 2
+<CJK_UNIFIED_IDEOGRAPH-30709> 2
+<CJK_UNIFIED_IDEOGRAPH-3070A> 2
+<CJK_UNIFIED_IDEOGRAPH-3070B> 2
+<CJK_UNIFIED_IDEOGRAPH-3070C> 2
+<CJK_UNIFIED_IDEOGRAPH-3070D> 2
+<CJK_UNIFIED_IDEOGRAPH-3070E> 2
+<CJK_UNIFIED_IDEOGRAPH-3070F> 2
+<CJK_UNIFIED_IDEOGRAPH-30710> 2
+<CJK_UNIFIED_IDEOGRAPH-30711> 2
+<CJK_UNIFIED_IDEOGRAPH-30712> 2
+<CJK_UNIFIED_IDEOGRAPH-30713> 2
+<CJK_UNIFIED_IDEOGRAPH-30714> 2
+<CJK_UNIFIED_IDEOGRAPH-30715> 2
+<CJK_UNIFIED_IDEOGRAPH-30716> 2
+<CJK_UNIFIED_IDEOGRAPH-30717> 2
+<CJK_UNIFIED_IDEOGRAPH-30718> 2
+<CJK_UNIFIED_IDEOGRAPH-30719> 2
+<CJK_UNIFIED_IDEOGRAPH-3071A> 2
+<CJK_UNIFIED_IDEOGRAPH-3071B> 2
+<CJK_UNIFIED_IDEOGRAPH-3071C> 2
+<CJK_UNIFIED_IDEOGRAPH-3071D> 2
+<CJK_UNIFIED_IDEOGRAPH-3071E> 2
+<CJK_UNIFIED_IDEOGRAPH-3071F> 2
+<CJK_UNIFIED_IDEOGRAPH-30720> 2
+<CJK_UNIFIED_IDEOGRAPH-30721> 2
+<CJK_UNIFIED_IDEOGRAPH-30722> 2
+<CJK_UNIFIED_IDEOGRAPH-30723> 2
+<CJK_UNIFIED_IDEOGRAPH-30724> 2
+<CJK_UNIFIED_IDEOGRAPH-30725> 2
+<CJK_UNIFIED_IDEOGRAPH-30726> 2
+<CJK_UNIFIED_IDEOGRAPH-30727> 2
+<CJK_UNIFIED_IDEOGRAPH-30728> 2
+<CJK_UNIFIED_IDEOGRAPH-30729> 2
+<CJK_UNIFIED_IDEOGRAPH-3072A> 2
+<CJK_UNIFIED_IDEOGRAPH-3072B> 2
+<CJK_UNIFIED_IDEOGRAPH-3072C> 2
+<CJK_UNIFIED_IDEOGRAPH-3072D> 2
+<CJK_UNIFIED_IDEOGRAPH-3072E> 2
+<CJK_UNIFIED_IDEOGRAPH-3072F> 2
+<CJK_UNIFIED_IDEOGRAPH-30730> 2
+<CJK_UNIFIED_IDEOGRAPH-30731> 2
+<CJK_UNIFIED_IDEOGRAPH-30732> 2
+<CJK_UNIFIED_IDEOGRAPH-30733> 2
+<CJK_UNIFIED_IDEOGRAPH-30734> 2
+<CJK_UNIFIED_IDEOGRAPH-30735> 2
+<CJK_UNIFIED_IDEOGRAPH-30736> 2
+<CJK_UNIFIED_IDEOGRAPH-30737> 2
+<CJK_UNIFIED_IDEOGRAPH-30738> 2
+<CJK_UNIFIED_IDEOGRAPH-30739> 2
+<CJK_UNIFIED_IDEOGRAPH-3073A> 2
+<CJK_UNIFIED_IDEOGRAPH-3073B> 2
+<CJK_UNIFIED_IDEOGRAPH-3073C> 2
+<CJK_UNIFIED_IDEOGRAPH-3073D> 2
+<CJK_UNIFIED_IDEOGRAPH-3073E> 2
+<CJK_UNIFIED_IDEOGRAPH-3073F> 2
+<CJK_UNIFIED_IDEOGRAPH-30740> 2
+<CJK_UNIFIED_IDEOGRAPH-30741> 2
+<CJK_UNIFIED_IDEOGRAPH-30742> 2
+<CJK_UNIFIED_IDEOGRAPH-30743> 2
+<CJK_UNIFIED_IDEOGRAPH-30744> 2
+<CJK_UNIFIED_IDEOGRAPH-30745> 2
+<CJK_UNIFIED_IDEOGRAPH-30746> 2
+<CJK_UNIFIED_IDEOGRAPH-30747> 2
+<CJK_UNIFIED_IDEOGRAPH-30748> 2
+<CJK_UNIFIED_IDEOGRAPH-30749> 2
+<CJK_UNIFIED_IDEOGRAPH-3074A> 2
+<CJK_UNIFIED_IDEOGRAPH-3074B> 2
+<CJK_UNIFIED_IDEOGRAPH-3074C> 2
+<CJK_UNIFIED_IDEOGRAPH-3074D> 2
+<CJK_UNIFIED_IDEOGRAPH-3074E> 2
+<CJK_UNIFIED_IDEOGRAPH-3074F> 2
+<CJK_UNIFIED_IDEOGRAPH-30750> 2
+<CJK_UNIFIED_IDEOGRAPH-30751> 2
+<CJK_UNIFIED_IDEOGRAPH-30752> 2
+<CJK_UNIFIED_IDEOGRAPH-30753> 2
+<CJK_UNIFIED_IDEOGRAPH-30754> 2
+<CJK_UNIFIED_IDEOGRAPH-30755> 2
+<CJK_UNIFIED_IDEOGRAPH-30756> 2
+<CJK_UNIFIED_IDEOGRAPH-30757> 2
+<CJK_UNIFIED_IDEOGRAPH-30758> 2
+<CJK_UNIFIED_IDEOGRAPH-30759> 2
+<CJK_UNIFIED_IDEOGRAPH-3075A> 2
+<CJK_UNIFIED_IDEOGRAPH-3075B> 2
+<CJK_UNIFIED_IDEOGRAPH-3075C> 2
+<CJK_UNIFIED_IDEOGRAPH-3075D> 2
+<CJK_UNIFIED_IDEOGRAPH-3075E> 2
+<CJK_UNIFIED_IDEOGRAPH-3075F> 2
+<CJK_UNIFIED_IDEOGRAPH-30760> 2
+<CJK_UNIFIED_IDEOGRAPH-30761> 2
+<CJK_UNIFIED_IDEOGRAPH-30762> 2
+<CJK_UNIFIED_IDEOGRAPH-30763> 2
+<CJK_UNIFIED_IDEOGRAPH-30764> 2
+<CJK_UNIFIED_IDEOGRAPH-30765> 2
+<CJK_UNIFIED_IDEOGRAPH-30766> 2
+<CJK_UNIFIED_IDEOGRAPH-30767> 2
+<CJK_UNIFIED_IDEOGRAPH-30768> 2
+<CJK_UNIFIED_IDEOGRAPH-30769> 2
+<CJK_UNIFIED_IDEOGRAPH-3076A> 2
+<CJK_UNIFIED_IDEOGRAPH-3076B> 2
+<CJK_UNIFIED_IDEOGRAPH-3076C> 2
+<CJK_UNIFIED_IDEOGRAPH-3076D> 2
+<CJK_UNIFIED_IDEOGRAPH-3076E> 2
+<CJK_UNIFIED_IDEOGRAPH-3076F> 2
+<CJK_UNIFIED_IDEOGRAPH-30770> 2
+<CJK_UNIFIED_IDEOGRAPH-30771> 2
+<CJK_UNIFIED_IDEOGRAPH-30772> 2
+<CJK_UNIFIED_IDEOGRAPH-30773> 2
+<CJK_UNIFIED_IDEOGRAPH-30774> 2
+<CJK_UNIFIED_IDEOGRAPH-30775> 2
+<CJK_UNIFIED_IDEOGRAPH-30776> 2
+<CJK_UNIFIED_IDEOGRAPH-30777> 2
+<CJK_UNIFIED_IDEOGRAPH-30778> 2
+<CJK_UNIFIED_IDEOGRAPH-30779> 2
+<CJK_UNIFIED_IDEOGRAPH-3077A> 2
+<CJK_UNIFIED_IDEOGRAPH-3077B> 2
+<CJK_UNIFIED_IDEOGRAPH-3077C> 2
+<CJK_UNIFIED_IDEOGRAPH-3077D> 2
+<CJK_UNIFIED_IDEOGRAPH-3077E> 2
+<CJK_UNIFIED_IDEOGRAPH-3077F> 2
+<CJK_UNIFIED_IDEOGRAPH-30780> 2
+<CJK_UNIFIED_IDEOGRAPH-30781> 2
+<CJK_UNIFIED_IDEOGRAPH-30782> 2
+<CJK_UNIFIED_IDEOGRAPH-30783> 2
+<CJK_UNIFIED_IDEOGRAPH-30784> 2
+<CJK_UNIFIED_IDEOGRAPH-30785> 2
+<CJK_UNIFIED_IDEOGRAPH-30786> 2
+<CJK_UNIFIED_IDEOGRAPH-30787> 2
+<CJK_UNIFIED_IDEOGRAPH-30788> 2
+<CJK_UNIFIED_IDEOGRAPH-30789> 2
+<CJK_UNIFIED_IDEOGRAPH-3078A> 2
+<CJK_UNIFIED_IDEOGRAPH-3078B> 2
+<CJK_UNIFIED_IDEOGRAPH-3078C> 2
+<CJK_UNIFIED_IDEOGRAPH-3078D> 2
+<CJK_UNIFIED_IDEOGRAPH-3078E> 2
+<CJK_UNIFIED_IDEOGRAPH-3078F> 2
+<CJK_UNIFIED_IDEOGRAPH-30790> 2
+<CJK_UNIFIED_IDEOGRAPH-30791> 2
+<CJK_UNIFIED_IDEOGRAPH-30792> 2
+<CJK_UNIFIED_IDEOGRAPH-30793> 2
+<CJK_UNIFIED_IDEOGRAPH-30794> 2
+<CJK_UNIFIED_IDEOGRAPH-30795> 2
+<CJK_UNIFIED_IDEOGRAPH-30796> 2
+<CJK_UNIFIED_IDEOGRAPH-30797> 2
+<CJK_UNIFIED_IDEOGRAPH-30798> 2
+<CJK_UNIFIED_IDEOGRAPH-30799> 2
+<CJK_UNIFIED_IDEOGRAPH-3079A> 2
+<CJK_UNIFIED_IDEOGRAPH-3079B> 2
+<CJK_UNIFIED_IDEOGRAPH-3079C> 2
+<CJK_UNIFIED_IDEOGRAPH-3079D> 2
+<CJK_UNIFIED_IDEOGRAPH-3079E> 2
+<CJK_UNIFIED_IDEOGRAPH-3079F> 2
+<CJK_UNIFIED_IDEOGRAPH-307A0> 2
+<CJK_UNIFIED_IDEOGRAPH-307A1> 2
+<CJK_UNIFIED_IDEOGRAPH-307A2> 2
+<CJK_UNIFIED_IDEOGRAPH-307A3> 2
+<CJK_UNIFIED_IDEOGRAPH-307A4> 2
+<CJK_UNIFIED_IDEOGRAPH-307A5> 2
+<CJK_UNIFIED_IDEOGRAPH-307A6> 2
+<CJK_UNIFIED_IDEOGRAPH-307A7> 2
+<CJK_UNIFIED_IDEOGRAPH-307A8> 2
+<CJK_UNIFIED_IDEOGRAPH-307A9> 2
+<CJK_UNIFIED_IDEOGRAPH-307AA> 2
+<CJK_UNIFIED_IDEOGRAPH-307AB> 2
+<CJK_UNIFIED_IDEOGRAPH-307AC> 2
+<CJK_UNIFIED_IDEOGRAPH-307AD> 2
+<CJK_UNIFIED_IDEOGRAPH-307AE> 2
+<CJK_UNIFIED_IDEOGRAPH-307AF> 2
+<CJK_UNIFIED_IDEOGRAPH-307B0> 2
+<CJK_UNIFIED_IDEOGRAPH-307B1> 2
+<CJK_UNIFIED_IDEOGRAPH-307B2> 2
+<CJK_UNIFIED_IDEOGRAPH-307B3> 2
+<CJK_UNIFIED_IDEOGRAPH-307B4> 2
+<CJK_UNIFIED_IDEOGRAPH-307B5> 2
+<CJK_UNIFIED_IDEOGRAPH-307B6> 2
+<CJK_UNIFIED_IDEOGRAPH-307B7> 2
+<CJK_UNIFIED_IDEOGRAPH-307B8> 2
+<CJK_UNIFIED_IDEOGRAPH-307B9> 2
+<CJK_UNIFIED_IDEOGRAPH-307BA> 2
+<CJK_UNIFIED_IDEOGRAPH-307BB> 2
+<CJK_UNIFIED_IDEOGRAPH-307BC> 2
+<CJK_UNIFIED_IDEOGRAPH-307BD> 2
+<CJK_UNIFIED_IDEOGRAPH-307BE> 2
+<CJK_UNIFIED_IDEOGRAPH-307BF> 2
+<CJK_UNIFIED_IDEOGRAPH-307C0> 2
+<CJK_UNIFIED_IDEOGRAPH-307C1> 2
+<CJK_UNIFIED_IDEOGRAPH-307C2> 2
+<CJK_UNIFIED_IDEOGRAPH-307C3> 2
+<CJK_UNIFIED_IDEOGRAPH-307C4> 2
+<CJK_UNIFIED_IDEOGRAPH-307C5> 2
+<CJK_UNIFIED_IDEOGRAPH-307C6> 2
+<CJK_UNIFIED_IDEOGRAPH-307C7> 2
+<CJK_UNIFIED_IDEOGRAPH-307C8> 2
+<CJK_UNIFIED_IDEOGRAPH-307C9> 2
+<CJK_UNIFIED_IDEOGRAPH-307CA> 2
+<CJK_UNIFIED_IDEOGRAPH-307CB> 2
+<CJK_UNIFIED_IDEOGRAPH-307CC> 2
+<CJK_UNIFIED_IDEOGRAPH-307CD> 2
+<CJK_UNIFIED_IDEOGRAPH-307CE> 2
+<CJK_UNIFIED_IDEOGRAPH-307CF> 2
+<CJK_UNIFIED_IDEOGRAPH-307D0> 2
+<CJK_UNIFIED_IDEOGRAPH-307D1> 2
+<CJK_UNIFIED_IDEOGRAPH-307D2> 2
+<CJK_UNIFIED_IDEOGRAPH-307D3> 2
+<CJK_UNIFIED_IDEOGRAPH-307D4> 2
+<CJK_UNIFIED_IDEOGRAPH-307D5> 2
+<CJK_UNIFIED_IDEOGRAPH-307D6> 2
+<CJK_UNIFIED_IDEOGRAPH-307D7> 2
+<CJK_UNIFIED_IDEOGRAPH-307D8> 2
+<CJK_UNIFIED_IDEOGRAPH-307D9> 2
+<CJK_UNIFIED_IDEOGRAPH-307DA> 2
+<CJK_UNIFIED_IDEOGRAPH-307DB> 2
+<CJK_UNIFIED_IDEOGRAPH-307DC> 2
+<CJK_UNIFIED_IDEOGRAPH-307DD> 2
+<CJK_UNIFIED_IDEOGRAPH-307DE> 2
+<CJK_UNIFIED_IDEOGRAPH-307DF> 2
+<CJK_UNIFIED_IDEOGRAPH-307E0> 2
+<CJK_UNIFIED_IDEOGRAPH-307E1> 2
+<CJK_UNIFIED_IDEOGRAPH-307E2> 2
+<CJK_UNIFIED_IDEOGRAPH-307E3> 2
+<CJK_UNIFIED_IDEOGRAPH-307E4> 2
+<CJK_UNIFIED_IDEOGRAPH-307E5> 2
+<CJK_UNIFIED_IDEOGRAPH-307E6> 2
+<CJK_UNIFIED_IDEOGRAPH-307E7> 2
+<CJK_UNIFIED_IDEOGRAPH-307E8> 2
+<CJK_UNIFIED_IDEOGRAPH-307E9> 2
+<CJK_UNIFIED_IDEOGRAPH-307EA> 2
+<CJK_UNIFIED_IDEOGRAPH-307EB> 2
+<CJK_UNIFIED_IDEOGRAPH-307EC> 2
+<CJK_UNIFIED_IDEOGRAPH-307ED> 2
+<CJK_UNIFIED_IDEOGRAPH-307EE> 2
+<CJK_UNIFIED_IDEOGRAPH-307EF> 2
+<CJK_UNIFIED_IDEOGRAPH-307F0> 2
+<CJK_UNIFIED_IDEOGRAPH-307F1> 2
+<CJK_UNIFIED_IDEOGRAPH-307F2> 2
+<CJK_UNIFIED_IDEOGRAPH-307F3> 2
+<CJK_UNIFIED_IDEOGRAPH-307F4> 2
+<CJK_UNIFIED_IDEOGRAPH-307F5> 2
+<CJK_UNIFIED_IDEOGRAPH-307F6> 2
+<CJK_UNIFIED_IDEOGRAPH-307F7> 2
+<CJK_UNIFIED_IDEOGRAPH-307F8> 2
+<CJK_UNIFIED_IDEOGRAPH-307F9> 2
+<CJK_UNIFIED_IDEOGRAPH-307FA> 2
+<CJK_UNIFIED_IDEOGRAPH-307FB> 2
+<CJK_UNIFIED_IDEOGRAPH-307FC> 2
+<CJK_UNIFIED_IDEOGRAPH-307FD> 2
+<CJK_UNIFIED_IDEOGRAPH-307FE> 2
+<CJK_UNIFIED_IDEOGRAPH-307FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30800> 2
+<CJK_UNIFIED_IDEOGRAPH-30801> 2
+<CJK_UNIFIED_IDEOGRAPH-30802> 2
+<CJK_UNIFIED_IDEOGRAPH-30803> 2
+<CJK_UNIFIED_IDEOGRAPH-30804> 2
+<CJK_UNIFIED_IDEOGRAPH-30805> 2
+<CJK_UNIFIED_IDEOGRAPH-30806> 2
+<CJK_UNIFIED_IDEOGRAPH-30807> 2
+<CJK_UNIFIED_IDEOGRAPH-30808> 2
+<CJK_UNIFIED_IDEOGRAPH-30809> 2
+<CJK_UNIFIED_IDEOGRAPH-3080A> 2
+<CJK_UNIFIED_IDEOGRAPH-3080B> 2
+<CJK_UNIFIED_IDEOGRAPH-3080C> 2
+<CJK_UNIFIED_IDEOGRAPH-3080D> 2
+<CJK_UNIFIED_IDEOGRAPH-3080E> 2
+<CJK_UNIFIED_IDEOGRAPH-3080F> 2
+<CJK_UNIFIED_IDEOGRAPH-30810> 2
+<CJK_UNIFIED_IDEOGRAPH-30811> 2
+<CJK_UNIFIED_IDEOGRAPH-30812> 2
+<CJK_UNIFIED_IDEOGRAPH-30813> 2
+<CJK_UNIFIED_IDEOGRAPH-30814> 2
+<CJK_UNIFIED_IDEOGRAPH-30815> 2
+<CJK_UNIFIED_IDEOGRAPH-30816> 2
+<CJK_UNIFIED_IDEOGRAPH-30817> 2
+<CJK_UNIFIED_IDEOGRAPH-30818> 2
+<CJK_UNIFIED_IDEOGRAPH-30819> 2
+<CJK_UNIFIED_IDEOGRAPH-3081A> 2
+<CJK_UNIFIED_IDEOGRAPH-3081B> 2
+<CJK_UNIFIED_IDEOGRAPH-3081C> 2
+<CJK_UNIFIED_IDEOGRAPH-3081D> 2
+<CJK_UNIFIED_IDEOGRAPH-3081E> 2
+<CJK_UNIFIED_IDEOGRAPH-3081F> 2
+<CJK_UNIFIED_IDEOGRAPH-30820> 2
+<CJK_UNIFIED_IDEOGRAPH-30821> 2
+<CJK_UNIFIED_IDEOGRAPH-30822> 2
+<CJK_UNIFIED_IDEOGRAPH-30823> 2
+<CJK_UNIFIED_IDEOGRAPH-30824> 2
+<CJK_UNIFIED_IDEOGRAPH-30825> 2
+<CJK_UNIFIED_IDEOGRAPH-30826> 2
+<CJK_UNIFIED_IDEOGRAPH-30827> 2
+<CJK_UNIFIED_IDEOGRAPH-30828> 2
+<CJK_UNIFIED_IDEOGRAPH-30829> 2
+<CJK_UNIFIED_IDEOGRAPH-3082A> 2
+<CJK_UNIFIED_IDEOGRAPH-3082B> 2
+<CJK_UNIFIED_IDEOGRAPH-3082C> 2
+<CJK_UNIFIED_IDEOGRAPH-3082D> 2
+<CJK_UNIFIED_IDEOGRAPH-3082E> 2
+<CJK_UNIFIED_IDEOGRAPH-3082F> 2
+<CJK_UNIFIED_IDEOGRAPH-30830> 2
+<CJK_UNIFIED_IDEOGRAPH-30831> 2
+<CJK_UNIFIED_IDEOGRAPH-30832> 2
+<CJK_UNIFIED_IDEOGRAPH-30833> 2
+<CJK_UNIFIED_IDEOGRAPH-30834> 2
+<CJK_UNIFIED_IDEOGRAPH-30835> 2
+<CJK_UNIFIED_IDEOGRAPH-30836> 2
+<CJK_UNIFIED_IDEOGRAPH-30837> 2
+<CJK_UNIFIED_IDEOGRAPH-30838> 2
+<CJK_UNIFIED_IDEOGRAPH-30839> 2
+<CJK_UNIFIED_IDEOGRAPH-3083A> 2
+<CJK_UNIFIED_IDEOGRAPH-3083B> 2
+<CJK_UNIFIED_IDEOGRAPH-3083C> 2
+<CJK_UNIFIED_IDEOGRAPH-3083D> 2
+<CJK_UNIFIED_IDEOGRAPH-3083E> 2
+<CJK_UNIFIED_IDEOGRAPH-3083F> 2
+<CJK_UNIFIED_IDEOGRAPH-30840> 2
+<CJK_UNIFIED_IDEOGRAPH-30841> 2
+<CJK_UNIFIED_IDEOGRAPH-30842> 2
+<CJK_UNIFIED_IDEOGRAPH-30843> 2
+<CJK_UNIFIED_IDEOGRAPH-30844> 2
+<CJK_UNIFIED_IDEOGRAPH-30845> 2
+<CJK_UNIFIED_IDEOGRAPH-30846> 2
+<CJK_UNIFIED_IDEOGRAPH-30847> 2
+<CJK_UNIFIED_IDEOGRAPH-30848> 2
+<CJK_UNIFIED_IDEOGRAPH-30849> 2
+<CJK_UNIFIED_IDEOGRAPH-3084A> 2
+<CJK_UNIFIED_IDEOGRAPH-3084B> 2
+<CJK_UNIFIED_IDEOGRAPH-3084C> 2
+<CJK_UNIFIED_IDEOGRAPH-3084D> 2
+<CJK_UNIFIED_IDEOGRAPH-3084E> 2
+<CJK_UNIFIED_IDEOGRAPH-3084F> 2
+<CJK_UNIFIED_IDEOGRAPH-30850> 2
+<CJK_UNIFIED_IDEOGRAPH-30851> 2
+<CJK_UNIFIED_IDEOGRAPH-30852> 2
+<CJK_UNIFIED_IDEOGRAPH-30853> 2
+<CJK_UNIFIED_IDEOGRAPH-30854> 2
+<CJK_UNIFIED_IDEOGRAPH-30855> 2
+<CJK_UNIFIED_IDEOGRAPH-30856> 2
+<CJK_UNIFIED_IDEOGRAPH-30857> 2
+<CJK_UNIFIED_IDEOGRAPH-30858> 2
+<CJK_UNIFIED_IDEOGRAPH-30859> 2
+<CJK_UNIFIED_IDEOGRAPH-3085A> 2
+<CJK_UNIFIED_IDEOGRAPH-3085B> 2
+<CJK_UNIFIED_IDEOGRAPH-3085C> 2
+<CJK_UNIFIED_IDEOGRAPH-3085D> 2
+<CJK_UNIFIED_IDEOGRAPH-3085E> 2
+<CJK_UNIFIED_IDEOGRAPH-3085F> 2
+<CJK_UNIFIED_IDEOGRAPH-30860> 2
+<CJK_UNIFIED_IDEOGRAPH-30861> 2
+<CJK_UNIFIED_IDEOGRAPH-30862> 2
+<CJK_UNIFIED_IDEOGRAPH-30863> 2
+<CJK_UNIFIED_IDEOGRAPH-30864> 2
+<CJK_UNIFIED_IDEOGRAPH-30865> 2
+<CJK_UNIFIED_IDEOGRAPH-30866> 2
+<CJK_UNIFIED_IDEOGRAPH-30867> 2
+<CJK_UNIFIED_IDEOGRAPH-30868> 2
+<CJK_UNIFIED_IDEOGRAPH-30869> 2
+<CJK_UNIFIED_IDEOGRAPH-3086A> 2
+<CJK_UNIFIED_IDEOGRAPH-3086B> 2
+<CJK_UNIFIED_IDEOGRAPH-3086C> 2
+<CJK_UNIFIED_IDEOGRAPH-3086D> 2
+<CJK_UNIFIED_IDEOGRAPH-3086E> 2
+<CJK_UNIFIED_IDEOGRAPH-3086F> 2
+<CJK_UNIFIED_IDEOGRAPH-30870> 2
+<CJK_UNIFIED_IDEOGRAPH-30871> 2
+<CJK_UNIFIED_IDEOGRAPH-30872> 2
+<CJK_UNIFIED_IDEOGRAPH-30873> 2
+<CJK_UNIFIED_IDEOGRAPH-30874> 2
+<CJK_UNIFIED_IDEOGRAPH-30875> 2
+<CJK_UNIFIED_IDEOGRAPH-30876> 2
+<CJK_UNIFIED_IDEOGRAPH-30877> 2
+<CJK_UNIFIED_IDEOGRAPH-30878> 2
+<CJK_UNIFIED_IDEOGRAPH-30879> 2
+<CJK_UNIFIED_IDEOGRAPH-3087A> 2
+<CJK_UNIFIED_IDEOGRAPH-3087B> 2
+<CJK_UNIFIED_IDEOGRAPH-3087C> 2
+<CJK_UNIFIED_IDEOGRAPH-3087D> 2
+<CJK_UNIFIED_IDEOGRAPH-3087E> 2
+<CJK_UNIFIED_IDEOGRAPH-3087F> 2
+<CJK_UNIFIED_IDEOGRAPH-30880> 2
+<CJK_UNIFIED_IDEOGRAPH-30881> 2
+<CJK_UNIFIED_IDEOGRAPH-30882> 2
+<CJK_UNIFIED_IDEOGRAPH-30883> 2
+<CJK_UNIFIED_IDEOGRAPH-30884> 2
+<CJK_UNIFIED_IDEOGRAPH-30885> 2
+<CJK_UNIFIED_IDEOGRAPH-30886> 2
+<CJK_UNIFIED_IDEOGRAPH-30887> 2
+<CJK_UNIFIED_IDEOGRAPH-30888> 2
+<CJK_UNIFIED_IDEOGRAPH-30889> 2
+<CJK_UNIFIED_IDEOGRAPH-3088A> 2
+<CJK_UNIFIED_IDEOGRAPH-3088B> 2
+<CJK_UNIFIED_IDEOGRAPH-3088C> 2
+<CJK_UNIFIED_IDEOGRAPH-3088D> 2
+<CJK_UNIFIED_IDEOGRAPH-3088E> 2
+<CJK_UNIFIED_IDEOGRAPH-3088F> 2
+<CJK_UNIFIED_IDEOGRAPH-30890> 2
+<CJK_UNIFIED_IDEOGRAPH-30891> 2
+<CJK_UNIFIED_IDEOGRAPH-30892> 2
+<CJK_UNIFIED_IDEOGRAPH-30893> 2
+<CJK_UNIFIED_IDEOGRAPH-30894> 2
+<CJK_UNIFIED_IDEOGRAPH-30895> 2
+<CJK_UNIFIED_IDEOGRAPH-30896> 2
+<CJK_UNIFIED_IDEOGRAPH-30897> 2
+<CJK_UNIFIED_IDEOGRAPH-30898> 2
+<CJK_UNIFIED_IDEOGRAPH-30899> 2
+<CJK_UNIFIED_IDEOGRAPH-3089A> 2
+<CJK_UNIFIED_IDEOGRAPH-3089B> 2
+<CJK_UNIFIED_IDEOGRAPH-3089C> 2
+<CJK_UNIFIED_IDEOGRAPH-3089D> 2
+<CJK_UNIFIED_IDEOGRAPH-3089E> 2
+<CJK_UNIFIED_IDEOGRAPH-3089F> 2
+<CJK_UNIFIED_IDEOGRAPH-308A0> 2
+<CJK_UNIFIED_IDEOGRAPH-308A1> 2
+<CJK_UNIFIED_IDEOGRAPH-308A2> 2
+<CJK_UNIFIED_IDEOGRAPH-308A3> 2
+<CJK_UNIFIED_IDEOGRAPH-308A4> 2
+<CJK_UNIFIED_IDEOGRAPH-308A5> 2
+<CJK_UNIFIED_IDEOGRAPH-308A6> 2
+<CJK_UNIFIED_IDEOGRAPH-308A7> 2
+<CJK_UNIFIED_IDEOGRAPH-308A8> 2
+<CJK_UNIFIED_IDEOGRAPH-308A9> 2
+<CJK_UNIFIED_IDEOGRAPH-308AA> 2
+<CJK_UNIFIED_IDEOGRAPH-308AB> 2
+<CJK_UNIFIED_IDEOGRAPH-308AC> 2
+<CJK_UNIFIED_IDEOGRAPH-308AD> 2
+<CJK_UNIFIED_IDEOGRAPH-308AE> 2
+<CJK_UNIFIED_IDEOGRAPH-308AF> 2
+<CJK_UNIFIED_IDEOGRAPH-308B0> 2
+<CJK_UNIFIED_IDEOGRAPH-308B1> 2
+<CJK_UNIFIED_IDEOGRAPH-308B2> 2
+<CJK_UNIFIED_IDEOGRAPH-308B3> 2
+<CJK_UNIFIED_IDEOGRAPH-308B4> 2
+<CJK_UNIFIED_IDEOGRAPH-308B5> 2
+<CJK_UNIFIED_IDEOGRAPH-308B6> 2
+<CJK_UNIFIED_IDEOGRAPH-308B7> 2
+<CJK_UNIFIED_IDEOGRAPH-308B8> 2
+<CJK_UNIFIED_IDEOGRAPH-308B9> 2
+<CJK_UNIFIED_IDEOGRAPH-308BA> 2
+<CJK_UNIFIED_IDEOGRAPH-308BB> 2
+<CJK_UNIFIED_IDEOGRAPH-308BC> 2
+<CJK_UNIFIED_IDEOGRAPH-308BD> 2
+<CJK_UNIFIED_IDEOGRAPH-308BE> 2
+<CJK_UNIFIED_IDEOGRAPH-308BF> 2
+<CJK_UNIFIED_IDEOGRAPH-308C0> 2
+<CJK_UNIFIED_IDEOGRAPH-308C1> 2
+<CJK_UNIFIED_IDEOGRAPH-308C2> 2
+<CJK_UNIFIED_IDEOGRAPH-308C3> 2
+<CJK_UNIFIED_IDEOGRAPH-308C4> 2
+<CJK_UNIFIED_IDEOGRAPH-308C5> 2
+<CJK_UNIFIED_IDEOGRAPH-308C6> 2
+<CJK_UNIFIED_IDEOGRAPH-308C7> 2
+<CJK_UNIFIED_IDEOGRAPH-308C8> 2
+<CJK_UNIFIED_IDEOGRAPH-308C9> 2
+<CJK_UNIFIED_IDEOGRAPH-308CA> 2
+<CJK_UNIFIED_IDEOGRAPH-308CB> 2
+<CJK_UNIFIED_IDEOGRAPH-308CC> 2
+<CJK_UNIFIED_IDEOGRAPH-308CD> 2
+<CJK_UNIFIED_IDEOGRAPH-308CE> 2
+<CJK_UNIFIED_IDEOGRAPH-308CF> 2
+<CJK_UNIFIED_IDEOGRAPH-308D0> 2
+<CJK_UNIFIED_IDEOGRAPH-308D1> 2
+<CJK_UNIFIED_IDEOGRAPH-308D2> 2
+<CJK_UNIFIED_IDEOGRAPH-308D3> 2
+<CJK_UNIFIED_IDEOGRAPH-308D4> 2
+<CJK_UNIFIED_IDEOGRAPH-308D5> 2
+<CJK_UNIFIED_IDEOGRAPH-308D6> 2
+<CJK_UNIFIED_IDEOGRAPH-308D7> 2
+<CJK_UNIFIED_IDEOGRAPH-308D8> 2
+<CJK_UNIFIED_IDEOGRAPH-308D9> 2
+<CJK_UNIFIED_IDEOGRAPH-308DA> 2
+<CJK_UNIFIED_IDEOGRAPH-308DB> 2
+<CJK_UNIFIED_IDEOGRAPH-308DC> 2
+<CJK_UNIFIED_IDEOGRAPH-308DD> 2
+<CJK_UNIFIED_IDEOGRAPH-308DE> 2
+<CJK_UNIFIED_IDEOGRAPH-308DF> 2
+<CJK_UNIFIED_IDEOGRAPH-308E0> 2
+<CJK_UNIFIED_IDEOGRAPH-308E1> 2
+<CJK_UNIFIED_IDEOGRAPH-308E2> 2
+<CJK_UNIFIED_IDEOGRAPH-308E3> 2
+<CJK_UNIFIED_IDEOGRAPH-308E4> 2
+<CJK_UNIFIED_IDEOGRAPH-308E5> 2
+<CJK_UNIFIED_IDEOGRAPH-308E6> 2
+<CJK_UNIFIED_IDEOGRAPH-308E7> 2
+<CJK_UNIFIED_IDEOGRAPH-308E8> 2
+<CJK_UNIFIED_IDEOGRAPH-308E9> 2
+<CJK_UNIFIED_IDEOGRAPH-308EA> 2
+<CJK_UNIFIED_IDEOGRAPH-308EB> 2
+<CJK_UNIFIED_IDEOGRAPH-308EC> 2
+<CJK_UNIFIED_IDEOGRAPH-308ED> 2
+<CJK_UNIFIED_IDEOGRAPH-308EE> 2
+<CJK_UNIFIED_IDEOGRAPH-308EF> 2
+<CJK_UNIFIED_IDEOGRAPH-308F0> 2
+<CJK_UNIFIED_IDEOGRAPH-308F1> 2
+<CJK_UNIFIED_IDEOGRAPH-308F2> 2
+<CJK_UNIFIED_IDEOGRAPH-308F3> 2
+<CJK_UNIFIED_IDEOGRAPH-308F4> 2
+<CJK_UNIFIED_IDEOGRAPH-308F5> 2
+<CJK_UNIFIED_IDEOGRAPH-308F6> 2
+<CJK_UNIFIED_IDEOGRAPH-308F7> 2
+<CJK_UNIFIED_IDEOGRAPH-308F8> 2
+<CJK_UNIFIED_IDEOGRAPH-308F9> 2
+<CJK_UNIFIED_IDEOGRAPH-308FA> 2
+<CJK_UNIFIED_IDEOGRAPH-308FB> 2
+<CJK_UNIFIED_IDEOGRAPH-308FC> 2
+<CJK_UNIFIED_IDEOGRAPH-308FD> 2
+<CJK_UNIFIED_IDEOGRAPH-308FE> 2
+<CJK_UNIFIED_IDEOGRAPH-308FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30900> 2
+<CJK_UNIFIED_IDEOGRAPH-30901> 2
+<CJK_UNIFIED_IDEOGRAPH-30902> 2
+<CJK_UNIFIED_IDEOGRAPH-30903> 2
+<CJK_UNIFIED_IDEOGRAPH-30904> 2
+<CJK_UNIFIED_IDEOGRAPH-30905> 2
+<CJK_UNIFIED_IDEOGRAPH-30906> 2
+<CJK_UNIFIED_IDEOGRAPH-30907> 2
+<CJK_UNIFIED_IDEOGRAPH-30908> 2
+<CJK_UNIFIED_IDEOGRAPH-30909> 2
+<CJK_UNIFIED_IDEOGRAPH-3090A> 2
+<CJK_UNIFIED_IDEOGRAPH-3090B> 2
+<CJK_UNIFIED_IDEOGRAPH-3090C> 2
+<CJK_UNIFIED_IDEOGRAPH-3090D> 2
+<CJK_UNIFIED_IDEOGRAPH-3090E> 2
+<CJK_UNIFIED_IDEOGRAPH-3090F> 2
+<CJK_UNIFIED_IDEOGRAPH-30910> 2
+<CJK_UNIFIED_IDEOGRAPH-30911> 2
+<CJK_UNIFIED_IDEOGRAPH-30912> 2
+<CJK_UNIFIED_IDEOGRAPH-30913> 2
+<CJK_UNIFIED_IDEOGRAPH-30914> 2
+<CJK_UNIFIED_IDEOGRAPH-30915> 2
+<CJK_UNIFIED_IDEOGRAPH-30916> 2
+<CJK_UNIFIED_IDEOGRAPH-30917> 2
+<CJK_UNIFIED_IDEOGRAPH-30918> 2
+<CJK_UNIFIED_IDEOGRAPH-30919> 2
+<CJK_UNIFIED_IDEOGRAPH-3091A> 2
+<CJK_UNIFIED_IDEOGRAPH-3091B> 2
+<CJK_UNIFIED_IDEOGRAPH-3091C> 2
+<CJK_UNIFIED_IDEOGRAPH-3091D> 2
+<CJK_UNIFIED_IDEOGRAPH-3091E> 2
+<CJK_UNIFIED_IDEOGRAPH-3091F> 2
+<CJK_UNIFIED_IDEOGRAPH-30920> 2
+<CJK_UNIFIED_IDEOGRAPH-30921> 2
+<CJK_UNIFIED_IDEOGRAPH-30922> 2
+<CJK_UNIFIED_IDEOGRAPH-30923> 2
+<CJK_UNIFIED_IDEOGRAPH-30924> 2
+<CJK_UNIFIED_IDEOGRAPH-30925> 2
+<CJK_UNIFIED_IDEOGRAPH-30926> 2
+<CJK_UNIFIED_IDEOGRAPH-30927> 2
+<CJK_UNIFIED_IDEOGRAPH-30928> 2
+<CJK_UNIFIED_IDEOGRAPH-30929> 2
+<CJK_UNIFIED_IDEOGRAPH-3092A> 2
+<CJK_UNIFIED_IDEOGRAPH-3092B> 2
+<CJK_UNIFIED_IDEOGRAPH-3092C> 2
+<CJK_UNIFIED_IDEOGRAPH-3092D> 2
+<CJK_UNIFIED_IDEOGRAPH-3092E> 2
+<CJK_UNIFIED_IDEOGRAPH-3092F> 2
+<CJK_UNIFIED_IDEOGRAPH-30930> 2
+<CJK_UNIFIED_IDEOGRAPH-30931> 2
+<CJK_UNIFIED_IDEOGRAPH-30932> 2
+<CJK_UNIFIED_IDEOGRAPH-30933> 2
+<CJK_UNIFIED_IDEOGRAPH-30934> 2
+<CJK_UNIFIED_IDEOGRAPH-30935> 2
+<CJK_UNIFIED_IDEOGRAPH-30936> 2
+<CJK_UNIFIED_IDEOGRAPH-30937> 2
+<CJK_UNIFIED_IDEOGRAPH-30938> 2
+<CJK_UNIFIED_IDEOGRAPH-30939> 2
+<CJK_UNIFIED_IDEOGRAPH-3093A> 2
+<CJK_UNIFIED_IDEOGRAPH-3093B> 2
+<CJK_UNIFIED_IDEOGRAPH-3093C> 2
+<CJK_UNIFIED_IDEOGRAPH-3093D> 2
+<CJK_UNIFIED_IDEOGRAPH-3093E> 2
+<CJK_UNIFIED_IDEOGRAPH-3093F> 2
+<CJK_UNIFIED_IDEOGRAPH-30940> 2
+<CJK_UNIFIED_IDEOGRAPH-30941> 2
+<CJK_UNIFIED_IDEOGRAPH-30942> 2
+<CJK_UNIFIED_IDEOGRAPH-30943> 2
+<CJK_UNIFIED_IDEOGRAPH-30944> 2
+<CJK_UNIFIED_IDEOGRAPH-30945> 2
+<CJK_UNIFIED_IDEOGRAPH-30946> 2
+<CJK_UNIFIED_IDEOGRAPH-30947> 2
+<CJK_UNIFIED_IDEOGRAPH-30948> 2
+<CJK_UNIFIED_IDEOGRAPH-30949> 2
+<CJK_UNIFIED_IDEOGRAPH-3094A> 2
+<CJK_UNIFIED_IDEOGRAPH-3094B> 2
+<CJK_UNIFIED_IDEOGRAPH-3094C> 2
+<CJK_UNIFIED_IDEOGRAPH-3094D> 2
+<CJK_UNIFIED_IDEOGRAPH-3094E> 2
+<CJK_UNIFIED_IDEOGRAPH-3094F> 2
+<CJK_UNIFIED_IDEOGRAPH-30950> 2
+<CJK_UNIFIED_IDEOGRAPH-30951> 2
+<CJK_UNIFIED_IDEOGRAPH-30952> 2
+<CJK_UNIFIED_IDEOGRAPH-30953> 2
+<CJK_UNIFIED_IDEOGRAPH-30954> 2
+<CJK_UNIFIED_IDEOGRAPH-30955> 2
+<CJK_UNIFIED_IDEOGRAPH-30956> 2
+<CJK_UNIFIED_IDEOGRAPH-30957> 2
+<CJK_UNIFIED_IDEOGRAPH-30958> 2
+<CJK_UNIFIED_IDEOGRAPH-30959> 2
+<CJK_UNIFIED_IDEOGRAPH-3095A> 2
+<CJK_UNIFIED_IDEOGRAPH-3095B> 2
+<CJK_UNIFIED_IDEOGRAPH-3095C> 2
+<CJK_UNIFIED_IDEOGRAPH-3095D> 2
+<CJK_UNIFIED_IDEOGRAPH-3095E> 2
+<CJK_UNIFIED_IDEOGRAPH-3095F> 2
+<CJK_UNIFIED_IDEOGRAPH-30960> 2
+<CJK_UNIFIED_IDEOGRAPH-30961> 2
+<CJK_UNIFIED_IDEOGRAPH-30962> 2
+<CJK_UNIFIED_IDEOGRAPH-30963> 2
+<CJK_UNIFIED_IDEOGRAPH-30964> 2
+<CJK_UNIFIED_IDEOGRAPH-30965> 2
+<CJK_UNIFIED_IDEOGRAPH-30966> 2
+<CJK_UNIFIED_IDEOGRAPH-30967> 2
+<CJK_UNIFIED_IDEOGRAPH-30968> 2
+<CJK_UNIFIED_IDEOGRAPH-30969> 2
+<CJK_UNIFIED_IDEOGRAPH-3096A> 2
+<CJK_UNIFIED_IDEOGRAPH-3096B> 2
+<CJK_UNIFIED_IDEOGRAPH-3096C> 2
+<CJK_UNIFIED_IDEOGRAPH-3096D> 2
+<CJK_UNIFIED_IDEOGRAPH-3096E> 2
+<CJK_UNIFIED_IDEOGRAPH-3096F> 2
+<CJK_UNIFIED_IDEOGRAPH-30970> 2
+<CJK_UNIFIED_IDEOGRAPH-30971> 2
+<CJK_UNIFIED_IDEOGRAPH-30972> 2
+<CJK_UNIFIED_IDEOGRAPH-30973> 2
+<CJK_UNIFIED_IDEOGRAPH-30974> 2
+<CJK_UNIFIED_IDEOGRAPH-30975> 2
+<CJK_UNIFIED_IDEOGRAPH-30976> 2
+<CJK_UNIFIED_IDEOGRAPH-30977> 2
+<CJK_UNIFIED_IDEOGRAPH-30978> 2
+<CJK_UNIFIED_IDEOGRAPH-30979> 2
+<CJK_UNIFIED_IDEOGRAPH-3097A> 2
+<CJK_UNIFIED_IDEOGRAPH-3097B> 2
+<CJK_UNIFIED_IDEOGRAPH-3097C> 2
+<CJK_UNIFIED_IDEOGRAPH-3097D> 2
+<CJK_UNIFIED_IDEOGRAPH-3097E> 2
+<CJK_UNIFIED_IDEOGRAPH-3097F> 2
+<CJK_UNIFIED_IDEOGRAPH-30980> 2
+<CJK_UNIFIED_IDEOGRAPH-30981> 2
+<CJK_UNIFIED_IDEOGRAPH-30982> 2
+<CJK_UNIFIED_IDEOGRAPH-30983> 2
+<CJK_UNIFIED_IDEOGRAPH-30984> 2
+<CJK_UNIFIED_IDEOGRAPH-30985> 2
+<CJK_UNIFIED_IDEOGRAPH-30986> 2
+<CJK_UNIFIED_IDEOGRAPH-30987> 2
+<CJK_UNIFIED_IDEOGRAPH-30988> 2
+<CJK_UNIFIED_IDEOGRAPH-30989> 2
+<CJK_UNIFIED_IDEOGRAPH-3098A> 2
+<CJK_UNIFIED_IDEOGRAPH-3098B> 2
+<CJK_UNIFIED_IDEOGRAPH-3098C> 2
+<CJK_UNIFIED_IDEOGRAPH-3098D> 2
+<CJK_UNIFIED_IDEOGRAPH-3098E> 2
+<CJK_UNIFIED_IDEOGRAPH-3098F> 2
+<CJK_UNIFIED_IDEOGRAPH-30990> 2
+<CJK_UNIFIED_IDEOGRAPH-30991> 2
+<CJK_UNIFIED_IDEOGRAPH-30992> 2
+<CJK_UNIFIED_IDEOGRAPH-30993> 2
+<CJK_UNIFIED_IDEOGRAPH-30994> 2
+<CJK_UNIFIED_IDEOGRAPH-30995> 2
+<CJK_UNIFIED_IDEOGRAPH-30996> 2
+<CJK_UNIFIED_IDEOGRAPH-30997> 2
+<CJK_UNIFIED_IDEOGRAPH-30998> 2
+<CJK_UNIFIED_IDEOGRAPH-30999> 2
+<CJK_UNIFIED_IDEOGRAPH-3099A> 2
+<CJK_UNIFIED_IDEOGRAPH-3099B> 2
+<CJK_UNIFIED_IDEOGRAPH-3099C> 2
+<CJK_UNIFIED_IDEOGRAPH-3099D> 2
+<CJK_UNIFIED_IDEOGRAPH-3099E> 2
+<CJK_UNIFIED_IDEOGRAPH-3099F> 2
+<CJK_UNIFIED_IDEOGRAPH-309A0> 2
+<CJK_UNIFIED_IDEOGRAPH-309A1> 2
+<CJK_UNIFIED_IDEOGRAPH-309A2> 2
+<CJK_UNIFIED_IDEOGRAPH-309A3> 2
+<CJK_UNIFIED_IDEOGRAPH-309A4> 2
+<CJK_UNIFIED_IDEOGRAPH-309A5> 2
+<CJK_UNIFIED_IDEOGRAPH-309A6> 2
+<CJK_UNIFIED_IDEOGRAPH-309A7> 2
+<CJK_UNIFIED_IDEOGRAPH-309A8> 2
+<CJK_UNIFIED_IDEOGRAPH-309A9> 2
+<CJK_UNIFIED_IDEOGRAPH-309AA> 2
+<CJK_UNIFIED_IDEOGRAPH-309AB> 2
+<CJK_UNIFIED_IDEOGRAPH-309AC> 2
+<CJK_UNIFIED_IDEOGRAPH-309AD> 2
+<CJK_UNIFIED_IDEOGRAPH-309AE> 2
+<CJK_UNIFIED_IDEOGRAPH-309AF> 2
+<CJK_UNIFIED_IDEOGRAPH-309B0> 2
+<CJK_UNIFIED_IDEOGRAPH-309B1> 2
+<CJK_UNIFIED_IDEOGRAPH-309B2> 2
+<CJK_UNIFIED_IDEOGRAPH-309B3> 2
+<CJK_UNIFIED_IDEOGRAPH-309B4> 2
+<CJK_UNIFIED_IDEOGRAPH-309B5> 2
+<CJK_UNIFIED_IDEOGRAPH-309B6> 2
+<CJK_UNIFIED_IDEOGRAPH-309B7> 2
+<CJK_UNIFIED_IDEOGRAPH-309B8> 2
+<CJK_UNIFIED_IDEOGRAPH-309B9> 2
+<CJK_UNIFIED_IDEOGRAPH-309BA> 2
+<CJK_UNIFIED_IDEOGRAPH-309BB> 2
+<CJK_UNIFIED_IDEOGRAPH-309BC> 2
+<CJK_UNIFIED_IDEOGRAPH-309BD> 2
+<CJK_UNIFIED_IDEOGRAPH-309BE> 2
+<CJK_UNIFIED_IDEOGRAPH-309BF> 2
+<CJK_UNIFIED_IDEOGRAPH-309C0> 2
+<CJK_UNIFIED_IDEOGRAPH-309C1> 2
+<CJK_UNIFIED_IDEOGRAPH-309C2> 2
+<CJK_UNIFIED_IDEOGRAPH-309C3> 2
+<CJK_UNIFIED_IDEOGRAPH-309C4> 2
+<CJK_UNIFIED_IDEOGRAPH-309C5> 2
+<CJK_UNIFIED_IDEOGRAPH-309C6> 2
+<CJK_UNIFIED_IDEOGRAPH-309C7> 2
+<CJK_UNIFIED_IDEOGRAPH-309C8> 2
+<CJK_UNIFIED_IDEOGRAPH-309C9> 2
+<CJK_UNIFIED_IDEOGRAPH-309CA> 2
+<CJK_UNIFIED_IDEOGRAPH-309CB> 2
+<CJK_UNIFIED_IDEOGRAPH-309CC> 2
+<CJK_UNIFIED_IDEOGRAPH-309CD> 2
+<CJK_UNIFIED_IDEOGRAPH-309CE> 2
+<CJK_UNIFIED_IDEOGRAPH-309CF> 2
+<CJK_UNIFIED_IDEOGRAPH-309D0> 2
+<CJK_UNIFIED_IDEOGRAPH-309D1> 2
+<CJK_UNIFIED_IDEOGRAPH-309D2> 2
+<CJK_UNIFIED_IDEOGRAPH-309D3> 2
+<CJK_UNIFIED_IDEOGRAPH-309D4> 2
+<CJK_UNIFIED_IDEOGRAPH-309D5> 2
+<CJK_UNIFIED_IDEOGRAPH-309D6> 2
+<CJK_UNIFIED_IDEOGRAPH-309D7> 2
+<CJK_UNIFIED_IDEOGRAPH-309D8> 2
+<CJK_UNIFIED_IDEOGRAPH-309D9> 2
+<CJK_UNIFIED_IDEOGRAPH-309DA> 2
+<CJK_UNIFIED_IDEOGRAPH-309DB> 2
+<CJK_UNIFIED_IDEOGRAPH-309DC> 2
+<CJK_UNIFIED_IDEOGRAPH-309DD> 2
+<CJK_UNIFIED_IDEOGRAPH-309DE> 2
+<CJK_UNIFIED_IDEOGRAPH-309DF> 2
+<CJK_UNIFIED_IDEOGRAPH-309E0> 2
+<CJK_UNIFIED_IDEOGRAPH-309E1> 2
+<CJK_UNIFIED_IDEOGRAPH-309E2> 2
+<CJK_UNIFIED_IDEOGRAPH-309E3> 2
+<CJK_UNIFIED_IDEOGRAPH-309E4> 2
+<CJK_UNIFIED_IDEOGRAPH-309E5> 2
+<CJK_UNIFIED_IDEOGRAPH-309E6> 2
+<CJK_UNIFIED_IDEOGRAPH-309E7> 2
+<CJK_UNIFIED_IDEOGRAPH-309E8> 2
+<CJK_UNIFIED_IDEOGRAPH-309E9> 2
+<CJK_UNIFIED_IDEOGRAPH-309EA> 2
+<CJK_UNIFIED_IDEOGRAPH-309EB> 2
+<CJK_UNIFIED_IDEOGRAPH-309EC> 2
+<CJK_UNIFIED_IDEOGRAPH-309ED> 2
+<CJK_UNIFIED_IDEOGRAPH-309EE> 2
+<CJK_UNIFIED_IDEOGRAPH-309EF> 2
+<CJK_UNIFIED_IDEOGRAPH-309F0> 2
+<CJK_UNIFIED_IDEOGRAPH-309F1> 2
+<CJK_UNIFIED_IDEOGRAPH-309F2> 2
+<CJK_UNIFIED_IDEOGRAPH-309F3> 2
+<CJK_UNIFIED_IDEOGRAPH-309F4> 2
+<CJK_UNIFIED_IDEOGRAPH-309F5> 2
+<CJK_UNIFIED_IDEOGRAPH-309F6> 2
+<CJK_UNIFIED_IDEOGRAPH-309F7> 2
+<CJK_UNIFIED_IDEOGRAPH-309F8> 2
+<CJK_UNIFIED_IDEOGRAPH-309F9> 2
+<CJK_UNIFIED_IDEOGRAPH-309FA> 2
+<CJK_UNIFIED_IDEOGRAPH-309FB> 2
+<CJK_UNIFIED_IDEOGRAPH-309FC> 2
+<CJK_UNIFIED_IDEOGRAPH-309FD> 2
+<CJK_UNIFIED_IDEOGRAPH-309FE> 2
+<CJK_UNIFIED_IDEOGRAPH-309FF> 2
+<CJK_UNIFIED_IDEOGRAPH-30A00> 2
+<CJK_UNIFIED_IDEOGRAPH-30A01> 2
+<CJK_UNIFIED_IDEOGRAPH-30A02> 2
+<CJK_UNIFIED_IDEOGRAPH-30A03> 2
+<CJK_UNIFIED_IDEOGRAPH-30A04> 2
+<CJK_UNIFIED_IDEOGRAPH-30A05> 2
+<CJK_UNIFIED_IDEOGRAPH-30A06> 2
+<CJK_UNIFIED_IDEOGRAPH-30A07> 2
+<CJK_UNIFIED_IDEOGRAPH-30A08> 2
+<CJK_UNIFIED_IDEOGRAPH-30A09> 2
+<CJK_UNIFIED_IDEOGRAPH-30A0A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A0B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A0C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A0D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A0E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A0F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A10> 2
+<CJK_UNIFIED_IDEOGRAPH-30A11> 2
+<CJK_UNIFIED_IDEOGRAPH-30A12> 2
+<CJK_UNIFIED_IDEOGRAPH-30A13> 2
+<CJK_UNIFIED_IDEOGRAPH-30A14> 2
+<CJK_UNIFIED_IDEOGRAPH-30A15> 2
+<CJK_UNIFIED_IDEOGRAPH-30A16> 2
+<CJK_UNIFIED_IDEOGRAPH-30A17> 2
+<CJK_UNIFIED_IDEOGRAPH-30A18> 2
+<CJK_UNIFIED_IDEOGRAPH-30A19> 2
+<CJK_UNIFIED_IDEOGRAPH-30A1A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A1B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A1C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A1D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A1E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A1F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A20> 2
+<CJK_UNIFIED_IDEOGRAPH-30A21> 2
+<CJK_UNIFIED_IDEOGRAPH-30A22> 2
+<CJK_UNIFIED_IDEOGRAPH-30A23> 2
+<CJK_UNIFIED_IDEOGRAPH-30A24> 2
+<CJK_UNIFIED_IDEOGRAPH-30A25> 2
+<CJK_UNIFIED_IDEOGRAPH-30A26> 2
+<CJK_UNIFIED_IDEOGRAPH-30A27> 2
+<CJK_UNIFIED_IDEOGRAPH-30A28> 2
+<CJK_UNIFIED_IDEOGRAPH-30A29> 2
+<CJK_UNIFIED_IDEOGRAPH-30A2A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A2B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A2C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A2D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A2E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A2F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A30> 2
+<CJK_UNIFIED_IDEOGRAPH-30A31> 2
+<CJK_UNIFIED_IDEOGRAPH-30A32> 2
+<CJK_UNIFIED_IDEOGRAPH-30A33> 2
+<CJK_UNIFIED_IDEOGRAPH-30A34> 2
+<CJK_UNIFIED_IDEOGRAPH-30A35> 2
+<CJK_UNIFIED_IDEOGRAPH-30A36> 2
+<CJK_UNIFIED_IDEOGRAPH-30A37> 2
+<CJK_UNIFIED_IDEOGRAPH-30A38> 2
+<CJK_UNIFIED_IDEOGRAPH-30A39> 2
+<CJK_UNIFIED_IDEOGRAPH-30A3A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A3B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A3C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A3D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A3E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A3F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A40> 2
+<CJK_UNIFIED_IDEOGRAPH-30A41> 2
+<CJK_UNIFIED_IDEOGRAPH-30A42> 2
+<CJK_UNIFIED_IDEOGRAPH-30A43> 2
+<CJK_UNIFIED_IDEOGRAPH-30A44> 2
+<CJK_UNIFIED_IDEOGRAPH-30A45> 2
+<CJK_UNIFIED_IDEOGRAPH-30A46> 2
+<CJK_UNIFIED_IDEOGRAPH-30A47> 2
+<CJK_UNIFIED_IDEOGRAPH-30A48> 2
+<CJK_UNIFIED_IDEOGRAPH-30A49> 2
+<CJK_UNIFIED_IDEOGRAPH-30A4A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A4B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A4C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A4D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A4E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A4F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A50> 2
+<CJK_UNIFIED_IDEOGRAPH-30A51> 2
+<CJK_UNIFIED_IDEOGRAPH-30A52> 2
+<CJK_UNIFIED_IDEOGRAPH-30A53> 2
+<CJK_UNIFIED_IDEOGRAPH-30A54> 2
+<CJK_UNIFIED_IDEOGRAPH-30A55> 2
+<CJK_UNIFIED_IDEOGRAPH-30A56> 2
+<CJK_UNIFIED_IDEOGRAPH-30A57> 2
+<CJK_UNIFIED_IDEOGRAPH-30A58> 2
+<CJK_UNIFIED_IDEOGRAPH-30A59> 2
+<CJK_UNIFIED_IDEOGRAPH-30A5A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A5B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A5C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A5D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A5E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A5F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A60> 2
+<CJK_UNIFIED_IDEOGRAPH-30A61> 2
+<CJK_UNIFIED_IDEOGRAPH-30A62> 2
+<CJK_UNIFIED_IDEOGRAPH-30A63> 2
+<CJK_UNIFIED_IDEOGRAPH-30A64> 2
+<CJK_UNIFIED_IDEOGRAPH-30A65> 2
+<CJK_UNIFIED_IDEOGRAPH-30A66> 2
+<CJK_UNIFIED_IDEOGRAPH-30A67> 2
+<CJK_UNIFIED_IDEOGRAPH-30A68> 2
+<CJK_UNIFIED_IDEOGRAPH-30A69> 2
+<CJK_UNIFIED_IDEOGRAPH-30A6A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A6B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A6C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A6D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A6E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A6F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A70> 2
+<CJK_UNIFIED_IDEOGRAPH-30A71> 2
+<CJK_UNIFIED_IDEOGRAPH-30A72> 2
+<CJK_UNIFIED_IDEOGRAPH-30A73> 2
+<CJK_UNIFIED_IDEOGRAPH-30A74> 2
+<CJK_UNIFIED_IDEOGRAPH-30A75> 2
+<CJK_UNIFIED_IDEOGRAPH-30A76> 2
+<CJK_UNIFIED_IDEOGRAPH-30A77> 2
+<CJK_UNIFIED_IDEOGRAPH-30A78> 2
+<CJK_UNIFIED_IDEOGRAPH-30A79> 2
+<CJK_UNIFIED_IDEOGRAPH-30A7A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A7B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A7C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A7D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A7E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A7F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A80> 2
+<CJK_UNIFIED_IDEOGRAPH-30A81> 2
+<CJK_UNIFIED_IDEOGRAPH-30A82> 2
+<CJK_UNIFIED_IDEOGRAPH-30A83> 2
+<CJK_UNIFIED_IDEOGRAPH-30A84> 2
+<CJK_UNIFIED_IDEOGRAPH-30A85> 2
+<CJK_UNIFIED_IDEOGRAPH-30A86> 2
+<CJK_UNIFIED_IDEOGRAPH-30A87> 2
+<CJK_UNIFIED_IDEOGRAPH-30A88> 2
+<CJK_UNIFIED_IDEOGRAPH-30A89> 2
+<CJK_UNIFIED_IDEOGRAPH-30A8A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A8B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A8C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A8D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A8E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A8F> 2
+<CJK_UNIFIED_IDEOGRAPH-30A90> 2
+<CJK_UNIFIED_IDEOGRAPH-30A91> 2
+<CJK_UNIFIED_IDEOGRAPH-30A92> 2
+<CJK_UNIFIED_IDEOGRAPH-30A93> 2
+<CJK_UNIFIED_IDEOGRAPH-30A94> 2
+<CJK_UNIFIED_IDEOGRAPH-30A95> 2
+<CJK_UNIFIED_IDEOGRAPH-30A96> 2
+<CJK_UNIFIED_IDEOGRAPH-30A97> 2
+<CJK_UNIFIED_IDEOGRAPH-30A98> 2
+<CJK_UNIFIED_IDEOGRAPH-30A99> 2
+<CJK_UNIFIED_IDEOGRAPH-30A9A> 2
+<CJK_UNIFIED_IDEOGRAPH-30A9B> 2
+<CJK_UNIFIED_IDEOGRAPH-30A9C> 2
+<CJK_UNIFIED_IDEOGRAPH-30A9D> 2
+<CJK_UNIFIED_IDEOGRAPH-30A9E> 2
+<CJK_UNIFIED_IDEOGRAPH-30A9F> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA0> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA1> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA2> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA3> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA4> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA5> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA6> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA7> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA8> 2
+<CJK_UNIFIED_IDEOGRAPH-30AA9> 2
+<CJK_UNIFIED_IDEOGRAPH-30AAA> 2
+<CJK_UNIFIED_IDEOGRAPH-30AAB> 2
+<CJK_UNIFIED_IDEOGRAPH-30AAC> 2
+<CJK_UNIFIED_IDEOGRAPH-30AAD> 2
+<CJK_UNIFIED_IDEOGRAPH-30AAE> 2
+<CJK_UNIFIED_IDEOGRAPH-30AAF> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB0> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB1> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB2> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB3> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB4> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB5> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB6> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB7> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB8> 2
+<CJK_UNIFIED_IDEOGRAPH-30AB9> 2
+<CJK_UNIFIED_IDEOGRAPH-30ABA> 2
+<CJK_UNIFIED_IDEOGRAPH-30ABB> 2
+<CJK_UNIFIED_IDEOGRAPH-30ABC> 2
+<CJK_UNIFIED_IDEOGRAPH-30ABD> 2
+<CJK_UNIFIED_IDEOGRAPH-30ABE> 2
+<CJK_UNIFIED_IDEOGRAPH-30ABF> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC0> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC1> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC2> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC3> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC4> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC5> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC6> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC7> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC8> 2
+<CJK_UNIFIED_IDEOGRAPH-30AC9> 2
+<CJK_UNIFIED_IDEOGRAPH-30ACA> 2
+<CJK_UNIFIED_IDEOGRAPH-30ACB> 2
+<CJK_UNIFIED_IDEOGRAPH-30ACC> 2
+<CJK_UNIFIED_IDEOGRAPH-30ACD> 2
+<CJK_UNIFIED_IDEOGRAPH-30ACE> 2
+<CJK_UNIFIED_IDEOGRAPH-30ACF> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD0> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD1> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD2> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD3> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD4> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD5> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD6> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD7> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD8> 2
+<CJK_UNIFIED_IDEOGRAPH-30AD9> 2
+<CJK_UNIFIED_IDEOGRAPH-30ADA> 2
+<CJK_UNIFIED_IDEOGRAPH-30ADB> 2
+<CJK_UNIFIED_IDEOGRAPH-30ADC> 2
+<CJK_UNIFIED_IDEOGRAPH-30ADD> 2
+<CJK_UNIFIED_IDEOGRAPH-30ADE> 2
+<CJK_UNIFIED_IDEOGRAPH-30ADF> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE0> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE1> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE2> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE3> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE4> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE5> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE6> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE7> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE8> 2
+<CJK_UNIFIED_IDEOGRAPH-30AE9> 2
+<CJK_UNIFIED_IDEOGRAPH-30AEA> 2
+<CJK_UNIFIED_IDEOGRAPH-30AEB> 2
+<CJK_UNIFIED_IDEOGRAPH-30AEC> 2
+<CJK_UNIFIED_IDEOGRAPH-30AED> 2
+<CJK_UNIFIED_IDEOGRAPH-30AEE> 2
+<CJK_UNIFIED_IDEOGRAPH-30AEF> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF0> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF1> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF2> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF3> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF4> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF5> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF6> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF7> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF8> 2
+<CJK_UNIFIED_IDEOGRAPH-30AF9> 2
+<CJK_UNIFIED_IDEOGRAPH-30AFA> 2
+<CJK_UNIFIED_IDEOGRAPH-30AFB> 2
+<CJK_UNIFIED_IDEOGRAPH-30AFC> 2
+<CJK_UNIFIED_IDEOGRAPH-30AFD> 2
+<CJK_UNIFIED_IDEOGRAPH-30AFE> 2
+<CJK_UNIFIED_IDEOGRAPH-30AFF> 2
+<CJK_UNIFIED_IDEOGRAPH-30B00> 2
+<CJK_UNIFIED_IDEOGRAPH-30B01> 2
+<CJK_UNIFIED_IDEOGRAPH-30B02> 2
+<CJK_UNIFIED_IDEOGRAPH-30B03> 2
+<CJK_UNIFIED_IDEOGRAPH-30B04> 2
+<CJK_UNIFIED_IDEOGRAPH-30B05> 2
+<CJK_UNIFIED_IDEOGRAPH-30B06> 2
+<CJK_UNIFIED_IDEOGRAPH-30B07> 2
+<CJK_UNIFIED_IDEOGRAPH-30B08> 2
+<CJK_UNIFIED_IDEOGRAPH-30B09> 2
+<CJK_UNIFIED_IDEOGRAPH-30B0A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B0B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B0C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B0D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B0E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B0F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B10> 2
+<CJK_UNIFIED_IDEOGRAPH-30B11> 2
+<CJK_UNIFIED_IDEOGRAPH-30B12> 2
+<CJK_UNIFIED_IDEOGRAPH-30B13> 2
+<CJK_UNIFIED_IDEOGRAPH-30B14> 2
+<CJK_UNIFIED_IDEOGRAPH-30B15> 2
+<CJK_UNIFIED_IDEOGRAPH-30B16> 2
+<CJK_UNIFIED_IDEOGRAPH-30B17> 2
+<CJK_UNIFIED_IDEOGRAPH-30B18> 2
+<CJK_UNIFIED_IDEOGRAPH-30B19> 2
+<CJK_UNIFIED_IDEOGRAPH-30B1A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B1B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B1C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B1D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B1E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B1F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B20> 2
+<CJK_UNIFIED_IDEOGRAPH-30B21> 2
+<CJK_UNIFIED_IDEOGRAPH-30B22> 2
+<CJK_UNIFIED_IDEOGRAPH-30B23> 2
+<CJK_UNIFIED_IDEOGRAPH-30B24> 2
+<CJK_UNIFIED_IDEOGRAPH-30B25> 2
+<CJK_UNIFIED_IDEOGRAPH-30B26> 2
+<CJK_UNIFIED_IDEOGRAPH-30B27> 2
+<CJK_UNIFIED_IDEOGRAPH-30B28> 2
+<CJK_UNIFIED_IDEOGRAPH-30B29> 2
+<CJK_UNIFIED_IDEOGRAPH-30B2A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B2B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B2C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B2D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B2E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B2F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B30> 2
+<CJK_UNIFIED_IDEOGRAPH-30B31> 2
+<CJK_UNIFIED_IDEOGRAPH-30B32> 2
+<CJK_UNIFIED_IDEOGRAPH-30B33> 2
+<CJK_UNIFIED_IDEOGRAPH-30B34> 2
+<CJK_UNIFIED_IDEOGRAPH-30B35> 2
+<CJK_UNIFIED_IDEOGRAPH-30B36> 2
+<CJK_UNIFIED_IDEOGRAPH-30B37> 2
+<CJK_UNIFIED_IDEOGRAPH-30B38> 2
+<CJK_UNIFIED_IDEOGRAPH-30B39> 2
+<CJK_UNIFIED_IDEOGRAPH-30B3A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B3B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B3C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B3D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B3E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B3F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B40> 2
+<CJK_UNIFIED_IDEOGRAPH-30B41> 2
+<CJK_UNIFIED_IDEOGRAPH-30B42> 2
+<CJK_UNIFIED_IDEOGRAPH-30B43> 2
+<CJK_UNIFIED_IDEOGRAPH-30B44> 2
+<CJK_UNIFIED_IDEOGRAPH-30B45> 2
+<CJK_UNIFIED_IDEOGRAPH-30B46> 2
+<CJK_UNIFIED_IDEOGRAPH-30B47> 2
+<CJK_UNIFIED_IDEOGRAPH-30B48> 2
+<CJK_UNIFIED_IDEOGRAPH-30B49> 2
+<CJK_UNIFIED_IDEOGRAPH-30B4A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B4B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B4C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B4D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B4E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B4F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B50> 2
+<CJK_UNIFIED_IDEOGRAPH-30B51> 2
+<CJK_UNIFIED_IDEOGRAPH-30B52> 2
+<CJK_UNIFIED_IDEOGRAPH-30B53> 2
+<CJK_UNIFIED_IDEOGRAPH-30B54> 2
+<CJK_UNIFIED_IDEOGRAPH-30B55> 2
+<CJK_UNIFIED_IDEOGRAPH-30B56> 2
+<CJK_UNIFIED_IDEOGRAPH-30B57> 2
+<CJK_UNIFIED_IDEOGRAPH-30B58> 2
+<CJK_UNIFIED_IDEOGRAPH-30B59> 2
+<CJK_UNIFIED_IDEOGRAPH-30B5A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B5B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B5C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B5D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B5E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B5F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B60> 2
+<CJK_UNIFIED_IDEOGRAPH-30B61> 2
+<CJK_UNIFIED_IDEOGRAPH-30B62> 2
+<CJK_UNIFIED_IDEOGRAPH-30B63> 2
+<CJK_UNIFIED_IDEOGRAPH-30B64> 2
+<CJK_UNIFIED_IDEOGRAPH-30B65> 2
+<CJK_UNIFIED_IDEOGRAPH-30B66> 2
+<CJK_UNIFIED_IDEOGRAPH-30B67> 2
+<CJK_UNIFIED_IDEOGRAPH-30B68> 2
+<CJK_UNIFIED_IDEOGRAPH-30B69> 2
+<CJK_UNIFIED_IDEOGRAPH-30B6A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B6B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B6C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B6D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B6E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B6F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B70> 2
+<CJK_UNIFIED_IDEOGRAPH-30B71> 2
+<CJK_UNIFIED_IDEOGRAPH-30B72> 2
+<CJK_UNIFIED_IDEOGRAPH-30B73> 2
+<CJK_UNIFIED_IDEOGRAPH-30B74> 2
+<CJK_UNIFIED_IDEOGRAPH-30B75> 2
+<CJK_UNIFIED_IDEOGRAPH-30B76> 2
+<CJK_UNIFIED_IDEOGRAPH-30B77> 2
+<CJK_UNIFIED_IDEOGRAPH-30B78> 2
+<CJK_UNIFIED_IDEOGRAPH-30B79> 2
+<CJK_UNIFIED_IDEOGRAPH-30B7A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B7B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B7C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B7D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B7E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B7F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B80> 2
+<CJK_UNIFIED_IDEOGRAPH-30B81> 2
+<CJK_UNIFIED_IDEOGRAPH-30B82> 2
+<CJK_UNIFIED_IDEOGRAPH-30B83> 2
+<CJK_UNIFIED_IDEOGRAPH-30B84> 2
+<CJK_UNIFIED_IDEOGRAPH-30B85> 2
+<CJK_UNIFIED_IDEOGRAPH-30B86> 2
+<CJK_UNIFIED_IDEOGRAPH-30B87> 2
+<CJK_UNIFIED_IDEOGRAPH-30B88> 2
+<CJK_UNIFIED_IDEOGRAPH-30B89> 2
+<CJK_UNIFIED_IDEOGRAPH-30B8A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B8B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B8C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B8D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B8E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B8F> 2
+<CJK_UNIFIED_IDEOGRAPH-30B90> 2
+<CJK_UNIFIED_IDEOGRAPH-30B91> 2
+<CJK_UNIFIED_IDEOGRAPH-30B92> 2
+<CJK_UNIFIED_IDEOGRAPH-30B93> 2
+<CJK_UNIFIED_IDEOGRAPH-30B94> 2
+<CJK_UNIFIED_IDEOGRAPH-30B95> 2
+<CJK_UNIFIED_IDEOGRAPH-30B96> 2
+<CJK_UNIFIED_IDEOGRAPH-30B97> 2
+<CJK_UNIFIED_IDEOGRAPH-30B98> 2
+<CJK_UNIFIED_IDEOGRAPH-30B99> 2
+<CJK_UNIFIED_IDEOGRAPH-30B9A> 2
+<CJK_UNIFIED_IDEOGRAPH-30B9B> 2
+<CJK_UNIFIED_IDEOGRAPH-30B9C> 2
+<CJK_UNIFIED_IDEOGRAPH-30B9D> 2
+<CJK_UNIFIED_IDEOGRAPH-30B9E> 2
+<CJK_UNIFIED_IDEOGRAPH-30B9F> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA0> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA1> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA2> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA3> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA4> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA5> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA6> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA7> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA8> 2
+<CJK_UNIFIED_IDEOGRAPH-30BA9> 2
+<CJK_UNIFIED_IDEOGRAPH-30BAA> 2
+<CJK_UNIFIED_IDEOGRAPH-30BAB> 2
+<CJK_UNIFIED_IDEOGRAPH-30BAC> 2
+<CJK_UNIFIED_IDEOGRAPH-30BAD> 2
+<CJK_UNIFIED_IDEOGRAPH-30BAE> 2
+<CJK_UNIFIED_IDEOGRAPH-30BAF> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB0> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB1> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB2> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB3> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB4> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB5> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB6> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB7> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB8> 2
+<CJK_UNIFIED_IDEOGRAPH-30BB9> 2
+<CJK_UNIFIED_IDEOGRAPH-30BBA> 2
+<CJK_UNIFIED_IDEOGRAPH-30BBB> 2
+<CJK_UNIFIED_IDEOGRAPH-30BBC> 2
+<CJK_UNIFIED_IDEOGRAPH-30BBD> 2
+<CJK_UNIFIED_IDEOGRAPH-30BBE> 2
+<CJK_UNIFIED_IDEOGRAPH-30BBF> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC0> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC1> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC2> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC3> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC4> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC5> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC6> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC7> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC8> 2
+<CJK_UNIFIED_IDEOGRAPH-30BC9> 2
+<CJK_UNIFIED_IDEOGRAPH-30BCA> 2
+<CJK_UNIFIED_IDEOGRAPH-30BCB> 2
+<CJK_UNIFIED_IDEOGRAPH-30BCC> 2
+<CJK_UNIFIED_IDEOGRAPH-30BCD> 2
+<CJK_UNIFIED_IDEOGRAPH-30BCE> 2
+<CJK_UNIFIED_IDEOGRAPH-30BCF> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD0> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD1> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD2> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD3> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD4> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD5> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD6> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD7> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD8> 2
+<CJK_UNIFIED_IDEOGRAPH-30BD9> 2
+<CJK_UNIFIED_IDEOGRAPH-30BDA> 2
+<CJK_UNIFIED_IDEOGRAPH-30BDB> 2
+<CJK_UNIFIED_IDEOGRAPH-30BDC> 2
+<CJK_UNIFIED_IDEOGRAPH-30BDD> 2
+<CJK_UNIFIED_IDEOGRAPH-30BDE> 2
+<CJK_UNIFIED_IDEOGRAPH-30BDF> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE0> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE1> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE2> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE3> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE4> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE5> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE6> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE7> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE8> 2
+<CJK_UNIFIED_IDEOGRAPH-30BE9> 2
+<CJK_UNIFIED_IDEOGRAPH-30BEA> 2
+<CJK_UNIFIED_IDEOGRAPH-30BEB> 2
+<CJK_UNIFIED_IDEOGRAPH-30BEC> 2
+<CJK_UNIFIED_IDEOGRAPH-30BED> 2
+<CJK_UNIFIED_IDEOGRAPH-30BEE> 2
+<CJK_UNIFIED_IDEOGRAPH-30BEF> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF0> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF1> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF2> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF3> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF4> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF5> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF6> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF7> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF8> 2
+<CJK_UNIFIED_IDEOGRAPH-30BF9> 2
+<CJK_UNIFIED_IDEOGRAPH-30BFA> 2
+<CJK_UNIFIED_IDEOGRAPH-30BFB> 2
+<CJK_UNIFIED_IDEOGRAPH-30BFC> 2
+<CJK_UNIFIED_IDEOGRAPH-30BFD> 2
+<CJK_UNIFIED_IDEOGRAPH-30BFE> 2
+<CJK_UNIFIED_IDEOGRAPH-30BFF> 2
+<CJK_UNIFIED_IDEOGRAPH-30C00> 2
+<CJK_UNIFIED_IDEOGRAPH-30C01> 2
+<CJK_UNIFIED_IDEOGRAPH-30C02> 2
+<CJK_UNIFIED_IDEOGRAPH-30C03> 2
+<CJK_UNIFIED_IDEOGRAPH-30C04> 2
+<CJK_UNIFIED_IDEOGRAPH-30C05> 2
+<CJK_UNIFIED_IDEOGRAPH-30C06> 2
+<CJK_UNIFIED_IDEOGRAPH-30C07> 2
+<CJK_UNIFIED_IDEOGRAPH-30C08> 2
+<CJK_UNIFIED_IDEOGRAPH-30C09> 2
+<CJK_UNIFIED_IDEOGRAPH-30C0A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C0B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C0C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C0D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C0E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C0F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C10> 2
+<CJK_UNIFIED_IDEOGRAPH-30C11> 2
+<CJK_UNIFIED_IDEOGRAPH-30C12> 2
+<CJK_UNIFIED_IDEOGRAPH-30C13> 2
+<CJK_UNIFIED_IDEOGRAPH-30C14> 2
+<CJK_UNIFIED_IDEOGRAPH-30C15> 2
+<CJK_UNIFIED_IDEOGRAPH-30C16> 2
+<CJK_UNIFIED_IDEOGRAPH-30C17> 2
+<CJK_UNIFIED_IDEOGRAPH-30C18> 2
+<CJK_UNIFIED_IDEOGRAPH-30C19> 2
+<CJK_UNIFIED_IDEOGRAPH-30C1A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C1B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C1C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C1D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C1E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C1F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C20> 2
+<CJK_UNIFIED_IDEOGRAPH-30C21> 2
+<CJK_UNIFIED_IDEOGRAPH-30C22> 2
+<CJK_UNIFIED_IDEOGRAPH-30C23> 2
+<CJK_UNIFIED_IDEOGRAPH-30C24> 2
+<CJK_UNIFIED_IDEOGRAPH-30C25> 2
+<CJK_UNIFIED_IDEOGRAPH-30C26> 2
+<CJK_UNIFIED_IDEOGRAPH-30C27> 2
+<CJK_UNIFIED_IDEOGRAPH-30C28> 2
+<CJK_UNIFIED_IDEOGRAPH-30C29> 2
+<CJK_UNIFIED_IDEOGRAPH-30C2A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C2B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C2C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C2D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C2E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C2F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C30> 2
+<CJK_UNIFIED_IDEOGRAPH-30C31> 2
+<CJK_UNIFIED_IDEOGRAPH-30C32> 2
+<CJK_UNIFIED_IDEOGRAPH-30C33> 2
+<CJK_UNIFIED_IDEOGRAPH-30C34> 2
+<CJK_UNIFIED_IDEOGRAPH-30C35> 2
+<CJK_UNIFIED_IDEOGRAPH-30C36> 2
+<CJK_UNIFIED_IDEOGRAPH-30C37> 2
+<CJK_UNIFIED_IDEOGRAPH-30C38> 2
+<CJK_UNIFIED_IDEOGRAPH-30C39> 2
+<CJK_UNIFIED_IDEOGRAPH-30C3A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C3B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C3C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C3D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C3E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C3F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C40> 2
+<CJK_UNIFIED_IDEOGRAPH-30C41> 2
+<CJK_UNIFIED_IDEOGRAPH-30C42> 2
+<CJK_UNIFIED_IDEOGRAPH-30C43> 2
+<CJK_UNIFIED_IDEOGRAPH-30C44> 2
+<CJK_UNIFIED_IDEOGRAPH-30C45> 2
+<CJK_UNIFIED_IDEOGRAPH-30C46> 2
+<CJK_UNIFIED_IDEOGRAPH-30C47> 2
+<CJK_UNIFIED_IDEOGRAPH-30C48> 2
+<CJK_UNIFIED_IDEOGRAPH-30C49> 2
+<CJK_UNIFIED_IDEOGRAPH-30C4A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C4B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C4C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C4D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C4E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C4F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C50> 2
+<CJK_UNIFIED_IDEOGRAPH-30C51> 2
+<CJK_UNIFIED_IDEOGRAPH-30C52> 2
+<CJK_UNIFIED_IDEOGRAPH-30C53> 2
+<CJK_UNIFIED_IDEOGRAPH-30C54> 2
+<CJK_UNIFIED_IDEOGRAPH-30C55> 2
+<CJK_UNIFIED_IDEOGRAPH-30C56> 2
+<CJK_UNIFIED_IDEOGRAPH-30C57> 2
+<CJK_UNIFIED_IDEOGRAPH-30C58> 2
+<CJK_UNIFIED_IDEOGRAPH-30C59> 2
+<CJK_UNIFIED_IDEOGRAPH-30C5A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C5B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C5C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C5D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C5E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C5F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C60> 2
+<CJK_UNIFIED_IDEOGRAPH-30C61> 2
+<CJK_UNIFIED_IDEOGRAPH-30C62> 2
+<CJK_UNIFIED_IDEOGRAPH-30C63> 2
+<CJK_UNIFIED_IDEOGRAPH-30C64> 2
+<CJK_UNIFIED_IDEOGRAPH-30C65> 2
+<CJK_UNIFIED_IDEOGRAPH-30C66> 2
+<CJK_UNIFIED_IDEOGRAPH-30C67> 2
+<CJK_UNIFIED_IDEOGRAPH-30C68> 2
+<CJK_UNIFIED_IDEOGRAPH-30C69> 2
+<CJK_UNIFIED_IDEOGRAPH-30C6A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C6B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C6C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C6D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C6E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C6F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C70> 2
+<CJK_UNIFIED_IDEOGRAPH-30C71> 2
+<CJK_UNIFIED_IDEOGRAPH-30C72> 2
+<CJK_UNIFIED_IDEOGRAPH-30C73> 2
+<CJK_UNIFIED_IDEOGRAPH-30C74> 2
+<CJK_UNIFIED_IDEOGRAPH-30C75> 2
+<CJK_UNIFIED_IDEOGRAPH-30C76> 2
+<CJK_UNIFIED_IDEOGRAPH-30C77> 2
+<CJK_UNIFIED_IDEOGRAPH-30C78> 2
+<CJK_UNIFIED_IDEOGRAPH-30C79> 2
+<CJK_UNIFIED_IDEOGRAPH-30C7A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C7B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C7C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C7D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C7E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C7F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C80> 2
+<CJK_UNIFIED_IDEOGRAPH-30C81> 2
+<CJK_UNIFIED_IDEOGRAPH-30C82> 2
+<CJK_UNIFIED_IDEOGRAPH-30C83> 2
+<CJK_UNIFIED_IDEOGRAPH-30C84> 2
+<CJK_UNIFIED_IDEOGRAPH-30C85> 2
+<CJK_UNIFIED_IDEOGRAPH-30C86> 2
+<CJK_UNIFIED_IDEOGRAPH-30C87> 2
+<CJK_UNIFIED_IDEOGRAPH-30C88> 2
+<CJK_UNIFIED_IDEOGRAPH-30C89> 2
+<CJK_UNIFIED_IDEOGRAPH-30C8A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C8B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C8C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C8D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C8E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C8F> 2
+<CJK_UNIFIED_IDEOGRAPH-30C90> 2
+<CJK_UNIFIED_IDEOGRAPH-30C91> 2
+<CJK_UNIFIED_IDEOGRAPH-30C92> 2
+<CJK_UNIFIED_IDEOGRAPH-30C93> 2
+<CJK_UNIFIED_IDEOGRAPH-30C94> 2
+<CJK_UNIFIED_IDEOGRAPH-30C95> 2
+<CJK_UNIFIED_IDEOGRAPH-30C96> 2
+<CJK_UNIFIED_IDEOGRAPH-30C97> 2
+<CJK_UNIFIED_IDEOGRAPH-30C98> 2
+<CJK_UNIFIED_IDEOGRAPH-30C99> 2
+<CJK_UNIFIED_IDEOGRAPH-30C9A> 2
+<CJK_UNIFIED_IDEOGRAPH-30C9B> 2
+<CJK_UNIFIED_IDEOGRAPH-30C9C> 2
+<CJK_UNIFIED_IDEOGRAPH-30C9D> 2
+<CJK_UNIFIED_IDEOGRAPH-30C9E> 2
+<CJK_UNIFIED_IDEOGRAPH-30C9F> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA0> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA1> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA2> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA3> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA4> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA5> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA6> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA7> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA8> 2
+<CJK_UNIFIED_IDEOGRAPH-30CA9> 2
+<CJK_UNIFIED_IDEOGRAPH-30CAA> 2
+<CJK_UNIFIED_IDEOGRAPH-30CAB> 2
+<CJK_UNIFIED_IDEOGRAPH-30CAC> 2
+<CJK_UNIFIED_IDEOGRAPH-30CAD> 2
+<CJK_UNIFIED_IDEOGRAPH-30CAE> 2
+<CJK_UNIFIED_IDEOGRAPH-30CAF> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB0> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB1> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB2> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB3> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB4> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB5> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB6> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB7> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB8> 2
+<CJK_UNIFIED_IDEOGRAPH-30CB9> 2
+<CJK_UNIFIED_IDEOGRAPH-30CBA> 2
+<CJK_UNIFIED_IDEOGRAPH-30CBB> 2
+<CJK_UNIFIED_IDEOGRAPH-30CBC> 2
+<CJK_UNIFIED_IDEOGRAPH-30CBD> 2
+<CJK_UNIFIED_IDEOGRAPH-30CBE> 2
+<CJK_UNIFIED_IDEOGRAPH-30CBF> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC0> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC1> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC2> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC3> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC4> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC5> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC6> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC7> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC8> 2
+<CJK_UNIFIED_IDEOGRAPH-30CC9> 2
+<CJK_UNIFIED_IDEOGRAPH-30CCA> 2
+<CJK_UNIFIED_IDEOGRAPH-30CCB> 2
+<CJK_UNIFIED_IDEOGRAPH-30CCC> 2
+<CJK_UNIFIED_IDEOGRAPH-30CCD> 2
+<CJK_UNIFIED_IDEOGRAPH-30CCE> 2
+<CJK_UNIFIED_IDEOGRAPH-30CCF> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD0> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD1> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD2> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD3> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD4> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD5> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD6> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD7> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD8> 2
+<CJK_UNIFIED_IDEOGRAPH-30CD9> 2
+<CJK_UNIFIED_IDEOGRAPH-30CDA> 2
+<CJK_UNIFIED_IDEOGRAPH-30CDB> 2
+<CJK_UNIFIED_IDEOGRAPH-30CDC> 2
+<CJK_UNIFIED_IDEOGRAPH-30CDD> 2
+<CJK_UNIFIED_IDEOGRAPH-30CDE> 2
+<CJK_UNIFIED_IDEOGRAPH-30CDF> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE0> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE1> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE2> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE3> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE4> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE5> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE6> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE7> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE8> 2
+<CJK_UNIFIED_IDEOGRAPH-30CE9> 2
+<CJK_UNIFIED_IDEOGRAPH-30CEA> 2
+<CJK_UNIFIED_IDEOGRAPH-30CEB> 2
+<CJK_UNIFIED_IDEOGRAPH-30CEC> 2
+<CJK_UNIFIED_IDEOGRAPH-30CED> 2
+<CJK_UNIFIED_IDEOGRAPH-30CEE> 2
+<CJK_UNIFIED_IDEOGRAPH-30CEF> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF0> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF1> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF2> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF3> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF4> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF5> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF6> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF7> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF8> 2
+<CJK_UNIFIED_IDEOGRAPH-30CF9> 2
+<CJK_UNIFIED_IDEOGRAPH-30CFA> 2
+<CJK_UNIFIED_IDEOGRAPH-30CFB> 2
+<CJK_UNIFIED_IDEOGRAPH-30CFC> 2
+<CJK_UNIFIED_IDEOGRAPH-30CFD> 2
+<CJK_UNIFIED_IDEOGRAPH-30CFE> 2
+<CJK_UNIFIED_IDEOGRAPH-30CFF> 2
+<CJK_UNIFIED_IDEOGRAPH-30D00> 2
+<CJK_UNIFIED_IDEOGRAPH-30D01> 2
+<CJK_UNIFIED_IDEOGRAPH-30D02> 2
+<CJK_UNIFIED_IDEOGRAPH-30D03> 2
+<CJK_UNIFIED_IDEOGRAPH-30D04> 2
+<CJK_UNIFIED_IDEOGRAPH-30D05> 2
+<CJK_UNIFIED_IDEOGRAPH-30D06> 2
+<CJK_UNIFIED_IDEOGRAPH-30D07> 2
+<CJK_UNIFIED_IDEOGRAPH-30D08> 2
+<CJK_UNIFIED_IDEOGRAPH-30D09> 2
+<CJK_UNIFIED_IDEOGRAPH-30D0A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D0B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D0C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D0D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D0E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D0F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D10> 2
+<CJK_UNIFIED_IDEOGRAPH-30D11> 2
+<CJK_UNIFIED_IDEOGRAPH-30D12> 2
+<CJK_UNIFIED_IDEOGRAPH-30D13> 2
+<CJK_UNIFIED_IDEOGRAPH-30D14> 2
+<CJK_UNIFIED_IDEOGRAPH-30D15> 2
+<CJK_UNIFIED_IDEOGRAPH-30D16> 2
+<CJK_UNIFIED_IDEOGRAPH-30D17> 2
+<CJK_UNIFIED_IDEOGRAPH-30D18> 2
+<CJK_UNIFIED_IDEOGRAPH-30D19> 2
+<CJK_UNIFIED_IDEOGRAPH-30D1A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D1B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D1C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D1D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D1E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D1F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D20> 2
+<CJK_UNIFIED_IDEOGRAPH-30D21> 2
+<CJK_UNIFIED_IDEOGRAPH-30D22> 2
+<CJK_UNIFIED_IDEOGRAPH-30D23> 2
+<CJK_UNIFIED_IDEOGRAPH-30D24> 2
+<CJK_UNIFIED_IDEOGRAPH-30D25> 2
+<CJK_UNIFIED_IDEOGRAPH-30D26> 2
+<CJK_UNIFIED_IDEOGRAPH-30D27> 2
+<CJK_UNIFIED_IDEOGRAPH-30D28> 2
+<CJK_UNIFIED_IDEOGRAPH-30D29> 2
+<CJK_UNIFIED_IDEOGRAPH-30D2A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D2B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D2C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D2D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D2E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D2F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D30> 2
+<CJK_UNIFIED_IDEOGRAPH-30D31> 2
+<CJK_UNIFIED_IDEOGRAPH-30D32> 2
+<CJK_UNIFIED_IDEOGRAPH-30D33> 2
+<CJK_UNIFIED_IDEOGRAPH-30D34> 2
+<CJK_UNIFIED_IDEOGRAPH-30D35> 2
+<CJK_UNIFIED_IDEOGRAPH-30D36> 2
+<CJK_UNIFIED_IDEOGRAPH-30D37> 2
+<CJK_UNIFIED_IDEOGRAPH-30D38> 2
+<CJK_UNIFIED_IDEOGRAPH-30D39> 2
+<CJK_UNIFIED_IDEOGRAPH-30D3A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D3B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D3C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D3D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D3E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D3F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D40> 2
+<CJK_UNIFIED_IDEOGRAPH-30D41> 2
+<CJK_UNIFIED_IDEOGRAPH-30D42> 2
+<CJK_UNIFIED_IDEOGRAPH-30D43> 2
+<CJK_UNIFIED_IDEOGRAPH-30D44> 2
+<CJK_UNIFIED_IDEOGRAPH-30D45> 2
+<CJK_UNIFIED_IDEOGRAPH-30D46> 2
+<CJK_UNIFIED_IDEOGRAPH-30D47> 2
+<CJK_UNIFIED_IDEOGRAPH-30D48> 2
+<CJK_UNIFIED_IDEOGRAPH-30D49> 2
+<CJK_UNIFIED_IDEOGRAPH-30D4A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D4B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D4C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D4D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D4E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D4F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D50> 2
+<CJK_UNIFIED_IDEOGRAPH-30D51> 2
+<CJK_UNIFIED_IDEOGRAPH-30D52> 2
+<CJK_UNIFIED_IDEOGRAPH-30D53> 2
+<CJK_UNIFIED_IDEOGRAPH-30D54> 2
+<CJK_UNIFIED_IDEOGRAPH-30D55> 2
+<CJK_UNIFIED_IDEOGRAPH-30D56> 2
+<CJK_UNIFIED_IDEOGRAPH-30D57> 2
+<CJK_UNIFIED_IDEOGRAPH-30D58> 2
+<CJK_UNIFIED_IDEOGRAPH-30D59> 2
+<CJK_UNIFIED_IDEOGRAPH-30D5A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D5B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D5C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D5D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D5E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D5F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D60> 2
+<CJK_UNIFIED_IDEOGRAPH-30D61> 2
+<CJK_UNIFIED_IDEOGRAPH-30D62> 2
+<CJK_UNIFIED_IDEOGRAPH-30D63> 2
+<CJK_UNIFIED_IDEOGRAPH-30D64> 2
+<CJK_UNIFIED_IDEOGRAPH-30D65> 2
+<CJK_UNIFIED_IDEOGRAPH-30D66> 2
+<CJK_UNIFIED_IDEOGRAPH-30D67> 2
+<CJK_UNIFIED_IDEOGRAPH-30D68> 2
+<CJK_UNIFIED_IDEOGRAPH-30D69> 2
+<CJK_UNIFIED_IDEOGRAPH-30D6A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D6B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D6C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D6D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D6E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D6F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D70> 2
+<CJK_UNIFIED_IDEOGRAPH-30D71> 2
+<CJK_UNIFIED_IDEOGRAPH-30D72> 2
+<CJK_UNIFIED_IDEOGRAPH-30D73> 2
+<CJK_UNIFIED_IDEOGRAPH-30D74> 2
+<CJK_UNIFIED_IDEOGRAPH-30D75> 2
+<CJK_UNIFIED_IDEOGRAPH-30D76> 2
+<CJK_UNIFIED_IDEOGRAPH-30D77> 2
+<CJK_UNIFIED_IDEOGRAPH-30D78> 2
+<CJK_UNIFIED_IDEOGRAPH-30D79> 2
+<CJK_UNIFIED_IDEOGRAPH-30D7A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D7B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D7C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D7D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D7E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D7F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D80> 2
+<CJK_UNIFIED_IDEOGRAPH-30D81> 2
+<CJK_UNIFIED_IDEOGRAPH-30D82> 2
+<CJK_UNIFIED_IDEOGRAPH-30D83> 2
+<CJK_UNIFIED_IDEOGRAPH-30D84> 2
+<CJK_UNIFIED_IDEOGRAPH-30D85> 2
+<CJK_UNIFIED_IDEOGRAPH-30D86> 2
+<CJK_UNIFIED_IDEOGRAPH-30D87> 2
+<CJK_UNIFIED_IDEOGRAPH-30D88> 2
+<CJK_UNIFIED_IDEOGRAPH-30D89> 2
+<CJK_UNIFIED_IDEOGRAPH-30D8A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D8B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D8C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D8D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D8E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D8F> 2
+<CJK_UNIFIED_IDEOGRAPH-30D90> 2
+<CJK_UNIFIED_IDEOGRAPH-30D91> 2
+<CJK_UNIFIED_IDEOGRAPH-30D92> 2
+<CJK_UNIFIED_IDEOGRAPH-30D93> 2
+<CJK_UNIFIED_IDEOGRAPH-30D94> 2
+<CJK_UNIFIED_IDEOGRAPH-30D95> 2
+<CJK_UNIFIED_IDEOGRAPH-30D96> 2
+<CJK_UNIFIED_IDEOGRAPH-30D97> 2
+<CJK_UNIFIED_IDEOGRAPH-30D98> 2
+<CJK_UNIFIED_IDEOGRAPH-30D99> 2
+<CJK_UNIFIED_IDEOGRAPH-30D9A> 2
+<CJK_UNIFIED_IDEOGRAPH-30D9B> 2
+<CJK_UNIFIED_IDEOGRAPH-30D9C> 2
+<CJK_UNIFIED_IDEOGRAPH-30D9D> 2
+<CJK_UNIFIED_IDEOGRAPH-30D9E> 2
+<CJK_UNIFIED_IDEOGRAPH-30D9F> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA0> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA1> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA2> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA3> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA4> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA5> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA6> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA7> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA8> 2
+<CJK_UNIFIED_IDEOGRAPH-30DA9> 2
+<CJK_UNIFIED_IDEOGRAPH-30DAA> 2
+<CJK_UNIFIED_IDEOGRAPH-30DAB> 2
+<CJK_UNIFIED_IDEOGRAPH-30DAC> 2
+<CJK_UNIFIED_IDEOGRAPH-30DAD> 2
+<CJK_UNIFIED_IDEOGRAPH-30DAE> 2
+<CJK_UNIFIED_IDEOGRAPH-30DAF> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB0> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB1> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB2> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB3> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB4> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB5> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB6> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB7> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB8> 2
+<CJK_UNIFIED_IDEOGRAPH-30DB9> 2
+<CJK_UNIFIED_IDEOGRAPH-30DBA> 2
+<CJK_UNIFIED_IDEOGRAPH-30DBB> 2
+<CJK_UNIFIED_IDEOGRAPH-30DBC> 2
+<CJK_UNIFIED_IDEOGRAPH-30DBD> 2
+<CJK_UNIFIED_IDEOGRAPH-30DBE> 2
+<CJK_UNIFIED_IDEOGRAPH-30DBF> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC0> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC1> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC2> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC3> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC4> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC5> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC6> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC7> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC8> 2
+<CJK_UNIFIED_IDEOGRAPH-30DC9> 2
+<CJK_UNIFIED_IDEOGRAPH-30DCA> 2
+<CJK_UNIFIED_IDEOGRAPH-30DCB> 2
+<CJK_UNIFIED_IDEOGRAPH-30DCC> 2
+<CJK_UNIFIED_IDEOGRAPH-30DCD> 2
+<CJK_UNIFIED_IDEOGRAPH-30DCE> 2
+<CJK_UNIFIED_IDEOGRAPH-30DCF> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD0> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD1> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD2> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD3> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD4> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD5> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD6> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD7> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD8> 2
+<CJK_UNIFIED_IDEOGRAPH-30DD9> 2
+<CJK_UNIFIED_IDEOGRAPH-30DDA> 2
+<CJK_UNIFIED_IDEOGRAPH-30DDB> 2
+<CJK_UNIFIED_IDEOGRAPH-30DDC> 2
+<CJK_UNIFIED_IDEOGRAPH-30DDD> 2
+<CJK_UNIFIED_IDEOGRAPH-30DDE> 2
+<CJK_UNIFIED_IDEOGRAPH-30DDF> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE0> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE1> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE2> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE3> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE4> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE5> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE6> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE7> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE8> 2
+<CJK_UNIFIED_IDEOGRAPH-30DE9> 2
+<CJK_UNIFIED_IDEOGRAPH-30DEA> 2
+<CJK_UNIFIED_IDEOGRAPH-30DEB> 2
+<CJK_UNIFIED_IDEOGRAPH-30DEC> 2
+<CJK_UNIFIED_IDEOGRAPH-30DED> 2
+<CJK_UNIFIED_IDEOGRAPH-30DEE> 2
+<CJK_UNIFIED_IDEOGRAPH-30DEF> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF0> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF1> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF2> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF3> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF4> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF5> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF6> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF7> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF8> 2
+<CJK_UNIFIED_IDEOGRAPH-30DF9> 2
+<CJK_UNIFIED_IDEOGRAPH-30DFA> 2
+<CJK_UNIFIED_IDEOGRAPH-30DFB> 2
+<CJK_UNIFIED_IDEOGRAPH-30DFC> 2
+<CJK_UNIFIED_IDEOGRAPH-30DFD> 2
+<CJK_UNIFIED_IDEOGRAPH-30DFE> 2
+<CJK_UNIFIED_IDEOGRAPH-30DFF> 2
+<CJK_UNIFIED_IDEOGRAPH-30E00> 2
+<CJK_UNIFIED_IDEOGRAPH-30E01> 2
+<CJK_UNIFIED_IDEOGRAPH-30E02> 2
+<CJK_UNIFIED_IDEOGRAPH-30E03> 2
+<CJK_UNIFIED_IDEOGRAPH-30E04> 2
+<CJK_UNIFIED_IDEOGRAPH-30E05> 2
+<CJK_UNIFIED_IDEOGRAPH-30E06> 2
+<CJK_UNIFIED_IDEOGRAPH-30E07> 2
+<CJK_UNIFIED_IDEOGRAPH-30E08> 2
+<CJK_UNIFIED_IDEOGRAPH-30E09> 2
+<CJK_UNIFIED_IDEOGRAPH-30E0A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E0B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E0C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E0D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E0E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E0F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E10> 2
+<CJK_UNIFIED_IDEOGRAPH-30E11> 2
+<CJK_UNIFIED_IDEOGRAPH-30E12> 2
+<CJK_UNIFIED_IDEOGRAPH-30E13> 2
+<CJK_UNIFIED_IDEOGRAPH-30E14> 2
+<CJK_UNIFIED_IDEOGRAPH-30E15> 2
+<CJK_UNIFIED_IDEOGRAPH-30E16> 2
+<CJK_UNIFIED_IDEOGRAPH-30E17> 2
+<CJK_UNIFIED_IDEOGRAPH-30E18> 2
+<CJK_UNIFIED_IDEOGRAPH-30E19> 2
+<CJK_UNIFIED_IDEOGRAPH-30E1A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E1B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E1C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E1D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E1E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E1F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E20> 2
+<CJK_UNIFIED_IDEOGRAPH-30E21> 2
+<CJK_UNIFIED_IDEOGRAPH-30E22> 2
+<CJK_UNIFIED_IDEOGRAPH-30E23> 2
+<CJK_UNIFIED_IDEOGRAPH-30E24> 2
+<CJK_UNIFIED_IDEOGRAPH-30E25> 2
+<CJK_UNIFIED_IDEOGRAPH-30E26> 2
+<CJK_UNIFIED_IDEOGRAPH-30E27> 2
+<CJK_UNIFIED_IDEOGRAPH-30E28> 2
+<CJK_UNIFIED_IDEOGRAPH-30E29> 2
+<CJK_UNIFIED_IDEOGRAPH-30E2A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E2B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E2C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E2D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E2E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E2F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E30> 2
+<CJK_UNIFIED_IDEOGRAPH-30E31> 2
+<CJK_UNIFIED_IDEOGRAPH-30E32> 2
+<CJK_UNIFIED_IDEOGRAPH-30E33> 2
+<CJK_UNIFIED_IDEOGRAPH-30E34> 2
+<CJK_UNIFIED_IDEOGRAPH-30E35> 2
+<CJK_UNIFIED_IDEOGRAPH-30E36> 2
+<CJK_UNIFIED_IDEOGRAPH-30E37> 2
+<CJK_UNIFIED_IDEOGRAPH-30E38> 2
+<CJK_UNIFIED_IDEOGRAPH-30E39> 2
+<CJK_UNIFIED_IDEOGRAPH-30E3A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E3B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E3C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E3D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E3E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E3F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E40> 2
+<CJK_UNIFIED_IDEOGRAPH-30E41> 2
+<CJK_UNIFIED_IDEOGRAPH-30E42> 2
+<CJK_UNIFIED_IDEOGRAPH-30E43> 2
+<CJK_UNIFIED_IDEOGRAPH-30E44> 2
+<CJK_UNIFIED_IDEOGRAPH-30E45> 2
+<CJK_UNIFIED_IDEOGRAPH-30E46> 2
+<CJK_UNIFIED_IDEOGRAPH-30E47> 2
+<CJK_UNIFIED_IDEOGRAPH-30E48> 2
+<CJK_UNIFIED_IDEOGRAPH-30E49> 2
+<CJK_UNIFIED_IDEOGRAPH-30E4A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E4B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E4C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E4D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E4E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E4F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E50> 2
+<CJK_UNIFIED_IDEOGRAPH-30E51> 2
+<CJK_UNIFIED_IDEOGRAPH-30E52> 2
+<CJK_UNIFIED_IDEOGRAPH-30E53> 2
+<CJK_UNIFIED_IDEOGRAPH-30E54> 2
+<CJK_UNIFIED_IDEOGRAPH-30E55> 2
+<CJK_UNIFIED_IDEOGRAPH-30E56> 2
+<CJK_UNIFIED_IDEOGRAPH-30E57> 2
+<CJK_UNIFIED_IDEOGRAPH-30E58> 2
+<CJK_UNIFIED_IDEOGRAPH-30E59> 2
+<CJK_UNIFIED_IDEOGRAPH-30E5A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E5B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E5C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E5D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E5E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E5F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E60> 2
+<CJK_UNIFIED_IDEOGRAPH-30E61> 2
+<CJK_UNIFIED_IDEOGRAPH-30E62> 2
+<CJK_UNIFIED_IDEOGRAPH-30E63> 2
+<CJK_UNIFIED_IDEOGRAPH-30E64> 2
+<CJK_UNIFIED_IDEOGRAPH-30E65> 2
+<CJK_UNIFIED_IDEOGRAPH-30E66> 2
+<CJK_UNIFIED_IDEOGRAPH-30E67> 2
+<CJK_UNIFIED_IDEOGRAPH-30E68> 2
+<CJK_UNIFIED_IDEOGRAPH-30E69> 2
+<CJK_UNIFIED_IDEOGRAPH-30E6A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E6B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E6C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E6D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E6E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E6F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E70> 2
+<CJK_UNIFIED_IDEOGRAPH-30E71> 2
+<CJK_UNIFIED_IDEOGRAPH-30E72> 2
+<CJK_UNIFIED_IDEOGRAPH-30E73> 2
+<CJK_UNIFIED_IDEOGRAPH-30E74> 2
+<CJK_UNIFIED_IDEOGRAPH-30E75> 2
+<CJK_UNIFIED_IDEOGRAPH-30E76> 2
+<CJK_UNIFIED_IDEOGRAPH-30E77> 2
+<CJK_UNIFIED_IDEOGRAPH-30E78> 2
+<CJK_UNIFIED_IDEOGRAPH-30E79> 2
+<CJK_UNIFIED_IDEOGRAPH-30E7A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E7B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E7C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E7D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E7E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E7F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E80> 2
+<CJK_UNIFIED_IDEOGRAPH-30E81> 2
+<CJK_UNIFIED_IDEOGRAPH-30E82> 2
+<CJK_UNIFIED_IDEOGRAPH-30E83> 2
+<CJK_UNIFIED_IDEOGRAPH-30E84> 2
+<CJK_UNIFIED_IDEOGRAPH-30E85> 2
+<CJK_UNIFIED_IDEOGRAPH-30E86> 2
+<CJK_UNIFIED_IDEOGRAPH-30E87> 2
+<CJK_UNIFIED_IDEOGRAPH-30E88> 2
+<CJK_UNIFIED_IDEOGRAPH-30E89> 2
+<CJK_UNIFIED_IDEOGRAPH-30E8A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E8B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E8C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E8D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E8E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E8F> 2
+<CJK_UNIFIED_IDEOGRAPH-30E90> 2
+<CJK_UNIFIED_IDEOGRAPH-30E91> 2
+<CJK_UNIFIED_IDEOGRAPH-30E92> 2
+<CJK_UNIFIED_IDEOGRAPH-30E93> 2
+<CJK_UNIFIED_IDEOGRAPH-30E94> 2
+<CJK_UNIFIED_IDEOGRAPH-30E95> 2
+<CJK_UNIFIED_IDEOGRAPH-30E96> 2
+<CJK_UNIFIED_IDEOGRAPH-30E97> 2
+<CJK_UNIFIED_IDEOGRAPH-30E98> 2
+<CJK_UNIFIED_IDEOGRAPH-30E99> 2
+<CJK_UNIFIED_IDEOGRAPH-30E9A> 2
+<CJK_UNIFIED_IDEOGRAPH-30E9B> 2
+<CJK_UNIFIED_IDEOGRAPH-30E9C> 2
+<CJK_UNIFIED_IDEOGRAPH-30E9D> 2
+<CJK_UNIFIED_IDEOGRAPH-30E9E> 2
+<CJK_UNIFIED_IDEOGRAPH-30E9F> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA0> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA1> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA2> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA3> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA4> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA5> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA6> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA7> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA8> 2
+<CJK_UNIFIED_IDEOGRAPH-30EA9> 2
+<CJK_UNIFIED_IDEOGRAPH-30EAA> 2
+<CJK_UNIFIED_IDEOGRAPH-30EAB> 2
+<CJK_UNIFIED_IDEOGRAPH-30EAC> 2
+<CJK_UNIFIED_IDEOGRAPH-30EAD> 2
+<CJK_UNIFIED_IDEOGRAPH-30EAE> 2
+<CJK_UNIFIED_IDEOGRAPH-30EAF> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB0> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB1> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB2> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB3> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB4> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB5> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB6> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB7> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB8> 2
+<CJK_UNIFIED_IDEOGRAPH-30EB9> 2
+<CJK_UNIFIED_IDEOGRAPH-30EBA> 2
+<CJK_UNIFIED_IDEOGRAPH-30EBB> 2
+<CJK_UNIFIED_IDEOGRAPH-30EBC> 2
+<CJK_UNIFIED_IDEOGRAPH-30EBD> 2
+<CJK_UNIFIED_IDEOGRAPH-30EBE> 2
+<CJK_UNIFIED_IDEOGRAPH-30EBF> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC0> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC1> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC2> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC3> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC4> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC5> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC6> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC7> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC8> 2
+<CJK_UNIFIED_IDEOGRAPH-30EC9> 2
+<CJK_UNIFIED_IDEOGRAPH-30ECA> 2
+<CJK_UNIFIED_IDEOGRAPH-30ECB> 2
+<CJK_UNIFIED_IDEOGRAPH-30ECC> 2
+<CJK_UNIFIED_IDEOGRAPH-30ECD> 2
+<CJK_UNIFIED_IDEOGRAPH-30ECE> 2
+<CJK_UNIFIED_IDEOGRAPH-30ECF> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED0> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED1> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED2> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED3> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED4> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED5> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED6> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED7> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED8> 2
+<CJK_UNIFIED_IDEOGRAPH-30ED9> 2
+<CJK_UNIFIED_IDEOGRAPH-30EDA> 2
+<CJK_UNIFIED_IDEOGRAPH-30EDB> 2
+<CJK_UNIFIED_IDEOGRAPH-30EDC> 2
+<CJK_UNIFIED_IDEOGRAPH-30EDD> 2
+<CJK_UNIFIED_IDEOGRAPH-30EDE> 2
+<CJK_UNIFIED_IDEOGRAPH-30EDF> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE0> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE1> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE2> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE3> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE4> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE5> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE6> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE7> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE8> 2
+<CJK_UNIFIED_IDEOGRAPH-30EE9> 2
+<CJK_UNIFIED_IDEOGRAPH-30EEA> 2
+<CJK_UNIFIED_IDEOGRAPH-30EEB> 2
+<CJK_UNIFIED_IDEOGRAPH-30EEC> 2
+<CJK_UNIFIED_IDEOGRAPH-30EED> 2
+<CJK_UNIFIED_IDEOGRAPH-30EEE> 2
+<CJK_UNIFIED_IDEOGRAPH-30EEF> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF0> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF1> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF2> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF3> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF4> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF5> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF6> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF7> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF8> 2
+<CJK_UNIFIED_IDEOGRAPH-30EF9> 2
+<CJK_UNIFIED_IDEOGRAPH-30EFA> 2
+<CJK_UNIFIED_IDEOGRAPH-30EFB> 2
+<CJK_UNIFIED_IDEOGRAPH-30EFC> 2
+<CJK_UNIFIED_IDEOGRAPH-30EFD> 2
+<CJK_UNIFIED_IDEOGRAPH-30EFE> 2
+<CJK_UNIFIED_IDEOGRAPH-30EFF> 2
+<CJK_UNIFIED_IDEOGRAPH-30F00> 2
+<CJK_UNIFIED_IDEOGRAPH-30F01> 2
+<CJK_UNIFIED_IDEOGRAPH-30F02> 2
+<CJK_UNIFIED_IDEOGRAPH-30F03> 2
+<CJK_UNIFIED_IDEOGRAPH-30F04> 2
+<CJK_UNIFIED_IDEOGRAPH-30F05> 2
+<CJK_UNIFIED_IDEOGRAPH-30F06> 2
+<CJK_UNIFIED_IDEOGRAPH-30F07> 2
+<CJK_UNIFIED_IDEOGRAPH-30F08> 2
+<CJK_UNIFIED_IDEOGRAPH-30F09> 2
+<CJK_UNIFIED_IDEOGRAPH-30F0A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F0B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F0C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F0D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F0E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F0F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F10> 2
+<CJK_UNIFIED_IDEOGRAPH-30F11> 2
+<CJK_UNIFIED_IDEOGRAPH-30F12> 2
+<CJK_UNIFIED_IDEOGRAPH-30F13> 2
+<CJK_UNIFIED_IDEOGRAPH-30F14> 2
+<CJK_UNIFIED_IDEOGRAPH-30F15> 2
+<CJK_UNIFIED_IDEOGRAPH-30F16> 2
+<CJK_UNIFIED_IDEOGRAPH-30F17> 2
+<CJK_UNIFIED_IDEOGRAPH-30F18> 2
+<CJK_UNIFIED_IDEOGRAPH-30F19> 2
+<CJK_UNIFIED_IDEOGRAPH-30F1A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F1B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F1C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F1D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F1E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F1F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F20> 2
+<CJK_UNIFIED_IDEOGRAPH-30F21> 2
+<CJK_UNIFIED_IDEOGRAPH-30F22> 2
+<CJK_UNIFIED_IDEOGRAPH-30F23> 2
+<CJK_UNIFIED_IDEOGRAPH-30F24> 2
+<CJK_UNIFIED_IDEOGRAPH-30F25> 2
+<CJK_UNIFIED_IDEOGRAPH-30F26> 2
+<CJK_UNIFIED_IDEOGRAPH-30F27> 2
+<CJK_UNIFIED_IDEOGRAPH-30F28> 2
+<CJK_UNIFIED_IDEOGRAPH-30F29> 2
+<CJK_UNIFIED_IDEOGRAPH-30F2A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F2B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F2C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F2D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F2E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F2F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F30> 2
+<CJK_UNIFIED_IDEOGRAPH-30F31> 2
+<CJK_UNIFIED_IDEOGRAPH-30F32> 2
+<CJK_UNIFIED_IDEOGRAPH-30F33> 2
+<CJK_UNIFIED_IDEOGRAPH-30F34> 2
+<CJK_UNIFIED_IDEOGRAPH-30F35> 2
+<CJK_UNIFIED_IDEOGRAPH-30F36> 2
+<CJK_UNIFIED_IDEOGRAPH-30F37> 2
+<CJK_UNIFIED_IDEOGRAPH-30F38> 2
+<CJK_UNIFIED_IDEOGRAPH-30F39> 2
+<CJK_UNIFIED_IDEOGRAPH-30F3A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F3B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F3C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F3D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F3E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F3F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F40> 2
+<CJK_UNIFIED_IDEOGRAPH-30F41> 2
+<CJK_UNIFIED_IDEOGRAPH-30F42> 2
+<CJK_UNIFIED_IDEOGRAPH-30F43> 2
+<CJK_UNIFIED_IDEOGRAPH-30F44> 2
+<CJK_UNIFIED_IDEOGRAPH-30F45> 2
+<CJK_UNIFIED_IDEOGRAPH-30F46> 2
+<CJK_UNIFIED_IDEOGRAPH-30F47> 2
+<CJK_UNIFIED_IDEOGRAPH-30F48> 2
+<CJK_UNIFIED_IDEOGRAPH-30F49> 2
+<CJK_UNIFIED_IDEOGRAPH-30F4A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F4B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F4C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F4D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F4E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F4F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F50> 2
+<CJK_UNIFIED_IDEOGRAPH-30F51> 2
+<CJK_UNIFIED_IDEOGRAPH-30F52> 2
+<CJK_UNIFIED_IDEOGRAPH-30F53> 2
+<CJK_UNIFIED_IDEOGRAPH-30F54> 2
+<CJK_UNIFIED_IDEOGRAPH-30F55> 2
+<CJK_UNIFIED_IDEOGRAPH-30F56> 2
+<CJK_UNIFIED_IDEOGRAPH-30F57> 2
+<CJK_UNIFIED_IDEOGRAPH-30F58> 2
+<CJK_UNIFIED_IDEOGRAPH-30F59> 2
+<CJK_UNIFIED_IDEOGRAPH-30F5A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F5B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F5C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F5D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F5E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F5F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F60> 2
+<CJK_UNIFIED_IDEOGRAPH-30F61> 2
+<CJK_UNIFIED_IDEOGRAPH-30F62> 2
+<CJK_UNIFIED_IDEOGRAPH-30F63> 2
+<CJK_UNIFIED_IDEOGRAPH-30F64> 2
+<CJK_UNIFIED_IDEOGRAPH-30F65> 2
+<CJK_UNIFIED_IDEOGRAPH-30F66> 2
+<CJK_UNIFIED_IDEOGRAPH-30F67> 2
+<CJK_UNIFIED_IDEOGRAPH-30F68> 2
+<CJK_UNIFIED_IDEOGRAPH-30F69> 2
+<CJK_UNIFIED_IDEOGRAPH-30F6A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F6B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F6C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F6D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F6E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F6F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F70> 2
+<CJK_UNIFIED_IDEOGRAPH-30F71> 2
+<CJK_UNIFIED_IDEOGRAPH-30F72> 2
+<CJK_UNIFIED_IDEOGRAPH-30F73> 2
+<CJK_UNIFIED_IDEOGRAPH-30F74> 2
+<CJK_UNIFIED_IDEOGRAPH-30F75> 2
+<CJK_UNIFIED_IDEOGRAPH-30F76> 2
+<CJK_UNIFIED_IDEOGRAPH-30F77> 2
+<CJK_UNIFIED_IDEOGRAPH-30F78> 2
+<CJK_UNIFIED_IDEOGRAPH-30F79> 2
+<CJK_UNIFIED_IDEOGRAPH-30F7A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F7B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F7C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F7D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F7E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F7F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F80> 2
+<CJK_UNIFIED_IDEOGRAPH-30F81> 2
+<CJK_UNIFIED_IDEOGRAPH-30F82> 2
+<CJK_UNIFIED_IDEOGRAPH-30F83> 2
+<CJK_UNIFIED_IDEOGRAPH-30F84> 2
+<CJK_UNIFIED_IDEOGRAPH-30F85> 2
+<CJK_UNIFIED_IDEOGRAPH-30F86> 2
+<CJK_UNIFIED_IDEOGRAPH-30F87> 2
+<CJK_UNIFIED_IDEOGRAPH-30F88> 2
+<CJK_UNIFIED_IDEOGRAPH-30F89> 2
+<CJK_UNIFIED_IDEOGRAPH-30F8A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F8B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F8C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F8D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F8E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F8F> 2
+<CJK_UNIFIED_IDEOGRAPH-30F90> 2
+<CJK_UNIFIED_IDEOGRAPH-30F91> 2
+<CJK_UNIFIED_IDEOGRAPH-30F92> 2
+<CJK_UNIFIED_IDEOGRAPH-30F93> 2
+<CJK_UNIFIED_IDEOGRAPH-30F94> 2
+<CJK_UNIFIED_IDEOGRAPH-30F95> 2
+<CJK_UNIFIED_IDEOGRAPH-30F96> 2
+<CJK_UNIFIED_IDEOGRAPH-30F97> 2
+<CJK_UNIFIED_IDEOGRAPH-30F98> 2
+<CJK_UNIFIED_IDEOGRAPH-30F99> 2
+<CJK_UNIFIED_IDEOGRAPH-30F9A> 2
+<CJK_UNIFIED_IDEOGRAPH-30F9B> 2
+<CJK_UNIFIED_IDEOGRAPH-30F9C> 2
+<CJK_UNIFIED_IDEOGRAPH-30F9D> 2
+<CJK_UNIFIED_IDEOGRAPH-30F9E> 2
+<CJK_UNIFIED_IDEOGRAPH-30F9F> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA0> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA1> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA2> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA3> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA4> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA5> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA6> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA7> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA8> 2
+<CJK_UNIFIED_IDEOGRAPH-30FA9> 2
+<CJK_UNIFIED_IDEOGRAPH-30FAA> 2
+<CJK_UNIFIED_IDEOGRAPH-30FAB> 2
+<CJK_UNIFIED_IDEOGRAPH-30FAC> 2
+<CJK_UNIFIED_IDEOGRAPH-30FAD> 2
+<CJK_UNIFIED_IDEOGRAPH-30FAE> 2
+<CJK_UNIFIED_IDEOGRAPH-30FAF> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB0> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB1> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB2> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB3> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB4> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB5> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB6> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB7> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB8> 2
+<CJK_UNIFIED_IDEOGRAPH-30FB9> 2
+<CJK_UNIFIED_IDEOGRAPH-30FBA> 2
+<CJK_UNIFIED_IDEOGRAPH-30FBB> 2
+<CJK_UNIFIED_IDEOGRAPH-30FBC> 2
+<CJK_UNIFIED_IDEOGRAPH-30FBD> 2
+<CJK_UNIFIED_IDEOGRAPH-30FBE> 2
+<CJK_UNIFIED_IDEOGRAPH-30FBF> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC0> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC1> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC2> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC3> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC4> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC5> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC6> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC7> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC8> 2
+<CJK_UNIFIED_IDEOGRAPH-30FC9> 2
+<CJK_UNIFIED_IDEOGRAPH-30FCA> 2
+<CJK_UNIFIED_IDEOGRAPH-30FCB> 2
+<CJK_UNIFIED_IDEOGRAPH-30FCC> 2
+<CJK_UNIFIED_IDEOGRAPH-30FCD> 2
+<CJK_UNIFIED_IDEOGRAPH-30FCE> 2
+<CJK_UNIFIED_IDEOGRAPH-30FCF> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD0> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD1> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD2> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD3> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD4> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD5> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD6> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD7> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD8> 2
+<CJK_UNIFIED_IDEOGRAPH-30FD9> 2
+<CJK_UNIFIED_IDEOGRAPH-30FDA> 2
+<CJK_UNIFIED_IDEOGRAPH-30FDB> 2
+<CJK_UNIFIED_IDEOGRAPH-30FDC> 2
+<CJK_UNIFIED_IDEOGRAPH-30FDD> 2
+<CJK_UNIFIED_IDEOGRAPH-30FDE> 2
+<CJK_UNIFIED_IDEOGRAPH-30FDF> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE0> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE1> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE2> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE3> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE4> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE5> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE6> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE7> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE8> 2
+<CJK_UNIFIED_IDEOGRAPH-30FE9> 2
+<CJK_UNIFIED_IDEOGRAPH-30FEA> 2
+<CJK_UNIFIED_IDEOGRAPH-30FEB> 2
+<CJK_UNIFIED_IDEOGRAPH-30FEC> 2
+<CJK_UNIFIED_IDEOGRAPH-30FED> 2
+<CJK_UNIFIED_IDEOGRAPH-30FEE> 2
+<CJK_UNIFIED_IDEOGRAPH-30FEF> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF0> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF1> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF2> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF3> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF4> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF5> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF6> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF7> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF8> 2
+<CJK_UNIFIED_IDEOGRAPH-30FF9> 2
+<CJK_UNIFIED_IDEOGRAPH-30FFA> 2
+<CJK_UNIFIED_IDEOGRAPH-30FFB> 2
+<CJK_UNIFIED_IDEOGRAPH-30FFC> 2
+<CJK_UNIFIED_IDEOGRAPH-30FFD> 2
+<CJK_UNIFIED_IDEOGRAPH-30FFE> 2
+<CJK_UNIFIED_IDEOGRAPH-30FFF> 2
+<CJK_UNIFIED_IDEOGRAPH-31000> 2
+<CJK_UNIFIED_IDEOGRAPH-31001> 2
+<CJK_UNIFIED_IDEOGRAPH-31002> 2
+<CJK_UNIFIED_IDEOGRAPH-31003> 2
+<CJK_UNIFIED_IDEOGRAPH-31004> 2
+<CJK_UNIFIED_IDEOGRAPH-31005> 2
+<CJK_UNIFIED_IDEOGRAPH-31006> 2
+<CJK_UNIFIED_IDEOGRAPH-31007> 2
+<CJK_UNIFIED_IDEOGRAPH-31008> 2
+<CJK_UNIFIED_IDEOGRAPH-31009> 2
+<CJK_UNIFIED_IDEOGRAPH-3100A> 2
+<CJK_UNIFIED_IDEOGRAPH-3100B> 2
+<CJK_UNIFIED_IDEOGRAPH-3100C> 2
+<CJK_UNIFIED_IDEOGRAPH-3100D> 2
+<CJK_UNIFIED_IDEOGRAPH-3100E> 2
+<CJK_UNIFIED_IDEOGRAPH-3100F> 2
+<CJK_UNIFIED_IDEOGRAPH-31010> 2
+<CJK_UNIFIED_IDEOGRAPH-31011> 2
+<CJK_UNIFIED_IDEOGRAPH-31012> 2
+<CJK_UNIFIED_IDEOGRAPH-31013> 2
+<CJK_UNIFIED_IDEOGRAPH-31014> 2
+<CJK_UNIFIED_IDEOGRAPH-31015> 2
+<CJK_UNIFIED_IDEOGRAPH-31016> 2
+<CJK_UNIFIED_IDEOGRAPH-31017> 2
+<CJK_UNIFIED_IDEOGRAPH-31018> 2
+<CJK_UNIFIED_IDEOGRAPH-31019> 2
+<CJK_UNIFIED_IDEOGRAPH-3101A> 2
+<CJK_UNIFIED_IDEOGRAPH-3101B> 2
+<CJK_UNIFIED_IDEOGRAPH-3101C> 2
+<CJK_UNIFIED_IDEOGRAPH-3101D> 2
+<CJK_UNIFIED_IDEOGRAPH-3101E> 2
+<CJK_UNIFIED_IDEOGRAPH-3101F> 2
+<CJK_UNIFIED_IDEOGRAPH-31020> 2
+<CJK_UNIFIED_IDEOGRAPH-31021> 2
+<CJK_UNIFIED_IDEOGRAPH-31022> 2
+<CJK_UNIFIED_IDEOGRAPH-31023> 2
+<CJK_UNIFIED_IDEOGRAPH-31024> 2
+<CJK_UNIFIED_IDEOGRAPH-31025> 2
+<CJK_UNIFIED_IDEOGRAPH-31026> 2
+<CJK_UNIFIED_IDEOGRAPH-31027> 2
+<CJK_UNIFIED_IDEOGRAPH-31028> 2
+<CJK_UNIFIED_IDEOGRAPH-31029> 2
+<CJK_UNIFIED_IDEOGRAPH-3102A> 2
+<CJK_UNIFIED_IDEOGRAPH-3102B> 2
+<CJK_UNIFIED_IDEOGRAPH-3102C> 2
+<CJK_UNIFIED_IDEOGRAPH-3102D> 2
+<CJK_UNIFIED_IDEOGRAPH-3102E> 2
+<CJK_UNIFIED_IDEOGRAPH-3102F> 2
+<CJK_UNIFIED_IDEOGRAPH-31030> 2
+<CJK_UNIFIED_IDEOGRAPH-31031> 2
+<CJK_UNIFIED_IDEOGRAPH-31032> 2
+<CJK_UNIFIED_IDEOGRAPH-31033> 2
+<CJK_UNIFIED_IDEOGRAPH-31034> 2
+<CJK_UNIFIED_IDEOGRAPH-31035> 2
+<CJK_UNIFIED_IDEOGRAPH-31036> 2
+<CJK_UNIFIED_IDEOGRAPH-31037> 2
+<CJK_UNIFIED_IDEOGRAPH-31038> 2
+<CJK_UNIFIED_IDEOGRAPH-31039> 2
+<CJK_UNIFIED_IDEOGRAPH-3103A> 2
+<CJK_UNIFIED_IDEOGRAPH-3103B> 2
+<CJK_UNIFIED_IDEOGRAPH-3103C> 2
+<CJK_UNIFIED_IDEOGRAPH-3103D> 2
+<CJK_UNIFIED_IDEOGRAPH-3103E> 2
+<CJK_UNIFIED_IDEOGRAPH-3103F> 2
+<CJK_UNIFIED_IDEOGRAPH-31040> 2
+<CJK_UNIFIED_IDEOGRAPH-31041> 2
+<CJK_UNIFIED_IDEOGRAPH-31042> 2
+<CJK_UNIFIED_IDEOGRAPH-31043> 2
+<CJK_UNIFIED_IDEOGRAPH-31044> 2
+<CJK_UNIFIED_IDEOGRAPH-31045> 2
+<CJK_UNIFIED_IDEOGRAPH-31046> 2
+<CJK_UNIFIED_IDEOGRAPH-31047> 2
+<CJK_UNIFIED_IDEOGRAPH-31048> 2
+<CJK_UNIFIED_IDEOGRAPH-31049> 2
+<CJK_UNIFIED_IDEOGRAPH-3104A> 2
+<CJK_UNIFIED_IDEOGRAPH-3104B> 2
+<CJK_UNIFIED_IDEOGRAPH-3104C> 2
+<CJK_UNIFIED_IDEOGRAPH-3104D> 2
+<CJK_UNIFIED_IDEOGRAPH-3104E> 2
+<CJK_UNIFIED_IDEOGRAPH-3104F> 2
+<CJK_UNIFIED_IDEOGRAPH-31050> 2
+<CJK_UNIFIED_IDEOGRAPH-31051> 2
+<CJK_UNIFIED_IDEOGRAPH-31052> 2
+<CJK_UNIFIED_IDEOGRAPH-31053> 2
+<CJK_UNIFIED_IDEOGRAPH-31054> 2
+<CJK_UNIFIED_IDEOGRAPH-31055> 2
+<CJK_UNIFIED_IDEOGRAPH-31056> 2
+<CJK_UNIFIED_IDEOGRAPH-31057> 2
+<CJK_UNIFIED_IDEOGRAPH-31058> 2
+<CJK_UNIFIED_IDEOGRAPH-31059> 2
+<CJK_UNIFIED_IDEOGRAPH-3105A> 2
+<CJK_UNIFIED_IDEOGRAPH-3105B> 2
+<CJK_UNIFIED_IDEOGRAPH-3105C> 2
+<CJK_UNIFIED_IDEOGRAPH-3105D> 2
+<CJK_UNIFIED_IDEOGRAPH-3105E> 2
+<CJK_UNIFIED_IDEOGRAPH-3105F> 2
+<CJK_UNIFIED_IDEOGRAPH-31060> 2
+<CJK_UNIFIED_IDEOGRAPH-31061> 2
+<CJK_UNIFIED_IDEOGRAPH-31062> 2
+<CJK_UNIFIED_IDEOGRAPH-31063> 2
+<CJK_UNIFIED_IDEOGRAPH-31064> 2
+<CJK_UNIFIED_IDEOGRAPH-31065> 2
+<CJK_UNIFIED_IDEOGRAPH-31066> 2
+<CJK_UNIFIED_IDEOGRAPH-31067> 2
+<CJK_UNIFIED_IDEOGRAPH-31068> 2
+<CJK_UNIFIED_IDEOGRAPH-31069> 2
+<CJK_UNIFIED_IDEOGRAPH-3106A> 2
+<CJK_UNIFIED_IDEOGRAPH-3106B> 2
+<CJK_UNIFIED_IDEOGRAPH-3106C> 2
+<CJK_UNIFIED_IDEOGRAPH-3106D> 2
+<CJK_UNIFIED_IDEOGRAPH-3106E> 2
+<CJK_UNIFIED_IDEOGRAPH-3106F> 2
+<CJK_UNIFIED_IDEOGRAPH-31070> 2
+<CJK_UNIFIED_IDEOGRAPH-31071> 2
+<CJK_UNIFIED_IDEOGRAPH-31072> 2
+<CJK_UNIFIED_IDEOGRAPH-31073> 2
+<CJK_UNIFIED_IDEOGRAPH-31074> 2
+<CJK_UNIFIED_IDEOGRAPH-31075> 2
+<CJK_UNIFIED_IDEOGRAPH-31076> 2
+<CJK_UNIFIED_IDEOGRAPH-31077> 2
+<CJK_UNIFIED_IDEOGRAPH-31078> 2
+<CJK_UNIFIED_IDEOGRAPH-31079> 2
+<CJK_UNIFIED_IDEOGRAPH-3107A> 2
+<CJK_UNIFIED_IDEOGRAPH-3107B> 2
+<CJK_UNIFIED_IDEOGRAPH-3107C> 2
+<CJK_UNIFIED_IDEOGRAPH-3107D> 2
+<CJK_UNIFIED_IDEOGRAPH-3107E> 2
+<CJK_UNIFIED_IDEOGRAPH-3107F> 2
+<CJK_UNIFIED_IDEOGRAPH-31080> 2
+<CJK_UNIFIED_IDEOGRAPH-31081> 2
+<CJK_UNIFIED_IDEOGRAPH-31082> 2
+<CJK_UNIFIED_IDEOGRAPH-31083> 2
+<CJK_UNIFIED_IDEOGRAPH-31084> 2
+<CJK_UNIFIED_IDEOGRAPH-31085> 2
+<CJK_UNIFIED_IDEOGRAPH-31086> 2
+<CJK_UNIFIED_IDEOGRAPH-31087> 2
+<CJK_UNIFIED_IDEOGRAPH-31088> 2
+<CJK_UNIFIED_IDEOGRAPH-31089> 2
+<CJK_UNIFIED_IDEOGRAPH-3108A> 2
+<CJK_UNIFIED_IDEOGRAPH-3108B> 2
+<CJK_UNIFIED_IDEOGRAPH-3108C> 2
+<CJK_UNIFIED_IDEOGRAPH-3108D> 2
+<CJK_UNIFIED_IDEOGRAPH-3108E> 2
+<CJK_UNIFIED_IDEOGRAPH-3108F> 2
+<CJK_UNIFIED_IDEOGRAPH-31090> 2
+<CJK_UNIFIED_IDEOGRAPH-31091> 2
+<CJK_UNIFIED_IDEOGRAPH-31092> 2
+<CJK_UNIFIED_IDEOGRAPH-31093> 2
+<CJK_UNIFIED_IDEOGRAPH-31094> 2
+<CJK_UNIFIED_IDEOGRAPH-31095> 2
+<CJK_UNIFIED_IDEOGRAPH-31096> 2
+<CJK_UNIFIED_IDEOGRAPH-31097> 2
+<CJK_UNIFIED_IDEOGRAPH-31098> 2
+<CJK_UNIFIED_IDEOGRAPH-31099> 2
+<CJK_UNIFIED_IDEOGRAPH-3109A> 2
+<CJK_UNIFIED_IDEOGRAPH-3109B> 2
+<CJK_UNIFIED_IDEOGRAPH-3109C> 2
+<CJK_UNIFIED_IDEOGRAPH-3109D> 2
+<CJK_UNIFIED_IDEOGRAPH-3109E> 2
+<CJK_UNIFIED_IDEOGRAPH-3109F> 2
+<CJK_UNIFIED_IDEOGRAPH-310A0> 2
+<CJK_UNIFIED_IDEOGRAPH-310A1> 2
+<CJK_UNIFIED_IDEOGRAPH-310A2> 2
+<CJK_UNIFIED_IDEOGRAPH-310A3> 2
+<CJK_UNIFIED_IDEOGRAPH-310A4> 2
+<CJK_UNIFIED_IDEOGRAPH-310A5> 2
+<CJK_UNIFIED_IDEOGRAPH-310A6> 2
+<CJK_UNIFIED_IDEOGRAPH-310A7> 2
+<CJK_UNIFIED_IDEOGRAPH-310A8> 2
+<CJK_UNIFIED_IDEOGRAPH-310A9> 2
+<CJK_UNIFIED_IDEOGRAPH-310AA> 2
+<CJK_UNIFIED_IDEOGRAPH-310AB> 2
+<CJK_UNIFIED_IDEOGRAPH-310AC> 2
+<CJK_UNIFIED_IDEOGRAPH-310AD> 2
+<CJK_UNIFIED_IDEOGRAPH-310AE> 2
+<CJK_UNIFIED_IDEOGRAPH-310AF> 2
+<CJK_UNIFIED_IDEOGRAPH-310B0> 2
+<CJK_UNIFIED_IDEOGRAPH-310B1> 2
+<CJK_UNIFIED_IDEOGRAPH-310B2> 2
+<CJK_UNIFIED_IDEOGRAPH-310B3> 2
+<CJK_UNIFIED_IDEOGRAPH-310B4> 2
+<CJK_UNIFIED_IDEOGRAPH-310B5> 2
+<CJK_UNIFIED_IDEOGRAPH-310B6> 2
+<CJK_UNIFIED_IDEOGRAPH-310B7> 2
+<CJK_UNIFIED_IDEOGRAPH-310B8> 2
+<CJK_UNIFIED_IDEOGRAPH-310B9> 2
+<CJK_UNIFIED_IDEOGRAPH-310BA> 2
+<CJK_UNIFIED_IDEOGRAPH-310BB> 2
+<CJK_UNIFIED_IDEOGRAPH-310BC> 2
+<CJK_UNIFIED_IDEOGRAPH-310BD> 2
+<CJK_UNIFIED_IDEOGRAPH-310BE> 2
+<CJK_UNIFIED_IDEOGRAPH-310BF> 2
+<CJK_UNIFIED_IDEOGRAPH-310C0> 2
+<CJK_UNIFIED_IDEOGRAPH-310C1> 2
+<CJK_UNIFIED_IDEOGRAPH-310C2> 2
+<CJK_UNIFIED_IDEOGRAPH-310C3> 2
+<CJK_UNIFIED_IDEOGRAPH-310C4> 2
+<CJK_UNIFIED_IDEOGRAPH-310C5> 2
+<CJK_UNIFIED_IDEOGRAPH-310C6> 2
+<CJK_UNIFIED_IDEOGRAPH-310C7> 2
+<CJK_UNIFIED_IDEOGRAPH-310C8> 2
+<CJK_UNIFIED_IDEOGRAPH-310C9> 2
+<CJK_UNIFIED_IDEOGRAPH-310CA> 2
+<CJK_UNIFIED_IDEOGRAPH-310CB> 2
+<CJK_UNIFIED_IDEOGRAPH-310CC> 2
+<CJK_UNIFIED_IDEOGRAPH-310CD> 2
+<CJK_UNIFIED_IDEOGRAPH-310CE> 2
+<CJK_UNIFIED_IDEOGRAPH-310CF> 2
+<CJK_UNIFIED_IDEOGRAPH-310D0> 2
+<CJK_UNIFIED_IDEOGRAPH-310D1> 2
+<CJK_UNIFIED_IDEOGRAPH-310D2> 2
+<CJK_UNIFIED_IDEOGRAPH-310D3> 2
+<CJK_UNIFIED_IDEOGRAPH-310D4> 2
+<CJK_UNIFIED_IDEOGRAPH-310D5> 2
+<CJK_UNIFIED_IDEOGRAPH-310D6> 2
+<CJK_UNIFIED_IDEOGRAPH-310D7> 2
+<CJK_UNIFIED_IDEOGRAPH-310D8> 2
+<CJK_UNIFIED_IDEOGRAPH-310D9> 2
+<CJK_UNIFIED_IDEOGRAPH-310DA> 2
+<CJK_UNIFIED_IDEOGRAPH-310DB> 2
+<CJK_UNIFIED_IDEOGRAPH-310DC> 2
+<CJK_UNIFIED_IDEOGRAPH-310DD> 2
+<CJK_UNIFIED_IDEOGRAPH-310DE> 2
+<CJK_UNIFIED_IDEOGRAPH-310DF> 2
+<CJK_UNIFIED_IDEOGRAPH-310E0> 2
+<CJK_UNIFIED_IDEOGRAPH-310E1> 2
+<CJK_UNIFIED_IDEOGRAPH-310E2> 2
+<CJK_UNIFIED_IDEOGRAPH-310E3> 2
+<CJK_UNIFIED_IDEOGRAPH-310E4> 2
+<CJK_UNIFIED_IDEOGRAPH-310E5> 2
+<CJK_UNIFIED_IDEOGRAPH-310E6> 2
+<CJK_UNIFIED_IDEOGRAPH-310E7> 2
+<CJK_UNIFIED_IDEOGRAPH-310E8> 2
+<CJK_UNIFIED_IDEOGRAPH-310E9> 2
+<CJK_UNIFIED_IDEOGRAPH-310EA> 2
+<CJK_UNIFIED_IDEOGRAPH-310EB> 2
+<CJK_UNIFIED_IDEOGRAPH-310EC> 2
+<CJK_UNIFIED_IDEOGRAPH-310ED> 2
+<CJK_UNIFIED_IDEOGRAPH-310EE> 2
+<CJK_UNIFIED_IDEOGRAPH-310EF> 2
+<CJK_UNIFIED_IDEOGRAPH-310F0> 2
+<CJK_UNIFIED_IDEOGRAPH-310F1> 2
+<CJK_UNIFIED_IDEOGRAPH-310F2> 2
+<CJK_UNIFIED_IDEOGRAPH-310F3> 2
+<CJK_UNIFIED_IDEOGRAPH-310F4> 2
+<CJK_UNIFIED_IDEOGRAPH-310F5> 2
+<CJK_UNIFIED_IDEOGRAPH-310F6> 2
+<CJK_UNIFIED_IDEOGRAPH-310F7> 2
+<CJK_UNIFIED_IDEOGRAPH-310F8> 2
+<CJK_UNIFIED_IDEOGRAPH-310F9> 2
+<CJK_UNIFIED_IDEOGRAPH-310FA> 2
+<CJK_UNIFIED_IDEOGRAPH-310FB> 2
+<CJK_UNIFIED_IDEOGRAPH-310FC> 2
+<CJK_UNIFIED_IDEOGRAPH-310FD> 2
+<CJK_UNIFIED_IDEOGRAPH-310FE> 2
+<CJK_UNIFIED_IDEOGRAPH-310FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31100> 2
+<CJK_UNIFIED_IDEOGRAPH-31101> 2
+<CJK_UNIFIED_IDEOGRAPH-31102> 2
+<CJK_UNIFIED_IDEOGRAPH-31103> 2
+<CJK_UNIFIED_IDEOGRAPH-31104> 2
+<CJK_UNIFIED_IDEOGRAPH-31105> 2
+<CJK_UNIFIED_IDEOGRAPH-31106> 2
+<CJK_UNIFIED_IDEOGRAPH-31107> 2
+<CJK_UNIFIED_IDEOGRAPH-31108> 2
+<CJK_UNIFIED_IDEOGRAPH-31109> 2
+<CJK_UNIFIED_IDEOGRAPH-3110A> 2
+<CJK_UNIFIED_IDEOGRAPH-3110B> 2
+<CJK_UNIFIED_IDEOGRAPH-3110C> 2
+<CJK_UNIFIED_IDEOGRAPH-3110D> 2
+<CJK_UNIFIED_IDEOGRAPH-3110E> 2
+<CJK_UNIFIED_IDEOGRAPH-3110F> 2
+<CJK_UNIFIED_IDEOGRAPH-31110> 2
+<CJK_UNIFIED_IDEOGRAPH-31111> 2
+<CJK_UNIFIED_IDEOGRAPH-31112> 2
+<CJK_UNIFIED_IDEOGRAPH-31113> 2
+<CJK_UNIFIED_IDEOGRAPH-31114> 2
+<CJK_UNIFIED_IDEOGRAPH-31115> 2
+<CJK_UNIFIED_IDEOGRAPH-31116> 2
+<CJK_UNIFIED_IDEOGRAPH-31117> 2
+<CJK_UNIFIED_IDEOGRAPH-31118> 2
+<CJK_UNIFIED_IDEOGRAPH-31119> 2
+<CJK_UNIFIED_IDEOGRAPH-3111A> 2
+<CJK_UNIFIED_IDEOGRAPH-3111B> 2
+<CJK_UNIFIED_IDEOGRAPH-3111C> 2
+<CJK_UNIFIED_IDEOGRAPH-3111D> 2
+<CJK_UNIFIED_IDEOGRAPH-3111E> 2
+<CJK_UNIFIED_IDEOGRAPH-3111F> 2
+<CJK_UNIFIED_IDEOGRAPH-31120> 2
+<CJK_UNIFIED_IDEOGRAPH-31121> 2
+<CJK_UNIFIED_IDEOGRAPH-31122> 2
+<CJK_UNIFIED_IDEOGRAPH-31123> 2
+<CJK_UNIFIED_IDEOGRAPH-31124> 2
+<CJK_UNIFIED_IDEOGRAPH-31125> 2
+<CJK_UNIFIED_IDEOGRAPH-31126> 2
+<CJK_UNIFIED_IDEOGRAPH-31127> 2
+<CJK_UNIFIED_IDEOGRAPH-31128> 2
+<CJK_UNIFIED_IDEOGRAPH-31129> 2
+<CJK_UNIFIED_IDEOGRAPH-3112A> 2
+<CJK_UNIFIED_IDEOGRAPH-3112B> 2
+<CJK_UNIFIED_IDEOGRAPH-3112C> 2
+<CJK_UNIFIED_IDEOGRAPH-3112D> 2
+<CJK_UNIFIED_IDEOGRAPH-3112E> 2
+<CJK_UNIFIED_IDEOGRAPH-3112F> 2
+<CJK_UNIFIED_IDEOGRAPH-31130> 2
+<CJK_UNIFIED_IDEOGRAPH-31131> 2
+<CJK_UNIFIED_IDEOGRAPH-31132> 2
+<CJK_UNIFIED_IDEOGRAPH-31133> 2
+<CJK_UNIFIED_IDEOGRAPH-31134> 2
+<CJK_UNIFIED_IDEOGRAPH-31135> 2
+<CJK_UNIFIED_IDEOGRAPH-31136> 2
+<CJK_UNIFIED_IDEOGRAPH-31137> 2
+<CJK_UNIFIED_IDEOGRAPH-31138> 2
+<CJK_UNIFIED_IDEOGRAPH-31139> 2
+<CJK_UNIFIED_IDEOGRAPH-3113A> 2
+<CJK_UNIFIED_IDEOGRAPH-3113B> 2
+<CJK_UNIFIED_IDEOGRAPH-3113C> 2
+<CJK_UNIFIED_IDEOGRAPH-3113D> 2
+<CJK_UNIFIED_IDEOGRAPH-3113E> 2
+<CJK_UNIFIED_IDEOGRAPH-3113F> 2
+<CJK_UNIFIED_IDEOGRAPH-31140> 2
+<CJK_UNIFIED_IDEOGRAPH-31141> 2
+<CJK_UNIFIED_IDEOGRAPH-31142> 2
+<CJK_UNIFIED_IDEOGRAPH-31143> 2
+<CJK_UNIFIED_IDEOGRAPH-31144> 2
+<CJK_UNIFIED_IDEOGRAPH-31145> 2
+<CJK_UNIFIED_IDEOGRAPH-31146> 2
+<CJK_UNIFIED_IDEOGRAPH-31147> 2
+<CJK_UNIFIED_IDEOGRAPH-31148> 2
+<CJK_UNIFIED_IDEOGRAPH-31149> 2
+<CJK_UNIFIED_IDEOGRAPH-3114A> 2
+<CJK_UNIFIED_IDEOGRAPH-3114B> 2
+<CJK_UNIFIED_IDEOGRAPH-3114C> 2
+<CJK_UNIFIED_IDEOGRAPH-3114D> 2
+<CJK_UNIFIED_IDEOGRAPH-3114E> 2
+<CJK_UNIFIED_IDEOGRAPH-3114F> 2
+<CJK_UNIFIED_IDEOGRAPH-31150> 2
+<CJK_UNIFIED_IDEOGRAPH-31151> 2
+<CJK_UNIFIED_IDEOGRAPH-31152> 2
+<CJK_UNIFIED_IDEOGRAPH-31153> 2
+<CJK_UNIFIED_IDEOGRAPH-31154> 2
+<CJK_UNIFIED_IDEOGRAPH-31155> 2
+<CJK_UNIFIED_IDEOGRAPH-31156> 2
+<CJK_UNIFIED_IDEOGRAPH-31157> 2
+<CJK_UNIFIED_IDEOGRAPH-31158> 2
+<CJK_UNIFIED_IDEOGRAPH-31159> 2
+<CJK_UNIFIED_IDEOGRAPH-3115A> 2
+<CJK_UNIFIED_IDEOGRAPH-3115B> 2
+<CJK_UNIFIED_IDEOGRAPH-3115C> 2
+<CJK_UNIFIED_IDEOGRAPH-3115D> 2
+<CJK_UNIFIED_IDEOGRAPH-3115E> 2
+<CJK_UNIFIED_IDEOGRAPH-3115F> 2
+<CJK_UNIFIED_IDEOGRAPH-31160> 2
+<CJK_UNIFIED_IDEOGRAPH-31161> 2
+<CJK_UNIFIED_IDEOGRAPH-31162> 2
+<CJK_UNIFIED_IDEOGRAPH-31163> 2
+<CJK_UNIFIED_IDEOGRAPH-31164> 2
+<CJK_UNIFIED_IDEOGRAPH-31165> 2
+<CJK_UNIFIED_IDEOGRAPH-31166> 2
+<CJK_UNIFIED_IDEOGRAPH-31167> 2
+<CJK_UNIFIED_IDEOGRAPH-31168> 2
+<CJK_UNIFIED_IDEOGRAPH-31169> 2
+<CJK_UNIFIED_IDEOGRAPH-3116A> 2
+<CJK_UNIFIED_IDEOGRAPH-3116B> 2
+<CJK_UNIFIED_IDEOGRAPH-3116C> 2
+<CJK_UNIFIED_IDEOGRAPH-3116D> 2
+<CJK_UNIFIED_IDEOGRAPH-3116E> 2
+<CJK_UNIFIED_IDEOGRAPH-3116F> 2
+<CJK_UNIFIED_IDEOGRAPH-31170> 2
+<CJK_UNIFIED_IDEOGRAPH-31171> 2
+<CJK_UNIFIED_IDEOGRAPH-31172> 2
+<CJK_UNIFIED_IDEOGRAPH-31173> 2
+<CJK_UNIFIED_IDEOGRAPH-31174> 2
+<CJK_UNIFIED_IDEOGRAPH-31175> 2
+<CJK_UNIFIED_IDEOGRAPH-31176> 2
+<CJK_UNIFIED_IDEOGRAPH-31177> 2
+<CJK_UNIFIED_IDEOGRAPH-31178> 2
+<CJK_UNIFIED_IDEOGRAPH-31179> 2
+<CJK_UNIFIED_IDEOGRAPH-3117A> 2
+<CJK_UNIFIED_IDEOGRAPH-3117B> 2
+<CJK_UNIFIED_IDEOGRAPH-3117C> 2
+<CJK_UNIFIED_IDEOGRAPH-3117D> 2
+<CJK_UNIFIED_IDEOGRAPH-3117E> 2
+<CJK_UNIFIED_IDEOGRAPH-3117F> 2
+<CJK_UNIFIED_IDEOGRAPH-31180> 2
+<CJK_UNIFIED_IDEOGRAPH-31181> 2
+<CJK_UNIFIED_IDEOGRAPH-31182> 2
+<CJK_UNIFIED_IDEOGRAPH-31183> 2
+<CJK_UNIFIED_IDEOGRAPH-31184> 2
+<CJK_UNIFIED_IDEOGRAPH-31185> 2
+<CJK_UNIFIED_IDEOGRAPH-31186> 2
+<CJK_UNIFIED_IDEOGRAPH-31187> 2
+<CJK_UNIFIED_IDEOGRAPH-31188> 2
+<CJK_UNIFIED_IDEOGRAPH-31189> 2
+<CJK_UNIFIED_IDEOGRAPH-3118A> 2
+<CJK_UNIFIED_IDEOGRAPH-3118B> 2
+<CJK_UNIFIED_IDEOGRAPH-3118C> 2
+<CJK_UNIFIED_IDEOGRAPH-3118D> 2
+<CJK_UNIFIED_IDEOGRAPH-3118E> 2
+<CJK_UNIFIED_IDEOGRAPH-3118F> 2
+<CJK_UNIFIED_IDEOGRAPH-31190> 2
+<CJK_UNIFIED_IDEOGRAPH-31191> 2
+<CJK_UNIFIED_IDEOGRAPH-31192> 2
+<CJK_UNIFIED_IDEOGRAPH-31193> 2
+<CJK_UNIFIED_IDEOGRAPH-31194> 2
+<CJK_UNIFIED_IDEOGRAPH-31195> 2
+<CJK_UNIFIED_IDEOGRAPH-31196> 2
+<CJK_UNIFIED_IDEOGRAPH-31197> 2
+<CJK_UNIFIED_IDEOGRAPH-31198> 2
+<CJK_UNIFIED_IDEOGRAPH-31199> 2
+<CJK_UNIFIED_IDEOGRAPH-3119A> 2
+<CJK_UNIFIED_IDEOGRAPH-3119B> 2
+<CJK_UNIFIED_IDEOGRAPH-3119C> 2
+<CJK_UNIFIED_IDEOGRAPH-3119D> 2
+<CJK_UNIFIED_IDEOGRAPH-3119E> 2
+<CJK_UNIFIED_IDEOGRAPH-3119F> 2
+<CJK_UNIFIED_IDEOGRAPH-311A0> 2
+<CJK_UNIFIED_IDEOGRAPH-311A1> 2
+<CJK_UNIFIED_IDEOGRAPH-311A2> 2
+<CJK_UNIFIED_IDEOGRAPH-311A3> 2
+<CJK_UNIFIED_IDEOGRAPH-311A4> 2
+<CJK_UNIFIED_IDEOGRAPH-311A5> 2
+<CJK_UNIFIED_IDEOGRAPH-311A6> 2
+<CJK_UNIFIED_IDEOGRAPH-311A7> 2
+<CJK_UNIFIED_IDEOGRAPH-311A8> 2
+<CJK_UNIFIED_IDEOGRAPH-311A9> 2
+<CJK_UNIFIED_IDEOGRAPH-311AA> 2
+<CJK_UNIFIED_IDEOGRAPH-311AB> 2
+<CJK_UNIFIED_IDEOGRAPH-311AC> 2
+<CJK_UNIFIED_IDEOGRAPH-311AD> 2
+<CJK_UNIFIED_IDEOGRAPH-311AE> 2
+<CJK_UNIFIED_IDEOGRAPH-311AF> 2
+<CJK_UNIFIED_IDEOGRAPH-311B0> 2
+<CJK_UNIFIED_IDEOGRAPH-311B1> 2
+<CJK_UNIFIED_IDEOGRAPH-311B2> 2
+<CJK_UNIFIED_IDEOGRAPH-311B3> 2
+<CJK_UNIFIED_IDEOGRAPH-311B4> 2
+<CJK_UNIFIED_IDEOGRAPH-311B5> 2
+<CJK_UNIFIED_IDEOGRAPH-311B6> 2
+<CJK_UNIFIED_IDEOGRAPH-311B7> 2
+<CJK_UNIFIED_IDEOGRAPH-311B8> 2
+<CJK_UNIFIED_IDEOGRAPH-311B9> 2
+<CJK_UNIFIED_IDEOGRAPH-311BA> 2
+<CJK_UNIFIED_IDEOGRAPH-311BB> 2
+<CJK_UNIFIED_IDEOGRAPH-311BC> 2
+<CJK_UNIFIED_IDEOGRAPH-311BD> 2
+<CJK_UNIFIED_IDEOGRAPH-311BE> 2
+<CJK_UNIFIED_IDEOGRAPH-311BF> 2
+<CJK_UNIFIED_IDEOGRAPH-311C0> 2
+<CJK_UNIFIED_IDEOGRAPH-311C1> 2
+<CJK_UNIFIED_IDEOGRAPH-311C2> 2
+<CJK_UNIFIED_IDEOGRAPH-311C3> 2
+<CJK_UNIFIED_IDEOGRAPH-311C4> 2
+<CJK_UNIFIED_IDEOGRAPH-311C5> 2
+<CJK_UNIFIED_IDEOGRAPH-311C6> 2
+<CJK_UNIFIED_IDEOGRAPH-311C7> 2
+<CJK_UNIFIED_IDEOGRAPH-311C8> 2
+<CJK_UNIFIED_IDEOGRAPH-311C9> 2
+<CJK_UNIFIED_IDEOGRAPH-311CA> 2
+<CJK_UNIFIED_IDEOGRAPH-311CB> 2
+<CJK_UNIFIED_IDEOGRAPH-311CC> 2
+<CJK_UNIFIED_IDEOGRAPH-311CD> 2
+<CJK_UNIFIED_IDEOGRAPH-311CE> 2
+<CJK_UNIFIED_IDEOGRAPH-311CF> 2
+<CJK_UNIFIED_IDEOGRAPH-311D0> 2
+<CJK_UNIFIED_IDEOGRAPH-311D1> 2
+<CJK_UNIFIED_IDEOGRAPH-311D2> 2
+<CJK_UNIFIED_IDEOGRAPH-311D3> 2
+<CJK_UNIFIED_IDEOGRAPH-311D4> 2
+<CJK_UNIFIED_IDEOGRAPH-311D5> 2
+<CJK_UNIFIED_IDEOGRAPH-311D6> 2
+<CJK_UNIFIED_IDEOGRAPH-311D7> 2
+<CJK_UNIFIED_IDEOGRAPH-311D8> 2
+<CJK_UNIFIED_IDEOGRAPH-311D9> 2
+<CJK_UNIFIED_IDEOGRAPH-311DA> 2
+<CJK_UNIFIED_IDEOGRAPH-311DB> 2
+<CJK_UNIFIED_IDEOGRAPH-311DC> 2
+<CJK_UNIFIED_IDEOGRAPH-311DD> 2
+<CJK_UNIFIED_IDEOGRAPH-311DE> 2
+<CJK_UNIFIED_IDEOGRAPH-311DF> 2
+<CJK_UNIFIED_IDEOGRAPH-311E0> 2
+<CJK_UNIFIED_IDEOGRAPH-311E1> 2
+<CJK_UNIFIED_IDEOGRAPH-311E2> 2
+<CJK_UNIFIED_IDEOGRAPH-311E3> 2
+<CJK_UNIFIED_IDEOGRAPH-311E4> 2
+<CJK_UNIFIED_IDEOGRAPH-311E5> 2
+<CJK_UNIFIED_IDEOGRAPH-311E6> 2
+<CJK_UNIFIED_IDEOGRAPH-311E7> 2
+<CJK_UNIFIED_IDEOGRAPH-311E8> 2
+<CJK_UNIFIED_IDEOGRAPH-311E9> 2
+<CJK_UNIFIED_IDEOGRAPH-311EA> 2
+<CJK_UNIFIED_IDEOGRAPH-311EB> 2
+<CJK_UNIFIED_IDEOGRAPH-311EC> 2
+<CJK_UNIFIED_IDEOGRAPH-311ED> 2
+<CJK_UNIFIED_IDEOGRAPH-311EE> 2
+<CJK_UNIFIED_IDEOGRAPH-311EF> 2
+<CJK_UNIFIED_IDEOGRAPH-311F0> 2
+<CJK_UNIFIED_IDEOGRAPH-311F1> 2
+<CJK_UNIFIED_IDEOGRAPH-311F2> 2
+<CJK_UNIFIED_IDEOGRAPH-311F3> 2
+<CJK_UNIFIED_IDEOGRAPH-311F4> 2
+<CJK_UNIFIED_IDEOGRAPH-311F5> 2
+<CJK_UNIFIED_IDEOGRAPH-311F6> 2
+<CJK_UNIFIED_IDEOGRAPH-311F7> 2
+<CJK_UNIFIED_IDEOGRAPH-311F8> 2
+<CJK_UNIFIED_IDEOGRAPH-311F9> 2
+<CJK_UNIFIED_IDEOGRAPH-311FA> 2
+<CJK_UNIFIED_IDEOGRAPH-311FB> 2
+<CJK_UNIFIED_IDEOGRAPH-311FC> 2
+<CJK_UNIFIED_IDEOGRAPH-311FD> 2
+<CJK_UNIFIED_IDEOGRAPH-311FE> 2
+<CJK_UNIFIED_IDEOGRAPH-311FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31200> 2
+<CJK_UNIFIED_IDEOGRAPH-31201> 2
+<CJK_UNIFIED_IDEOGRAPH-31202> 2
+<CJK_UNIFIED_IDEOGRAPH-31203> 2
+<CJK_UNIFIED_IDEOGRAPH-31204> 2
+<CJK_UNIFIED_IDEOGRAPH-31205> 2
+<CJK_UNIFIED_IDEOGRAPH-31206> 2
+<CJK_UNIFIED_IDEOGRAPH-31207> 2
+<CJK_UNIFIED_IDEOGRAPH-31208> 2
+<CJK_UNIFIED_IDEOGRAPH-31209> 2
+<CJK_UNIFIED_IDEOGRAPH-3120A> 2
+<CJK_UNIFIED_IDEOGRAPH-3120B> 2
+<CJK_UNIFIED_IDEOGRAPH-3120C> 2
+<CJK_UNIFIED_IDEOGRAPH-3120D> 2
+<CJK_UNIFIED_IDEOGRAPH-3120E> 2
+<CJK_UNIFIED_IDEOGRAPH-3120F> 2
+<CJK_UNIFIED_IDEOGRAPH-31210> 2
+<CJK_UNIFIED_IDEOGRAPH-31211> 2
+<CJK_UNIFIED_IDEOGRAPH-31212> 2
+<CJK_UNIFIED_IDEOGRAPH-31213> 2
+<CJK_UNIFIED_IDEOGRAPH-31214> 2
+<CJK_UNIFIED_IDEOGRAPH-31215> 2
+<CJK_UNIFIED_IDEOGRAPH-31216> 2
+<CJK_UNIFIED_IDEOGRAPH-31217> 2
+<CJK_UNIFIED_IDEOGRAPH-31218> 2
+<CJK_UNIFIED_IDEOGRAPH-31219> 2
+<CJK_UNIFIED_IDEOGRAPH-3121A> 2
+<CJK_UNIFIED_IDEOGRAPH-3121B> 2
+<CJK_UNIFIED_IDEOGRAPH-3121C> 2
+<CJK_UNIFIED_IDEOGRAPH-3121D> 2
+<CJK_UNIFIED_IDEOGRAPH-3121E> 2
+<CJK_UNIFIED_IDEOGRAPH-3121F> 2
+<CJK_UNIFIED_IDEOGRAPH-31220> 2
+<CJK_UNIFIED_IDEOGRAPH-31221> 2
+<CJK_UNIFIED_IDEOGRAPH-31222> 2
+<CJK_UNIFIED_IDEOGRAPH-31223> 2
+<CJK_UNIFIED_IDEOGRAPH-31224> 2
+<CJK_UNIFIED_IDEOGRAPH-31225> 2
+<CJK_UNIFIED_IDEOGRAPH-31226> 2
+<CJK_UNIFIED_IDEOGRAPH-31227> 2
+<CJK_UNIFIED_IDEOGRAPH-31228> 2
+<CJK_UNIFIED_IDEOGRAPH-31229> 2
+<CJK_UNIFIED_IDEOGRAPH-3122A> 2
+<CJK_UNIFIED_IDEOGRAPH-3122B> 2
+<CJK_UNIFIED_IDEOGRAPH-3122C> 2
+<CJK_UNIFIED_IDEOGRAPH-3122D> 2
+<CJK_UNIFIED_IDEOGRAPH-3122E> 2
+<CJK_UNIFIED_IDEOGRAPH-3122F> 2
+<CJK_UNIFIED_IDEOGRAPH-31230> 2
+<CJK_UNIFIED_IDEOGRAPH-31231> 2
+<CJK_UNIFIED_IDEOGRAPH-31232> 2
+<CJK_UNIFIED_IDEOGRAPH-31233> 2
+<CJK_UNIFIED_IDEOGRAPH-31234> 2
+<CJK_UNIFIED_IDEOGRAPH-31235> 2
+<CJK_UNIFIED_IDEOGRAPH-31236> 2
+<CJK_UNIFIED_IDEOGRAPH-31237> 2
+<CJK_UNIFIED_IDEOGRAPH-31238> 2
+<CJK_UNIFIED_IDEOGRAPH-31239> 2
+<CJK_UNIFIED_IDEOGRAPH-3123A> 2
+<CJK_UNIFIED_IDEOGRAPH-3123B> 2
+<CJK_UNIFIED_IDEOGRAPH-3123C> 2
+<CJK_UNIFIED_IDEOGRAPH-3123D> 2
+<CJK_UNIFIED_IDEOGRAPH-3123E> 2
+<CJK_UNIFIED_IDEOGRAPH-3123F> 2
+<CJK_UNIFIED_IDEOGRAPH-31240> 2
+<CJK_UNIFIED_IDEOGRAPH-31241> 2
+<CJK_UNIFIED_IDEOGRAPH-31242> 2
+<CJK_UNIFIED_IDEOGRAPH-31243> 2
+<CJK_UNIFIED_IDEOGRAPH-31244> 2
+<CJK_UNIFIED_IDEOGRAPH-31245> 2
+<CJK_UNIFIED_IDEOGRAPH-31246> 2
+<CJK_UNIFIED_IDEOGRAPH-31247> 2
+<CJK_UNIFIED_IDEOGRAPH-31248> 2
+<CJK_UNIFIED_IDEOGRAPH-31249> 2
+<CJK_UNIFIED_IDEOGRAPH-3124A> 2
+<CJK_UNIFIED_IDEOGRAPH-3124B> 2
+<CJK_UNIFIED_IDEOGRAPH-3124C> 2
+<CJK_UNIFIED_IDEOGRAPH-3124D> 2
+<CJK_UNIFIED_IDEOGRAPH-3124E> 2
+<CJK_UNIFIED_IDEOGRAPH-3124F> 2
+<CJK_UNIFIED_IDEOGRAPH-31250> 2
+<CJK_UNIFIED_IDEOGRAPH-31251> 2
+<CJK_UNIFIED_IDEOGRAPH-31252> 2
+<CJK_UNIFIED_IDEOGRAPH-31253> 2
+<CJK_UNIFIED_IDEOGRAPH-31254> 2
+<CJK_UNIFIED_IDEOGRAPH-31255> 2
+<CJK_UNIFIED_IDEOGRAPH-31256> 2
+<CJK_UNIFIED_IDEOGRAPH-31257> 2
+<CJK_UNIFIED_IDEOGRAPH-31258> 2
+<CJK_UNIFIED_IDEOGRAPH-31259> 2
+<CJK_UNIFIED_IDEOGRAPH-3125A> 2
+<CJK_UNIFIED_IDEOGRAPH-3125B> 2
+<CJK_UNIFIED_IDEOGRAPH-3125C> 2
+<CJK_UNIFIED_IDEOGRAPH-3125D> 2
+<CJK_UNIFIED_IDEOGRAPH-3125E> 2
+<CJK_UNIFIED_IDEOGRAPH-3125F> 2
+<CJK_UNIFIED_IDEOGRAPH-31260> 2
+<CJK_UNIFIED_IDEOGRAPH-31261> 2
+<CJK_UNIFIED_IDEOGRAPH-31262> 2
+<CJK_UNIFIED_IDEOGRAPH-31263> 2
+<CJK_UNIFIED_IDEOGRAPH-31264> 2
+<CJK_UNIFIED_IDEOGRAPH-31265> 2
+<CJK_UNIFIED_IDEOGRAPH-31266> 2
+<CJK_UNIFIED_IDEOGRAPH-31267> 2
+<CJK_UNIFIED_IDEOGRAPH-31268> 2
+<CJK_UNIFIED_IDEOGRAPH-31269> 2
+<CJK_UNIFIED_IDEOGRAPH-3126A> 2
+<CJK_UNIFIED_IDEOGRAPH-3126B> 2
+<CJK_UNIFIED_IDEOGRAPH-3126C> 2
+<CJK_UNIFIED_IDEOGRAPH-3126D> 2
+<CJK_UNIFIED_IDEOGRAPH-3126E> 2
+<CJK_UNIFIED_IDEOGRAPH-3126F> 2
+<CJK_UNIFIED_IDEOGRAPH-31270> 2
+<CJK_UNIFIED_IDEOGRAPH-31271> 2
+<CJK_UNIFIED_IDEOGRAPH-31272> 2
+<CJK_UNIFIED_IDEOGRAPH-31273> 2
+<CJK_UNIFIED_IDEOGRAPH-31274> 2
+<CJK_UNIFIED_IDEOGRAPH-31275> 2
+<CJK_UNIFIED_IDEOGRAPH-31276> 2
+<CJK_UNIFIED_IDEOGRAPH-31277> 2
+<CJK_UNIFIED_IDEOGRAPH-31278> 2
+<CJK_UNIFIED_IDEOGRAPH-31279> 2
+<CJK_UNIFIED_IDEOGRAPH-3127A> 2
+<CJK_UNIFIED_IDEOGRAPH-3127B> 2
+<CJK_UNIFIED_IDEOGRAPH-3127C> 2
+<CJK_UNIFIED_IDEOGRAPH-3127D> 2
+<CJK_UNIFIED_IDEOGRAPH-3127E> 2
+<CJK_UNIFIED_IDEOGRAPH-3127F> 2
+<CJK_UNIFIED_IDEOGRAPH-31280> 2
+<CJK_UNIFIED_IDEOGRAPH-31281> 2
+<CJK_UNIFIED_IDEOGRAPH-31282> 2
+<CJK_UNIFIED_IDEOGRAPH-31283> 2
+<CJK_UNIFIED_IDEOGRAPH-31284> 2
+<CJK_UNIFIED_IDEOGRAPH-31285> 2
+<CJK_UNIFIED_IDEOGRAPH-31286> 2
+<CJK_UNIFIED_IDEOGRAPH-31287> 2
+<CJK_UNIFIED_IDEOGRAPH-31288> 2
+<CJK_UNIFIED_IDEOGRAPH-31289> 2
+<CJK_UNIFIED_IDEOGRAPH-3128A> 2
+<CJK_UNIFIED_IDEOGRAPH-3128B> 2
+<CJK_UNIFIED_IDEOGRAPH-3128C> 2
+<CJK_UNIFIED_IDEOGRAPH-3128D> 2
+<CJK_UNIFIED_IDEOGRAPH-3128E> 2
+<CJK_UNIFIED_IDEOGRAPH-3128F> 2
+<CJK_UNIFIED_IDEOGRAPH-31290> 2
+<CJK_UNIFIED_IDEOGRAPH-31291> 2
+<CJK_UNIFIED_IDEOGRAPH-31292> 2
+<CJK_UNIFIED_IDEOGRAPH-31293> 2
+<CJK_UNIFIED_IDEOGRAPH-31294> 2
+<CJK_UNIFIED_IDEOGRAPH-31295> 2
+<CJK_UNIFIED_IDEOGRAPH-31296> 2
+<CJK_UNIFIED_IDEOGRAPH-31297> 2
+<CJK_UNIFIED_IDEOGRAPH-31298> 2
+<CJK_UNIFIED_IDEOGRAPH-31299> 2
+<CJK_UNIFIED_IDEOGRAPH-3129A> 2
+<CJK_UNIFIED_IDEOGRAPH-3129B> 2
+<CJK_UNIFIED_IDEOGRAPH-3129C> 2
+<CJK_UNIFIED_IDEOGRAPH-3129D> 2
+<CJK_UNIFIED_IDEOGRAPH-3129E> 2
+<CJK_UNIFIED_IDEOGRAPH-3129F> 2
+<CJK_UNIFIED_IDEOGRAPH-312A0> 2
+<CJK_UNIFIED_IDEOGRAPH-312A1> 2
+<CJK_UNIFIED_IDEOGRAPH-312A2> 2
+<CJK_UNIFIED_IDEOGRAPH-312A3> 2
+<CJK_UNIFIED_IDEOGRAPH-312A4> 2
+<CJK_UNIFIED_IDEOGRAPH-312A5> 2
+<CJK_UNIFIED_IDEOGRAPH-312A6> 2
+<CJK_UNIFIED_IDEOGRAPH-312A7> 2
+<CJK_UNIFIED_IDEOGRAPH-312A8> 2
+<CJK_UNIFIED_IDEOGRAPH-312A9> 2
+<CJK_UNIFIED_IDEOGRAPH-312AA> 2
+<CJK_UNIFIED_IDEOGRAPH-312AB> 2
+<CJK_UNIFIED_IDEOGRAPH-312AC> 2
+<CJK_UNIFIED_IDEOGRAPH-312AD> 2
+<CJK_UNIFIED_IDEOGRAPH-312AE> 2
+<CJK_UNIFIED_IDEOGRAPH-312AF> 2
+<CJK_UNIFIED_IDEOGRAPH-312B0> 2
+<CJK_UNIFIED_IDEOGRAPH-312B1> 2
+<CJK_UNIFIED_IDEOGRAPH-312B2> 2
+<CJK_UNIFIED_IDEOGRAPH-312B3> 2
+<CJK_UNIFIED_IDEOGRAPH-312B4> 2
+<CJK_UNIFIED_IDEOGRAPH-312B5> 2
+<CJK_UNIFIED_IDEOGRAPH-312B6> 2
+<CJK_UNIFIED_IDEOGRAPH-312B7> 2
+<CJK_UNIFIED_IDEOGRAPH-312B8> 2
+<CJK_UNIFIED_IDEOGRAPH-312B9> 2
+<CJK_UNIFIED_IDEOGRAPH-312BA> 2
+<CJK_UNIFIED_IDEOGRAPH-312BB> 2
+<CJK_UNIFIED_IDEOGRAPH-312BC> 2
+<CJK_UNIFIED_IDEOGRAPH-312BD> 2
+<CJK_UNIFIED_IDEOGRAPH-312BE> 2
+<CJK_UNIFIED_IDEOGRAPH-312BF> 2
+<CJK_UNIFIED_IDEOGRAPH-312C0> 2
+<CJK_UNIFIED_IDEOGRAPH-312C1> 2
+<CJK_UNIFIED_IDEOGRAPH-312C2> 2
+<CJK_UNIFIED_IDEOGRAPH-312C3> 2
+<CJK_UNIFIED_IDEOGRAPH-312C4> 2
+<CJK_UNIFIED_IDEOGRAPH-312C5> 2
+<CJK_UNIFIED_IDEOGRAPH-312C6> 2
+<CJK_UNIFIED_IDEOGRAPH-312C7> 2
+<CJK_UNIFIED_IDEOGRAPH-312C8> 2
+<CJK_UNIFIED_IDEOGRAPH-312C9> 2
+<CJK_UNIFIED_IDEOGRAPH-312CA> 2
+<CJK_UNIFIED_IDEOGRAPH-312CB> 2
+<CJK_UNIFIED_IDEOGRAPH-312CC> 2
+<CJK_UNIFIED_IDEOGRAPH-312CD> 2
+<CJK_UNIFIED_IDEOGRAPH-312CE> 2
+<CJK_UNIFIED_IDEOGRAPH-312CF> 2
+<CJK_UNIFIED_IDEOGRAPH-312D0> 2
+<CJK_UNIFIED_IDEOGRAPH-312D1> 2
+<CJK_UNIFIED_IDEOGRAPH-312D2> 2
+<CJK_UNIFIED_IDEOGRAPH-312D3> 2
+<CJK_UNIFIED_IDEOGRAPH-312D4> 2
+<CJK_UNIFIED_IDEOGRAPH-312D5> 2
+<CJK_UNIFIED_IDEOGRAPH-312D6> 2
+<CJK_UNIFIED_IDEOGRAPH-312D7> 2
+<CJK_UNIFIED_IDEOGRAPH-312D8> 2
+<CJK_UNIFIED_IDEOGRAPH-312D9> 2
+<CJK_UNIFIED_IDEOGRAPH-312DA> 2
+<CJK_UNIFIED_IDEOGRAPH-312DB> 2
+<CJK_UNIFIED_IDEOGRAPH-312DC> 2
+<CJK_UNIFIED_IDEOGRAPH-312DD> 2
+<CJK_UNIFIED_IDEOGRAPH-312DE> 2
+<CJK_UNIFIED_IDEOGRAPH-312DF> 2
+<CJK_UNIFIED_IDEOGRAPH-312E0> 2
+<CJK_UNIFIED_IDEOGRAPH-312E1> 2
+<CJK_UNIFIED_IDEOGRAPH-312E2> 2
+<CJK_UNIFIED_IDEOGRAPH-312E3> 2
+<CJK_UNIFIED_IDEOGRAPH-312E4> 2
+<CJK_UNIFIED_IDEOGRAPH-312E5> 2
+<CJK_UNIFIED_IDEOGRAPH-312E6> 2
+<CJK_UNIFIED_IDEOGRAPH-312E7> 2
+<CJK_UNIFIED_IDEOGRAPH-312E8> 2
+<CJK_UNIFIED_IDEOGRAPH-312E9> 2
+<CJK_UNIFIED_IDEOGRAPH-312EA> 2
+<CJK_UNIFIED_IDEOGRAPH-312EB> 2
+<CJK_UNIFIED_IDEOGRAPH-312EC> 2
+<CJK_UNIFIED_IDEOGRAPH-312ED> 2
+<CJK_UNIFIED_IDEOGRAPH-312EE> 2
+<CJK_UNIFIED_IDEOGRAPH-312EF> 2
+<CJK_UNIFIED_IDEOGRAPH-312F0> 2
+<CJK_UNIFIED_IDEOGRAPH-312F1> 2
+<CJK_UNIFIED_IDEOGRAPH-312F2> 2
+<CJK_UNIFIED_IDEOGRAPH-312F3> 2
+<CJK_UNIFIED_IDEOGRAPH-312F4> 2
+<CJK_UNIFIED_IDEOGRAPH-312F5> 2
+<CJK_UNIFIED_IDEOGRAPH-312F6> 2
+<CJK_UNIFIED_IDEOGRAPH-312F7> 2
+<CJK_UNIFIED_IDEOGRAPH-312F8> 2
+<CJK_UNIFIED_IDEOGRAPH-312F9> 2
+<CJK_UNIFIED_IDEOGRAPH-312FA> 2
+<CJK_UNIFIED_IDEOGRAPH-312FB> 2
+<CJK_UNIFIED_IDEOGRAPH-312FC> 2
+<CJK_UNIFIED_IDEOGRAPH-312FD> 2
+<CJK_UNIFIED_IDEOGRAPH-312FE> 2
+<CJK_UNIFIED_IDEOGRAPH-312FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31300> 2
+<CJK_UNIFIED_IDEOGRAPH-31301> 2
+<CJK_UNIFIED_IDEOGRAPH-31302> 2
+<CJK_UNIFIED_IDEOGRAPH-31303> 2
+<CJK_UNIFIED_IDEOGRAPH-31304> 2
+<CJK_UNIFIED_IDEOGRAPH-31305> 2
+<CJK_UNIFIED_IDEOGRAPH-31306> 2
+<CJK_UNIFIED_IDEOGRAPH-31307> 2
+<CJK_UNIFIED_IDEOGRAPH-31308> 2
+<CJK_UNIFIED_IDEOGRAPH-31309> 2
+<CJK_UNIFIED_IDEOGRAPH-3130A> 2
+<CJK_UNIFIED_IDEOGRAPH-3130B> 2
+<CJK_UNIFIED_IDEOGRAPH-3130C> 2
+<CJK_UNIFIED_IDEOGRAPH-3130D> 2
+<CJK_UNIFIED_IDEOGRAPH-3130E> 2
+<CJK_UNIFIED_IDEOGRAPH-3130F> 2
+<CJK_UNIFIED_IDEOGRAPH-31310> 2
+<CJK_UNIFIED_IDEOGRAPH-31311> 2
+<CJK_UNIFIED_IDEOGRAPH-31312> 2
+<CJK_UNIFIED_IDEOGRAPH-31313> 2
+<CJK_UNIFIED_IDEOGRAPH-31314> 2
+<CJK_UNIFIED_IDEOGRAPH-31315> 2
+<CJK_UNIFIED_IDEOGRAPH-31316> 2
+<CJK_UNIFIED_IDEOGRAPH-31317> 2
+<CJK_UNIFIED_IDEOGRAPH-31318> 2
+<CJK_UNIFIED_IDEOGRAPH-31319> 2
+<CJK_UNIFIED_IDEOGRAPH-3131A> 2
+<CJK_UNIFIED_IDEOGRAPH-3131B> 2
+<CJK_UNIFIED_IDEOGRAPH-3131C> 2
+<CJK_UNIFIED_IDEOGRAPH-3131D> 2
+<CJK_UNIFIED_IDEOGRAPH-3131E> 2
+<CJK_UNIFIED_IDEOGRAPH-3131F> 2
+<CJK_UNIFIED_IDEOGRAPH-31320> 2
+<CJK_UNIFIED_IDEOGRAPH-31321> 2
+<CJK_UNIFIED_IDEOGRAPH-31322> 2
+<CJK_UNIFIED_IDEOGRAPH-31323> 2
+<CJK_UNIFIED_IDEOGRAPH-31324> 2
+<CJK_UNIFIED_IDEOGRAPH-31325> 2
+<CJK_UNIFIED_IDEOGRAPH-31326> 2
+<CJK_UNIFIED_IDEOGRAPH-31327> 2
+<CJK_UNIFIED_IDEOGRAPH-31328> 2
+<CJK_UNIFIED_IDEOGRAPH-31329> 2
+<CJK_UNIFIED_IDEOGRAPH-3132A> 2
+<CJK_UNIFIED_IDEOGRAPH-3132B> 2
+<CJK_UNIFIED_IDEOGRAPH-3132C> 2
+<CJK_UNIFIED_IDEOGRAPH-3132D> 2
+<CJK_UNIFIED_IDEOGRAPH-3132E> 2
+<CJK_UNIFIED_IDEOGRAPH-3132F> 2
+<CJK_UNIFIED_IDEOGRAPH-31330> 2
+<CJK_UNIFIED_IDEOGRAPH-31331> 2
+<CJK_UNIFIED_IDEOGRAPH-31332> 2
+<CJK_UNIFIED_IDEOGRAPH-31333> 2
+<CJK_UNIFIED_IDEOGRAPH-31334> 2
+<CJK_UNIFIED_IDEOGRAPH-31335> 2
+<CJK_UNIFIED_IDEOGRAPH-31336> 2
+<CJK_UNIFIED_IDEOGRAPH-31337> 2
+<CJK_UNIFIED_IDEOGRAPH-31338> 2
+<CJK_UNIFIED_IDEOGRAPH-31339> 2
+<CJK_UNIFIED_IDEOGRAPH-3133A> 2
+<CJK_UNIFIED_IDEOGRAPH-3133B> 2
+<CJK_UNIFIED_IDEOGRAPH-3133C> 2
+<CJK_UNIFIED_IDEOGRAPH-3133D> 2
+<CJK_UNIFIED_IDEOGRAPH-3133E> 2
+<CJK_UNIFIED_IDEOGRAPH-3133F> 2
+<CJK_UNIFIED_IDEOGRAPH-31340> 2
+<CJK_UNIFIED_IDEOGRAPH-31341> 2
+<CJK_UNIFIED_IDEOGRAPH-31342> 2
+<CJK_UNIFIED_IDEOGRAPH-31343> 2
+<CJK_UNIFIED_IDEOGRAPH-31344> 2
+<CJK_UNIFIED_IDEOGRAPH-31345> 2
+<CJK_UNIFIED_IDEOGRAPH-31346> 2
+<CJK_UNIFIED_IDEOGRAPH-31347> 2
+<CJK_UNIFIED_IDEOGRAPH-31348> 2
+<CJK_UNIFIED_IDEOGRAPH-31349> 2
+<CJK_UNIFIED_IDEOGRAPH-3134A> 2
+<CJK_UNIFIED_IDEOGRAPH-31350> 2
+<CJK_UNIFIED_IDEOGRAPH-31351> 2
+<CJK_UNIFIED_IDEOGRAPH-31352> 2
+<CJK_UNIFIED_IDEOGRAPH-31353> 2
+<CJK_UNIFIED_IDEOGRAPH-31354> 2
+<CJK_UNIFIED_IDEOGRAPH-31355> 2
+<CJK_UNIFIED_IDEOGRAPH-31356> 2
+<CJK_UNIFIED_IDEOGRAPH-31357> 2
+<CJK_UNIFIED_IDEOGRAPH-31358> 2
+<CJK_UNIFIED_IDEOGRAPH-31359> 2
+<CJK_UNIFIED_IDEOGRAPH-3135A> 2
+<CJK_UNIFIED_IDEOGRAPH-3135B> 2
+<CJK_UNIFIED_IDEOGRAPH-3135C> 2
+<CJK_UNIFIED_IDEOGRAPH-3135D> 2
+<CJK_UNIFIED_IDEOGRAPH-3135E> 2
+<CJK_UNIFIED_IDEOGRAPH-3135F> 2
+<CJK_UNIFIED_IDEOGRAPH-31360> 2
+<CJK_UNIFIED_IDEOGRAPH-31361> 2
+<CJK_UNIFIED_IDEOGRAPH-31362> 2
+<CJK_UNIFIED_IDEOGRAPH-31363> 2
+<CJK_UNIFIED_IDEOGRAPH-31364> 2
+<CJK_UNIFIED_IDEOGRAPH-31365> 2
+<CJK_UNIFIED_IDEOGRAPH-31366> 2
+<CJK_UNIFIED_IDEOGRAPH-31367> 2
+<CJK_UNIFIED_IDEOGRAPH-31368> 2
+<CJK_UNIFIED_IDEOGRAPH-31369> 2
+<CJK_UNIFIED_IDEOGRAPH-3136A> 2
+<CJK_UNIFIED_IDEOGRAPH-3136B> 2
+<CJK_UNIFIED_IDEOGRAPH-3136C> 2
+<CJK_UNIFIED_IDEOGRAPH-3136D> 2
+<CJK_UNIFIED_IDEOGRAPH-3136E> 2
+<CJK_UNIFIED_IDEOGRAPH-3136F> 2
+<CJK_UNIFIED_IDEOGRAPH-31370> 2
+<CJK_UNIFIED_IDEOGRAPH-31371> 2
+<CJK_UNIFIED_IDEOGRAPH-31372> 2
+<CJK_UNIFIED_IDEOGRAPH-31373> 2
+<CJK_UNIFIED_IDEOGRAPH-31374> 2
+<CJK_UNIFIED_IDEOGRAPH-31375> 2
+<CJK_UNIFIED_IDEOGRAPH-31376> 2
+<CJK_UNIFIED_IDEOGRAPH-31377> 2
+<CJK_UNIFIED_IDEOGRAPH-31378> 2
+<CJK_UNIFIED_IDEOGRAPH-31379> 2
+<CJK_UNIFIED_IDEOGRAPH-3137A> 2
+<CJK_UNIFIED_IDEOGRAPH-3137B> 2
+<CJK_UNIFIED_IDEOGRAPH-3137C> 2
+<CJK_UNIFIED_IDEOGRAPH-3137D> 2
+<CJK_UNIFIED_IDEOGRAPH-3137E> 2
+<CJK_UNIFIED_IDEOGRAPH-3137F> 2
+<CJK_UNIFIED_IDEOGRAPH-31380> 2
+<CJK_UNIFIED_IDEOGRAPH-31381> 2
+<CJK_UNIFIED_IDEOGRAPH-31382> 2
+<CJK_UNIFIED_IDEOGRAPH-31383> 2
+<CJK_UNIFIED_IDEOGRAPH-31384> 2
+<CJK_UNIFIED_IDEOGRAPH-31385> 2
+<CJK_UNIFIED_IDEOGRAPH-31386> 2
+<CJK_UNIFIED_IDEOGRAPH-31387> 2
+<CJK_UNIFIED_IDEOGRAPH-31388> 2
+<CJK_UNIFIED_IDEOGRAPH-31389> 2
+<CJK_UNIFIED_IDEOGRAPH-3138A> 2
+<CJK_UNIFIED_IDEOGRAPH-3138B> 2
+<CJK_UNIFIED_IDEOGRAPH-3138C> 2
+<CJK_UNIFIED_IDEOGRAPH-3138D> 2
+<CJK_UNIFIED_IDEOGRAPH-3138E> 2
+<CJK_UNIFIED_IDEOGRAPH-3138F> 2
+<CJK_UNIFIED_IDEOGRAPH-31390> 2
+<CJK_UNIFIED_IDEOGRAPH-31391> 2
+<CJK_UNIFIED_IDEOGRAPH-31392> 2
+<CJK_UNIFIED_IDEOGRAPH-31393> 2
+<CJK_UNIFIED_IDEOGRAPH-31394> 2
+<CJK_UNIFIED_IDEOGRAPH-31395> 2
+<CJK_UNIFIED_IDEOGRAPH-31396> 2
+<CJK_UNIFIED_IDEOGRAPH-31397> 2
+<CJK_UNIFIED_IDEOGRAPH-31398> 2
+<CJK_UNIFIED_IDEOGRAPH-31399> 2
+<CJK_UNIFIED_IDEOGRAPH-3139A> 2
+<CJK_UNIFIED_IDEOGRAPH-3139B> 2
+<CJK_UNIFIED_IDEOGRAPH-3139C> 2
+<CJK_UNIFIED_IDEOGRAPH-3139D> 2
+<CJK_UNIFIED_IDEOGRAPH-3139E> 2
+<CJK_UNIFIED_IDEOGRAPH-3139F> 2
+<CJK_UNIFIED_IDEOGRAPH-313A0> 2
+<CJK_UNIFIED_IDEOGRAPH-313A1> 2
+<CJK_UNIFIED_IDEOGRAPH-313A2> 2
+<CJK_UNIFIED_IDEOGRAPH-313A3> 2
+<CJK_UNIFIED_IDEOGRAPH-313A4> 2
+<CJK_UNIFIED_IDEOGRAPH-313A5> 2
+<CJK_UNIFIED_IDEOGRAPH-313A6> 2
+<CJK_UNIFIED_IDEOGRAPH-313A7> 2
+<CJK_UNIFIED_IDEOGRAPH-313A8> 2
+<CJK_UNIFIED_IDEOGRAPH-313A9> 2
+<CJK_UNIFIED_IDEOGRAPH-313AA> 2
+<CJK_UNIFIED_IDEOGRAPH-313AB> 2
+<CJK_UNIFIED_IDEOGRAPH-313AC> 2
+<CJK_UNIFIED_IDEOGRAPH-313AD> 2
+<CJK_UNIFIED_IDEOGRAPH-313AE> 2
+<CJK_UNIFIED_IDEOGRAPH-313AF> 2
+<CJK_UNIFIED_IDEOGRAPH-313B0> 2
+<CJK_UNIFIED_IDEOGRAPH-313B1> 2
+<CJK_UNIFIED_IDEOGRAPH-313B2> 2
+<CJK_UNIFIED_IDEOGRAPH-313B3> 2
+<CJK_UNIFIED_IDEOGRAPH-313B4> 2
+<CJK_UNIFIED_IDEOGRAPH-313B5> 2
+<CJK_UNIFIED_IDEOGRAPH-313B6> 2
+<CJK_UNIFIED_IDEOGRAPH-313B7> 2
+<CJK_UNIFIED_IDEOGRAPH-313B8> 2
+<CJK_UNIFIED_IDEOGRAPH-313B9> 2
+<CJK_UNIFIED_IDEOGRAPH-313BA> 2
+<CJK_UNIFIED_IDEOGRAPH-313BB> 2
+<CJK_UNIFIED_IDEOGRAPH-313BC> 2
+<CJK_UNIFIED_IDEOGRAPH-313BD> 2
+<CJK_UNIFIED_IDEOGRAPH-313BE> 2
+<CJK_UNIFIED_IDEOGRAPH-313BF> 2
+<CJK_UNIFIED_IDEOGRAPH-313C0> 2
+<CJK_UNIFIED_IDEOGRAPH-313C1> 2
+<CJK_UNIFIED_IDEOGRAPH-313C2> 2
+<CJK_UNIFIED_IDEOGRAPH-313C3> 2
+<CJK_UNIFIED_IDEOGRAPH-313C4> 2
+<CJK_UNIFIED_IDEOGRAPH-313C5> 2
+<CJK_UNIFIED_IDEOGRAPH-313C6> 2
+<CJK_UNIFIED_IDEOGRAPH-313C7> 2
+<CJK_UNIFIED_IDEOGRAPH-313C8> 2
+<CJK_UNIFIED_IDEOGRAPH-313C9> 2
+<CJK_UNIFIED_IDEOGRAPH-313CA> 2
+<CJK_UNIFIED_IDEOGRAPH-313CB> 2
+<CJK_UNIFIED_IDEOGRAPH-313CC> 2
+<CJK_UNIFIED_IDEOGRAPH-313CD> 2
+<CJK_UNIFIED_IDEOGRAPH-313CE> 2
+<CJK_UNIFIED_IDEOGRAPH-313CF> 2
+<CJK_UNIFIED_IDEOGRAPH-313D0> 2
+<CJK_UNIFIED_IDEOGRAPH-313D1> 2
+<CJK_UNIFIED_IDEOGRAPH-313D2> 2
+<CJK_UNIFIED_IDEOGRAPH-313D3> 2
+<CJK_UNIFIED_IDEOGRAPH-313D4> 2
+<CJK_UNIFIED_IDEOGRAPH-313D5> 2
+<CJK_UNIFIED_IDEOGRAPH-313D6> 2
+<CJK_UNIFIED_IDEOGRAPH-313D7> 2
+<CJK_UNIFIED_IDEOGRAPH-313D8> 2
+<CJK_UNIFIED_IDEOGRAPH-313D9> 2
+<CJK_UNIFIED_IDEOGRAPH-313DA> 2
+<CJK_UNIFIED_IDEOGRAPH-313DB> 2
+<CJK_UNIFIED_IDEOGRAPH-313DC> 2
+<CJK_UNIFIED_IDEOGRAPH-313DD> 2
+<CJK_UNIFIED_IDEOGRAPH-313DE> 2
+<CJK_UNIFIED_IDEOGRAPH-313DF> 2
+<CJK_UNIFIED_IDEOGRAPH-313E0> 2
+<CJK_UNIFIED_IDEOGRAPH-313E1> 2
+<CJK_UNIFIED_IDEOGRAPH-313E2> 2
+<CJK_UNIFIED_IDEOGRAPH-313E3> 2
+<CJK_UNIFIED_IDEOGRAPH-313E4> 2
+<CJK_UNIFIED_IDEOGRAPH-313E5> 2
+<CJK_UNIFIED_IDEOGRAPH-313E6> 2
+<CJK_UNIFIED_IDEOGRAPH-313E7> 2
+<CJK_UNIFIED_IDEOGRAPH-313E8> 2
+<CJK_UNIFIED_IDEOGRAPH-313E9> 2
+<CJK_UNIFIED_IDEOGRAPH-313EA> 2
+<CJK_UNIFIED_IDEOGRAPH-313EB> 2
+<CJK_UNIFIED_IDEOGRAPH-313EC> 2
+<CJK_UNIFIED_IDEOGRAPH-313ED> 2
+<CJK_UNIFIED_IDEOGRAPH-313EE> 2
+<CJK_UNIFIED_IDEOGRAPH-313EF> 2
+<CJK_UNIFIED_IDEOGRAPH-313F0> 2
+<CJK_UNIFIED_IDEOGRAPH-313F1> 2
+<CJK_UNIFIED_IDEOGRAPH-313F2> 2
+<CJK_UNIFIED_IDEOGRAPH-313F3> 2
+<CJK_UNIFIED_IDEOGRAPH-313F4> 2
+<CJK_UNIFIED_IDEOGRAPH-313F5> 2
+<CJK_UNIFIED_IDEOGRAPH-313F6> 2
+<CJK_UNIFIED_IDEOGRAPH-313F7> 2
+<CJK_UNIFIED_IDEOGRAPH-313F8> 2
+<CJK_UNIFIED_IDEOGRAPH-313F9> 2
+<CJK_UNIFIED_IDEOGRAPH-313FA> 2
+<CJK_UNIFIED_IDEOGRAPH-313FB> 2
+<CJK_UNIFIED_IDEOGRAPH-313FC> 2
+<CJK_UNIFIED_IDEOGRAPH-313FD> 2
+<CJK_UNIFIED_IDEOGRAPH-313FE> 2
+<CJK_UNIFIED_IDEOGRAPH-313FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31400> 2
+<CJK_UNIFIED_IDEOGRAPH-31401> 2
+<CJK_UNIFIED_IDEOGRAPH-31402> 2
+<CJK_UNIFIED_IDEOGRAPH-31403> 2
+<CJK_UNIFIED_IDEOGRAPH-31404> 2
+<CJK_UNIFIED_IDEOGRAPH-31405> 2
+<CJK_UNIFIED_IDEOGRAPH-31406> 2
+<CJK_UNIFIED_IDEOGRAPH-31407> 2
+<CJK_UNIFIED_IDEOGRAPH-31408> 2
+<CJK_UNIFIED_IDEOGRAPH-31409> 2
+<CJK_UNIFIED_IDEOGRAPH-3140A> 2
+<CJK_UNIFIED_IDEOGRAPH-3140B> 2
+<CJK_UNIFIED_IDEOGRAPH-3140C> 2
+<CJK_UNIFIED_IDEOGRAPH-3140D> 2
+<CJK_UNIFIED_IDEOGRAPH-3140E> 2
+<CJK_UNIFIED_IDEOGRAPH-3140F> 2
+<CJK_UNIFIED_IDEOGRAPH-31410> 2
+<CJK_UNIFIED_IDEOGRAPH-31411> 2
+<CJK_UNIFIED_IDEOGRAPH-31412> 2
+<CJK_UNIFIED_IDEOGRAPH-31413> 2
+<CJK_UNIFIED_IDEOGRAPH-31414> 2
+<CJK_UNIFIED_IDEOGRAPH-31415> 2
+<CJK_UNIFIED_IDEOGRAPH-31416> 2
+<CJK_UNIFIED_IDEOGRAPH-31417> 2
+<CJK_UNIFIED_IDEOGRAPH-31418> 2
+<CJK_UNIFIED_IDEOGRAPH-31419> 2
+<CJK_UNIFIED_IDEOGRAPH-3141A> 2
+<CJK_UNIFIED_IDEOGRAPH-3141B> 2
+<CJK_UNIFIED_IDEOGRAPH-3141C> 2
+<CJK_UNIFIED_IDEOGRAPH-3141D> 2
+<CJK_UNIFIED_IDEOGRAPH-3141E> 2
+<CJK_UNIFIED_IDEOGRAPH-3141F> 2
+<CJK_UNIFIED_IDEOGRAPH-31420> 2
+<CJK_UNIFIED_IDEOGRAPH-31421> 2
+<CJK_UNIFIED_IDEOGRAPH-31422> 2
+<CJK_UNIFIED_IDEOGRAPH-31423> 2
+<CJK_UNIFIED_IDEOGRAPH-31424> 2
+<CJK_UNIFIED_IDEOGRAPH-31425> 2
+<CJK_UNIFIED_IDEOGRAPH-31426> 2
+<CJK_UNIFIED_IDEOGRAPH-31427> 2
+<CJK_UNIFIED_IDEOGRAPH-31428> 2
+<CJK_UNIFIED_IDEOGRAPH-31429> 2
+<CJK_UNIFIED_IDEOGRAPH-3142A> 2
+<CJK_UNIFIED_IDEOGRAPH-3142B> 2
+<CJK_UNIFIED_IDEOGRAPH-3142C> 2
+<CJK_UNIFIED_IDEOGRAPH-3142D> 2
+<CJK_UNIFIED_IDEOGRAPH-3142E> 2
+<CJK_UNIFIED_IDEOGRAPH-3142F> 2
+<CJK_UNIFIED_IDEOGRAPH-31430> 2
+<CJK_UNIFIED_IDEOGRAPH-31431> 2
+<CJK_UNIFIED_IDEOGRAPH-31432> 2
+<CJK_UNIFIED_IDEOGRAPH-31433> 2
+<CJK_UNIFIED_IDEOGRAPH-31434> 2
+<CJK_UNIFIED_IDEOGRAPH-31435> 2
+<CJK_UNIFIED_IDEOGRAPH-31436> 2
+<CJK_UNIFIED_IDEOGRAPH-31437> 2
+<CJK_UNIFIED_IDEOGRAPH-31438> 2
+<CJK_UNIFIED_IDEOGRAPH-31439> 2
+<CJK_UNIFIED_IDEOGRAPH-3143A> 2
+<CJK_UNIFIED_IDEOGRAPH-3143B> 2
+<CJK_UNIFIED_IDEOGRAPH-3143C> 2
+<CJK_UNIFIED_IDEOGRAPH-3143D> 2
+<CJK_UNIFIED_IDEOGRAPH-3143E> 2
+<CJK_UNIFIED_IDEOGRAPH-3143F> 2
+<CJK_UNIFIED_IDEOGRAPH-31440> 2
+<CJK_UNIFIED_IDEOGRAPH-31441> 2
+<CJK_UNIFIED_IDEOGRAPH-31442> 2
+<CJK_UNIFIED_IDEOGRAPH-31443> 2
+<CJK_UNIFIED_IDEOGRAPH-31444> 2
+<CJK_UNIFIED_IDEOGRAPH-31445> 2
+<CJK_UNIFIED_IDEOGRAPH-31446> 2
+<CJK_UNIFIED_IDEOGRAPH-31447> 2
+<CJK_UNIFIED_IDEOGRAPH-31448> 2
+<CJK_UNIFIED_IDEOGRAPH-31449> 2
+<CJK_UNIFIED_IDEOGRAPH-3144A> 2
+<CJK_UNIFIED_IDEOGRAPH-3144B> 2
+<CJK_UNIFIED_IDEOGRAPH-3144C> 2
+<CJK_UNIFIED_IDEOGRAPH-3144D> 2
+<CJK_UNIFIED_IDEOGRAPH-3144E> 2
+<CJK_UNIFIED_IDEOGRAPH-3144F> 2
+<CJK_UNIFIED_IDEOGRAPH-31450> 2
+<CJK_UNIFIED_IDEOGRAPH-31451> 2
+<CJK_UNIFIED_IDEOGRAPH-31452> 2
+<CJK_UNIFIED_IDEOGRAPH-31453> 2
+<CJK_UNIFIED_IDEOGRAPH-31454> 2
+<CJK_UNIFIED_IDEOGRAPH-31455> 2
+<CJK_UNIFIED_IDEOGRAPH-31456> 2
+<CJK_UNIFIED_IDEOGRAPH-31457> 2
+<CJK_UNIFIED_IDEOGRAPH-31458> 2
+<CJK_UNIFIED_IDEOGRAPH-31459> 2
+<CJK_UNIFIED_IDEOGRAPH-3145A> 2
+<CJK_UNIFIED_IDEOGRAPH-3145B> 2
+<CJK_UNIFIED_IDEOGRAPH-3145C> 2
+<CJK_UNIFIED_IDEOGRAPH-3145D> 2
+<CJK_UNIFIED_IDEOGRAPH-3145E> 2
+<CJK_UNIFIED_IDEOGRAPH-3145F> 2
+<CJK_UNIFIED_IDEOGRAPH-31460> 2
+<CJK_UNIFIED_IDEOGRAPH-31461> 2
+<CJK_UNIFIED_IDEOGRAPH-31462> 2
+<CJK_UNIFIED_IDEOGRAPH-31463> 2
+<CJK_UNIFIED_IDEOGRAPH-31464> 2
+<CJK_UNIFIED_IDEOGRAPH-31465> 2
+<CJK_UNIFIED_IDEOGRAPH-31466> 2
+<CJK_UNIFIED_IDEOGRAPH-31467> 2
+<CJK_UNIFIED_IDEOGRAPH-31468> 2
+<CJK_UNIFIED_IDEOGRAPH-31469> 2
+<CJK_UNIFIED_IDEOGRAPH-3146A> 2
+<CJK_UNIFIED_IDEOGRAPH-3146B> 2
+<CJK_UNIFIED_IDEOGRAPH-3146C> 2
+<CJK_UNIFIED_IDEOGRAPH-3146D> 2
+<CJK_UNIFIED_IDEOGRAPH-3146E> 2
+<CJK_UNIFIED_IDEOGRAPH-3146F> 2
+<CJK_UNIFIED_IDEOGRAPH-31470> 2
+<CJK_UNIFIED_IDEOGRAPH-31471> 2
+<CJK_UNIFIED_IDEOGRAPH-31472> 2
+<CJK_UNIFIED_IDEOGRAPH-31473> 2
+<CJK_UNIFIED_IDEOGRAPH-31474> 2
+<CJK_UNIFIED_IDEOGRAPH-31475> 2
+<CJK_UNIFIED_IDEOGRAPH-31476> 2
+<CJK_UNIFIED_IDEOGRAPH-31477> 2
+<CJK_UNIFIED_IDEOGRAPH-31478> 2
+<CJK_UNIFIED_IDEOGRAPH-31479> 2
+<CJK_UNIFIED_IDEOGRAPH-3147A> 2
+<CJK_UNIFIED_IDEOGRAPH-3147B> 2
+<CJK_UNIFIED_IDEOGRAPH-3147C> 2
+<CJK_UNIFIED_IDEOGRAPH-3147D> 2
+<CJK_UNIFIED_IDEOGRAPH-3147E> 2
+<CJK_UNIFIED_IDEOGRAPH-3147F> 2
+<CJK_UNIFIED_IDEOGRAPH-31480> 2
+<CJK_UNIFIED_IDEOGRAPH-31481> 2
+<CJK_UNIFIED_IDEOGRAPH-31482> 2
+<CJK_UNIFIED_IDEOGRAPH-31483> 2
+<CJK_UNIFIED_IDEOGRAPH-31484> 2
+<CJK_UNIFIED_IDEOGRAPH-31485> 2
+<CJK_UNIFIED_IDEOGRAPH-31486> 2
+<CJK_UNIFIED_IDEOGRAPH-31487> 2
+<CJK_UNIFIED_IDEOGRAPH-31488> 2
+<CJK_UNIFIED_IDEOGRAPH-31489> 2
+<CJK_UNIFIED_IDEOGRAPH-3148A> 2
+<CJK_UNIFIED_IDEOGRAPH-3148B> 2
+<CJK_UNIFIED_IDEOGRAPH-3148C> 2
+<CJK_UNIFIED_IDEOGRAPH-3148D> 2
+<CJK_UNIFIED_IDEOGRAPH-3148E> 2
+<CJK_UNIFIED_IDEOGRAPH-3148F> 2
+<CJK_UNIFIED_IDEOGRAPH-31490> 2
+<CJK_UNIFIED_IDEOGRAPH-31491> 2
+<CJK_UNIFIED_IDEOGRAPH-31492> 2
+<CJK_UNIFIED_IDEOGRAPH-31493> 2
+<CJK_UNIFIED_IDEOGRAPH-31494> 2
+<CJK_UNIFIED_IDEOGRAPH-31495> 2
+<CJK_UNIFIED_IDEOGRAPH-31496> 2
+<CJK_UNIFIED_IDEOGRAPH-31497> 2
+<CJK_UNIFIED_IDEOGRAPH-31498> 2
+<CJK_UNIFIED_IDEOGRAPH-31499> 2
+<CJK_UNIFIED_IDEOGRAPH-3149A> 2
+<CJK_UNIFIED_IDEOGRAPH-3149B> 2
+<CJK_UNIFIED_IDEOGRAPH-3149C> 2
+<CJK_UNIFIED_IDEOGRAPH-3149D> 2
+<CJK_UNIFIED_IDEOGRAPH-3149E> 2
+<CJK_UNIFIED_IDEOGRAPH-3149F> 2
+<CJK_UNIFIED_IDEOGRAPH-314A0> 2
+<CJK_UNIFIED_IDEOGRAPH-314A1> 2
+<CJK_UNIFIED_IDEOGRAPH-314A2> 2
+<CJK_UNIFIED_IDEOGRAPH-314A3> 2
+<CJK_UNIFIED_IDEOGRAPH-314A4> 2
+<CJK_UNIFIED_IDEOGRAPH-314A5> 2
+<CJK_UNIFIED_IDEOGRAPH-314A6> 2
+<CJK_UNIFIED_IDEOGRAPH-314A7> 2
+<CJK_UNIFIED_IDEOGRAPH-314A8> 2
+<CJK_UNIFIED_IDEOGRAPH-314A9> 2
+<CJK_UNIFIED_IDEOGRAPH-314AA> 2
+<CJK_UNIFIED_IDEOGRAPH-314AB> 2
+<CJK_UNIFIED_IDEOGRAPH-314AC> 2
+<CJK_UNIFIED_IDEOGRAPH-314AD> 2
+<CJK_UNIFIED_IDEOGRAPH-314AE> 2
+<CJK_UNIFIED_IDEOGRAPH-314AF> 2
+<CJK_UNIFIED_IDEOGRAPH-314B0> 2
+<CJK_UNIFIED_IDEOGRAPH-314B1> 2
+<CJK_UNIFIED_IDEOGRAPH-314B2> 2
+<CJK_UNIFIED_IDEOGRAPH-314B3> 2
+<CJK_UNIFIED_IDEOGRAPH-314B4> 2
+<CJK_UNIFIED_IDEOGRAPH-314B5> 2
+<CJK_UNIFIED_IDEOGRAPH-314B6> 2
+<CJK_UNIFIED_IDEOGRAPH-314B7> 2
+<CJK_UNIFIED_IDEOGRAPH-314B8> 2
+<CJK_UNIFIED_IDEOGRAPH-314B9> 2
+<CJK_UNIFIED_IDEOGRAPH-314BA> 2
+<CJK_UNIFIED_IDEOGRAPH-314BB> 2
+<CJK_UNIFIED_IDEOGRAPH-314BC> 2
+<CJK_UNIFIED_IDEOGRAPH-314BD> 2
+<CJK_UNIFIED_IDEOGRAPH-314BE> 2
+<CJK_UNIFIED_IDEOGRAPH-314BF> 2
+<CJK_UNIFIED_IDEOGRAPH-314C0> 2
+<CJK_UNIFIED_IDEOGRAPH-314C1> 2
+<CJK_UNIFIED_IDEOGRAPH-314C2> 2
+<CJK_UNIFIED_IDEOGRAPH-314C3> 2
+<CJK_UNIFIED_IDEOGRAPH-314C4> 2
+<CJK_UNIFIED_IDEOGRAPH-314C5> 2
+<CJK_UNIFIED_IDEOGRAPH-314C6> 2
+<CJK_UNIFIED_IDEOGRAPH-314C7> 2
+<CJK_UNIFIED_IDEOGRAPH-314C8> 2
+<CJK_UNIFIED_IDEOGRAPH-314C9> 2
+<CJK_UNIFIED_IDEOGRAPH-314CA> 2
+<CJK_UNIFIED_IDEOGRAPH-314CB> 2
+<CJK_UNIFIED_IDEOGRAPH-314CC> 2
+<CJK_UNIFIED_IDEOGRAPH-314CD> 2
+<CJK_UNIFIED_IDEOGRAPH-314CE> 2
+<CJK_UNIFIED_IDEOGRAPH-314CF> 2
+<CJK_UNIFIED_IDEOGRAPH-314D0> 2
+<CJK_UNIFIED_IDEOGRAPH-314D1> 2
+<CJK_UNIFIED_IDEOGRAPH-314D2> 2
+<CJK_UNIFIED_IDEOGRAPH-314D3> 2
+<CJK_UNIFIED_IDEOGRAPH-314D4> 2
+<CJK_UNIFIED_IDEOGRAPH-314D5> 2
+<CJK_UNIFIED_IDEOGRAPH-314D6> 2
+<CJK_UNIFIED_IDEOGRAPH-314D7> 2
+<CJK_UNIFIED_IDEOGRAPH-314D8> 2
+<CJK_UNIFIED_IDEOGRAPH-314D9> 2
+<CJK_UNIFIED_IDEOGRAPH-314DA> 2
+<CJK_UNIFIED_IDEOGRAPH-314DB> 2
+<CJK_UNIFIED_IDEOGRAPH-314DC> 2
+<CJK_UNIFIED_IDEOGRAPH-314DD> 2
+<CJK_UNIFIED_IDEOGRAPH-314DE> 2
+<CJK_UNIFIED_IDEOGRAPH-314DF> 2
+<CJK_UNIFIED_IDEOGRAPH-314E0> 2
+<CJK_UNIFIED_IDEOGRAPH-314E1> 2
+<CJK_UNIFIED_IDEOGRAPH-314E2> 2
+<CJK_UNIFIED_IDEOGRAPH-314E3> 2
+<CJK_UNIFIED_IDEOGRAPH-314E4> 2
+<CJK_UNIFIED_IDEOGRAPH-314E5> 2
+<CJK_UNIFIED_IDEOGRAPH-314E6> 2
+<CJK_UNIFIED_IDEOGRAPH-314E7> 2
+<CJK_UNIFIED_IDEOGRAPH-314E8> 2
+<CJK_UNIFIED_IDEOGRAPH-314E9> 2
+<CJK_UNIFIED_IDEOGRAPH-314EA> 2
+<CJK_UNIFIED_IDEOGRAPH-314EB> 2
+<CJK_UNIFIED_IDEOGRAPH-314EC> 2
+<CJK_UNIFIED_IDEOGRAPH-314ED> 2
+<CJK_UNIFIED_IDEOGRAPH-314EE> 2
+<CJK_UNIFIED_IDEOGRAPH-314EF> 2
+<CJK_UNIFIED_IDEOGRAPH-314F0> 2
+<CJK_UNIFIED_IDEOGRAPH-314F1> 2
+<CJK_UNIFIED_IDEOGRAPH-314F2> 2
+<CJK_UNIFIED_IDEOGRAPH-314F3> 2
+<CJK_UNIFIED_IDEOGRAPH-314F4> 2
+<CJK_UNIFIED_IDEOGRAPH-314F5> 2
+<CJK_UNIFIED_IDEOGRAPH-314F6> 2
+<CJK_UNIFIED_IDEOGRAPH-314F7> 2
+<CJK_UNIFIED_IDEOGRAPH-314F8> 2
+<CJK_UNIFIED_IDEOGRAPH-314F9> 2
+<CJK_UNIFIED_IDEOGRAPH-314FA> 2
+<CJK_UNIFIED_IDEOGRAPH-314FB> 2
+<CJK_UNIFIED_IDEOGRAPH-314FC> 2
+<CJK_UNIFIED_IDEOGRAPH-314FD> 2
+<CJK_UNIFIED_IDEOGRAPH-314FE> 2
+<CJK_UNIFIED_IDEOGRAPH-314FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31500> 2
+<CJK_UNIFIED_IDEOGRAPH-31501> 2
+<CJK_UNIFIED_IDEOGRAPH-31502> 2
+<CJK_UNIFIED_IDEOGRAPH-31503> 2
+<CJK_UNIFIED_IDEOGRAPH-31504> 2
+<CJK_UNIFIED_IDEOGRAPH-31505> 2
+<CJK_UNIFIED_IDEOGRAPH-31506> 2
+<CJK_UNIFIED_IDEOGRAPH-31507> 2
+<CJK_UNIFIED_IDEOGRAPH-31508> 2
+<CJK_UNIFIED_IDEOGRAPH-31509> 2
+<CJK_UNIFIED_IDEOGRAPH-3150A> 2
+<CJK_UNIFIED_IDEOGRAPH-3150B> 2
+<CJK_UNIFIED_IDEOGRAPH-3150C> 2
+<CJK_UNIFIED_IDEOGRAPH-3150D> 2
+<CJK_UNIFIED_IDEOGRAPH-3150E> 2
+<CJK_UNIFIED_IDEOGRAPH-3150F> 2
+<CJK_UNIFIED_IDEOGRAPH-31510> 2
+<CJK_UNIFIED_IDEOGRAPH-31511> 2
+<CJK_UNIFIED_IDEOGRAPH-31512> 2
+<CJK_UNIFIED_IDEOGRAPH-31513> 2
+<CJK_UNIFIED_IDEOGRAPH-31514> 2
+<CJK_UNIFIED_IDEOGRAPH-31515> 2
+<CJK_UNIFIED_IDEOGRAPH-31516> 2
+<CJK_UNIFIED_IDEOGRAPH-31517> 2
+<CJK_UNIFIED_IDEOGRAPH-31518> 2
+<CJK_UNIFIED_IDEOGRAPH-31519> 2
+<CJK_UNIFIED_IDEOGRAPH-3151A> 2
+<CJK_UNIFIED_IDEOGRAPH-3151B> 2
+<CJK_UNIFIED_IDEOGRAPH-3151C> 2
+<CJK_UNIFIED_IDEOGRAPH-3151D> 2
+<CJK_UNIFIED_IDEOGRAPH-3151E> 2
+<CJK_UNIFIED_IDEOGRAPH-3151F> 2
+<CJK_UNIFIED_IDEOGRAPH-31520> 2
+<CJK_UNIFIED_IDEOGRAPH-31521> 2
+<CJK_UNIFIED_IDEOGRAPH-31522> 2
+<CJK_UNIFIED_IDEOGRAPH-31523> 2
+<CJK_UNIFIED_IDEOGRAPH-31524> 2
+<CJK_UNIFIED_IDEOGRAPH-31525> 2
+<CJK_UNIFIED_IDEOGRAPH-31526> 2
+<CJK_UNIFIED_IDEOGRAPH-31527> 2
+<CJK_UNIFIED_IDEOGRAPH-31528> 2
+<CJK_UNIFIED_IDEOGRAPH-31529> 2
+<CJK_UNIFIED_IDEOGRAPH-3152A> 2
+<CJK_UNIFIED_IDEOGRAPH-3152B> 2
+<CJK_UNIFIED_IDEOGRAPH-3152C> 2
+<CJK_UNIFIED_IDEOGRAPH-3152D> 2
+<CJK_UNIFIED_IDEOGRAPH-3152E> 2
+<CJK_UNIFIED_IDEOGRAPH-3152F> 2
+<CJK_UNIFIED_IDEOGRAPH-31530> 2
+<CJK_UNIFIED_IDEOGRAPH-31531> 2
+<CJK_UNIFIED_IDEOGRAPH-31532> 2
+<CJK_UNIFIED_IDEOGRAPH-31533> 2
+<CJK_UNIFIED_IDEOGRAPH-31534> 2
+<CJK_UNIFIED_IDEOGRAPH-31535> 2
+<CJK_UNIFIED_IDEOGRAPH-31536> 2
+<CJK_UNIFIED_IDEOGRAPH-31537> 2
+<CJK_UNIFIED_IDEOGRAPH-31538> 2
+<CJK_UNIFIED_IDEOGRAPH-31539> 2
+<CJK_UNIFIED_IDEOGRAPH-3153A> 2
+<CJK_UNIFIED_IDEOGRAPH-3153B> 2
+<CJK_UNIFIED_IDEOGRAPH-3153C> 2
+<CJK_UNIFIED_IDEOGRAPH-3153D> 2
+<CJK_UNIFIED_IDEOGRAPH-3153E> 2
+<CJK_UNIFIED_IDEOGRAPH-3153F> 2
+<CJK_UNIFIED_IDEOGRAPH-31540> 2
+<CJK_UNIFIED_IDEOGRAPH-31541> 2
+<CJK_UNIFIED_IDEOGRAPH-31542> 2
+<CJK_UNIFIED_IDEOGRAPH-31543> 2
+<CJK_UNIFIED_IDEOGRAPH-31544> 2
+<CJK_UNIFIED_IDEOGRAPH-31545> 2
+<CJK_UNIFIED_IDEOGRAPH-31546> 2
+<CJK_UNIFIED_IDEOGRAPH-31547> 2
+<CJK_UNIFIED_IDEOGRAPH-31548> 2
+<CJK_UNIFIED_IDEOGRAPH-31549> 2
+<CJK_UNIFIED_IDEOGRAPH-3154A> 2
+<CJK_UNIFIED_IDEOGRAPH-3154B> 2
+<CJK_UNIFIED_IDEOGRAPH-3154C> 2
+<CJK_UNIFIED_IDEOGRAPH-3154D> 2
+<CJK_UNIFIED_IDEOGRAPH-3154E> 2
+<CJK_UNIFIED_IDEOGRAPH-3154F> 2
+<CJK_UNIFIED_IDEOGRAPH-31550> 2
+<CJK_UNIFIED_IDEOGRAPH-31551> 2
+<CJK_UNIFIED_IDEOGRAPH-31552> 2
+<CJK_UNIFIED_IDEOGRAPH-31553> 2
+<CJK_UNIFIED_IDEOGRAPH-31554> 2
+<CJK_UNIFIED_IDEOGRAPH-31555> 2
+<CJK_UNIFIED_IDEOGRAPH-31556> 2
+<CJK_UNIFIED_IDEOGRAPH-31557> 2
+<CJK_UNIFIED_IDEOGRAPH-31558> 2
+<CJK_UNIFIED_IDEOGRAPH-31559> 2
+<CJK_UNIFIED_IDEOGRAPH-3155A> 2
+<CJK_UNIFIED_IDEOGRAPH-3155B> 2
+<CJK_UNIFIED_IDEOGRAPH-3155C> 2
+<CJK_UNIFIED_IDEOGRAPH-3155D> 2
+<CJK_UNIFIED_IDEOGRAPH-3155E> 2
+<CJK_UNIFIED_IDEOGRAPH-3155F> 2
+<CJK_UNIFIED_IDEOGRAPH-31560> 2
+<CJK_UNIFIED_IDEOGRAPH-31561> 2
+<CJK_UNIFIED_IDEOGRAPH-31562> 2
+<CJK_UNIFIED_IDEOGRAPH-31563> 2
+<CJK_UNIFIED_IDEOGRAPH-31564> 2
+<CJK_UNIFIED_IDEOGRAPH-31565> 2
+<CJK_UNIFIED_IDEOGRAPH-31566> 2
+<CJK_UNIFIED_IDEOGRAPH-31567> 2
+<CJK_UNIFIED_IDEOGRAPH-31568> 2
+<CJK_UNIFIED_IDEOGRAPH-31569> 2
+<CJK_UNIFIED_IDEOGRAPH-3156A> 2
+<CJK_UNIFIED_IDEOGRAPH-3156B> 2
+<CJK_UNIFIED_IDEOGRAPH-3156C> 2
+<CJK_UNIFIED_IDEOGRAPH-3156D> 2
+<CJK_UNIFIED_IDEOGRAPH-3156E> 2
+<CJK_UNIFIED_IDEOGRAPH-3156F> 2
+<CJK_UNIFIED_IDEOGRAPH-31570> 2
+<CJK_UNIFIED_IDEOGRAPH-31571> 2
+<CJK_UNIFIED_IDEOGRAPH-31572> 2
+<CJK_UNIFIED_IDEOGRAPH-31573> 2
+<CJK_UNIFIED_IDEOGRAPH-31574> 2
+<CJK_UNIFIED_IDEOGRAPH-31575> 2
+<CJK_UNIFIED_IDEOGRAPH-31576> 2
+<CJK_UNIFIED_IDEOGRAPH-31577> 2
+<CJK_UNIFIED_IDEOGRAPH-31578> 2
+<CJK_UNIFIED_IDEOGRAPH-31579> 2
+<CJK_UNIFIED_IDEOGRAPH-3157A> 2
+<CJK_UNIFIED_IDEOGRAPH-3157B> 2
+<CJK_UNIFIED_IDEOGRAPH-3157C> 2
+<CJK_UNIFIED_IDEOGRAPH-3157D> 2
+<CJK_UNIFIED_IDEOGRAPH-3157E> 2
+<CJK_UNIFIED_IDEOGRAPH-3157F> 2
+<CJK_UNIFIED_IDEOGRAPH-31580> 2
+<CJK_UNIFIED_IDEOGRAPH-31581> 2
+<CJK_UNIFIED_IDEOGRAPH-31582> 2
+<CJK_UNIFIED_IDEOGRAPH-31583> 2
+<CJK_UNIFIED_IDEOGRAPH-31584> 2
+<CJK_UNIFIED_IDEOGRAPH-31585> 2
+<CJK_UNIFIED_IDEOGRAPH-31586> 2
+<CJK_UNIFIED_IDEOGRAPH-31587> 2
+<CJK_UNIFIED_IDEOGRAPH-31588> 2
+<CJK_UNIFIED_IDEOGRAPH-31589> 2
+<CJK_UNIFIED_IDEOGRAPH-3158A> 2
+<CJK_UNIFIED_IDEOGRAPH-3158B> 2
+<CJK_UNIFIED_IDEOGRAPH-3158C> 2
+<CJK_UNIFIED_IDEOGRAPH-3158D> 2
+<CJK_UNIFIED_IDEOGRAPH-3158E> 2
+<CJK_UNIFIED_IDEOGRAPH-3158F> 2
+<CJK_UNIFIED_IDEOGRAPH-31590> 2
+<CJK_UNIFIED_IDEOGRAPH-31591> 2
+<CJK_UNIFIED_IDEOGRAPH-31592> 2
+<CJK_UNIFIED_IDEOGRAPH-31593> 2
+<CJK_UNIFIED_IDEOGRAPH-31594> 2
+<CJK_UNIFIED_IDEOGRAPH-31595> 2
+<CJK_UNIFIED_IDEOGRAPH-31596> 2
+<CJK_UNIFIED_IDEOGRAPH-31597> 2
+<CJK_UNIFIED_IDEOGRAPH-31598> 2
+<CJK_UNIFIED_IDEOGRAPH-31599> 2
+<CJK_UNIFIED_IDEOGRAPH-3159A> 2
+<CJK_UNIFIED_IDEOGRAPH-3159B> 2
+<CJK_UNIFIED_IDEOGRAPH-3159C> 2
+<CJK_UNIFIED_IDEOGRAPH-3159D> 2
+<CJK_UNIFIED_IDEOGRAPH-3159E> 2
+<CJK_UNIFIED_IDEOGRAPH-3159F> 2
+<CJK_UNIFIED_IDEOGRAPH-315A0> 2
+<CJK_UNIFIED_IDEOGRAPH-315A1> 2
+<CJK_UNIFIED_IDEOGRAPH-315A2> 2
+<CJK_UNIFIED_IDEOGRAPH-315A3> 2
+<CJK_UNIFIED_IDEOGRAPH-315A4> 2
+<CJK_UNIFIED_IDEOGRAPH-315A5> 2
+<CJK_UNIFIED_IDEOGRAPH-315A6> 2
+<CJK_UNIFIED_IDEOGRAPH-315A7> 2
+<CJK_UNIFIED_IDEOGRAPH-315A8> 2
+<CJK_UNIFIED_IDEOGRAPH-315A9> 2
+<CJK_UNIFIED_IDEOGRAPH-315AA> 2
+<CJK_UNIFIED_IDEOGRAPH-315AB> 2
+<CJK_UNIFIED_IDEOGRAPH-315AC> 2
+<CJK_UNIFIED_IDEOGRAPH-315AD> 2
+<CJK_UNIFIED_IDEOGRAPH-315AE> 2
+<CJK_UNIFIED_IDEOGRAPH-315AF> 2
+<CJK_UNIFIED_IDEOGRAPH-315B0> 2
+<CJK_UNIFIED_IDEOGRAPH-315B1> 2
+<CJK_UNIFIED_IDEOGRAPH-315B2> 2
+<CJK_UNIFIED_IDEOGRAPH-315B3> 2
+<CJK_UNIFIED_IDEOGRAPH-315B4> 2
+<CJK_UNIFIED_IDEOGRAPH-315B5> 2
+<CJK_UNIFIED_IDEOGRAPH-315B6> 2
+<CJK_UNIFIED_IDEOGRAPH-315B7> 2
+<CJK_UNIFIED_IDEOGRAPH-315B8> 2
+<CJK_UNIFIED_IDEOGRAPH-315B9> 2
+<CJK_UNIFIED_IDEOGRAPH-315BA> 2
+<CJK_UNIFIED_IDEOGRAPH-315BB> 2
+<CJK_UNIFIED_IDEOGRAPH-315BC> 2
+<CJK_UNIFIED_IDEOGRAPH-315BD> 2
+<CJK_UNIFIED_IDEOGRAPH-315BE> 2
+<CJK_UNIFIED_IDEOGRAPH-315BF> 2
+<CJK_UNIFIED_IDEOGRAPH-315C0> 2
+<CJK_UNIFIED_IDEOGRAPH-315C1> 2
+<CJK_UNIFIED_IDEOGRAPH-315C2> 2
+<CJK_UNIFIED_IDEOGRAPH-315C3> 2
+<CJK_UNIFIED_IDEOGRAPH-315C4> 2
+<CJK_UNIFIED_IDEOGRAPH-315C5> 2
+<CJK_UNIFIED_IDEOGRAPH-315C6> 2
+<CJK_UNIFIED_IDEOGRAPH-315C7> 2
+<CJK_UNIFIED_IDEOGRAPH-315C8> 2
+<CJK_UNIFIED_IDEOGRAPH-315C9> 2
+<CJK_UNIFIED_IDEOGRAPH-315CA> 2
+<CJK_UNIFIED_IDEOGRAPH-315CB> 2
+<CJK_UNIFIED_IDEOGRAPH-315CC> 2
+<CJK_UNIFIED_IDEOGRAPH-315CD> 2
+<CJK_UNIFIED_IDEOGRAPH-315CE> 2
+<CJK_UNIFIED_IDEOGRAPH-315CF> 2
+<CJK_UNIFIED_IDEOGRAPH-315D0> 2
+<CJK_UNIFIED_IDEOGRAPH-315D1> 2
+<CJK_UNIFIED_IDEOGRAPH-315D2> 2
+<CJK_UNIFIED_IDEOGRAPH-315D3> 2
+<CJK_UNIFIED_IDEOGRAPH-315D4> 2
+<CJK_UNIFIED_IDEOGRAPH-315D5> 2
+<CJK_UNIFIED_IDEOGRAPH-315D6> 2
+<CJK_UNIFIED_IDEOGRAPH-315D7> 2
+<CJK_UNIFIED_IDEOGRAPH-315D8> 2
+<CJK_UNIFIED_IDEOGRAPH-315D9> 2
+<CJK_UNIFIED_IDEOGRAPH-315DA> 2
+<CJK_UNIFIED_IDEOGRAPH-315DB> 2
+<CJK_UNIFIED_IDEOGRAPH-315DC> 2
+<CJK_UNIFIED_IDEOGRAPH-315DD> 2
+<CJK_UNIFIED_IDEOGRAPH-315DE> 2
+<CJK_UNIFIED_IDEOGRAPH-315DF> 2
+<CJK_UNIFIED_IDEOGRAPH-315E0> 2
+<CJK_UNIFIED_IDEOGRAPH-315E1> 2
+<CJK_UNIFIED_IDEOGRAPH-315E2> 2
+<CJK_UNIFIED_IDEOGRAPH-315E3> 2
+<CJK_UNIFIED_IDEOGRAPH-315E4> 2
+<CJK_UNIFIED_IDEOGRAPH-315E5> 2
+<CJK_UNIFIED_IDEOGRAPH-315E6> 2
+<CJK_UNIFIED_IDEOGRAPH-315E7> 2
+<CJK_UNIFIED_IDEOGRAPH-315E8> 2
+<CJK_UNIFIED_IDEOGRAPH-315E9> 2
+<CJK_UNIFIED_IDEOGRAPH-315EA> 2
+<CJK_UNIFIED_IDEOGRAPH-315EB> 2
+<CJK_UNIFIED_IDEOGRAPH-315EC> 2
+<CJK_UNIFIED_IDEOGRAPH-315ED> 2
+<CJK_UNIFIED_IDEOGRAPH-315EE> 2
+<CJK_UNIFIED_IDEOGRAPH-315EF> 2
+<CJK_UNIFIED_IDEOGRAPH-315F0> 2
+<CJK_UNIFIED_IDEOGRAPH-315F1> 2
+<CJK_UNIFIED_IDEOGRAPH-315F2> 2
+<CJK_UNIFIED_IDEOGRAPH-315F3> 2
+<CJK_UNIFIED_IDEOGRAPH-315F4> 2
+<CJK_UNIFIED_IDEOGRAPH-315F5> 2
+<CJK_UNIFIED_IDEOGRAPH-315F6> 2
+<CJK_UNIFIED_IDEOGRAPH-315F7> 2
+<CJK_UNIFIED_IDEOGRAPH-315F8> 2
+<CJK_UNIFIED_IDEOGRAPH-315F9> 2
+<CJK_UNIFIED_IDEOGRAPH-315FA> 2
+<CJK_UNIFIED_IDEOGRAPH-315FB> 2
+<CJK_UNIFIED_IDEOGRAPH-315FC> 2
+<CJK_UNIFIED_IDEOGRAPH-315FD> 2
+<CJK_UNIFIED_IDEOGRAPH-315FE> 2
+<CJK_UNIFIED_IDEOGRAPH-315FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31600> 2
+<CJK_UNIFIED_IDEOGRAPH-31601> 2
+<CJK_UNIFIED_IDEOGRAPH-31602> 2
+<CJK_UNIFIED_IDEOGRAPH-31603> 2
+<CJK_UNIFIED_IDEOGRAPH-31604> 2
+<CJK_UNIFIED_IDEOGRAPH-31605> 2
+<CJK_UNIFIED_IDEOGRAPH-31606> 2
+<CJK_UNIFIED_IDEOGRAPH-31607> 2
+<CJK_UNIFIED_IDEOGRAPH-31608> 2
+<CJK_UNIFIED_IDEOGRAPH-31609> 2
+<CJK_UNIFIED_IDEOGRAPH-3160A> 2
+<CJK_UNIFIED_IDEOGRAPH-3160B> 2
+<CJK_UNIFIED_IDEOGRAPH-3160C> 2
+<CJK_UNIFIED_IDEOGRAPH-3160D> 2
+<CJK_UNIFIED_IDEOGRAPH-3160E> 2
+<CJK_UNIFIED_IDEOGRAPH-3160F> 2
+<CJK_UNIFIED_IDEOGRAPH-31610> 2
+<CJK_UNIFIED_IDEOGRAPH-31611> 2
+<CJK_UNIFIED_IDEOGRAPH-31612> 2
+<CJK_UNIFIED_IDEOGRAPH-31613> 2
+<CJK_UNIFIED_IDEOGRAPH-31614> 2
+<CJK_UNIFIED_IDEOGRAPH-31615> 2
+<CJK_UNIFIED_IDEOGRAPH-31616> 2
+<CJK_UNIFIED_IDEOGRAPH-31617> 2
+<CJK_UNIFIED_IDEOGRAPH-31618> 2
+<CJK_UNIFIED_IDEOGRAPH-31619> 2
+<CJK_UNIFIED_IDEOGRAPH-3161A> 2
+<CJK_UNIFIED_IDEOGRAPH-3161B> 2
+<CJK_UNIFIED_IDEOGRAPH-3161C> 2
+<CJK_UNIFIED_IDEOGRAPH-3161D> 2
+<CJK_UNIFIED_IDEOGRAPH-3161E> 2
+<CJK_UNIFIED_IDEOGRAPH-3161F> 2
+<CJK_UNIFIED_IDEOGRAPH-31620> 2
+<CJK_UNIFIED_IDEOGRAPH-31621> 2
+<CJK_UNIFIED_IDEOGRAPH-31622> 2
+<CJK_UNIFIED_IDEOGRAPH-31623> 2
+<CJK_UNIFIED_IDEOGRAPH-31624> 2
+<CJK_UNIFIED_IDEOGRAPH-31625> 2
+<CJK_UNIFIED_IDEOGRAPH-31626> 2
+<CJK_UNIFIED_IDEOGRAPH-31627> 2
+<CJK_UNIFIED_IDEOGRAPH-31628> 2
+<CJK_UNIFIED_IDEOGRAPH-31629> 2
+<CJK_UNIFIED_IDEOGRAPH-3162A> 2
+<CJK_UNIFIED_IDEOGRAPH-3162B> 2
+<CJK_UNIFIED_IDEOGRAPH-3162C> 2
+<CJK_UNIFIED_IDEOGRAPH-3162D> 2
+<CJK_UNIFIED_IDEOGRAPH-3162E> 2
+<CJK_UNIFIED_IDEOGRAPH-3162F> 2
+<CJK_UNIFIED_IDEOGRAPH-31630> 2
+<CJK_UNIFIED_IDEOGRAPH-31631> 2
+<CJK_UNIFIED_IDEOGRAPH-31632> 2
+<CJK_UNIFIED_IDEOGRAPH-31633> 2
+<CJK_UNIFIED_IDEOGRAPH-31634> 2
+<CJK_UNIFIED_IDEOGRAPH-31635> 2
+<CJK_UNIFIED_IDEOGRAPH-31636> 2
+<CJK_UNIFIED_IDEOGRAPH-31637> 2
+<CJK_UNIFIED_IDEOGRAPH-31638> 2
+<CJK_UNIFIED_IDEOGRAPH-31639> 2
+<CJK_UNIFIED_IDEOGRAPH-3163A> 2
+<CJK_UNIFIED_IDEOGRAPH-3163B> 2
+<CJK_UNIFIED_IDEOGRAPH-3163C> 2
+<CJK_UNIFIED_IDEOGRAPH-3163D> 2
+<CJK_UNIFIED_IDEOGRAPH-3163E> 2
+<CJK_UNIFIED_IDEOGRAPH-3163F> 2
+<CJK_UNIFIED_IDEOGRAPH-31640> 2
+<CJK_UNIFIED_IDEOGRAPH-31641> 2
+<CJK_UNIFIED_IDEOGRAPH-31642> 2
+<CJK_UNIFIED_IDEOGRAPH-31643> 2
+<CJK_UNIFIED_IDEOGRAPH-31644> 2
+<CJK_UNIFIED_IDEOGRAPH-31645> 2
+<CJK_UNIFIED_IDEOGRAPH-31646> 2
+<CJK_UNIFIED_IDEOGRAPH-31647> 2
+<CJK_UNIFIED_IDEOGRAPH-31648> 2
+<CJK_UNIFIED_IDEOGRAPH-31649> 2
+<CJK_UNIFIED_IDEOGRAPH-3164A> 2
+<CJK_UNIFIED_IDEOGRAPH-3164B> 2
+<CJK_UNIFIED_IDEOGRAPH-3164C> 2
+<CJK_UNIFIED_IDEOGRAPH-3164D> 2
+<CJK_UNIFIED_IDEOGRAPH-3164E> 2
+<CJK_UNIFIED_IDEOGRAPH-3164F> 2
+<CJK_UNIFIED_IDEOGRAPH-31650> 2
+<CJK_UNIFIED_IDEOGRAPH-31651> 2
+<CJK_UNIFIED_IDEOGRAPH-31652> 2
+<CJK_UNIFIED_IDEOGRAPH-31653> 2
+<CJK_UNIFIED_IDEOGRAPH-31654> 2
+<CJK_UNIFIED_IDEOGRAPH-31655> 2
+<CJK_UNIFIED_IDEOGRAPH-31656> 2
+<CJK_UNIFIED_IDEOGRAPH-31657> 2
+<CJK_UNIFIED_IDEOGRAPH-31658> 2
+<CJK_UNIFIED_IDEOGRAPH-31659> 2
+<CJK_UNIFIED_IDEOGRAPH-3165A> 2
+<CJK_UNIFIED_IDEOGRAPH-3165B> 2
+<CJK_UNIFIED_IDEOGRAPH-3165C> 2
+<CJK_UNIFIED_IDEOGRAPH-3165D> 2
+<CJK_UNIFIED_IDEOGRAPH-3165E> 2
+<CJK_UNIFIED_IDEOGRAPH-3165F> 2
+<CJK_UNIFIED_IDEOGRAPH-31660> 2
+<CJK_UNIFIED_IDEOGRAPH-31661> 2
+<CJK_UNIFIED_IDEOGRAPH-31662> 2
+<CJK_UNIFIED_IDEOGRAPH-31663> 2
+<CJK_UNIFIED_IDEOGRAPH-31664> 2
+<CJK_UNIFIED_IDEOGRAPH-31665> 2
+<CJK_UNIFIED_IDEOGRAPH-31666> 2
+<CJK_UNIFIED_IDEOGRAPH-31667> 2
+<CJK_UNIFIED_IDEOGRAPH-31668> 2
+<CJK_UNIFIED_IDEOGRAPH-31669> 2
+<CJK_UNIFIED_IDEOGRAPH-3166A> 2
+<CJK_UNIFIED_IDEOGRAPH-3166B> 2
+<CJK_UNIFIED_IDEOGRAPH-3166C> 2
+<CJK_UNIFIED_IDEOGRAPH-3166D> 2
+<CJK_UNIFIED_IDEOGRAPH-3166E> 2
+<CJK_UNIFIED_IDEOGRAPH-3166F> 2
+<CJK_UNIFIED_IDEOGRAPH-31670> 2
+<CJK_UNIFIED_IDEOGRAPH-31671> 2
+<CJK_UNIFIED_IDEOGRAPH-31672> 2
+<CJK_UNIFIED_IDEOGRAPH-31673> 2
+<CJK_UNIFIED_IDEOGRAPH-31674> 2
+<CJK_UNIFIED_IDEOGRAPH-31675> 2
+<CJK_UNIFIED_IDEOGRAPH-31676> 2
+<CJK_UNIFIED_IDEOGRAPH-31677> 2
+<CJK_UNIFIED_IDEOGRAPH-31678> 2
+<CJK_UNIFIED_IDEOGRAPH-31679> 2
+<CJK_UNIFIED_IDEOGRAPH-3167A> 2
+<CJK_UNIFIED_IDEOGRAPH-3167B> 2
+<CJK_UNIFIED_IDEOGRAPH-3167C> 2
+<CJK_UNIFIED_IDEOGRAPH-3167D> 2
+<CJK_UNIFIED_IDEOGRAPH-3167E> 2
+<CJK_UNIFIED_IDEOGRAPH-3167F> 2
+<CJK_UNIFIED_IDEOGRAPH-31680> 2
+<CJK_UNIFIED_IDEOGRAPH-31681> 2
+<CJK_UNIFIED_IDEOGRAPH-31682> 2
+<CJK_UNIFIED_IDEOGRAPH-31683> 2
+<CJK_UNIFIED_IDEOGRAPH-31684> 2
+<CJK_UNIFIED_IDEOGRAPH-31685> 2
+<CJK_UNIFIED_IDEOGRAPH-31686> 2
+<CJK_UNIFIED_IDEOGRAPH-31687> 2
+<CJK_UNIFIED_IDEOGRAPH-31688> 2
+<CJK_UNIFIED_IDEOGRAPH-31689> 2
+<CJK_UNIFIED_IDEOGRAPH-3168A> 2
+<CJK_UNIFIED_IDEOGRAPH-3168B> 2
+<CJK_UNIFIED_IDEOGRAPH-3168C> 2
+<CJK_UNIFIED_IDEOGRAPH-3168D> 2
+<CJK_UNIFIED_IDEOGRAPH-3168E> 2
+<CJK_UNIFIED_IDEOGRAPH-3168F> 2
+<CJK_UNIFIED_IDEOGRAPH-31690> 2
+<CJK_UNIFIED_IDEOGRAPH-31691> 2
+<CJK_UNIFIED_IDEOGRAPH-31692> 2
+<CJK_UNIFIED_IDEOGRAPH-31693> 2
+<CJK_UNIFIED_IDEOGRAPH-31694> 2
+<CJK_UNIFIED_IDEOGRAPH-31695> 2
+<CJK_UNIFIED_IDEOGRAPH-31696> 2
+<CJK_UNIFIED_IDEOGRAPH-31697> 2
+<CJK_UNIFIED_IDEOGRAPH-31698> 2
+<CJK_UNIFIED_IDEOGRAPH-31699> 2
+<CJK_UNIFIED_IDEOGRAPH-3169A> 2
+<CJK_UNIFIED_IDEOGRAPH-3169B> 2
+<CJK_UNIFIED_IDEOGRAPH-3169C> 2
+<CJK_UNIFIED_IDEOGRAPH-3169D> 2
+<CJK_UNIFIED_IDEOGRAPH-3169E> 2
+<CJK_UNIFIED_IDEOGRAPH-3169F> 2
+<CJK_UNIFIED_IDEOGRAPH-316A0> 2
+<CJK_UNIFIED_IDEOGRAPH-316A1> 2
+<CJK_UNIFIED_IDEOGRAPH-316A2> 2
+<CJK_UNIFIED_IDEOGRAPH-316A3> 2
+<CJK_UNIFIED_IDEOGRAPH-316A4> 2
+<CJK_UNIFIED_IDEOGRAPH-316A5> 2
+<CJK_UNIFIED_IDEOGRAPH-316A6> 2
+<CJK_UNIFIED_IDEOGRAPH-316A7> 2
+<CJK_UNIFIED_IDEOGRAPH-316A8> 2
+<CJK_UNIFIED_IDEOGRAPH-316A9> 2
+<CJK_UNIFIED_IDEOGRAPH-316AA> 2
+<CJK_UNIFIED_IDEOGRAPH-316AB> 2
+<CJK_UNIFIED_IDEOGRAPH-316AC> 2
+<CJK_UNIFIED_IDEOGRAPH-316AD> 2
+<CJK_UNIFIED_IDEOGRAPH-316AE> 2
+<CJK_UNIFIED_IDEOGRAPH-316AF> 2
+<CJK_UNIFIED_IDEOGRAPH-316B0> 2
+<CJK_UNIFIED_IDEOGRAPH-316B1> 2
+<CJK_UNIFIED_IDEOGRAPH-316B2> 2
+<CJK_UNIFIED_IDEOGRAPH-316B3> 2
+<CJK_UNIFIED_IDEOGRAPH-316B4> 2
+<CJK_UNIFIED_IDEOGRAPH-316B5> 2
+<CJK_UNIFIED_IDEOGRAPH-316B6> 2
+<CJK_UNIFIED_IDEOGRAPH-316B7> 2
+<CJK_UNIFIED_IDEOGRAPH-316B8> 2
+<CJK_UNIFIED_IDEOGRAPH-316B9> 2
+<CJK_UNIFIED_IDEOGRAPH-316BA> 2
+<CJK_UNIFIED_IDEOGRAPH-316BB> 2
+<CJK_UNIFIED_IDEOGRAPH-316BC> 2
+<CJK_UNIFIED_IDEOGRAPH-316BD> 2
+<CJK_UNIFIED_IDEOGRAPH-316BE> 2
+<CJK_UNIFIED_IDEOGRAPH-316BF> 2
+<CJK_UNIFIED_IDEOGRAPH-316C0> 2
+<CJK_UNIFIED_IDEOGRAPH-316C1> 2
+<CJK_UNIFIED_IDEOGRAPH-316C2> 2
+<CJK_UNIFIED_IDEOGRAPH-316C3> 2
+<CJK_UNIFIED_IDEOGRAPH-316C4> 2
+<CJK_UNIFIED_IDEOGRAPH-316C5> 2
+<CJK_UNIFIED_IDEOGRAPH-316C6> 2
+<CJK_UNIFIED_IDEOGRAPH-316C7> 2
+<CJK_UNIFIED_IDEOGRAPH-316C8> 2
+<CJK_UNIFIED_IDEOGRAPH-316C9> 2
+<CJK_UNIFIED_IDEOGRAPH-316CA> 2
+<CJK_UNIFIED_IDEOGRAPH-316CB> 2
+<CJK_UNIFIED_IDEOGRAPH-316CC> 2
+<CJK_UNIFIED_IDEOGRAPH-316CD> 2
+<CJK_UNIFIED_IDEOGRAPH-316CE> 2
+<CJK_UNIFIED_IDEOGRAPH-316CF> 2
+<CJK_UNIFIED_IDEOGRAPH-316D0> 2
+<CJK_UNIFIED_IDEOGRAPH-316D1> 2
+<CJK_UNIFIED_IDEOGRAPH-316D2> 2
+<CJK_UNIFIED_IDEOGRAPH-316D3> 2
+<CJK_UNIFIED_IDEOGRAPH-316D4> 2
+<CJK_UNIFIED_IDEOGRAPH-316D5> 2
+<CJK_UNIFIED_IDEOGRAPH-316D6> 2
+<CJK_UNIFIED_IDEOGRAPH-316D7> 2
+<CJK_UNIFIED_IDEOGRAPH-316D8> 2
+<CJK_UNIFIED_IDEOGRAPH-316D9> 2
+<CJK_UNIFIED_IDEOGRAPH-316DA> 2
+<CJK_UNIFIED_IDEOGRAPH-316DB> 2
+<CJK_UNIFIED_IDEOGRAPH-316DC> 2
+<CJK_UNIFIED_IDEOGRAPH-316DD> 2
+<CJK_UNIFIED_IDEOGRAPH-316DE> 2
+<CJK_UNIFIED_IDEOGRAPH-316DF> 2
+<CJK_UNIFIED_IDEOGRAPH-316E0> 2
+<CJK_UNIFIED_IDEOGRAPH-316E1> 2
+<CJK_UNIFIED_IDEOGRAPH-316E2> 2
+<CJK_UNIFIED_IDEOGRAPH-316E3> 2
+<CJK_UNIFIED_IDEOGRAPH-316E4> 2
+<CJK_UNIFIED_IDEOGRAPH-316E5> 2
+<CJK_UNIFIED_IDEOGRAPH-316E6> 2
+<CJK_UNIFIED_IDEOGRAPH-316E7> 2
+<CJK_UNIFIED_IDEOGRAPH-316E8> 2
+<CJK_UNIFIED_IDEOGRAPH-316E9> 2
+<CJK_UNIFIED_IDEOGRAPH-316EA> 2
+<CJK_UNIFIED_IDEOGRAPH-316EB> 2
+<CJK_UNIFIED_IDEOGRAPH-316EC> 2
+<CJK_UNIFIED_IDEOGRAPH-316ED> 2
+<CJK_UNIFIED_IDEOGRAPH-316EE> 2
+<CJK_UNIFIED_IDEOGRAPH-316EF> 2
+<CJK_UNIFIED_IDEOGRAPH-316F0> 2
+<CJK_UNIFIED_IDEOGRAPH-316F1> 2
+<CJK_UNIFIED_IDEOGRAPH-316F2> 2
+<CJK_UNIFIED_IDEOGRAPH-316F3> 2
+<CJK_UNIFIED_IDEOGRAPH-316F4> 2
+<CJK_UNIFIED_IDEOGRAPH-316F5> 2
+<CJK_UNIFIED_IDEOGRAPH-316F6> 2
+<CJK_UNIFIED_IDEOGRAPH-316F7> 2
+<CJK_UNIFIED_IDEOGRAPH-316F8> 2
+<CJK_UNIFIED_IDEOGRAPH-316F9> 2
+<CJK_UNIFIED_IDEOGRAPH-316FA> 2
+<CJK_UNIFIED_IDEOGRAPH-316FB> 2
+<CJK_UNIFIED_IDEOGRAPH-316FC> 2
+<CJK_UNIFIED_IDEOGRAPH-316FD> 2
+<CJK_UNIFIED_IDEOGRAPH-316FE> 2
+<CJK_UNIFIED_IDEOGRAPH-316FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31700> 2
+<CJK_UNIFIED_IDEOGRAPH-31701> 2
+<CJK_UNIFIED_IDEOGRAPH-31702> 2
+<CJK_UNIFIED_IDEOGRAPH-31703> 2
+<CJK_UNIFIED_IDEOGRAPH-31704> 2
+<CJK_UNIFIED_IDEOGRAPH-31705> 2
+<CJK_UNIFIED_IDEOGRAPH-31706> 2
+<CJK_UNIFIED_IDEOGRAPH-31707> 2
+<CJK_UNIFIED_IDEOGRAPH-31708> 2
+<CJK_UNIFIED_IDEOGRAPH-31709> 2
+<CJK_UNIFIED_IDEOGRAPH-3170A> 2
+<CJK_UNIFIED_IDEOGRAPH-3170B> 2
+<CJK_UNIFIED_IDEOGRAPH-3170C> 2
+<CJK_UNIFIED_IDEOGRAPH-3170D> 2
+<CJK_UNIFIED_IDEOGRAPH-3170E> 2
+<CJK_UNIFIED_IDEOGRAPH-3170F> 2
+<CJK_UNIFIED_IDEOGRAPH-31710> 2
+<CJK_UNIFIED_IDEOGRAPH-31711> 2
+<CJK_UNIFIED_IDEOGRAPH-31712> 2
+<CJK_UNIFIED_IDEOGRAPH-31713> 2
+<CJK_UNIFIED_IDEOGRAPH-31714> 2
+<CJK_UNIFIED_IDEOGRAPH-31715> 2
+<CJK_UNIFIED_IDEOGRAPH-31716> 2
+<CJK_UNIFIED_IDEOGRAPH-31717> 2
+<CJK_UNIFIED_IDEOGRAPH-31718> 2
+<CJK_UNIFIED_IDEOGRAPH-31719> 2
+<CJK_UNIFIED_IDEOGRAPH-3171A> 2
+<CJK_UNIFIED_IDEOGRAPH-3171B> 2
+<CJK_UNIFIED_IDEOGRAPH-3171C> 2
+<CJK_UNIFIED_IDEOGRAPH-3171D> 2
+<CJK_UNIFIED_IDEOGRAPH-3171E> 2
+<CJK_UNIFIED_IDEOGRAPH-3171F> 2
+<CJK_UNIFIED_IDEOGRAPH-31720> 2
+<CJK_UNIFIED_IDEOGRAPH-31721> 2
+<CJK_UNIFIED_IDEOGRAPH-31722> 2
+<CJK_UNIFIED_IDEOGRAPH-31723> 2
+<CJK_UNIFIED_IDEOGRAPH-31724> 2
+<CJK_UNIFIED_IDEOGRAPH-31725> 2
+<CJK_UNIFIED_IDEOGRAPH-31726> 2
+<CJK_UNIFIED_IDEOGRAPH-31727> 2
+<CJK_UNIFIED_IDEOGRAPH-31728> 2
+<CJK_UNIFIED_IDEOGRAPH-31729> 2
+<CJK_UNIFIED_IDEOGRAPH-3172A> 2
+<CJK_UNIFIED_IDEOGRAPH-3172B> 2
+<CJK_UNIFIED_IDEOGRAPH-3172C> 2
+<CJK_UNIFIED_IDEOGRAPH-3172D> 2
+<CJK_UNIFIED_IDEOGRAPH-3172E> 2
+<CJK_UNIFIED_IDEOGRAPH-3172F> 2
+<CJK_UNIFIED_IDEOGRAPH-31730> 2
+<CJK_UNIFIED_IDEOGRAPH-31731> 2
+<CJK_UNIFIED_IDEOGRAPH-31732> 2
+<CJK_UNIFIED_IDEOGRAPH-31733> 2
+<CJK_UNIFIED_IDEOGRAPH-31734> 2
+<CJK_UNIFIED_IDEOGRAPH-31735> 2
+<CJK_UNIFIED_IDEOGRAPH-31736> 2
+<CJK_UNIFIED_IDEOGRAPH-31737> 2
+<CJK_UNIFIED_IDEOGRAPH-31738> 2
+<CJK_UNIFIED_IDEOGRAPH-31739> 2
+<CJK_UNIFIED_IDEOGRAPH-3173A> 2
+<CJK_UNIFIED_IDEOGRAPH-3173B> 2
+<CJK_UNIFIED_IDEOGRAPH-3173C> 2
+<CJK_UNIFIED_IDEOGRAPH-3173D> 2
+<CJK_UNIFIED_IDEOGRAPH-3173E> 2
+<CJK_UNIFIED_IDEOGRAPH-3173F> 2
+<CJK_UNIFIED_IDEOGRAPH-31740> 2
+<CJK_UNIFIED_IDEOGRAPH-31741> 2
+<CJK_UNIFIED_IDEOGRAPH-31742> 2
+<CJK_UNIFIED_IDEOGRAPH-31743> 2
+<CJK_UNIFIED_IDEOGRAPH-31744> 2
+<CJK_UNIFIED_IDEOGRAPH-31745> 2
+<CJK_UNIFIED_IDEOGRAPH-31746> 2
+<CJK_UNIFIED_IDEOGRAPH-31747> 2
+<CJK_UNIFIED_IDEOGRAPH-31748> 2
+<CJK_UNIFIED_IDEOGRAPH-31749> 2
+<CJK_UNIFIED_IDEOGRAPH-3174A> 2
+<CJK_UNIFIED_IDEOGRAPH-3174B> 2
+<CJK_UNIFIED_IDEOGRAPH-3174C> 2
+<CJK_UNIFIED_IDEOGRAPH-3174D> 2
+<CJK_UNIFIED_IDEOGRAPH-3174E> 2
+<CJK_UNIFIED_IDEOGRAPH-3174F> 2
+<CJK_UNIFIED_IDEOGRAPH-31750> 2
+<CJK_UNIFIED_IDEOGRAPH-31751> 2
+<CJK_UNIFIED_IDEOGRAPH-31752> 2
+<CJK_UNIFIED_IDEOGRAPH-31753> 2
+<CJK_UNIFIED_IDEOGRAPH-31754> 2
+<CJK_UNIFIED_IDEOGRAPH-31755> 2
+<CJK_UNIFIED_IDEOGRAPH-31756> 2
+<CJK_UNIFIED_IDEOGRAPH-31757> 2
+<CJK_UNIFIED_IDEOGRAPH-31758> 2
+<CJK_UNIFIED_IDEOGRAPH-31759> 2
+<CJK_UNIFIED_IDEOGRAPH-3175A> 2
+<CJK_UNIFIED_IDEOGRAPH-3175B> 2
+<CJK_UNIFIED_IDEOGRAPH-3175C> 2
+<CJK_UNIFIED_IDEOGRAPH-3175D> 2
+<CJK_UNIFIED_IDEOGRAPH-3175E> 2
+<CJK_UNIFIED_IDEOGRAPH-3175F> 2
+<CJK_UNIFIED_IDEOGRAPH-31760> 2
+<CJK_UNIFIED_IDEOGRAPH-31761> 2
+<CJK_UNIFIED_IDEOGRAPH-31762> 2
+<CJK_UNIFIED_IDEOGRAPH-31763> 2
+<CJK_UNIFIED_IDEOGRAPH-31764> 2
+<CJK_UNIFIED_IDEOGRAPH-31765> 2
+<CJK_UNIFIED_IDEOGRAPH-31766> 2
+<CJK_UNIFIED_IDEOGRAPH-31767> 2
+<CJK_UNIFIED_IDEOGRAPH-31768> 2
+<CJK_UNIFIED_IDEOGRAPH-31769> 2
+<CJK_UNIFIED_IDEOGRAPH-3176A> 2
+<CJK_UNIFIED_IDEOGRAPH-3176B> 2
+<CJK_UNIFIED_IDEOGRAPH-3176C> 2
+<CJK_UNIFIED_IDEOGRAPH-3176D> 2
+<CJK_UNIFIED_IDEOGRAPH-3176E> 2
+<CJK_UNIFIED_IDEOGRAPH-3176F> 2
+<CJK_UNIFIED_IDEOGRAPH-31770> 2
+<CJK_UNIFIED_IDEOGRAPH-31771> 2
+<CJK_UNIFIED_IDEOGRAPH-31772> 2
+<CJK_UNIFIED_IDEOGRAPH-31773> 2
+<CJK_UNIFIED_IDEOGRAPH-31774> 2
+<CJK_UNIFIED_IDEOGRAPH-31775> 2
+<CJK_UNIFIED_IDEOGRAPH-31776> 2
+<CJK_UNIFIED_IDEOGRAPH-31777> 2
+<CJK_UNIFIED_IDEOGRAPH-31778> 2
+<CJK_UNIFIED_IDEOGRAPH-31779> 2
+<CJK_UNIFIED_IDEOGRAPH-3177A> 2
+<CJK_UNIFIED_IDEOGRAPH-3177B> 2
+<CJK_UNIFIED_IDEOGRAPH-3177C> 2
+<CJK_UNIFIED_IDEOGRAPH-3177D> 2
+<CJK_UNIFIED_IDEOGRAPH-3177E> 2
+<CJK_UNIFIED_IDEOGRAPH-3177F> 2
+<CJK_UNIFIED_IDEOGRAPH-31780> 2
+<CJK_UNIFIED_IDEOGRAPH-31781> 2
+<CJK_UNIFIED_IDEOGRAPH-31782> 2
+<CJK_UNIFIED_IDEOGRAPH-31783> 2
+<CJK_UNIFIED_IDEOGRAPH-31784> 2
+<CJK_UNIFIED_IDEOGRAPH-31785> 2
+<CJK_UNIFIED_IDEOGRAPH-31786> 2
+<CJK_UNIFIED_IDEOGRAPH-31787> 2
+<CJK_UNIFIED_IDEOGRAPH-31788> 2
+<CJK_UNIFIED_IDEOGRAPH-31789> 2
+<CJK_UNIFIED_IDEOGRAPH-3178A> 2
+<CJK_UNIFIED_IDEOGRAPH-3178B> 2
+<CJK_UNIFIED_IDEOGRAPH-3178C> 2
+<CJK_UNIFIED_IDEOGRAPH-3178D> 2
+<CJK_UNIFIED_IDEOGRAPH-3178E> 2
+<CJK_UNIFIED_IDEOGRAPH-3178F> 2
+<CJK_UNIFIED_IDEOGRAPH-31790> 2
+<CJK_UNIFIED_IDEOGRAPH-31791> 2
+<CJK_UNIFIED_IDEOGRAPH-31792> 2
+<CJK_UNIFIED_IDEOGRAPH-31793> 2
+<CJK_UNIFIED_IDEOGRAPH-31794> 2
+<CJK_UNIFIED_IDEOGRAPH-31795> 2
+<CJK_UNIFIED_IDEOGRAPH-31796> 2
+<CJK_UNIFIED_IDEOGRAPH-31797> 2
+<CJK_UNIFIED_IDEOGRAPH-31798> 2
+<CJK_UNIFIED_IDEOGRAPH-31799> 2
+<CJK_UNIFIED_IDEOGRAPH-3179A> 2
+<CJK_UNIFIED_IDEOGRAPH-3179B> 2
+<CJK_UNIFIED_IDEOGRAPH-3179C> 2
+<CJK_UNIFIED_IDEOGRAPH-3179D> 2
+<CJK_UNIFIED_IDEOGRAPH-3179E> 2
+<CJK_UNIFIED_IDEOGRAPH-3179F> 2
+<CJK_UNIFIED_IDEOGRAPH-317A0> 2
+<CJK_UNIFIED_IDEOGRAPH-317A1> 2
+<CJK_UNIFIED_IDEOGRAPH-317A2> 2
+<CJK_UNIFIED_IDEOGRAPH-317A3> 2
+<CJK_UNIFIED_IDEOGRAPH-317A4> 2
+<CJK_UNIFIED_IDEOGRAPH-317A5> 2
+<CJK_UNIFIED_IDEOGRAPH-317A6> 2
+<CJK_UNIFIED_IDEOGRAPH-317A7> 2
+<CJK_UNIFIED_IDEOGRAPH-317A8> 2
+<CJK_UNIFIED_IDEOGRAPH-317A9> 2
+<CJK_UNIFIED_IDEOGRAPH-317AA> 2
+<CJK_UNIFIED_IDEOGRAPH-317AB> 2
+<CJK_UNIFIED_IDEOGRAPH-317AC> 2
+<CJK_UNIFIED_IDEOGRAPH-317AD> 2
+<CJK_UNIFIED_IDEOGRAPH-317AE> 2
+<CJK_UNIFIED_IDEOGRAPH-317AF> 2
+<CJK_UNIFIED_IDEOGRAPH-317B0> 2
+<CJK_UNIFIED_IDEOGRAPH-317B1> 2
+<CJK_UNIFIED_IDEOGRAPH-317B2> 2
+<CJK_UNIFIED_IDEOGRAPH-317B3> 2
+<CJK_UNIFIED_IDEOGRAPH-317B4> 2
+<CJK_UNIFIED_IDEOGRAPH-317B5> 2
+<CJK_UNIFIED_IDEOGRAPH-317B6> 2
+<CJK_UNIFIED_IDEOGRAPH-317B7> 2
+<CJK_UNIFIED_IDEOGRAPH-317B8> 2
+<CJK_UNIFIED_IDEOGRAPH-317B9> 2
+<CJK_UNIFIED_IDEOGRAPH-317BA> 2
+<CJK_UNIFIED_IDEOGRAPH-317BB> 2
+<CJK_UNIFIED_IDEOGRAPH-317BC> 2
+<CJK_UNIFIED_IDEOGRAPH-317BD> 2
+<CJK_UNIFIED_IDEOGRAPH-317BE> 2
+<CJK_UNIFIED_IDEOGRAPH-317BF> 2
+<CJK_UNIFIED_IDEOGRAPH-317C0> 2
+<CJK_UNIFIED_IDEOGRAPH-317C1> 2
+<CJK_UNIFIED_IDEOGRAPH-317C2> 2
+<CJK_UNIFIED_IDEOGRAPH-317C3> 2
+<CJK_UNIFIED_IDEOGRAPH-317C4> 2
+<CJK_UNIFIED_IDEOGRAPH-317C5> 2
+<CJK_UNIFIED_IDEOGRAPH-317C6> 2
+<CJK_UNIFIED_IDEOGRAPH-317C7> 2
+<CJK_UNIFIED_IDEOGRAPH-317C8> 2
+<CJK_UNIFIED_IDEOGRAPH-317C9> 2
+<CJK_UNIFIED_IDEOGRAPH-317CA> 2
+<CJK_UNIFIED_IDEOGRAPH-317CB> 2
+<CJK_UNIFIED_IDEOGRAPH-317CC> 2
+<CJK_UNIFIED_IDEOGRAPH-317CD> 2
+<CJK_UNIFIED_IDEOGRAPH-317CE> 2
+<CJK_UNIFIED_IDEOGRAPH-317CF> 2
+<CJK_UNIFIED_IDEOGRAPH-317D0> 2
+<CJK_UNIFIED_IDEOGRAPH-317D1> 2
+<CJK_UNIFIED_IDEOGRAPH-317D2> 2
+<CJK_UNIFIED_IDEOGRAPH-317D3> 2
+<CJK_UNIFIED_IDEOGRAPH-317D4> 2
+<CJK_UNIFIED_IDEOGRAPH-317D5> 2
+<CJK_UNIFIED_IDEOGRAPH-317D6> 2
+<CJK_UNIFIED_IDEOGRAPH-317D7> 2
+<CJK_UNIFIED_IDEOGRAPH-317D8> 2
+<CJK_UNIFIED_IDEOGRAPH-317D9> 2
+<CJK_UNIFIED_IDEOGRAPH-317DA> 2
+<CJK_UNIFIED_IDEOGRAPH-317DB> 2
+<CJK_UNIFIED_IDEOGRAPH-317DC> 2
+<CJK_UNIFIED_IDEOGRAPH-317DD> 2
+<CJK_UNIFIED_IDEOGRAPH-317DE> 2
+<CJK_UNIFIED_IDEOGRAPH-317DF> 2
+<CJK_UNIFIED_IDEOGRAPH-317E0> 2
+<CJK_UNIFIED_IDEOGRAPH-317E1> 2
+<CJK_UNIFIED_IDEOGRAPH-317E2> 2
+<CJK_UNIFIED_IDEOGRAPH-317E3> 2
+<CJK_UNIFIED_IDEOGRAPH-317E4> 2
+<CJK_UNIFIED_IDEOGRAPH-317E5> 2
+<CJK_UNIFIED_IDEOGRAPH-317E6> 2
+<CJK_UNIFIED_IDEOGRAPH-317E7> 2
+<CJK_UNIFIED_IDEOGRAPH-317E8> 2
+<CJK_UNIFIED_IDEOGRAPH-317E9> 2
+<CJK_UNIFIED_IDEOGRAPH-317EA> 2
+<CJK_UNIFIED_IDEOGRAPH-317EB> 2
+<CJK_UNIFIED_IDEOGRAPH-317EC> 2
+<CJK_UNIFIED_IDEOGRAPH-317ED> 2
+<CJK_UNIFIED_IDEOGRAPH-317EE> 2
+<CJK_UNIFIED_IDEOGRAPH-317EF> 2
+<CJK_UNIFIED_IDEOGRAPH-317F0> 2
+<CJK_UNIFIED_IDEOGRAPH-317F1> 2
+<CJK_UNIFIED_IDEOGRAPH-317F2> 2
+<CJK_UNIFIED_IDEOGRAPH-317F3> 2
+<CJK_UNIFIED_IDEOGRAPH-317F4> 2
+<CJK_UNIFIED_IDEOGRAPH-317F5> 2
+<CJK_UNIFIED_IDEOGRAPH-317F6> 2
+<CJK_UNIFIED_IDEOGRAPH-317F7> 2
+<CJK_UNIFIED_IDEOGRAPH-317F8> 2
+<CJK_UNIFIED_IDEOGRAPH-317F9> 2
+<CJK_UNIFIED_IDEOGRAPH-317FA> 2
+<CJK_UNIFIED_IDEOGRAPH-317FB> 2
+<CJK_UNIFIED_IDEOGRAPH-317FC> 2
+<CJK_UNIFIED_IDEOGRAPH-317FD> 2
+<CJK_UNIFIED_IDEOGRAPH-317FE> 2
+<CJK_UNIFIED_IDEOGRAPH-317FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31800> 2
+<CJK_UNIFIED_IDEOGRAPH-31801> 2
+<CJK_UNIFIED_IDEOGRAPH-31802> 2
+<CJK_UNIFIED_IDEOGRAPH-31803> 2
+<CJK_UNIFIED_IDEOGRAPH-31804> 2
+<CJK_UNIFIED_IDEOGRAPH-31805> 2
+<CJK_UNIFIED_IDEOGRAPH-31806> 2
+<CJK_UNIFIED_IDEOGRAPH-31807> 2
+<CJK_UNIFIED_IDEOGRAPH-31808> 2
+<CJK_UNIFIED_IDEOGRAPH-31809> 2
+<CJK_UNIFIED_IDEOGRAPH-3180A> 2
+<CJK_UNIFIED_IDEOGRAPH-3180B> 2
+<CJK_UNIFIED_IDEOGRAPH-3180C> 2
+<CJK_UNIFIED_IDEOGRAPH-3180D> 2
+<CJK_UNIFIED_IDEOGRAPH-3180E> 2
+<CJK_UNIFIED_IDEOGRAPH-3180F> 2
+<CJK_UNIFIED_IDEOGRAPH-31810> 2
+<CJK_UNIFIED_IDEOGRAPH-31811> 2
+<CJK_UNIFIED_IDEOGRAPH-31812> 2
+<CJK_UNIFIED_IDEOGRAPH-31813> 2
+<CJK_UNIFIED_IDEOGRAPH-31814> 2
+<CJK_UNIFIED_IDEOGRAPH-31815> 2
+<CJK_UNIFIED_IDEOGRAPH-31816> 2
+<CJK_UNIFIED_IDEOGRAPH-31817> 2
+<CJK_UNIFIED_IDEOGRAPH-31818> 2
+<CJK_UNIFIED_IDEOGRAPH-31819> 2
+<CJK_UNIFIED_IDEOGRAPH-3181A> 2
+<CJK_UNIFIED_IDEOGRAPH-3181B> 2
+<CJK_UNIFIED_IDEOGRAPH-3181C> 2
+<CJK_UNIFIED_IDEOGRAPH-3181D> 2
+<CJK_UNIFIED_IDEOGRAPH-3181E> 2
+<CJK_UNIFIED_IDEOGRAPH-3181F> 2
+<CJK_UNIFIED_IDEOGRAPH-31820> 2
+<CJK_UNIFIED_IDEOGRAPH-31821> 2
+<CJK_UNIFIED_IDEOGRAPH-31822> 2
+<CJK_UNIFIED_IDEOGRAPH-31823> 2
+<CJK_UNIFIED_IDEOGRAPH-31824> 2
+<CJK_UNIFIED_IDEOGRAPH-31825> 2
+<CJK_UNIFIED_IDEOGRAPH-31826> 2
+<CJK_UNIFIED_IDEOGRAPH-31827> 2
+<CJK_UNIFIED_IDEOGRAPH-31828> 2
+<CJK_UNIFIED_IDEOGRAPH-31829> 2
+<CJK_UNIFIED_IDEOGRAPH-3182A> 2
+<CJK_UNIFIED_IDEOGRAPH-3182B> 2
+<CJK_UNIFIED_IDEOGRAPH-3182C> 2
+<CJK_UNIFIED_IDEOGRAPH-3182D> 2
+<CJK_UNIFIED_IDEOGRAPH-3182E> 2
+<CJK_UNIFIED_IDEOGRAPH-3182F> 2
+<CJK_UNIFIED_IDEOGRAPH-31830> 2
+<CJK_UNIFIED_IDEOGRAPH-31831> 2
+<CJK_UNIFIED_IDEOGRAPH-31832> 2
+<CJK_UNIFIED_IDEOGRAPH-31833> 2
+<CJK_UNIFIED_IDEOGRAPH-31834> 2
+<CJK_UNIFIED_IDEOGRAPH-31835> 2
+<CJK_UNIFIED_IDEOGRAPH-31836> 2
+<CJK_UNIFIED_IDEOGRAPH-31837> 2
+<CJK_UNIFIED_IDEOGRAPH-31838> 2
+<CJK_UNIFIED_IDEOGRAPH-31839> 2
+<CJK_UNIFIED_IDEOGRAPH-3183A> 2
+<CJK_UNIFIED_IDEOGRAPH-3183B> 2
+<CJK_UNIFIED_IDEOGRAPH-3183C> 2
+<CJK_UNIFIED_IDEOGRAPH-3183D> 2
+<CJK_UNIFIED_IDEOGRAPH-3183E> 2
+<CJK_UNIFIED_IDEOGRAPH-3183F> 2
+<CJK_UNIFIED_IDEOGRAPH-31840> 2
+<CJK_UNIFIED_IDEOGRAPH-31841> 2
+<CJK_UNIFIED_IDEOGRAPH-31842> 2
+<CJK_UNIFIED_IDEOGRAPH-31843> 2
+<CJK_UNIFIED_IDEOGRAPH-31844> 2
+<CJK_UNIFIED_IDEOGRAPH-31845> 2
+<CJK_UNIFIED_IDEOGRAPH-31846> 2
+<CJK_UNIFIED_IDEOGRAPH-31847> 2
+<CJK_UNIFIED_IDEOGRAPH-31848> 2
+<CJK_UNIFIED_IDEOGRAPH-31849> 2
+<CJK_UNIFIED_IDEOGRAPH-3184A> 2
+<CJK_UNIFIED_IDEOGRAPH-3184B> 2
+<CJK_UNIFIED_IDEOGRAPH-3184C> 2
+<CJK_UNIFIED_IDEOGRAPH-3184D> 2
+<CJK_UNIFIED_IDEOGRAPH-3184E> 2
+<CJK_UNIFIED_IDEOGRAPH-3184F> 2
+<CJK_UNIFIED_IDEOGRAPH-31850> 2
+<CJK_UNIFIED_IDEOGRAPH-31851> 2
+<CJK_UNIFIED_IDEOGRAPH-31852> 2
+<CJK_UNIFIED_IDEOGRAPH-31853> 2
+<CJK_UNIFIED_IDEOGRAPH-31854> 2
+<CJK_UNIFIED_IDEOGRAPH-31855> 2
+<CJK_UNIFIED_IDEOGRAPH-31856> 2
+<CJK_UNIFIED_IDEOGRAPH-31857> 2
+<CJK_UNIFIED_IDEOGRAPH-31858> 2
+<CJK_UNIFIED_IDEOGRAPH-31859> 2
+<CJK_UNIFIED_IDEOGRAPH-3185A> 2
+<CJK_UNIFIED_IDEOGRAPH-3185B> 2
+<CJK_UNIFIED_IDEOGRAPH-3185C> 2
+<CJK_UNIFIED_IDEOGRAPH-3185D> 2
+<CJK_UNIFIED_IDEOGRAPH-3185E> 2
+<CJK_UNIFIED_IDEOGRAPH-3185F> 2
+<CJK_UNIFIED_IDEOGRAPH-31860> 2
+<CJK_UNIFIED_IDEOGRAPH-31861> 2
+<CJK_UNIFIED_IDEOGRAPH-31862> 2
+<CJK_UNIFIED_IDEOGRAPH-31863> 2
+<CJK_UNIFIED_IDEOGRAPH-31864> 2
+<CJK_UNIFIED_IDEOGRAPH-31865> 2
+<CJK_UNIFIED_IDEOGRAPH-31866> 2
+<CJK_UNIFIED_IDEOGRAPH-31867> 2
+<CJK_UNIFIED_IDEOGRAPH-31868> 2
+<CJK_UNIFIED_IDEOGRAPH-31869> 2
+<CJK_UNIFIED_IDEOGRAPH-3186A> 2
+<CJK_UNIFIED_IDEOGRAPH-3186B> 2
+<CJK_UNIFIED_IDEOGRAPH-3186C> 2
+<CJK_UNIFIED_IDEOGRAPH-3186D> 2
+<CJK_UNIFIED_IDEOGRAPH-3186E> 2
+<CJK_UNIFIED_IDEOGRAPH-3186F> 2
+<CJK_UNIFIED_IDEOGRAPH-31870> 2
+<CJK_UNIFIED_IDEOGRAPH-31871> 2
+<CJK_UNIFIED_IDEOGRAPH-31872> 2
+<CJK_UNIFIED_IDEOGRAPH-31873> 2
+<CJK_UNIFIED_IDEOGRAPH-31874> 2
+<CJK_UNIFIED_IDEOGRAPH-31875> 2
+<CJK_UNIFIED_IDEOGRAPH-31876> 2
+<CJK_UNIFIED_IDEOGRAPH-31877> 2
+<CJK_UNIFIED_IDEOGRAPH-31878> 2
+<CJK_UNIFIED_IDEOGRAPH-31879> 2
+<CJK_UNIFIED_IDEOGRAPH-3187A> 2
+<CJK_UNIFIED_IDEOGRAPH-3187B> 2
+<CJK_UNIFIED_IDEOGRAPH-3187C> 2
+<CJK_UNIFIED_IDEOGRAPH-3187D> 2
+<CJK_UNIFIED_IDEOGRAPH-3187E> 2
+<CJK_UNIFIED_IDEOGRAPH-3187F> 2
+<CJK_UNIFIED_IDEOGRAPH-31880> 2
+<CJK_UNIFIED_IDEOGRAPH-31881> 2
+<CJK_UNIFIED_IDEOGRAPH-31882> 2
+<CJK_UNIFIED_IDEOGRAPH-31883> 2
+<CJK_UNIFIED_IDEOGRAPH-31884> 2
+<CJK_UNIFIED_IDEOGRAPH-31885> 2
+<CJK_UNIFIED_IDEOGRAPH-31886> 2
+<CJK_UNIFIED_IDEOGRAPH-31887> 2
+<CJK_UNIFIED_IDEOGRAPH-31888> 2
+<CJK_UNIFIED_IDEOGRAPH-31889> 2
+<CJK_UNIFIED_IDEOGRAPH-3188A> 2
+<CJK_UNIFIED_IDEOGRAPH-3188B> 2
+<CJK_UNIFIED_IDEOGRAPH-3188C> 2
+<CJK_UNIFIED_IDEOGRAPH-3188D> 2
+<CJK_UNIFIED_IDEOGRAPH-3188E> 2
+<CJK_UNIFIED_IDEOGRAPH-3188F> 2
+<CJK_UNIFIED_IDEOGRAPH-31890> 2
+<CJK_UNIFIED_IDEOGRAPH-31891> 2
+<CJK_UNIFIED_IDEOGRAPH-31892> 2
+<CJK_UNIFIED_IDEOGRAPH-31893> 2
+<CJK_UNIFIED_IDEOGRAPH-31894> 2
+<CJK_UNIFIED_IDEOGRAPH-31895> 2
+<CJK_UNIFIED_IDEOGRAPH-31896> 2
+<CJK_UNIFIED_IDEOGRAPH-31897> 2
+<CJK_UNIFIED_IDEOGRAPH-31898> 2
+<CJK_UNIFIED_IDEOGRAPH-31899> 2
+<CJK_UNIFIED_IDEOGRAPH-3189A> 2
+<CJK_UNIFIED_IDEOGRAPH-3189B> 2
+<CJK_UNIFIED_IDEOGRAPH-3189C> 2
+<CJK_UNIFIED_IDEOGRAPH-3189D> 2
+<CJK_UNIFIED_IDEOGRAPH-3189E> 2
+<CJK_UNIFIED_IDEOGRAPH-3189F> 2
+<CJK_UNIFIED_IDEOGRAPH-318A0> 2
+<CJK_UNIFIED_IDEOGRAPH-318A1> 2
+<CJK_UNIFIED_IDEOGRAPH-318A2> 2
+<CJK_UNIFIED_IDEOGRAPH-318A3> 2
+<CJK_UNIFIED_IDEOGRAPH-318A4> 2
+<CJK_UNIFIED_IDEOGRAPH-318A5> 2
+<CJK_UNIFIED_IDEOGRAPH-318A6> 2
+<CJK_UNIFIED_IDEOGRAPH-318A7> 2
+<CJK_UNIFIED_IDEOGRAPH-318A8> 2
+<CJK_UNIFIED_IDEOGRAPH-318A9> 2
+<CJK_UNIFIED_IDEOGRAPH-318AA> 2
+<CJK_UNIFIED_IDEOGRAPH-318AB> 2
+<CJK_UNIFIED_IDEOGRAPH-318AC> 2
+<CJK_UNIFIED_IDEOGRAPH-318AD> 2
+<CJK_UNIFIED_IDEOGRAPH-318AE> 2
+<CJK_UNIFIED_IDEOGRAPH-318AF> 2
+<CJK_UNIFIED_IDEOGRAPH-318B0> 2
+<CJK_UNIFIED_IDEOGRAPH-318B1> 2
+<CJK_UNIFIED_IDEOGRAPH-318B2> 2
+<CJK_UNIFIED_IDEOGRAPH-318B3> 2
+<CJK_UNIFIED_IDEOGRAPH-318B4> 2
+<CJK_UNIFIED_IDEOGRAPH-318B5> 2
+<CJK_UNIFIED_IDEOGRAPH-318B6> 2
+<CJK_UNIFIED_IDEOGRAPH-318B7> 2
+<CJK_UNIFIED_IDEOGRAPH-318B8> 2
+<CJK_UNIFIED_IDEOGRAPH-318B9> 2
+<CJK_UNIFIED_IDEOGRAPH-318BA> 2
+<CJK_UNIFIED_IDEOGRAPH-318BB> 2
+<CJK_UNIFIED_IDEOGRAPH-318BC> 2
+<CJK_UNIFIED_IDEOGRAPH-318BD> 2
+<CJK_UNIFIED_IDEOGRAPH-318BE> 2
+<CJK_UNIFIED_IDEOGRAPH-318BF> 2
+<CJK_UNIFIED_IDEOGRAPH-318C0> 2
+<CJK_UNIFIED_IDEOGRAPH-318C1> 2
+<CJK_UNIFIED_IDEOGRAPH-318C2> 2
+<CJK_UNIFIED_IDEOGRAPH-318C3> 2
+<CJK_UNIFIED_IDEOGRAPH-318C4> 2
+<CJK_UNIFIED_IDEOGRAPH-318C5> 2
+<CJK_UNIFIED_IDEOGRAPH-318C6> 2
+<CJK_UNIFIED_IDEOGRAPH-318C7> 2
+<CJK_UNIFIED_IDEOGRAPH-318C8> 2
+<CJK_UNIFIED_IDEOGRAPH-318C9> 2
+<CJK_UNIFIED_IDEOGRAPH-318CA> 2
+<CJK_UNIFIED_IDEOGRAPH-318CB> 2
+<CJK_UNIFIED_IDEOGRAPH-318CC> 2
+<CJK_UNIFIED_IDEOGRAPH-318CD> 2
+<CJK_UNIFIED_IDEOGRAPH-318CE> 2
+<CJK_UNIFIED_IDEOGRAPH-318CF> 2
+<CJK_UNIFIED_IDEOGRAPH-318D0> 2
+<CJK_UNIFIED_IDEOGRAPH-318D1> 2
+<CJK_UNIFIED_IDEOGRAPH-318D2> 2
+<CJK_UNIFIED_IDEOGRAPH-318D3> 2
+<CJK_UNIFIED_IDEOGRAPH-318D4> 2
+<CJK_UNIFIED_IDEOGRAPH-318D5> 2
+<CJK_UNIFIED_IDEOGRAPH-318D6> 2
+<CJK_UNIFIED_IDEOGRAPH-318D7> 2
+<CJK_UNIFIED_IDEOGRAPH-318D8> 2
+<CJK_UNIFIED_IDEOGRAPH-318D9> 2
+<CJK_UNIFIED_IDEOGRAPH-318DA> 2
+<CJK_UNIFIED_IDEOGRAPH-318DB> 2
+<CJK_UNIFIED_IDEOGRAPH-318DC> 2
+<CJK_UNIFIED_IDEOGRAPH-318DD> 2
+<CJK_UNIFIED_IDEOGRAPH-318DE> 2
+<CJK_UNIFIED_IDEOGRAPH-318DF> 2
+<CJK_UNIFIED_IDEOGRAPH-318E0> 2
+<CJK_UNIFIED_IDEOGRAPH-318E1> 2
+<CJK_UNIFIED_IDEOGRAPH-318E2> 2
+<CJK_UNIFIED_IDEOGRAPH-318E3> 2
+<CJK_UNIFIED_IDEOGRAPH-318E4> 2
+<CJK_UNIFIED_IDEOGRAPH-318E5> 2
+<CJK_UNIFIED_IDEOGRAPH-318E6> 2
+<CJK_UNIFIED_IDEOGRAPH-318E7> 2
+<CJK_UNIFIED_IDEOGRAPH-318E8> 2
+<CJK_UNIFIED_IDEOGRAPH-318E9> 2
+<CJK_UNIFIED_IDEOGRAPH-318EA> 2
+<CJK_UNIFIED_IDEOGRAPH-318EB> 2
+<CJK_UNIFIED_IDEOGRAPH-318EC> 2
+<CJK_UNIFIED_IDEOGRAPH-318ED> 2
+<CJK_UNIFIED_IDEOGRAPH-318EE> 2
+<CJK_UNIFIED_IDEOGRAPH-318EF> 2
+<CJK_UNIFIED_IDEOGRAPH-318F0> 2
+<CJK_UNIFIED_IDEOGRAPH-318F1> 2
+<CJK_UNIFIED_IDEOGRAPH-318F2> 2
+<CJK_UNIFIED_IDEOGRAPH-318F3> 2
+<CJK_UNIFIED_IDEOGRAPH-318F4> 2
+<CJK_UNIFIED_IDEOGRAPH-318F5> 2
+<CJK_UNIFIED_IDEOGRAPH-318F6> 2
+<CJK_UNIFIED_IDEOGRAPH-318F7> 2
+<CJK_UNIFIED_IDEOGRAPH-318F8> 2
+<CJK_UNIFIED_IDEOGRAPH-318F9> 2
+<CJK_UNIFIED_IDEOGRAPH-318FA> 2
+<CJK_UNIFIED_IDEOGRAPH-318FB> 2
+<CJK_UNIFIED_IDEOGRAPH-318FC> 2
+<CJK_UNIFIED_IDEOGRAPH-318FD> 2
+<CJK_UNIFIED_IDEOGRAPH-318FE> 2
+<CJK_UNIFIED_IDEOGRAPH-318FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31900> 2
+<CJK_UNIFIED_IDEOGRAPH-31901> 2
+<CJK_UNIFIED_IDEOGRAPH-31902> 2
+<CJK_UNIFIED_IDEOGRAPH-31903> 2
+<CJK_UNIFIED_IDEOGRAPH-31904> 2
+<CJK_UNIFIED_IDEOGRAPH-31905> 2
+<CJK_UNIFIED_IDEOGRAPH-31906> 2
+<CJK_UNIFIED_IDEOGRAPH-31907> 2
+<CJK_UNIFIED_IDEOGRAPH-31908> 2
+<CJK_UNIFIED_IDEOGRAPH-31909> 2
+<CJK_UNIFIED_IDEOGRAPH-3190A> 2
+<CJK_UNIFIED_IDEOGRAPH-3190B> 2
+<CJK_UNIFIED_IDEOGRAPH-3190C> 2
+<CJK_UNIFIED_IDEOGRAPH-3190D> 2
+<CJK_UNIFIED_IDEOGRAPH-3190E> 2
+<CJK_UNIFIED_IDEOGRAPH-3190F> 2
+<CJK_UNIFIED_IDEOGRAPH-31910> 2
+<CJK_UNIFIED_IDEOGRAPH-31911> 2
+<CJK_UNIFIED_IDEOGRAPH-31912> 2
+<CJK_UNIFIED_IDEOGRAPH-31913> 2
+<CJK_UNIFIED_IDEOGRAPH-31914> 2
+<CJK_UNIFIED_IDEOGRAPH-31915> 2
+<CJK_UNIFIED_IDEOGRAPH-31916> 2
+<CJK_UNIFIED_IDEOGRAPH-31917> 2
+<CJK_UNIFIED_IDEOGRAPH-31918> 2
+<CJK_UNIFIED_IDEOGRAPH-31919> 2
+<CJK_UNIFIED_IDEOGRAPH-3191A> 2
+<CJK_UNIFIED_IDEOGRAPH-3191B> 2
+<CJK_UNIFIED_IDEOGRAPH-3191C> 2
+<CJK_UNIFIED_IDEOGRAPH-3191D> 2
+<CJK_UNIFIED_IDEOGRAPH-3191E> 2
+<CJK_UNIFIED_IDEOGRAPH-3191F> 2
+<CJK_UNIFIED_IDEOGRAPH-31920> 2
+<CJK_UNIFIED_IDEOGRAPH-31921> 2
+<CJK_UNIFIED_IDEOGRAPH-31922> 2
+<CJK_UNIFIED_IDEOGRAPH-31923> 2
+<CJK_UNIFIED_IDEOGRAPH-31924> 2
+<CJK_UNIFIED_IDEOGRAPH-31925> 2
+<CJK_UNIFIED_IDEOGRAPH-31926> 2
+<CJK_UNIFIED_IDEOGRAPH-31927> 2
+<CJK_UNIFIED_IDEOGRAPH-31928> 2
+<CJK_UNIFIED_IDEOGRAPH-31929> 2
+<CJK_UNIFIED_IDEOGRAPH-3192A> 2
+<CJK_UNIFIED_IDEOGRAPH-3192B> 2
+<CJK_UNIFIED_IDEOGRAPH-3192C> 2
+<CJK_UNIFIED_IDEOGRAPH-3192D> 2
+<CJK_UNIFIED_IDEOGRAPH-3192E> 2
+<CJK_UNIFIED_IDEOGRAPH-3192F> 2
+<CJK_UNIFIED_IDEOGRAPH-31930> 2
+<CJK_UNIFIED_IDEOGRAPH-31931> 2
+<CJK_UNIFIED_IDEOGRAPH-31932> 2
+<CJK_UNIFIED_IDEOGRAPH-31933> 2
+<CJK_UNIFIED_IDEOGRAPH-31934> 2
+<CJK_UNIFIED_IDEOGRAPH-31935> 2
+<CJK_UNIFIED_IDEOGRAPH-31936> 2
+<CJK_UNIFIED_IDEOGRAPH-31937> 2
+<CJK_UNIFIED_IDEOGRAPH-31938> 2
+<CJK_UNIFIED_IDEOGRAPH-31939> 2
+<CJK_UNIFIED_IDEOGRAPH-3193A> 2
+<CJK_UNIFIED_IDEOGRAPH-3193B> 2
+<CJK_UNIFIED_IDEOGRAPH-3193C> 2
+<CJK_UNIFIED_IDEOGRAPH-3193D> 2
+<CJK_UNIFIED_IDEOGRAPH-3193E> 2
+<CJK_UNIFIED_IDEOGRAPH-3193F> 2
+<CJK_UNIFIED_IDEOGRAPH-31940> 2
+<CJK_UNIFIED_IDEOGRAPH-31941> 2
+<CJK_UNIFIED_IDEOGRAPH-31942> 2
+<CJK_UNIFIED_IDEOGRAPH-31943> 2
+<CJK_UNIFIED_IDEOGRAPH-31944> 2
+<CJK_UNIFIED_IDEOGRAPH-31945> 2
+<CJK_UNIFIED_IDEOGRAPH-31946> 2
+<CJK_UNIFIED_IDEOGRAPH-31947> 2
+<CJK_UNIFIED_IDEOGRAPH-31948> 2
+<CJK_UNIFIED_IDEOGRAPH-31949> 2
+<CJK_UNIFIED_IDEOGRAPH-3194A> 2
+<CJK_UNIFIED_IDEOGRAPH-3194B> 2
+<CJK_UNIFIED_IDEOGRAPH-3194C> 2
+<CJK_UNIFIED_IDEOGRAPH-3194D> 2
+<CJK_UNIFIED_IDEOGRAPH-3194E> 2
+<CJK_UNIFIED_IDEOGRAPH-3194F> 2
+<CJK_UNIFIED_IDEOGRAPH-31950> 2
+<CJK_UNIFIED_IDEOGRAPH-31951> 2
+<CJK_UNIFIED_IDEOGRAPH-31952> 2
+<CJK_UNIFIED_IDEOGRAPH-31953> 2
+<CJK_UNIFIED_IDEOGRAPH-31954> 2
+<CJK_UNIFIED_IDEOGRAPH-31955> 2
+<CJK_UNIFIED_IDEOGRAPH-31956> 2
+<CJK_UNIFIED_IDEOGRAPH-31957> 2
+<CJK_UNIFIED_IDEOGRAPH-31958> 2
+<CJK_UNIFIED_IDEOGRAPH-31959> 2
+<CJK_UNIFIED_IDEOGRAPH-3195A> 2
+<CJK_UNIFIED_IDEOGRAPH-3195B> 2
+<CJK_UNIFIED_IDEOGRAPH-3195C> 2
+<CJK_UNIFIED_IDEOGRAPH-3195D> 2
+<CJK_UNIFIED_IDEOGRAPH-3195E> 2
+<CJK_UNIFIED_IDEOGRAPH-3195F> 2
+<CJK_UNIFIED_IDEOGRAPH-31960> 2
+<CJK_UNIFIED_IDEOGRAPH-31961> 2
+<CJK_UNIFIED_IDEOGRAPH-31962> 2
+<CJK_UNIFIED_IDEOGRAPH-31963> 2
+<CJK_UNIFIED_IDEOGRAPH-31964> 2
+<CJK_UNIFIED_IDEOGRAPH-31965> 2
+<CJK_UNIFIED_IDEOGRAPH-31966> 2
+<CJK_UNIFIED_IDEOGRAPH-31967> 2
+<CJK_UNIFIED_IDEOGRAPH-31968> 2
+<CJK_UNIFIED_IDEOGRAPH-31969> 2
+<CJK_UNIFIED_IDEOGRAPH-3196A> 2
+<CJK_UNIFIED_IDEOGRAPH-3196B> 2
+<CJK_UNIFIED_IDEOGRAPH-3196C> 2
+<CJK_UNIFIED_IDEOGRAPH-3196D> 2
+<CJK_UNIFIED_IDEOGRAPH-3196E> 2
+<CJK_UNIFIED_IDEOGRAPH-3196F> 2
+<CJK_UNIFIED_IDEOGRAPH-31970> 2
+<CJK_UNIFIED_IDEOGRAPH-31971> 2
+<CJK_UNIFIED_IDEOGRAPH-31972> 2
+<CJK_UNIFIED_IDEOGRAPH-31973> 2
+<CJK_UNIFIED_IDEOGRAPH-31974> 2
+<CJK_UNIFIED_IDEOGRAPH-31975> 2
+<CJK_UNIFIED_IDEOGRAPH-31976> 2
+<CJK_UNIFIED_IDEOGRAPH-31977> 2
+<CJK_UNIFIED_IDEOGRAPH-31978> 2
+<CJK_UNIFIED_IDEOGRAPH-31979> 2
+<CJK_UNIFIED_IDEOGRAPH-3197A> 2
+<CJK_UNIFIED_IDEOGRAPH-3197B> 2
+<CJK_UNIFIED_IDEOGRAPH-3197C> 2
+<CJK_UNIFIED_IDEOGRAPH-3197D> 2
+<CJK_UNIFIED_IDEOGRAPH-3197E> 2
+<CJK_UNIFIED_IDEOGRAPH-3197F> 2
+<CJK_UNIFIED_IDEOGRAPH-31980> 2
+<CJK_UNIFIED_IDEOGRAPH-31981> 2
+<CJK_UNIFIED_IDEOGRAPH-31982> 2
+<CJK_UNIFIED_IDEOGRAPH-31983> 2
+<CJK_UNIFIED_IDEOGRAPH-31984> 2
+<CJK_UNIFIED_IDEOGRAPH-31985> 2
+<CJK_UNIFIED_IDEOGRAPH-31986> 2
+<CJK_UNIFIED_IDEOGRAPH-31987> 2
+<CJK_UNIFIED_IDEOGRAPH-31988> 2
+<CJK_UNIFIED_IDEOGRAPH-31989> 2
+<CJK_UNIFIED_IDEOGRAPH-3198A> 2
+<CJK_UNIFIED_IDEOGRAPH-3198B> 2
+<CJK_UNIFIED_IDEOGRAPH-3198C> 2
+<CJK_UNIFIED_IDEOGRAPH-3198D> 2
+<CJK_UNIFIED_IDEOGRAPH-3198E> 2
+<CJK_UNIFIED_IDEOGRAPH-3198F> 2
+<CJK_UNIFIED_IDEOGRAPH-31990> 2
+<CJK_UNIFIED_IDEOGRAPH-31991> 2
+<CJK_UNIFIED_IDEOGRAPH-31992> 2
+<CJK_UNIFIED_IDEOGRAPH-31993> 2
+<CJK_UNIFIED_IDEOGRAPH-31994> 2
+<CJK_UNIFIED_IDEOGRAPH-31995> 2
+<CJK_UNIFIED_IDEOGRAPH-31996> 2
+<CJK_UNIFIED_IDEOGRAPH-31997> 2
+<CJK_UNIFIED_IDEOGRAPH-31998> 2
+<CJK_UNIFIED_IDEOGRAPH-31999> 2
+<CJK_UNIFIED_IDEOGRAPH-3199A> 2
+<CJK_UNIFIED_IDEOGRAPH-3199B> 2
+<CJK_UNIFIED_IDEOGRAPH-3199C> 2
+<CJK_UNIFIED_IDEOGRAPH-3199D> 2
+<CJK_UNIFIED_IDEOGRAPH-3199E> 2
+<CJK_UNIFIED_IDEOGRAPH-3199F> 2
+<CJK_UNIFIED_IDEOGRAPH-319A0> 2
+<CJK_UNIFIED_IDEOGRAPH-319A1> 2
+<CJK_UNIFIED_IDEOGRAPH-319A2> 2
+<CJK_UNIFIED_IDEOGRAPH-319A3> 2
+<CJK_UNIFIED_IDEOGRAPH-319A4> 2
+<CJK_UNIFIED_IDEOGRAPH-319A5> 2
+<CJK_UNIFIED_IDEOGRAPH-319A6> 2
+<CJK_UNIFIED_IDEOGRAPH-319A7> 2
+<CJK_UNIFIED_IDEOGRAPH-319A8> 2
+<CJK_UNIFIED_IDEOGRAPH-319A9> 2
+<CJK_UNIFIED_IDEOGRAPH-319AA> 2
+<CJK_UNIFIED_IDEOGRAPH-319AB> 2
+<CJK_UNIFIED_IDEOGRAPH-319AC> 2
+<CJK_UNIFIED_IDEOGRAPH-319AD> 2
+<CJK_UNIFIED_IDEOGRAPH-319AE> 2
+<CJK_UNIFIED_IDEOGRAPH-319AF> 2
+<CJK_UNIFIED_IDEOGRAPH-319B0> 2
+<CJK_UNIFIED_IDEOGRAPH-319B1> 2
+<CJK_UNIFIED_IDEOGRAPH-319B2> 2
+<CJK_UNIFIED_IDEOGRAPH-319B3> 2
+<CJK_UNIFIED_IDEOGRAPH-319B4> 2
+<CJK_UNIFIED_IDEOGRAPH-319B5> 2
+<CJK_UNIFIED_IDEOGRAPH-319B6> 2
+<CJK_UNIFIED_IDEOGRAPH-319B7> 2
+<CJK_UNIFIED_IDEOGRAPH-319B8> 2
+<CJK_UNIFIED_IDEOGRAPH-319B9> 2
+<CJK_UNIFIED_IDEOGRAPH-319BA> 2
+<CJK_UNIFIED_IDEOGRAPH-319BB> 2
+<CJK_UNIFIED_IDEOGRAPH-319BC> 2
+<CJK_UNIFIED_IDEOGRAPH-319BD> 2
+<CJK_UNIFIED_IDEOGRAPH-319BE> 2
+<CJK_UNIFIED_IDEOGRAPH-319BF> 2
+<CJK_UNIFIED_IDEOGRAPH-319C0> 2
+<CJK_UNIFIED_IDEOGRAPH-319C1> 2
+<CJK_UNIFIED_IDEOGRAPH-319C2> 2
+<CJK_UNIFIED_IDEOGRAPH-319C3> 2
+<CJK_UNIFIED_IDEOGRAPH-319C4> 2
+<CJK_UNIFIED_IDEOGRAPH-319C5> 2
+<CJK_UNIFIED_IDEOGRAPH-319C6> 2
+<CJK_UNIFIED_IDEOGRAPH-319C7> 2
+<CJK_UNIFIED_IDEOGRAPH-319C8> 2
+<CJK_UNIFIED_IDEOGRAPH-319C9> 2
+<CJK_UNIFIED_IDEOGRAPH-319CA> 2
+<CJK_UNIFIED_IDEOGRAPH-319CB> 2
+<CJK_UNIFIED_IDEOGRAPH-319CC> 2
+<CJK_UNIFIED_IDEOGRAPH-319CD> 2
+<CJK_UNIFIED_IDEOGRAPH-319CE> 2
+<CJK_UNIFIED_IDEOGRAPH-319CF> 2
+<CJK_UNIFIED_IDEOGRAPH-319D0> 2
+<CJK_UNIFIED_IDEOGRAPH-319D1> 2
+<CJK_UNIFIED_IDEOGRAPH-319D2> 2
+<CJK_UNIFIED_IDEOGRAPH-319D3> 2
+<CJK_UNIFIED_IDEOGRAPH-319D4> 2
+<CJK_UNIFIED_IDEOGRAPH-319D5> 2
+<CJK_UNIFIED_IDEOGRAPH-319D6> 2
+<CJK_UNIFIED_IDEOGRAPH-319D7> 2
+<CJK_UNIFIED_IDEOGRAPH-319D8> 2
+<CJK_UNIFIED_IDEOGRAPH-319D9> 2
+<CJK_UNIFIED_IDEOGRAPH-319DA> 2
+<CJK_UNIFIED_IDEOGRAPH-319DB> 2
+<CJK_UNIFIED_IDEOGRAPH-319DC> 2
+<CJK_UNIFIED_IDEOGRAPH-319DD> 2
+<CJK_UNIFIED_IDEOGRAPH-319DE> 2
+<CJK_UNIFIED_IDEOGRAPH-319DF> 2
+<CJK_UNIFIED_IDEOGRAPH-319E0> 2
+<CJK_UNIFIED_IDEOGRAPH-319E1> 2
+<CJK_UNIFIED_IDEOGRAPH-319E2> 2
+<CJK_UNIFIED_IDEOGRAPH-319E3> 2
+<CJK_UNIFIED_IDEOGRAPH-319E4> 2
+<CJK_UNIFIED_IDEOGRAPH-319E5> 2
+<CJK_UNIFIED_IDEOGRAPH-319E6> 2
+<CJK_UNIFIED_IDEOGRAPH-319E7> 2
+<CJK_UNIFIED_IDEOGRAPH-319E8> 2
+<CJK_UNIFIED_IDEOGRAPH-319E9> 2
+<CJK_UNIFIED_IDEOGRAPH-319EA> 2
+<CJK_UNIFIED_IDEOGRAPH-319EB> 2
+<CJK_UNIFIED_IDEOGRAPH-319EC> 2
+<CJK_UNIFIED_IDEOGRAPH-319ED> 2
+<CJK_UNIFIED_IDEOGRAPH-319EE> 2
+<CJK_UNIFIED_IDEOGRAPH-319EF> 2
+<CJK_UNIFIED_IDEOGRAPH-319F0> 2
+<CJK_UNIFIED_IDEOGRAPH-319F1> 2
+<CJK_UNIFIED_IDEOGRAPH-319F2> 2
+<CJK_UNIFIED_IDEOGRAPH-319F3> 2
+<CJK_UNIFIED_IDEOGRAPH-319F4> 2
+<CJK_UNIFIED_IDEOGRAPH-319F5> 2
+<CJK_UNIFIED_IDEOGRAPH-319F6> 2
+<CJK_UNIFIED_IDEOGRAPH-319F7> 2
+<CJK_UNIFIED_IDEOGRAPH-319F8> 2
+<CJK_UNIFIED_IDEOGRAPH-319F9> 2
+<CJK_UNIFIED_IDEOGRAPH-319FA> 2
+<CJK_UNIFIED_IDEOGRAPH-319FB> 2
+<CJK_UNIFIED_IDEOGRAPH-319FC> 2
+<CJK_UNIFIED_IDEOGRAPH-319FD> 2
+<CJK_UNIFIED_IDEOGRAPH-319FE> 2
+<CJK_UNIFIED_IDEOGRAPH-319FF> 2
+<CJK_UNIFIED_IDEOGRAPH-31A00> 2
+<CJK_UNIFIED_IDEOGRAPH-31A01> 2
+<CJK_UNIFIED_IDEOGRAPH-31A02> 2
+<CJK_UNIFIED_IDEOGRAPH-31A03> 2
+<CJK_UNIFIED_IDEOGRAPH-31A04> 2
+<CJK_UNIFIED_IDEOGRAPH-31A05> 2
+<CJK_UNIFIED_IDEOGRAPH-31A06> 2
+<CJK_UNIFIED_IDEOGRAPH-31A07> 2
+<CJK_UNIFIED_IDEOGRAPH-31A08> 2
+<CJK_UNIFIED_IDEOGRAPH-31A09> 2
+<CJK_UNIFIED_IDEOGRAPH-31A0A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A0B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A0C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A0D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A0E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A0F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A10> 2
+<CJK_UNIFIED_IDEOGRAPH-31A11> 2
+<CJK_UNIFIED_IDEOGRAPH-31A12> 2
+<CJK_UNIFIED_IDEOGRAPH-31A13> 2
+<CJK_UNIFIED_IDEOGRAPH-31A14> 2
+<CJK_UNIFIED_IDEOGRAPH-31A15> 2
+<CJK_UNIFIED_IDEOGRAPH-31A16> 2
+<CJK_UNIFIED_IDEOGRAPH-31A17> 2
+<CJK_UNIFIED_IDEOGRAPH-31A18> 2
+<CJK_UNIFIED_IDEOGRAPH-31A19> 2
+<CJK_UNIFIED_IDEOGRAPH-31A1A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A1B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A1C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A1D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A1E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A1F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A20> 2
+<CJK_UNIFIED_IDEOGRAPH-31A21> 2
+<CJK_UNIFIED_IDEOGRAPH-31A22> 2
+<CJK_UNIFIED_IDEOGRAPH-31A23> 2
+<CJK_UNIFIED_IDEOGRAPH-31A24> 2
+<CJK_UNIFIED_IDEOGRAPH-31A25> 2
+<CJK_UNIFIED_IDEOGRAPH-31A26> 2
+<CJK_UNIFIED_IDEOGRAPH-31A27> 2
+<CJK_UNIFIED_IDEOGRAPH-31A28> 2
+<CJK_UNIFIED_IDEOGRAPH-31A29> 2
+<CJK_UNIFIED_IDEOGRAPH-31A2A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A2B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A2C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A2D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A2E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A2F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A30> 2
+<CJK_UNIFIED_IDEOGRAPH-31A31> 2
+<CJK_UNIFIED_IDEOGRAPH-31A32> 2
+<CJK_UNIFIED_IDEOGRAPH-31A33> 2
+<CJK_UNIFIED_IDEOGRAPH-31A34> 2
+<CJK_UNIFIED_IDEOGRAPH-31A35> 2
+<CJK_UNIFIED_IDEOGRAPH-31A36> 2
+<CJK_UNIFIED_IDEOGRAPH-31A37> 2
+<CJK_UNIFIED_IDEOGRAPH-31A38> 2
+<CJK_UNIFIED_IDEOGRAPH-31A39> 2
+<CJK_UNIFIED_IDEOGRAPH-31A3A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A3B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A3C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A3D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A3E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A3F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A40> 2
+<CJK_UNIFIED_IDEOGRAPH-31A41> 2
+<CJK_UNIFIED_IDEOGRAPH-31A42> 2
+<CJK_UNIFIED_IDEOGRAPH-31A43> 2
+<CJK_UNIFIED_IDEOGRAPH-31A44> 2
+<CJK_UNIFIED_IDEOGRAPH-31A45> 2
+<CJK_UNIFIED_IDEOGRAPH-31A46> 2
+<CJK_UNIFIED_IDEOGRAPH-31A47> 2
+<CJK_UNIFIED_IDEOGRAPH-31A48> 2
+<CJK_UNIFIED_IDEOGRAPH-31A49> 2
+<CJK_UNIFIED_IDEOGRAPH-31A4A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A4B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A4C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A4D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A4E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A4F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A50> 2
+<CJK_UNIFIED_IDEOGRAPH-31A51> 2
+<CJK_UNIFIED_IDEOGRAPH-31A52> 2
+<CJK_UNIFIED_IDEOGRAPH-31A53> 2
+<CJK_UNIFIED_IDEOGRAPH-31A54> 2
+<CJK_UNIFIED_IDEOGRAPH-31A55> 2
+<CJK_UNIFIED_IDEOGRAPH-31A56> 2
+<CJK_UNIFIED_IDEOGRAPH-31A57> 2
+<CJK_UNIFIED_IDEOGRAPH-31A58> 2
+<CJK_UNIFIED_IDEOGRAPH-31A59> 2
+<CJK_UNIFIED_IDEOGRAPH-31A5A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A5B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A5C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A5D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A5E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A5F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A60> 2
+<CJK_UNIFIED_IDEOGRAPH-31A61> 2
+<CJK_UNIFIED_IDEOGRAPH-31A62> 2
+<CJK_UNIFIED_IDEOGRAPH-31A63> 2
+<CJK_UNIFIED_IDEOGRAPH-31A64> 2
+<CJK_UNIFIED_IDEOGRAPH-31A65> 2
+<CJK_UNIFIED_IDEOGRAPH-31A66> 2
+<CJK_UNIFIED_IDEOGRAPH-31A67> 2
+<CJK_UNIFIED_IDEOGRAPH-31A68> 2
+<CJK_UNIFIED_IDEOGRAPH-31A69> 2
+<CJK_UNIFIED_IDEOGRAPH-31A6A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A6B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A6C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A6D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A6E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A6F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A70> 2
+<CJK_UNIFIED_IDEOGRAPH-31A71> 2
+<CJK_UNIFIED_IDEOGRAPH-31A72> 2
+<CJK_UNIFIED_IDEOGRAPH-31A73> 2
+<CJK_UNIFIED_IDEOGRAPH-31A74> 2
+<CJK_UNIFIED_IDEOGRAPH-31A75> 2
+<CJK_UNIFIED_IDEOGRAPH-31A76> 2
+<CJK_UNIFIED_IDEOGRAPH-31A77> 2
+<CJK_UNIFIED_IDEOGRAPH-31A78> 2
+<CJK_UNIFIED_IDEOGRAPH-31A79> 2
+<CJK_UNIFIED_IDEOGRAPH-31A7A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A7B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A7C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A7D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A7E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A7F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A80> 2
+<CJK_UNIFIED_IDEOGRAPH-31A81> 2
+<CJK_UNIFIED_IDEOGRAPH-31A82> 2
+<CJK_UNIFIED_IDEOGRAPH-31A83> 2
+<CJK_UNIFIED_IDEOGRAPH-31A84> 2
+<CJK_UNIFIED_IDEOGRAPH-31A85> 2
+<CJK_UNIFIED_IDEOGRAPH-31A86> 2
+<CJK_UNIFIED_IDEOGRAPH-31A87> 2
+<CJK_UNIFIED_IDEOGRAPH-31A88> 2
+<CJK_UNIFIED_IDEOGRAPH-31A89> 2
+<CJK_UNIFIED_IDEOGRAPH-31A8A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A8B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A8C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A8D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A8E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A8F> 2
+<CJK_UNIFIED_IDEOGRAPH-31A90> 2
+<CJK_UNIFIED_IDEOGRAPH-31A91> 2
+<CJK_UNIFIED_IDEOGRAPH-31A92> 2
+<CJK_UNIFIED_IDEOGRAPH-31A93> 2
+<CJK_UNIFIED_IDEOGRAPH-31A94> 2
+<CJK_UNIFIED_IDEOGRAPH-31A95> 2
+<CJK_UNIFIED_IDEOGRAPH-31A96> 2
+<CJK_UNIFIED_IDEOGRAPH-31A97> 2
+<CJK_UNIFIED_IDEOGRAPH-31A98> 2
+<CJK_UNIFIED_IDEOGRAPH-31A99> 2
+<CJK_UNIFIED_IDEOGRAPH-31A9A> 2
+<CJK_UNIFIED_IDEOGRAPH-31A9B> 2
+<CJK_UNIFIED_IDEOGRAPH-31A9C> 2
+<CJK_UNIFIED_IDEOGRAPH-31A9D> 2
+<CJK_UNIFIED_IDEOGRAPH-31A9E> 2
+<CJK_UNIFIED_IDEOGRAPH-31A9F> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA0> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA1> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA2> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA3> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA4> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA5> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA6> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA7> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA8> 2
+<CJK_UNIFIED_IDEOGRAPH-31AA9> 2
+<CJK_UNIFIED_IDEOGRAPH-31AAA> 2
+<CJK_UNIFIED_IDEOGRAPH-31AAB> 2
+<CJK_UNIFIED_IDEOGRAPH-31AAC> 2
+<CJK_UNIFIED_IDEOGRAPH-31AAD> 2
+<CJK_UNIFIED_IDEOGRAPH-31AAE> 2
+<CJK_UNIFIED_IDEOGRAPH-31AAF> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB0> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB1> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB2> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB3> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB4> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB5> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB6> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB7> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB8> 2
+<CJK_UNIFIED_IDEOGRAPH-31AB9> 2
+<CJK_UNIFIED_IDEOGRAPH-31ABA> 2
+<CJK_UNIFIED_IDEOGRAPH-31ABB> 2
+<CJK_UNIFIED_IDEOGRAPH-31ABC> 2
+<CJK_UNIFIED_IDEOGRAPH-31ABD> 2
+<CJK_UNIFIED_IDEOGRAPH-31ABE> 2
+<CJK_UNIFIED_IDEOGRAPH-31ABF> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC0> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC1> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC2> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC3> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC4> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC5> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC6> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC7> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC8> 2
+<CJK_UNIFIED_IDEOGRAPH-31AC9> 2
+<CJK_UNIFIED_IDEOGRAPH-31ACA> 2
+<CJK_UNIFIED_IDEOGRAPH-31ACB> 2
+<CJK_UNIFIED_IDEOGRAPH-31ACC> 2
+<CJK_UNIFIED_IDEOGRAPH-31ACD> 2
+<CJK_UNIFIED_IDEOGRAPH-31ACE> 2
+<CJK_UNIFIED_IDEOGRAPH-31ACF> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD0> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD1> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD2> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD3> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD4> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD5> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD6> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD7> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD8> 2
+<CJK_UNIFIED_IDEOGRAPH-31AD9> 2
+<CJK_UNIFIED_IDEOGRAPH-31ADA> 2
+<CJK_UNIFIED_IDEOGRAPH-31ADB> 2
+<CJK_UNIFIED_IDEOGRAPH-31ADC> 2
+<CJK_UNIFIED_IDEOGRAPH-31ADD> 2
+<CJK_UNIFIED_IDEOGRAPH-31ADE> 2
+<CJK_UNIFIED_IDEOGRAPH-31ADF> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE0> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE1> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE2> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE3> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE4> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE5> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE6> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE7> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE8> 2
+<CJK_UNIFIED_IDEOGRAPH-31AE9> 2
+<CJK_UNIFIED_IDEOGRAPH-31AEA> 2
+<CJK_UNIFIED_IDEOGRAPH-31AEB> 2
+<CJK_UNIFIED_IDEOGRAPH-31AEC> 2
+<CJK_UNIFIED_IDEOGRAPH-31AED> 2
+<CJK_UNIFIED_IDEOGRAPH-31AEE> 2
+<CJK_UNIFIED_IDEOGRAPH-31AEF> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF0> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF1> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF2> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF3> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF4> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF5> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF6> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF7> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF8> 2
+<CJK_UNIFIED_IDEOGRAPH-31AF9> 2
+<CJK_UNIFIED_IDEOGRAPH-31AFA> 2
+<CJK_UNIFIED_IDEOGRAPH-31AFB> 2
+<CJK_UNIFIED_IDEOGRAPH-31AFC> 2
+<CJK_UNIFIED_IDEOGRAPH-31AFD> 2
+<CJK_UNIFIED_IDEOGRAPH-31AFE> 2
+<CJK_UNIFIED_IDEOGRAPH-31AFF> 2
+<CJK_UNIFIED_IDEOGRAPH-31B00> 2
+<CJK_UNIFIED_IDEOGRAPH-31B01> 2
+<CJK_UNIFIED_IDEOGRAPH-31B02> 2
+<CJK_UNIFIED_IDEOGRAPH-31B03> 2
+<CJK_UNIFIED_IDEOGRAPH-31B04> 2
+<CJK_UNIFIED_IDEOGRAPH-31B05> 2
+<CJK_UNIFIED_IDEOGRAPH-31B06> 2
+<CJK_UNIFIED_IDEOGRAPH-31B07> 2
+<CJK_UNIFIED_IDEOGRAPH-31B08> 2
+<CJK_UNIFIED_IDEOGRAPH-31B09> 2
+<CJK_UNIFIED_IDEOGRAPH-31B0A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B0B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B0C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B0D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B0E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B0F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B10> 2
+<CJK_UNIFIED_IDEOGRAPH-31B11> 2
+<CJK_UNIFIED_IDEOGRAPH-31B12> 2
+<CJK_UNIFIED_IDEOGRAPH-31B13> 2
+<CJK_UNIFIED_IDEOGRAPH-31B14> 2
+<CJK_UNIFIED_IDEOGRAPH-31B15> 2
+<CJK_UNIFIED_IDEOGRAPH-31B16> 2
+<CJK_UNIFIED_IDEOGRAPH-31B17> 2
+<CJK_UNIFIED_IDEOGRAPH-31B18> 2
+<CJK_UNIFIED_IDEOGRAPH-31B19> 2
+<CJK_UNIFIED_IDEOGRAPH-31B1A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B1B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B1C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B1D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B1E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B1F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B20> 2
+<CJK_UNIFIED_IDEOGRAPH-31B21> 2
+<CJK_UNIFIED_IDEOGRAPH-31B22> 2
+<CJK_UNIFIED_IDEOGRAPH-31B23> 2
+<CJK_UNIFIED_IDEOGRAPH-31B24> 2
+<CJK_UNIFIED_IDEOGRAPH-31B25> 2
+<CJK_UNIFIED_IDEOGRAPH-31B26> 2
+<CJK_UNIFIED_IDEOGRAPH-31B27> 2
+<CJK_UNIFIED_IDEOGRAPH-31B28> 2
+<CJK_UNIFIED_IDEOGRAPH-31B29> 2
+<CJK_UNIFIED_IDEOGRAPH-31B2A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B2B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B2C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B2D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B2E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B2F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B30> 2
+<CJK_UNIFIED_IDEOGRAPH-31B31> 2
+<CJK_UNIFIED_IDEOGRAPH-31B32> 2
+<CJK_UNIFIED_IDEOGRAPH-31B33> 2
+<CJK_UNIFIED_IDEOGRAPH-31B34> 2
+<CJK_UNIFIED_IDEOGRAPH-31B35> 2
+<CJK_UNIFIED_IDEOGRAPH-31B36> 2
+<CJK_UNIFIED_IDEOGRAPH-31B37> 2
+<CJK_UNIFIED_IDEOGRAPH-31B38> 2
+<CJK_UNIFIED_IDEOGRAPH-31B39> 2
+<CJK_UNIFIED_IDEOGRAPH-31B3A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B3B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B3C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B3D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B3E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B3F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B40> 2
+<CJK_UNIFIED_IDEOGRAPH-31B41> 2
+<CJK_UNIFIED_IDEOGRAPH-31B42> 2
+<CJK_UNIFIED_IDEOGRAPH-31B43> 2
+<CJK_UNIFIED_IDEOGRAPH-31B44> 2
+<CJK_UNIFIED_IDEOGRAPH-31B45> 2
+<CJK_UNIFIED_IDEOGRAPH-31B46> 2
+<CJK_UNIFIED_IDEOGRAPH-31B47> 2
+<CJK_UNIFIED_IDEOGRAPH-31B48> 2
+<CJK_UNIFIED_IDEOGRAPH-31B49> 2
+<CJK_UNIFIED_IDEOGRAPH-31B4A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B4B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B4C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B4D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B4E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B4F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B50> 2
+<CJK_UNIFIED_IDEOGRAPH-31B51> 2
+<CJK_UNIFIED_IDEOGRAPH-31B52> 2
+<CJK_UNIFIED_IDEOGRAPH-31B53> 2
+<CJK_UNIFIED_IDEOGRAPH-31B54> 2
+<CJK_UNIFIED_IDEOGRAPH-31B55> 2
+<CJK_UNIFIED_IDEOGRAPH-31B56> 2
+<CJK_UNIFIED_IDEOGRAPH-31B57> 2
+<CJK_UNIFIED_IDEOGRAPH-31B58> 2
+<CJK_UNIFIED_IDEOGRAPH-31B59> 2
+<CJK_UNIFIED_IDEOGRAPH-31B5A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B5B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B5C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B5D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B5E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B5F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B60> 2
+<CJK_UNIFIED_IDEOGRAPH-31B61> 2
+<CJK_UNIFIED_IDEOGRAPH-31B62> 2
+<CJK_UNIFIED_IDEOGRAPH-31B63> 2
+<CJK_UNIFIED_IDEOGRAPH-31B64> 2
+<CJK_UNIFIED_IDEOGRAPH-31B65> 2
+<CJK_UNIFIED_IDEOGRAPH-31B66> 2
+<CJK_UNIFIED_IDEOGRAPH-31B67> 2
+<CJK_UNIFIED_IDEOGRAPH-31B68> 2
+<CJK_UNIFIED_IDEOGRAPH-31B69> 2
+<CJK_UNIFIED_IDEOGRAPH-31B6A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B6B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B6C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B6D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B6E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B6F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B70> 2
+<CJK_UNIFIED_IDEOGRAPH-31B71> 2
+<CJK_UNIFIED_IDEOGRAPH-31B72> 2
+<CJK_UNIFIED_IDEOGRAPH-31B73> 2
+<CJK_UNIFIED_IDEOGRAPH-31B74> 2
+<CJK_UNIFIED_IDEOGRAPH-31B75> 2
+<CJK_UNIFIED_IDEOGRAPH-31B76> 2
+<CJK_UNIFIED_IDEOGRAPH-31B77> 2
+<CJK_UNIFIED_IDEOGRAPH-31B78> 2
+<CJK_UNIFIED_IDEOGRAPH-31B79> 2
+<CJK_UNIFIED_IDEOGRAPH-31B7A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B7B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B7C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B7D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B7E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B7F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B80> 2
+<CJK_UNIFIED_IDEOGRAPH-31B81> 2
+<CJK_UNIFIED_IDEOGRAPH-31B82> 2
+<CJK_UNIFIED_IDEOGRAPH-31B83> 2
+<CJK_UNIFIED_IDEOGRAPH-31B84> 2
+<CJK_UNIFIED_IDEOGRAPH-31B85> 2
+<CJK_UNIFIED_IDEOGRAPH-31B86> 2
+<CJK_UNIFIED_IDEOGRAPH-31B87> 2
+<CJK_UNIFIED_IDEOGRAPH-31B88> 2
+<CJK_UNIFIED_IDEOGRAPH-31B89> 2
+<CJK_UNIFIED_IDEOGRAPH-31B8A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B8B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B8C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B8D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B8E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B8F> 2
+<CJK_UNIFIED_IDEOGRAPH-31B90> 2
+<CJK_UNIFIED_IDEOGRAPH-31B91> 2
+<CJK_UNIFIED_IDEOGRAPH-31B92> 2
+<CJK_UNIFIED_IDEOGRAPH-31B93> 2
+<CJK_UNIFIED_IDEOGRAPH-31B94> 2
+<CJK_UNIFIED_IDEOGRAPH-31B95> 2
+<CJK_UNIFIED_IDEOGRAPH-31B96> 2
+<CJK_UNIFIED_IDEOGRAPH-31B97> 2
+<CJK_UNIFIED_IDEOGRAPH-31B98> 2
+<CJK_UNIFIED_IDEOGRAPH-31B99> 2
+<CJK_UNIFIED_IDEOGRAPH-31B9A> 2
+<CJK_UNIFIED_IDEOGRAPH-31B9B> 2
+<CJK_UNIFIED_IDEOGRAPH-31B9C> 2
+<CJK_UNIFIED_IDEOGRAPH-31B9D> 2
+<CJK_UNIFIED_IDEOGRAPH-31B9E> 2
+<CJK_UNIFIED_IDEOGRAPH-31B9F> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA0> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA1> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA2> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA3> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA4> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA5> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA6> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA7> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA8> 2
+<CJK_UNIFIED_IDEOGRAPH-31BA9> 2
+<CJK_UNIFIED_IDEOGRAPH-31BAA> 2
+<CJK_UNIFIED_IDEOGRAPH-31BAB> 2
+<CJK_UNIFIED_IDEOGRAPH-31BAC> 2
+<CJK_UNIFIED_IDEOGRAPH-31BAD> 2
+<CJK_UNIFIED_IDEOGRAPH-31BAE> 2
+<CJK_UNIFIED_IDEOGRAPH-31BAF> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB0> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB1> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB2> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB3> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB4> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB5> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB6> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB7> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB8> 2
+<CJK_UNIFIED_IDEOGRAPH-31BB9> 2
+<CJK_UNIFIED_IDEOGRAPH-31BBA> 2
+<CJK_UNIFIED_IDEOGRAPH-31BBB> 2
+<CJK_UNIFIED_IDEOGRAPH-31BBC> 2
+<CJK_UNIFIED_IDEOGRAPH-31BBD> 2
+<CJK_UNIFIED_IDEOGRAPH-31BBE> 2
+<CJK_UNIFIED_IDEOGRAPH-31BBF> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC0> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC1> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC2> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC3> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC4> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC5> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC6> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC7> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC8> 2
+<CJK_UNIFIED_IDEOGRAPH-31BC9> 2
+<CJK_UNIFIED_IDEOGRAPH-31BCA> 2
+<CJK_UNIFIED_IDEOGRAPH-31BCB> 2
+<CJK_UNIFIED_IDEOGRAPH-31BCC> 2
+<CJK_UNIFIED_IDEOGRAPH-31BCD> 2
+<CJK_UNIFIED_IDEOGRAPH-31BCE> 2
+<CJK_UNIFIED_IDEOGRAPH-31BCF> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD0> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD1> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD2> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD3> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD4> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD5> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD6> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD7> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD8> 2
+<CJK_UNIFIED_IDEOGRAPH-31BD9> 2
+<CJK_UNIFIED_IDEOGRAPH-31BDA> 2
+<CJK_UNIFIED_IDEOGRAPH-31BDB> 2
+<CJK_UNIFIED_IDEOGRAPH-31BDC> 2
+<CJK_UNIFIED_IDEOGRAPH-31BDD> 2
+<CJK_UNIFIED_IDEOGRAPH-31BDE> 2
+<CJK_UNIFIED_IDEOGRAPH-31BDF> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE0> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE1> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE2> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE3> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE4> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE5> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE6> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE7> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE8> 2
+<CJK_UNIFIED_IDEOGRAPH-31BE9> 2
+<CJK_UNIFIED_IDEOGRAPH-31BEA> 2
+<CJK_UNIFIED_IDEOGRAPH-31BEB> 2
+<CJK_UNIFIED_IDEOGRAPH-31BEC> 2
+<CJK_UNIFIED_IDEOGRAPH-31BED> 2
+<CJK_UNIFIED_IDEOGRAPH-31BEE> 2
+<CJK_UNIFIED_IDEOGRAPH-31BEF> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF0> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF1> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF2> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF3> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF4> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF5> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF6> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF7> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF8> 2
+<CJK_UNIFIED_IDEOGRAPH-31BF9> 2
+<CJK_UNIFIED_IDEOGRAPH-31BFA> 2
+<CJK_UNIFIED_IDEOGRAPH-31BFB> 2
+<CJK_UNIFIED_IDEOGRAPH-31BFC> 2
+<CJK_UNIFIED_IDEOGRAPH-31BFD> 2
+<CJK_UNIFIED_IDEOGRAPH-31BFE> 2
+<CJK_UNIFIED_IDEOGRAPH-31BFF> 2
+<CJK_UNIFIED_IDEOGRAPH-31C00> 2
+<CJK_UNIFIED_IDEOGRAPH-31C01> 2
+<CJK_UNIFIED_IDEOGRAPH-31C02> 2
+<CJK_UNIFIED_IDEOGRAPH-31C03> 2
+<CJK_UNIFIED_IDEOGRAPH-31C04> 2
+<CJK_UNIFIED_IDEOGRAPH-31C05> 2
+<CJK_UNIFIED_IDEOGRAPH-31C06> 2
+<CJK_UNIFIED_IDEOGRAPH-31C07> 2
+<CJK_UNIFIED_IDEOGRAPH-31C08> 2
+<CJK_UNIFIED_IDEOGRAPH-31C09> 2
+<CJK_UNIFIED_IDEOGRAPH-31C0A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C0B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C0C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C0D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C0E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C0F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C10> 2
+<CJK_UNIFIED_IDEOGRAPH-31C11> 2
+<CJK_UNIFIED_IDEOGRAPH-31C12> 2
+<CJK_UNIFIED_IDEOGRAPH-31C13> 2
+<CJK_UNIFIED_IDEOGRAPH-31C14> 2
+<CJK_UNIFIED_IDEOGRAPH-31C15> 2
+<CJK_UNIFIED_IDEOGRAPH-31C16> 2
+<CJK_UNIFIED_IDEOGRAPH-31C17> 2
+<CJK_UNIFIED_IDEOGRAPH-31C18> 2
+<CJK_UNIFIED_IDEOGRAPH-31C19> 2
+<CJK_UNIFIED_IDEOGRAPH-31C1A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C1B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C1C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C1D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C1E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C1F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C20> 2
+<CJK_UNIFIED_IDEOGRAPH-31C21> 2
+<CJK_UNIFIED_IDEOGRAPH-31C22> 2
+<CJK_UNIFIED_IDEOGRAPH-31C23> 2
+<CJK_UNIFIED_IDEOGRAPH-31C24> 2
+<CJK_UNIFIED_IDEOGRAPH-31C25> 2
+<CJK_UNIFIED_IDEOGRAPH-31C26> 2
+<CJK_UNIFIED_IDEOGRAPH-31C27> 2
+<CJK_UNIFIED_IDEOGRAPH-31C28> 2
+<CJK_UNIFIED_IDEOGRAPH-31C29> 2
+<CJK_UNIFIED_IDEOGRAPH-31C2A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C2B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C2C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C2D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C2E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C2F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C30> 2
+<CJK_UNIFIED_IDEOGRAPH-31C31> 2
+<CJK_UNIFIED_IDEOGRAPH-31C32> 2
+<CJK_UNIFIED_IDEOGRAPH-31C33> 2
+<CJK_UNIFIED_IDEOGRAPH-31C34> 2
+<CJK_UNIFIED_IDEOGRAPH-31C35> 2
+<CJK_UNIFIED_IDEOGRAPH-31C36> 2
+<CJK_UNIFIED_IDEOGRAPH-31C37> 2
+<CJK_UNIFIED_IDEOGRAPH-31C38> 2
+<CJK_UNIFIED_IDEOGRAPH-31C39> 2
+<CJK_UNIFIED_IDEOGRAPH-31C3A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C3B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C3C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C3D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C3E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C3F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C40> 2
+<CJK_UNIFIED_IDEOGRAPH-31C41> 2
+<CJK_UNIFIED_IDEOGRAPH-31C42> 2
+<CJK_UNIFIED_IDEOGRAPH-31C43> 2
+<CJK_UNIFIED_IDEOGRAPH-31C44> 2
+<CJK_UNIFIED_IDEOGRAPH-31C45> 2
+<CJK_UNIFIED_IDEOGRAPH-31C46> 2
+<CJK_UNIFIED_IDEOGRAPH-31C47> 2
+<CJK_UNIFIED_IDEOGRAPH-31C48> 2
+<CJK_UNIFIED_IDEOGRAPH-31C49> 2
+<CJK_UNIFIED_IDEOGRAPH-31C4A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C4B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C4C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C4D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C4E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C4F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C50> 2
+<CJK_UNIFIED_IDEOGRAPH-31C51> 2
+<CJK_UNIFIED_IDEOGRAPH-31C52> 2
+<CJK_UNIFIED_IDEOGRAPH-31C53> 2
+<CJK_UNIFIED_IDEOGRAPH-31C54> 2
+<CJK_UNIFIED_IDEOGRAPH-31C55> 2
+<CJK_UNIFIED_IDEOGRAPH-31C56> 2
+<CJK_UNIFIED_IDEOGRAPH-31C57> 2
+<CJK_UNIFIED_IDEOGRAPH-31C58> 2
+<CJK_UNIFIED_IDEOGRAPH-31C59> 2
+<CJK_UNIFIED_IDEOGRAPH-31C5A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C5B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C5C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C5D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C5E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C5F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C60> 2
+<CJK_UNIFIED_IDEOGRAPH-31C61> 2
+<CJK_UNIFIED_IDEOGRAPH-31C62> 2
+<CJK_UNIFIED_IDEOGRAPH-31C63> 2
+<CJK_UNIFIED_IDEOGRAPH-31C64> 2
+<CJK_UNIFIED_IDEOGRAPH-31C65> 2
+<CJK_UNIFIED_IDEOGRAPH-31C66> 2
+<CJK_UNIFIED_IDEOGRAPH-31C67> 2
+<CJK_UNIFIED_IDEOGRAPH-31C68> 2
+<CJK_UNIFIED_IDEOGRAPH-31C69> 2
+<CJK_UNIFIED_IDEOGRAPH-31C6A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C6B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C6C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C6D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C6E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C6F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C70> 2
+<CJK_UNIFIED_IDEOGRAPH-31C71> 2
+<CJK_UNIFIED_IDEOGRAPH-31C72> 2
+<CJK_UNIFIED_IDEOGRAPH-31C73> 2
+<CJK_UNIFIED_IDEOGRAPH-31C74> 2
+<CJK_UNIFIED_IDEOGRAPH-31C75> 2
+<CJK_UNIFIED_IDEOGRAPH-31C76> 2
+<CJK_UNIFIED_IDEOGRAPH-31C77> 2
+<CJK_UNIFIED_IDEOGRAPH-31C78> 2
+<CJK_UNIFIED_IDEOGRAPH-31C79> 2
+<CJK_UNIFIED_IDEOGRAPH-31C7A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C7B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C7C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C7D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C7E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C7F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C80> 2
+<CJK_UNIFIED_IDEOGRAPH-31C81> 2
+<CJK_UNIFIED_IDEOGRAPH-31C82> 2
+<CJK_UNIFIED_IDEOGRAPH-31C83> 2
+<CJK_UNIFIED_IDEOGRAPH-31C84> 2
+<CJK_UNIFIED_IDEOGRAPH-31C85> 2
+<CJK_UNIFIED_IDEOGRAPH-31C86> 2
+<CJK_UNIFIED_IDEOGRAPH-31C87> 2
+<CJK_UNIFIED_IDEOGRAPH-31C88> 2
+<CJK_UNIFIED_IDEOGRAPH-31C89> 2
+<CJK_UNIFIED_IDEOGRAPH-31C8A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C8B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C8C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C8D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C8E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C8F> 2
+<CJK_UNIFIED_IDEOGRAPH-31C90> 2
+<CJK_UNIFIED_IDEOGRAPH-31C91> 2
+<CJK_UNIFIED_IDEOGRAPH-31C92> 2
+<CJK_UNIFIED_IDEOGRAPH-31C93> 2
+<CJK_UNIFIED_IDEOGRAPH-31C94> 2
+<CJK_UNIFIED_IDEOGRAPH-31C95> 2
+<CJK_UNIFIED_IDEOGRAPH-31C96> 2
+<CJK_UNIFIED_IDEOGRAPH-31C97> 2
+<CJK_UNIFIED_IDEOGRAPH-31C98> 2
+<CJK_UNIFIED_IDEOGRAPH-31C99> 2
+<CJK_UNIFIED_IDEOGRAPH-31C9A> 2
+<CJK_UNIFIED_IDEOGRAPH-31C9B> 2
+<CJK_UNIFIED_IDEOGRAPH-31C9C> 2
+<CJK_UNIFIED_IDEOGRAPH-31C9D> 2
+<CJK_UNIFIED_IDEOGRAPH-31C9E> 2
+<CJK_UNIFIED_IDEOGRAPH-31C9F> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA0> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA1> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA2> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA3> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA4> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA5> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA6> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA7> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA8> 2
+<CJK_UNIFIED_IDEOGRAPH-31CA9> 2
+<CJK_UNIFIED_IDEOGRAPH-31CAA> 2
+<CJK_UNIFIED_IDEOGRAPH-31CAB> 2
+<CJK_UNIFIED_IDEOGRAPH-31CAC> 2
+<CJK_UNIFIED_IDEOGRAPH-31CAD> 2
+<CJK_UNIFIED_IDEOGRAPH-31CAE> 2
+<CJK_UNIFIED_IDEOGRAPH-31CAF> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB0> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB1> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB2> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB3> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB4> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB5> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB6> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB7> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB8> 2
+<CJK_UNIFIED_IDEOGRAPH-31CB9> 2
+<CJK_UNIFIED_IDEOGRAPH-31CBA> 2
+<CJK_UNIFIED_IDEOGRAPH-31CBB> 2
+<CJK_UNIFIED_IDEOGRAPH-31CBC> 2
+<CJK_UNIFIED_IDEOGRAPH-31CBD> 2
+<CJK_UNIFIED_IDEOGRAPH-31CBE> 2
+<CJK_UNIFIED_IDEOGRAPH-31CBF> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC0> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC1> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC2> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC3> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC4> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC5> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC6> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC7> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC8> 2
+<CJK_UNIFIED_IDEOGRAPH-31CC9> 2
+<CJK_UNIFIED_IDEOGRAPH-31CCA> 2
+<CJK_UNIFIED_IDEOGRAPH-31CCB> 2
+<CJK_UNIFIED_IDEOGRAPH-31CCC> 2
+<CJK_UNIFIED_IDEOGRAPH-31CCD> 2
+<CJK_UNIFIED_IDEOGRAPH-31CCE> 2
+<CJK_UNIFIED_IDEOGRAPH-31CCF> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD0> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD1> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD2> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD3> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD4> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD5> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD6> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD7> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD8> 2
+<CJK_UNIFIED_IDEOGRAPH-31CD9> 2
+<CJK_UNIFIED_IDEOGRAPH-31CDA> 2
+<CJK_UNIFIED_IDEOGRAPH-31CDB> 2
+<CJK_UNIFIED_IDEOGRAPH-31CDC> 2
+<CJK_UNIFIED_IDEOGRAPH-31CDD> 2
+<CJK_UNIFIED_IDEOGRAPH-31CDE> 2
+<CJK_UNIFIED_IDEOGRAPH-31CDF> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE0> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE1> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE2> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE3> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE4> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE5> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE6> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE7> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE8> 2
+<CJK_UNIFIED_IDEOGRAPH-31CE9> 2
+<CJK_UNIFIED_IDEOGRAPH-31CEA> 2
+<CJK_UNIFIED_IDEOGRAPH-31CEB> 2
+<CJK_UNIFIED_IDEOGRAPH-31CEC> 2
+<CJK_UNIFIED_IDEOGRAPH-31CED> 2
+<CJK_UNIFIED_IDEOGRAPH-31CEE> 2
+<CJK_UNIFIED_IDEOGRAPH-31CEF> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF0> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF1> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF2> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF3> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF4> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF5> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF6> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF7> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF8> 2
+<CJK_UNIFIED_IDEOGRAPH-31CF9> 2
+<CJK_UNIFIED_IDEOGRAPH-31CFA> 2
+<CJK_UNIFIED_IDEOGRAPH-31CFB> 2
+<CJK_UNIFIED_IDEOGRAPH-31CFC> 2
+<CJK_UNIFIED_IDEOGRAPH-31CFD> 2
+<CJK_UNIFIED_IDEOGRAPH-31CFE> 2
+<CJK_UNIFIED_IDEOGRAPH-31CFF> 2
+<CJK_UNIFIED_IDEOGRAPH-31D00> 2
+<CJK_UNIFIED_IDEOGRAPH-31D01> 2
+<CJK_UNIFIED_IDEOGRAPH-31D02> 2
+<CJK_UNIFIED_IDEOGRAPH-31D03> 2
+<CJK_UNIFIED_IDEOGRAPH-31D04> 2
+<CJK_UNIFIED_IDEOGRAPH-31D05> 2
+<CJK_UNIFIED_IDEOGRAPH-31D06> 2
+<CJK_UNIFIED_IDEOGRAPH-31D07> 2
+<CJK_UNIFIED_IDEOGRAPH-31D08> 2
+<CJK_UNIFIED_IDEOGRAPH-31D09> 2
+<CJK_UNIFIED_IDEOGRAPH-31D0A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D0B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D0C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D0D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D0E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D0F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D10> 2
+<CJK_UNIFIED_IDEOGRAPH-31D11> 2
+<CJK_UNIFIED_IDEOGRAPH-31D12> 2
+<CJK_UNIFIED_IDEOGRAPH-31D13> 2
+<CJK_UNIFIED_IDEOGRAPH-31D14> 2
+<CJK_UNIFIED_IDEOGRAPH-31D15> 2
+<CJK_UNIFIED_IDEOGRAPH-31D16> 2
+<CJK_UNIFIED_IDEOGRAPH-31D17> 2
+<CJK_UNIFIED_IDEOGRAPH-31D18> 2
+<CJK_UNIFIED_IDEOGRAPH-31D19> 2
+<CJK_UNIFIED_IDEOGRAPH-31D1A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D1B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D1C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D1D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D1E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D1F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D20> 2
+<CJK_UNIFIED_IDEOGRAPH-31D21> 2
+<CJK_UNIFIED_IDEOGRAPH-31D22> 2
+<CJK_UNIFIED_IDEOGRAPH-31D23> 2
+<CJK_UNIFIED_IDEOGRAPH-31D24> 2
+<CJK_UNIFIED_IDEOGRAPH-31D25> 2
+<CJK_UNIFIED_IDEOGRAPH-31D26> 2
+<CJK_UNIFIED_IDEOGRAPH-31D27> 2
+<CJK_UNIFIED_IDEOGRAPH-31D28> 2
+<CJK_UNIFIED_IDEOGRAPH-31D29> 2
+<CJK_UNIFIED_IDEOGRAPH-31D2A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D2B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D2C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D2D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D2E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D2F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D30> 2
+<CJK_UNIFIED_IDEOGRAPH-31D31> 2
+<CJK_UNIFIED_IDEOGRAPH-31D32> 2
+<CJK_UNIFIED_IDEOGRAPH-31D33> 2
+<CJK_UNIFIED_IDEOGRAPH-31D34> 2
+<CJK_UNIFIED_IDEOGRAPH-31D35> 2
+<CJK_UNIFIED_IDEOGRAPH-31D36> 2
+<CJK_UNIFIED_IDEOGRAPH-31D37> 2
+<CJK_UNIFIED_IDEOGRAPH-31D38> 2
+<CJK_UNIFIED_IDEOGRAPH-31D39> 2
+<CJK_UNIFIED_IDEOGRAPH-31D3A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D3B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D3C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D3D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D3E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D3F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D40> 2
+<CJK_UNIFIED_IDEOGRAPH-31D41> 2
+<CJK_UNIFIED_IDEOGRAPH-31D42> 2
+<CJK_UNIFIED_IDEOGRAPH-31D43> 2
+<CJK_UNIFIED_IDEOGRAPH-31D44> 2
+<CJK_UNIFIED_IDEOGRAPH-31D45> 2
+<CJK_UNIFIED_IDEOGRAPH-31D46> 2
+<CJK_UNIFIED_IDEOGRAPH-31D47> 2
+<CJK_UNIFIED_IDEOGRAPH-31D48> 2
+<CJK_UNIFIED_IDEOGRAPH-31D49> 2
+<CJK_UNIFIED_IDEOGRAPH-31D4A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D4B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D4C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D4D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D4E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D4F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D50> 2
+<CJK_UNIFIED_IDEOGRAPH-31D51> 2
+<CJK_UNIFIED_IDEOGRAPH-31D52> 2
+<CJK_UNIFIED_IDEOGRAPH-31D53> 2
+<CJK_UNIFIED_IDEOGRAPH-31D54> 2
+<CJK_UNIFIED_IDEOGRAPH-31D55> 2
+<CJK_UNIFIED_IDEOGRAPH-31D56> 2
+<CJK_UNIFIED_IDEOGRAPH-31D57> 2
+<CJK_UNIFIED_IDEOGRAPH-31D58> 2
+<CJK_UNIFIED_IDEOGRAPH-31D59> 2
+<CJK_UNIFIED_IDEOGRAPH-31D5A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D5B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D5C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D5D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D5E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D5F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D60> 2
+<CJK_UNIFIED_IDEOGRAPH-31D61> 2
+<CJK_UNIFIED_IDEOGRAPH-31D62> 2
+<CJK_UNIFIED_IDEOGRAPH-31D63> 2
+<CJK_UNIFIED_IDEOGRAPH-31D64> 2
+<CJK_UNIFIED_IDEOGRAPH-31D65> 2
+<CJK_UNIFIED_IDEOGRAPH-31D66> 2
+<CJK_UNIFIED_IDEOGRAPH-31D67> 2
+<CJK_UNIFIED_IDEOGRAPH-31D68> 2
+<CJK_UNIFIED_IDEOGRAPH-31D69> 2
+<CJK_UNIFIED_IDEOGRAPH-31D6A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D6B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D6C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D6D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D6E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D6F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D70> 2
+<CJK_UNIFIED_IDEOGRAPH-31D71> 2
+<CJK_UNIFIED_IDEOGRAPH-31D72> 2
+<CJK_UNIFIED_IDEOGRAPH-31D73> 2
+<CJK_UNIFIED_IDEOGRAPH-31D74> 2
+<CJK_UNIFIED_IDEOGRAPH-31D75> 2
+<CJK_UNIFIED_IDEOGRAPH-31D76> 2
+<CJK_UNIFIED_IDEOGRAPH-31D77> 2
+<CJK_UNIFIED_IDEOGRAPH-31D78> 2
+<CJK_UNIFIED_IDEOGRAPH-31D79> 2
+<CJK_UNIFIED_IDEOGRAPH-31D7A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D7B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D7C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D7D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D7E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D7F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D80> 2
+<CJK_UNIFIED_IDEOGRAPH-31D81> 2
+<CJK_UNIFIED_IDEOGRAPH-31D82> 2
+<CJK_UNIFIED_IDEOGRAPH-31D83> 2
+<CJK_UNIFIED_IDEOGRAPH-31D84> 2
+<CJK_UNIFIED_IDEOGRAPH-31D85> 2
+<CJK_UNIFIED_IDEOGRAPH-31D86> 2
+<CJK_UNIFIED_IDEOGRAPH-31D87> 2
+<CJK_UNIFIED_IDEOGRAPH-31D88> 2
+<CJK_UNIFIED_IDEOGRAPH-31D89> 2
+<CJK_UNIFIED_IDEOGRAPH-31D8A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D8B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D8C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D8D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D8E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D8F> 2
+<CJK_UNIFIED_IDEOGRAPH-31D90> 2
+<CJK_UNIFIED_IDEOGRAPH-31D91> 2
+<CJK_UNIFIED_IDEOGRAPH-31D92> 2
+<CJK_UNIFIED_IDEOGRAPH-31D93> 2
+<CJK_UNIFIED_IDEOGRAPH-31D94> 2
+<CJK_UNIFIED_IDEOGRAPH-31D95> 2
+<CJK_UNIFIED_IDEOGRAPH-31D96> 2
+<CJK_UNIFIED_IDEOGRAPH-31D97> 2
+<CJK_UNIFIED_IDEOGRAPH-31D98> 2
+<CJK_UNIFIED_IDEOGRAPH-31D99> 2
+<CJK_UNIFIED_IDEOGRAPH-31D9A> 2
+<CJK_UNIFIED_IDEOGRAPH-31D9B> 2
+<CJK_UNIFIED_IDEOGRAPH-31D9C> 2
+<CJK_UNIFIED_IDEOGRAPH-31D9D> 2
+<CJK_UNIFIED_IDEOGRAPH-31D9E> 2
+<CJK_UNIFIED_IDEOGRAPH-31D9F> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA0> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA1> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA2> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA3> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA4> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA5> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA6> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA7> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA8> 2
+<CJK_UNIFIED_IDEOGRAPH-31DA9> 2
+<CJK_UNIFIED_IDEOGRAPH-31DAA> 2
+<CJK_UNIFIED_IDEOGRAPH-31DAB> 2
+<CJK_UNIFIED_IDEOGRAPH-31DAC> 2
+<CJK_UNIFIED_IDEOGRAPH-31DAD> 2
+<CJK_UNIFIED_IDEOGRAPH-31DAE> 2
+<CJK_UNIFIED_IDEOGRAPH-31DAF> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB0> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB1> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB2> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB3> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB4> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB5> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB6> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB7> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB8> 2
+<CJK_UNIFIED_IDEOGRAPH-31DB9> 2
+<CJK_UNIFIED_IDEOGRAPH-31DBA> 2
+<CJK_UNIFIED_IDEOGRAPH-31DBB> 2
+<CJK_UNIFIED_IDEOGRAPH-31DBC> 2
+<CJK_UNIFIED_IDEOGRAPH-31DBD> 2
+<CJK_UNIFIED_IDEOGRAPH-31DBE> 2
+<CJK_UNIFIED_IDEOGRAPH-31DBF> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC0> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC1> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC2> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC3> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC4> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC5> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC6> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC7> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC8> 2
+<CJK_UNIFIED_IDEOGRAPH-31DC9> 2
+<CJK_UNIFIED_IDEOGRAPH-31DCA> 2
+<CJK_UNIFIED_IDEOGRAPH-31DCB> 2
+<CJK_UNIFIED_IDEOGRAPH-31DCC> 2
+<CJK_UNIFIED_IDEOGRAPH-31DCD> 2
+<CJK_UNIFIED_IDEOGRAPH-31DCE> 2
+<CJK_UNIFIED_IDEOGRAPH-31DCF> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD0> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD1> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD2> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD3> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD4> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD5> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD6> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD7> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD8> 2
+<CJK_UNIFIED_IDEOGRAPH-31DD9> 2
+<CJK_UNIFIED_IDEOGRAPH-31DDA> 2
+<CJK_UNIFIED_IDEOGRAPH-31DDB> 2
+<CJK_UNIFIED_IDEOGRAPH-31DDC> 2
+<CJK_UNIFIED_IDEOGRAPH-31DDD> 2
+<CJK_UNIFIED_IDEOGRAPH-31DDE> 2
+<CJK_UNIFIED_IDEOGRAPH-31DDF> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE0> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE1> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE2> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE3> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE4> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE5> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE6> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE7> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE8> 2
+<CJK_UNIFIED_IDEOGRAPH-31DE9> 2
+<CJK_UNIFIED_IDEOGRAPH-31DEA> 2
+<CJK_UNIFIED_IDEOGRAPH-31DEB> 2
+<CJK_UNIFIED_IDEOGRAPH-31DEC> 2
+<CJK_UNIFIED_IDEOGRAPH-31DED> 2
+<CJK_UNIFIED_IDEOGRAPH-31DEE> 2
+<CJK_UNIFIED_IDEOGRAPH-31DEF> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF0> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF1> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF2> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF3> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF4> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF5> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF6> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF7> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF8> 2
+<CJK_UNIFIED_IDEOGRAPH-31DF9> 2
+<CJK_UNIFIED_IDEOGRAPH-31DFA> 2
+<CJK_UNIFIED_IDEOGRAPH-31DFB> 2
+<CJK_UNIFIED_IDEOGRAPH-31DFC> 2
+<CJK_UNIFIED_IDEOGRAPH-31DFD> 2
+<CJK_UNIFIED_IDEOGRAPH-31DFE> 2
+<CJK_UNIFIED_IDEOGRAPH-31DFF> 2
+<CJK_UNIFIED_IDEOGRAPH-31E00> 2
+<CJK_UNIFIED_IDEOGRAPH-31E01> 2
+<CJK_UNIFIED_IDEOGRAPH-31E02> 2
+<CJK_UNIFIED_IDEOGRAPH-31E03> 2
+<CJK_UNIFIED_IDEOGRAPH-31E04> 2
+<CJK_UNIFIED_IDEOGRAPH-31E05> 2
+<CJK_UNIFIED_IDEOGRAPH-31E06> 2
+<CJK_UNIFIED_IDEOGRAPH-31E07> 2
+<CJK_UNIFIED_IDEOGRAPH-31E08> 2
+<CJK_UNIFIED_IDEOGRAPH-31E09> 2
+<CJK_UNIFIED_IDEOGRAPH-31E0A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E0B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E0C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E0D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E0E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E0F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E10> 2
+<CJK_UNIFIED_IDEOGRAPH-31E11> 2
+<CJK_UNIFIED_IDEOGRAPH-31E12> 2
+<CJK_UNIFIED_IDEOGRAPH-31E13> 2
+<CJK_UNIFIED_IDEOGRAPH-31E14> 2
+<CJK_UNIFIED_IDEOGRAPH-31E15> 2
+<CJK_UNIFIED_IDEOGRAPH-31E16> 2
+<CJK_UNIFIED_IDEOGRAPH-31E17> 2
+<CJK_UNIFIED_IDEOGRAPH-31E18> 2
+<CJK_UNIFIED_IDEOGRAPH-31E19> 2
+<CJK_UNIFIED_IDEOGRAPH-31E1A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E1B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E1C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E1D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E1E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E1F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E20> 2
+<CJK_UNIFIED_IDEOGRAPH-31E21> 2
+<CJK_UNIFIED_IDEOGRAPH-31E22> 2
+<CJK_UNIFIED_IDEOGRAPH-31E23> 2
+<CJK_UNIFIED_IDEOGRAPH-31E24> 2
+<CJK_UNIFIED_IDEOGRAPH-31E25> 2
+<CJK_UNIFIED_IDEOGRAPH-31E26> 2
+<CJK_UNIFIED_IDEOGRAPH-31E27> 2
+<CJK_UNIFIED_IDEOGRAPH-31E28> 2
+<CJK_UNIFIED_IDEOGRAPH-31E29> 2
+<CJK_UNIFIED_IDEOGRAPH-31E2A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E2B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E2C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E2D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E2E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E2F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E30> 2
+<CJK_UNIFIED_IDEOGRAPH-31E31> 2
+<CJK_UNIFIED_IDEOGRAPH-31E32> 2
+<CJK_UNIFIED_IDEOGRAPH-31E33> 2
+<CJK_UNIFIED_IDEOGRAPH-31E34> 2
+<CJK_UNIFIED_IDEOGRAPH-31E35> 2
+<CJK_UNIFIED_IDEOGRAPH-31E36> 2
+<CJK_UNIFIED_IDEOGRAPH-31E37> 2
+<CJK_UNIFIED_IDEOGRAPH-31E38> 2
+<CJK_UNIFIED_IDEOGRAPH-31E39> 2
+<CJK_UNIFIED_IDEOGRAPH-31E3A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E3B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E3C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E3D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E3E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E3F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E40> 2
+<CJK_UNIFIED_IDEOGRAPH-31E41> 2
+<CJK_UNIFIED_IDEOGRAPH-31E42> 2
+<CJK_UNIFIED_IDEOGRAPH-31E43> 2
+<CJK_UNIFIED_IDEOGRAPH-31E44> 2
+<CJK_UNIFIED_IDEOGRAPH-31E45> 2
+<CJK_UNIFIED_IDEOGRAPH-31E46> 2
+<CJK_UNIFIED_IDEOGRAPH-31E47> 2
+<CJK_UNIFIED_IDEOGRAPH-31E48> 2
+<CJK_UNIFIED_IDEOGRAPH-31E49> 2
+<CJK_UNIFIED_IDEOGRAPH-31E4A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E4B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E4C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E4D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E4E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E4F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E50> 2
+<CJK_UNIFIED_IDEOGRAPH-31E51> 2
+<CJK_UNIFIED_IDEOGRAPH-31E52> 2
+<CJK_UNIFIED_IDEOGRAPH-31E53> 2
+<CJK_UNIFIED_IDEOGRAPH-31E54> 2
+<CJK_UNIFIED_IDEOGRAPH-31E55> 2
+<CJK_UNIFIED_IDEOGRAPH-31E56> 2
+<CJK_UNIFIED_IDEOGRAPH-31E57> 2
+<CJK_UNIFIED_IDEOGRAPH-31E58> 2
+<CJK_UNIFIED_IDEOGRAPH-31E59> 2
+<CJK_UNIFIED_IDEOGRAPH-31E5A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E5B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E5C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E5D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E5E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E5F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E60> 2
+<CJK_UNIFIED_IDEOGRAPH-31E61> 2
+<CJK_UNIFIED_IDEOGRAPH-31E62> 2
+<CJK_UNIFIED_IDEOGRAPH-31E63> 2
+<CJK_UNIFIED_IDEOGRAPH-31E64> 2
+<CJK_UNIFIED_IDEOGRAPH-31E65> 2
+<CJK_UNIFIED_IDEOGRAPH-31E66> 2
+<CJK_UNIFIED_IDEOGRAPH-31E67> 2
+<CJK_UNIFIED_IDEOGRAPH-31E68> 2
+<CJK_UNIFIED_IDEOGRAPH-31E69> 2
+<CJK_UNIFIED_IDEOGRAPH-31E6A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E6B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E6C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E6D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E6E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E6F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E70> 2
+<CJK_UNIFIED_IDEOGRAPH-31E71> 2
+<CJK_UNIFIED_IDEOGRAPH-31E72> 2
+<CJK_UNIFIED_IDEOGRAPH-31E73> 2
+<CJK_UNIFIED_IDEOGRAPH-31E74> 2
+<CJK_UNIFIED_IDEOGRAPH-31E75> 2
+<CJK_UNIFIED_IDEOGRAPH-31E76> 2
+<CJK_UNIFIED_IDEOGRAPH-31E77> 2
+<CJK_UNIFIED_IDEOGRAPH-31E78> 2
+<CJK_UNIFIED_IDEOGRAPH-31E79> 2
+<CJK_UNIFIED_IDEOGRAPH-31E7A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E7B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E7C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E7D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E7E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E7F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E80> 2
+<CJK_UNIFIED_IDEOGRAPH-31E81> 2
+<CJK_UNIFIED_IDEOGRAPH-31E82> 2
+<CJK_UNIFIED_IDEOGRAPH-31E83> 2
+<CJK_UNIFIED_IDEOGRAPH-31E84> 2
+<CJK_UNIFIED_IDEOGRAPH-31E85> 2
+<CJK_UNIFIED_IDEOGRAPH-31E86> 2
+<CJK_UNIFIED_IDEOGRAPH-31E87> 2
+<CJK_UNIFIED_IDEOGRAPH-31E88> 2
+<CJK_UNIFIED_IDEOGRAPH-31E89> 2
+<CJK_UNIFIED_IDEOGRAPH-31E8A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E8B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E8C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E8D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E8E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E8F> 2
+<CJK_UNIFIED_IDEOGRAPH-31E90> 2
+<CJK_UNIFIED_IDEOGRAPH-31E91> 2
+<CJK_UNIFIED_IDEOGRAPH-31E92> 2
+<CJK_UNIFIED_IDEOGRAPH-31E93> 2
+<CJK_UNIFIED_IDEOGRAPH-31E94> 2
+<CJK_UNIFIED_IDEOGRAPH-31E95> 2
+<CJK_UNIFIED_IDEOGRAPH-31E96> 2
+<CJK_UNIFIED_IDEOGRAPH-31E97> 2
+<CJK_UNIFIED_IDEOGRAPH-31E98> 2
+<CJK_UNIFIED_IDEOGRAPH-31E99> 2
+<CJK_UNIFIED_IDEOGRAPH-31E9A> 2
+<CJK_UNIFIED_IDEOGRAPH-31E9B> 2
+<CJK_UNIFIED_IDEOGRAPH-31E9C> 2
+<CJK_UNIFIED_IDEOGRAPH-31E9D> 2
+<CJK_UNIFIED_IDEOGRAPH-31E9E> 2
+<CJK_UNIFIED_IDEOGRAPH-31E9F> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA0> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA1> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA2> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA3> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA4> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA5> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA6> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA7> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA8> 2
+<CJK_UNIFIED_IDEOGRAPH-31EA9> 2
+<CJK_UNIFIED_IDEOGRAPH-31EAA> 2
+<CJK_UNIFIED_IDEOGRAPH-31EAB> 2
+<CJK_UNIFIED_IDEOGRAPH-31EAC> 2
+<CJK_UNIFIED_IDEOGRAPH-31EAD> 2
+<CJK_UNIFIED_IDEOGRAPH-31EAE> 2
+<CJK_UNIFIED_IDEOGRAPH-31EAF> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB0> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB1> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB2> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB3> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB4> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB5> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB6> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB7> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB8> 2
+<CJK_UNIFIED_IDEOGRAPH-31EB9> 2
+<CJK_UNIFIED_IDEOGRAPH-31EBA> 2
+<CJK_UNIFIED_IDEOGRAPH-31EBB> 2
+<CJK_UNIFIED_IDEOGRAPH-31EBC> 2
+<CJK_UNIFIED_IDEOGRAPH-31EBD> 2
+<CJK_UNIFIED_IDEOGRAPH-31EBE> 2
+<CJK_UNIFIED_IDEOGRAPH-31EBF> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC0> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC1> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC2> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC3> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC4> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC5> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC6> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC7> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC8> 2
+<CJK_UNIFIED_IDEOGRAPH-31EC9> 2
+<CJK_UNIFIED_IDEOGRAPH-31ECA> 2
+<CJK_UNIFIED_IDEOGRAPH-31ECB> 2
+<CJK_UNIFIED_IDEOGRAPH-31ECC> 2
+<CJK_UNIFIED_IDEOGRAPH-31ECD> 2
+<CJK_UNIFIED_IDEOGRAPH-31ECE> 2
+<CJK_UNIFIED_IDEOGRAPH-31ECF> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED0> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED1> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED2> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED3> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED4> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED5> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED6> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED7> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED8> 2
+<CJK_UNIFIED_IDEOGRAPH-31ED9> 2
+<CJK_UNIFIED_IDEOGRAPH-31EDA> 2
+<CJK_UNIFIED_IDEOGRAPH-31EDB> 2
+<CJK_UNIFIED_IDEOGRAPH-31EDC> 2
+<CJK_UNIFIED_IDEOGRAPH-31EDD> 2
+<CJK_UNIFIED_IDEOGRAPH-31EDE> 2
+<CJK_UNIFIED_IDEOGRAPH-31EDF> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE0> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE1> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE2> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE3> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE4> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE5> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE6> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE7> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE8> 2
+<CJK_UNIFIED_IDEOGRAPH-31EE9> 2
+<CJK_UNIFIED_IDEOGRAPH-31EEA> 2
+<CJK_UNIFIED_IDEOGRAPH-31EEB> 2
+<CJK_UNIFIED_IDEOGRAPH-31EEC> 2
+<CJK_UNIFIED_IDEOGRAPH-31EED> 2
+<CJK_UNIFIED_IDEOGRAPH-31EEE> 2
+<CJK_UNIFIED_IDEOGRAPH-31EEF> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF0> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF1> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF2> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF3> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF4> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF5> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF6> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF7> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF8> 2
+<CJK_UNIFIED_IDEOGRAPH-31EF9> 2
+<CJK_UNIFIED_IDEOGRAPH-31EFA> 2
+<CJK_UNIFIED_IDEOGRAPH-31EFB> 2
+<CJK_UNIFIED_IDEOGRAPH-31EFC> 2
+<CJK_UNIFIED_IDEOGRAPH-31EFD> 2
+<CJK_UNIFIED_IDEOGRAPH-31EFE> 2
+<CJK_UNIFIED_IDEOGRAPH-31EFF> 2
+<CJK_UNIFIED_IDEOGRAPH-31F00> 2
+<CJK_UNIFIED_IDEOGRAPH-31F01> 2
+<CJK_UNIFIED_IDEOGRAPH-31F02> 2
+<CJK_UNIFIED_IDEOGRAPH-31F03> 2
+<CJK_UNIFIED_IDEOGRAPH-31F04> 2
+<CJK_UNIFIED_IDEOGRAPH-31F05> 2
+<CJK_UNIFIED_IDEOGRAPH-31F06> 2
+<CJK_UNIFIED_IDEOGRAPH-31F07> 2
+<CJK_UNIFIED_IDEOGRAPH-31F08> 2
+<CJK_UNIFIED_IDEOGRAPH-31F09> 2
+<CJK_UNIFIED_IDEOGRAPH-31F0A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F0B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F0C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F0D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F0E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F0F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F10> 2
+<CJK_UNIFIED_IDEOGRAPH-31F11> 2
+<CJK_UNIFIED_IDEOGRAPH-31F12> 2
+<CJK_UNIFIED_IDEOGRAPH-31F13> 2
+<CJK_UNIFIED_IDEOGRAPH-31F14> 2
+<CJK_UNIFIED_IDEOGRAPH-31F15> 2
+<CJK_UNIFIED_IDEOGRAPH-31F16> 2
+<CJK_UNIFIED_IDEOGRAPH-31F17> 2
+<CJK_UNIFIED_IDEOGRAPH-31F18> 2
+<CJK_UNIFIED_IDEOGRAPH-31F19> 2
+<CJK_UNIFIED_IDEOGRAPH-31F1A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F1B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F1C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F1D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F1E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F1F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F20> 2
+<CJK_UNIFIED_IDEOGRAPH-31F21> 2
+<CJK_UNIFIED_IDEOGRAPH-31F22> 2
+<CJK_UNIFIED_IDEOGRAPH-31F23> 2
+<CJK_UNIFIED_IDEOGRAPH-31F24> 2
+<CJK_UNIFIED_IDEOGRAPH-31F25> 2
+<CJK_UNIFIED_IDEOGRAPH-31F26> 2
+<CJK_UNIFIED_IDEOGRAPH-31F27> 2
+<CJK_UNIFIED_IDEOGRAPH-31F28> 2
+<CJK_UNIFIED_IDEOGRAPH-31F29> 2
+<CJK_UNIFIED_IDEOGRAPH-31F2A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F2B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F2C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F2D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F2E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F2F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F30> 2
+<CJK_UNIFIED_IDEOGRAPH-31F31> 2
+<CJK_UNIFIED_IDEOGRAPH-31F32> 2
+<CJK_UNIFIED_IDEOGRAPH-31F33> 2
+<CJK_UNIFIED_IDEOGRAPH-31F34> 2
+<CJK_UNIFIED_IDEOGRAPH-31F35> 2
+<CJK_UNIFIED_IDEOGRAPH-31F36> 2
+<CJK_UNIFIED_IDEOGRAPH-31F37> 2
+<CJK_UNIFIED_IDEOGRAPH-31F38> 2
+<CJK_UNIFIED_IDEOGRAPH-31F39> 2
+<CJK_UNIFIED_IDEOGRAPH-31F3A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F3B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F3C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F3D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F3E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F3F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F40> 2
+<CJK_UNIFIED_IDEOGRAPH-31F41> 2
+<CJK_UNIFIED_IDEOGRAPH-31F42> 2
+<CJK_UNIFIED_IDEOGRAPH-31F43> 2
+<CJK_UNIFIED_IDEOGRAPH-31F44> 2
+<CJK_UNIFIED_IDEOGRAPH-31F45> 2
+<CJK_UNIFIED_IDEOGRAPH-31F46> 2
+<CJK_UNIFIED_IDEOGRAPH-31F47> 2
+<CJK_UNIFIED_IDEOGRAPH-31F48> 2
+<CJK_UNIFIED_IDEOGRAPH-31F49> 2
+<CJK_UNIFIED_IDEOGRAPH-31F4A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F4B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F4C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F4D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F4E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F4F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F50> 2
+<CJK_UNIFIED_IDEOGRAPH-31F51> 2
+<CJK_UNIFIED_IDEOGRAPH-31F52> 2
+<CJK_UNIFIED_IDEOGRAPH-31F53> 2
+<CJK_UNIFIED_IDEOGRAPH-31F54> 2
+<CJK_UNIFIED_IDEOGRAPH-31F55> 2
+<CJK_UNIFIED_IDEOGRAPH-31F56> 2
+<CJK_UNIFIED_IDEOGRAPH-31F57> 2
+<CJK_UNIFIED_IDEOGRAPH-31F58> 2
+<CJK_UNIFIED_IDEOGRAPH-31F59> 2
+<CJK_UNIFIED_IDEOGRAPH-31F5A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F5B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F5C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F5D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F5E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F5F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F60> 2
+<CJK_UNIFIED_IDEOGRAPH-31F61> 2
+<CJK_UNIFIED_IDEOGRAPH-31F62> 2
+<CJK_UNIFIED_IDEOGRAPH-31F63> 2
+<CJK_UNIFIED_IDEOGRAPH-31F64> 2
+<CJK_UNIFIED_IDEOGRAPH-31F65> 2
+<CJK_UNIFIED_IDEOGRAPH-31F66> 2
+<CJK_UNIFIED_IDEOGRAPH-31F67> 2
+<CJK_UNIFIED_IDEOGRAPH-31F68> 2
+<CJK_UNIFIED_IDEOGRAPH-31F69> 2
+<CJK_UNIFIED_IDEOGRAPH-31F6A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F6B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F6C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F6D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F6E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F6F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F70> 2
+<CJK_UNIFIED_IDEOGRAPH-31F71> 2
+<CJK_UNIFIED_IDEOGRAPH-31F72> 2
+<CJK_UNIFIED_IDEOGRAPH-31F73> 2
+<CJK_UNIFIED_IDEOGRAPH-31F74> 2
+<CJK_UNIFIED_IDEOGRAPH-31F75> 2
+<CJK_UNIFIED_IDEOGRAPH-31F76> 2
+<CJK_UNIFIED_IDEOGRAPH-31F77> 2
+<CJK_UNIFIED_IDEOGRAPH-31F78> 2
+<CJK_UNIFIED_IDEOGRAPH-31F79> 2
+<CJK_UNIFIED_IDEOGRAPH-31F7A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F7B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F7C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F7D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F7E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F7F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F80> 2
+<CJK_UNIFIED_IDEOGRAPH-31F81> 2
+<CJK_UNIFIED_IDEOGRAPH-31F82> 2
+<CJK_UNIFIED_IDEOGRAPH-31F83> 2
+<CJK_UNIFIED_IDEOGRAPH-31F84> 2
+<CJK_UNIFIED_IDEOGRAPH-31F85> 2
+<CJK_UNIFIED_IDEOGRAPH-31F86> 2
+<CJK_UNIFIED_IDEOGRAPH-31F87> 2
+<CJK_UNIFIED_IDEOGRAPH-31F88> 2
+<CJK_UNIFIED_IDEOGRAPH-31F89> 2
+<CJK_UNIFIED_IDEOGRAPH-31F8A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F8B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F8C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F8D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F8E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F8F> 2
+<CJK_UNIFIED_IDEOGRAPH-31F90> 2
+<CJK_UNIFIED_IDEOGRAPH-31F91> 2
+<CJK_UNIFIED_IDEOGRAPH-31F92> 2
+<CJK_UNIFIED_IDEOGRAPH-31F93> 2
+<CJK_UNIFIED_IDEOGRAPH-31F94> 2
+<CJK_UNIFIED_IDEOGRAPH-31F95> 2
+<CJK_UNIFIED_IDEOGRAPH-31F96> 2
+<CJK_UNIFIED_IDEOGRAPH-31F97> 2
+<CJK_UNIFIED_IDEOGRAPH-31F98> 2
+<CJK_UNIFIED_IDEOGRAPH-31F99> 2
+<CJK_UNIFIED_IDEOGRAPH-31F9A> 2
+<CJK_UNIFIED_IDEOGRAPH-31F9B> 2
+<CJK_UNIFIED_IDEOGRAPH-31F9C> 2
+<CJK_UNIFIED_IDEOGRAPH-31F9D> 2
+<CJK_UNIFIED_IDEOGRAPH-31F9E> 2
+<CJK_UNIFIED_IDEOGRAPH-31F9F> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA0> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA1> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA2> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA3> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA4> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA5> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA6> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA7> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA8> 2
+<CJK_UNIFIED_IDEOGRAPH-31FA9> 2
+<CJK_UNIFIED_IDEOGRAPH-31FAA> 2
+<CJK_UNIFIED_IDEOGRAPH-31FAB> 2
+<CJK_UNIFIED_IDEOGRAPH-31FAC> 2
+<CJK_UNIFIED_IDEOGRAPH-31FAD> 2
+<CJK_UNIFIED_IDEOGRAPH-31FAE> 2
+<CJK_UNIFIED_IDEOGRAPH-31FAF> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB0> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB1> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB2> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB3> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB4> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB5> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB6> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB7> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB8> 2
+<CJK_UNIFIED_IDEOGRAPH-31FB9> 2
+<CJK_UNIFIED_IDEOGRAPH-31FBA> 2
+<CJK_UNIFIED_IDEOGRAPH-31FBB> 2
+<CJK_UNIFIED_IDEOGRAPH-31FBC> 2
+<CJK_UNIFIED_IDEOGRAPH-31FBD> 2
+<CJK_UNIFIED_IDEOGRAPH-31FBE> 2
+<CJK_UNIFIED_IDEOGRAPH-31FBF> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC0> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC1> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC2> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC3> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC4> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC5> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC6> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC7> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC8> 2
+<CJK_UNIFIED_IDEOGRAPH-31FC9> 2
+<CJK_UNIFIED_IDEOGRAPH-31FCA> 2
+<CJK_UNIFIED_IDEOGRAPH-31FCB> 2
+<CJK_UNIFIED_IDEOGRAPH-31FCC> 2
+<CJK_UNIFIED_IDEOGRAPH-31FCD> 2
+<CJK_UNIFIED_IDEOGRAPH-31FCE> 2
+<CJK_UNIFIED_IDEOGRAPH-31FCF> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD0> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD1> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD2> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD3> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD4> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD5> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD6> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD7> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD8> 2
+<CJK_UNIFIED_IDEOGRAPH-31FD9> 2
+<CJK_UNIFIED_IDEOGRAPH-31FDA> 2
+<CJK_UNIFIED_IDEOGRAPH-31FDB> 2
+<CJK_UNIFIED_IDEOGRAPH-31FDC> 2
+<CJK_UNIFIED_IDEOGRAPH-31FDD> 2
+<CJK_UNIFIED_IDEOGRAPH-31FDE> 2
+<CJK_UNIFIED_IDEOGRAPH-31FDF> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE0> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE1> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE2> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE3> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE4> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE5> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE6> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE7> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE8> 2
+<CJK_UNIFIED_IDEOGRAPH-31FE9> 2
+<CJK_UNIFIED_IDEOGRAPH-31FEA> 2
+<CJK_UNIFIED_IDEOGRAPH-31FEB> 2
+<CJK_UNIFIED_IDEOGRAPH-31FEC> 2
+<CJK_UNIFIED_IDEOGRAPH-31FED> 2
+<CJK_UNIFIED_IDEOGRAPH-31FEE> 2
+<CJK_UNIFIED_IDEOGRAPH-31FEF> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF0> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF1> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF2> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF3> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF4> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF5> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF6> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF7> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF8> 2
+<CJK_UNIFIED_IDEOGRAPH-31FF9> 2
+<CJK_UNIFIED_IDEOGRAPH-31FFA> 2
+<CJK_UNIFIED_IDEOGRAPH-31FFB> 2
+<CJK_UNIFIED_IDEOGRAPH-31FFC> 2
+<CJK_UNIFIED_IDEOGRAPH-31FFD> 2
+<CJK_UNIFIED_IDEOGRAPH-31FFE> 2
+<CJK_UNIFIED_IDEOGRAPH-31FFF> 2
+<CJK_UNIFIED_IDEOGRAPH-32000> 2
+<CJK_UNIFIED_IDEOGRAPH-32001> 2
+<CJK_UNIFIED_IDEOGRAPH-32002> 2
+<CJK_UNIFIED_IDEOGRAPH-32003> 2
+<CJK_UNIFIED_IDEOGRAPH-32004> 2
+<CJK_UNIFIED_IDEOGRAPH-32005> 2
+<CJK_UNIFIED_IDEOGRAPH-32006> 2
+<CJK_UNIFIED_IDEOGRAPH-32007> 2
+<CJK_UNIFIED_IDEOGRAPH-32008> 2
+<CJK_UNIFIED_IDEOGRAPH-32009> 2
+<CJK_UNIFIED_IDEOGRAPH-3200A> 2
+<CJK_UNIFIED_IDEOGRAPH-3200B> 2
+<CJK_UNIFIED_IDEOGRAPH-3200C> 2
+<CJK_UNIFIED_IDEOGRAPH-3200D> 2
+<CJK_UNIFIED_IDEOGRAPH-3200E> 2
+<CJK_UNIFIED_IDEOGRAPH-3200F> 2
+<CJK_UNIFIED_IDEOGRAPH-32010> 2
+<CJK_UNIFIED_IDEOGRAPH-32011> 2
+<CJK_UNIFIED_IDEOGRAPH-32012> 2
+<CJK_UNIFIED_IDEOGRAPH-32013> 2
+<CJK_UNIFIED_IDEOGRAPH-32014> 2
+<CJK_UNIFIED_IDEOGRAPH-32015> 2
+<CJK_UNIFIED_IDEOGRAPH-32016> 2
+<CJK_UNIFIED_IDEOGRAPH-32017> 2
+<CJK_UNIFIED_IDEOGRAPH-32018> 2
+<CJK_UNIFIED_IDEOGRAPH-32019> 2
+<CJK_UNIFIED_IDEOGRAPH-3201A> 2
+<CJK_UNIFIED_IDEOGRAPH-3201B> 2
+<CJK_UNIFIED_IDEOGRAPH-3201C> 2
+<CJK_UNIFIED_IDEOGRAPH-3201D> 2
+<CJK_UNIFIED_IDEOGRAPH-3201E> 2
+<CJK_UNIFIED_IDEOGRAPH-3201F> 2
+<CJK_UNIFIED_IDEOGRAPH-32020> 2
+<CJK_UNIFIED_IDEOGRAPH-32021> 2
+<CJK_UNIFIED_IDEOGRAPH-32022> 2
+<CJK_UNIFIED_IDEOGRAPH-32023> 2
+<CJK_UNIFIED_IDEOGRAPH-32024> 2
+<CJK_UNIFIED_IDEOGRAPH-32025> 2
+<CJK_UNIFIED_IDEOGRAPH-32026> 2
+<CJK_UNIFIED_IDEOGRAPH-32027> 2
+<CJK_UNIFIED_IDEOGRAPH-32028> 2
+<CJK_UNIFIED_IDEOGRAPH-32029> 2
+<CJK_UNIFIED_IDEOGRAPH-3202A> 2
+<CJK_UNIFIED_IDEOGRAPH-3202B> 2
+<CJK_UNIFIED_IDEOGRAPH-3202C> 2
+<CJK_UNIFIED_IDEOGRAPH-3202D> 2
+<CJK_UNIFIED_IDEOGRAPH-3202E> 2
+<CJK_UNIFIED_IDEOGRAPH-3202F> 2
+<CJK_UNIFIED_IDEOGRAPH-32030> 2
+<CJK_UNIFIED_IDEOGRAPH-32031> 2
+<CJK_UNIFIED_IDEOGRAPH-32032> 2
+<CJK_UNIFIED_IDEOGRAPH-32033> 2
+<CJK_UNIFIED_IDEOGRAPH-32034> 2
+<CJK_UNIFIED_IDEOGRAPH-32035> 2
+<CJK_UNIFIED_IDEOGRAPH-32036> 2
+<CJK_UNIFIED_IDEOGRAPH-32037> 2
+<CJK_UNIFIED_IDEOGRAPH-32038> 2
+<CJK_UNIFIED_IDEOGRAPH-32039> 2
+<CJK_UNIFIED_IDEOGRAPH-3203A> 2
+<CJK_UNIFIED_IDEOGRAPH-3203B> 2
+<CJK_UNIFIED_IDEOGRAPH-3203C> 2
+<CJK_UNIFIED_IDEOGRAPH-3203D> 2
+<CJK_UNIFIED_IDEOGRAPH-3203E> 2
+<CJK_UNIFIED_IDEOGRAPH-3203F> 2
+<CJK_UNIFIED_IDEOGRAPH-32040> 2
+<CJK_UNIFIED_IDEOGRAPH-32041> 2
+<CJK_UNIFIED_IDEOGRAPH-32042> 2
+<CJK_UNIFIED_IDEOGRAPH-32043> 2
+<CJK_UNIFIED_IDEOGRAPH-32044> 2
+<CJK_UNIFIED_IDEOGRAPH-32045> 2
+<CJK_UNIFIED_IDEOGRAPH-32046> 2
+<CJK_UNIFIED_IDEOGRAPH-32047> 2
+<CJK_UNIFIED_IDEOGRAPH-32048> 2
+<CJK_UNIFIED_IDEOGRAPH-32049> 2
+<CJK_UNIFIED_IDEOGRAPH-3204A> 2
+<CJK_UNIFIED_IDEOGRAPH-3204B> 2
+<CJK_UNIFIED_IDEOGRAPH-3204C> 2
+<CJK_UNIFIED_IDEOGRAPH-3204D> 2
+<CJK_UNIFIED_IDEOGRAPH-3204E> 2
+<CJK_UNIFIED_IDEOGRAPH-3204F> 2
+<CJK_UNIFIED_IDEOGRAPH-32050> 2
+<CJK_UNIFIED_IDEOGRAPH-32051> 2
+<CJK_UNIFIED_IDEOGRAPH-32052> 2
+<CJK_UNIFIED_IDEOGRAPH-32053> 2
+<CJK_UNIFIED_IDEOGRAPH-32054> 2
+<CJK_UNIFIED_IDEOGRAPH-32055> 2
+<CJK_UNIFIED_IDEOGRAPH-32056> 2
+<CJK_UNIFIED_IDEOGRAPH-32057> 2
+<CJK_UNIFIED_IDEOGRAPH-32058> 2
+<CJK_UNIFIED_IDEOGRAPH-32059> 2
+<CJK_UNIFIED_IDEOGRAPH-3205A> 2
+<CJK_UNIFIED_IDEOGRAPH-3205B> 2
+<CJK_UNIFIED_IDEOGRAPH-3205C> 2
+<CJK_UNIFIED_IDEOGRAPH-3205D> 2
+<CJK_UNIFIED_IDEOGRAPH-3205E> 2
+<CJK_UNIFIED_IDEOGRAPH-3205F> 2
+<CJK_UNIFIED_IDEOGRAPH-32060> 2
+<CJK_UNIFIED_IDEOGRAPH-32061> 2
+<CJK_UNIFIED_IDEOGRAPH-32062> 2
+<CJK_UNIFIED_IDEOGRAPH-32063> 2
+<CJK_UNIFIED_IDEOGRAPH-32064> 2
+<CJK_UNIFIED_IDEOGRAPH-32065> 2
+<CJK_UNIFIED_IDEOGRAPH-32066> 2
+<CJK_UNIFIED_IDEOGRAPH-32067> 2
+<CJK_UNIFIED_IDEOGRAPH-32068> 2
+<CJK_UNIFIED_IDEOGRAPH-32069> 2
+<CJK_UNIFIED_IDEOGRAPH-3206A> 2
+<CJK_UNIFIED_IDEOGRAPH-3206B> 2
+<CJK_UNIFIED_IDEOGRAPH-3206C> 2
+<CJK_UNIFIED_IDEOGRAPH-3206D> 2
+<CJK_UNIFIED_IDEOGRAPH-3206E> 2
+<CJK_UNIFIED_IDEOGRAPH-3206F> 2
+<CJK_UNIFIED_IDEOGRAPH-32070> 2
+<CJK_UNIFIED_IDEOGRAPH-32071> 2
+<CJK_UNIFIED_IDEOGRAPH-32072> 2
+<CJK_UNIFIED_IDEOGRAPH-32073> 2
+<CJK_UNIFIED_IDEOGRAPH-32074> 2
+<CJK_UNIFIED_IDEOGRAPH-32075> 2
+<CJK_UNIFIED_IDEOGRAPH-32076> 2
+<CJK_UNIFIED_IDEOGRAPH-32077> 2
+<CJK_UNIFIED_IDEOGRAPH-32078> 2
+<CJK_UNIFIED_IDEOGRAPH-32079> 2
+<CJK_UNIFIED_IDEOGRAPH-3207A> 2
+<CJK_UNIFIED_IDEOGRAPH-3207B> 2
+<CJK_UNIFIED_IDEOGRAPH-3207C> 2
+<CJK_UNIFIED_IDEOGRAPH-3207D> 2
+<CJK_UNIFIED_IDEOGRAPH-3207E> 2
+<CJK_UNIFIED_IDEOGRAPH-3207F> 2
+<CJK_UNIFIED_IDEOGRAPH-32080> 2
+<CJK_UNIFIED_IDEOGRAPH-32081> 2
+<CJK_UNIFIED_IDEOGRAPH-32082> 2
+<CJK_UNIFIED_IDEOGRAPH-32083> 2
+<CJK_UNIFIED_IDEOGRAPH-32084> 2
+<CJK_UNIFIED_IDEOGRAPH-32085> 2
+<CJK_UNIFIED_IDEOGRAPH-32086> 2
+<CJK_UNIFIED_IDEOGRAPH-32087> 2
+<CJK_UNIFIED_IDEOGRAPH-32088> 2
+<CJK_UNIFIED_IDEOGRAPH-32089> 2
+<CJK_UNIFIED_IDEOGRAPH-3208A> 2
+<CJK_UNIFIED_IDEOGRAPH-3208B> 2
+<CJK_UNIFIED_IDEOGRAPH-3208C> 2
+<CJK_UNIFIED_IDEOGRAPH-3208D> 2
+<CJK_UNIFIED_IDEOGRAPH-3208E> 2
+<CJK_UNIFIED_IDEOGRAPH-3208F> 2
+<CJK_UNIFIED_IDEOGRAPH-32090> 2
+<CJK_UNIFIED_IDEOGRAPH-32091> 2
+<CJK_UNIFIED_IDEOGRAPH-32092> 2
+<CJK_UNIFIED_IDEOGRAPH-32093> 2
+<CJK_UNIFIED_IDEOGRAPH-32094> 2
+<CJK_UNIFIED_IDEOGRAPH-32095> 2
+<CJK_UNIFIED_IDEOGRAPH-32096> 2
+<CJK_UNIFIED_IDEOGRAPH-32097> 2
+<CJK_UNIFIED_IDEOGRAPH-32098> 2
+<CJK_UNIFIED_IDEOGRAPH-32099> 2
+<CJK_UNIFIED_IDEOGRAPH-3209A> 2
+<CJK_UNIFIED_IDEOGRAPH-3209B> 2
+<CJK_UNIFIED_IDEOGRAPH-3209C> 2
+<CJK_UNIFIED_IDEOGRAPH-3209D> 2
+<CJK_UNIFIED_IDEOGRAPH-3209E> 2
+<CJK_UNIFIED_IDEOGRAPH-3209F> 2
+<CJK_UNIFIED_IDEOGRAPH-320A0> 2
+<CJK_UNIFIED_IDEOGRAPH-320A1> 2
+<CJK_UNIFIED_IDEOGRAPH-320A2> 2
+<CJK_UNIFIED_IDEOGRAPH-320A3> 2
+<CJK_UNIFIED_IDEOGRAPH-320A4> 2
+<CJK_UNIFIED_IDEOGRAPH-320A5> 2
+<CJK_UNIFIED_IDEOGRAPH-320A6> 2
+<CJK_UNIFIED_IDEOGRAPH-320A7> 2
+<CJK_UNIFIED_IDEOGRAPH-320A8> 2
+<CJK_UNIFIED_IDEOGRAPH-320A9> 2
+<CJK_UNIFIED_IDEOGRAPH-320AA> 2
+<CJK_UNIFIED_IDEOGRAPH-320AB> 2
+<CJK_UNIFIED_IDEOGRAPH-320AC> 2
+<CJK_UNIFIED_IDEOGRAPH-320AD> 2
+<CJK_UNIFIED_IDEOGRAPH-320AE> 2
+<CJK_UNIFIED_IDEOGRAPH-320AF> 2
+<CJK_UNIFIED_IDEOGRAPH-320B0> 2
+<CJK_UNIFIED_IDEOGRAPH-320B1> 2
+<CJK_UNIFIED_IDEOGRAPH-320B2> 2
+<CJK_UNIFIED_IDEOGRAPH-320B3> 2
+<CJK_UNIFIED_IDEOGRAPH-320B4> 2
+<CJK_UNIFIED_IDEOGRAPH-320B5> 2
+<CJK_UNIFIED_IDEOGRAPH-320B6> 2
+<CJK_UNIFIED_IDEOGRAPH-320B7> 2
+<CJK_UNIFIED_IDEOGRAPH-320B8> 2
+<CJK_UNIFIED_IDEOGRAPH-320B9> 2
+<CJK_UNIFIED_IDEOGRAPH-320BA> 2
+<CJK_UNIFIED_IDEOGRAPH-320BB> 2
+<CJK_UNIFIED_IDEOGRAPH-320BC> 2
+<CJK_UNIFIED_IDEOGRAPH-320BD> 2
+<CJK_UNIFIED_IDEOGRAPH-320BE> 2
+<CJK_UNIFIED_IDEOGRAPH-320BF> 2
+<CJK_UNIFIED_IDEOGRAPH-320C0> 2
+<CJK_UNIFIED_IDEOGRAPH-320C1> 2
+<CJK_UNIFIED_IDEOGRAPH-320C2> 2
+<CJK_UNIFIED_IDEOGRAPH-320C3> 2
+<CJK_UNIFIED_IDEOGRAPH-320C4> 2
+<CJK_UNIFIED_IDEOGRAPH-320C5> 2
+<CJK_UNIFIED_IDEOGRAPH-320C6> 2
+<CJK_UNIFIED_IDEOGRAPH-320C7> 2
+<CJK_UNIFIED_IDEOGRAPH-320C8> 2
+<CJK_UNIFIED_IDEOGRAPH-320C9> 2
+<CJK_UNIFIED_IDEOGRAPH-320CA> 2
+<CJK_UNIFIED_IDEOGRAPH-320CB> 2
+<CJK_UNIFIED_IDEOGRAPH-320CC> 2
+<CJK_UNIFIED_IDEOGRAPH-320CD> 2
+<CJK_UNIFIED_IDEOGRAPH-320CE> 2
+<CJK_UNIFIED_IDEOGRAPH-320CF> 2
+<CJK_UNIFIED_IDEOGRAPH-320D0> 2
+<CJK_UNIFIED_IDEOGRAPH-320D1> 2
+<CJK_UNIFIED_IDEOGRAPH-320D2> 2
+<CJK_UNIFIED_IDEOGRAPH-320D3> 2
+<CJK_UNIFIED_IDEOGRAPH-320D4> 2
+<CJK_UNIFIED_IDEOGRAPH-320D5> 2
+<CJK_UNIFIED_IDEOGRAPH-320D6> 2
+<CJK_UNIFIED_IDEOGRAPH-320D7> 2
+<CJK_UNIFIED_IDEOGRAPH-320D8> 2
+<CJK_UNIFIED_IDEOGRAPH-320D9> 2
+<CJK_UNIFIED_IDEOGRAPH-320DA> 2
+<CJK_UNIFIED_IDEOGRAPH-320DB> 2
+<CJK_UNIFIED_IDEOGRAPH-320DC> 2
+<CJK_UNIFIED_IDEOGRAPH-320DD> 2
+<CJK_UNIFIED_IDEOGRAPH-320DE> 2
+<CJK_UNIFIED_IDEOGRAPH-320DF> 2
+<CJK_UNIFIED_IDEOGRAPH-320E0> 2
+<CJK_UNIFIED_IDEOGRAPH-320E1> 2
+<CJK_UNIFIED_IDEOGRAPH-320E2> 2
+<CJK_UNIFIED_IDEOGRAPH-320E3> 2
+<CJK_UNIFIED_IDEOGRAPH-320E4> 2
+<CJK_UNIFIED_IDEOGRAPH-320E5> 2
+<CJK_UNIFIED_IDEOGRAPH-320E6> 2
+<CJK_UNIFIED_IDEOGRAPH-320E7> 2
+<CJK_UNIFIED_IDEOGRAPH-320E8> 2
+<CJK_UNIFIED_IDEOGRAPH-320E9> 2
+<CJK_UNIFIED_IDEOGRAPH-320EA> 2
+<CJK_UNIFIED_IDEOGRAPH-320EB> 2
+<CJK_UNIFIED_IDEOGRAPH-320EC> 2
+<CJK_UNIFIED_IDEOGRAPH-320ED> 2
+<CJK_UNIFIED_IDEOGRAPH-320EE> 2
+<CJK_UNIFIED_IDEOGRAPH-320EF> 2
+<CJK_UNIFIED_IDEOGRAPH-320F0> 2
+<CJK_UNIFIED_IDEOGRAPH-320F1> 2
+<CJK_UNIFIED_IDEOGRAPH-320F2> 2
+<CJK_UNIFIED_IDEOGRAPH-320F3> 2
+<CJK_UNIFIED_IDEOGRAPH-320F4> 2
+<CJK_UNIFIED_IDEOGRAPH-320F5> 2
+<CJK_UNIFIED_IDEOGRAPH-320F6> 2
+<CJK_UNIFIED_IDEOGRAPH-320F7> 2
+<CJK_UNIFIED_IDEOGRAPH-320F8> 2
+<CJK_UNIFIED_IDEOGRAPH-320F9> 2
+<CJK_UNIFIED_IDEOGRAPH-320FA> 2
+<CJK_UNIFIED_IDEOGRAPH-320FB> 2
+<CJK_UNIFIED_IDEOGRAPH-320FC> 2
+<CJK_UNIFIED_IDEOGRAPH-320FD> 2
+<CJK_UNIFIED_IDEOGRAPH-320FE> 2
+<CJK_UNIFIED_IDEOGRAPH-320FF> 2
+<CJK_UNIFIED_IDEOGRAPH-32100> 2
+<CJK_UNIFIED_IDEOGRAPH-32101> 2
+<CJK_UNIFIED_IDEOGRAPH-32102> 2
+<CJK_UNIFIED_IDEOGRAPH-32103> 2
+<CJK_UNIFIED_IDEOGRAPH-32104> 2
+<CJK_UNIFIED_IDEOGRAPH-32105> 2
+<CJK_UNIFIED_IDEOGRAPH-32106> 2
+<CJK_UNIFIED_IDEOGRAPH-32107> 2
+<CJK_UNIFIED_IDEOGRAPH-32108> 2
+<CJK_UNIFIED_IDEOGRAPH-32109> 2
+<CJK_UNIFIED_IDEOGRAPH-3210A> 2
+<CJK_UNIFIED_IDEOGRAPH-3210B> 2
+<CJK_UNIFIED_IDEOGRAPH-3210C> 2
+<CJK_UNIFIED_IDEOGRAPH-3210D> 2
+<CJK_UNIFIED_IDEOGRAPH-3210E> 2
+<CJK_UNIFIED_IDEOGRAPH-3210F> 2
+<CJK_UNIFIED_IDEOGRAPH-32110> 2
+<CJK_UNIFIED_IDEOGRAPH-32111> 2
+<CJK_UNIFIED_IDEOGRAPH-32112> 2
+<CJK_UNIFIED_IDEOGRAPH-32113> 2
+<CJK_UNIFIED_IDEOGRAPH-32114> 2
+<CJK_UNIFIED_IDEOGRAPH-32115> 2
+<CJK_UNIFIED_IDEOGRAPH-32116> 2
+<CJK_UNIFIED_IDEOGRAPH-32117> 2
+<CJK_UNIFIED_IDEOGRAPH-32118> 2
+<CJK_UNIFIED_IDEOGRAPH-32119> 2
+<CJK_UNIFIED_IDEOGRAPH-3211A> 2
+<CJK_UNIFIED_IDEOGRAPH-3211B> 2
+<CJK_UNIFIED_IDEOGRAPH-3211C> 2
+<CJK_UNIFIED_IDEOGRAPH-3211D> 2
+<CJK_UNIFIED_IDEOGRAPH-3211E> 2
+<CJK_UNIFIED_IDEOGRAPH-3211F> 2
+<CJK_UNIFIED_IDEOGRAPH-32120> 2
+<CJK_UNIFIED_IDEOGRAPH-32121> 2
+<CJK_UNIFIED_IDEOGRAPH-32122> 2
+<CJK_UNIFIED_IDEOGRAPH-32123> 2
+<CJK_UNIFIED_IDEOGRAPH-32124> 2
+<CJK_UNIFIED_IDEOGRAPH-32125> 2
+<CJK_UNIFIED_IDEOGRAPH-32126> 2
+<CJK_UNIFIED_IDEOGRAPH-32127> 2
+<CJK_UNIFIED_IDEOGRAPH-32128> 2
+<CJK_UNIFIED_IDEOGRAPH-32129> 2
+<CJK_UNIFIED_IDEOGRAPH-3212A> 2
+<CJK_UNIFIED_IDEOGRAPH-3212B> 2
+<CJK_UNIFIED_IDEOGRAPH-3212C> 2
+<CJK_UNIFIED_IDEOGRAPH-3212D> 2
+<CJK_UNIFIED_IDEOGRAPH-3212E> 2
+<CJK_UNIFIED_IDEOGRAPH-3212F> 2
+<CJK_UNIFIED_IDEOGRAPH-32130> 2
+<CJK_UNIFIED_IDEOGRAPH-32131> 2
+<CJK_UNIFIED_IDEOGRAPH-32132> 2
+<CJK_UNIFIED_IDEOGRAPH-32133> 2
+<CJK_UNIFIED_IDEOGRAPH-32134> 2
+<CJK_UNIFIED_IDEOGRAPH-32135> 2
+<CJK_UNIFIED_IDEOGRAPH-32136> 2
+<CJK_UNIFIED_IDEOGRAPH-32137> 2
+<CJK_UNIFIED_IDEOGRAPH-32138> 2
+<CJK_UNIFIED_IDEOGRAPH-32139> 2
+<CJK_UNIFIED_IDEOGRAPH-3213A> 2
+<CJK_UNIFIED_IDEOGRAPH-3213B> 2
+<CJK_UNIFIED_IDEOGRAPH-3213C> 2
+<CJK_UNIFIED_IDEOGRAPH-3213D> 2
+<CJK_UNIFIED_IDEOGRAPH-3213E> 2
+<CJK_UNIFIED_IDEOGRAPH-3213F> 2
+<CJK_UNIFIED_IDEOGRAPH-32140> 2
+<CJK_UNIFIED_IDEOGRAPH-32141> 2
+<CJK_UNIFIED_IDEOGRAPH-32142> 2
+<CJK_UNIFIED_IDEOGRAPH-32143> 2
+<CJK_UNIFIED_IDEOGRAPH-32144> 2
+<CJK_UNIFIED_IDEOGRAPH-32145> 2
+<CJK_UNIFIED_IDEOGRAPH-32146> 2
+<CJK_UNIFIED_IDEOGRAPH-32147> 2
+<CJK_UNIFIED_IDEOGRAPH-32148> 2
+<CJK_UNIFIED_IDEOGRAPH-32149> 2
+<CJK_UNIFIED_IDEOGRAPH-3214A> 2
+<CJK_UNIFIED_IDEOGRAPH-3214B> 2
+<CJK_UNIFIED_IDEOGRAPH-3214C> 2
+<CJK_UNIFIED_IDEOGRAPH-3214D> 2
+<CJK_UNIFIED_IDEOGRAPH-3214E> 2
+<CJK_UNIFIED_IDEOGRAPH-3214F> 2
+<CJK_UNIFIED_IDEOGRAPH-32150> 2
+<CJK_UNIFIED_IDEOGRAPH-32151> 2
+<CJK_UNIFIED_IDEOGRAPH-32152> 2
+<CJK_UNIFIED_IDEOGRAPH-32153> 2
+<CJK_UNIFIED_IDEOGRAPH-32154> 2
+<CJK_UNIFIED_IDEOGRAPH-32155> 2
+<CJK_UNIFIED_IDEOGRAPH-32156> 2
+<CJK_UNIFIED_IDEOGRAPH-32157> 2
+<CJK_UNIFIED_IDEOGRAPH-32158> 2
+<CJK_UNIFIED_IDEOGRAPH-32159> 2
+<CJK_UNIFIED_IDEOGRAPH-3215A> 2
+<CJK_UNIFIED_IDEOGRAPH-3215B> 2
+<CJK_UNIFIED_IDEOGRAPH-3215C> 2
+<CJK_UNIFIED_IDEOGRAPH-3215D> 2
+<CJK_UNIFIED_IDEOGRAPH-3215E> 2
+<CJK_UNIFIED_IDEOGRAPH-3215F> 2
+<CJK_UNIFIED_IDEOGRAPH-32160> 2
+<CJK_UNIFIED_IDEOGRAPH-32161> 2
+<CJK_UNIFIED_IDEOGRAPH-32162> 2
+<CJK_UNIFIED_IDEOGRAPH-32163> 2
+<CJK_UNIFIED_IDEOGRAPH-32164> 2
+<CJK_UNIFIED_IDEOGRAPH-32165> 2
+<CJK_UNIFIED_IDEOGRAPH-32166> 2
+<CJK_UNIFIED_IDEOGRAPH-32167> 2
+<CJK_UNIFIED_IDEOGRAPH-32168> 2
+<CJK_UNIFIED_IDEOGRAPH-32169> 2
+<CJK_UNIFIED_IDEOGRAPH-3216A> 2
+<CJK_UNIFIED_IDEOGRAPH-3216B> 2
+<CJK_UNIFIED_IDEOGRAPH-3216C> 2
+<CJK_UNIFIED_IDEOGRAPH-3216D> 2
+<CJK_UNIFIED_IDEOGRAPH-3216E> 2
+<CJK_UNIFIED_IDEOGRAPH-3216F> 2
+<CJK_UNIFIED_IDEOGRAPH-32170> 2
+<CJK_UNIFIED_IDEOGRAPH-32171> 2
+<CJK_UNIFIED_IDEOGRAPH-32172> 2
+<CJK_UNIFIED_IDEOGRAPH-32173> 2
+<CJK_UNIFIED_IDEOGRAPH-32174> 2
+<CJK_UNIFIED_IDEOGRAPH-32175> 2
+<CJK_UNIFIED_IDEOGRAPH-32176> 2
+<CJK_UNIFIED_IDEOGRAPH-32177> 2
+<CJK_UNIFIED_IDEOGRAPH-32178> 2
+<CJK_UNIFIED_IDEOGRAPH-32179> 2
+<CJK_UNIFIED_IDEOGRAPH-3217A> 2
+<CJK_UNIFIED_IDEOGRAPH-3217B> 2
+<CJK_UNIFIED_IDEOGRAPH-3217C> 2
+<CJK_UNIFIED_IDEOGRAPH-3217D> 2
+<CJK_UNIFIED_IDEOGRAPH-3217E> 2
+<CJK_UNIFIED_IDEOGRAPH-3217F> 2
+<CJK_UNIFIED_IDEOGRAPH-32180> 2
+<CJK_UNIFIED_IDEOGRAPH-32181> 2
+<CJK_UNIFIED_IDEOGRAPH-32182> 2
+<CJK_UNIFIED_IDEOGRAPH-32183> 2
+<CJK_UNIFIED_IDEOGRAPH-32184> 2
+<CJK_UNIFIED_IDEOGRAPH-32185> 2
+<CJK_UNIFIED_IDEOGRAPH-32186> 2
+<CJK_UNIFIED_IDEOGRAPH-32187> 2
+<CJK_UNIFIED_IDEOGRAPH-32188> 2
+<CJK_UNIFIED_IDEOGRAPH-32189> 2
+<CJK_UNIFIED_IDEOGRAPH-3218A> 2
+<CJK_UNIFIED_IDEOGRAPH-3218B> 2
+<CJK_UNIFIED_IDEOGRAPH-3218C> 2
+<CJK_UNIFIED_IDEOGRAPH-3218D> 2
+<CJK_UNIFIED_IDEOGRAPH-3218E> 2
+<CJK_UNIFIED_IDEOGRAPH-3218F> 2
+<CJK_UNIFIED_IDEOGRAPH-32190> 2
+<CJK_UNIFIED_IDEOGRAPH-32191> 2
+<CJK_UNIFIED_IDEOGRAPH-32192> 2
+<CJK_UNIFIED_IDEOGRAPH-32193> 2
+<CJK_UNIFIED_IDEOGRAPH-32194> 2
+<CJK_UNIFIED_IDEOGRAPH-32195> 2
+<CJK_UNIFIED_IDEOGRAPH-32196> 2
+<CJK_UNIFIED_IDEOGRAPH-32197> 2
+<CJK_UNIFIED_IDEOGRAPH-32198> 2
+<CJK_UNIFIED_IDEOGRAPH-32199> 2
+<CJK_UNIFIED_IDEOGRAPH-3219A> 2
+<CJK_UNIFIED_IDEOGRAPH-3219B> 2
+<CJK_UNIFIED_IDEOGRAPH-3219C> 2
+<CJK_UNIFIED_IDEOGRAPH-3219D> 2
+<CJK_UNIFIED_IDEOGRAPH-3219E> 2
+<CJK_UNIFIED_IDEOGRAPH-3219F> 2
+<CJK_UNIFIED_IDEOGRAPH-321A0> 2
+<CJK_UNIFIED_IDEOGRAPH-321A1> 2
+<CJK_UNIFIED_IDEOGRAPH-321A2> 2
+<CJK_UNIFIED_IDEOGRAPH-321A3> 2
+<CJK_UNIFIED_IDEOGRAPH-321A4> 2
+<CJK_UNIFIED_IDEOGRAPH-321A5> 2
+<CJK_UNIFIED_IDEOGRAPH-321A6> 2
+<CJK_UNIFIED_IDEOGRAPH-321A7> 2
+<CJK_UNIFIED_IDEOGRAPH-321A8> 2
+<CJK_UNIFIED_IDEOGRAPH-321A9> 2
+<CJK_UNIFIED_IDEOGRAPH-321AA> 2
+<CJK_UNIFIED_IDEOGRAPH-321AB> 2
+<CJK_UNIFIED_IDEOGRAPH-321AC> 2
+<CJK_UNIFIED_IDEOGRAPH-321AD> 2
+<CJK_UNIFIED_IDEOGRAPH-321AE> 2
+<CJK_UNIFIED_IDEOGRAPH-321AF> 2
+<CJK_UNIFIED_IDEOGRAPH-321B0> 2
+<CJK_UNIFIED_IDEOGRAPH-321B1> 2
+<CJK_UNIFIED_IDEOGRAPH-321B2> 2
+<CJK_UNIFIED_IDEOGRAPH-321B3> 2
+<CJK_UNIFIED_IDEOGRAPH-321B4> 2
+<CJK_UNIFIED_IDEOGRAPH-321B5> 2
+<CJK_UNIFIED_IDEOGRAPH-321B6> 2
+<CJK_UNIFIED_IDEOGRAPH-321B7> 2
+<CJK_UNIFIED_IDEOGRAPH-321B8> 2
+<CJK_UNIFIED_IDEOGRAPH-321B9> 2
+<CJK_UNIFIED_IDEOGRAPH-321BA> 2
+<CJK_UNIFIED_IDEOGRAPH-321BB> 2
+<CJK_UNIFIED_IDEOGRAPH-321BC> 2
+<CJK_UNIFIED_IDEOGRAPH-321BD> 2
+<CJK_UNIFIED_IDEOGRAPH-321BE> 2
+<CJK_UNIFIED_IDEOGRAPH-321BF> 2
+<CJK_UNIFIED_IDEOGRAPH-321C0> 2
+<CJK_UNIFIED_IDEOGRAPH-321C1> 2
+<CJK_UNIFIED_IDEOGRAPH-321C2> 2
+<CJK_UNIFIED_IDEOGRAPH-321C3> 2
+<CJK_UNIFIED_IDEOGRAPH-321C4> 2
+<CJK_UNIFIED_IDEOGRAPH-321C5> 2
+<CJK_UNIFIED_IDEOGRAPH-321C6> 2
+<CJK_UNIFIED_IDEOGRAPH-321C7> 2
+<CJK_UNIFIED_IDEOGRAPH-321C8> 2
+<CJK_UNIFIED_IDEOGRAPH-321C9> 2
+<CJK_UNIFIED_IDEOGRAPH-321CA> 2
+<CJK_UNIFIED_IDEOGRAPH-321CB> 2
+<CJK_UNIFIED_IDEOGRAPH-321CC> 2
+<CJK_UNIFIED_IDEOGRAPH-321CD> 2
+<CJK_UNIFIED_IDEOGRAPH-321CE> 2
+<CJK_UNIFIED_IDEOGRAPH-321CF> 2
+<CJK_UNIFIED_IDEOGRAPH-321D0> 2
+<CJK_UNIFIED_IDEOGRAPH-321D1> 2
+<CJK_UNIFIED_IDEOGRAPH-321D2> 2
+<CJK_UNIFIED_IDEOGRAPH-321D3> 2
+<CJK_UNIFIED_IDEOGRAPH-321D4> 2
+<CJK_UNIFIED_IDEOGRAPH-321D5> 2
+<CJK_UNIFIED_IDEOGRAPH-321D6> 2
+<CJK_UNIFIED_IDEOGRAPH-321D7> 2
+<CJK_UNIFIED_IDEOGRAPH-321D8> 2
+<CJK_UNIFIED_IDEOGRAPH-321D9> 2
+<CJK_UNIFIED_IDEOGRAPH-321DA> 2
+<CJK_UNIFIED_IDEOGRAPH-321DB> 2
+<CJK_UNIFIED_IDEOGRAPH-321DC> 2
+<CJK_UNIFIED_IDEOGRAPH-321DD> 2
+<CJK_UNIFIED_IDEOGRAPH-321DE> 2
+<CJK_UNIFIED_IDEOGRAPH-321DF> 2
+<CJK_UNIFIED_IDEOGRAPH-321E0> 2
+<CJK_UNIFIED_IDEOGRAPH-321E1> 2
+<CJK_UNIFIED_IDEOGRAPH-321E2> 2
+<CJK_UNIFIED_IDEOGRAPH-321E3> 2
+<CJK_UNIFIED_IDEOGRAPH-321E4> 2
+<CJK_UNIFIED_IDEOGRAPH-321E5> 2
+<CJK_UNIFIED_IDEOGRAPH-321E6> 2
+<CJK_UNIFIED_IDEOGRAPH-321E7> 2
+<CJK_UNIFIED_IDEOGRAPH-321E8> 2
+<CJK_UNIFIED_IDEOGRAPH-321E9> 2
+<CJK_UNIFIED_IDEOGRAPH-321EA> 2
+<CJK_UNIFIED_IDEOGRAPH-321EB> 2
+<CJK_UNIFIED_IDEOGRAPH-321EC> 2
+<CJK_UNIFIED_IDEOGRAPH-321ED> 2
+<CJK_UNIFIED_IDEOGRAPH-321EE> 2
+<CJK_UNIFIED_IDEOGRAPH-321EF> 2
+<CJK_UNIFIED_IDEOGRAPH-321F0> 2
+<CJK_UNIFIED_IDEOGRAPH-321F1> 2
+<CJK_UNIFIED_IDEOGRAPH-321F2> 2
+<CJK_UNIFIED_IDEOGRAPH-321F3> 2
+<CJK_UNIFIED_IDEOGRAPH-321F4> 2
+<CJK_UNIFIED_IDEOGRAPH-321F5> 2
+<CJK_UNIFIED_IDEOGRAPH-321F6> 2
+<CJK_UNIFIED_IDEOGRAPH-321F7> 2
+<CJK_UNIFIED_IDEOGRAPH-321F8> 2
+<CJK_UNIFIED_IDEOGRAPH-321F9> 2
+<CJK_UNIFIED_IDEOGRAPH-321FA> 2
+<CJK_UNIFIED_IDEOGRAPH-321FB> 2
+<CJK_UNIFIED_IDEOGRAPH-321FC> 2
+<CJK_UNIFIED_IDEOGRAPH-321FD> 2
+<CJK_UNIFIED_IDEOGRAPH-321FE> 2
+<CJK_UNIFIED_IDEOGRAPH-321FF> 2
+<CJK_UNIFIED_IDEOGRAPH-32200> 2
+<CJK_UNIFIED_IDEOGRAPH-32201> 2
+<CJK_UNIFIED_IDEOGRAPH-32202> 2
+<CJK_UNIFIED_IDEOGRAPH-32203> 2
+<CJK_UNIFIED_IDEOGRAPH-32204> 2
+<CJK_UNIFIED_IDEOGRAPH-32205> 2
+<CJK_UNIFIED_IDEOGRAPH-32206> 2
+<CJK_UNIFIED_IDEOGRAPH-32207> 2
+<CJK_UNIFIED_IDEOGRAPH-32208> 2
+<CJK_UNIFIED_IDEOGRAPH-32209> 2
+<CJK_UNIFIED_IDEOGRAPH-3220A> 2
+<CJK_UNIFIED_IDEOGRAPH-3220B> 2
+<CJK_UNIFIED_IDEOGRAPH-3220C> 2
+<CJK_UNIFIED_IDEOGRAPH-3220D> 2
+<CJK_UNIFIED_IDEOGRAPH-3220E> 2
+<CJK_UNIFIED_IDEOGRAPH-3220F> 2
+<CJK_UNIFIED_IDEOGRAPH-32210> 2
+<CJK_UNIFIED_IDEOGRAPH-32211> 2
+<CJK_UNIFIED_IDEOGRAPH-32212> 2
+<CJK_UNIFIED_IDEOGRAPH-32213> 2
+<CJK_UNIFIED_IDEOGRAPH-32214> 2
+<CJK_UNIFIED_IDEOGRAPH-32215> 2
+<CJK_UNIFIED_IDEOGRAPH-32216> 2
+<CJK_UNIFIED_IDEOGRAPH-32217> 2
+<CJK_UNIFIED_IDEOGRAPH-32218> 2
+<CJK_UNIFIED_IDEOGRAPH-32219> 2
+<CJK_UNIFIED_IDEOGRAPH-3221A> 2
+<CJK_UNIFIED_IDEOGRAPH-3221B> 2
+<CJK_UNIFIED_IDEOGRAPH-3221C> 2
+<CJK_UNIFIED_IDEOGRAPH-3221D> 2
+<CJK_UNIFIED_IDEOGRAPH-3221E> 2
+<CJK_UNIFIED_IDEOGRAPH-3221F> 2
+<CJK_UNIFIED_IDEOGRAPH-32220> 2
+<CJK_UNIFIED_IDEOGRAPH-32221> 2
+<CJK_UNIFIED_IDEOGRAPH-32222> 2
+<CJK_UNIFIED_IDEOGRAPH-32223> 2
+<CJK_UNIFIED_IDEOGRAPH-32224> 2
+<CJK_UNIFIED_IDEOGRAPH-32225> 2
+<CJK_UNIFIED_IDEOGRAPH-32226> 2
+<CJK_UNIFIED_IDEOGRAPH-32227> 2
+<CJK_UNIFIED_IDEOGRAPH-32228> 2
+<CJK_UNIFIED_IDEOGRAPH-32229> 2
+<CJK_UNIFIED_IDEOGRAPH-3222A> 2
+<CJK_UNIFIED_IDEOGRAPH-3222B> 2
+<CJK_UNIFIED_IDEOGRAPH-3222C> 2
+<CJK_UNIFIED_IDEOGRAPH-3222D> 2
+<CJK_UNIFIED_IDEOGRAPH-3222E> 2
+<CJK_UNIFIED_IDEOGRAPH-3222F> 2
+<CJK_UNIFIED_IDEOGRAPH-32230> 2
+<CJK_UNIFIED_IDEOGRAPH-32231> 2
+<CJK_UNIFIED_IDEOGRAPH-32232> 2
+<CJK_UNIFIED_IDEOGRAPH-32233> 2
+<CJK_UNIFIED_IDEOGRAPH-32234> 2
+<CJK_UNIFIED_IDEOGRAPH-32235> 2
+<CJK_UNIFIED_IDEOGRAPH-32236> 2
+<CJK_UNIFIED_IDEOGRAPH-32237> 2
+<CJK_UNIFIED_IDEOGRAPH-32238> 2
+<CJK_UNIFIED_IDEOGRAPH-32239> 2
+<CJK_UNIFIED_IDEOGRAPH-3223A> 2
+<CJK_UNIFIED_IDEOGRAPH-3223B> 2
+<CJK_UNIFIED_IDEOGRAPH-3223C> 2
+<CJK_UNIFIED_IDEOGRAPH-3223D> 2
+<CJK_UNIFIED_IDEOGRAPH-3223E> 2
+<CJK_UNIFIED_IDEOGRAPH-3223F> 2
+<CJK_UNIFIED_IDEOGRAPH-32240> 2
+<CJK_UNIFIED_IDEOGRAPH-32241> 2
+<CJK_UNIFIED_IDEOGRAPH-32242> 2
+<CJK_UNIFIED_IDEOGRAPH-32243> 2
+<CJK_UNIFIED_IDEOGRAPH-32244> 2
+<CJK_UNIFIED_IDEOGRAPH-32245> 2
+<CJK_UNIFIED_IDEOGRAPH-32246> 2
+<CJK_UNIFIED_IDEOGRAPH-32247> 2
+<CJK_UNIFIED_IDEOGRAPH-32248> 2
+<CJK_UNIFIED_IDEOGRAPH-32249> 2
+<CJK_UNIFIED_IDEOGRAPH-3224A> 2
+<CJK_UNIFIED_IDEOGRAPH-3224B> 2
+<CJK_UNIFIED_IDEOGRAPH-3224C> 2
+<CJK_UNIFIED_IDEOGRAPH-3224D> 2
+<CJK_UNIFIED_IDEOGRAPH-3224E> 2
+<CJK_UNIFIED_IDEOGRAPH-3224F> 2
+<CJK_UNIFIED_IDEOGRAPH-32250> 2
+<CJK_UNIFIED_IDEOGRAPH-32251> 2
+<CJK_UNIFIED_IDEOGRAPH-32252> 2
+<CJK_UNIFIED_IDEOGRAPH-32253> 2
+<CJK_UNIFIED_IDEOGRAPH-32254> 2
+<CJK_UNIFIED_IDEOGRAPH-32255> 2
+<CJK_UNIFIED_IDEOGRAPH-32256> 2
+<CJK_UNIFIED_IDEOGRAPH-32257> 2
+<CJK_UNIFIED_IDEOGRAPH-32258> 2
+<CJK_UNIFIED_IDEOGRAPH-32259> 2
+<CJK_UNIFIED_IDEOGRAPH-3225A> 2
+<CJK_UNIFIED_IDEOGRAPH-3225B> 2
+<CJK_UNIFIED_IDEOGRAPH-3225C> 2
+<CJK_UNIFIED_IDEOGRAPH-3225D> 2
+<CJK_UNIFIED_IDEOGRAPH-3225E> 2
+<CJK_UNIFIED_IDEOGRAPH-3225F> 2
+<CJK_UNIFIED_IDEOGRAPH-32260> 2
+<CJK_UNIFIED_IDEOGRAPH-32261> 2
+<CJK_UNIFIED_IDEOGRAPH-32262> 2
+<CJK_UNIFIED_IDEOGRAPH-32263> 2
+<CJK_UNIFIED_IDEOGRAPH-32264> 2
+<CJK_UNIFIED_IDEOGRAPH-32265> 2
+<CJK_UNIFIED_IDEOGRAPH-32266> 2
+<CJK_UNIFIED_IDEOGRAPH-32267> 2
+<CJK_UNIFIED_IDEOGRAPH-32268> 2
+<CJK_UNIFIED_IDEOGRAPH-32269> 2
+<CJK_UNIFIED_IDEOGRAPH-3226A> 2
+<CJK_UNIFIED_IDEOGRAPH-3226B> 2
+<CJK_UNIFIED_IDEOGRAPH-3226C> 2
+<CJK_UNIFIED_IDEOGRAPH-3226D> 2
+<CJK_UNIFIED_IDEOGRAPH-3226E> 2
+<CJK_UNIFIED_IDEOGRAPH-3226F> 2
+<CJK_UNIFIED_IDEOGRAPH-32270> 2
+<CJK_UNIFIED_IDEOGRAPH-32271> 2
+<CJK_UNIFIED_IDEOGRAPH-32272> 2
+<CJK_UNIFIED_IDEOGRAPH-32273> 2
+<CJK_UNIFIED_IDEOGRAPH-32274> 2
+<CJK_UNIFIED_IDEOGRAPH-32275> 2
+<CJK_UNIFIED_IDEOGRAPH-32276> 2
+<CJK_UNIFIED_IDEOGRAPH-32277> 2
+<CJK_UNIFIED_IDEOGRAPH-32278> 2
+<CJK_UNIFIED_IDEOGRAPH-32279> 2
+<CJK_UNIFIED_IDEOGRAPH-3227A> 2
+<CJK_UNIFIED_IDEOGRAPH-3227B> 2
+<CJK_UNIFIED_IDEOGRAPH-3227C> 2
+<CJK_UNIFIED_IDEOGRAPH-3227D> 2
+<CJK_UNIFIED_IDEOGRAPH-3227E> 2
+<CJK_UNIFIED_IDEOGRAPH-3227F> 2
+<CJK_UNIFIED_IDEOGRAPH-32280> 2
+<CJK_UNIFIED_IDEOGRAPH-32281> 2
+<CJK_UNIFIED_IDEOGRAPH-32282> 2
+<CJK_UNIFIED_IDEOGRAPH-32283> 2
+<CJK_UNIFIED_IDEOGRAPH-32284> 2
+<CJK_UNIFIED_IDEOGRAPH-32285> 2
+<CJK_UNIFIED_IDEOGRAPH-32286> 2
+<CJK_UNIFIED_IDEOGRAPH-32287> 2
+<CJK_UNIFIED_IDEOGRAPH-32288> 2
+<CJK_UNIFIED_IDEOGRAPH-32289> 2
+<CJK_UNIFIED_IDEOGRAPH-3228A> 2
+<CJK_UNIFIED_IDEOGRAPH-3228B> 2
+<CJK_UNIFIED_IDEOGRAPH-3228C> 2
+<CJK_UNIFIED_IDEOGRAPH-3228D> 2
+<CJK_UNIFIED_IDEOGRAPH-3228E> 2
+<CJK_UNIFIED_IDEOGRAPH-3228F> 2
+<CJK_UNIFIED_IDEOGRAPH-32290> 2
+<CJK_UNIFIED_IDEOGRAPH-32291> 2
+<CJK_UNIFIED_IDEOGRAPH-32292> 2
+<CJK_UNIFIED_IDEOGRAPH-32293> 2
+<CJK_UNIFIED_IDEOGRAPH-32294> 2
+<CJK_UNIFIED_IDEOGRAPH-32295> 2
+<CJK_UNIFIED_IDEOGRAPH-32296> 2
+<CJK_UNIFIED_IDEOGRAPH-32297> 2
+<CJK_UNIFIED_IDEOGRAPH-32298> 2
+<CJK_UNIFIED_IDEOGRAPH-32299> 2
+<CJK_UNIFIED_IDEOGRAPH-3229A> 2
+<CJK_UNIFIED_IDEOGRAPH-3229B> 2
+<CJK_UNIFIED_IDEOGRAPH-3229C> 2
+<CJK_UNIFIED_IDEOGRAPH-3229D> 2
+<CJK_UNIFIED_IDEOGRAPH-3229E> 2
+<CJK_UNIFIED_IDEOGRAPH-3229F> 2
+<CJK_UNIFIED_IDEOGRAPH-322A0> 2
+<CJK_UNIFIED_IDEOGRAPH-322A1> 2
+<CJK_UNIFIED_IDEOGRAPH-322A2> 2
+<CJK_UNIFIED_IDEOGRAPH-322A3> 2
+<CJK_UNIFIED_IDEOGRAPH-322A4> 2
+<CJK_UNIFIED_IDEOGRAPH-322A5> 2
+<CJK_UNIFIED_IDEOGRAPH-322A6> 2
+<CJK_UNIFIED_IDEOGRAPH-322A7> 2
+<CJK_UNIFIED_IDEOGRAPH-322A8> 2
+<CJK_UNIFIED_IDEOGRAPH-322A9> 2
+<CJK_UNIFIED_IDEOGRAPH-322AA> 2
+<CJK_UNIFIED_IDEOGRAPH-322AB> 2
+<CJK_UNIFIED_IDEOGRAPH-322AC> 2
+<CJK_UNIFIED_IDEOGRAPH-322AD> 2
+<CJK_UNIFIED_IDEOGRAPH-322AE> 2
+<CJK_UNIFIED_IDEOGRAPH-322AF> 2
+<CJK_UNIFIED_IDEOGRAPH-322B0> 2
+<CJK_UNIFIED_IDEOGRAPH-322B1> 2
+<CJK_UNIFIED_IDEOGRAPH-322B2> 2
+<CJK_UNIFIED_IDEOGRAPH-322B3> 2
+<CJK_UNIFIED_IDEOGRAPH-322B4> 2
+<CJK_UNIFIED_IDEOGRAPH-322B5> 2
+<CJK_UNIFIED_IDEOGRAPH-322B6> 2
+<CJK_UNIFIED_IDEOGRAPH-322B7> 2
+<CJK_UNIFIED_IDEOGRAPH-322B8> 2
+<CJK_UNIFIED_IDEOGRAPH-322B9> 2
+<CJK_UNIFIED_IDEOGRAPH-322BA> 2
+<CJK_UNIFIED_IDEOGRAPH-322BB> 2
+<CJK_UNIFIED_IDEOGRAPH-322BC> 2
+<CJK_UNIFIED_IDEOGRAPH-322BD> 2
+<CJK_UNIFIED_IDEOGRAPH-322BE> 2
+<CJK_UNIFIED_IDEOGRAPH-322BF> 2
+<CJK_UNIFIED_IDEOGRAPH-322C0> 2
+<CJK_UNIFIED_IDEOGRAPH-322C1> 2
+<CJK_UNIFIED_IDEOGRAPH-322C2> 2
+<CJK_UNIFIED_IDEOGRAPH-322C3> 2
+<CJK_UNIFIED_IDEOGRAPH-322C4> 2
+<CJK_UNIFIED_IDEOGRAPH-322C5> 2
+<CJK_UNIFIED_IDEOGRAPH-322C6> 2
+<CJK_UNIFIED_IDEOGRAPH-322C7> 2
+<CJK_UNIFIED_IDEOGRAPH-322C8> 2
+<CJK_UNIFIED_IDEOGRAPH-322C9> 2
+<CJK_UNIFIED_IDEOGRAPH-322CA> 2
+<CJK_UNIFIED_IDEOGRAPH-322CB> 2
+<CJK_UNIFIED_IDEOGRAPH-322CC> 2
+<CJK_UNIFIED_IDEOGRAPH-322CD> 2
+<CJK_UNIFIED_IDEOGRAPH-322CE> 2
+<CJK_UNIFIED_IDEOGRAPH-322CF> 2
+<CJK_UNIFIED_IDEOGRAPH-322D0> 2
+<CJK_UNIFIED_IDEOGRAPH-322D1> 2
+<CJK_UNIFIED_IDEOGRAPH-322D2> 2
+<CJK_UNIFIED_IDEOGRAPH-322D3> 2
+<CJK_UNIFIED_IDEOGRAPH-322D4> 2
+<CJK_UNIFIED_IDEOGRAPH-322D5> 2
+<CJK_UNIFIED_IDEOGRAPH-322D6> 2
+<CJK_UNIFIED_IDEOGRAPH-322D7> 2
+<CJK_UNIFIED_IDEOGRAPH-322D8> 2
+<CJK_UNIFIED_IDEOGRAPH-322D9> 2
+<CJK_UNIFIED_IDEOGRAPH-322DA> 2
+<CJK_UNIFIED_IDEOGRAPH-322DB> 2
+<CJK_UNIFIED_IDEOGRAPH-322DC> 2
+<CJK_UNIFIED_IDEOGRAPH-322DD> 2
+<CJK_UNIFIED_IDEOGRAPH-322DE> 2
+<CJK_UNIFIED_IDEOGRAPH-322DF> 2
+<CJK_UNIFIED_IDEOGRAPH-322E0> 2
+<CJK_UNIFIED_IDEOGRAPH-322E1> 2
+<CJK_UNIFIED_IDEOGRAPH-322E2> 2
+<CJK_UNIFIED_IDEOGRAPH-322E3> 2
+<CJK_UNIFIED_IDEOGRAPH-322E4> 2
+<CJK_UNIFIED_IDEOGRAPH-322E5> 2
+<CJK_UNIFIED_IDEOGRAPH-322E6> 2
+<CJK_UNIFIED_IDEOGRAPH-322E7> 2
+<CJK_UNIFIED_IDEOGRAPH-322E8> 2
+<CJK_UNIFIED_IDEOGRAPH-322E9> 2
+<CJK_UNIFIED_IDEOGRAPH-322EA> 2
+<CJK_UNIFIED_IDEOGRAPH-322EB> 2
+<CJK_UNIFIED_IDEOGRAPH-322EC> 2
+<CJK_UNIFIED_IDEOGRAPH-322ED> 2
+<CJK_UNIFIED_IDEOGRAPH-322EE> 2
+<CJK_UNIFIED_IDEOGRAPH-322EF> 2
+<CJK_UNIFIED_IDEOGRAPH-322F0> 2
+<CJK_UNIFIED_IDEOGRAPH-322F1> 2
+<CJK_UNIFIED_IDEOGRAPH-322F2> 2
+<CJK_UNIFIED_IDEOGRAPH-322F3> 2
+<CJK_UNIFIED_IDEOGRAPH-322F4> 2
+<CJK_UNIFIED_IDEOGRAPH-322F5> 2
+<CJK_UNIFIED_IDEOGRAPH-322F6> 2
+<CJK_UNIFIED_IDEOGRAPH-322F7> 2
+<CJK_UNIFIED_IDEOGRAPH-322F8> 2
+<CJK_UNIFIED_IDEOGRAPH-322F9> 2
+<CJK_UNIFIED_IDEOGRAPH-322FA> 2
+<CJK_UNIFIED_IDEOGRAPH-322FB> 2
+<CJK_UNIFIED_IDEOGRAPH-322FC> 2
+<CJK_UNIFIED_IDEOGRAPH-322FD> 2
+<CJK_UNIFIED_IDEOGRAPH-322FE> 2
+<CJK_UNIFIED_IDEOGRAPH-322FF> 2
+<CJK_UNIFIED_IDEOGRAPH-32300> 2
+<CJK_UNIFIED_IDEOGRAPH-32301> 2
+<CJK_UNIFIED_IDEOGRAPH-32302> 2
+<CJK_UNIFIED_IDEOGRAPH-32303> 2
+<CJK_UNIFIED_IDEOGRAPH-32304> 2
+<CJK_UNIFIED_IDEOGRAPH-32305> 2
+<CJK_UNIFIED_IDEOGRAPH-32306> 2
+<CJK_UNIFIED_IDEOGRAPH-32307> 2
+<CJK_UNIFIED_IDEOGRAPH-32308> 2
+<CJK_UNIFIED_IDEOGRAPH-32309> 2
+<CJK_UNIFIED_IDEOGRAPH-3230A> 2
+<CJK_UNIFIED_IDEOGRAPH-3230B> 2
+<CJK_UNIFIED_IDEOGRAPH-3230C> 2
+<CJK_UNIFIED_IDEOGRAPH-3230D> 2
+<CJK_UNIFIED_IDEOGRAPH-3230E> 2
+<CJK_UNIFIED_IDEOGRAPH-3230F> 2
+<CJK_UNIFIED_IDEOGRAPH-32310> 2
+<CJK_UNIFIED_IDEOGRAPH-32311> 2
+<CJK_UNIFIED_IDEOGRAPH-32312> 2
+<CJK_UNIFIED_IDEOGRAPH-32313> 2
+<CJK_UNIFIED_IDEOGRAPH-32314> 2
+<CJK_UNIFIED_IDEOGRAPH-32315> 2
+<CJK_UNIFIED_IDEOGRAPH-32316> 2
+<CJK_UNIFIED_IDEOGRAPH-32317> 2
+<CJK_UNIFIED_IDEOGRAPH-32318> 2
+<CJK_UNIFIED_IDEOGRAPH-32319> 2
+<CJK_UNIFIED_IDEOGRAPH-3231A> 2
+<CJK_UNIFIED_IDEOGRAPH-3231B> 2
+<CJK_UNIFIED_IDEOGRAPH-3231C> 2
+<CJK_UNIFIED_IDEOGRAPH-3231D> 2
+<CJK_UNIFIED_IDEOGRAPH-3231E> 2
+<CJK_UNIFIED_IDEOGRAPH-3231F> 2
+<CJK_UNIFIED_IDEOGRAPH-32320> 2
+<CJK_UNIFIED_IDEOGRAPH-32321> 2
+<CJK_UNIFIED_IDEOGRAPH-32322> 2
+<CJK_UNIFIED_IDEOGRAPH-32323> 2
+<CJK_UNIFIED_IDEOGRAPH-32324> 2
+<CJK_UNIFIED_IDEOGRAPH-32325> 2
+<CJK_UNIFIED_IDEOGRAPH-32326> 2
+<CJK_UNIFIED_IDEOGRAPH-32327> 2
+<CJK_UNIFIED_IDEOGRAPH-32328> 2
+<CJK_UNIFIED_IDEOGRAPH-32329> 2
+<CJK_UNIFIED_IDEOGRAPH-3232A> 2
+<CJK_UNIFIED_IDEOGRAPH-3232B> 2
+<CJK_UNIFIED_IDEOGRAPH-3232C> 2
+<CJK_UNIFIED_IDEOGRAPH-3232D> 2
+<CJK_UNIFIED_IDEOGRAPH-3232E> 2
+<CJK_UNIFIED_IDEOGRAPH-3232F> 2
+<CJK_UNIFIED_IDEOGRAPH-32330> 2
+<CJK_UNIFIED_IDEOGRAPH-32331> 2
+<CJK_UNIFIED_IDEOGRAPH-32332> 2
+<CJK_UNIFIED_IDEOGRAPH-32333> 2
+<CJK_UNIFIED_IDEOGRAPH-32334> 2
+<CJK_UNIFIED_IDEOGRAPH-32335> 2
+<CJK_UNIFIED_IDEOGRAPH-32336> 2
+<CJK_UNIFIED_IDEOGRAPH-32337> 2
+<CJK_UNIFIED_IDEOGRAPH-32338> 2
+<CJK_UNIFIED_IDEOGRAPH-32339> 2
+<CJK_UNIFIED_IDEOGRAPH-3233A> 2
+<CJK_UNIFIED_IDEOGRAPH-3233B> 2
+<CJK_UNIFIED_IDEOGRAPH-3233C> 2
+<CJK_UNIFIED_IDEOGRAPH-3233D> 2
+<CJK_UNIFIED_IDEOGRAPH-3233E> 2
+<CJK_UNIFIED_IDEOGRAPH-3233F> 2
+<CJK_UNIFIED_IDEOGRAPH-32340> 2
+<CJK_UNIFIED_IDEOGRAPH-32341> 2
+<CJK_UNIFIED_IDEOGRAPH-32342> 2
+<CJK_UNIFIED_IDEOGRAPH-32343> 2
+<CJK_UNIFIED_IDEOGRAPH-32344> 2
+<CJK_UNIFIED_IDEOGRAPH-32345> 2
+<CJK_UNIFIED_IDEOGRAPH-32346> 2
+<CJK_UNIFIED_IDEOGRAPH-32347> 2
+<CJK_UNIFIED_IDEOGRAPH-32348> 2
+<CJK_UNIFIED_IDEOGRAPH-32349> 2
+<CJK_UNIFIED_IDEOGRAPH-3234A> 2
+<CJK_UNIFIED_IDEOGRAPH-3234B> 2
+<CJK_UNIFIED_IDEOGRAPH-3234C> 2
+<CJK_UNIFIED_IDEOGRAPH-3234D> 2
+<CJK_UNIFIED_IDEOGRAPH-3234E> 2
+<CJK_UNIFIED_IDEOGRAPH-3234F> 2
+<CJK_UNIFIED_IDEOGRAPH-32350> 2
+<CJK_UNIFIED_IDEOGRAPH-32351> 2
+<CJK_UNIFIED_IDEOGRAPH-32352> 2
+<CJK_UNIFIED_IDEOGRAPH-32353> 2
+<CJK_UNIFIED_IDEOGRAPH-32354> 2
+<CJK_UNIFIED_IDEOGRAPH-32355> 2
+<CJK_UNIFIED_IDEOGRAPH-32356> 2
+<CJK_UNIFIED_IDEOGRAPH-32357> 2
+<CJK_UNIFIED_IDEOGRAPH-32358> 2
+<CJK_UNIFIED_IDEOGRAPH-32359> 2
+<CJK_UNIFIED_IDEOGRAPH-3235A> 2
+<CJK_UNIFIED_IDEOGRAPH-3235B> 2
+<CJK_UNIFIED_IDEOGRAPH-3235C> 2
+<CJK_UNIFIED_IDEOGRAPH-3235D> 2
+<CJK_UNIFIED_IDEOGRAPH-3235E> 2
+<CJK_UNIFIED_IDEOGRAPH-3235F> 2
+<CJK_UNIFIED_IDEOGRAPH-32360> 2
+<CJK_UNIFIED_IDEOGRAPH-32361> 2
+<CJK_UNIFIED_IDEOGRAPH-32362> 2
+<CJK_UNIFIED_IDEOGRAPH-32363> 2
+<CJK_UNIFIED_IDEOGRAPH-32364> 2
+<CJK_UNIFIED_IDEOGRAPH-32365> 2
+<CJK_UNIFIED_IDEOGRAPH-32366> 2
+<CJK_UNIFIED_IDEOGRAPH-32367> 2
+<CJK_UNIFIED_IDEOGRAPH-32368> 2
+<CJK_UNIFIED_IDEOGRAPH-32369> 2
+<CJK_UNIFIED_IDEOGRAPH-3236A> 2
+<CJK_UNIFIED_IDEOGRAPH-3236B> 2
+<CJK_UNIFIED_IDEOGRAPH-3236C> 2
+<CJK_UNIFIED_IDEOGRAPH-3236D> 2
+<CJK_UNIFIED_IDEOGRAPH-3236E> 2
+<CJK_UNIFIED_IDEOGRAPH-3236F> 2
+<CJK_UNIFIED_IDEOGRAPH-32370> 2
+<CJK_UNIFIED_IDEOGRAPH-32371> 2
+<CJK_UNIFIED_IDEOGRAPH-32372> 2
+<CJK_UNIFIED_IDEOGRAPH-32373> 2
+<CJK_UNIFIED_IDEOGRAPH-32374> 2
+<CJK_UNIFIED_IDEOGRAPH-32375> 2
+<CJK_UNIFIED_IDEOGRAPH-32376> 2
+<CJK_UNIFIED_IDEOGRAPH-32377> 2
+<CJK_UNIFIED_IDEOGRAPH-32378> 2
+<CJK_UNIFIED_IDEOGRAPH-32379> 2
+<CJK_UNIFIED_IDEOGRAPH-3237A> 2
+<CJK_UNIFIED_IDEOGRAPH-3237B> 2
+<CJK_UNIFIED_IDEOGRAPH-3237C> 2
+<CJK_UNIFIED_IDEOGRAPH-3237D> 2
+<CJK_UNIFIED_IDEOGRAPH-3237E> 2
+<CJK_UNIFIED_IDEOGRAPH-3237F> 2
+<CJK_UNIFIED_IDEOGRAPH-32380> 2
+<CJK_UNIFIED_IDEOGRAPH-32381> 2
+<CJK_UNIFIED_IDEOGRAPH-32382> 2
+<CJK_UNIFIED_IDEOGRAPH-32383> 2
+<CJK_UNIFIED_IDEOGRAPH-32384> 2
+<CJK_UNIFIED_IDEOGRAPH-32385> 2
+<CJK_UNIFIED_IDEOGRAPH-32386> 2
+<CJK_UNIFIED_IDEOGRAPH-32387> 2
+<CJK_UNIFIED_IDEOGRAPH-32388> 2
+<CJK_UNIFIED_IDEOGRAPH-32389> 2
+<CJK_UNIFIED_IDEOGRAPH-3238A> 2
+<CJK_UNIFIED_IDEOGRAPH-3238B> 2
+<CJK_UNIFIED_IDEOGRAPH-3238C> 2
+<CJK_UNIFIED_IDEOGRAPH-3238D> 2
+<CJK_UNIFIED_IDEOGRAPH-3238E> 2
+<CJK_UNIFIED_IDEOGRAPH-3238F> 2
+<CJK_UNIFIED_IDEOGRAPH-32390> 2
+<CJK_UNIFIED_IDEOGRAPH-32391> 2
+<CJK_UNIFIED_IDEOGRAPH-32392> 2
+<CJK_UNIFIED_IDEOGRAPH-32393> 2
+<CJK_UNIFIED_IDEOGRAPH-32394> 2
+<CJK_UNIFIED_IDEOGRAPH-32395> 2
+<CJK_UNIFIED_IDEOGRAPH-32396> 2
+<CJK_UNIFIED_IDEOGRAPH-32397> 2
+<CJK_UNIFIED_IDEOGRAPH-32398> 2
+<CJK_UNIFIED_IDEOGRAPH-32399> 2
+<CJK_UNIFIED_IDEOGRAPH-3239A> 2
+<CJK_UNIFIED_IDEOGRAPH-3239B> 2
+<CJK_UNIFIED_IDEOGRAPH-3239C> 2
+<CJK_UNIFIED_IDEOGRAPH-3239D> 2
+<CJK_UNIFIED_IDEOGRAPH-3239E> 2
+<CJK_UNIFIED_IDEOGRAPH-3239F> 2
+<CJK_UNIFIED_IDEOGRAPH-323A0> 2
+<CJK_UNIFIED_IDEOGRAPH-323A1> 2
+<CJK_UNIFIED_IDEOGRAPH-323A2> 2
+<CJK_UNIFIED_IDEOGRAPH-323A3> 2
+<CJK_UNIFIED_IDEOGRAPH-323A4> 2
+<CJK_UNIFIED_IDEOGRAPH-323A5> 2
+<CJK_UNIFIED_IDEOGRAPH-323A6> 2
+<CJK_UNIFIED_IDEOGRAPH-323A7> 2
+<CJK_UNIFIED_IDEOGRAPH-323A8> 2
+<CJK_UNIFIED_IDEOGRAPH-323A9> 2
+<CJK_UNIFIED_IDEOGRAPH-323AA> 2
+<CJK_UNIFIED_IDEOGRAPH-323AB> 2
+<CJK_UNIFIED_IDEOGRAPH-323AC> 2
+<CJK_UNIFIED_IDEOGRAPH-323AD> 2
+<CJK_UNIFIED_IDEOGRAPH-323AE> 2
+<CJK_UNIFIED_IDEOGRAPH-323AF> 2
<LANGUAGE_TAG> 0
<TAG_SPACE> 0
<TAG_EXCLAMATION_MARK> 0
diff --git a/tools/tools/locale/tools/charmaps.pm b/tools/tools/locale/tools/charmaps.pm
index 827df3bc8820..94471b3c8c97 100644
--- a/tools/tools/locale/tools/charmaps.pm
+++ b/tools/tools/locale/tools/charmaps.pm
@@ -1,6 +1,6 @@
#!/usr/local/bin/perl -w
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright 2009 Edwin Groothuis <edwin@FreeBSD.org>
#
@@ -25,7 +25,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
use strict;
diff --git a/tools/tools/locale/tools/cldr2def.pl b/tools/tools/locale/tools/cldr2def.pl
index e65ec30fa6d5..e59e6d3b13a1 100755
--- a/tools/tools/locale/tools/cldr2def.pl
+++ b/tools/tools/locale/tools/cldr2def.pl
@@ -1,6 +1,6 @@
#!/usr/local/bin/perl -wC
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright 2009 Edwin Groothuis <edwin@FreeBSD.org>
# Copyright 2015 John Marino <draco@marino.st>
@@ -27,7 +27,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
use strict;
use File::Copy;
@@ -948,7 +947,6 @@ sub make_makefile {
}
open(FOUT, ">$TYPE.draft/Makefile");
print FOUT <<EOF;
-# \$FreeBSD\$
# Warning: Do not edit. This file is automatically generated from the
# tools in /usr/src/tools/tools/locale.
diff --git a/tools/tools/locale/tools/convert_map.pl b/tools/tools/locale/tools/convert_map.pl
index 8b54ff33381b..a7e2d35b1df3 100755
--- a/tools/tools/locale/tools/convert_map.pl
+++ b/tools/tools/locale/tools/convert_map.pl
@@ -1,6 +1,5 @@
#! /usr/local/bin/perl
#
-# $FreeBSD$
#
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
diff --git a/tools/tools/locale/tools/extract-colldef.awk b/tools/tools/locale/tools/extract-colldef.awk
index d02f1c49a6af..3bde13be484a 100644
--- a/tools/tools/locale/tools/extract-colldef.awk
+++ b/tools/tools/locale/tools/extract-colldef.awk
@@ -1,5 +1,5 @@
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright 2016 Baptiste Daroussin <bapt@FreeBSD.org>
#
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
BEGIN {
print "# Warning: Do not edit. This is automatically extracted"
diff --git a/tools/tools/locale/tools/finalize b/tools/tools/locale/tools/finalize
index 207b97ff3cb5..23afaddafa9b 100755
--- a/tools/tools/locale/tools/finalize
+++ b/tools/tools/locale/tools/finalize
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright 2015 John Marino <draco@marino.st>
#
@@ -25,7 +25,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# This is a helper script for the Makefile in the parent directory.
# When the localization definitions are generated in the draft area,
diff --git a/tools/tools/locale/tools/getwidths.c b/tools/tools/locale/tools/getwidths.c
index f1c7c6cc463d..63c62791253f 100644
--- a/tools/tools/locale/tools/getwidths.c
+++ b/tools/tools/locale/tools/getwidths.c
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <locale.h>
@@ -30,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)
{
@@ -45,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/locale/tools/mkwidths.pl b/tools/tools/locale/tools/mkwidths.pl
index 54cfdb59fe99..ad079196dbf2 100755
--- a/tools/tools/locale/tools/mkwidths.pl
+++ b/tools/tools/locale/tools/mkwidths.pl
@@ -1,6 +1,6 @@
#!/usr/local/bin/perl -w
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright 2009 Edwin Groothuis <edwin@FreeBSD.org>
# Copyright 2015 John Marino <draco@marino.st>
@@ -27,7 +27,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
use strict;
use Encode qw(encode decode);
diff --git a/tools/tools/locale/tools/utf8-rollup.pl b/tools/tools/locale/tools/utf8-rollup.pl
index b275828d52c9..8c4e80eb7c47 100755
--- a/tools/tools/locale/tools/utf8-rollup.pl
+++ b/tools/tools/locale/tools/utf8-rollup.pl
@@ -1,6 +1,6 @@
#!/usr/local/bin/perl -wC
-# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright 2009 Edwin Groothuis <edwin@FreeBSD.org>
# Copyright 2015 John Marino <draco@marino.st>
@@ -26,7 +26,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
use strict;
use Getopt::Long;
diff --git a/tools/tools/makeroot/Makefile b/tools/tools/makeroot/Makefile
index ebf81aee8340..fffe06d26f75 100644
--- a/tools/tools/makeroot/Makefile
+++ b/tools/tools/makeroot/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SCRIPTS= makeroot.sh
MAN= makeroot.8
diff --git a/tools/tools/makeroot/Makefile.depend b/tools/tools/makeroot/Makefile.depend
index f80275d86ab1..11aba52f82cf 100644
--- a/tools/tools/makeroot/Makefile.depend
+++ b/tools/tools/makeroot/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
diff --git a/tools/tools/makeroot/makeroot.8 b/tools/tools/makeroot/makeroot.8
index 0ba3fdcad05c..d3556d2c5722 100644
--- a/tools/tools/makeroot/makeroot.8
+++ b/tools/tools/makeroot/makeroot.8
@@ -26,8 +26,6 @@
.\" 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.
-.\"
-.\" $FreeBSD$
.Dd May 20, 2013
.Dt MAKEROOT 8
.Os
diff --git a/tools/tools/makeroot/makeroot.sh b/tools/tools/makeroot/makeroot.sh
index a1b450e1d836..165453cfa254 100755
--- a/tools/tools/makeroot/makeroot.sh
+++ b/tools/tools/makeroot/makeroot.sh
@@ -29,7 +29,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
usage()
{
diff --git a/tools/tools/man/README b/tools/tools/man/README
index b0fd24cf1236..b928a8f9578c 100644
--- a/tools/tools/man/README
+++ b/tools/tools/man/README
@@ -19,5 +19,3 @@ was sourced from.
There are a number of exceptions, and those should be added to the
script to skip over, e.g. `SDT_PROBE`. The last one is added because
adding the numbered args is a bit redundant.
-
-$FreeBSD$
diff --git a/tools/tools/man/checkmlinks.sh b/tools/tools/man/checkmlinks.sh
index 21ebf6ac218a..4ca1baea9820 100755
--- a/tools/tools/man/checkmlinks.sh
+++ b/tools/tools/man/checkmlinks.sh
@@ -23,7 +23,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
for i in *.[0-9]*; do
diff --git a/tools/tools/mcgrab/Makefile b/tools/tools/mcgrab/Makefile
index a470227a4a72..61eca34b4d56 100644
--- a/tools/tools/mcgrab/Makefile
+++ b/tools/tools/mcgrab/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG_CXX= mcgrab
CFLAGS+= -I${.CURDIR}/../mctest
diff --git a/tools/tools/mcgrab/mcgrab.1 b/tools/tools/mcgrab/mcgrab.1
index 2c6bfa608d56..9bbdff4f85bf 100644
--- a/tools/tools/mcgrab/mcgrab.1
+++ b/tools/tools/mcgrab/mcgrab.1
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd July 9, 2008
.Dt MCGRAB 1
.Os
diff --git a/tools/tools/mcgrab/mcgrab.cc b/tools/tools/mcgrab/mcgrab.cc
index 35687b8d42ce..4b34103869ab 100644
--- a/tools/tools/mcgrab/mcgrab.cc
+++ b/tools/tools/mcgrab/mcgrab.cc
@@ -30,8 +30,6 @@
//
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
// C++ STL and other related includes
#include <stdlib.h>
#include <limits.h>
diff --git a/tools/tools/mctest/Makefile b/tools/tools/mctest/Makefile
index dc583e55a222..0616e599ecfb 100644
--- a/tools/tools/mctest/Makefile
+++ b/tools/tools/mctest/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG_CXX= mctest
LIBADD= pthread
diff --git a/tools/tools/mctest/mctest.1 b/tools/tools/mctest/mctest.1
index 3cec879d4ba6..8c1fd6701e91 100644
--- a/tools/tools/mctest/mctest.1
+++ b/tools/tools/mctest/mctest.1
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd April 3, 2008
.Dt MCTEST 1
.Os
diff --git a/tools/tools/mctest/mctest.cc b/tools/tools/mctest/mctest.cc
index 6d723ba137f2..b6fdf62ed7bf 100644
--- a/tools/tools/mctest/mctest.cc
+++ b/tools/tools/mctest/mctest.cc
@@ -33,8 +33,6 @@
//
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
// C++ STL and other related includes
#include <iostream>
#include <string>
diff --git a/tools/tools/mctest/mctest.h b/tools/tools/mctest/mctest.h
index 955464c8795a..019b8b5efef7 100644
--- a/tools/tools/mctest/mctest.h
+++ b/tools/tools/mctest/mctest.h
@@ -24,7 +24,6 @@
// SUCH DAMAGE.
//
//
-// $FreeBSD$
//
const char* DEFAULT_GROUP = "239.255.255.1";
diff --git a/tools/tools/mctest/mctest_run.sh b/tools/tools/mctest/mctest_run.sh
index 0b405231fefc..8dfc5afadd42 100644
--- a/tools/tools/mctest/mctest_run.sh
+++ b/tools/tools/mctest/mctest_run.sh
@@ -2,7 +2,6 @@
#
# A program to act as a test harness for the mctest program
#
-# $FreeBSD$
#
# Defaults
size=1024
diff --git a/tools/tools/mfi/Makefile b/tools/tools/mfi/Makefile
index da8bc1b0fb96..bfae20586df5 100644
--- a/tools/tools/mfi/Makefile
+++ b/tools/tools/mfi/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= mfi_checkq
MAN=
BINDIR?=/usr/local/bin
diff --git a/tools/tools/mfi/mfi_checkq.c b/tools/tools/mfi/mfi_checkq.c
index 9f860ad92d22..05d0e97e21d6 100644
--- a/tools/tools/mfi/mfi_checkq.c
+++ b/tools/tools/mfi/mfi_checkq.c
@@ -23,9 +23,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
diff --git a/tools/tools/mfi/runmegacli.sh b/tools/tools/mfi/runmegacli.sh
index cf1f93864619..b293622f45df 100644
--- a/tools/tools/mfi/runmegacli.sh
+++ b/tools/tools/mfi/runmegacli.sh
@@ -1,6 +1,4 @@
#!/bin/sh
-
-# $FreeBSD$
# This is a simple wrapper for running the MegaCLI tool for Linux. It assumes
# that the MegaCLI binary has been installed in /compat/linux/usr/sbin/MegaCli.
# The binary must also have been branded appropriately, and the COMPAT_LINUX,
diff --git a/tools/tools/mid/mid-build b/tools/tools/mid/mid-build
deleted file mode 100755
index 0a2d4480a5a8..000000000000
--- a/tools/tools/mid/mid-build
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) March 1998 Wolfram Schneider <wosch@FreeBSD.org>
-#
-# create a Message-ID, In-Reply-To look(1) index database
-#
-# $FreeBSD$
-
-
-TMPDIR=/var/tmp; export TMPDIR
-home=/g/www/mid
-
-dbout=$home/index
-archive=$home/archive
-
-PATH=$home/bin:/bin:/usr/bin:/usr/local/bin; export PATH
-
-
-all ()
-{
- ( cd $archive || exit 1
- find text/* -type f | mid-master-index 4 mid-index $dbout/mid
- )
-}
-
-current ()
-{
- ( cd $archive || exit 1
- find current/freebsd-* current/cvs-* -type f |
- mid-master-index 1 mid-index $dbout/mid-current
- )
-}
-
-if [ $# -le 0 ]; then
- echo "usage mid-build {current|all}"
- exit 1
-fi
-
-for db
-do
- case $db in
- current) current;;
- all) all;;
- *) echo "Huh? $db";;
- esac
-done
diff --git a/tools/tools/mid/mid-index b/tools/tools/mid/mid-index
deleted file mode 100755
index a5ec10b78f3b..000000000000
--- a/tools/tools/mid/mid-index
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/local/bin/perl
-#
-# create message-id / in-reply-to database
-#
-# $FreeBSD$
-
-sub usage { die "usage: mid-index name < filelist"; }
-
-sub id {
- local($name, @files) = @_;
- local($bytes, $bytes2, $headlen, $file);
- local($counter);
- local($from,$from2);
-
- $counter = 0;
- open(MID, "| sort -u -o $name.mid") || die "open sort > $name.mid: $!\n";
- open(IRT, "| sort -u -o $name.irt") || die "open sort > $name.irt: $!\n";
-
- while(<>) {
- local($/) = "\n\n";
- chop;
- $file = $_;
-
- open(R, $file) || do {
- warn "open $file:$!\n";
- next;
- };
- $bytes = 0;
-
- while(<R>) {
- $headlen = length($_);
- $from2 = substr($_, 0, 6);
- $from = substr($from2, 0, 5);
-
- # warn "xxx" . $from . "yyy\n";
- if ($from eq "From " || $from2 eq "\nFrom ") {
-
- if ($from eq "From ") {
- $bytes2 = $bytes;
- } else {
- # One bytes more for "\nFrom "
- $bytes2 = $bytes + 1;
- }
-
- $counter++;
- s/\n[ \t]+/ /g;
- if ($debug && $counter % $speedstep == 0) {
- print STDERR sprintf("\r%7d", $counter);
- }
-
- foreach (split("\n")) {
- if (/^Message-id:\s+\<([^$idsep]+)/oi) {
- print MID "$1 $file $bytes2\n";
- } elsif (/^Resent-Message-id:\s+\<([^$idsep]+)/oi) {
- print MID "$1 $file $bytes2\n";
- } elsif (/^References:\s+\<([^$idsep]+)/oi) {
- print IRT "$1 $file $bytes2\n";
- } elsif (/^In-Reply-to:\s+[^<]*\<([^$idsep]+)/oi) {
- print IRT "$1 $file $bytes2\n";
- }
- }
- }
- $bytes += $headlen;
- }
- close R;
- }
- close MID || warn "close: MID\n";
- close IRT || warn "close: IRT\n";
- print STDERR sprintf("\r%7d", $counter)
- if $debug && $counter % $speedstep != 0;
- print STDERR "\n" if $debug;
-}
-
-$idsep = '>';
-$idsep = '>@\s';
-$debug = 0;
-$speedstep = 100;
-
-&usage if $#ARGV != 0;
-$name = $ARGV[0]; shift @ARGV;
-&id($name);
-
-
diff --git a/tools/tools/mid/mid-master b/tools/tools/mid/mid-master
deleted file mode 100755
index 5ee531a11ab7..000000000000
--- a/tools/tools/mid/mid-master
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/local/bin/perl
-
-if ($#ARGV < 1) {
- die "usage master counter command comandargs ... \n";
-}
-
-$count = $ARGV[0]; shift @ARGV;
-@command = @ARGV;
-$file = pop(@command);
-undef @ARGV;
-$debug = 0;
-
-for($i = 0; $i < $count; $i ++) {
- @c = (@command, "$file.$i");
- warn "Start process: $i @c\n" if $debug;
- open("OUT$i", "| @c") || die "open @c\n";
- select("OUT$i"); $| = 1;
-}
-select(STDOUT);
-
-$n = 0;
-while(<>) {
- $o = 'OUT' . ($n % $count);
- print $o $_;
- warn "$o $_" if $debug;
- $n++
-}
-
-for($i = 0; $i < $count; $i ++) {
- warn "Close process $i\n" if $debug;
- close("OUT$i") || warn "close OUT$i: $!\n";
-}
-
diff --git a/tools/tools/mid/mid-master-index b/tools/tools/mid/mid-master-index
deleted file mode 100755
index 8b32acd66a2b..000000000000
--- a/tools/tools/mid/mid-master-index
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-if [ $# -le 2 ]; then
- echo "usage $0 parallel_processes command [comand_options]"
- exit 1
-fi
-
-count=$1; shift
-command=$1; shift
-file=$1; shift
-filelistmid=`perl -e "for(0 .. $count -1) {print qq{$file.temp.\\$_.mid }}"`
-filelistirt=`perl -e "for(0 .. $count -1) {print qq{$file.temp.\\$_.irt }}"`
-
-if mid-master $count $command $file.temp; then
- sort -u -m -o $file.temp.mid $filelistmid &&
- rm -f $filelistmid && mv $file.temp.mid $file.mid || exit 1
- sort -u -m -o $file.temp.irt $filelistirt &&
- rm -f $filelistirt && mv $file.temp.irt $file.irt || exit 1
-else
- exit 1
-fi
diff --git a/tools/tools/mtxstat/mtxratio.sh b/tools/tools/mtxstat/mtxratio.sh
index 02a66a94a246..5dc4a0ad15e5 100644
--- a/tools/tools/mtxstat/mtxratio.sh
+++ b/tools/tools/mtxstat/mtxratio.sh
@@ -1,2 +1 @@
-# $FreeBSD$
sysctl debug.mutex.prof.stats | awk '$1 ~ /[0-9]+/ { if ($3 != 0) { hld_prc = $5 / $3 * 100; lck_prc = $6 / $3 * 100 } else { hld_prc = 0; lck_prc = 0 } print $1 " " $2 " " $3 " " $4 " " $5 " " hld_prc " " $6 " " lck_prc " " substr($0, index($0, $7)); next } { print }'
diff --git a/tools/tools/mtxstat/mtxstat.pl b/tools/tools/mtxstat/mtxstat.pl
index c621389dd24d..eaf95cf1df54 100644
--- a/tools/tools/mtxstat/mtxstat.pl
+++ b/tools/tools/mtxstat/mtxstat.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl -Tw
#-
-# Copyright (c) 2002 Dag-Erling Coïdan Smørgrav
+# Copyright (c) 2002 Dag-Erling Smørgrav
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-# $FreeBSD$
#
use strict;
diff --git a/tools/tools/mwl/Makefile b/tools/tools/mwl/Makefile
index 64161c3897cc..fc0f22878718 100644
--- a/tools/tools/mwl/Makefile
+++ b/tools/tools/mwl/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= mwlstats mwldebug
.include <bsd.subdir.mk>
diff --git a/tools/tools/mwl/mwldebug/Makefile b/tools/tools/mwl/mwldebug/Makefile
index 62514d7fd11e..8ec0d0cf5a69 100644
--- a/tools/tools/mwl/mwldebug/Makefile
+++ b/tools/tools/mwl/mwldebug/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= mwldebug
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/mwl/mwldebug/mwldebug.c b/tools/tools/mwl/mwldebug/mwldebug.c
index 4080053534ca..12885c2f5c2f 100644
--- a/tools/tools/mwl/mwldebug/mwldebug.c
+++ b/tools/tools/mwl/mwldebug/mwldebug.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/mwl/mwlstats/Makefile b/tools/tools/mwl/mwlstats/Makefile
index 69382b8f820a..74d8c7df80be 100644
--- a/tools/tools/mwl/mwlstats/Makefile
+++ b/tools/tools/mwl/mwlstats/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= mwlstats
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/mwl/mwlstats/main.c b/tools/tools/mwl/mwlstats/main.c
index 025c410f5723..04e3547e5a16 100644
--- a/tools/tools/mwl/mwlstats/main.c
+++ b/tools/tools/mwl/mwlstats/main.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/mwl/mwlstats/mwlstats.c b/tools/tools/mwl/mwlstats/mwlstats.c
index 00d0c75a2376..c9f6fe1ada2b 100644
--- a/tools/tools/mwl/mwlstats/mwlstats.c
+++ b/tools/tools/mwl/mwlstats/mwlstats.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -128,7 +126,7 @@ static const struct fmt mwlstats[] = {
#define S_RX_FRAGERROR AFTER(S_RX_OVERFLOW)
{ 6, "rxfrag", "rxfrag", "rx failed in f/w due to defrag" },
#define S_RX_MEMERROR AFTER(S_RX_FRAGERROR)
- { 5, "rxmem", "rxmem", "rx failed in f/w 'cuz out of of memory" },
+ { 5, "rxmem", "rxmem", "rx failed in f/w 'cuz out of memory" },
#define S_PTRERROR AFTER(S_RX_MEMERROR)
{ 6, "badptr", "badptr", "MAC internal pointer problem" },
#define S_TX_UNDERFLOW AFTER(S_PTRERROR)
diff --git a/tools/tools/mwl/mwlstats/mwlstats.h b/tools/tools/mwl/mwlstats/mwlstats.h
index 7d8902e5f14e..d2201d4339de 100644
--- a/tools/tools/mwl/mwlstats/mwlstats.h
+++ b/tools/tools/mwl/mwlstats/mwlstats.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _MWLSTATS_H_
diff --git a/tools/tools/nanobsd/Files/root/change_password b/tools/tools/nanobsd/Files/root/change_password
index daf4c8ca0e83..38a57100d735 100644
--- a/tools/tools/nanobsd/Files/root/change_password
+++ b/tools/tools/nanobsd/Files/root/change_password
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
diff --git a/tools/tools/nanobsd/Files/root/save_cfg b/tools/tools/nanobsd/Files/root/save_cfg
index c2611a27b971..24f812197a68 100644
--- a/tools/tools/nanobsd/Files/root/save_cfg
+++ b/tools/tools/nanobsd/Files/root/save_cfg
@@ -25,7 +25,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
@@ -63,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/Files/root/save_sshkeys b/tools/tools/nanobsd/Files/root/save_sshkeys
index 03fccf4ac0a2..7d6ec0674800 100644
--- a/tools/tools/nanobsd/Files/root/save_sshkeys
+++ b/tools/tools/nanobsd/Files/root/save_sshkeys
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
diff --git a/tools/tools/nanobsd/Files/root/update b/tools/tools/nanobsd/Files/root/update
index 245479bd27e9..d495452d627e 100644
--- a/tools/tools/nanobsd/Files/root/update
+++ b/tools/tools/nanobsd/Files/root/update
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Script to update a NanoBSD system.
#
diff --git a/tools/tools/nanobsd/Files/root/updatep1 b/tools/tools/nanobsd/Files/root/updatep1
index 6b83de530a50..0ae9b7c857cc 100644
--- a/tools/tools/nanobsd/Files/root/updatep1
+++ b/tools/tools/nanobsd/Files/root/updatep1
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Script to update partition 1 on a NanoBSD system.
#
diff --git a/tools/tools/nanobsd/Files/root/updatep2 b/tools/tools/nanobsd/Files/root/updatep2
index fc5312be0c46..99d29637f904 100644
--- a/tools/tools/nanobsd/Files/root/updatep2
+++ b/tools/tools/nanobsd/Files/root/updatep2
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Script to update partition 2 on a NanoBSD system.
#
diff --git a/tools/tools/nanobsd/FlashDevice.sub b/tools/tools/nanobsd/FlashDevice.sub
index 90b3f6db3645..e2a3caecc810 100644
--- a/tools/tools/nanobsd/FlashDevice.sub
+++ b/tools/tools/nanobsd/FlashDevice.sub
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Convenience function for commonly used Flash devices.
#
diff --git a/tools/tools/nanobsd/defaults.sh b/tools/tools/nanobsd/defaults.sh
index 45d9fe44c650..59ae8d92f4af 100755
--- a/tools/tools/nanobsd/defaults.sh
+++ b/tools/tools/nanobsd/defaults.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
@@ -68,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"
@@ -81,7 +79,12 @@ CONF_BUILD=' '
CONF_INSTALL=' '
# Options to put in make.conf during both build- & installworld.
-CONF_WORLD=' '
+CONF_WORLD='
+WITHOUT_DEBUG_FILES=true
+WITHOUT_LIB32=true
+WITHOUT_KERNEL_SYMBOLS=true
+WITHOUT_TESTS=true
+'
# Kernel config file to use
NANO_KERNEL=GENERIC
@@ -106,7 +109,7 @@ NANO_NEWFS="-b 4096 -f 512 -i 8192 -U"
NANO_DRIVE=ada0
# Target media size in 512 bytes sectors
-NANO_MEDIASIZE=2000000
+NANO_MEDIASIZE=4000000
# Number of code images on media (1 or 2)
NANO_IMAGES=2
@@ -426,7 +429,7 @@ install_kernel ( ) (
)
native_xtools ( ) (
- print 2 "Installing the optimized native build tools for cross env"
+ pprint 2 "Installing the optimized native build tools for cross env"
pprint 3 "log: ${NANO_LOG}/_.native_xtools"
(
@@ -499,10 +502,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.
@@ -540,7 +543,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
@@ -572,13 +575,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
@@ -715,10 +747,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
@@ -761,6 +793,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
@@ -786,7 +819,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`
@@ -853,17 +886,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
@@ -874,7 +910,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
@@ -883,13 +919,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_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/dhcpd/README b/tools/tools/nanobsd/dhcpd/README
index 35bc66e21d4f..5bc9d77f8f00 100644
--- a/tools/tools/nanobsd/dhcpd/README
+++ b/tools/tools/nanobsd/dhcpd/README
@@ -1,4 +1,3 @@
-$FreeBSD$
Example for creating many different builds (including different
arch) from a common set of files, as well as building natively
diff --git a/tools/tools/nanobsd/dhcpd/common b/tools/tools/nanobsd/dhcpd/common
index 07b3f3963d0b..f24a88aab8f3 100644
--- a/tools/tools/nanobsd/dhcpd/common
+++ b/tools/tools/nanobsd/dhcpd/common
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2014 M. Warner Losh <imp@FreeBSD.org>
@@ -98,10 +97,8 @@ NANO_MAKEFS="makefs -B big \
-o bsize=4096,fsize=512,density=8192,optimization=space"
export NANO_MAKEFS
-# NB: leave c++ enabled so devd can be built
CONF_BUILD="
WITHOUT_ACPI=true
-WITHOUT_ATM=true
WITHOUT_AUDIT=true
WITHOUT_BLUETOOTH=true
WITHOUT_CALENDAR=true
diff --git a/tools/tools/nanobsd/dhcpd/os-base b/tools/tools/nanobsd/dhcpd/os-base
index 4a4d0c4b8553..d57f56ce7bb7 100644
--- a/tools/tools/nanobsd/dhcpd/os-base
+++ b/tools/tools/nanobsd/dhcpd/os-base
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2014 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/README b/tools/tools/nanobsd/embedded/README
index b77d3302d861..7da368bff1a0 100644
--- a/tools/tools/nanobsd/embedded/README
+++ b/tools/tools/nanobsd/embedded/README
@@ -1,4 +1,3 @@
-$FreeBSD$
Example for creating many different builds (including different
arch) from a common set of files, as well as building natively
@@ -23,10 +22,6 @@ Config Short description
beaglebone.cfg Create a bootable beaglebone image
qemu-amd64.cfg Create a bootable amd64 image for qemu (W)
qemu-i386.cfg Create a bootable i386 image for qemu (W)
-qemu-mips.cfg Create a bootable mips malta board image for
- qemu
-qemu-mips64.cfg Create a bootable mips malta board (64-bit
- mode) image for qemu
qemu-powerpc.cfg Create a bootable 32-bit powerpc image for
qemu
qemu-powerpc64.cfg Create a bootable 64-bit IBM-flavor image for
diff --git a/tools/tools/nanobsd/embedded/beaglebone.cfg b/tools/tools/nanobsd/embedded/beaglebone.cfg
index 03f5f8ac2900..0d718cbf9665 100644
--- a/tools/tools/nanobsd/embedded/beaglebone.cfg
+++ b/tools/tools/nanobsd/embedded/beaglebone.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/common b/tools/tools/nanobsd/embedded/common
index 3998764311bb..4aecd3602f6f 100644
--- a/tools/tools/nanobsd/embedded/common
+++ b/tools/tools/nanobsd/embedded/common
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
@@ -52,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
@@ -128,11 +126,9 @@ cust_install_machine_files ( ) (
customize_cmd cust_install_files
customize_cmd cust_install_machine_files
-# NB: leave c++ enabled so devd can be built
CONF_BUILD="
LOCAL_XTOOL_DIRS=usr.bin/mkimg
WITHOUT_ACPI=true
-WITHOUT_ATM=true
WITHOUT_AUDIT=true
WITHOUT_BLUETOOTH=true
WITHOUT_CALENDAR=true
@@ -296,9 +292,9 @@ create_diskimage_mbr ( ) (
# p1 is boot for uefi, p2 is boot for gpt, p3 is cfg, p4 is /
# and p5 is alt-root (after resize)
mkimg -a 2 ${fmtarg} ${bootmbr} -s gpt \
- -p efi:=${NANO_WORLDDIR}/boot/efiboot.img \
+ -p efi/efiboot0:=${NANO_WORLDDIR}/boot/efiboot.img \
-p freebsd-boot:=${NANO_WORLDDIR}/boot/gptboot \
- -p ${p3}:=${NANO_LOG}/_.p3 \
+ -p ${p3}/cfg:=${NANO_LOG}/_.p3 \
-p ${p4}:=${NANO_LOG}/_.p4 \
-o ${out}
;;
@@ -506,12 +502,6 @@ std_amd64 ( ) {
std_i386
}
-std_arm ( ) {
-}
-
-std_armv6 ( ) {
-}
-
std_armv7 ( ) {
}
@@ -524,20 +514,6 @@ std_i386 ( ) {
: ${NANO_BOOT_BSD:=${NANO_WORLDDIR}/boot/boot}
}
-std_mips ( ) {
- NANO_ENDIAN=big
-}
-
-std_mipsel ( ) {
-}
-
-std_mips64 ( ) {
- NANO_ENDIAN=big
-}
-
-std_mips64el ( ) {
-}
-
std_powerpc ( ) {
NANO_ENDIAN=big
}
@@ -547,10 +523,6 @@ std_powerpc64 ( ) {
NANO_ENDIAN=big
}
-std_sparc64 ( ) {
- NANO_ENDIAN=big
-}
-
#
# QEMU settings for the standard environments
#
diff --git a/tools/tools/nanobsd/embedded/i386.cfg b/tools/tools/nanobsd/embedded/i386.cfg
index 876cb105b116..f9809df910eb 100644
--- a/tools/tools/nanobsd/embedded/i386.cfg
+++ b/tools/tools/nanobsd/embedded/i386.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/pandaboard.cfg b/tools/tools/nanobsd/embedded/pandaboard.cfg
index 887df4f5b752..629d3298a27e 100644
--- a/tools/tools/nanobsd/embedded/pandaboard.cfg
+++ b/tools/tools/nanobsd/embedded/pandaboard.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2016 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg b/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg
index 98d8a49f097c..d8ae753c865f 100644
--- a/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg
+++ b/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg b/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg
index d46b3fef0bda..e6c2f5e8a564 100644
--- a/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg
+++ b/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/qemu-amd64.cfg b/tools/tools/nanobsd/embedded/qemu-amd64.cfg
index 98b9ef47cad0..4c58b6c875da 100644
--- a/tools/tools/nanobsd/embedded/qemu-amd64.cfg
+++ b/tools/tools/nanobsd/embedded/qemu-amd64.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/qemu-armv7.cfg b/tools/tools/nanobsd/embedded/qemu-armv7.cfg
index 2bf3f48114d5..aef813164d78 100644
--- a/tools/tools/nanobsd/embedded/qemu-armv7.cfg
+++ b/tools/tools/nanobsd/embedded/qemu-armv7.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2016 Andrew Turner. All Rights Reserved.
diff --git a/tools/tools/nanobsd/embedded/qemu-i386.cfg b/tools/tools/nanobsd/embedded/qemu-i386.cfg
index 63310a073dc1..1a709430dbd9 100644
--- a/tools/tools/nanobsd/embedded/qemu-i386.cfg
+++ b/tools/tools/nanobsd/embedded/qemu-i386.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/qemu-mips64.cfg b/tools/tools/nanobsd/embedded/qemu-mips64.cfg
deleted file mode 100644
index 6e936b156757..000000000000
--- a/tools/tools/nanobsd/embedded/qemu-mips64.cfg
+++ /dev/null
@@ -1,36 +0,0 @@
-# $FreeBSD$
-
-#-
-# 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=mips
-NANO_KERNEL=MALTA64
-NANO_DRIVE=ada0
-NANO_NAME=qemu-mips64
-
-. common # Pull in common definitions
-
-qemu_env
diff --git a/tools/tools/nanobsd/embedded/qemu-powerpc.cfg b/tools/tools/nanobsd/embedded/qemu-powerpc.cfg
index 2bde6e6dcec7..4a3a87ae9bba 100644
--- a/tools/tools/nanobsd/embedded/qemu-powerpc.cfg
+++ b/tools/tools/nanobsd/embedded/qemu-powerpc.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg b/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg
index e16cefdb7434..a088f46b24b4 100644
--- a/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg
+++ b/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/rpi.cfg b/tools/tools/nanobsd/embedded/rpi.cfg
deleted file mode 100644
index bf367ed26201..000000000000
--- a/tools/tools/nanobsd/embedded/rpi.cfg
+++ /dev/null
@@ -1,36 +0,0 @@
-# $FreeBSD$
-
-#-
-# 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/embedded/rpi2.cfg b/tools/tools/nanobsd/embedded/rpi2.cfg
index 2776aec18771..aee5b4990a9a 100644
--- a/tools/tools/nanobsd/embedded/rpi2.cfg
+++ b/tools/tools/nanobsd/embedded/rpi2.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/embedded/rpi3.cfg b/tools/tools/nanobsd/embedded/rpi3.cfg
index f3804c739b14..52573a1d2741 100644
--- a/tools/tools/nanobsd/embedded/rpi3.cfg
+++ b/tools/tools/nanobsd/embedded/rpi3.cfg
@@ -1,4 +1,3 @@
-# $FreeBSD$
#-
# Copyright (c) 2015 M. Warner Losh <imp@FreeBSD.org>
diff --git a/tools/tools/nanobsd/fill_pkg.sh b/tools/tools/nanobsd/fill_pkg.sh
index 80f61429ee8f..17d163709f91 100644
--- a/tools/tools/nanobsd/fill_pkg.sh
+++ b/tools/tools/nanobsd/fill_pkg.sh
@@ -25,19 +25,18 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# 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
}
@@ -54,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
@@ -107,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
@@ -117,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
@@ -156,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 0a966c8c127e..2f689212263e 100644
--- a/tools/tools/nanobsd/legacy.sh
+++ b/tools/tools/nanobsd/legacy.sh
@@ -25,7 +25,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Media geometry, only relevant if bios doesn't understand LBA.
@@ -65,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
)
@@ -117,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}"
@@ -174,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 002a51f3fab0..8840047f5318 100755
--- a/tools/tools/nanobsd/mtree-dedup.awk
+++ b/tools/tools/nanobsd/mtree-dedup.awk
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
#
@@ -85,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 c5c680025fc7..4c390d8ca371 100755
--- a/tools/tools/nanobsd/nanobsd.sh
+++ b/tools/tools/nanobsd/nanobsd.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
@@ -157,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 f82bbfbd85d8..31365834d20f 100644
--- a/tools/tools/nanobsd/pcengines/ALIX_DSK
+++ b/tools/tools/nanobsd/pcengines/ALIX_DSK
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
cpu I586_CPU
@@ -98,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/pcengines/ALIX_NFS b/tools/tools/nanobsd/pcengines/ALIX_NFS
index ca7f57ba22d0..4d1fbc768e05 100644
--- a/tools/tools/nanobsd/pcengines/ALIX_NFS
+++ b/tools/tools/nanobsd/pcengines/ALIX_NFS
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
include ALIX_DSK
diff --git a/tools/tools/nanobsd/pcengines/Files/etc/rc.conf b/tools/tools/nanobsd/pcengines/Files/etc/rc.conf
index 4db828e4e552..93fd47044afa 100644
--- a/tools/tools/nanobsd/pcengines/Files/etc/rc.conf
+++ b/tools/tools/nanobsd/pcengines/Files/etc/rc.conf
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
hostname="alix"
diff --git a/tools/tools/nanobsd/pcengines/Files/etc/ttys b/tools/tools/nanobsd/pcengines/Files/etc/ttys
index 49e9b3bee05e..7158696e7c3d 100644
--- a/tools/tools/nanobsd/pcengines/Files/etc/ttys
+++ b/tools/tools/nanobsd/pcengines/Files/etc/ttys
@@ -1,7 +1,3 @@
-#
-# $FreeBSD$
-# @(#)ttys 5.1 (Berkeley) 4/17/89
-#
# This file specifies various information about terminals on the system.
# It is used by several different programs. Common entries for the
# various columns include:
diff --git a/tools/tools/nanobsd/pcengines/Files/root/.cshrc b/tools/tools/nanobsd/pcengines/Files/root/.cshrc
index 9d73f34de277..136ede8a2206 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/.cshrc
+++ b/tools/tools/nanobsd/pcengines/Files/root/.cshrc
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
diff --git a/tools/tools/nanobsd/pcengines/Files/root/.k5login b/tools/tools/nanobsd/pcengines/Files/root/.k5login
index e01b9417fdbe..5721e640fe21 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/.k5login
+++ b/tools/tools/nanobsd/pcengines/Files/root/.k5login
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# user1/root@YOUR.REALM.WHEREVER
# user2/root@YOUR.REALM.WHEREVER
diff --git a/tools/tools/nanobsd/pcengines/Files/root/.login b/tools/tools/nanobsd/pcengines/Files/root/.login
index 196a640f28e3..cf63d2bcc90a 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/.login
+++ b/tools/tools/nanobsd/pcengines/Files/root/.login
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# .login - csh login script, read by login shell, after `.cshrc' at login.
#
diff --git a/tools/tools/nanobsd/pcengines/Files/root/change_password b/tools/tools/nanobsd/pcengines/Files/root/change_password
index daf4c8ca0e83..38a57100d735 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/change_password
+++ b/tools/tools/nanobsd/pcengines/Files/root/change_password
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
diff --git a/tools/tools/nanobsd/pcengines/Files/root/save_cfg b/tools/tools/nanobsd/pcengines/Files/root/save_cfg
index 19f11950c0e0..fb44ae905333 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/save_cfg
+++ b/tools/tools/nanobsd/pcengines/Files/root/save_cfg
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
diff --git a/tools/tools/nanobsd/pcengines/Files/root/save_sshkeys b/tools/tools/nanobsd/pcengines/Files/root/save_sshkeys
index 03fccf4ac0a2..7d6ec0674800 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/save_sshkeys
+++ b/tools/tools/nanobsd/pcengines/Files/root/save_sshkeys
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
diff --git a/tools/tools/nanobsd/pcengines/Files/root/updatep1 b/tools/tools/nanobsd/pcengines/Files/root/updatep1
index 6b83de530a50..0ae9b7c857cc 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/updatep1
+++ b/tools/tools/nanobsd/pcengines/Files/root/updatep1
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Script to update partition 1 on a NanoBSD system.
#
diff --git a/tools/tools/nanobsd/pcengines/Files/root/updatep2 b/tools/tools/nanobsd/pcengines/Files/root/updatep2
index fc5312be0c46..99d29637f904 100644
--- a/tools/tools/nanobsd/pcengines/Files/root/updatep2
+++ b/tools/tools/nanobsd/pcengines/Files/root/updatep2
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
# Script to update partition 2 on a NanoBSD system.
#
diff --git a/tools/tools/nanobsd/pcengines/alix_dsk.conf b/tools/tools/nanobsd/pcengines/alix_dsk.conf
index 559f6ab45d04..d5e6e2461567 100644
--- a/tools/tools/nanobsd/pcengines/alix_dsk.conf
+++ b/tools/tools/nanobsd/pcengines/alix_dsk.conf
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
NANO_KERNEL=ALIX_DSK
diff --git a/tools/tools/nanobsd/pcengines/alix_nfs.conf b/tools/tools/nanobsd/pcengines/alix_nfs.conf
index 745fd4bc2e1f..e69ee6f018c4 100644
--- a/tools/tools/nanobsd/pcengines/alix_nfs.conf
+++ b/tools/tools/nanobsd/pcengines/alix_nfs.conf
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
NANO_KERNEL=ALIX_NFS
diff --git a/tools/tools/nanobsd/pcengines/build.sh b/tools/tools/nanobsd/pcengines/build.sh
index 525b7ba38398..5288a4fce834 100755
--- a/tools/tools/nanobsd/pcengines/build.sh
+++ b/tools/tools/nanobsd/pcengines/build.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
if [ -z "${1}" -o \! -f "${1}" ]; then
diff --git a/tools/tools/nanobsd/pcengines/common.conf b/tools/tools/nanobsd/pcengines/common.conf
index 632ace1841cc..2264e0b0b92c 100644
--- a/tools/tools/nanobsd/pcengines/common.conf
+++ b/tools/tools/nanobsd/pcengines/common.conf
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
NANO_SRC=$(pwd)
diff --git a/tools/tools/nanobsd/pcengines/test.sh b/tools/tools/nanobsd/pcengines/test.sh
index 9997c81f8572..fc4eabbea414 100755
--- a/tools/tools/nanobsd/pcengines/test.sh
+++ b/tools/tools/nanobsd/pcengines/test.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
_run () {
diff --git a/tools/tools/nanobsd/rescue/Files/etc/ssh/ssh_config b/tools/tools/nanobsd/rescue/Files/etc/ssh/ssh_config
deleted file mode 100644
index 02d72f367089..000000000000
--- a/tools/tools/nanobsd/rescue/Files/etc/ssh/ssh_config
+++ /dev/null
@@ -1,49 +0,0 @@
-# $OpenBSD: ssh_config,v 1.35 2020/07/17 03:43:42 dtucker Exp $
-# $FreeBSD$
-
-# This is the ssh client system-wide configuration file. See
-# ssh_config(5) for more information. This file provides defaults for
-# users, and the values can be changed in per-user configuration files
-# or on the command line.
-
-# Configuration data is parsed as follows:
-# 1. command line options
-# 2. user-specific file
-# 3. system-wide file
-# Any configuration value is only changed the first time it is set.
-# Thus, host-specific definitions should be at the beginning of the
-# configuration file, and defaults at the end.
-
-# Site-wide defaults for some commonly used options. For a comprehensive
-# list of available options, their meanings and defaults, please see the
-# ssh_config(5) man page.
-
-# Host *
-# ForwardAgent no
-# ForwardX11 no
-# PasswordAuthentication yes
-# HostbasedAuthentication no
-# GSSAPIAuthentication no
-# GSSAPIDelegateCredentials no
-# BatchMode no
-# CheckHostIP no
-# AddressFamily any
-# ConnectTimeout 0
-# StrictHostKeyChecking ask
-# IdentityFile ~/.ssh/id_rsa
-# IdentityFile ~/.ssh/id_dsa
-# IdentityFile ~/.ssh/id_ecdsa
-# IdentityFile ~/.ssh/id_ed25519
-# Port 22
-# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
-# MACs hmac-md5,hmac-sha1,umac-64@openssh.com
-# EscapeChar ~
-# Tunnel no
-# TunnelDevice any:any
-# PermitLocalCommand no
-# VisualHostKey no
-# ProxyCommand ssh -q -W %h:%p gateway.example.com
-# RekeyLimit 1G 1h
-# UserKnownHostsFile ~/.ssh/known_hosts.d/%k
-# VerifyHostKeyDNS yes
-# VersionAddendum FreeBSD-20220413
diff --git a/tools/tools/nanobsd/rescue/Files/etc/ssh/sshd_config b/tools/tools/nanobsd/rescue/Files/etc/ssh/sshd_config
deleted file mode 100644
index 95087e838a56..000000000000
--- a/tools/tools/nanobsd/rescue/Files/etc/ssh/sshd_config
+++ /dev/null
@@ -1,121 +0,0 @@
-# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
-# $FreeBSD$
-
-# This is the sshd server system-wide configuration file. See
-# sshd_config(5) for more information.
-
-# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
-
-# The strategy used for options in the default sshd_config shipped with
-# OpenSSH is to specify options with their default value where
-# possible, but leave them commented. Uncommented options override the
-# default value.
-
-# Note that some of FreeBSD's defaults differ from OpenBSD's, and
-# FreeBSD has a few additional options.
-
-#Port 22
-#AddressFamily any
-#ListenAddress 0.0.0.0
-#ListenAddress ::
-
-#HostKey /etc/ssh/ssh_host_rsa_key
-#HostKey /etc/ssh/ssh_host_ecdsa_key
-#HostKey /etc/ssh/ssh_host_ed25519_key
-
-# Ciphers and keying
-#RekeyLimit default none
-
-# Logging
-#SyslogFacility AUTH
-#LogLevel INFO
-
-# Authentication:
-
-#LoginGraceTime 2m
-PermitRootLogin yes
-#StrictModes yes
-#MaxAuthTries 6
-#MaxSessions 10
-
-#PubkeyAuthentication yes
-
-# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
-# but this is overridden so installations will only check .ssh/authorized_keys
-AuthorizedKeysFile .ssh/authorized_keys
-
-#AuthorizedPrincipalsFile none
-
-#AuthorizedKeysCommand none
-#AuthorizedKeysCommandUser nobody
-
-# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
-#HostbasedAuthentication no
-# Change to yes if you don't trust ~/.ssh/known_hosts for
-# HostbasedAuthentication
-#IgnoreUserKnownHosts no
-# Don't read the user's ~/.rhosts and ~/.shosts files
-#IgnoreRhosts yes
-
-# Change to yes to enable built-in password authentication.
-#PasswordAuthentication no
-#PermitEmptyPasswords no
-
-# Change to no to disable PAM authentication
-#KbdInteractiveAuthentication yes
-
-# Kerberos options
-#KerberosAuthentication no
-#KerberosOrLocalPasswd yes
-#KerberosTicketCleanup yes
-#KerberosGetAFSToken no
-
-# GSSAPI options
-#GSSAPIAuthentication no
-#GSSAPICleanupCredentials yes
-
-# Set this to 'no' to disable PAM authentication, account processing,
-# and session processing. If this is enabled, PAM authentication will
-# be allowed through the KbdInteractiveAuthentication and
-# PasswordAuthentication. Depending on your PAM configuration,
-# PAM authentication via KbdInteractiveAuthentication may bypass
-# the setting of "PermitRootLogin without-password".
-# If you just want the PAM account and session checks to run without
-# PAM authentication, then enable this but set PasswordAuthentication
-# and KbdInteractiveAuthentication to 'no'.
-#UsePAM yes
-
-#AllowAgentForwarding yes
-#AllowTcpForwarding yes
-#GatewayPorts no
-#X11Forwarding yes
-#X11DisplayOffset 10
-#X11UseLocalhost yes
-#PermitTTY yes
-#PrintMotd yes
-#PrintLastLog yes
-#TCPKeepAlive yes
-#PermitUserEnvironment no
-#Compression delayed
-#ClientAliveInterval 0
-#ClientAliveCountMax 3
-#UseDNS yes
-#PidFile /var/run/sshd.pid
-#MaxStartups 10:30:100
-#PermitTunnel no
-#ChrootDirectory none
-#UseBlacklist no
-#VersionAddendum FreeBSD-20220413
-
-# no default banner path
-#Banner none
-
-# override default of no subsystems
-Subsystem sftp /usr/libexec/sftp-server
-
-# Example of overriding settings on a per-user basis
-#Match User anoncvs
-# X11Forwarding no
-# AllowTcpForwarding no
-# PermitTTY no
-# ForceCommand cvs server
diff --git a/tools/tools/nanobsd/rescue/Files/etc/ttys b/tools/tools/nanobsd/rescue/Files/etc/ttys
index eed846f54feb..8bf8e51dfedb 100644
--- a/tools/tools/nanobsd/rescue/Files/etc/ttys
+++ b/tools/tools/nanobsd/rescue/Files/etc/ttys
@@ -1,7 +1,3 @@
-#
-# $FreeBSD$
-# @(#)ttys 5.1 (Berkeley) 4/17/89
-#
# This file specifies various information about terminals on the system.
# It is used by several different programs. Common entries for the
# various columns include:
@@ -45,8 +41,8 @@ ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyu0 "/usr/libexec/getty std.115200" xterm-color on secure
-ttyu1 "/usr/libexec/getty std.9600" dialup off secure
-ttyu2 "/usr/libexec/getty std.9600" dialup off secure
-ttyu3 "/usr/libexec/getty std.9600" dialup off secure
+ttyu1 "/usr/libexec/getty std.115200" dialup off secure
+ttyu2 "/usr/libexec/getty std.115200" dialup off secure
+ttyu3 "/usr/libexec/getty std.115200" dialup off secure
# Dumb console
-dcons "/usr/libexec/getty std.9600" vt100 off secure
+dcons "/usr/libexec/getty std.115200" vt100 off secure
diff --git a/tools/tools/nanobsd/rescue/Files/root/.cshrc b/tools/tools/nanobsd/rescue/Files/root/.cshrc
index 50ab635e59c5..b09db73165e2 100644
--- a/tools/tools/nanobsd/rescue/Files/root/.cshrc
+++ b/tools/tools/nanobsd/rescue/Files/root/.cshrc
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
#csh .cshrc file
diff --git a/tools/tools/nanobsd/rescue/Files/root/GPT4ZFS_Create.sh b/tools/tools/nanobsd/rescue/Files/root/GPT4ZFS_Create.sh
index e52c183dbf60..7c58f1c141ab 100755
--- a/tools/tools/nanobsd/rescue/Files/root/GPT4ZFS_Create.sh
+++ b/tools/tools/nanobsd/rescue/Files/root/GPT4ZFS_Create.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
# some default sizes
align=2048
diff --git a/tools/tools/nanobsd/rescue/Files/root/ZFS_Create.txt b/tools/tools/nanobsd/rescue/Files/root/ZFS_Create.txt
index 2a33b25db30a..1f475c957c0c 100644
--- a/tools/tools/nanobsd/rescue/Files/root/ZFS_Create.txt
+++ b/tools/tools/nanobsd/rescue/Files/root/ZFS_Create.txt
@@ -1,4 +1,3 @@
-# $FreeBSD$
Some remarks for setting up a zfs boot environment
diff --git a/tools/tools/nanobsd/rescue/R32 b/tools/tools/nanobsd/rescue/R32
deleted file mode 100644
index 3c15ebee49e7..000000000000
--- a/tools/tools/nanobsd/rescue/R32
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# R32 -- Generic kernel configuration file with modifications for rescue.
-#
-# $FreeBSD$
-
-include GENERIC
-
-ident R32
-
-nooptions INVARIANTS
-nooptions INVARIANT_SUPPORT
-nooptions WITNESS
-nooptions WITNESS_SKIPSPIN
-nooptions MALLOC_DEBUG_MAXZONES
diff --git a/tools/tools/nanobsd/rescue/R64 b/tools/tools/nanobsd/rescue/R64
index 17900e2de081..b96b4865ae2e 100644
--- a/tools/tools/nanobsd/rescue/R64
+++ b/tools/tools/nanobsd/rescue/R64
@@ -1,7 +1,6 @@
#
# R64 -- Generic kernel configuration file with modifications for rescue.
#
-# $FreeBSD$
include GENERIC
diff --git a/tools/tools/nanobsd/rescue/build.sh b/tools/tools/nanobsd/rescue/build.sh
index 7d2ed80cd265..e111d3021271 100755
--- a/tools/tools/nanobsd/rescue/build.sh
+++ b/tools/tools/nanobsd/rescue/build.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
today=`date '+%Y%m%d'`
@@ -26,14 +25,6 @@ sh ../nanobsd.sh $* -c ${CFG}
if [ \! -d /usr/obj/Rescue ]; then
mkdir -p /usr/obj/Rescue
fi
-F32="/usr/obj/Rescue/rescue_${today}_x32"
-D32="/usr/obj/nanobsd.rescue_i386"
-if [ -f "${D32}/_.disk.full" ]; then
- cp "${D32}/_.disk.full" "${F32}.img"
-fi
-if [ -f "${D32}/_.disk.iso" ]; then
- cp "${D32}/_.disk.iso" "${F32}.iso"
-fi
F64="/usr/obj/Rescue/rescue_${today}_x64"
D64="/usr/obj/nanobsd.rescue_amd64"
diff --git a/tools/tools/nanobsd/rescue/common b/tools/tools/nanobsd/rescue/common
index d14ad8b5af2b..15bf10f5e67d 100644
--- a/tools/tools/nanobsd/rescue/common
+++ b/tools/tools/nanobsd/rescue/common
@@ -1,17 +1,15 @@
#
-# $FreeBSD$
#
-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="16384000"
+NANO_MEDIASIZE="6000000"
NANO_SECTS="63"
NANO_HEADS="16"
NANO_IMAGES="2"
@@ -31,10 +29,14 @@ CONF_INSTALL='
'
# Options to put in make.conf during both build- & installworld.
CONF_WORLD='
-#TARGET_ARCH=i386
CFLAGS=-O -pipe
-WITHOUT_TESTS=YES
-ALL_MODULES=YES
+# We do not need these for rescue
+WITHOUT_TESTS=true
+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/nanobsd/rescue/merge.sh b/tools/tools/nanobsd/rescue/merge.sh
deleted file mode 100755
index afb66371fe3c..000000000000
--- a/tools/tools/nanobsd/rescue/merge.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-today=`date '+%Y%m%d'`
-
-I32="/usr/obj/Rescue/rescue_${today}_x32.img"
-I64="/usr/obj/Rescue/rescue_${today}_x64.img"
-IAL="/usr/obj/Rescue/rescue_${today}_xal.img"
-D64="/usr/obj/nanobsd.rescue_amd64"
-MNT="/usr/obj/Rescue/_mnt"
-
-if [ \! -d "$MNT" ]; then
- mkdir "$MNT"
-fi
-
-dd if=${I32} of=${IAL} bs=128k
-MD=`mdconfig -a -t vnode -f ${IAL}`
-
-dd if=${D64}/_.disk.image of=/dev/${MD}s2 bs=128k
-tunefs -L rescues2a /dev/${MD}s2a
-mount /dev/${MD}s2a ${MNT}
-
-sed -i "" -e 's/rescues1/rescues2/' ${MNT}/conf/base/etc/fstab
-sed -i "" -e 's/rescues1/rescues2/' ${MNT}/etc/fstab
-
-umount ${MNT}
-
-mdconfig -d -u ${MD}
diff --git a/tools/tools/nanobsd/rescue/rescue_amd64.conf b/tools/tools/nanobsd/rescue/rescue_amd64.conf
index a82325fd52c0..6ea5f14821c4 100644
--- a/tools/tools/nanobsd/rescue/rescue_amd64.conf
+++ b/tools/tools/nanobsd/rescue/rescue_amd64.conf
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
NANO_KERNEL=R64
NANO_ARCH=amd64
diff --git a/tools/tools/nanobsd/rescue/rescue_i386.conf b/tools/tools/nanobsd/rescue/rescue_i386.conf
deleted file mode 100644
index 97b51d49e21d..000000000000
--- a/tools/tools/nanobsd/rescue/rescue_i386.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# $FreeBSD$
-#
-NANO_KERNEL=R32
-NANO_ARCH=i386
-TARGET_ARCH=i386; export TARGET_ARCH
-#TARGET_CPUTYPE=i386; export TARGET_CPUTYPE
-NANO_NAME=rescue_i386
-
-. common
diff --git a/tools/tools/ncpus/Makefile b/tools/tools/ncpus/Makefile
index 2fea81540bc0..a6f740d8c611 100644
--- a/tools/tools/ncpus/Makefile
+++ b/tools/tools/ncpus/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= ncpus
MAN=
SRCS= ncpus.c acpi.c
diff --git a/tools/tools/ncpus/acpi.c b/tools/tools/ncpus/acpi.c
index 5366dc85abe1..8723ce0e6065 100644
--- a/tools/tools/ncpus/acpi.c
+++ b/tools/tools/ncpus/acpi.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/ncpus/acpidump.h b/tools/tools/ncpus/acpidump.h
index 9c2b5b6e502d..bd5ecb47170a 100644
--- a/tools/tools/ncpus/acpidump.h
+++ b/tools/tools/ncpus/acpidump.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _ACPIDUMP_H_
diff --git a/tools/tools/ncpus/biosmptable.c b/tools/tools/ncpus/biosmptable.c
index ee39e3669775..848eadf02d0f 100644
--- a/tools/tools/ncpus/biosmptable.c
+++ b/tools/tools/ncpus/biosmptable.c
@@ -30,9 +30,6 @@
* the number of cpu's identified.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <x86/mptable.h>
diff --git a/tools/tools/ncpus/ncpus.c b/tools/tools/ncpus/ncpus.c
index 0f4498f095ba..85023e11c696 100644
--- a/tools/tools/ncpus/ncpus.c
+++ b/tools/tools/ncpus/ncpus.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
#include <stdio.h>
diff --git a/tools/tools/net80211/Makefile b/tools/tools/net80211/Makefile
index c477ca22bd03..b4b32899cd26 100644
--- a/tools/tools/net80211/Makefile
+++ b/tools/tools/net80211/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= stumbler w00t wesside wlaninject wlanstats wlantxtime wlanwatch wlanwds
.include <bsd.subdir.mk>
diff --git a/tools/tools/net80211/README b/tools/tools/net80211/README
index 3f7b1c14ee99..a73f086f5589 100644
--- a/tools/tools/net80211/README
+++ b/tools/tools/net80211/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This directory has various tools for use with the net80211 layer.
Some may not work depending on the capabilities of the underyling
diff --git a/tools/tools/net80211/mlme_assoc/Makefile b/tools/tools/net80211/mlme_assoc/Makefile
new file mode 100644
index 000000000000..580fb045ac52
--- /dev/null
+++ b/tools/tools/net80211/mlme_assoc/Makefile
@@ -0,0 +1,7 @@
+PROG= mlme_assoc
+BINDIR= /usr/bin
+MAN=
+
+SRCS= mlme_assoc.c
+
+.include <bsd.prog.mk>
diff --git a/tools/tools/net80211/mlme_assoc/README b/tools/tools/net80211/mlme_assoc/README
new file mode 100644
index 000000000000..fc5e754a58d6
--- /dev/null
+++ b/tools/tools/net80211/mlme_assoc/README
@@ -0,0 +1,51 @@
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2023 The FreeBSD Foundation
+#
+# This documentation was written by Björn Zeeb under sponsorship from
+# the FreeBSD Foundation.
+#
+# 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.
+#
+
+This is a simple program to drive net80211::ieee80211_sta_join1() calls from
+user space.
+
+The program optionally accepts an interface name (e.g., wlan42), or an
+interface name, an SSID and a BSSID.
+
+In the former case of no SSID/BSSID passed it will query the scan results and
+then try to join each entry from the scan with a short delay.
+
+In the lastter case giving the SSID/BSSID one can trigger the "canreassoc" case
+in ieee80211_sta_join1() or not depending on whether one passes the currently
+associated SSID/BSSID or not.
+
+The tool is useful to trigger net80211::newstate() changes while other
+newstate() changes are pending or being executed.
+
+I was specifically developed to show a problem with the LinuxKPI 802.11 compat
+code. The reason is that ieee80211_sta_join1() also calls in (*iv_update_bss)()
+swapping nodes before initiating the state changes and in LinuxKPI state is on
+the sta and not the vif causing all kinds of troubles, especially if we lose
+a state transition before the taskq is run or if the iv_bss node gets swapped
+before a task is executed.
diff --git a/tools/tools/net80211/mlme_assoc/mlme_assoc.c b/tools/tools/net80211/mlme_assoc/mlme_assoc.c
new file mode 100644
index 000000000000..c26aaa03fe87
--- /dev/null
+++ b/tools/tools/net80211/mlme_assoc/mlme_assoc.c
@@ -0,0 +1,200 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023 The FreeBSD Foundation
+ *
+ * This software was developed by Björn Zeeb under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * 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.
+ */
+
+/*
+ * First get scan results in a hurry.
+ * Pick a random BSSID and try to assoc.
+ * Hopefully this is enough to trigger the newstate race along with the
+ * (*iv_update_bss)() logic.
+ *
+ * Alternatively pass IF SSID BSSID in and just try that.
+ */
+
+#include <err.h>
+#include <stdio.h>
+#include <string.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+
+#include <net80211/ieee80211.h>
+#include <net80211/ieee80211_ioctl.h>
+
+static int
+if_up(int sd, const char *ifnam)
+{
+ struct ifreq ifr;
+ int error;
+
+ memset(&ifr, 0, sizeof(ifr));
+ strlcpy(ifr.ifr_name, ifnam, sizeof(ifr.ifr_name));
+
+ error = ioctl(sd, SIOCGIFFLAGS, &ifr);
+ if (error == -1) {
+ warn("SIOCGIFFLAGS");
+ return (error);
+ }
+
+ if (ifr.ifr_flags & IFF_UP)
+ return (0);
+
+ ifr.ifr_flags |= IFF_UP;
+
+ error = ioctl(sd, SIOCSIFFLAGS, &ifr);
+ if (error == -1) {
+ warn("SIOCSIFFLAGS");
+ return (error);
+ }
+
+ return (0);
+}
+
+static int
+try_mlme_assoc(int sd, const char *ifnam, uint8_t *ssid, uint8_t ssid_len, uint8_t *bssid)
+{
+ struct ieee80211req ireq;
+ struct ieee80211req_mlme mlme;
+ int error;
+
+ memset(&mlme, 0, sizeof(mlme));
+ mlme.im_op = IEEE80211_MLME_ASSOC;
+ if (ssid != NULL)
+ memcpy(mlme.im_ssid, ssid, ssid_len);
+ mlme.im_ssid_len = ssid_len;
+ if (bssid != NULL)
+ memcpy(mlme.im_macaddr, bssid, IEEE80211_ADDR_LEN);
+
+ memset(&ireq, 0, sizeof(ireq));
+ strlcpy(ireq.i_name, ifnam, sizeof(ireq.i_name));
+ ireq.i_type = IEEE80211_IOC_MLME;
+ ireq.i_val = 0;
+ ireq.i_data = (void *)&mlme;
+ ireq.i_len = sizeof(mlme);
+
+ error = ioctl(sd, SIOCS80211, &ireq);
+ if (error == -1) {
+ warn("SIOCS80211, %#x", ireq.i_type);
+ return (error);
+ }
+
+ return (0);
+}
+
+static int
+mlme_assoc_scan_results(int sd, const char *ifnam)
+{
+ struct ieee80211req ireq;
+ struct ieee80211req_scan_result *sr;
+ uint8_t buf[32 * 1024], *p;
+ ssize_t len;
+ int error;
+
+ memset(&ireq, 0, sizeof(ireq));
+ strlcpy(ireq.i_name, ifnam, sizeof(ireq.i_name));
+ ireq.i_type = IEEE80211_IOC_SCAN_RESULTS;
+ ireq.i_data = (void *)buf;
+ ireq.i_len = sizeof(buf);
+
+ error = ioctl(sd, SIOCG80211, &ireq);
+ if (error == -1 || ireq.i_len < 0) {
+ warn("SIOCG80211, %#x", ireq.i_type);
+ return (error);
+ }
+
+ p = buf;
+ len = ireq.i_len;
+ while (len > (ssize_t)sizeof(*sr)) {
+ sr = (struct ieee80211req_scan_result *)(void *)p;
+ p += sr->isr_len;
+ len -= sr->isr_len;
+
+ error = try_mlme_assoc(sd, ifnam, (void *)(sr + 1), sr->isr_ssid_len,
+ sr->isr_bssid);
+ if (error != 0) {
+ warnx("try_mlme_assoc");
+ return (error);
+ }
+
+ usleep(100000);
+ }
+
+ return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ const char *ifnam;
+ uint8_t *ssid, *bssid;
+ struct ether_addr ea;
+ int error, sd;
+
+ ifnam = "wlan0";
+ ssid = NULL;
+ bssid = NULL;
+
+ if (argc == 4) {
+ ifnam = argv[1];
+ ssid = (uint8_t *)argv[2];
+ bssid = (uint8_t *)ether_aton_r(argv[3], &ea);
+ if (bssid == NULL)
+ warnx("ether_aton_r, ignoring BSSID");
+ } else if (argc == 2) {
+ ifnam = argv[1];
+ }
+
+ sd = socket(AF_LOCAL, SOCK_DGRAM, 0);
+ if (sd == -1)
+ errx(EX_UNAVAILABLE, "socket");
+
+ error = if_up(sd, ifnam);
+ if (error != 0)
+ errx(EX_UNAVAILABLE, "if_up");
+
+ if (argc == 4) {
+ error = try_mlme_assoc(sd, ifnam, ssid, strlen((const char *)ssid), bssid);
+ if (error != 0)
+ errx(EX_UNAVAILABLE, "try_mlme_assoc");
+
+ } else {
+ error = mlme_assoc_scan_results(sd, ifnam);
+ if (error != 0)
+ errx(EX_UNAVAILABLE, "mlme_assoc_scan_results");
+ }
+
+ close(sd);
+
+ return (0);
+}
diff --git a/tools/tools/net80211/scripts/config b/tools/tools/net80211/scripts/config
index aa502e14d32d..21bc0a9858da 100644
--- a/tools/tools/net80211/scripts/config
+++ b/tools/tools/net80211/scripts/config
@@ -1,7 +1,6 @@
#
# Common configuration settings for vap test scripts.
#
-# $FreeBSD$
#
media_type()
diff --git a/tools/tools/net80211/scripts/mesh/common b/tools/tools/net80211/scripts/mesh/common
index a8816a2cf190..e640234283ec 100644
--- a/tools/tools/net80211/scripts/mesh/common
+++ b/tools/tools/net80211/scripts/mesh/common
@@ -2,7 +2,6 @@
#
# Common setup.
#
-# $FreeBSD$
#
PATH=../:.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/mesh/config.mesh b/tools/tools/net80211/scripts/mesh/config.mesh
index c144218c0668..0ccdfc1f72b0 100644
--- a/tools/tools/net80211/scripts/mesh/config.mesh
+++ b/tools/tools/net80211/scripts/mesh/config.mesh
@@ -1,7 +1,6 @@
#
# Common configuration settings for mesh test scripts.
#
-# $FreeBSD$
#
NODE1_IP=10.0.1.100
diff --git a/tools/tools/net80211/scripts/mesh/setup.simple b/tools/tools/net80211/scripts/mesh/setup.simple
index ee7b56e06763..cf32d0304834 100644
--- a/tools/tools/net80211/scripts/mesh/setup.simple
+++ b/tools/tools/net80211/scripts/mesh/setup.simple
@@ -3,7 +3,6 @@
# Script for creating a simple Mesh Point.
# Topology is fully connected if every node is a neighbor of each other.
#
-# $FreeBSD$
#
PATH=../:.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/mesh/topology.line b/tools/tools/net80211/scripts/mesh/topology.line
index 695f8bdc11d0..1b7d18cf92b0 100644
--- a/tools/tools/net80211/scripts/mesh/topology.line
+++ b/tools/tools/net80211/scripts/mesh/topology.line
@@ -4,7 +4,6 @@
#
# node1 <-> node2 <-> node3 <-> node4 <-> node5
#
-# $FreeBSD$
#
PATH=../:.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/mesh/topology.ring b/tools/tools/net80211/scripts/mesh/topology.ring
index 1810f3c05495..58d5619617e0 100644
--- a/tools/tools/net80211/scripts/mesh/topology.ring
+++ b/tools/tools/net80211/scripts/mesh/topology.ring
@@ -6,7 +6,6 @@
# ^ |
# \-------------------------------
#
-# $FreeBSD$
#
PATH=../:.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/mesh/topology.star b/tools/tools/net80211/scripts/mesh/topology.star
index a7396a0b31b3..0f190fd9f225 100644
--- a/tools/tools/net80211/scripts/mesh/topology.star
+++ b/tools/tools/net80211/scripts/mesh/topology.star
@@ -3,7 +3,6 @@
# Script for creating a mesh in star topology.
# Node 3 will be the center.
#
-# $FreeBSD$
#
PATH=../:.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/mesh/topology.tree b/tools/tools/net80211/scripts/mesh/topology.tree
index 9a2ed326d844..3183b2901395 100644
--- a/tools/tools/net80211/scripts/mesh/topology.tree
+++ b/tools/tools/net80211/scripts/mesh/topology.tree
@@ -13,7 +13,6 @@
# v v
# node4 node5
#
-# $FreeBSD$
#
PATH=../:.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.dfs b/tools/tools/net80211/scripts/setup.dfs
index 67546e91932b..1b784e3d814a 100644
--- a/tools/tools/net80211/scripts/setup.dfs
+++ b/tools/tools/net80211/scripts/setup.dfs
@@ -3,7 +3,6 @@
# Script for testing DFS; setup an AP vap on a DFS channel
# then simulate a radar event and verify operation.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.fixed b/tools/tools/net80211/scripts/setup.fixed
index d0008002dc90..96dfd66170f5 100644
--- a/tools/tools/net80211/scripts/setup.fixed
+++ b/tools/tools/net80211/scripts/setup.fixed
@@ -2,7 +2,6 @@
#
# Script for testing fixed xmit rate handling.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.local b/tools/tools/net80211/scripts/setup.local
index f56e9d585339..eb8afceea740 100644
--- a/tools/tools/net80211/scripts/setup.local
+++ b/tools/tools/net80211/scripts/setup.local
@@ -2,7 +2,6 @@
#
# Script for testing traffic to the local host (as opposed to bridged).
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.mixed b/tools/tools/net80211/scripts/setup.mixed
index 423c5342e7dd..73c5e225d439 100644
--- a/tools/tools/net80211/scripts/setup.mixed
+++ b/tools/tools/net80211/scripts/setup.mixed
@@ -2,7 +2,6 @@
#
# Script for testing multi-bss open+WPA1+WPA2.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.simple b/tools/tools/net80211/scripts/setup.simple
index 57c661aa3c46..fc8fe3fb3066 100644
--- a/tools/tools/net80211/scripts/setup.simple
+++ b/tools/tools/net80211/scripts/setup.simple
@@ -2,7 +2,6 @@
#
# Script for testing simple (single bss) ap operation.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.simple2 b/tools/tools/net80211/scripts/setup.simple2
index 7b030a9162aa..b29349c33fc6 100644
--- a/tools/tools/net80211/scripts/setup.simple2
+++ b/tools/tools/net80211/scripts/setup.simple2
@@ -2,7 +2,6 @@
#
# Script for testing multi-bss ap operation.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.sta b/tools/tools/net80211/scripts/setup.sta
index 570aaa551fb7..d511609be2d0 100644
--- a/tools/tools/net80211/scripts/setup.sta
+++ b/tools/tools/net80211/scripts/setup.sta
@@ -2,7 +2,6 @@
#
# Script for testing simple station mode operation.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.tdma-master b/tools/tools/net80211/scripts/setup.tdma-master
index f89f4caeda12..769b38b07ae9 100644
--- a/tools/tools/net80211/scripts/setup.tdma-master
+++ b/tools/tools/net80211/scripts/setup.tdma-master
@@ -2,7 +2,6 @@
#
# Setup a TDMA master and bridge it to a wired NIC.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.tdma-slave b/tools/tools/net80211/scripts/setup.tdma-slave
index 22607c2f842f..3a804e0b35b4 100644
--- a/tools/tools/net80211/scripts/setup.tdma-slave
+++ b/tools/tools/net80211/scripts/setup.tdma-slave
@@ -2,7 +2,6 @@
#
# Setup a TDMA slave and hook it into a bridge.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.tsn b/tools/tools/net80211/scripts/setup.tsn
index c5b906381fb1..fe7b61556169 100644
--- a/tools/tools/net80211/scripts/setup.tsn
+++ b/tools/tools/net80211/scripts/setup.tsn
@@ -2,7 +2,6 @@
#
# Script for testing TSN support.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.updown b/tools/tools/net80211/scripts/setup.updown
index 72a2970af329..16c9dcfc986a 100644
--- a/tools/tools/net80211/scripts/setup.updown
+++ b/tools/tools/net80211/scripts/setup.updown
@@ -3,7 +3,6 @@
# Script for test vap create+destroy. Also used to verify
# resources are reclaimed properly on destroy.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.updown.wpa b/tools/tools/net80211/scripts/setup.updown.wpa
index 36580b56e22f..3538c87c1e4f 100644
--- a/tools/tools/net80211/scripts/setup.updown.wpa
+++ b/tools/tools/net80211/scripts/setup.updown.wpa
@@ -4,7 +4,6 @@
# Also used to verify resources are reclaimed properly
# on vap destroy.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wds b/tools/tools/net80211/scripts/setup.wds
index 6df8059baba6..5a5e3bcbc23f 100644
--- a/tools/tools/net80211/scripts/setup.wds
+++ b/tools/tools/net80211/scripts/setup.wds
@@ -4,7 +4,6 @@
# Assumes an ap vap is already setup.
# Can be run multiple times to create multiple WDS vaps.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wdsmain b/tools/tools/net80211/scripts/setup.wdsmain
index c25e06fb8a74..d2f9371e1269 100644
--- a/tools/tools/net80211/scripts/setup.wdsmain
+++ b/tools/tools/net80211/scripts/setup.wdsmain
@@ -22,7 +22,6 @@
# VAP on a physical interface, which shares the MAC address of
# the physical NIC.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wdsrelay b/tools/tools/net80211/scripts/setup.wdsrelay
index d44870e81c21..fe31f027d724 100644
--- a/tools/tools/net80211/scripts/setup.wdsrelay
+++ b/tools/tools/net80211/scripts/setup.wdsrelay
@@ -6,7 +6,6 @@
# traffic from stations associated to the (local) ap. The sta
# will follow it's peer ap, dragging the ap vap with it.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wep b/tools/tools/net80211/scripts/setup.wep
index 8045431a39b5..089bbb8d3b7c 100644
--- a/tools/tools/net80211/scripts/setup.wep
+++ b/tools/tools/net80211/scripts/setup.wep
@@ -2,7 +2,6 @@
#
# Script for testing ap mode w/ WEP.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wpa b/tools/tools/net80211/scripts/setup.wpa
index 8cbc7724e344..d8cf2006a14e 100644
--- a/tools/tools/net80211/scripts/setup.wpa
+++ b/tools/tools/net80211/scripts/setup.wpa
@@ -2,7 +2,6 @@
#
# Script for testing single-bss WPA1+WPA2.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wpa1.aes b/tools/tools/net80211/scripts/setup.wpa1.aes
index f25c683c086f..b999a2a41763 100644
--- a/tools/tools/net80211/scripts/setup.wpa1.aes
+++ b/tools/tools/net80211/scripts/setup.wpa1.aes
@@ -2,7 +2,6 @@
#
# Script for testing WPA1 w/ AES.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wpa1.tkip b/tools/tools/net80211/scripts/setup.wpa1.tkip
index 35f78e2f04ed..9c7b7a6df8c6 100644
--- a/tools/tools/net80211/scripts/setup.wpa1.tkip
+++ b/tools/tools/net80211/scripts/setup.wpa1.tkip
@@ -2,7 +2,6 @@
#
# Script for testing WPA1 w/ TKIP.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wpa2 b/tools/tools/net80211/scripts/setup.wpa2
index ba92a9bc1c45..2d978b779c6e 100644
--- a/tools/tools/net80211/scripts/setup.wpa2
+++ b/tools/tools/net80211/scripts/setup.wpa2
@@ -2,7 +2,6 @@
#
# Script for testing WPA2 w/ AES.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/scripts/setup.wpa2.tkip b/tools/tools/net80211/scripts/setup.wpa2.tkip
index 8e542cad669d..f181b19fefc7 100644
--- a/tools/tools/net80211/scripts/setup.wpa2.tkip
+++ b/tools/tools/net80211/scripts/setup.wpa2.tkip
@@ -2,7 +2,6 @@
#
# Script for testing WPA2 w/ TKIP.
#
-# $FreeBSD$
#
PATH=.:$PATH
. config
diff --git a/tools/tools/net80211/stumbler/Makefile b/tools/tools/net80211/stumbler/Makefile
index 614fc6064cb8..b8d5da3340b2 100644
--- a/tools/tools/net80211/stumbler/Makefile
+++ b/tools/tools/net80211/stumbler/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= stumbler
BINDIR= /usr/local/bin
LIBADD= pcap tinfow ncursesw
diff --git a/tools/tools/net80211/stumbler/stumbler.c b/tools/tools/net80211/stumbler/stumbler.c
index 0e8d8be693a5..13d981de80a7 100644
--- a/tools/tools/net80211/stumbler/stumbler.c
+++ b/tools/tools/net80211/stumbler/stumbler.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/socket.h>
diff --git a/tools/tools/net80211/w00t/Makefile b/tools/tools/net80211/w00t/Makefile
index 1aecd6937a0e..8cc9184a005a 100644
--- a/tools/tools/net80211/w00t/Makefile
+++ b/tools/tools/net80211/w00t/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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 34eddd9206d8..fcde408757e6 100644
--- a/tools/tools/net80211/w00t/Makefile.inc
+++ b/tools/tools/net80211/w00t/Makefile.inc
@@ -1,9 +1,7 @@
-# $FreeBSD$
-
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/README b/tools/tools/net80211/w00t/README
index 58e4fc1277a8..768dd5919fa5 100644
--- a/tools/tools/net80211/w00t/README
+++ b/tools/tools/net80211/w00t/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This is a collection of tools that use raw 802.11 packet injection.
None of the tools configure the interface, so be sure to run something
diff --git a/tools/tools/net80211/w00t/ap/Makefile b/tools/tools/net80211/w00t/ap/Makefile
index 96fe419fb68a..f561227d5d19 100644
--- a/tools/tools/net80211/w00t/ap/Makefile
+++ b/tools/tools/net80211/w00t/ap/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.include <../Makefile.inc>
PROG= ap
diff --git a/tools/tools/net80211/w00t/ap/ap.c b/tools/tools/net80211/w00t/ap/ap.c
index 712eef07f156..6f5baf30ec5c 100644
--- a/tools/tools/net80211/w00t/ap/ap.c
+++ b/tools/tools/net80211/w00t/ap/ap.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/select.h>
diff --git a/tools/tools/net80211/w00t/assoc/Makefile b/tools/tools/net80211/w00t/assoc/Makefile
index 23271a3a253b..623efd4a8565 100644
--- a/tools/tools/net80211/w00t/assoc/Makefile
+++ b/tools/tools/net80211/w00t/assoc/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.include <../Makefile.inc>
PROG= assoc
diff --git a/tools/tools/net80211/w00t/assoc/assoc.c b/tools/tools/net80211/w00t/assoc/assoc.c
index 345c31570474..ace3076b2c67 100644
--- a/tools/tools/net80211/w00t/assoc/assoc.c
+++ b/tools/tools/net80211/w00t/assoc/assoc.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/time.h>
#include <stdlib.h>
diff --git a/tools/tools/net80211/w00t/expand/Makefile b/tools/tools/net80211/w00t/expand/Makefile
index ffa1334c515a..3dadccf97b8b 100644
--- a/tools/tools/net80211/w00t/expand/Makefile
+++ b/tools/tools/net80211/w00t/expand/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.include <../Makefile.inc>
PROG= expand
diff --git a/tools/tools/net80211/w00t/expand/expand.c b/tools/tools/net80211/w00t/expand/expand.c
index 64bff9990cbc..9c5fab555332 100644
--- a/tools/tools/net80211/w00t/expand/expand.c
+++ b/tools/tools/net80211/w00t/expand/expand.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/time.h>
#include <sys/types.h>
diff --git a/tools/tools/net80211/w00t/libw00t/Makefile b/tools/tools/net80211/w00t/libw00t/Makefile
index 64dc51d549cc..190cc4fd8741 100644
--- a/tools/tools/net80211/w00t/libw00t/Makefile
+++ b/tools/tools/net80211/w00t/libw00t/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
LIB= w00t
SRCS= w00t.c
INTERNALLIB= true
diff --git a/tools/tools/net80211/w00t/libw00t/w00t.c b/tools/tools/net80211/w00t/libw00t/w00t.c
index ce4a357b4a1d..3a943ee857f9 100644
--- a/tools/tools/net80211/w00t/libw00t/w00t.c
+++ b/tools/tools/net80211/w00t/libw00t/w00t.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
#include <assert.h>
diff --git a/tools/tools/net80211/w00t/libw00t/w00t.h b/tools/tools/net80211/w00t/libw00t/w00t.h
index 2164119b16e8..a982ae2b3303 100644
--- a/tools/tools/net80211/w00t/libw00t/w00t.h
+++ b/tools/tools/net80211/w00t/libw00t/w00t.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef __W00T_H__
#define __W00T_H__
diff --git a/tools/tools/net80211/w00t/prga/Makefile b/tools/tools/net80211/w00t/prga/Makefile
index c4d00b680c1c..a95727443d2d 100644
--- a/tools/tools/net80211/w00t/prga/Makefile
+++ b/tools/tools/net80211/w00t/prga/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.include <../Makefile.inc>
PROG= prga
diff --git a/tools/tools/net80211/w00t/prga/prga.c b/tools/tools/net80211/w00t/prga/prga.c
index c75d20f94f6a..45a74c439dff 100644
--- a/tools/tools/net80211/w00t/prga/prga.c
+++ b/tools/tools/net80211/w00t/prga/prga.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/endian.h>
#include <sys/time.h>
diff --git a/tools/tools/net80211/w00t/redir/Makefile b/tools/tools/net80211/w00t/redir/Makefile
index 231819640b0c..d9a22f0110ed 100644
--- a/tools/tools/net80211/w00t/redir/Makefile
+++ b/tools/tools/net80211/w00t/redir/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.include <../Makefile.inc>
PROG= redir
diff --git a/tools/tools/net80211/w00t/redir/buddy.c b/tools/tools/net80211/w00t/redir/buddy.c
index 02107eca23ac..49b7662aa481 100644
--- a/tools/tools/net80211/w00t/redir/buddy.c
+++ b/tools/tools/net80211/w00t/redir/buddy.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/uio.h>
#include <sys/types.h>
diff --git a/tools/tools/net80211/w00t/redir/redir.c b/tools/tools/net80211/w00t/redir/redir.c
index ad574ea9a251..c34aed24cf0d 100644
--- a/tools/tools/net80211/w00t/redir/redir.c
+++ b/tools/tools/net80211/w00t/redir/redir.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/time.h>
#include <sys/types.h>
diff --git a/tools/tools/net80211/wesside/Makefile b/tools/tools/net80211/wesside/Makefile
index 5b20fa43b0d5..563e8b0f1c59 100644
--- a/tools/tools/net80211/wesside/Makefile
+++ b/tools/tools/net80211/wesside/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= dics udps wesside
.include <bsd.subdir.mk>
diff --git a/tools/tools/net80211/wesside/README b/tools/tools/net80211/wesside/README
index 559348de803d..c3be377d9b47 100644
--- a/tools/tools/net80211/wesside/README
+++ b/tools/tools/net80211/wesside/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This is an implementation of the frag attack described in:
http://tapir.cs.ucl.ac.uk/bittau-wep.pdf
diff --git a/tools/tools/net80211/wesside/dics/Makefile b/tools/tools/net80211/wesside/dics/Makefile
index 96583cfac8da..f5411a28d9ef 100644
--- a/tools/tools/net80211/wesside/dics/Makefile
+++ b/tools/tools/net80211/wesside/dics/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= dics
BINDIR= /usr/local/bin
LIBADD= z
diff --git a/tools/tools/net80211/wesside/dics/dics.c b/tools/tools/net80211/wesside/dics/dics.c
index cbdff0c0fcf3..32d5f29567fe 100644
--- a/tools/tools/net80211/wesside/dics/dics.c
+++ b/tools/tools/net80211/wesside/dics/dics.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/socket.h>
diff --git a/tools/tools/net80211/wesside/udps/Makefile b/tools/tools/net80211/wesside/udps/Makefile
index b4dd203dd253..34b045cb52c3 100644
--- a/tools/tools/net80211/wesside/udps/Makefile
+++ b/tools/tools/net80211/wesside/udps/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= udps
BINDIR= /usr/local/bin
LIBADD= z
diff --git a/tools/tools/net80211/wesside/udps/udps.c b/tools/tools/net80211/wesside/udps/udps.c
index 8ffd1f02609c..1f6ee628c436 100644
--- a/tools/tools/net80211/wesside/udps/udps.c
+++ b/tools/tools/net80211/wesside/udps/udps.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
#include <sys/socket.h>
diff --git a/tools/tools/net80211/wesside/wesside/Makefile b/tools/tools/net80211/wesside/wesside/Makefile
index 65942e5352fd..50a599e848f6 100644
--- a/tools/tools/net80211/wesside/wesside/Makefile
+++ b/tools/tools/net80211/wesside/wesside/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= wesside
BINDIR= /usr/local/bin
LIBADD= z
diff --git a/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.c b/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.c
index fde09fd5f17b..a84f6f3914e4 100644
--- a/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.c
+++ b/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <string.h>
#include <stdio.h>
diff --git a/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.h b/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.h
index 3769a94ae2d0..d0c049fe25cd 100644
--- a/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.h
+++ b/tools/tools/net80211/wesside/wesside/aircrack-ptw-lib.h
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdint.h>
diff --git a/tools/tools/net80211/wesside/wesside/wesside.c b/tools/tools/net80211/wesside/wesside/wesside.c
index d1e6fd8fe6d7..84dde560da57 100644
--- a/tools/tools/net80211/wesside/wesside/wesside.c
+++ b/tools/tools/net80211/wesside/wesside/wesside.c
@@ -4,8 +4,6 @@
*
* XXX GENERAL: I DON'T CHECK FOR PACKET LENGTHS AND STUFF LIKE THAT and buffer
* overflows. this whole thing is experimental n e way.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/net80211/wlaninject/Makefile b/tools/tools/net80211/wlaninject/Makefile
index b6bbeb5ab701..5923248ad2eb 100644
--- a/tools/tools/net80211/wlaninject/Makefile
+++ b/tools/tools/net80211/wlaninject/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= wlaninject
BINDIR= /usr/local/bin
CFLAGS=-g
diff --git a/tools/tools/net80211/wlaninject/README b/tools/tools/net80211/wlaninject/README
index 16caa0148799..fd504a8036f5 100644
--- a/tools/tools/net80211/wlaninject/README
+++ b/tools/tools/net80211/wlaninject/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This tool generates raw 802.11 frames. The resulting frame will
depend on the capabilities of the hardware. Some hardware mangles
diff --git a/tools/tools/net80211/wlaninject/wlaninject.c b/tools/tools/net80211/wlaninject/wlaninject.c
index 215182a95c7b..d5c98f0e3ee0 100644
--- a/tools/tools/net80211/wlaninject/wlaninject.c
+++ b/tools/tools/net80211/wlaninject/wlaninject.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdlib.h>
#include <stdio.h>
diff --git a/tools/tools/net80211/wlanstats/Makefile b/tools/tools/net80211/wlanstats/Makefile
deleted file mode 100644
index f4384c6d0709..000000000000
--- a/tools/tools/net80211/wlanstats/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# $FreeBSD$
-
-.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 36da5c6b8e51..000000000000
--- a/tools/tools/net80211/wlanstats/main.c
+++ /dev/null
@@ -1,291 +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.
- *
- * $FreeBSD$
- */
-
-/*
- * 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;
- int allnodes = 0;
- int c, mode;
-
- ifname = getenv("WLAN");
- if (ifname == NULL)
- ifname = "wlan0";
- wf = wlanstats_new(ifname, getfmt("default"));
- while ((c = getopt(argc, argv, "ahi:lm:o:")) != -1) {
- switch (c) {
- case 'a':
- allnodes++;
- break;
- 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 2f362a60a836..000000000000
--- a/tools/tools/net80211/wlanstats/wlanstats.c
+++ /dev/null
@@ -1,1042 +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.
- *
- * $FreeBSD$
- */
-
-/*
- * 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 d6ee97e23abb..000000000000
--- a/tools/tools/net80211/wlanstats/wlanstats.h
+++ /dev/null
@@ -1,56 +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.
- *
- * $FreeBSD$
- */
-
-#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 87a852e4bd40..b133375f5a4d 100644
--- a/tools/tools/net80211/wlantxtime/Makefile
+++ b/tools/tools/net80211/wlantxtime/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= wlantxtime
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/net80211/wlantxtime/wlantxtime.c b/tools/tools/net80211/wlantxtime/wlantxtime.c
index 90c5c8f60769..edcb4403cf88 100644
--- a/tools/tools/net80211/wlantxtime/wlantxtime.c
+++ b/tools/tools/net80211/wlantxtime/wlantxtime.c
@@ -24,8 +24,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
/*
* IEEE 802.11 PHY-related support.
*/
diff --git a/tools/tools/net80211/wlanwatch/Makefile b/tools/tools/net80211/wlanwatch/Makefile
index 7cd0550071b4..0cace0f00bc7 100644
--- a/tools/tools/net80211/wlanwatch/Makefile
+++ b/tools/tools/net80211/wlanwatch/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= wlanwatch
BINDIR= /usr/local/bin
MAN=
diff --git a/tools/tools/net80211/wlanwatch/wlanwatch.c b/tools/tools/net80211/wlanwatch/wlanwatch.c
index 7ff81cc1253a..ec6d85cc1ffb 100644
--- a/tools/tools/net80211/wlanwatch/wlanwatch.c
+++ b/tools/tools/net80211/wlanwatch/wlanwatch.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -65,6 +63,7 @@
#include <sysexits.h>
#include <unistd.h>
#include <ifaddrs.h>
+#include <inttypes.h>
/* XXX */
enum ieee80211_notify_cac_event {
@@ -76,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[])
@@ -123,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)
@@ -167,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)
@@ -195,9 +189,6 @@ routename(struct sockaddr *sa)
{
struct sockaddr_in6 sin6; /* use static var for safety */
int niflags = 0;
-#ifdef NI_WITHSCOPEID
- niflags = NI_WITHSCOPEID;
-#endif
memset(&sin6, 0, sizeof(sin6));
memcpy(&sin6, sa, sa->sa_len);
@@ -225,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);
@@ -345,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) {
@@ -378,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 7a011a980b13..293ddb75f9b4 100644
--- a/tools/tools/net80211/wlanwds/Makefile
+++ b/tools/tools/net80211/wlanwds/Makefile
@@ -1,7 +1,7 @@
-# $FreeBSD$
-
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 cf1335663388..f6364c3ce4da 100644
--- a/tools/tools/net80211/wlanwds/wlanwds.c
+++ b/tools/tools/net80211/wlanwds/wlanwds.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
@@ -70,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)
@@ -109,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)
@@ -150,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");
@@ -159,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);
@@ -169,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;
}
@@ -285,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;
@@ -297,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/netmap/Makefile b/tools/tools/netmap/Makefile
index acc52fd57557..c1346149310c 100644
--- a/tools/tools/netmap/Makefile
+++ b/tools/tools/netmap/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# For multiple programs using a single source file each,
# we can just define 'progs' and create custom targets.
diff --git a/tools/tools/netmap/README b/tools/tools/netmap/README
index ff84b11f2fcb..dfb194065d6f 100644
--- a/tools/tools/netmap/README
+++ b/tools/tools/netmap/README
@@ -1,4 +1,3 @@
-$FreeBSD$
This directory contains applications that use the netmap API
diff --git a/tools/tools/netmap/bridge.8 b/tools/tools/netmap/bridge.8
index b6314ece6664..d3720ff45a59 100644
--- a/tools/tools/netmap/bridge.8
+++ b/tools/tools/netmap/bridge.8
@@ -21,8 +21,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd November 21, 2020
.Dt BRIDGE 8
.Os
diff --git a/tools/tools/netmap/bridge.c b/tools/tools/netmap/bridge.c
index 0c8f56265ff4..b8c6e786a3bf 100644
--- a/tools/tools/netmap/bridge.c
+++ b/tools/tools/netmap/bridge.c
@@ -5,8 +5,6 @@
*
* A netmap application to bridge two network interfaces,
* or one interface and the host stack.
- *
- * $FreeBSD$
*/
#include <libnetmap.h>
@@ -206,8 +204,6 @@ main(int argc, char **argv)
int loopback = 0;
int ch;
- fprintf(stderr, "%s built %s %s\n\n", argv[0], __DATE__, __TIME__);
-
while ((ch = getopt(argc, argv, "hb:ci:vw:L")) != -1) {
switch (ch) {
default:
diff --git a/tools/tools/netmap/ctrs.h b/tools/tools/netmap/ctrs.h
index eb4c4c9d4bfd..29e054442db0 100644
--- a/tools/tools/netmap/ctrs.h
+++ b/tools/tools/netmap/ctrs.h
@@ -1,7 +1,6 @@
#ifndef CTRS_H_
#define CTRS_H_
-/* $FreeBSD$ */
#include <sys/time.h>
diff --git a/tools/tools/netmap/lb.8 b/tools/tools/netmap/lb.8
index 15153e6ffbbe..1c08c03edb16 100644
--- a/tools/tools/netmap/lb.8
+++ b/tools/tools/netmap/lb.8
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd October 26, 2019
.Dt LB 8
.Os
diff --git a/tools/tools/netmap/lb.c b/tools/tools/netmap/lb.c
index 778360d9ed6a..b45e5274553c 100644
--- a/tools/tools/netmap/lb.c
+++ b/tools/tools/netmap/lb.c
@@ -22,7 +22,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
#include <ctype.h>
#include <errno.h>
#include <inttypes.h>
@@ -388,7 +387,8 @@ static void sigint_h(int sig)
signal(SIGINT, SIG_DFL);
}
-static void usage()
+static void
+usage(void)
{
printf("usage: lb [options]\n");
printf("where options are:\n");
@@ -617,7 +617,6 @@ int main(int argc, char **argv)
int ch;
uint32_t i;
int rv;
- unsigned int iter = 0;
int poll_timeout = 10; /* default */
glob_arg.ifname[0] = '\0';
@@ -897,7 +896,6 @@ run:
while (!do_abort) {
u_int polli = 0;
- iter++;
for (i = 0; i < npipes; ++i) {
struct netmap_ring *ring = ports[i].ring;
diff --git a/tools/tools/netmap/nmreplay.8 b/tools/tools/netmap/nmreplay.8
index 8b7ffae5a3d9..5307ec6f7f92 100644
--- a/tools/tools/netmap/nmreplay.8
+++ b/tools/tools/netmap/nmreplay.8
@@ -22,8 +22,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd December 21, 2018
.Dt NMREPLAY 8
.Os
diff --git a/tools/tools/netmap/nmreplay.c b/tools/tools/netmap/nmreplay.c
index e0a9e2146119..257157c48945 100644
--- a/tools/tools/netmap/nmreplay.c
+++ b/tools/tools/netmap/nmreplay.c
@@ -21,8 +21,6 @@
* 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.
- *
- * $FreeBSD$
*/
@@ -1249,6 +1247,8 @@ main(int argc, char **argv)
err += cmd_apply(delay_cfg, d[i], qs, &qs->c_delay);
err += cmd_apply(bw_cfg, b[i], qs, &qs->c_bw);
err += cmd_apply(loss_cfg, l[i], qs, &qs->c_loss);
+ if (err != 0)
+ exit(1);
}
pthread_create(&bp[0].cons_tid, NULL, nmreplay_main, (void*)&bp[0]);
@@ -1538,8 +1538,7 @@ uniform_delay_run(struct _qs *q, struct _cfg *arg)
{
uint64_t x = my_random24();
q->cur_delay = arg->d[0] + ((arg->d[2] * x) >> 24);
-#if 0 /* COMPUTE_STATS */
-#endif /* COMPUTE_STATS */
+
return 0;
}
diff --git a/tools/tools/netmap/pkt-gen.8 b/tools/tools/netmap/pkt-gen.8
index c3f0330e46ba..83643d749b4d 100644
--- a/tools/tools/netmap/pkt-gen.8
+++ b/tools/tools/netmap/pkt-gen.8
@@ -23,9 +23,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
-.Dd November 21, 2020
+.Dd April 21, 2023
.Dt PKT-GEN 8
.Os
.Sh NAME
@@ -150,7 +148,7 @@ mode), a single RX ring (in
mode), or a TX/RX ring pair.
The number of
.Ar threads
-must be less than or equal to the number of TX (or RX) ring available
+must be less than or equal to the number of TX (or RX) rings available
in the device specified by
.Ar interface .
.It Fl T Ar report_ms
@@ -288,7 +286,8 @@ length of 128 bytes.
You must set the destination MAC address for
packets to be received by the target host.
.Bd -literal -offset indent
-pkt-gen -i netmap:ncxl0 -f tx -s 172.16.0.1:53 -d 172.16.1.3:53 -D 00:07:43:29:2a:e0
+pkt-gen -i netmap:ncxl0 -f tx -s 172.16.0.1:53 -d 172.16.1.3:53 \e
+-D 00:07:43:29:2a:e0
.Ed
.Sh SEE ALSO
.Xr netmap 4 ,
diff --git a/tools/tools/netmap/pkt-gen.c b/tools/tools/netmap/pkt-gen.c
index f43469cf7ad6..c17579a142b9 100644
--- a/tools/tools/netmap/pkt-gen.c
+++ b/tools/tools/netmap/pkt-gen.c
@@ -25,7 +25,6 @@
*/
/*
- * $FreeBSD$
* $Id: pkt-gen.c 12346 2013-06-12 17:36:25Z luigi $
*
* Example program to show how to build a multithreaded packet
@@ -283,6 +282,7 @@ struct glob_arg {
#define OPT_RANDOM_SRC 512
#define OPT_RANDOM_DST 1024
#define OPT_PPS_STATS 2048
+#define OPT_UPDATE_CSUM 4096
int dev_type;
#ifndef NO_PCAP
pcap_t *p;
@@ -684,6 +684,10 @@ source_hwaddr(const char *ifname, char *buf)
return (-1);
}
+ /* remove 'netmap:' prefix before comparing interfaces */
+ if (!strncmp(ifname, "netmap:", 7))
+ ifname = &ifname[7];
+
for (ifap = ifaphead; ifap; ifap = ifap->ifa_next) {
struct sockaddr_dl *sdl =
(struct sockaddr_dl *)ifap->ifa_addr;
@@ -1001,6 +1005,85 @@ update_addresses(struct pkt *pkt, struct targ *t)
else
update_ip6(pkt, t);
}
+
+static void
+update_ip_size(struct pkt *pkt, int size)
+{
+ struct ip ip;
+ struct udphdr udp;
+ uint16_t oiplen, niplen;
+ uint16_t nudplen;
+ uint16_t ip_sum = 0;
+
+ memcpy(&ip, &pkt->ipv4.ip, sizeof(ip));
+ memcpy(&udp, &pkt->ipv4.udp, sizeof(udp));
+
+ oiplen = ntohs(ip.ip_len);
+ niplen = size - sizeof(struct ether_header);
+ ip.ip_len = htons(niplen);
+ nudplen = niplen - sizeof(struct ip);
+ udp.uh_ulen = htons(nudplen);
+ ip_sum = new_udp_sum(ip_sum, oiplen, niplen);
+
+ /* update checksums */
+ if (ip_sum != 0)
+ ip.ip_sum = ~cksum_add(~ip.ip_sum, htons(ip_sum));
+
+ udp.uh_sum = 0;
+ /* Magic: taken from sbin/dhclient/packet.c */
+ udp.uh_sum = wrapsum(
+ checksum(&udp, sizeof(udp), /* udp header */
+ checksum(pkt->ipv4.body, /* udp payload */
+ nudplen - sizeof(udp),
+ checksum(&ip.ip_src, /* pseudo header */
+ 2 * sizeof(ip.ip_src),
+ IPPROTO_UDP + (u_int32_t)ntohs(udp.uh_ulen)))));
+
+ memcpy(&pkt->ipv4.ip, &ip, sizeof(ip));
+ memcpy(&pkt->ipv4.udp, &udp, sizeof(udp));
+}
+
+static void
+update_ip6_size(struct pkt *pkt, int size)
+{
+ struct ip6_hdr ip6;
+ struct udphdr udp;
+ uint16_t niplen, nudplen;
+ uint32_t csum;
+
+ memcpy(&ip6, &pkt->ipv6.ip, sizeof(ip6));
+ memcpy(&udp, &pkt->ipv6.udp, sizeof(udp));
+
+ nudplen = niplen = size - sizeof(struct ether_header) - sizeof(ip6);
+ ip6.ip6_plen = htons(niplen);
+ udp.uh_ulen = htons(nudplen);
+
+ /* Save part of pseudo header checksum into csum */
+ udp.uh_sum = 0;
+ csum = IPPROTO_UDP << 24;
+ csum = checksum(&csum, sizeof(csum), nudplen);
+ udp.uh_sum = wrapsum(
+ checksum(&udp, sizeof(udp), /* udp header */
+ checksum(pkt->ipv6.body, /* udp payload */
+ nudplen - sizeof(udp),
+ checksum(&pkt->ipv6.ip.ip6_src, /* pseudo header */
+ 2 * sizeof(pkt->ipv6.ip.ip6_src), csum))));
+
+ memcpy(&pkt->ipv6.ip, &ip6, sizeof(ip6));
+ memcpy(&pkt->ipv6.udp, &udp, sizeof(udp));
+}
+
+static void
+update_size(struct pkt *pkt, struct targ *t, int size)
+{
+ if (t->g->options & OPT_UPDATE_CSUM) {
+ if (t->g->af == AF_INET)
+ update_ip_size(pkt, size);
+ else
+ update_ip6_size(pkt, size);
+ }
+}
+
/*
* initialize one packet and prepare for the next one.
* The copy could be done better instead of repeating it each time.
@@ -1302,7 +1385,7 @@ ping_body(void *data)
struct targ *targ = (struct targ *) data;
struct pollfd pfd = { .fd = targ->fd, .events = POLLIN };
struct netmap_if *nifp = targ->nmd->nifp;
- int i, m, rx = 0;
+ int i, m;
void *frame;
int size;
struct timespec ts, now, last_print;
@@ -1322,6 +1405,10 @@ ping_body(void *data)
return NULL;
}
+ if (targ->g->af == AF_INET6) {
+ D("Warning: ping-pong with IPv6 not supported");
+ }
+
bzero(&buckets, sizeof(buckets));
clock_gettime(CLOCK_REALTIME_PRECISE, &last_print);
now = last_print;
@@ -1391,7 +1478,9 @@ ping_body(void *data)
}
#endif /* BUSYWAIT */
/* see what we got back */
- rx = 0;
+#ifdef BUSYWAIT
+ int rx = 0;
+#endif
for (i = targ->nmd->first_rx_ring;
i <= targ->nmd->last_rx_ring; i++) {
ring = NETMAP_RXRING(nifp, i);
@@ -1426,7 +1515,9 @@ ping_body(void *data)
buckets[pos]++;
/* now store it in a bucket */
ring->head = ring->cur = nm_ring_next(ring, ring->head);
+#ifdef BUSYWAIT
rx++;
+#endif
}
}
//D("tx %d rx %d", sent, rx);
@@ -1494,7 +1585,7 @@ pong_body(void *data)
struct pollfd pfd = { .fd = targ->fd, .events = POLLIN };
struct netmap_if *nifp = targ->nmd->nifp;
struct netmap_ring *txring, *rxring;
- int i, rx = 0;
+ int i;
uint64_t sent = 0, n = targ->g->npackets;
if (targ->g->nthreads > 1) {
@@ -1504,6 +1595,11 @@ pong_body(void *data)
if (n > 0)
D("understood ponger %llu but don't know how to do it",
(unsigned long long)n);
+
+ if (targ->g->af == AF_INET6) {
+ D("Warning: ping-pong with IPv6 not supported");
+ }
+
while (!targ->cancel && (n == 0 || sent < n)) {
uint32_t txhead, txavail;
//#define BUSYWAIT
@@ -1531,7 +1627,6 @@ pong_body(void *data)
src = NETMAP_BUF(rxring, slot->buf_idx);
//D("got pkt %p of size %d", src, slot->len);
rxring->head = rxring->cur = nm_ring_next(rxring, head);
- rx++;
if (txavail == 0)
continue;
dst = NETMAP_BUF(txring,
@@ -1547,7 +1642,15 @@ pong_body(void *data)
dpkt[3] = spkt[0];
dpkt[4] = spkt[1];
dpkt[5] = spkt[2];
+ /* swap source and destination IPv4 */
+ if (spkt[6] == htons(ETHERTYPE_IP)) {
+ dpkt[13] = spkt[15];
+ dpkt[14] = spkt[16];
+ dpkt[15] = spkt[13];
+ dpkt[16] = spkt[14];
+ }
txring->slot[txhead].len = slot->len;
+ //dump_payload(dst, slot->len, txring, txhead);
txhead = nm_ring_next(txring, txhead);
txavail--;
sent++;
@@ -1558,7 +1661,6 @@ pong_body(void *data)
#ifdef BUSYWAIT
ioctl(pfd.fd, NIOCTXSYNC, NULL);
#endif
- //D("tx %d rx %d", sent, rx);
}
targ->completed = 1;
@@ -1581,7 +1683,7 @@ sender_body(void *data)
uint64_t n = targ->g->npackets / targ->g->nthreads;
uint64_t sent = 0;
uint64_t event = 0;
- int options = targ->g->options | OPT_COPY;
+ int options = targ->g->options;
struct timespec nexttime = { 0, 0}; // XXX silence compiler
int rate_limit = targ->g->tx_rate;
struct pkt *pkt = &targ->pkt;
@@ -1655,6 +1757,19 @@ sender_body(void *data)
targ->frags++;
}
D("frags %u frag_size %u", targ->frags, targ->frag_size);
+
+ /* mark all slots of all rings as changed so initial copy will be done */
+ for (i = targ->nmd->first_tx_ring; i <= targ->nmd->last_tx_ring; i++) {
+ uint32_t j;
+ struct netmap_slot *slot;
+
+ txring = NETMAP_TXRING(nifp, i);
+ for (j = 0; j < txring->num_slots; j++) {
+ slot = &txring->slot[j];
+ slot->flags = NS_BUF_CHANGED;
+ }
+ }
+
while (!targ->cancel && (n == 0 || sent < n)) {
int rv;
@@ -1691,10 +1806,6 @@ sender_body(void *data)
/*
* scan our queues and send on those with room
*/
- if (options & OPT_COPY && sent > 100000 && !(targ->g->options & OPT_COPY) ) {
- D("drop copy");
- options &= ~OPT_COPY;
- }
for (i = targ->nmd->first_tx_ring; i <= targ->nmd->last_tx_ring; i++) {
int m;
uint64_t limit = rate_limit ? tosend : targ->g->burst;
@@ -1712,6 +1823,7 @@ sender_body(void *data)
size = nrand48(targ->seed) %
(targ->g->pkt_size - targ->g->pkt_min_size) +
targ->g->pkt_min_size;
+ update_size(pkt, targ, size);
}
m = send_packets(txring, pkt, frame, size, targ,
limit, options);
@@ -2496,6 +2608,7 @@ usage(int errcode)
" OPT_RANDOM_SRC 512\n"
" OPT_RANDOM_DST 1024\n"
" OPT_PPS_STATS 2048\n"
+" OPT_UPDATE_CSUM 4096\n"
"",
cmd);
exit(errcode);
@@ -2792,7 +2905,7 @@ tap_alloc(char *dev)
/* try to create the device */
if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ) {
- D("failed to to a TUNSETIFF: %s", strerror(errno));
+ D("failed to do a TUNSETIFF: %s", strerror(errno));
close(fd);
return err;
}
@@ -3252,8 +3365,8 @@ out:
g.tx_period.tv_nsec = g.tx_period.tv_nsec % 1000000000;
}
if (g.td_type == TD_TYPE_SENDER)
- D("Sending %d packets every %ld.%09ld s",
- g.burst, g.tx_period.tv_sec, g.tx_period.tv_nsec);
+ D("Sending %d packets every %jd.%09ld s",
+ g.burst, (intmax_t)g.tx_period.tv_sec, g.tx_period.tv_nsec);
/* Install ^C handler. */
global_nthreads = g.nthreads;
sigemptyset(&ss);
diff --git a/tools/tools/netmap/pkt_hash.c b/tools/tools/netmap/pkt_hash.c
index eb9704fd2058..0016544f9090 100644
--- a/tools/tools/netmap/pkt_hash.c
+++ b/tools/tools/netmap/pkt_hash.c
@@ -25,7 +25,6 @@
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
** POSSIBILITY OF SUCH DAMAGE.
**/
-/* $FreeBSD$ */
/* for func prototypes */
#include "pkt_hash.h"
diff --git a/tools/tools/netmap/pkt_hash.h b/tools/tools/netmap/pkt_hash.h
index 7371f074079f..1f73ff97ecb0 100644
--- a/tools/tools/netmap/pkt_hash.h
+++ b/tools/tools/netmap/pkt_hash.h
@@ -25,7 +25,6 @@
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
** POSSIBILITY OF SUCH DAMAGE.
**/
-/* $FreeBSD$ */
#ifndef LB_PKT_HASH_H
#define LB_PKT_HASH_H
/*---------------------------------------------------------------------*/
diff --git a/tools/tools/netrate/Makefile b/tools/tools/netrate/Makefile
index 8fbd75e21976..095383506ef2 100644
--- a/tools/tools/netrate/Makefile
+++ b/tools/tools/netrate/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
SUBDIR= netreceive netsend netblast
diff --git a/tools/tools/netrate/Makefile.inc b/tools/tools/netrate/Makefile.inc
index 3b1228c2879a..cf63a151e331 100644
--- a/tools/tools/netrate/Makefile.inc
+++ b/tools/tools/netrate/Makefile.inc
@@ -1,4 +1,2 @@
-# $FreeBSD$
-
WARNS?= 5
WFORMAT?= 2
diff --git a/tools/tools/netrate/README b/tools/tools/netrate/README
index ff249621c5d0..8fc4765fd114 100644
--- a/tools/tools/netrate/README
+++ b/tools/tools/netrate/README
@@ -53,5 +53,3 @@ license:
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-
-$FreeBSD$
diff --git a/tools/tools/netrate/http/Makefile b/tools/tools/netrate/http/Makefile
index f73058794bc5..588199f2ae62 100644
--- a/tools/tools/netrate/http/Makefile
+++ b/tools/tools/netrate/http/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= http
MAN=
LIBADD= pthread
diff --git a/tools/tools/netrate/http/http.c b/tools/tools/netrate/http/http.c
index f70c8dd2e0d0..07fdcc992772 100644
--- a/tools/tools/netrate/http/http.c
+++ b/tools/tools/netrate/http/http.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/httpd/Makefile b/tools/tools/netrate/httpd/Makefile
index 6acbe64ecb59..18bd38009e4c 100644
--- a/tools/tools/netrate/httpd/Makefile
+++ b/tools/tools/netrate/httpd/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= httpd
MAN=
WARNS?= 3
diff --git a/tools/tools/netrate/httpd/httpd.c b/tools/tools/netrate/httpd/httpd.c
index 3e7a67212c20..3034c5c7f590 100644
--- a/tools/tools/netrate/httpd/httpd.c
+++ b/tools/tools/netrate/httpd/httpd.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/juggle/Makefile b/tools/tools/netrate/juggle/Makefile
index f7b7afdf36d0..15665e63e2ef 100644
--- a/tools/tools/netrate/juggle/Makefile
+++ b/tools/tools/netrate/juggle/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= juggle
MAN=
WARNS?= 3
diff --git a/tools/tools/netrate/juggle/juggle.c b/tools/tools/netrate/juggle/juggle.c
index 226f34ad301a..c3c1e21c3b15 100644
--- a/tools/tools/netrate/juggle/juggle.c
+++ b/tools/tools/netrate/juggle/juggle.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/netblast/Makefile b/tools/tools/netrate/netblast/Makefile
index 5911183355c3..0b1b6eb4bf71 100644
--- a/tools/tools/netrate/netblast/Makefile
+++ b/tools/tools/netrate/netblast/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= netblast
diff --git a/tools/tools/netrate/netblast/netblast.c b/tools/tools/netrate/netblast/netblast.c
index bf1f3ae67604..bf31317a0d57 100644
--- a/tools/tools/netrate/netblast/netblast.c
+++ b/tools/tools/netrate/netblast/netblast.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/endian.h>
diff --git a/tools/tools/netrate/netreceive/Makefile b/tools/tools/netrate/netreceive/Makefile
index 43489e572242..d4a421b557f5 100644
--- a/tools/tools/netrate/netreceive/Makefile
+++ b/tools/tools/netrate/netreceive/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= netreceive
diff --git a/tools/tools/netrate/netreceive/netreceive.c b/tools/tools/netrate/netreceive/netreceive.c
index a82cefcf920a..adef8aeaa255 100644
--- a/tools/tools/netrate/netreceive/netreceive.c
+++ b/tools/tools/netrate/netreceive/netreceive.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/netsend/Makefile b/tools/tools/netrate/netsend/Makefile
index 5f11f837b37b..a4c4ec187b8b 100644
--- a/tools/tools/netrate/netsend/Makefile
+++ b/tools/tools/netrate/netsend/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
CFLAGS+= -Wall
diff --git a/tools/tools/netrate/netsend/netsend.c b/tools/tools/netrate/netsend/netsend.c
index 683c82304bc0..07c20145320c 100644
--- a/tools/tools/netrate/netsend/netsend.c
+++ b/tools/tools/netrate/netsend/netsend.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/endian.h>
diff --git a/tools/tools/netrate/tcpconnect/Makefile b/tools/tools/netrate/tcpconnect/Makefile
index 59375428c6e0..a038ba496b86 100644
--- a/tools/tools/netrate/tcpconnect/Makefile
+++ b/tools/tools/netrate/tcpconnect/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tcpconnect
MAN=
WARNS?= 3
diff --git a/tools/tools/netrate/tcpconnect/tcpconnect.c b/tools/tools/netrate/tcpconnect/tcpconnect.c
index 13d32421129b..d5d9ac3e1140 100644
--- a/tools/tools/netrate/tcpconnect/tcpconnect.c
+++ b/tools/tools/netrate/tcpconnect/tcpconnect.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/tcpp/Makefile b/tools/tools/netrate/tcpp/Makefile
index 828e799ecebf..a25d418f2649 100644
--- a/tools/tools/netrate/tcpp/Makefile
+++ b/tools/tools/netrate/tcpp/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tcpp
INCS= tcpp.h
MAN=
diff --git a/tools/tools/netrate/tcpp/README b/tools/tools/netrate/tcpp/README
index 3c088c0a3b79..6817bdf8ca25 100644
--- a/tools/tools/netrate/tcpp/README
+++ b/tools/tools/netrate/tcpp/README
@@ -103,6 +103,3 @@ kldload if_cxgb
# Consider turning off TSO and/or adjusting the MTU for some scenarios:
ifconfig cxgb0 -tso
ifconfig cxgb0 mtu 1500
-
-
-$FreeBSD$
diff --git a/tools/tools/netrate/tcpp/parallelism.csh b/tools/tools/netrate/tcpp/parallelism.csh
index 2534b01b5a0f..00440eada6d4 100644
--- a/tools/tools/netrate/tcpp/parallelism.csh
+++ b/tools/tools/netrate/tcpp/parallelism.csh
@@ -1,6 +1,5 @@
#!/bin/csh
#
-# $FreeBSD$
#
# Run tcpp -s -p 8 on the server, then this on the client.
#
diff --git a/tools/tools/netrate/tcpp/runit.pl b/tools/tools/netrate/tcpp/runit.pl
index d0d52277f8ab..8664e0aca1f2 100755
--- a/tools/tools/netrate/tcpp/runit.pl
+++ b/tools/tools/netrate/tcpp/runit.pl
@@ -1,6 +1,5 @@
#!/usr/bin/perl
#
-# $FreeBSD$
#
if ($#ARGV != 0) {
diff --git a/tools/tools/netrate/tcpp/tcpp.c b/tools/tools/netrate/tcpp/tcpp.c
index a194c3d77fdb..dfd9c62b309f 100644
--- a/tools/tools/netrate/tcpp/tcpp.c
+++ b/tools/tools/netrate/tcpp/tcpp.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/tcpp/tcpp.h b/tools/tools/netrate/tcpp/tcpp.h
index ccb4e6f3ece9..81112761d627 100644
--- a/tools/tools/netrate/tcpp/tcpp.h
+++ b/tools/tools/netrate/tcpp/tcpp.h
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef TCPP_H
diff --git a/tools/tools/netrate/tcpp/tcpp_client.c b/tools/tools/netrate/tcpp/tcpp_client.c
index e88976bedf8b..bf12f194e2b2 100644
--- a/tools/tools/netrate/tcpp/tcpp_client.c
+++ b/tools/tools/netrate/tcpp/tcpp_client.c
@@ -26,8 +26,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/tcpp/tcpp_server.c b/tools/tools/netrate/tcpp/tcpp_server.c
index 0a79fbba5e30..7c35b94160ac 100644
--- a/tools/tools/netrate/tcpp/tcpp_server.c
+++ b/tools/tools/netrate/tcpp/tcpp_server.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
@@ -54,7 +52,7 @@
* Server side -- create a pool of processes, each listening on its own TCP
* port number for new connections. The first 8 bytes of each connection
* will be a network byte order length, then there will be that number of
- * bytes of data. We use non-blocking sockets with kqueue to to avoid the
+ * bytes of data. We use non-blocking sockets with kqueue to avoid the
* overhead of threading or more than one process per processor, which makes
* things a bit awkward when dealing with data we care about. As such, we
* read into a small character buffer which we then convert to a length once
diff --git a/tools/tools/netrate/tcpp/tcpp_util.c b/tools/tools/netrate/tcpp/tcpp_util.c
index 92bfc75d05cb..426bc6ffbdca 100644
--- a/tools/tools/netrate/tcpp/tcpp_util.c
+++ b/tools/tools/netrate/tcpp/tcpp_util.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/netrate/tcpreceive/Makefile b/tools/tools/netrate/tcpreceive/Makefile
index 8142a2dea97e..1d02a57656a0 100644
--- a/tools/tools/netrate/tcpreceive/Makefile
+++ b/tools/tools/netrate/tcpreceive/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tcpreceive
MAN=
WARNS?= 3
diff --git a/tools/tools/netrate/tcpreceive/tcpreceive.c b/tools/tools/netrate/tcpreceive/tcpreceive.c
index 09e60a306de2..45841cc1141a 100644
--- a/tools/tools/netrate/tcpreceive/tcpreceive.c
+++ b/tools/tools/netrate/tcpreceive/tcpreceive.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/notescheck/Makefile b/tools/tools/notescheck/Makefile
index 8899a0abd96b..493068e67eef 100644
--- a/tools/tools/notescheck/Makefile
+++ b/tools/tools/notescheck/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SCRIPTS= notescheck.py
.include <bsd.prog.mk>
diff --git a/tools/tools/notescheck/notescheck.py b/tools/tools/notescheck/notescheck.py
index 8e233870b261..98190149438d 100644
--- a/tools/tools/notescheck/notescheck.py
+++ b/tools/tools/notescheck/notescheck.py
@@ -5,7 +5,6 @@
# such as options or devices that are not specified in any NOTES files
# or MI devices specified in MD NOTES files.
#
-# $FreeBSD$
from __future__ import print_function
diff --git a/tools/tools/npe/Makefile b/tools/tools/npe/Makefile
index 4551a4b90d33..e89e95afe4ad 100644
--- a/tools/tools/npe/Makefile
+++ b/tools/tools/npe/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= npestats
.include <bsd.subdir.mk>
diff --git a/tools/tools/npe/npestats/Makefile b/tools/tools/npe/npestats/Makefile
index 740d3594cdcf..3fa9dd50c555 100644
--- a/tools/tools/npe/npestats/Makefile
+++ b/tools/tools/npe/npestats/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= npestats
SRCS= main.c npestats.c
BINDIR= /usr/local/bin
diff --git a/tools/tools/npe/npestats/main.c b/tools/tools/npe/npestats/main.c
index 8ffcbc320cf2..c80ce7ecf1da 100644
--- a/tools/tools/npe/npestats/main.c
+++ b/tools/tools/npe/npestats/main.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/npe/npestats/npestats.c b/tools/tools/npe/npestats/npestats.c
index 8fb5bc5d8f24..6ecb12f42f37 100644
--- a/tools/tools/npe/npestats/npestats.c
+++ b/tools/tools/npe/npestats/npestats.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/npe/npestats/npestats.h b/tools/tools/npe/npestats/npestats.h
index 192a5f65477f..c6120b548a1c 100644
--- a/tools/tools/npe/npestats/npestats.h
+++ b/tools/tools/npe/npestats/npestats.h
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#ifndef _NPESTATS_H_
diff --git a/tools/tools/nvmf/nvmfd/Makefile b/tools/tools/nvmf/nvmfd/Makefile
new file mode 100644
index 000000000000..dc3dcc5e3a5c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/Makefile
@@ -0,0 +1,14 @@
+.include <src.opts.mk>
+.PATH: ${SRCTOP}/sys/libkern
+
+PACKAGE=nvme-tools
+PROG= nvmfd
+SRCS= nvmfd.c controller.c ctl.c devices.c discovery.c gsb_crc32.c io.c
+CFLAGS+= -I${SRCTOP}/lib/libnvmf
+MAN= nvmfd.8
+LIBADD+= nvmf pthread util nv
+
+.include <bsd.prog.mk>
+
+CFLAGS.ctl.c= -I${SRCTOP}/sys
+CWARNFLAGS.gsb_crc32.c= -Wno-cast-align
diff --git a/tools/tools/nvmf/nvmfd/Makefile.depend b/tools/tools/nvmf/nvmfd/Makefile.depend
new file mode 100644
index 000000000000..c4c6125c7a7c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/Makefile.depend
@@ -0,0 +1,20 @@
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnv \
+ lib/libnvmf \
+ lib/libthr \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tools/tools/nvmf/nvmfd/controller.c b/tools/tools/nvmf/nvmfd/controller.c
new file mode 100644
index 000000000000..e9435bce69da
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/controller.c
@@ -0,0 +1,244 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <err.h>
+#include <errno.h>
+#include <libnvmf.h>
+#include <stdlib.h>
+
+#include "internal.h"
+
+struct controller {
+ struct nvmf_qpair *qp;
+
+ uint64_t cap;
+ uint32_t vs;
+ uint32_t cc;
+ uint32_t csts;
+
+ bool shutdown;
+
+ struct nvme_controller_data cdata;
+};
+
+static bool
+update_cc(struct controller *c, uint32_t new_cc)
+{
+ uint32_t changes;
+
+ if (c->shutdown)
+ return (false);
+ if (!nvmf_validate_cc(c->qp, c->cap, c->cc, new_cc))
+ return (false);
+
+ changes = c->cc ^ new_cc;
+ c->cc = new_cc;
+
+ /* Handle shutdown requests. */
+ if (NVMEV(NVME_CC_REG_SHN, changes) != 0 &&
+ NVMEV(NVME_CC_REG_SHN, new_cc) != 0) {
+ c->csts &= ~NVMEM(NVME_CSTS_REG_SHST);
+ c->csts |= NVMEF(NVME_CSTS_REG_SHST, NVME_SHST_COMPLETE);
+ c->shutdown = true;
+ }
+
+ if (NVMEV(NVME_CC_REG_EN, changes) != 0) {
+ if (NVMEV(NVME_CC_REG_EN, new_cc) == 0) {
+ /* Controller reset. */
+ c->csts = 0;
+ c->shutdown = true;
+ } else
+ c->csts |= NVMEF(NVME_CSTS_REG_RDY, 1);
+ }
+ return (true);
+}
+
+static void
+handle_property_get(const struct controller *c, const struct nvmf_capsule *nc,
+ const struct nvmf_fabric_prop_get_cmd *pget)
+{
+ struct nvmf_fabric_prop_get_rsp rsp;
+
+ nvmf_init_cqe(&rsp, nc, 0);
+
+ switch (le32toh(pget->ofst)) {
+ case NVMF_PROP_CAP:
+ if (pget->attrib.size != NVMF_PROP_SIZE_8)
+ goto error;
+ rsp.value.u64 = htole64(c->cap);
+ break;
+ case NVMF_PROP_VS:
+ if (pget->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ rsp.value.u32.low = htole32(c->vs);
+ break;
+ case NVMF_PROP_CC:
+ if (pget->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ rsp.value.u32.low = htole32(c->cc);
+ break;
+ case NVMF_PROP_CSTS:
+ if (pget->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ rsp.value.u32.low = htole32(c->csts);
+ break;
+ default:
+ goto error;
+ }
+
+ nvmf_send_response(nc, &rsp);
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static void
+handle_property_set(struct controller *c, const struct nvmf_capsule *nc,
+ const struct nvmf_fabric_prop_set_cmd *pset)
+{
+ switch (le32toh(pset->ofst)) {
+ case NVMF_PROP_CC:
+ if (pset->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ if (!update_cc(c, le32toh(pset->value.u32.low)))
+ goto error;
+ break;
+ default:
+ goto error;
+ }
+
+ nvmf_send_success(nc);
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static void
+handle_fabrics_command(struct controller *c,
+ const struct nvmf_capsule *nc, const struct nvmf_fabric_cmd *fc)
+{
+ switch (fc->fctype) {
+ case NVMF_FABRIC_COMMAND_PROPERTY_GET:
+ handle_property_get(c, nc,
+ (const struct nvmf_fabric_prop_get_cmd *)fc);
+ break;
+ case NVMF_FABRIC_COMMAND_PROPERTY_SET:
+ handle_property_set(c, nc,
+ (const struct nvmf_fabric_prop_set_cmd *)fc);
+ break;
+ case NVMF_FABRIC_COMMAND_CONNECT:
+ warnx("CONNECT command on connected queue");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ break;
+ case NVMF_FABRIC_COMMAND_DISCONNECT:
+ warnx("DISCONNECT command on admin queue");
+ nvmf_send_error(nc, NVME_SCT_COMMAND_SPECIFIC,
+ NVMF_FABRIC_SC_INVALID_QUEUE_TYPE);
+ break;
+ default:
+ warnx("Unsupported fabrics command %#x", fc->fctype);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+}
+
+static void
+handle_identify_command(const struct controller *c,
+ const struct nvmf_capsule *nc, const struct nvme_command *cmd)
+{
+ uint8_t cns;
+
+ cns = le32toh(cmd->cdw10) & 0xFF;
+ switch (cns) {
+ case 1:
+ break;
+ default:
+ warnx("Unsupported CNS %#x for IDENTIFY", cns);
+ goto error;
+ }
+
+ nvmf_send_controller_data(nc, &c->cdata, sizeof(c->cdata));
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+void
+controller_handle_admin_commands(struct controller *c, handle_command *cb,
+ void *cb_arg)
+{
+ struct nvmf_qpair *qp = c->qp;
+ const struct nvme_command *cmd;
+ struct nvmf_capsule *nc;
+ int error;
+
+ for (;;) {
+ error = nvmf_controller_receive_capsule(qp, &nc);
+ if (error != 0) {
+ if (error != ECONNRESET)
+ warnc(error, "Failed to read command capsule");
+ break;
+ }
+
+ cmd = nvmf_capsule_sqe(nc);
+
+ /*
+ * Only permit Fabrics commands while a controller is
+ * disabled.
+ */
+ if (NVMEV(NVME_CC_REG_EN, c->cc) == 0 &&
+ cmd->opc != NVME_OPC_FABRICS_COMMANDS) {
+ warnx("Unsupported admin opcode %#x while disabled\n",
+ cmd->opc);
+ nvmf_send_generic_error(nc,
+ NVME_SC_COMMAND_SEQUENCE_ERROR);
+ nvmf_free_capsule(nc);
+ continue;
+ }
+
+ if (cb(nc, cmd, cb_arg)) {
+ nvmf_free_capsule(nc);
+ continue;
+ }
+
+ switch (cmd->opc) {
+ case NVME_OPC_FABRICS_COMMANDS:
+ handle_fabrics_command(c, nc,
+ (const struct nvmf_fabric_cmd *)cmd);
+ break;
+ case NVME_OPC_IDENTIFY:
+ handle_identify_command(c, nc, cmd);
+ break;
+ default:
+ warnx("Unsupported admin opcode %#x", cmd->opc);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+ nvmf_free_capsule(nc);
+ }
+}
+
+struct controller *
+init_controller(struct nvmf_qpair *qp,
+ const struct nvme_controller_data *cdata)
+{
+ struct controller *c;
+
+ c = calloc(1, sizeof(*c));
+ c->qp = qp;
+ c->cap = nvmf_controller_cap(c->qp);
+ c->vs = cdata->ver;
+ c->cdata = *cdata;
+
+ return (c);
+}
+
+void
+free_controller(struct controller *c)
+{
+ free(c);
+}
diff --git a/tools/tools/nvmf/nvmfd/ctl.c b/tools/tools/nvmf/nvmfd/ctl.c
new file mode 100644
index 000000000000..73e90e1411bd
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/ctl.c
@@ -0,0 +1,137 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/param.h>
+#include <sys/linker.h>
+#include <sys/nv.h>
+#include <sys/time.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libnvmf.h>
+#include <string.h>
+
+#include <cam/ctl/ctl.h>
+#include <cam/ctl/ctl_io.h>
+#include <cam/ctl/ctl_ioctl.h>
+
+#include "internal.h"
+
+static int ctl_fd = -1;
+static int ctl_port;
+
+static void
+open_ctl(void)
+{
+ if (ctl_fd > 0)
+ return;
+
+ ctl_fd = open(CTL_DEFAULT_DEV, O_RDWR);
+ if (ctl_fd == -1 && errno == ENOENT) {
+ if (kldload("ctl") == -1)
+ err(1, "Failed to load ctl.ko");
+ ctl_fd = open(CTL_DEFAULT_DEV, O_RDWR);
+ }
+ if (ctl_fd == -1)
+ err(1, "Failed to open %s", CTL_DEFAULT_DEV);
+}
+
+void
+init_ctl_port(const char *subnqn, const struct nvmf_association_params *params)
+{
+ char result_buf[256];
+ struct ctl_port_entry entry;
+ struct ctl_req req;
+ nvlist_t *nvl;
+
+ open_ctl();
+
+ nvl = nvlist_create(0);
+
+ nvlist_add_string(nvl, "subnqn", subnqn);
+
+ /* XXX: Hardcoded in discovery.c */
+ nvlist_add_stringf(nvl, "portid", "%u", 1);
+
+ nvlist_add_stringf(nvl, "max_io_qsize", "%u", params->max_io_qsize);
+
+ memset(&req, 0, sizeof(req));
+ strlcpy(req.driver, "nvmf", sizeof(req.driver));
+ req.reqtype = CTL_REQ_CREATE;
+ req.args = nvlist_pack(nvl, &req.args_len);
+ if (req.args == NULL)
+ errx(1, "Failed to pack nvlist for CTL_PORT/CTL_REQ_CREATE");
+ req.result = result_buf;
+ req.result_len = sizeof(result_buf);
+ if (ioctl(ctl_fd, CTL_PORT_REQ, &req) != 0)
+ err(1, "ioctl(CTL_PORT/CTL_REQ_CREATE)");
+ if (req.status == CTL_LUN_ERROR)
+ errx(1, "Failed to create CTL port: %s", req.error_str);
+ if (req.status != CTL_LUN_OK)
+ errx(1, "Failed to create CTL port: %d", req.status);
+
+ nvlist_destroy(nvl);
+ nvl = nvlist_unpack(result_buf, req.result_len, 0);
+ if (nvl == NULL)
+ errx(1, "Failed to unpack nvlist from CTL_PORT/CTL_REQ_CREATE");
+
+ ctl_port = nvlist_get_number(nvl, "port_id");
+ nvlist_destroy(nvl);
+
+ memset(&entry, 0, sizeof(entry));
+ entry.targ_port = ctl_port;
+ if (ioctl(ctl_fd, CTL_ENABLE_PORT, &entry) != 0)
+ errx(1, "ioctl(CTL_ENABLE_PORT)");
+}
+
+void
+shutdown_ctl_port(const char *subnqn)
+{
+ struct ctl_req req;
+ nvlist_t *nvl;
+
+ open_ctl();
+
+ nvl = nvlist_create(0);
+
+ nvlist_add_string(nvl, "subnqn", subnqn);
+
+ memset(&req, 0, sizeof(req));
+ strlcpy(req.driver, "nvmf", sizeof(req.driver));
+ req.reqtype = CTL_REQ_REMOVE;
+ req.args = nvlist_pack(nvl, &req.args_len);
+ if (req.args == NULL)
+ errx(1, "Failed to pack nvlist for CTL_PORT/CTL_REQ_REMOVE");
+ if (ioctl(ctl_fd, CTL_PORT_REQ, &req) != 0)
+ err(1, "ioctl(CTL_PORT/CTL_REQ_REMOVE)");
+ if (req.status == CTL_LUN_ERROR)
+ errx(1, "Failed to remove CTL port: %s", req.error_str);
+ if (req.status != CTL_LUN_OK)
+ errx(1, "Failed to remove CTL port: %d", req.status);
+
+ nvlist_destroy(nvl);
+}
+
+void
+ctl_handoff_qpair(struct nvmf_qpair *qp,
+ const struct nvmf_fabric_connect_cmd *cmd,
+ const struct nvmf_fabric_connect_data *data)
+{
+ struct ctl_nvmf req;
+ int error;
+
+ memset(&req, 0, sizeof(req));
+ req.type = CTL_NVMF_HANDOFF;
+ error = nvmf_handoff_controller_qpair(qp, cmd, data, &req.data.handoff);
+ if (error != 0) {
+ warnc(error, "Failed to prepare qpair for handoff");
+ return;
+ }
+
+ if (ioctl(ctl_fd, CTL_NVMF, &req) != 0)
+ warn("ioctl(CTL_NVMF/CTL_NVMF_HANDOFF)");
+}
diff --git a/tools/tools/nvmf/nvmfd/devices.c b/tools/tools/nvmf/nvmfd/devices.c
new file mode 100644
index 000000000000..fafc1077f207
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/devices.c
@@ -0,0 +1,386 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/disk.h>
+#include <sys/gsb_crc32.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <net/ieee_oui.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libnvmf.h>
+#include <libutil.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+#define RAMDISK_PREFIX "ramdisk:"
+
+struct backing_device {
+ enum { RAMDISK, FILE, CDEV } type;
+ union {
+ int fd; /* FILE, CDEV */
+ void *mem; /* RAMDISK */
+ };
+ u_int sector_size;
+ uint64_t nlbas;
+ uint64_t eui64;
+};
+
+static struct backing_device *devices;
+static u_int ndevices;
+
+static uint64_t
+generate_eui64(uint32_t low)
+{
+ return (OUI_FREEBSD_NVME_LOW << 16 | low);
+}
+
+static uint32_t
+crc32(const void *buf, size_t len)
+{
+ return (calculate_crc32c(0xffffffff, buf, len) ^ 0xffffffff);
+}
+
+static void
+init_ramdisk(const char *config, struct backing_device *dev)
+{
+ static uint32_t ramdisk_idx = 1;
+ uint64_t num;
+
+ dev->type = RAMDISK;
+ dev->sector_size = 512;
+ if (expand_number(config, &num))
+ errx(1, "Invalid ramdisk specification: %s", config);
+ if ((num % dev->sector_size) != 0)
+ errx(1, "Invalid ramdisk size %ju", (uintmax_t)num);
+ dev->mem = calloc(num, 1);
+ dev->nlbas = num / dev->sector_size;
+ dev->eui64 = generate_eui64('M' << 24 | ramdisk_idx++);
+}
+
+static void
+init_filedevice(const char *config, int fd, struct stat *sb,
+ struct backing_device *dev)
+{
+ dev->type = FILE;
+ dev->fd = fd;
+ dev->sector_size = 512;
+ if ((sb->st_size % dev->sector_size) != 0)
+ errx(1, "File size is not a multiple of 512: %s", config);
+ dev->nlbas = sb->st_size / dev->sector_size;
+ dev->eui64 = generate_eui64('F' << 24 |
+ (crc32(config, strlen(config)) & 0xffffff));
+}
+
+static void
+init_chardevice(const char *config, int fd, struct backing_device *dev)
+{
+ off_t len;
+
+ dev->type = CDEV;
+ dev->fd = fd;
+ if (ioctl(fd, DIOCGSECTORSIZE, &dev->sector_size) != 0)
+ err(1, "Failed to fetch sector size for %s", config);
+ if (ioctl(fd, DIOCGMEDIASIZE, &len) != 0)
+ err(1, "Failed to fetch sector size for %s", config);
+ dev->nlbas = len / dev->sector_size;
+ dev->eui64 = generate_eui64('C' << 24 |
+ (crc32(config, strlen(config)) & 0xffffff));
+}
+
+static void
+init_device(const char *config, struct backing_device *dev)
+{
+ struct stat sb;
+ int fd;
+
+ /* Check for a RAM disk. */
+ if (strncmp(RAMDISK_PREFIX, config, strlen(RAMDISK_PREFIX)) == 0) {
+ init_ramdisk(config + strlen(RAMDISK_PREFIX), dev);
+ return;
+ }
+
+ fd = open(config, O_RDWR);
+ if (fd == -1)
+ err(1, "Failed to open %s", config);
+ if (fstat(fd, &sb) == -1)
+ err(1, "fstat");
+ switch (sb.st_mode & S_IFMT) {
+ case S_IFCHR:
+ init_chardevice(config, fd, dev);
+ break;
+ case S_IFREG:
+ init_filedevice(config, fd, &sb, dev);
+ break;
+ default:
+ errx(1, "Invalid file type for %s", config);
+ }
+}
+
+void
+register_devices(int ac, char **av)
+{
+ ndevices = ac;
+ devices = calloc(ndevices, sizeof(*devices));
+
+ for (int i = 0; i < ac; i++)
+ init_device(av[i], &devices[i]);
+}
+
+u_int
+device_count(void)
+{
+ return (ndevices);
+}
+
+static struct backing_device *
+lookup_device(uint32_t nsid)
+{
+ if (nsid == 0 || nsid > ndevices)
+ return (NULL);
+ return (&devices[nsid - 1]);
+}
+
+void
+device_active_nslist(uint32_t nsid, struct nvme_ns_list *nslist)
+{
+ u_int count;
+
+ memset(nslist, 0, sizeof(*nslist));
+ count = 0;
+ nsid++;
+ while (nsid <= ndevices) {
+ nslist->ns[count] = htole32(nsid);
+ count++;
+ if (count == nitems(nslist->ns))
+ break;
+ nsid++;
+ }
+}
+
+bool
+device_identification_descriptor(uint32_t nsid, void *buf)
+{
+ struct backing_device *dev;
+ char *p;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL)
+ return (false);
+
+ memset(buf, 0, 4096);
+
+ p = buf;
+
+ /* EUI64 */
+ *p++ = 1;
+ *p++ = 8;
+ p += 2;
+ be64enc(p, dev->eui64);
+ return (true);
+}
+
+bool
+device_namespace_data(uint32_t nsid, struct nvme_namespace_data *nsdata)
+{
+ struct backing_device *dev;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL)
+ return (false);
+
+ memset(nsdata, 0, sizeof(*nsdata));
+ nsdata->nsze = htole64(dev->nlbas);
+ nsdata->ncap = nsdata->nsze;
+ nsdata->nuse = nsdata->ncap;
+ nsdata->nlbaf = 1 - 1;
+ nsdata->flbas = NVMEF(NVME_NS_DATA_FLBAS_FORMAT, 0);
+ nsdata->lbaf[0] = NVMEF(NVME_NS_DATA_LBAF_LBADS,
+ ffs(dev->sector_size) - 1);
+
+ be64enc(nsdata->eui64, dev->eui64);
+ return (true);
+}
+
+static bool
+read_buffer(int fd, void *buf, size_t len, off_t offset)
+{
+ ssize_t nread;
+ char *dst;
+
+ dst = buf;
+ while (len > 0) {
+ nread = pread(fd, dst, len, offset);
+ if (nread == -1 && errno == EINTR)
+ continue;
+ if (nread <= 0)
+ return (false);
+ dst += nread;
+ len -= nread;
+ offset += nread;
+ }
+ return (true);
+}
+
+void
+device_read(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc)
+{
+ struct backing_device *dev;
+ char *p, *src;
+ off_t off;
+ size_t len;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return;
+ }
+
+ if (lba + nlb < lba || lba + nlb > dev->nlbas) {
+ nvmf_send_generic_error(nc, NVME_SC_LBA_OUT_OF_RANGE);
+ return;
+ }
+
+ off = lba * dev->sector_size;
+ len = nlb * dev->sector_size;
+ if (nvmf_capsule_data_len(nc) != len) {
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+ return;
+ }
+
+ if (dev->type == RAMDISK) {
+ p = NULL;
+ src = (char *)dev->mem + off;
+ } else {
+ p = malloc(len);
+ if (!read_buffer(dev->fd, p, len, off)) {
+ free(p);
+ nvmf_send_generic_error(nc,
+ NVME_SC_INTERNAL_DEVICE_ERROR);
+ return;
+ }
+ src = p;
+ }
+
+ nvmf_send_controller_data(nc, src, len);
+ free(p);
+}
+
+static bool
+write_buffer(int fd, const void *buf, size_t len, off_t offset)
+{
+ ssize_t nwritten;
+ const char *src;
+
+ src = buf;
+ while (len > 0) {
+ nwritten = pwrite(fd, src, len, offset);
+ if (nwritten == -1 && errno == EINTR)
+ continue;
+ if (nwritten <= 0)
+ return (false);
+ src += nwritten;
+ len -= nwritten;
+ offset += nwritten;
+ }
+ return (true);
+}
+
+void
+device_write(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc)
+{
+ struct backing_device *dev;
+ char *p, *dst;
+ off_t off;
+ size_t len;
+ int error;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return;
+ }
+
+ if (lba + nlb < lba || lba + nlb > dev->nlbas) {
+ nvmf_send_generic_error(nc, NVME_SC_LBA_OUT_OF_RANGE);
+ return;
+ }
+
+ off = lba * dev->sector_size;
+ len = nlb * dev->sector_size;
+ if (nvmf_capsule_data_len(nc) != len) {
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+ return;
+ }
+
+ if (dev->type == RAMDISK) {
+ p = NULL;
+ dst = (char *)dev->mem + off;
+ } else {
+ p = malloc(len);
+ dst = p;
+ }
+
+ error = nvmf_receive_controller_data(nc, 0, dst, len);
+ if (error != 0) {
+ nvmf_send_generic_error(nc, NVME_SC_TRANSIENT_TRANSPORT_ERROR);
+ free(p);
+ return;
+ }
+
+ if (dev->type != RAMDISK) {
+ if (!write_buffer(dev->fd, p, len, off)) {
+ free(p);
+ nvmf_send_generic_error(nc,
+ NVME_SC_INTERNAL_DEVICE_ERROR);
+ return;
+ }
+ }
+ free(p);
+ nvmf_send_success(nc);
+}
+
+void
+device_flush(uint32_t nsid, const struct nvmf_capsule *nc)
+{
+ struct backing_device *dev;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return;
+ }
+
+ switch (dev->type) {
+ case RAMDISK:
+ break;
+ case FILE:
+ if (fdatasync(dev->fd) == -1) {
+ nvmf_send_error(nc, NVME_SCT_MEDIA_ERROR,
+ NVME_SC_WRITE_FAULTS);
+ return;
+ }
+ break;
+ case CDEV:
+ if (ioctl(dev->fd, DIOCGFLUSH) == -1) {
+ nvmf_send_error(nc, NVME_SCT_MEDIA_ERROR,
+ NVME_SC_WRITE_FAULTS);
+ return;
+ }
+ }
+
+ nvmf_send_success(nc);
+}
diff --git a/tools/tools/nvmf/nvmfd/discovery.c b/tools/tools/nvmf/nvmfd/discovery.c
new file mode 100644
index 000000000000..2cfe56731d7c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/discovery.c
@@ -0,0 +1,342 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <assert.h>
+#include <err.h>
+#include <libnvmf.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+struct io_controller_data {
+ struct nvme_discovery_log_entry entry;
+ bool wildcard;
+};
+
+struct discovery_controller {
+ struct nvme_discovery_log *discovery_log;
+ size_t discovery_log_len;
+ int s;
+};
+
+struct discovery_thread_arg {
+ struct controller *c;
+ struct nvmf_qpair *qp;
+ int s;
+};
+
+static struct io_controller_data *io_controllers;
+static struct nvmf_association *discovery_na;
+static u_int num_io_controllers;
+
+static bool
+init_discovery_log_entry(struct nvme_discovery_log_entry *entry, int s,
+ const char *subnqn)
+{
+ struct sockaddr_storage ss;
+ socklen_t len;
+ bool wildcard;
+
+ len = sizeof(ss);
+ if (getsockname(s, (struct sockaddr *)&ss, &len) == -1)
+ err(1, "getsockname");
+
+ memset(entry, 0, sizeof(*entry));
+ entry->trtype = NVMF_TRTYPE_TCP;
+ switch (ss.ss_family) {
+ case AF_INET:
+ {
+ struct sockaddr_in *sin;
+
+ sin = (struct sockaddr_in *)&ss;
+ entry->adrfam = NVMF_ADRFAM_IPV4;
+ snprintf(entry->trsvcid, sizeof(entry->trsvcid), "%u",
+ htons(sin->sin_port));
+ if (inet_ntop(AF_INET, &sin->sin_addr, entry->traddr,
+ sizeof(entry->traddr)) == NULL)
+ err(1, "inet_ntop");
+ wildcard = (sin->sin_addr.s_addr == htonl(INADDR_ANY));
+ break;
+ }
+ case AF_INET6:
+ {
+ struct sockaddr_in6 *sin6;
+
+ sin6 = (struct sockaddr_in6 *)&ss;
+ entry->adrfam = NVMF_ADRFAM_IPV6;
+ snprintf(entry->trsvcid, sizeof(entry->trsvcid), "%u",
+ htons(sin6->sin6_port));
+ if (inet_ntop(AF_INET6, &sin6->sin6_addr, entry->traddr,
+ sizeof(entry->traddr)) == NULL)
+ err(1, "inet_ntop");
+ wildcard = (memcmp(&sin6->sin6_addr, &in6addr_any,
+ sizeof(in6addr_any)) == 0);
+ break;
+ }
+ default:
+ errx(1, "Unsupported address family %u", ss.ss_family);
+ }
+ entry->subtype = NVMF_SUBTYPE_NVME;
+ if (flow_control_disable)
+ entry->treq |= (1 << 2);
+ entry->portid = htole16(1);
+ entry->cntlid = htole16(NVMF_CNTLID_DYNAMIC);
+ entry->aqsz = NVME_MAX_ADMIN_ENTRIES;
+ strlcpy(entry->subnqn, subnqn, sizeof(entry->subnqn));
+ return (wildcard);
+}
+
+void
+init_discovery(void)
+{
+ struct nvmf_association_params aparams;
+
+ memset(&aparams, 0, sizeof(aparams));
+ aparams.sq_flow_control = false;
+ aparams.dynamic_controller_model = true;
+ aparams.max_admin_qsize = NVME_MAX_ADMIN_ENTRIES;
+ aparams.tcp.pda = 0;
+ aparams.tcp.header_digests = header_digests;
+ aparams.tcp.data_digests = data_digests;
+ aparams.tcp.maxh2cdata = maxh2cdata;
+ discovery_na = nvmf_allocate_association(NVMF_TRTYPE_TCP, true,
+ &aparams);
+ if (discovery_na == NULL)
+ err(1, "Failed to create discovery association");
+}
+
+void
+discovery_add_io_controller(int s, const char *subnqn)
+{
+ struct io_controller_data *icd;
+
+ io_controllers = reallocf(io_controllers, (num_io_controllers + 1) *
+ sizeof(*io_controllers));
+
+ icd = &io_controllers[num_io_controllers];
+ num_io_controllers++;
+
+ icd->wildcard = init_discovery_log_entry(&icd->entry, s, subnqn);
+}
+
+static void
+build_discovery_log_page(struct discovery_controller *dc)
+{
+ struct sockaddr_storage ss;
+ socklen_t len;
+ char traddr[256];
+ u_int i, nentries;
+ uint8_t adrfam;
+
+ if (dc->discovery_log != NULL)
+ return;
+
+ len = sizeof(ss);
+ if (getsockname(dc->s, (struct sockaddr *)&ss, &len) == -1) {
+ warn("build_discovery_log_page: getsockname");
+ return;
+ }
+
+ memset(traddr, 0, sizeof(traddr));
+ switch (ss.ss_family) {
+ case AF_INET:
+ {
+ struct sockaddr_in *sin;
+
+ sin = (struct sockaddr_in *)&ss;
+ adrfam = NVMF_ADRFAM_IPV4;
+ if (inet_ntop(AF_INET, &sin->sin_addr, traddr,
+ sizeof(traddr)) == NULL) {
+ warn("build_discovery_log_page: inet_ntop");
+ return;
+ }
+ break;
+ }
+ case AF_INET6:
+ {
+ struct sockaddr_in6 *sin6;
+
+ sin6 = (struct sockaddr_in6 *)&ss;
+ adrfam = NVMF_ADRFAM_IPV6;
+ if (inet_ntop(AF_INET6, &sin6->sin6_addr, traddr,
+ sizeof(traddr)) == NULL) {
+ warn("build_discovery_log_page: inet_ntop");
+ return;
+ }
+ break;
+ }
+ default:
+ assert(false);
+ }
+
+ nentries = 0;
+ for (i = 0; i < num_io_controllers; i++) {
+ if (io_controllers[i].wildcard &&
+ io_controllers[i].entry.adrfam != adrfam)
+ continue;
+ nentries++;
+ }
+
+ dc->discovery_log_len = sizeof(*dc->discovery_log) +
+ nentries * sizeof(struct nvme_discovery_log_entry);
+ dc->discovery_log = calloc(dc->discovery_log_len, 1);
+ dc->discovery_log->numrec = nentries;
+ dc->discovery_log->recfmt = 0;
+ nentries = 0;
+ for (i = 0; i < num_io_controllers; i++) {
+ if (io_controllers[i].wildcard &&
+ io_controllers[i].entry.adrfam != adrfam)
+ continue;
+
+ dc->discovery_log->entries[nentries] = io_controllers[i].entry;
+ if (io_controllers[i].wildcard)
+ memcpy(dc->discovery_log->entries[nentries].traddr,
+ traddr, sizeof(traddr));
+ }
+}
+
+static void
+handle_get_log_page_command(const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd, struct discovery_controller *dc)
+{
+ uint64_t offset;
+ uint32_t length;
+
+ switch (nvmf_get_log_page_id(cmd)) {
+ case NVME_LOG_DISCOVERY:
+ break;
+ default:
+ warnx("Unsupported log page %u for discovery controller",
+ nvmf_get_log_page_id(cmd));
+ goto error;
+ }
+
+ build_discovery_log_page(dc);
+
+ offset = nvmf_get_log_page_offset(cmd);
+ if (offset >= dc->discovery_log_len)
+ goto error;
+
+ length = nvmf_get_log_page_length(cmd);
+ if (length > dc->discovery_log_len - offset)
+ length = dc->discovery_log_len - offset;
+
+ nvmf_send_controller_data(nc, (char *)dc->discovery_log + offset,
+ length);
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static bool
+discovery_command(const struct nvmf_capsule *nc, const struct nvme_command *cmd,
+ void *arg)
+{
+ struct discovery_controller *dc = arg;
+
+ switch (cmd->opc) {
+ case NVME_OPC_GET_LOG_PAGE:
+ handle_get_log_page_command(nc, cmd, dc);
+ return (true);
+ default:
+ return (false);
+ }
+}
+
+static void *
+discovery_thread(void *arg)
+{
+ struct discovery_thread_arg *dta = arg;
+ struct discovery_controller dc;
+
+ pthread_detach(pthread_self());
+
+ memset(&dc, 0, sizeof(dc));
+ dc.s = dta->s;
+
+ controller_handle_admin_commands(dta->c, discovery_command, &dc);
+
+ free(dc.discovery_log);
+ free_controller(dta->c);
+
+ nvmf_free_qpair(dta->qp);
+
+ close(dta->s);
+ free(dta);
+ return (NULL);
+}
+
+void
+handle_discovery_socket(int s)
+{
+ struct nvmf_fabric_connect_data data;
+ struct nvme_controller_data cdata;
+ struct nvmf_qpair_params qparams;
+ struct discovery_thread_arg *dta;
+ struct nvmf_capsule *nc;
+ struct nvmf_qpair *qp;
+ pthread_t thr;
+ int error;
+
+ memset(&qparams, 0, sizeof(qparams));
+ qparams.tcp.fd = s;
+
+ nc = NULL;
+ qp = nvmf_accept(discovery_na, &qparams, &nc, &data);
+ if (qp == NULL) {
+ warnx("Failed to create discovery qpair: %s",
+ nvmf_association_error(discovery_na));
+ goto error;
+ }
+
+ if (strcmp(data.subnqn, NVMF_DISCOVERY_NQN) != 0) {
+ warn("Discovery qpair with invalid SubNQN: %.*s",
+ (int)sizeof(data.subnqn), data.subnqn);
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, subnqn));
+ goto error;
+ }
+
+ /* Just use a controller ID of 1 for all discovery controllers. */
+ error = nvmf_finish_accept(nc, 1);
+ if (error != 0) {
+ warnc(error, "Failed to send CONNECT reponse");
+ goto error;
+ }
+
+ nvmf_init_discovery_controller_data(qp, &cdata);
+
+ dta = malloc(sizeof(*dta));
+ dta->qp = qp;
+ dta->s = s;
+ dta->c = init_controller(qp, &cdata);
+
+ error = pthread_create(&thr, NULL, discovery_thread, dta);
+ if (error != 0) {
+ warnc(error, "Failed to create discovery thread");
+ free_controller(dta->c);
+ free(dta);
+ goto error;
+ }
+
+ nvmf_free_capsule(nc);
+ return;
+
+error:
+ if (nc != NULL)
+ nvmf_free_capsule(nc);
+ if (qp != NULL)
+ nvmf_free_qpair(qp);
+ close(s);
+}
diff --git a/tools/tools/nvmf/nvmfd/internal.h b/tools/tools/nvmf/nvmfd/internal.h
new file mode 100644
index 000000000000..f70dc78881c6
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/internal.h
@@ -0,0 +1,66 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#ifndef __INTERNAL_H__
+#define __INTERNAL_H__
+
+#include <stdbool.h>
+
+struct controller;
+struct nvme_command;
+struct nvme_controller_data;
+struct nvme_ns_list;
+struct nvmf_capsule;
+struct nvmf_qpair;
+
+typedef bool handle_command(const struct nvmf_capsule *,
+ const struct nvme_command *, void *);
+
+extern bool data_digests;
+extern bool header_digests;
+extern bool flow_control_disable;
+extern bool kernel_io;
+extern uint32_t maxh2cdata;
+
+/* controller.c */
+void controller_handle_admin_commands(struct controller *c,
+ handle_command *cb, void *cb_arg);
+struct controller *init_controller(struct nvmf_qpair *qp,
+ const struct nvme_controller_data *cdata);
+void free_controller(struct controller *c);
+
+/* discovery.c */
+void init_discovery(void);
+void handle_discovery_socket(int s);
+void discovery_add_io_controller(int s, const char *subnqn);
+
+/* io.c */
+void init_io(const char *subnqn);
+void handle_io_socket(int s);
+void shutdown_io(void);
+
+/* devices.c */
+void register_devices(int ac, char **av);
+u_int device_count(void);
+void device_active_nslist(uint32_t nsid, struct nvme_ns_list *nslist);
+bool device_identification_descriptor(uint32_t nsid, void *buf);
+bool device_namespace_data(uint32_t nsid, struct nvme_namespace_data *nsdata);
+void device_read(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc);
+void device_write(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc);
+void device_flush(uint32_t nsid, const struct nvmf_capsule *nc);
+
+/* ctl.c */
+void init_ctl_port(const char *subnqn,
+ const struct nvmf_association_params *params);
+void ctl_handoff_qpair(struct nvmf_qpair *qp,
+ const struct nvmf_fabric_connect_cmd *cmd,
+ const struct nvmf_fabric_connect_data *data);
+void shutdown_ctl_port(const char *subnqn);
+
+#endif /* !__INTERNAL_H__ */
diff --git a/tools/tools/nvmf/nvmfd/io.c b/tools/tools/nvmf/nvmfd/io.c
new file mode 100644
index 000000000000..4407360257a2
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/io.c
@@ -0,0 +1,676 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/sysctl.h>
+#include <err.h>
+#include <errno.h>
+#include <libnvmf.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+struct io_controller {
+ struct controller *c;
+
+ u_int num_io_queues;
+ u_int active_io_queues;
+ struct nvmf_qpair **io_qpairs;
+ int *io_sockets;
+
+ struct nvme_firmware_page fp;
+ struct nvme_health_information_page hip;
+ uint16_t partial_dur;
+ uint16_t partial_duw;
+
+ uint16_t cntlid;
+ char hostid[16];
+ char hostnqn[NVME_NQN_FIELD_SIZE];
+};
+
+static struct nvmf_association *io_na;
+static pthread_cond_t io_cond;
+static pthread_mutex_t io_na_mutex;
+static struct io_controller *io_controller;
+static const char *nqn;
+static char serial[NVME_SERIAL_NUMBER_LENGTH];
+
+void
+init_io(const char *subnqn)
+{
+ struct nvmf_association_params aparams;
+ u_long hostid;
+ size_t len;
+
+ memset(&aparams, 0, sizeof(aparams));
+ aparams.sq_flow_control = !flow_control_disable;
+ aparams.dynamic_controller_model = true;
+ aparams.max_admin_qsize = NVME_MAX_ADMIN_ENTRIES;
+ aparams.max_io_qsize = NVMF_MAX_IO_ENTRIES;
+ aparams.tcp.pda = 0;
+ aparams.tcp.header_digests = header_digests;
+ aparams.tcp.data_digests = data_digests;
+ aparams.tcp.maxh2cdata = maxh2cdata;
+ io_na = nvmf_allocate_association(NVMF_TRTYPE_TCP, true,
+ &aparams);
+ if (io_na == NULL)
+ err(1, "Failed to create I/O controller association");
+
+ nqn = subnqn;
+
+ /* Generate a serial number from the kern.hostid node. */
+ len = sizeof(hostid);
+ if (sysctlbyname("kern.hostid", &hostid, &len, NULL, 0) == -1)
+ err(1, "sysctl: kern.hostid");
+
+ nvmf_controller_serial(serial, sizeof(serial), hostid);
+
+ pthread_cond_init(&io_cond, NULL);
+ pthread_mutex_init(&io_na_mutex, NULL);
+
+ if (kernel_io)
+ init_ctl_port(subnqn, &aparams);
+}
+
+void
+shutdown_io(void)
+{
+ if (kernel_io)
+ shutdown_ctl_port(nqn);
+}
+
+static void
+handle_get_log_page(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ uint64_t offset;
+ uint32_t numd;
+ size_t len;
+ uint8_t lid;
+
+ lid = le32toh(cmd->cdw10) & 0xff;
+ numd = le32toh(cmd->cdw10) >> 16 | le32toh(cmd->cdw11) << 16;
+ offset = le32toh(cmd->cdw12) | (uint64_t)le32toh(cmd->cdw13) << 32;
+
+ if (offset % 3 != 0)
+ goto error;
+
+ len = (numd + 1) * 4;
+
+ switch (lid) {
+ case NVME_LOG_ERROR:
+ {
+ void *buf;
+
+ if (len % sizeof(struct nvme_error_information_entry) != 0)
+ goto error;
+
+ buf = calloc(1, len);
+ nvmf_send_controller_data(nc, buf, len);
+ free(buf);
+ return;
+ }
+ case NVME_LOG_HEALTH_INFORMATION:
+ if (len != sizeof(ioc->hip))
+ goto error;
+
+ nvmf_send_controller_data(nc, &ioc->hip, sizeof(ioc->hip));
+ return;
+ case NVME_LOG_FIRMWARE_SLOT:
+ if (len != sizeof(ioc->fp))
+ goto error;
+
+ nvmf_send_controller_data(nc, &ioc->fp, sizeof(ioc->fp));
+ return;
+ default:
+ warnx("Unsupported page %#x for GET_LOG_PAGE\n", lid);
+ goto error;
+ }
+
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static bool
+handle_io_identify_command(const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ struct nvme_namespace_data nsdata;
+ struct nvme_ns_list nslist;
+ uint32_t nsid;
+ uint8_t cns;
+
+ cns = le32toh(cmd->cdw10) & 0xFF;
+ switch (cns) {
+ case 0: /* Namespace data. */
+ if (!device_namespace_data(le32toh(cmd->nsid), &nsdata)) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return (true);
+ }
+
+ nvmf_send_controller_data(nc, &nsdata, sizeof(nsdata));
+ return (true);
+ case 2: /* Active namespace list. */
+ nsid = le32toh(cmd->nsid);
+ if (nsid >= 0xfffffffe) {
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+ return (true);
+ }
+
+ device_active_nslist(nsid, &nslist);
+ nvmf_send_controller_data(nc, &nslist, sizeof(nslist));
+ return (true);
+ case 3: /* Namespace Identification Descriptor list. */
+ if (!device_identification_descriptor(le32toh(cmd->nsid),
+ &nsdata)) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return (true);
+ }
+
+ nvmf_send_controller_data(nc, &nsdata, sizeof(nsdata));
+ return (true);
+ default:
+ return (false);
+ }
+}
+
+static void
+handle_set_features(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ struct nvme_completion cqe;
+ uint8_t fid;
+
+ fid = NVMEV(NVME_FEAT_SET_FID, le32toh(cmd->cdw10));
+ switch (fid) {
+ case NVME_FEAT_NUMBER_OF_QUEUES:
+ {
+ uint32_t num_queues;
+
+ if (ioc->num_io_queues != 0) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_COMMAND_SEQUENCE_ERROR);
+ return;
+ }
+
+ num_queues = le32toh(cmd->cdw11) & 0xffff;
+
+ /* 5.12.1.7: 65535 is invalid. */
+ if (num_queues == 65535)
+ goto error;
+
+ /* Fabrics requires the same number of SQs and CQs. */
+ if (le32toh(cmd->cdw11) >> 16 != num_queues)
+ goto error;
+
+ /* Convert to 1's based */
+ num_queues++;
+
+ /* Lock to synchronize with handle_io_qpair. */
+ pthread_mutex_lock(&io_na_mutex);
+ ioc->num_io_queues = num_queues;
+ ioc->io_qpairs = calloc(num_queues, sizeof(*ioc->io_qpairs));
+ ioc->io_sockets = calloc(num_queues, sizeof(*ioc->io_sockets));
+ pthread_mutex_unlock(&io_na_mutex);
+
+ nvmf_init_cqe(&cqe, nc, 0);
+ cqe.cdw0 = cmd->cdw11;
+ nvmf_send_response(nc, &cqe);
+ return;
+ }
+ case NVME_FEAT_ASYNC_EVENT_CONFIGURATION:
+ {
+ uint32_t aer_mask;
+
+ aer_mask = le32toh(cmd->cdw11);
+
+ /* Check for any reserved or unimplemented feature bits. */
+ if ((aer_mask & 0xffffc000) != 0)
+ goto error;
+
+ /* No AERs are generated by this daemon. */
+ nvmf_send_success(nc);
+ return;
+ }
+ default:
+ warnx("Unsupported feature ID %u for SET_FEATURES", fid);
+ goto error;
+ }
+
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static bool
+admin_command(const struct nvmf_capsule *nc, const struct nvme_command *cmd,
+ void *arg)
+{
+ struct io_controller *ioc = arg;
+
+ switch (cmd->opc) {
+ case NVME_OPC_GET_LOG_PAGE:
+ handle_get_log_page(ioc, nc, cmd);
+ return (true);
+ case NVME_OPC_IDENTIFY:
+ return (handle_io_identify_command(nc, cmd));
+ case NVME_OPC_SET_FEATURES:
+ handle_set_features(ioc, nc, cmd);
+ return (true);
+ case NVME_OPC_ASYNC_EVENT_REQUEST:
+ /* Ignore and never complete. */
+ return (true);
+ case NVME_OPC_KEEP_ALIVE:
+ nvmf_send_success(nc);
+ return (true);
+ default:
+ return (false);
+ }
+}
+
+static void
+handle_admin_qpair(struct io_controller *ioc)
+{
+ pthread_setname_np(pthread_self(), "admin queue");
+
+ controller_handle_admin_commands(ioc->c, admin_command, ioc);
+
+ pthread_mutex_lock(&io_na_mutex);
+ for (u_int i = 0; i < ioc->num_io_queues; i++) {
+ if (ioc->io_qpairs[i] == NULL || ioc->io_sockets[i] == -1)
+ continue;
+ close(ioc->io_sockets[i]);
+ ioc->io_sockets[i] = -1;
+ }
+
+ /* Wait for I/O threads to notice. */
+ while (ioc->active_io_queues > 0)
+ pthread_cond_wait(&io_cond, &io_na_mutex);
+
+ io_controller = NULL;
+ pthread_mutex_unlock(&io_na_mutex);
+
+ free_controller(ioc->c);
+
+ free(ioc);
+}
+
+static bool
+handle_io_fabrics_command(const struct nvmf_capsule *nc,
+ const struct nvmf_fabric_cmd *fc)
+{
+ switch (fc->fctype) {
+ case NVMF_FABRIC_COMMAND_CONNECT:
+ warnx("CONNECT command on connected queue");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ break;
+ case NVMF_FABRIC_COMMAND_DISCONNECT:
+ {
+ const struct nvmf_fabric_disconnect_cmd *dis =
+ (const struct nvmf_fabric_disconnect_cmd *)fc;
+ if (dis->recfmt != htole16(0)) {
+ nvmf_send_error(nc, NVME_SCT_COMMAND_SPECIFIC,
+ NVMF_FABRIC_SC_INCOMPATIBLE_FORMAT);
+ break;
+ }
+ nvmf_send_success(nc);
+ return (true);
+ }
+ default:
+ warnx("Unsupported fabrics command %#x", fc->fctype);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+
+ return (false);
+}
+
+static void
+hip_add(uint64_t pair[2], uint64_t addend)
+{
+ uint64_t old, new;
+
+ old = le64toh(pair[0]);
+ new = old + addend;
+ pair[0] = htole64(new);
+ if (new < old)
+ pair[1] += htole64(1);
+}
+
+static uint64_t
+cmd_lba(const struct nvme_command *cmd)
+{
+ return ((uint64_t)le32toh(cmd->cdw11) << 32 | le32toh(cmd->cdw10));
+}
+
+static u_int
+cmd_nlb(const struct nvme_command *cmd)
+{
+ return ((le32toh(cmd->cdw12) & 0xffff) + 1);
+}
+
+static void
+handle_read(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ size_t len;
+
+ len = nvmf_capsule_data_len(nc);
+ device_read(le32toh(cmd->nsid), cmd_lba(cmd), cmd_nlb(cmd), nc);
+ hip_add(ioc->hip.host_read_commands, 1);
+
+ len /= 512;
+ len += ioc->partial_dur;
+ if (len > 1000)
+ hip_add(ioc->hip.data_units_read, len / 1000);
+ ioc->partial_dur = len % 1000;
+}
+
+static void
+handle_write(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ size_t len;
+
+ len = nvmf_capsule_data_len(nc);
+ device_write(le32toh(cmd->nsid), cmd_lba(cmd), cmd_nlb(cmd), nc);
+ hip_add(ioc->hip.host_write_commands, 1);
+
+ len /= 512;
+ len += ioc->partial_duw;
+ if (len > 1000)
+ hip_add(ioc->hip.data_units_written, len / 1000);
+ ioc->partial_duw = len % 1000;
+}
+
+static void
+handle_flush(const struct nvmf_capsule *nc, const struct nvme_command *cmd)
+{
+ device_flush(le32toh(cmd->nsid), nc);
+}
+
+static bool
+handle_io_commands(struct io_controller *ioc, struct nvmf_qpair *qp)
+{
+ const struct nvme_command *cmd;
+ struct nvmf_capsule *nc;
+ int error;
+ bool disconnect;
+
+ disconnect = false;
+
+ while (!disconnect) {
+ error = nvmf_controller_receive_capsule(qp, &nc);
+ if (error != 0) {
+ if (error != ECONNRESET)
+ warnc(error, "Failed to read command capsule");
+ break;
+ }
+
+ cmd = nvmf_capsule_sqe(nc);
+
+ switch (cmd->opc) {
+ case NVME_OPC_FLUSH:
+ if (cmd->nsid == htole32(0xffffffff)) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ break;
+ }
+ handle_flush(nc, cmd);
+ break;
+ case NVME_OPC_WRITE:
+ handle_write(ioc, nc, cmd);
+ break;
+ case NVME_OPC_READ:
+ handle_read(ioc, nc, cmd);
+ break;
+ case NVME_OPC_FABRICS_COMMANDS:
+ disconnect = handle_io_fabrics_command(nc,
+ (const struct nvmf_fabric_cmd *)cmd);
+ break;
+ default:
+ warnx("Unsupported NVM opcode %#x", cmd->opc);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+ nvmf_free_capsule(nc);
+ }
+
+ return (disconnect);
+}
+
+static void
+handle_io_qpair(struct io_controller *ioc, struct nvmf_qpair *qp, int qid)
+{
+ char name[64];
+ bool disconnect;
+
+ snprintf(name, sizeof(name), "I/O queue %d", qid);
+ pthread_setname_np(pthread_self(), name);
+
+ disconnect = handle_io_commands(ioc, qp);
+
+ pthread_mutex_lock(&io_na_mutex);
+ if (disconnect)
+ ioc->io_qpairs[qid - 1] = NULL;
+ if (ioc->io_sockets[qid - 1] != -1) {
+ close(ioc->io_sockets[qid - 1]);
+ ioc->io_sockets[qid - 1] = -1;
+ }
+ ioc->active_io_queues--;
+ if (ioc->active_io_queues == 0)
+ pthread_cond_broadcast(&io_cond);
+ pthread_mutex_unlock(&io_na_mutex);
+}
+
+static void
+connect_admin_qpair(int s, struct nvmf_qpair *qp, struct nvmf_capsule *nc,
+ const struct nvmf_fabric_connect_data *data)
+{
+ struct nvme_controller_data cdata;
+ struct io_controller *ioc;
+ int error;
+
+ /* Can only have one active I/O controller at a time. */
+ pthread_mutex_lock(&io_na_mutex);
+ if (io_controller != NULL) {
+ pthread_mutex_unlock(&io_na_mutex);
+ nvmf_send_error(nc, NVME_SCT_COMMAND_SPECIFIC,
+ NVMF_FABRIC_SC_CONTROLLER_BUSY);
+ goto error;
+ }
+
+ error = nvmf_finish_accept(nc, 2);
+ if (error != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnc(error, "Failed to send CONNECT response");
+ goto error;
+ }
+
+ ioc = calloc(1, sizeof(*ioc));
+ ioc->cntlid = 2;
+ memcpy(ioc->hostid, data->hostid, sizeof(ioc->hostid));
+ memcpy(ioc->hostnqn, data->hostnqn, sizeof(ioc->hostnqn));
+
+ nvmf_init_io_controller_data(qp, serial, nqn, device_count(),
+ NVMF_IOCCSZ, &cdata);
+
+ ioc->fp.afi = NVMEF(NVME_FIRMWARE_PAGE_AFI_SLOT, 1);
+ memcpy(ioc->fp.revision[0], cdata.fr, sizeof(cdata.fr));
+
+ ioc->hip.power_cycles[0] = 1;
+
+ ioc->c = init_controller(qp, &cdata);
+
+ io_controller = ioc;
+ pthread_mutex_unlock(&io_na_mutex);
+
+ nvmf_free_capsule(nc);
+
+ handle_admin_qpair(ioc);
+ close(s);
+ return;
+
+error:
+ nvmf_free_capsule(nc);
+ close(s);
+}
+
+static void
+connect_io_qpair(int s, struct nvmf_qpair *qp, struct nvmf_capsule *nc,
+ const struct nvmf_fabric_connect_data *data, uint16_t qid)
+{
+ struct io_controller *ioc;
+ int error;
+
+ pthread_mutex_lock(&io_na_mutex);
+ if (io_controller == NULL) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to create I/O qpair without admin qpair");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ goto error;
+ }
+
+ if (memcmp(io_controller->hostid, data->hostid,
+ sizeof(data->hostid)) != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("hostid mismatch for I/O qpair CONNECT");
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, hostid));
+ goto error;
+ }
+ if (le16toh(data->cntlid) != io_controller->cntlid) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("cntlid mismatch for I/O qpair CONNECT");
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, cntlid));
+ goto error;
+ }
+ if (memcmp(io_controller->hostnqn, data->hostnqn,
+ sizeof(data->hostid)) != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("host NQN mismatch for I/O qpair CONNECT");
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, hostnqn));
+ goto error;
+ }
+
+ if (io_controller->num_io_queues == 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to create I/O qpair without enabled queues");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ goto error;
+ }
+ if (qid > io_controller->num_io_queues) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to create invalid I/O qpair %u", qid);
+ nvmf_connect_invalid_parameters(nc, false,
+ offsetof(struct nvmf_fabric_connect_cmd, qid));
+ goto error;
+ }
+ if (io_controller->io_qpairs[qid - 1] != NULL) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to re-create I/O qpair %u", qid);
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ goto error;
+ }
+
+ error = nvmf_finish_accept(nc, io_controller->cntlid);
+ if (error != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnc(error, "Failed to send CONNECT response");
+ goto error;
+ }
+
+ ioc = io_controller;
+ ioc->active_io_queues++;
+ ioc->io_qpairs[qid - 1] = qp;
+ ioc->io_sockets[qid - 1] = s;
+ pthread_mutex_unlock(&io_na_mutex);
+
+ nvmf_free_capsule(nc);
+
+ handle_io_qpair(ioc, qp, qid);
+ return;
+
+error:
+ nvmf_free_capsule(nc);
+ close(s);
+}
+
+static void *
+io_socket_thread(void *arg)
+{
+ struct nvmf_fabric_connect_data data;
+ struct nvmf_qpair_params qparams;
+ const struct nvmf_fabric_connect_cmd *cmd;
+ struct nvmf_capsule *nc;
+ struct nvmf_qpair *qp;
+ int s;
+
+ pthread_detach(pthread_self());
+
+ s = (intptr_t)arg;
+ memset(&qparams, 0, sizeof(qparams));
+ qparams.tcp.fd = s;
+
+ nc = NULL;
+ qp = nvmf_accept(io_na, &qparams, &nc, &data);
+ if (qp == NULL) {
+ warnx("Failed to create I/O qpair: %s",
+ nvmf_association_error(io_na));
+ goto error;
+ }
+
+ if (kernel_io) {
+ ctl_handoff_qpair(qp, nvmf_capsule_sqe(nc), &data);
+ goto error;
+ }
+
+ if (strcmp(data.subnqn, nqn) != 0) {
+ warn("I/O qpair with invalid SubNQN: %.*s",
+ (int)sizeof(data.subnqn), data.subnqn);
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, subnqn));
+ goto error;
+ }
+
+ /* Is this an admin or I/O queue pair? */
+ cmd = nvmf_capsule_sqe(nc);
+ if (cmd->qid == 0)
+ connect_admin_qpair(s, qp, nc, &data);
+ else
+ connect_io_qpair(s, qp, nc, &data, le16toh(cmd->qid));
+ nvmf_free_qpair(qp);
+ return (NULL);
+
+error:
+ if (nc != NULL)
+ nvmf_free_capsule(nc);
+ if (qp != NULL)
+ nvmf_free_qpair(qp);
+ close(s);
+ return (NULL);
+}
+
+void
+handle_io_socket(int s)
+{
+ pthread_t thr;
+ int error;
+
+ error = pthread_create(&thr, NULL, io_socket_thread,
+ (void *)(uintptr_t)s);
+ if (error != 0) {
+ warnc(error, "Failed to create I/O qpair thread");
+ close(s);
+ }
+}
diff --git a/tools/tools/nvmf/nvmfd/nvmfd.8 b/tools/tools/nvmf/nvmfd/nvmfd.8
new file mode 100644
index 000000000000..1076583c417c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/nvmfd.8
@@ -0,0 +1,131 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2024 Chelsio Communications, Inc.
+.\"
+.Dd July 25, 2024
+.Dt NVMFD 8
+.Os
+.Sh NAME
+.Nm nvmfd
+.Nd "NVMeoF controller daemon"
+.Sh SYNOPSIS
+.Nm
+.Fl K
+.Op Fl dFGg
+.Op Fl H Ar MAXH2CDATA
+.Op Fl P Ar port
+.Op Fl p Ar port
+.Op Fl t Ar transport
+.Op Fl n Ar subnqn
+.Nm
+.Op Fl dFGg
+.Op Fl H Ar MAXH2CDATA
+.Op Fl P Ar port
+.Op Fl p Ar port
+.Op Fl t Ar transport
+.Op Fl n Ar subnqn
+.Ar device
+.Op Ar device ...
+.Sh DESCRIPTION
+.Nm
+accepts incoming NVMeoF connections for both I/O and discovery controllers.
+.Nm
+can either implement a single dynamic I/O controller in user mode or hand
+off incoming I/O controller connections to
+.Xr nvmft 4 .
+A dynamic discovery controller service is always provided in user mode.
+.Pp
+The following options are available:
+.Bl -tag -width "-t transport"
+.It Fl F
+Permit remote hosts to disable SQ flow control.
+.It Fl G
+Permit remote hosts to enable PDU data digests for the TCP transport.
+.It Fl g
+Permit remote hosts to enable PDU header digests for the TCP transport.
+.It Fl H
+Set the MAXH2CDATA value advertised to the remote host for the TCP transport.
+This value is in bytes and determines the maximum data payload size for
+data PDUs sent by the remote host.
+The value must be at least 4096 and defaults to 256KiB.
+.It Fl K
+Enable kernel mode which hands off incoming I/O controller connections to
+.Xr nvmft 4 .
+.It Fl P Ar port
+Use
+.Ar port
+as the listen TCP port for the discovery controller service.
+The default value is 8009.
+.It Fl d
+Enable debug mode.
+The daemon sends any errors to standard output and does not place
+itself in the background.
+.It Fl p Ar port
+Use
+.Ar port
+as the listen TCP port for the I/O controller service.
+By default an unused ephemeral port will be chosen.
+.It Fl n Ar subnqn
+The Subsystem NVMe Qualified Name for the I/O controller.
+If an explicit NQN is not given, a default value is generated from the
+current host's UUID obtained from the
+.Vt kern.hostuuid
+sysctl.
+.It Fl t Ar transport
+The transport type to use.
+The default transport is
+.Dq tcp .
+.It Ar device
+When implementing a user mode I/O controller,
+one or more
+.Ar device
+arguments must be specified.
+Each
+.Ar device
+describes the backing store for a namespace exported to remote hosts.
+Devices can be specified using one of the following syntaxes:
+.Bl -tag -width "ramdisk:size"
+.It Pa pathname
+File or disk device
+.It ramdisk : Ns Ar size
+Allocate a memory disk with the given
+.Ar size .
+.Ar size
+may use any of the suffixes supported by
+.Xr expand_number 3 .
+.El
+.El
+.Sh FILES
+.Bl -tag -width "/var/run/nvmfd.pid" -compact
+.It Pa /var/run/nvmfd.pid
+The default location of the
+.Nm
+PID file.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr ctl 4 ,
+.Xr nvmft 4 ,
+.Xr ctladm 8 ,
+.Xr ctld 8
+.Sh HISTORY
+The
+.Nm
+module first appeared in
+.Fx 15.0 .
+.Sh AUTHORS
+The
+.Nm
+subsystem was developed by
+.An John Baldwin Aq Mt jhb@FreeBSD.org
+under sponsorship from Chelsio Communications, Inc.
+.Sh BUGS
+The discovery controller and kernel mode functionality of
+.Nm
+should be merged into
+.Xr ctld 8 .
+.Pp
+Additional parameters such as
+queue sizes should be configurable.
diff --git a/tools/tools/nvmf/nvmfd/nvmfd.c b/tools/tools/nvmf/nvmfd/nvmfd.c
new file mode 100644
index 000000000000..df6f400b40e5
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/nvmfd.c
@@ -0,0 +1,271 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/param.h>
+#include <sys/event.h>
+#include <sys/linker.h>
+#include <sys/module.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <assert.h>
+#include <err.h>
+#include <errno.h>
+#include <libnvmf.h>
+#include <libutil.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+bool data_digests = false;
+bool header_digests = false;
+bool flow_control_disable = false;
+bool kernel_io = false;
+uint32_t maxh2cdata = 256 * 1024;
+
+static const char *subnqn;
+static volatile bool quit = false;
+
+static void
+usage(void)
+{
+ fprintf(stderr, "nvmfd -K [-dFGg] [-H MAXH2CDATA] [-P port] [-p port] [-t transport] [-n subnqn]\n"
+ "nvmfd [-dFGg] [-H MAXH2CDATA] [-P port] [-p port] [-t transport] [-n subnqn]\n"
+ "\tdevice [device [...]]\n"
+ "\n"
+ "Devices use one of the following syntaxes:\n"
+ "\tpathame - file or disk device\n"
+ "\tramdisk:size - memory disk of given size\n");
+ exit(1);
+}
+
+static void
+handle_sig(int sig __unused)
+{
+ quit = true;
+}
+
+static void
+register_listen_socket(int kqfd, int s, void *udata)
+{
+ struct kevent kev;
+
+ if (listen(s, -1) != 0)
+ err(1, "listen");
+
+ EV_SET(&kev, s, EVFILT_READ, EV_ADD, 0, 0, udata);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) == -1)
+ err(1, "kevent: failed to add listen socket");
+}
+
+static void
+create_passive_sockets(int kqfd, const char *port, bool discovery)
+{
+ struct addrinfo hints, *ai, *list;
+ bool created;
+ int error, s;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_PASSIVE;
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_protocol = IPPROTO_TCP;
+ error = getaddrinfo(NULL, port, &hints, &list);
+ if (error != 0)
+ errx(1, "%s", gai_strerror(error));
+ created = false;
+
+ for (ai = list; ai != NULL; ai = ai->ai_next) {
+ s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+ if (s == -1)
+ continue;
+
+ if (bind(s, ai->ai_addr, ai->ai_addrlen) != 0) {
+ close(s);
+ continue;
+ }
+
+ if (discovery) {
+ register_listen_socket(kqfd, s, (void *)1);
+ } else {
+ register_listen_socket(kqfd, s, (void *)2);
+ discovery_add_io_controller(s, subnqn);
+ }
+ created = true;
+ }
+
+ freeaddrinfo(list);
+ if (!created)
+ err(1, "Failed to create any listen sockets");
+}
+
+static void
+handle_connections(int kqfd)
+{
+ struct kevent ev;
+ int s;
+
+ signal(SIGHUP, handle_sig);
+ signal(SIGINT, handle_sig);
+ signal(SIGQUIT, handle_sig);
+ signal(SIGTERM, handle_sig);
+
+ while (!quit) {
+ if (kevent(kqfd, NULL, 0, &ev, 1, NULL) == -1) {
+ if (errno == EINTR)
+ continue;
+ err(1, "kevent");
+ }
+
+ assert(ev.filter == EVFILT_READ);
+
+ s = accept(ev.ident, NULL, NULL);
+ if (s == -1) {
+ warn("accept");
+ continue;
+ }
+
+ switch ((uintptr_t)ev.udata) {
+ case 1:
+ handle_discovery_socket(s);
+ break;
+ case 2:
+ handle_io_socket(s);
+ break;
+ default:
+ __builtin_unreachable();
+ }
+ }
+}
+
+int
+main(int ac, char **av)
+{
+ struct pidfh *pfh;
+ const char *dport, *ioport, *transport;
+ pid_t pid;
+ uint64_t value;
+ int ch, error, kqfd;
+ bool daemonize;
+ static char nqn[NVMF_NQN_MAX_LEN];
+
+ /* 7.4.9.3 Default port for discovery */
+ dport = "8009";
+
+ pfh = NULL;
+ daemonize = true;
+ ioport = "0";
+ subnqn = NULL;
+ transport = "tcp";
+ while ((ch = getopt(ac, av, "dFgGH:Kn:P:p:t:")) != -1) {
+ switch (ch) {
+ case 'd':
+ daemonize = false;
+ break;
+ case 'F':
+ flow_control_disable = true;
+ break;
+ case 'G':
+ data_digests = true;
+ break;
+ case 'g':
+ header_digests = true;
+ break;
+ case 'H':
+ if (expand_number(optarg, &value) != 0)
+ errx(1, "Invalid MAXH2CDATA value %s", optarg);
+ if (value < 4096 || value > UINT32_MAX ||
+ value % 4 != 0)
+ errx(1, "Invalid MAXH2CDATA value %s", optarg);
+ maxh2cdata = value;
+ break;
+ case 'K':
+ kernel_io = true;
+ break;
+ case 'n':
+ subnqn = optarg;
+ break;
+ case 'P':
+ dport = optarg;
+ break;
+ case 'p':
+ ioport = optarg;
+ break;
+ case 't':
+ transport = optarg;
+ break;
+ default:
+ usage();
+ }
+ }
+
+ av += optind;
+ ac -= optind;
+
+ if (kernel_io) {
+ if (ac > 0)
+ usage();
+ if (modfind("nvmft") == -1 && kldload("nvmft") == -1)
+ warn("couldn't load nvmft");
+ } else {
+ if (ac < 1)
+ usage();
+ }
+
+ if (strcasecmp(transport, "tcp") == 0) {
+ } else
+ errx(1, "Invalid transport %s", transport);
+
+ if (subnqn == NULL) {
+ error = nvmf_nqn_from_hostuuid(nqn);
+ if (error != 0)
+ errc(1, error, "Failed to generate NQN");
+ subnqn = nqn;
+ }
+
+ if (!kernel_io)
+ register_devices(ac, av);
+
+ init_discovery();
+ init_io(subnqn);
+
+ if (daemonize) {
+ pfh = pidfile_open(NULL, 0600, &pid);
+ if (pfh == NULL) {
+ if (errno == EEXIST)
+ errx(1, "Daemon already running, pid: %jd",
+ (intmax_t)pid);
+ warn("Cannot open or create pidfile");
+ }
+
+ if (daemon(0, 0) != 0) {
+ pidfile_remove(pfh);
+ err(1, "Failed to fork into the background");
+ }
+
+ pidfile_write(pfh);
+ }
+
+ kqfd = kqueue();
+ if (kqfd == -1) {
+ pidfile_remove(pfh);
+ err(1, "kqueue");
+ }
+
+ create_passive_sockets(kqfd, dport, true);
+ create_passive_sockets(kqfd, ioport, false);
+
+ handle_connections(kqfd);
+ shutdown_io();
+ if (pfh != NULL)
+ pidfile_remove(pfh);
+ return (0);
+}
diff --git a/tools/tools/nvmf/nvmfdd/Makefile b/tools/tools/nvmf/nvmfdd/Makefile
new file mode 100644
index 000000000000..8620d23ccf04
--- /dev/null
+++ b/tools/tools/nvmf/nvmfdd/Makefile
@@ -0,0 +1,9 @@
+.include <src.opts.mk>
+
+PACKAGE=nvme-tools
+PROG= nvmfdd
+CFLAGS+= -I${SRCTOP}/lib/libnvmf
+MAN=
+LIBADD+= nvmf
+
+.include <bsd.prog.mk>
diff --git a/tools/tools/nvmf/nvmfdd/nvmfdd.c b/tools/tools/nvmf/nvmfdd/nvmfdd.c
new file mode 100644
index 000000000000..0f181682aac2
--- /dev/null
+++ b/tools/tools/nvmf/nvmfdd/nvmfdd.c
@@ -0,0 +1,493 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/socket.h>
+#include <err.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <libnvmf.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+#include <netinet/in.h>
+
+static struct controller_info {
+ uint32_t ioccsz;
+ uint32_t nn;
+ uint16_t mqes;
+ bool disconnect_supported;
+} info;
+
+enum rw { READ, WRITE };
+
+static bool data_digests, flow_control_disable, header_digests;
+
+static void
+usage(void)
+{
+ fprintf(stderr, "nvmfdd [-FGg] [-c cntlid] [-t transport] [-o offset] [-l length] [-n nsid]\n"
+ "\tread|write <address:port> <nqn>\n");
+ exit(1);
+}
+
+static void
+tcp_association_params(struct nvmf_association_params *params)
+{
+ params->tcp.pda = 0;
+ params->tcp.header_digests = header_digests;
+ params->tcp.data_digests = data_digests;
+ params->tcp.maxr2t = 1;
+}
+
+static void
+tcp_qpair_params(struct nvmf_qpair_params *params, bool admin,
+ const char *address, const char *port)
+{
+ struct addrinfo hints, *ai, *list;
+ int error, s;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_protocol = IPPROTO_TCP;
+ error = getaddrinfo(address, port, &hints, &list);
+ if (error != 0)
+ errx(1, "%s", gai_strerror(error));
+
+ for (ai = list; ai != NULL; ai = ai->ai_next) {
+ s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+ if (s == -1)
+ continue;
+
+ if (connect(s, ai->ai_addr, ai->ai_addrlen) != 0) {
+ close(s);
+ continue;
+ }
+
+ params->admin = admin;
+ params->tcp.fd = s;
+ freeaddrinfo(list);
+ return;
+ }
+ err(1, "Failed to connect to controller");
+}
+
+static struct nvmf_qpair *
+connect_admin_queue(struct nvmf_association *na,
+ const struct nvmf_qpair_params *params, const uint8_t hostid[16],
+ uint16_t cntlid, const char *hostnqn, const char *subnqn)
+{
+ struct nvme_controller_data cdata;
+ struct nvmf_qpair *qp;
+ uint64_t cap, cc, csts;
+ u_int mps, mpsmin, mpsmax;
+ int error, timo;
+
+ qp = nvmf_connect(na, params, 0, NVMF_MIN_ADMIN_MAX_SQ_SIZE, hostid,
+ cntlid, subnqn, hostnqn, 0);
+ if (qp == NULL)
+ return (NULL);
+
+ error = nvmf_read_property(qp, NVMF_PROP_CAP, 8, &cap);
+ if (error != 0)
+ errc(1, error, "Failed to fetch CAP");
+
+ /* Require the NVM command set. */
+ if (NVME_CAP_HI_CSS_NVM(cap >> 32) == 0)
+ errx(1, "Controller does not support the NVM command set");
+
+ /* Prefer native host page size if it fits. */
+ mpsmin = NVMEV(NVME_CAP_HI_REG_MPSMIN, cap >> 32);
+ mpsmax = NVMEV(NVME_CAP_HI_REG_MPSMAX, cap >> 32);
+ mps = ffs(getpagesize()) - 1;
+ if (mps < mpsmin + 12)
+ mps = mpsmin;
+ else if (mps > mpsmax + 12)
+ mps = mpsmax;
+ else
+ mps -= 12;
+
+ /* Configure controller. */
+ error = nvmf_read_property(qp, NVMF_PROP_CC, 4, &cc);
+ if (error != 0)
+ errc(1, error, "Failed to fetch CC");
+
+ /* Clear known fields preserving any reserved fields. */
+ cc &= ~(NVMEM(NVME_CC_REG_IOCQES) | NVMEM(NVME_CC_REG_IOSQES) |
+ NVMEM(NVME_CC_REG_SHN) | NVMEM(NVME_CC_REG_AMS) |
+ NVMEM(NVME_CC_REG_MPS) | NVMEM(NVME_CC_REG_CSS));
+
+ cc |= NVMEF(NVME_CC_REG_IOCQES, 4); /* CQE entry size == 16 */
+ cc |= NVMEF(NVME_CC_REG_IOSQES, 6); /* SQE entry size == 64 */
+ cc |= NVMEF(NVME_CC_REG_AMS, 0); /* AMS 0 (Round-robin) */
+ cc |= NVMEF(NVME_CC_REG_MPS, mps);
+ cc |= NVMEF(NVME_CC_REG_CSS, 0); /* NVM command set */
+ cc |= NVMEF(NVME_CC_REG_EN, 1); /* EN = 1 */
+
+ error = nvmf_write_property(qp, NVMF_PROP_CC, 4, cc);
+ if (error != 0)
+ errc(1, error, "Failed to set CC");
+
+ /* Wait for CSTS.RDY in Controller Status */
+ timo = NVME_CAP_LO_TO(cap);
+ for (;;) {
+ error = nvmf_read_property(qp, NVMF_PROP_CSTS, 4, &csts);
+ if (error != 0)
+ errc(1, error, "Failed to fetch CSTS");
+
+ if (NVMEV(NVME_CSTS_REG_RDY, csts) != 0)
+ break;
+
+ if (timo == 0)
+ errx(1, "Controller failed to become ready");
+ timo--;
+ usleep(500 * 1000);
+ }
+
+ /* Fetch controller data. */
+ error = nvmf_host_identify_controller(qp, &cdata);
+ if (error != 0)
+ errc(1, error, "Failed to fetch controller data");
+
+ nvmf_update_assocation(na, &cdata);
+
+ info.mqes = NVME_CAP_LO_MQES(cap);
+ info.nn = cdata.nn;
+ info.ioccsz = cdata.ioccsz;
+ info.disconnect_supported = (cdata.ofcs & 1) != 0;
+
+ return (qp);
+}
+
+static void
+shutdown_controller(struct nvmf_qpair *qp)
+{
+ uint64_t cc;
+ int error;
+
+ error = nvmf_read_property(qp, NVMF_PROP_CC, 4, &cc);
+ if (error != 0)
+ errc(1, error, "Failed to fetch CC");
+
+ cc |= NVMEF(NVME_CC_REG_SHN, NVME_SHN_NORMAL);
+
+ error = nvmf_write_property(qp, NVMF_PROP_CC, 4, cc);
+ if (error != 0)
+ errc(1, error, "Failed to set CC to trigger shutdown");
+
+ nvmf_free_qpair(qp);
+}
+
+static void
+disconnect_queue(struct nvmf_qpair *qp)
+{
+ nvmf_free_qpair(qp);
+}
+
+static int
+validate_namespace(struct nvmf_qpair *qp, u_int nsid, u_int *block_size)
+{
+ struct nvme_namespace_data nsdata;
+ int error;
+ uint8_t lbads, lbaf;
+
+ if (nsid > info.nn) {
+ warnx("Invalid namespace ID %u", nsid);
+ return (ERANGE);
+ }
+
+ error = nvmf_host_identify_namespace(qp, nsid, &nsdata);
+ if (error != 0) {
+ warnc(error, "Failed to identify namespace");
+ return (error);
+ }
+
+ nvme_namespace_data_swapbytes(&nsdata);
+
+ if (NVMEV(NVME_NS_DATA_DPS_PIT, nsdata.dps) != 0) {
+ warnx("End-to-end data protection is not supported");
+ return (EINVAL);
+ }
+
+ lbaf = NVMEV(NVME_NS_DATA_FLBAS_FORMAT, nsdata.flbas);
+ if (lbaf > nsdata.nlbaf) {
+ warnx("Invalid LBA format index");
+ return (EINVAL);
+ }
+
+ if (NVMEV(NVME_NS_DATA_LBAF_MS, nsdata.lbaf[lbaf]) != 0) {
+ warnx("Namespaces with metadata are not supported");
+ return (EINVAL);
+ }
+
+ lbads = NVMEV(NVME_NS_DATA_LBAF_LBADS, nsdata.lbaf[lbaf]);
+ if (lbads == 0) {
+ warnx("Invalid LBA format index");
+ return (EINVAL);
+ }
+
+ *block_size = 1 << lbads;
+ fprintf(stderr, "Detected block size %u\n", *block_size);
+ return (0);
+}
+
+static int
+nvmf_io_command(struct nvmf_qpair *qp, u_int nsid, enum rw command,
+ uint64_t slba, uint16_t nlb, void *buffer, size_t length)
+{
+ struct nvme_command cmd;
+ const struct nvme_completion *cqe;
+ struct nvmf_capsule *cc, *rc;
+ int error;
+ uint16_t status;
+
+ memset(&cmd, 0, sizeof(cmd));
+ cmd.opc = command == WRITE ? NVME_OPC_WRITE : NVME_OPC_READ;
+ cmd.nsid = htole32(nsid);
+ cmd.cdw10 = htole32(slba);
+ cmd.cdw11 = htole32(slba >> 32);
+ cmd.cdw12 = htole32(nlb - 1);
+ /* Sequential Request in cdw13? */
+
+ cc = nvmf_allocate_command(qp, &cmd);
+ if (cc == NULL)
+ return (errno);
+
+ error = nvmf_capsule_append_data(cc, buffer, length,
+ command == WRITE);
+ if (error != 0) {
+ nvmf_free_capsule(cc);
+ return (error);
+ }
+
+ error = nvmf_host_transmit_command(cc);
+ if (error != 0) {
+ nvmf_free_capsule(cc);
+ return (error);
+ }
+
+ error = nvmf_host_wait_for_response(cc, &rc);
+ nvmf_free_capsule(cc);
+ if (error != 0)
+ return (error);
+
+ cqe = nvmf_capsule_cqe(rc);
+ status = le16toh(cqe->status);
+ if (status != 0) {
+ printf("NVMF: %s failed, status %#x\n", command == WRITE ?
+ "WRITE" : "READ", status);
+ nvmf_free_capsule(rc);
+ return (EIO);
+ }
+
+ nvmf_free_capsule(rc);
+ return (0);
+}
+
+static int
+nvmf_io(struct nvmf_qpair *qp, u_int nsid, u_int block_size, enum rw command,
+ off_t offset, off_t length)
+{
+ char *buf;
+ ssize_t rv;
+ u_int todo;
+ int error;
+
+ if (offset % block_size != 0) {
+ warnx("Misaligned offset");
+ return (EINVAL);
+ }
+ if (length % block_size != 0 && command == WRITE)
+ warnx("Length is not multiple of block size, will zero pad");
+
+ buf = malloc(block_size);
+ error = 0;
+ while (length != 0) {
+ todo = length;
+ if (todo > block_size)
+ todo = block_size;
+
+ if (command == WRITE) {
+ rv = read(STDIN_FILENO, buf, todo);
+ if (rv == -1) {
+ error = errno;
+ break;
+ }
+ if (rv != todo) {
+ warn("Short read on input");
+ error = EIO;
+ break;
+ }
+
+ if (todo < block_size)
+ memset(buf + todo, 0, block_size - todo);
+ }
+
+ error = nvmf_io_command(qp, nsid, command, offset / block_size,
+ 1, buf, block_size);
+ if (error != 0) {
+ warnc(error, "Failed I/O request");
+ break;
+ }
+
+ if (command == READ)
+ (void)write(STDOUT_FILENO, buf, todo);
+
+ offset += block_size;
+ length -= todo;
+ }
+
+ free(buf);
+ return (error);
+}
+
+int
+main(int ac, char **av)
+{
+ const char *transport;
+ char *address, *port;
+ enum rw command;
+ struct nvmf_association_params aparams;
+ struct nvmf_qpair_params qparams;
+ struct nvmf_association *na;
+ struct nvmf_qpair *admin, *io;
+ char hostnqn[NVMF_NQN_MAX_LEN];
+ uint8_t hostid[16];
+ enum nvmf_trtype trtype;
+ off_t offset, length;
+ int ch, error;
+ u_int block_size, cntlid, nsid, queues;
+
+ cntlid = NVMF_CNTLID_DYNAMIC;
+ offset = 0;
+ length = 512;
+ nsid = 1;
+ port = NULL;
+ transport = "tcp";
+ while ((ch = getopt(ac, av, "FGc:gl:n:o:p:t:")) != -1) {
+ switch (ch) {
+ case 'F':
+ flow_control_disable = true;
+ break;
+ case 'G':
+ data_digests = true;
+ break;
+ case 'c':
+ if (strcasecmp(optarg, "dynamic") == 0)
+ cntlid = NVMF_CNTLID_DYNAMIC;
+ else if (strcasecmp(optarg, "static") == 0)
+ cntlid = NVMF_CNTLID_STATIC_ANY;
+ else
+ cntlid = strtoul(optarg, NULL, 0);
+ break;
+ case 'g':
+ header_digests = true;
+ break;
+ case 'l':
+ length = strtoumax(optarg, NULL, 0);
+ break;
+ case 'n':
+ nsid = strtoul(optarg, NULL, 0);
+ break;
+ case 'o':
+ offset = strtoumax(optarg, NULL, 0);
+ break;
+ case 't':
+ transport = optarg;
+ break;
+ default:
+ usage();
+ }
+ }
+
+ av += optind;
+ ac -= optind;
+
+ if (ac != 3)
+ usage();
+
+ if (nsid == 0 || nsid >= 0xffffffff)
+ errx(1, "Invalid namespace ID %u", nsid);
+
+ if (strcasecmp(av[0], "read") == 0)
+ command = READ;
+ else if (strcasecmp(av[0], "write") == 0)
+ command = WRITE;
+ else
+ errx(1, "Invalid command %s", av[0]);
+
+ address = av[1];
+ port = strrchr(address, ':');
+ if (port == NULL || port[1] == '\0')
+ errx(1, "Invalid address %s", address);
+ *port = '\0';
+ port++;
+
+ memset(&aparams, 0, sizeof(aparams));
+ aparams.sq_flow_control = !flow_control_disable;
+ if (strcasecmp(transport, "tcp") == 0) {
+ trtype = NVMF_TRTYPE_TCP;
+ tcp_association_params(&aparams);
+ } else
+ errx(1, "Invalid transport %s", transport);
+
+ error = nvmf_hostid_from_hostuuid(hostid);
+ if (error != 0)
+ errc(1, error, "Failed to generate hostid");
+ error = nvmf_nqn_from_hostuuid(hostnqn);
+ if (error != 0)
+ errc(1, error, "Failed to generate host NQN");
+
+ na = nvmf_allocate_association(trtype, false, &aparams);
+ if (na == NULL)
+ err(1, "Failed to create association");
+
+ memset(&qparams, 0, sizeof(qparams));
+ tcp_qpair_params(&qparams, true, address, port);
+
+ admin = connect_admin_queue(na, &qparams, hostid, cntlid, hostnqn,
+ av[2]);
+ if (admin == NULL)
+ errx(1, "Failed to create admin queue: %s",
+ nvmf_association_error(na));
+
+ error = validate_namespace(admin, nsid, &block_size);
+ if (error != 0) {
+ shutdown_controller(admin);
+ nvmf_free_association(na);
+ return (1);
+ }
+
+ error = nvmf_host_request_queues(admin, 1, &queues);
+ if (error != 0) {
+ shutdown_controller(admin);
+ nvmf_free_association(na);
+ errc(1, error, "Failed to request I/O queues");
+ }
+
+ memset(&qparams, 0, sizeof(qparams));
+ tcp_qpair_params(&qparams, false, address, port);
+
+ io = nvmf_connect(na, &qparams, 1, info.mqes + 1, hostid,
+ nvmf_cntlid(admin), av[2], hostnqn, 0);
+ if (io == NULL) {
+ warn("Failed to create I/O queue: %s",
+ nvmf_association_error(na));
+ shutdown_controller(admin);
+ nvmf_free_association(na);
+ return (1);
+ }
+ nvmf_free_association(na);
+
+ error = nvmf_io(io, nsid, block_size, command, offset, length);
+
+ disconnect_queue(io);
+ shutdown_controller(admin);
+ return (error == 0 ? 0 : 1);
+}
diff --git a/tools/tools/pciroms/Makefile b/tools/tools/pciroms/Makefile
index b317c4a72df9..87cc16d01055 100644
--- a/tools/tools/pciroms/Makefile
+++ b/tools/tools/pciroms/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= pciroms
diff --git a/tools/tools/pciroms/pciroms.c b/tools/tools/pciroms/pciroms.c
index 9919c2087961..48bd7be75eef 100644
--- a/tools/tools/pciroms/pciroms.c
+++ b/tools/tools/pciroms/pciroms.c
@@ -24,9 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/pciio.h>
diff --git a/tools/tools/perforce/awkdiff b/tools/tools/perforce/awkdiff
deleted file mode 100755
index 380d6fa26f93..000000000000
--- a/tools/tools/perforce/awkdiff
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/awk -f
-#
-# $FreeBSD$
-#
-
-BEGIN {
- #parentpath = "//depot/vendor/freebsd/src/sys/"
- #childpath = "//depot/projects/opencrypto/"
-}
-$1 == "====" {
- last_line = $0
- last_filename = $2
- #gsub(parentpath, "", last_filename)
- gsub(/#[0-9]*$/, "", last_filename)
- did_sub = 0
-}
-$1 == "====" && $2 == "<none>" {
- new_file = $4
- gsub(childpath, "", new_file)
- gsub(/#[0-9]*$/, "", new_file)
- cmd = "p4 print \"" $4 "\" | sed '/^\\/\\/depot/d' | diff -u /dev/null /dev/stdin | sed s@/dev/stdin@" new_file "@"
- #print "x" cmd "x"
- system(cmd)
-}
-$1 == "====" && $4 == "<none>" {
- del_file = $2
- gsub(parentpath, "", del_file)
- gsub(/#[0-9]*$/, "", del_file)
- cmd = "p4 print \"" $2 "\" | sed '/^\\/\\/depot/d' | diff -u /dev/stdin /dev/null | sed s@/dev/stdin@" del_file "@"
- #print "x" cmd "x"
- system(cmd)
-}
-$1 != "====" {
- if (!did_sub && (($1 == "***************") || ($1 == "@@"))) {
- print "--- ", last_filename ".orig"
- print "+++ ", last_filename
- print $0
- did_sub = 1
- } else {
- print $0
- }
-}
diff --git a/tools/tools/perforce/p4diffbranch b/tools/tools/perforce/p4diffbranch
deleted file mode 100755
index 9d29f23c5019..000000000000
--- a/tools/tools/perforce/p4diffbranch
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh -
-#
-# $FreeBSD$
-#
-
-if [ x"$#" != x"2" ]; then
- echo "Usage: $0 <branch> <changesetnum>"
- exit 1
-fi
-
-basescript="$(realpath "$0")"
-awkdiff="${basescript%/*}/awkdiff"
-
-branch="$1"
-changenum="$2"
-
-p4 branch -o "$branch" |
- awk ' /^View:/ { doview = 1; next; } /^[^ ]/ {doview = 0; next; } $1 && $2 && doview == 1 { system("p4 diff2 -du " $1 "@" changenum " " $2) }' changenum="$changenum" |
- "$awkdiff"
diff --git a/tools/tools/pirtool/Makefile b/tools/tools/pirtool/Makefile
index 7346d2c6a319..e291511839c6 100644
--- a/tools/tools/pirtool/Makefile
+++ b/tools/tools/pirtool/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= pirtool
SRCS= pirtool.c
MAN=
diff --git a/tools/tools/pirtool/pirtable.h b/tools/tools/pirtool/pirtable.h
index 6435531a3937..5f02653a0574 100644
--- a/tools/tools/pirtool/pirtable.h
+++ b/tools/tools/pirtool/pirtable.h
@@ -27,8 +27,6 @@
* 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.
- *
- * $FreeBSD$
*/
/*
diff --git a/tools/tools/pirtool/pirtool.c b/tools/tools/pirtool/pirtool.c
index 3484eb5663cc..03659dbb56dd 100644
--- a/tools/tools/pirtool/pirtool.c
+++ b/tools/tools/pirtool/pirtool.c
@@ -29,8 +29,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/ioctl.h>
diff --git a/tools/tools/portsinfo/portsinfo.sh b/tools/tools/portsinfo/portsinfo.sh
deleted file mode 100644
index a5e700b50efe..000000000000
--- a/tools/tools/portsinfo/portsinfo.sh
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/sh
-# Copyright (c) April 1997 Wolfram Schneider <wosch@FreeBSD.org>, Berlin.
-#
-# portsinfo - Generate list of new ports for last two weeks.
-#
-# $FreeBSD$
-
-PATH=/bin:/usr/bin:/usr/local/bin:$PATH; export PATH
-
-host=https://www.freebsd.org
-url=$host/cgi/ports.cgi
-time='?type=new&time=2+week+ago&sektion=all'
-time2='?type=changed&time=2+week+ago&sektion=all'
-info=yes
-
-if [ x"$info" = xyes ]; then
-
-cat <<'EOF'
-Introduction
-------------
-
-The FreeBSD Ports Collection offers a simple way for users and
-administrators to install applications. Each "port" listed here
-contains any patches necessary to make the original application source
-code compile and run on FreeBSD. Installing an application is as
-simple as downloading the port, unpacking it and typing make in the
-port directory. The Makefile automatically fetches the application
-source code, either from a local disk or via ftp, unpacks it on your
-system, applies the patches, and compiles. If all goes well, simply
-type make install to install the application.
-
-For more information about using ports, see the ports collection
-
- https://www.freebsd.org/handbook/ports.html
-and
- https://www.freebsd.org/ports/
-
-EOF
-
- lynx -dump $host/ports/ |
- perl -ne '/^[ ]*There are currently/ && s/^\s+// && print && exit'
-
-cat <<EOF
-
-
-New ports added last two weeks
-------------------------------
-
-EOF
-
-
-fi
-
-
-lynx -nolist -dump -reload -nostatus "$url$time" |
- grep -v "Description :" |
-perl -ne 'print if (/^\s*Category/ .. /__________________/)' |
- grep -v ________ |
-perl -ne 'if (/^\s*Category/) {
- print; for(1..50) {print "="}; print "\n";
- } else { print}'
-
-cat <<EOF
-
-
-Updated ports last two weeks
------------------------------------
-
-EOF
-
-lynx -nolist -dump -reload -nostatus "$url$time2" |
- grep -v "Description :" |
-perl -ne 's/\[INLINE\]\s*//g; print if (/Category/ .. /XXXXYYYYZZZZ/)' |
-perl -ne 'if (/^\s*Category/) {
- print; for(1..50) {print "="}; print "\n";
- } else { print}'
-
-cat <<EOF
-
-This information was produced by
- $url
-
-EOF
-
diff --git a/tools/tools/qrndtest/Makefile b/tools/tools/qrndtest/Makefile
index 741414439641..5490be244c6a 100644
--- a/tools/tools/qrndtest/Makefile
+++ b/tools/tools/qrndtest/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG = qrndtest
diff --git a/tools/tools/qrndtest/r.c b/tools/tools/qrndtest/r.c
index edfafa778015..3afcd94efaa3 100644
--- a/tools/tools/qrndtest/r.c
+++ b/tools/tools/qrndtest/r.c
@@ -23,8 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
- *
*/
#include <stdint.h>
diff --git a/tools/tools/release/chk_dokern.sh_and_drivers.conf b/tools/tools/release/chk_dokern.sh_and_drivers.conf
index a47c700e152b..3b5427a757ec 100644
--- a/tools/tools/release/chk_dokern.sh_and_drivers.conf
+++ b/tools/tools/release/chk_dokern.sh_and_drivers.conf
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
echo Checking */drivers.conf ...
for f in */drivers.conf; do
diff --git a/tools/tools/scsi-defects/scsi-defects.pl b/tools/tools/scsi-defects/scsi-defects.pl
index 0827182d6e5f..6b11b8cf94b6 100755
--- a/tools/tools/scsi-defects/scsi-defects.pl
+++ b/tools/tools/scsi-defects/scsi-defects.pl
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
#
diff --git a/tools/tools/shlib-compat/Makefile.sysfake b/tools/tools/shlib-compat/Makefile.sysfake
index bbd869715fa4..34a790be3f8c 100644
--- a/tools/tools/shlib-compat/Makefile.sysfake
+++ b/tools/tools/shlib-compat/Makefile.sysfake
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SRCS+= sysfake.c
CLEANFILES+= sysfake.c
diff --git a/tools/tools/shlib-compat/makesyscalls-fake.sh b/tools/tools/shlib-compat/makesyscalls-fake.sh
index badf63b45ee5..7e2a12a661ac 100755
--- a/tools/tools/shlib-compat/makesyscalls-fake.sh
+++ b/tools/tools/shlib-compat/makesyscalls-fake.sh
@@ -1,6 +1,5 @@
#! /bin/sh -
#
-# $FreeBSD$
set -e
diff --git a/tools/tools/shlib-compat/shlib-compat-dirs.sh b/tools/tools/shlib-compat/shlib-compat-dirs.sh
index 21ff309874a5..0b33b9df7a9d 100755
--- a/tools/tools/shlib-compat/shlib-compat-dirs.sh
+++ b/tools/tools/shlib-compat/shlib-compat-dirs.sh
@@ -1,6 +1,5 @@
#!/bin/sh -e
#
-# $FreeBSD$
SHLIB_COMPAT=$(dirname $0)/shlib-compat.py
diff --git a/tools/tools/shlib-compat/shlib-compat.py b/tools/tools/shlib-compat/shlib-compat.py
index 5df55244c74e..ba506f6c0c24 100755
--- a/tools/tools/shlib-compat/shlib-compat.py
+++ b/tools/tools/shlib-compat/shlib-compat.py
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
from __future__ import print_function
import os
diff --git a/tools/tools/shlib-compat/test/Makefile b/tools/tools/shlib-compat/test/Makefile
index f4a354826b10..e28b6ee2ad7e 100644
--- a/tools/tools/shlib-compat/test/Makefile
+++ b/tools/tools/shlib-compat/test/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SUBDIR= libtest1 \
libtest2 \
libtest3 \
diff --git a/tools/tools/shlib-compat/test/Makefile.inc b/tools/tools/shlib-compat/test/Makefile.inc
index e1a0719a89f4..dc0bf23f863f 100644
--- a/tools/tools/shlib-compat/test/Makefile.inc
+++ b/tools/tools/shlib-compat/test/Makefile.inc
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
LIB= test${TESTNUM}
SHLIB_MAJOR= 0
diff --git a/tools/tools/shlib-compat/test/Versions.def b/tools/tools/shlib-compat/test/Versions.def
index 0f46445cc124..94126e488a9a 100644
--- a/tools/tools/shlib-compat/test/Versions.def
+++ b/tools/tools/shlib-compat/test/Versions.def
@@ -1,4 +1,3 @@
-# $FreeBSD$
TEST_1.0 {
};
diff --git a/tools/tools/shlib-compat/test/libtest1/Makefile b/tools/tools/shlib-compat/test/libtest1/Makefile
index 32d77d4f31e1..cbbb9d30d960 100644
--- a/tools/tools/shlib-compat/test/libtest1/Makefile
+++ b/tools/tools/shlib-compat/test/libtest1/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
TESTNUM= 1
.include <../Makefile.inc>
diff --git a/tools/tools/shlib-compat/test/libtest1/Symbol.map b/tools/tools/shlib-compat/test/libtest1/Symbol.map
index 67649ae01868..5b5bcec8853f 100644
--- a/tools/tools/shlib-compat/test/libtest1/Symbol.map
+++ b/tools/tools/shlib-compat/test/libtest1/Symbol.map
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
TEST_1.0 {
diff --git a/tools/tools/shlib-compat/test/libtest1/test.c b/tools/tools/shlib-compat/test/libtest1/test.c
index dc3a561d6782..73789bdb67ba 100644
--- a/tools/tools/shlib-compat/test/libtest1/test.c
+++ b/tools/tools/shlib-compat/test/libtest1/test.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/shlib-compat/test/libtest2/Makefile b/tools/tools/shlib-compat/test/libtest2/Makefile
index f1c277d96c80..fe2b7b22b111 100644
--- a/tools/tools/shlib-compat/test/libtest2/Makefile
+++ b/tools/tools/shlib-compat/test/libtest2/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
TESTNUM= 2
.include <../Makefile.inc>
diff --git a/tools/tools/shlib-compat/test/libtest2/Symbol.map b/tools/tools/shlib-compat/test/libtest2/Symbol.map
index d4b7826913d0..11ffa7b08be4 100644
--- a/tools/tools/shlib-compat/test/libtest2/Symbol.map
+++ b/tools/tools/shlib-compat/test/libtest2/Symbol.map
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
TEST_1.0 {
diff --git a/tools/tools/shlib-compat/test/libtest2/test.c b/tools/tools/shlib-compat/test/libtest2/test.c
index c26935cec33e..2731a60836f2 100644
--- a/tools/tools/shlib-compat/test/libtest2/test.c
+++ b/tools/tools/shlib-compat/test/libtest2/test.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/shlib-compat/test/libtest3/Makefile b/tools/tools/shlib-compat/test/libtest3/Makefile
index 9f8970fd6aee..d5942c588a15 100644
--- a/tools/tools/shlib-compat/test/libtest3/Makefile
+++ b/tools/tools/shlib-compat/test/libtest3/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
TESTNUM= 3
.include <../Makefile.inc>
diff --git a/tools/tools/shlib-compat/test/libtest3/Symbol.map b/tools/tools/shlib-compat/test/libtest3/Symbol.map
index 67649ae01868..5b5bcec8853f 100644
--- a/tools/tools/shlib-compat/test/libtest3/Symbol.map
+++ b/tools/tools/shlib-compat/test/libtest3/Symbol.map
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
TEST_1.0 {
diff --git a/tools/tools/shlib-compat/test/libtest3/test.c b/tools/tools/shlib-compat/test/libtest3/test.c
index 95a169c68236..27d3fd989197 100644
--- a/tools/tools/shlib-compat/test/libtest3/test.c
+++ b/tools/tools/shlib-compat/test/libtest3/test.c
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
#include <sys/types.h>
diff --git a/tools/tools/shlib-compat/test/libtestsys/Makefile b/tools/tools/shlib-compat/test/libtestsys/Makefile
index 837cfc3b3520..631fb8178175 100644
--- a/tools/tools/shlib-compat/test/libtestsys/Makefile
+++ b/tools/tools/shlib-compat/test/libtestsys/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
TESTNUM= sys
CLEANFILES+= test.c
diff --git a/tools/tools/shlib-compat/test/libtestsys/Symbol.map b/tools/tools/shlib-compat/test/libtestsys/Symbol.map
index d596923bf077..5f4c2477b037 100644
--- a/tools/tools/shlib-compat/test/libtestsys/Symbol.map
+++ b/tools/tools/shlib-compat/test/libtestsys/Symbol.map
@@ -1,5 +1,4 @@
/*
- * $FreeBSD$
*/
TEST_1.0 {
diff --git a/tools/tools/shlib-compat/test/regress.m4 b/tools/tools/shlib-compat/test/regress.m4
index 35e2ab958f00..dd725d403af4 100644
--- a/tools/tools/shlib-compat/test/regress.m4
+++ b/tools/tools/shlib-compat/test/regress.m4
@@ -1,4 +1,3 @@
-# $FreeBSD$
dnl A library of routines for doing regression tests for userland utilities.
diff --git a/tools/tools/shlib-compat/test/regress.sh b/tools/tools/shlib-compat/test/regress.sh
index 0789fa8b3cf7..36a963b57433 100755
--- a/tools/tools/shlib-compat/test/regress.sh
+++ b/tools/tools/shlib-compat/test/regress.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
run() { ../shlib-compat.py --no-dump -vv libtest$1/libtest$1.so.0.full libtest$2/libtest$2.so.0.full; }
echo 1..9
diff --git a/tools/tools/shlib-compat/test/regress.t b/tools/tools/shlib-compat/test/regress.t
index 35feb209a0e5..8263b14297bc 100644
--- a/tools/tools/shlib-compat/test/regress.t
+++ b/tools/tools/shlib-compat/test/regress.t
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
cd `dirname $0`
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 8beab3177334..33d3b73442e8 100644
--- a/tools/tools/sortbench/Makefile
+++ b/tools/tools/sortbench/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= sort_bench
MAN=
diff --git a/tools/tools/sortbench/README b/tools/tools/sortbench/README
index 9fbee3715319..7ad57ca3863c 100644
--- a/tools/tools/sortbench/README
+++ b/tools/tools/sortbench/README
@@ -1,4 +1,3 @@
-$FreeBSD$
Running:
1. Compile mergesort_bench.c into mergesort_bench
diff --git a/tools/tools/sortbench/bench.py b/tools/tools/sortbench/bench.py
index 82e3639d3f5c..73d5bb005964 100755
--- a/tools/tools/sortbench/bench.py
+++ b/tools/tools/sortbench/bench.py
@@ -23,8 +23,6 @@ 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.
-
- $FreeBSD$
"""
from time import time
diff --git a/tools/tools/sortbench/sort_bench.c b/tools/tools/sortbench/sort_bench.c
index 3eeb745b9c5b..da6df996ba02 100644
--- a/tools/tools/sortbench/sort_bench.c
+++ b/tools/tools/sortbench/sort_bench.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <math.h>
diff --git a/tools/tools/switch_tls/Makefile b/tools/tools/switch_tls/Makefile
index be50ebd654e9..00bb882cc600 100644
--- a/tools/tools/switch_tls/Makefile
+++ b/tools/tools/switch_tls/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= switch_tls
MAN=
diff --git a/tools/tools/switch_tls/switch_tls.c b/tools/tools/switch_tls/switch_tls.c
index 788926bfb92a..e79cba5a30f8 100644
--- a/tools/tools/switch_tls/switch_tls.c
+++ b/tools/tools/switch_tls/switch_tls.c
@@ -17,9 +17,6 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -61,7 +58,7 @@ static bool tcpswitchall(const char *, int);
static bool tcpswitchbyname(const char *, const char *, const char *,
const char *, int);
static bool tcpswitchconn(const struct in_conninfo *, int);
-static void usage(void);
+static void usage(void) __dead2;
/*
* Switch a tcp connection.
diff --git a/tools/tools/sysbuild/README b/tools/tools/sysbuild/README
index a1fa5f4e080a..b8d865415c4f 100644
--- a/tools/tools/sysbuild/README
+++ b/tools/tools/sysbuild/README
@@ -1,4 +1,3 @@
-$FreeBSD$
About sysbuild.sh
=================
diff --git a/tools/tools/sysbuild/sysbuild.sh b/tools/tools/sysbuild/sysbuild.sh
index 3b4502014642..7c3e21c98736 100644
--- a/tools/tools/sysbuild/sysbuild.sh
+++ b/tools/tools/sysbuild/sysbuild.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
set -e
diff --git a/tools/tools/syscall_timing/Makefile b/tools/tools/syscall_timing/Makefile
index 1aeafb632ce6..e33148eee2e9 100644
--- a/tools/tools/syscall_timing/Makefile
+++ b/tools/tools/syscall_timing/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
PROG= syscall_timing
diff --git a/tools/tools/syscall_timing/syscall_timing.c b/tools/tools/syscall_timing/syscall_timing.c
index e8f7d28776a8..ce77073830dc 100644
--- a/tools/tools/syscall_timing/syscall_timing.c
+++ b/tools/tools/syscall_timing/syscall_timing.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/sysdoc/Makefile b/tools/tools/sysdoc/Makefile
index 724d62cf2f39..e00cdad8ea52 100644
--- a/tools/tools/sysdoc/Makefile
+++ b/tools/tools/sysdoc/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
sysctl.5:
sh ${.CURDIR}/sysdoc.sh -k /boot/kernel
diff --git a/tools/tools/sysdoc/sysctl.sh b/tools/tools/sysdoc/sysctl.sh
index 8dcaf62f3576..6539c9576eea 100644
--- a/tools/tools/sysdoc/sysctl.sh
+++ b/tools/tools/sysdoc/sysctl.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
# For each sysctl, repeat:
# if it has a short description
diff --git a/tools/tools/sysdoc/sysdoc.sh b/tools/tools/sysdoc/sysdoc.sh
index 66d26632f8e7..61fc304495df 100644
--- a/tools/tools/sysdoc/sysdoc.sh
+++ b/tools/tools/sysdoc/sysdoc.sh
@@ -1,6 +1,5 @@
#!/bin/sh
#
-# $FreeBSD$
#
#################################################################
# Missing Features:
diff --git a/tools/tools/sysdoc/tunables.mdoc b/tools/tools/sysdoc/tunables.mdoc
index a481c7e3f008..20b59f450cf2 100644
--- a/tools/tools/sysdoc/tunables.mdoc
+++ b/tools/tools/sysdoc/tunables.mdoc
@@ -1,4 +1,3 @@
-# $FreeBSD$
---
debug.disablecwd
bool
@@ -1273,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/termcap/termcap.pl b/tools/tools/termcap/termcap.pl
index f6d4dc6ef51d..c00574b99705 100755
--- a/tools/tools/termcap/termcap.pl
+++ b/tools/tools/termcap/termcap.pl
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
use strict;
diff --git a/tools/tools/tionxcl/Makefile b/tools/tools/tionxcl/Makefile
index 1f23d67c9529..a7987d9e6df6 100644
--- a/tools/tools/tionxcl/Makefile
+++ b/tools/tools/tionxcl/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tionxcl
MAN=
diff --git a/tools/tools/tionxcl/tionxcl.c b/tools/tools/tionxcl/tionxcl.c
index cac02cd7887f..138bcceee3ea 100644
--- a/tools/tools/tionxcl/tionxcl.c
+++ b/tools/tools/tionxcl/tionxcl.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/track/Makefile b/tools/tools/track/Makefile
index 3d44baae2b83..c5acc6e28036 100644
--- a/tools/tools/track/Makefile
+++ b/tools/tools/track/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PREFIX?= /usr/local
BINDIR?= ${PREFIX}/bin
SCRIPTS= track.sh
diff --git a/tools/tools/track/track.sh b/tools/tools/track/track.sh
index f4674a96c698..31e93166cef2 100644
--- a/tools/tools/track/track.sh
+++ b/tools/tools/track/track.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#-
-# Copyright (c) 2008 Dag-Erling Coïdan Smørgrav
+# Copyright (c) 2008 Dag-Erling Smørgrav
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
#
tail -10000 -F "$@" |
diff --git a/tools/tools/tscdrift/Makefile b/tools/tools/tscdrift/Makefile
index d235972fb53a..28d9493643f9 100644
--- a/tools/tools/tscdrift/Makefile
+++ b/tools/tools/tscdrift/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= tscdrift
MAN=
diff --git a/tools/tools/tscdrift/tscdrift.c b/tools/tools/tscdrift/tscdrift.c
index 13e754ef6776..cf20993bd1ee 100644
--- a/tools/tools/tscdrift/tscdrift.c
+++ b/tools/tools/tscdrift/tscdrift.c
@@ -25,10 +25,6 @@
* SUCH DAMAGE.
*/
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/param.h>
#include <sys/cpuset.h>
#include <machine/atomic.h>
diff --git a/tools/tools/umastat/Makefile b/tools/tools/umastat/Makefile
index 92cd50e8ae3b..29c128b6a868 100644
--- a/tools/tools/umastat/Makefile
+++ b/tools/tools/umastat/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= umastat
MAN=
WARNS?= 3
diff --git a/tools/tools/umastat/umastat.c b/tools/tools/umastat/umastat.c
index 16a0b9d2c97c..ac72a17d0f46 100644
--- a/tools/tools/umastat/umastat.c
+++ b/tools/tools/umastat/umastat.c
@@ -22,8 +22,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/usb/print-usb-if-vids.sh b/tools/tools/usb/print-usb-if-vids.sh
index 17d8e050d181..58e2397eb825 100644
--- a/tools/tools/usb/print-usb-if-vids.sh
+++ b/tools/tools/usb/print-usb-if-vids.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
fetch -o /tmp/usb.if http://www.usb.org/developers/tools/comp_dump/
diff --git a/tools/tools/usbtest/Makefile b/tools/tools/usbtest/Makefile
index b535f5227f10..723a2804269f 100644
--- a/tools/tools/usbtest/Makefile
+++ b/tools/tools/usbtest/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
# Copyright (c) 2013 Hans Petter Selasky. All rights reserved.
#
diff --git a/tools/tools/usbtest/Makefile.depend b/tools/tools/usbtest/Makefile.depend
index 6b278b826fd0..34fbfadfcfb6 100644
--- a/tools/tools/usbtest/Makefile.depend
+++ b/tools/tools/usbtest/Makefile.depend
@@ -1,4 +1,3 @@
-# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
diff --git a/tools/tools/usbtest/usb_control_ep_test.c b/tools/tools/usbtest/usb_control_ep_test.c
index 4ee3bf3e05b6..1ffb89e42728 100644
--- a/tools/tools/usbtest/usb_control_ep_test.c
+++ b/tools/tools/usbtest/usb_control_ep_test.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2007-2022 Hans Petter Selasky
*
diff --git a/tools/tools/usbtest/usb_modem_test.c b/tools/tools/usbtest/usb_modem_test.c
index 0ac7ac594601..eb264df7dfed 100644
--- a/tools/tools/usbtest/usb_modem_test.c
+++ b/tools/tools/usbtest/usb_modem_test.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2007-2022 Hans Petter Selasky
*
diff --git a/tools/tools/usbtest/usb_msc_test.c b/tools/tools/usbtest/usb_msc_test.c
index 8a67d040f63c..1b9c3192a472 100644
--- a/tools/tools/usbtest/usb_msc_test.c
+++ b/tools/tools/usbtest/usb_msc_test.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2007-2022 Hans Petter Selasky
*
@@ -953,7 +952,6 @@ find_usb_endpoints(struct libusb20_device *pdev, uint8_t class,
struct libusb20_interface *iface;
struct libusb20_endpoint *ep;
uint8_t x;
- uint8_t y;
uint8_t z;
*in_ep = 0;
@@ -967,9 +965,6 @@ find_usb_endpoints(struct libusb20_device *pdev, uint8_t class,
return;
for (x = 0; x != pcfg->num_interface; x++) {
-
- y = alt_setting;
-
iface = (pcfg->interface + x);
if ((iface->desc.bInterfaceClass == class) &&
diff --git a/tools/tools/usbtest/usb_msc_test.h b/tools/tools/usbtest/usb_msc_test.h
index 4c6a4c4bcf5b..5718e6cd513f 100644
--- a/tools/tools/usbtest/usb_msc_test.h
+++ b/tools/tools/usbtest/usb_msc_test.h
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
*
diff --git a/tools/tools/usbtest/usbtest.c b/tools/tools/usbtest/usbtest.c
index 40d67589c5a9..adb46ef44b34 100644
--- a/tools/tools/usbtest/usbtest.c
+++ b/tools/tools/usbtest/usbtest.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2010-2022 Hans Petter Selasky
*
diff --git a/tools/tools/usbtest/usbtest.h b/tools/tools/usbtest/usbtest.h
index f274bebc848b..efe484bc7d37 100644
--- a/tools/tools/usbtest/usbtest.h
+++ b/tools/tools/usbtest/usbtest.h
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2010-2022 Hans Petter Selasky
*
diff --git a/tools/tools/vhba/Makefile b/tools/tools/vhba/Makefile
index 72191d7179c7..d3c57fef44b9 100644
--- a/tools/tools/vhba/Makefile
+++ b/tools/tools/vhba/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# Copyright (c) 2010 by Panasas Inc
# All rights reserved.
diff --git a/tools/tools/vhba/README b/tools/tools/vhba/README
index ced0b5db46f7..14de926ed58b 100644
--- a/tools/tools/vhba/README
+++ b/tools/tools/vhba/README
@@ -1,4 +1,3 @@
-$FreeBSD$
Tue Jun 8 15:02:02 PDT 2010
This packages is a testbed for a number of purposes and consists
diff --git a/tools/tools/vhba/faulty/Makefile b/tools/tools/vhba/faulty/Makefile
index bbbb158b4102..e1fb9abf5d62 100644
--- a/tools/tools/vhba/faulty/Makefile
+++ b/tools/tools/vhba/faulty/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
KMOD= vfaulty
SRCS= vhba_faulty.c vhba.c
CFLAGS += -I${.CURDIR}/.. -DVHBA_MOD=\"vfaulty\"
diff --git a/tools/tools/vhba/faulty/vhba_faulty.c b/tools/tools/vhba/faulty/vhba_faulty.c
index 49cbb4b1065e..28d0dffecc8d 100644
--- a/tools/tools/vhba/faulty/vhba_faulty.c
+++ b/tools/tools/vhba/faulty/vhba_faulty.c
@@ -23,7 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* "Faulty" Device. Victimize random commands with a Selection Timeout.
*/
diff --git a/tools/tools/vhba/lots/Makefile b/tools/tools/vhba/lots/Makefile
index 37c05c234c37..f4a94f4eeee3 100644
--- a/tools/tools/vhba/lots/Makefile
+++ b/tools/tools/vhba/lots/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
KMOD= vlots
SRCS= vhba_lots.c vhba.c
CFLAGS += -I${.CURDIR}/.. -DVHBA_MOD=\"vlots\"
diff --git a/tools/tools/vhba/lots/vhba_lots.c b/tools/tools/vhba/lots/vhba_lots.c
index 07126663c42d..24d336c75d63 100644
--- a/tools/tools/vhba/lots/vhba_lots.c
+++ b/tools/tools/vhba/lots/vhba_lots.c
@@ -23,7 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* VHBA device that just reate boatloads of devices.
*/
diff --git a/tools/tools/vhba/medium/Makefile b/tools/tools/vhba/medium/Makefile
index 091e1399aa3a..787e9560d300 100644
--- a/tools/tools/vhba/medium/Makefile
+++ b/tools/tools/vhba/medium/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
KMOD= vmedium
SRCS= vhba_medium.c vhba.c
CFLAGS += -I${.CURDIR}/.. -DVHBA_MOD=\"vmedium\"
diff --git a/tools/tools/vhba/medium/vhba_medium.c b/tools/tools/vhba/medium/vhba_medium.c
index 2fc9f926af78..2a1f61dc6861 100644
--- a/tools/tools/vhba/medium/vhba_medium.c
+++ b/tools/tools/vhba/medium/vhba_medium.c
@@ -23,7 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* A VHBA device that has a medium number of device.
*/
diff --git a/tools/tools/vhba/mptest/Makefile b/tools/tools/vhba/mptest/Makefile
index 8e80e45e58f6..fe18f246c616 100644
--- a/tools/tools/vhba/mptest/Makefile
+++ b/tools/tools/vhba/mptest/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# Copyright (c) 2010 by Panasas Inc
# All rights reserved.
diff --git a/tools/tools/vhba/mptest/vhba_mptest.c b/tools/tools/vhba/mptest/vhba_mptest.c
index 9a2ec850e509..44e59c4d2008 100644
--- a/tools/tools/vhba/mptest/vhba_mptest.c
+++ b/tools/tools/vhba/mptest/vhba_mptest.c
@@ -23,7 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* "Faulty" Multipath Device. Creates to devices to be set up as multipath,
* makes one or both of them non existent (or re existent) on demand.
diff --git a/tools/tools/vhba/opt_cam.h b/tools/tools/vhba/opt_cam.h
index da23dbe43a4f..e69de29bb2d1 100644
--- a/tools/tools/vhba/opt_cam.h
+++ b/tools/tools/vhba/opt_cam.h
@@ -1 +0,0 @@
-/* $FreeBSD$ */
diff --git a/tools/tools/vhba/rptluns/Makefile b/tools/tools/vhba/rptluns/Makefile
index a7d81fbc07d8..4ea5821f193e 100644
--- a/tools/tools/vhba/rptluns/Makefile
+++ b/tools/tools/vhba/rptluns/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
KMOD= vrptluns
SRCS= vhba_rptluns.c vhba.c
CFLAGS += -I${.CURDIR}/.. -DVHBA_MOD=\"vrptluns\"
diff --git a/tools/tools/vhba/rptluns/vhba_rptluns.c b/tools/tools/vhba/rptluns/vhba_rptluns.c
index 28424c4facd3..8af132d7087b 100644
--- a/tools/tools/vhba/rptluns/vhba_rptluns.c
+++ b/tools/tools/vhba/rptluns/vhba_rptluns.c
@@ -23,7 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* A VHBA device to test REPORT LUN functionality.
*/
diff --git a/tools/tools/vhba/simple/Makefile b/tools/tools/vhba/simple/Makefile
index 5aa9950a6e60..b6f20f7f7b37 100644
--- a/tools/tools/vhba/simple/Makefile
+++ b/tools/tools/vhba/simple/Makefile
@@ -1,4 +1,3 @@
-# $FreeBSD$
KMOD= vsimple
SRCS= vhba_simple.c vhba.c
CFLAGS += -I${.CURDIR}/.. -DVHBA_MOD=\"vsimple\"
diff --git a/tools/tools/vhba/simple/vhba_simple.c b/tools/tools/vhba/simple/vhba_simple.c
index bc40bea77f8d..0a87dc811341 100644
--- a/tools/tools/vhba/simple/vhba_simple.c
+++ b/tools/tools/vhba/simple/vhba_simple.c
@@ -23,7 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* "Simple" VHBA device
*/
diff --git a/tools/tools/vhba/vhba.c b/tools/tools/vhba/vhba.c
index 3fdfe355d9c7..fcb4ffc002b1 100644
--- a/tools/tools/vhba/vhba.c
+++ b/tools/tools/vhba/vhba.c
@@ -23,7 +23,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* Virtual HBA infrastructure, to be used for testing as well as other cute hacks.
*/
diff --git a/tools/tools/vhba/vhba.h b/tools/tools/vhba/vhba.h
index c09bd000de3e..be00779bcb5d 100644
--- a/tools/tools/vhba/vhba.h
+++ b/tools/tools/vhba/vhba.h
@@ -23,11 +23,10 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
/*
* Virtual HBA defines
*/
-#include <sys/cdefs.h>
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/endian.h>
@@ -39,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 262e3c68209b..0536413b26f0 100644
--- a/tools/tools/vimage/Makefile
+++ b/tools/tools/vimage/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
PROG= vimage
LIBADD= jail
diff --git a/tools/tools/vimage/vimage.8 b/tools/tools/vimage/vimage.8
index accb9d6400bb..60c70de2d90d 100644
--- a/tools/tools/vimage/vimage.8
+++ b/tools/tools/vimage/vimage.8
@@ -25,8 +25,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
-.\"
.Dd August 25, 2009
.Dt VIMAGE 8
.Os
@@ -70,7 +68,7 @@ Every process, socket and network interface present in the system is always
attached to one, and only one, virtual network stack instance (vnet).
During system bootup sequence a default vnet is created to which all the configured
interfaces and user processes are initially attached.
-Assuming that enough system resources are are available, a user with sufficient
+Assuming that enough system resources are available, a user with sufficient
privileges can create and manage a hierarchy of subordinated virtual images.
The
.Nm
diff --git a/tools/tools/vimage/vimage.c b/tools/tools/vimage/vimage.c
index e6655999c50b..cc1c522dd5a5 100644
--- a/tools/tools/vimage/vimage.c
+++ b/tools/tools/vimage/vimage.c
@@ -23,8 +23,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <sys/param.h>
diff --git a/tools/tools/vop_table/vop_table.pl b/tools/tools/vop_table/vop_table.pl
index 5ac979d7e1ed..464836cf59cd 100644
--- a/tools/tools/vop_table/vop_table.pl
+++ b/tools/tools/vop_table/vop_table.pl
@@ -7,7 +7,6 @@
# (c) 2004 Andrew R. Reiter <arr@watson.org>
# All Rights Reserved.
#
-# $FreeBSD$
# XXX todo: Make $src_dir modificationable
diff --git a/tools/tools/vop_table/vop_table.tcl b/tools/tools/vop_table/vop_table.tcl
index 1b76d18bae0d..f8a3ed7b27a1 100644
--- a/tools/tools/vop_table/vop_table.tcl
+++ b/tools/tools/vop_table/vop_table.tcl
@@ -1,5 +1,4 @@
#!/usr/local/bin/tclsh8.3
-# $FreeBSD$
set fo [open _.html w]
diff --git a/tools/tools/vt/fontcvt/terminus.sh b/tools/tools/vt/fontcvt/terminus.sh
index d186e3e30a4b..d05865903122 100644
--- a/tools/tools/vt/fontcvt/terminus.sh
+++ b/tools/tools/vt/fontcvt/terminus.sh
@@ -1,5 +1,4 @@
#!/bin/sh
-# $FreeBSD$
for i in 6:12 8:14 8:16 10:18 10:20 11:22 12:24 14:28 16:32
do
diff --git a/tools/tools/vt/keymaps/KBDFILES.map b/tools/tools/vt/keymaps/KBDFILES.map
index 7964570b9a85..1e775f1878a5 100644
--- a/tools/tools/vt/keymaps/KBDFILES.map
+++ b/tools/tools/vt/keymaps/KBDFILES.map
@@ -1,4 +1,3 @@
-# $FreeBSD$
#
# The Files are converted by "convert-keymaps.pl" from the given encoding to UCS.
#
diff --git a/tools/tools/vt/keymaps/LANG.map b/tools/tools/vt/keymaps/LANG.map
index 29ecbe8da5a7..643b373f6820 100644
--- a/tools/tools/vt/keymaps/LANG.map
+++ b/tools/tools/vt/keymaps/LANG.map
@@ -1,4 +1,3 @@
-# $FreeBSD$
bg bg ISO8859-5
cs cs ISO8859-2
da da ISO8859-15
diff --git a/tools/tools/vt/keymaps/convert-INDEX.pl b/tools/tools/vt/keymaps/convert-INDEX.pl
index ec88fc338620..d987d0b51128 100755
--- a/tools/tools/vt/keymaps/convert-INDEX.pl
+++ b/tools/tools/vt/keymaps/convert-INDEX.pl
@@ -1,5 +1,4 @@
#!/usr/local/bin/perl
-# $FreeBSD$
use Text::Iconv;
use Encode;
diff --git a/tools/tools/vt/keymaps/convert-keymap.pl b/tools/tools/vt/keymaps/convert-keymap.pl
index 4783fe66bca7..3bffda028dc4 100755
--- a/tools/tools/vt/keymaps/convert-keymap.pl
+++ b/tools/tools/vt/keymaps/convert-keymap.pl
@@ -1,5 +1,4 @@
#!/usr/bin/perl
-# $FreeBSD$
use Text::Iconv;
use Encode;
diff --git a/tools/tools/vt/keymaps/convert-keymaps.pl b/tools/tools/vt/keymaps/convert-keymaps.pl
index ea8fbc2b09c3..3b96a04e599b 100755
--- a/tools/tools/vt/keymaps/convert-keymaps.pl
+++ b/tools/tools/vt/keymaps/convert-keymaps.pl
@@ -1,5 +1,4 @@
#!/usr/local/bin/perl
-# $FreeBSD$
use Text::Iconv;
use Encode;
diff --git a/tools/tools/vt/mkkfont/Makefile b/tools/tools/vt/mkkfont/Makefile
index 8e8c2fb33643..1e8a9bcdafd7 100644
--- a/tools/tools/vt/mkkfont/Makefile
+++ b/tools/tools/vt/mkkfont/Makefile
@@ -1,6 +1,4 @@
-# $FreeBSD$
-
PROG= mkkfont
-MAN1=
+MAN=
.include <bsd.prog.mk>
diff --git a/tools/tools/vt/mkkfont/mkkfont.c b/tools/tools/vt/mkkfont/mkkfont.c
index ebfead14e342..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.
@@ -28,8 +27,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
#include <sys/endian.h>
#include <sys/param.h>
#include <sys/font.h>
diff --git a/tools/tools/whereintheworld/Makefile b/tools/tools/whereintheworld/Makefile
index 876a318c3f44..96e3d7eabe37 100644
--- a/tools/tools/whereintheworld/Makefile
+++ b/tools/tools/whereintheworld/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
SCRIPTS= whereintheworld.pl
.include <bsd.prog.mk>
diff --git a/tools/tools/whereintheworld/whereintheworld.pl b/tools/tools/whereintheworld/whereintheworld.pl
index 6e358cfa6734..368c74aaa6fe 100644
--- a/tools/tools/whereintheworld/whereintheworld.pl
+++ b/tools/tools/whereintheworld/whereintheworld.pl
@@ -7,7 +7,6 @@
# Dag-Erling Smørgrav <des@freebsd.org> 09 January 2003
#
# $Id: whereintheworld,v 1.3 2000/01/28 00:42:32 fenner Exp $
-# $FreeBSD$
#
use strict;
diff --git a/tools/tools/wtap/Makefile b/tools/tools/wtap/Makefile
index 79531bf2f931..24768af795e1 100644
--- a/tools/tools/wtap/Makefile
+++ b/tools/tools/wtap/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
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 1e9884f71c68..4510ccc6ae76 100644
--- a/tools/tools/wtap/vis_map/Makefile
+++ b/tools/tools/wtap/vis_map/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
BINDIR?= /usr/local/bin/
PROG= vis_map
SRC= vis_map.c
diff --git a/tools/tools/wtap/vis_map/vis_map.c b/tools/tools/wtap/vis_map/vis_map.c
index afba7d185eef..fa5c71e0af2f 100644
--- a/tools/tools/wtap/vis_map/vis_map.c
+++ b/tools/tools/wtap/vis_map/vis_map.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
#include <stdlib.h>
diff --git a/tools/tools/wtap/wtap/Makefile b/tools/tools/wtap/wtap/Makefile
index 85b584b871bf..9d66f6d64368 100644
--- a/tools/tools/wtap/wtap/Makefile
+++ b/tools/tools/wtap/wtap/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
BINDIR?= /usr/local/bin
PROG= wtap
SRC= wtap.c
diff --git a/tools/tools/wtap/wtap/wtap.c b/tools/tools/wtap/wtap/wtap.c
index 0bc9233a7517..0c7a3292554c 100644
--- a/tools/tools/wtap/wtap/wtap.c
+++ b/tools/tools/wtap/wtap/wtap.c
@@ -25,8 +25,6 @@
* 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.
- *
- * $FreeBSD$
*/
#include <stdio.h>
#include <stdlib.h>
diff --git a/tools/tools/zfsboottest/Makefile b/tools/tools/zfsboottest/Makefile
index acb510de70a9..458e39aab6c7 100644
--- a/tools/tools/zfsboottest/Makefile
+++ b/tools/tools/zfsboottest/Makefile
@@ -1,5 +1,3 @@
-# $FreeBSD$
-
.PATH: ${SRCTOP}/stand/zfs ${SRCTOP}/sys/cddl/boot/zfs
BINDIR?= /usr/bin
diff --git a/tools/tools/zfsboottest/zfsboottest.c b/tools/tools/zfsboottest/zfsboottest.c
index 88f946e9d3fe..5ee239789b57 100644
--- a/tools/tools/zfsboottest/zfsboottest.c
+++ b/tools/tools/zfsboottest/zfsboottest.c
@@ -25,7 +25,6 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* $FreeBSD$ */
#include <sys/param.h>
#include <sys/disk.h>
diff --git a/tools/tools/zfsboottest/zfsboottest.sh b/tools/tools/zfsboottest/zfsboottest.sh
index 1aea755e185f..a86c55794925 100755
--- a/tools/tools/zfsboottest/zfsboottest.sh
+++ b/tools/tools/zfsboottest/zfsboottest.sh
@@ -24,7 +24,6 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
if [ $# -ne 1 ]; then
echo "usage: zfsboottest.sh <pool>" >&2
diff --git a/tools/uma/smrstress/Makefile b/tools/uma/smrstress/Makefile
index 800e7ef4bfbe..41b6a8eb7ba0 100644
--- a/tools/uma/smrstress/Makefile
+++ b/tools/uma/smrstress/Makefile
@@ -1,5 +1,4 @@
#
-# $FreeBSD$
#
KMOD= smrstress
diff --git a/tools/uma/smrstress/smrstress.c b/tools/uma/smrstress/smrstress.c
index 7e7ee4ea065c..41fa11b4364c 100644
--- a/tools/uma/smrstress/smrstress.c
+++ b/tools/uma/smrstress/smrstress.c
@@ -1,5 +1,5 @@
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2020 Jeffrey Roberson <jeff@FreeBSD.org>
*
@@ -24,8 +24,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD$
- *
*/
#include <sys/param.h>
#include <sys/systm.h>
@@ -39,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;
@@ -123,6 +120,7 @@ smrs_thread(void *arg)
else
smrs_read();
atomic_add_int(&smrs_completed, 1);
+ kthread_exit();
}
static void