From owner-svn-src-projects@freebsd.org Fri Sep 14 19:50:43 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 88C531092352 for ; Fri, 14 Sep 2018 19:50:43 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3BBEE8F55F; Fri, 14 Sep 2018 19:50:43 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3680DE68; Fri, 14 Sep 2018 19:50:43 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w8EJoh2k056628; Fri, 14 Sep 2018 19:50:43 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w8EJoaXX056594; Fri, 14 Sep 2018 19:50:36 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201809141950.w8EJoaXX056594@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Fri, 14 Sep 2018 19:50:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r338690 - in projects/clang700-import: . bin/dd bin/rm bin/rm/tests contrib/libarchive contrib/libarchive/cpio/test contrib/libarchive/libarchive contrib/llvm/tools/lld/ELF contrib/llvm... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang700-import: . bin/dd bin/rm bin/rm/tests contrib/libarchive contrib/libarchive/cpio/test contrib/libarchive/libarchive contrib/llvm/tools/lld/ELF contrib/llvm/tools/lld/docs contrib/o... X-SVN-Commit-Revision: 338690 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Sep 2018 19:50:44 -0000 Author: dim Date: Fri Sep 14 19:50:36 2018 New Revision: 338690 URL: https://svnweb.freebsd.org/changeset/base/338690 Log: Merge ^/head r338595 through r338689, and resolve conflicts. Added: projects/clang700-import/bin/rm/tests/ - copied from r338689, head/bin/rm/tests/ projects/clang700-import/lib/libpam/pam.d/ - copied from r338689, head/lib/libpam/pam.d/ projects/clang700-import/tests/sys/netinet/reuseport_lb.c - copied unchanged from r338689, head/tests/sys/netinet/reuseport_lb.c projects/clang700-import/tools/build/options/WITHOUT_REPRODUCIBLE_BUILD - copied unchanged from r338689, head/tools/build/options/WITHOUT_REPRODUCIBLE_BUILD Deleted: projects/clang700-import/etc/pam.d/ Modified: projects/clang700-import/UPDATING projects/clang700-import/bin/dd/misc.c projects/clang700-import/bin/rm/Makefile projects/clang700-import/bin/rm/rm.1 projects/clang700-import/bin/rm/rm.c projects/clang700-import/contrib/libarchive/NEWS projects/clang700-import/contrib/libarchive/README.md projects/clang700-import/contrib/libarchive/cpio/test/test_basic.c projects/clang700-import/contrib/libarchive/cpio/test/test_format_newc.c projects/clang700-import/contrib/libarchive/libarchive/archive.h projects/clang700-import/contrib/libarchive/libarchive/archive_cryptor.c projects/clang700-import/contrib/libarchive/libarchive/archive_entry.h projects/clang700-import/contrib/libarchive/libarchive/archive_pack_dev.c projects/clang700-import/contrib/llvm/tools/lld/ELF/Config.h projects/clang700-import/contrib/llvm/tools/lld/ELF/Driver.cpp projects/clang700-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp projects/clang700-import/contrib/llvm/tools/lld/docs/ld.lld.1 projects/clang700-import/contrib/ofed/infiniband-diags/src/ibdiag_common.c projects/clang700-import/contrib/tcpdump/tcpdump.c projects/clang700-import/etc/Makefile projects/clang700-import/etc/mtree/BSD.tests.dist projects/clang700-import/lib/Makefile projects/clang700-import/lib/libpam/Makefile projects/clang700-import/lib/libpmc/Makefile projects/clang700-import/lib/libpmc/libpmc_pmu_util.c projects/clang700-import/lib/libusb/libusb10.c projects/clang700-import/lib/libusb/libusb10.h projects/clang700-import/lib/libusb/libusb10_io.c projects/clang700-import/sbin/geom/core/geom.8 projects/clang700-import/sbin/geom/core/geom.c projects/clang700-import/sbin/reboot/reboot.c projects/clang700-import/sbin/umount/umount.c projects/clang700-import/share/man/man4/ig4.4 projects/clang700-import/share/man/man5/src.conf.5 projects/clang700-import/share/mk/src.opts.mk projects/clang700-import/sys/amd64/amd64/machdep.c projects/clang700-import/sys/amd64/amd64/support.S projects/clang700-import/sys/amd64/conf/GENERIC projects/clang700-import/sys/amd64/conf/MINIMAL projects/clang700-import/sys/arm/conf/std.armv6 projects/clang700-import/sys/arm/conf/std.armv7 projects/clang700-import/sys/arm64/conf/GENERIC-MMCCAM projects/clang700-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/clang700-import/sys/compat/x86bios/x86bios.c projects/clang700-import/sys/conf/files.arm64 projects/clang700-import/sys/conf/kern.opts.mk projects/clang700-import/sys/conf/kern.post.mk projects/clang700-import/sys/conf/newvers.sh projects/clang700-import/sys/dev/cpuctl/cpuctl.c projects/clang700-import/sys/dev/cxgbe/iw_cxgbe/cm.c projects/clang700-import/sys/dev/cxgbe/t4_main.c projects/clang700-import/sys/dev/hwpmc/hwpmc_mod.c projects/clang700-import/sys/dev/ichiic/ig4_pci.c projects/clang700-import/sys/dev/xen/privcmd/privcmd.c projects/clang700-import/sys/kern/imgact_elf.c projects/clang700-import/sys/kern/vfs_vnops.c projects/clang700-import/sys/net/vnet.h projects/clang700-import/sys/netinet/tcp_stacks/rack.c projects/clang700-import/sys/riscv/conf/GENERIC projects/clang700-import/sys/riscv/riscv/elf_machdep.c projects/clang700-import/sys/sys/pcpu.h projects/clang700-import/sys/x86/include/ucode.h projects/clang700-import/sys/x86/x86/local_apic.c projects/clang700-import/sys/x86/x86/msi.c projects/clang700-import/sys/x86/x86/ucode.c projects/clang700-import/sys/x86/xen/hvm.c projects/clang700-import/sys/x86/xen/pv.c projects/clang700-import/sys/x86/xen/pvcpu_enum.c projects/clang700-import/sys/x86/xen/xen_apic.c projects/clang700-import/sys/x86/xen/xen_intr.c projects/clang700-import/sys/xen/xen_intr.h projects/clang700-import/tests/sys/netinet/Makefile projects/clang700-import/usr.bin/bsdcat/Makefile projects/clang700-import/usr.bin/cpio/Makefile projects/clang700-import/usr.bin/objcopy/Makefile projects/clang700-import/usr.bin/tar/Makefile projects/clang700-import/usr.sbin/Makefile Directory Properties: projects/clang700-import/ (props changed) projects/clang700-import/contrib/libarchive/ (props changed) projects/clang700-import/contrib/llvm/ (props changed) projects/clang700-import/contrib/llvm/tools/lld/ (props changed) projects/clang700-import/contrib/tcpdump/ (props changed) projects/clang700-import/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/clang700-import/UPDATING ============================================================================== --- projects/clang700-import/UPDATING Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/UPDATING Fri Sep 14 19:50:36 2018 (r338690) @@ -113,7 +113,9 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW: 20180719: New uid:gid added, ntpd:ntpd (123:123). Be sure to run mergemaster or take steps to update /etc/passwd before doing installworld on - existing systems. Also, rc.d/ntpd now starts ntpd(8) as user ntpd + existing systems. Do not skip the "mergemaster -Fp" step before + installworld, as described in the update procedures near the bottom + of this document. Also, rc.d/ntpd now starts ntpd(8) as user ntpd if the new mac_ntpd(4) policy is available, unless ntpd_flags or the ntp config file contain options that change file/dir locations. When such options (e.g., "statsdir" or "crypto") are used, ntpd can Modified: projects/clang700-import/bin/dd/misc.c ============================================================================== --- projects/clang700-import/bin/dd/misc.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/bin/dd/misc.c Fri Sep 14 19:50:36 2018 (r338690) @@ -111,7 +111,7 @@ progress(void) { static int outlen; char si[4 + 1 + 2 + 1]; /* 123 NUL */ - char iec[4 + 1 + 2 + 1]; /* 123 NUL */ + char iec[4 + 1 + 3 + 1]; /* 123 NUL */ char persec[4 + 1 + 2 + 1]; /* 123 NUL */ char *buf; double secs; @@ -121,11 +121,11 @@ progress(void) HN_DECIMAL | HN_DIVISOR_1000); humanize_number(iec, sizeof(iec), (int64_t)st.bytes, "B", HN_AUTOSCALE, HN_DECIMAL | HN_IEC_PREFIXES); - humanize_number(persec, sizeof(iec), (int64_t)(st.bytes / secs), "B", + humanize_number(persec, sizeof(persec), (int64_t)(st.bytes / secs), "B", HN_AUTOSCALE, HN_DECIMAL | HN_DIVISOR_1000); asprintf(&buf, " %'ju bytes (%s, %s) transferred %.3fs, %s/s", (uintmax_t)st.bytes, si, iec, secs, persec); - outlen = fprintf(stderr, "%-*s\r", outlen, buf); + outlen = fprintf(stderr, "%-*s\r", outlen, buf) - 1; fflush(stderr); free(buf); need_progress = 0; Modified: projects/clang700-import/bin/rm/Makefile ============================================================================== --- projects/clang700-import/bin/rm/Makefile Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/bin/rm/Makefile Fri Sep 14 19:50:36 2018 (r338690) @@ -1,10 +1,15 @@ # @(#)Makefile 8.1 (Berkeley) 5/31/93 # $FreeBSD$ +.include + PACKAGE=runtime PROG= rm LINKS= ${BINDIR}/rm ${BINDIR}/unlink MLINKS= rm.1 unlink.1 + +HAS_TESTS= +SUBDIR.${MK_TESTS}+= tests .include Modified: projects/clang700-import/bin/rm/rm.1 ============================================================================== --- projects/clang700-import/bin/rm/rm.1 Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/bin/rm/rm.1 Fri Sep 14 19:50:36 2018 (r338690) @@ -32,7 +32,7 @@ .\" @(#)rm.1 8.5 (Berkeley) 12/5/94 .\" $FreeBSD$ .\" -.Dd November 7, 2015 +.Dd September 12, 2018 .Dt RM 1 .Os .Sh NAME @@ -45,6 +45,7 @@ .Op Fl dIPRrvWx .Ar .Nm unlink +.Op Fl - .Ar file .Sh DESCRIPTION The @@ -154,6 +155,9 @@ No options may be supplied in this simple mode of oper which performs an .Xr unlink 2 operation on the passed argument. +However, the usual option-end delimiter, +.Fl - , +may optionally precede the argument. .Sh EXIT STATUS The .Nm @@ -201,11 +205,12 @@ directory hierarchy: .Pp .Dl $ rm -rf foobar .Pp -Either of these commands will remove the file +Any of these commands will remove the file .Pa -f : .Bd -literal -offset indent $ rm -- -f $ rm ./-f +$ unlink -f .Ed .Sh COMPATIBILITY The Modified: projects/clang700-import/bin/rm/rm.c ============================================================================== --- projects/clang700-import/bin/rm/rm.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/bin/rm/rm.c Fri Sep 14 19:50:36 2018 (r338690) @@ -101,13 +101,12 @@ main(int argc, char *argv[]) else ++p; if (strcmp(p, "unlink") == 0) { - while (getopt(argc, argv, "") != -1) + if (argc == 2) + rm_file(&argv[1]); + else if (argc == 3 && strcmp(argv[1], "--") == 0) + rm_file(&argv[2]); + else usage(); - argc -= optind; - argv += optind; - if (argc != 1) - usage(); - rm_file(&argv[0]); exit(eval); } @@ -634,7 +633,7 @@ usage(void) (void)fprintf(stderr, "%s\n%s\n", "usage: rm [-f | -i] [-dIPRrvWx] file ...", - " unlink file"); + " unlink [--] file"); exit(EX_USAGE); } Modified: projects/clang700-import/contrib/libarchive/NEWS ============================================================================== --- projects/clang700-import/contrib/libarchive/NEWS Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/NEWS Fri Sep 14 19:50:36 2018 (r338690) @@ -1,3 +1,13 @@ +Sep 03, 2018: libarchive 3.3.3 released + +Jul 19, 2018: Avoid super-linear slowdown on malformed mtree files + +Jan 27, 2018: Many fixes for building with Visual Studio + +Oct 19, 2017: NO_OVERWRITE doesn't change existing directory attributes + +Aug 12, 2017: New support for Zstandard read and write filters + Jul 09, 2017: libarchive 3.3.2 released Mar 16, 2017: NFSv4 ACL support for Linux (librichacl) Modified: projects/clang700-import/contrib/libarchive/README.md ============================================================================== --- projects/clang700-import/contrib/libarchive/README.md Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/README.md Fri Sep 14 19:50:36 2018 (r338690) @@ -99,6 +99,7 @@ The library also detects and handles any of the follow * lzma, lzip, and xz compression * lz4 compression * lzop compression + * zstandard compression The library can create archives in any of the following formats: * POSIX ustar @@ -125,6 +126,7 @@ When creating archives, the result can be filtered wit * lzma, lzip, and xz compression * lz4 compression * lzop compression + * zstandard compression ## Notes about the Library Design @@ -159,7 +161,7 @@ questions we are asked about libarchive: * On read, compression and format are always detected automatically. -* The same API is used for all formats; in particular, it's very +* The same API is used for all formats; it should be very easy for software using libarchive to transparently handle any of libarchive's archiving formats. Modified: projects/clang700-import/contrib/libarchive/cpio/test/test_basic.c ============================================================================== --- projects/clang700-import/contrib/libarchive/cpio/test/test_basic.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/cpio/test/test_basic.c Fri Sep 14 19:50:36 2018 (r338690) @@ -144,49 +144,79 @@ DEFINE_TEST(test_basic) /* File with 10 bytes content. */ assertMakeFile("file", 0644, "1234567890"); fprintf(filelist, "file\n"); - if (is_LargeInode("file")) + if (is_LargeInode("file")) { strncat(result, - "bsdcpio: file: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: file: large inode number truncated: ", sizeof(result) - strlen(result) -1); + strncat(result, + strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, + "\n", + sizeof(result) - strlen(result) -1); + } /* hardlink to above file. */ assertMakeHardlink("linkfile", "file"); fprintf(filelist, "linkfile\n"); - if (is_LargeInode("linkfile")) + if (is_LargeInode("linkfile")) { strncat(result, - "bsdcpio: linkfile: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: linkfile: large inode number truncated: ", sizeof(result) - strlen(result) -1); + strncat(result, + strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, + "\n", + sizeof(result) - strlen(result) -1); + } /* Symlink to above file. */ if (canSymlink()) { assertMakeSymlink("symlink", "file"); fprintf(filelist, "symlink\n"); - if (is_LargeInode("symlink")) + if (is_LargeInode("symlink")) { strncat(result, - "bsdcpio: symlink: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: symlink: large inode number truncated: ", sizeof(result) - strlen(result) -1); + strncat(result, + strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, + "\n", + sizeof(result) - strlen(result) -1); + } } /* Another file with different permissions. */ assertMakeFile("file2", 0777, "1234567890"); fprintf(filelist, "file2\n"); - if (is_LargeInode("file2")) + if (is_LargeInode("file2")) { strncat(result, - "bsdcpio: file2: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: file2: large inode number truncated: ", sizeof(result) - strlen(result) -1); + strncat(result, + strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, + "\n", + sizeof(result) - strlen(result) -1); + } /* Directory. */ assertMakeDir("dir", 0775); fprintf(filelist, "dir\n"); - if (is_LargeInode("dir")) + if (is_LargeInode("dir")) { strncat(result, - "bsdcpio: dir: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: dir: large inode number truncated: ", sizeof(result) - strlen(result) -1); + strncat(result, + strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, + "\n", + sizeof(result) - strlen(result) -1); + } strncat(result, "2 blocks\n", sizeof(result) - strlen(result) -1); /* All done. */ Modified: projects/clang700-import/contrib/libarchive/cpio/test/test_format_newc.c ============================================================================== --- projects/clang700-import/contrib/libarchive/cpio/test/test_format_newc.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/cpio/test/test_format_newc.c Fri Sep 14 19:50:36 2018 (r338690) @@ -124,26 +124,42 @@ DEFINE_TEST(test_format_newc) /* Setup result message. */ memset(result, 0, sizeof(result)); - if (is_LargeInode("file1")) + if (is_LargeInode("file1")) { strncat(result, - "bsdcpio: file1: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: file1: large inode number truncated: ", sizeof(result) - strlen(result) -1); - if (canSymlink() && is_LargeInode("symlink")) + strncat(result, strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, "\n", + sizeof(result) - strlen(result) -1); + } + if (canSymlink() && is_LargeInode("symlink")) { strncat(result, - "bsdcpio: symlink: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: symlink: large inode number truncated: ", sizeof(result) - strlen(result) -1); - if (is_LargeInode("dir")) + strncat(result, strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, "\n", + sizeof(result) - strlen(result) -1); + } + if (is_LargeInode("dir")) { strncat(result, - "bsdcpio: dir: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: dir: large inode number truncated: ", sizeof(result) - strlen(result) -1); - if (is_LargeInode("hardlink")) + strncat(result, strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, "\n", + sizeof(result) - strlen(result) -1); + } + if (is_LargeInode("hardlink")) { strncat(result, - "bsdcpio: hardlink: large inode number truncated: " - "Numerical result out of range\n", + "bsdcpio: hardlink: large inode number truncated: ", sizeof(result) - strlen(result) -1); + strncat(result, strerror(ERANGE), + sizeof(result) - strlen(result) -1); + strncat(result, "\n", + sizeof(result) - strlen(result) -1); + } /* Record some facts about what we just created: */ now = time(NULL); /* They were all created w/in last two seconds. */ Modified: projects/clang700-import/contrib/libarchive/libarchive/archive.h ============================================================================== --- projects/clang700-import/contrib/libarchive/libarchive/archive.h Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/libarchive/archive.h Fri Sep 14 19:50:36 2018 (r338690) @@ -36,7 +36,7 @@ * assert that ARCHIVE_VERSION_NUMBER >= 2012108. */ /* Note: Compiler will complain if this does not match archive_entry.h! */ -#define ARCHIVE_VERSION_NUMBER 3003002 +#define ARCHIVE_VERSION_NUMBER 3003003 #include #include /* for wchar_t */ @@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void); /* * Textual name/version of the library, useful for version displays. */ -#define ARCHIVE_VERSION_ONLY_STRING "3.3.2" +#define ARCHIVE_VERSION_ONLY_STRING "3.3.3" #define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING __LA_DECL const char * archive_version_string(void); Modified: projects/clang700-import/contrib/libarchive/libarchive/archive_cryptor.c ============================================================================== --- projects/clang700-import/contrib/libarchive/libarchive/archive_cryptor.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/libarchive/archive_cryptor.c Fri Sep 14 19:50:36 2018 (r338690) @@ -153,7 +153,7 @@ aes_ctr_encrypt_counter(archive_crypto_ctx *ctx) CCCryptorStatus r; r = CCCryptorReset(ref, NULL); - if (r != kCCSuccess) + if (r != kCCSuccess && r != kCCUnimplemented) return -1; r = CCCryptorUpdate(ref, ctx->nonce, AES_BLOCK_SIZE, ctx->encr_buf, AES_BLOCK_SIZE, NULL); Modified: projects/clang700-import/contrib/libarchive/libarchive/archive_entry.h ============================================================================== --- projects/clang700-import/contrib/libarchive/libarchive/archive_entry.h Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/libarchive/archive_entry.h Fri Sep 14 19:50:36 2018 (r338690) @@ -30,7 +30,7 @@ #define ARCHIVE_ENTRY_H_INCLUDED /* Note: Compiler will complain if this does not match archive.h! */ -#define ARCHIVE_VERSION_NUMBER 3003002 +#define ARCHIVE_VERSION_NUMBER 3003003 /* * Note: archive_entry.h is for use outside of libarchive; the Modified: projects/clang700-import/contrib/libarchive/libarchive/archive_pack_dev.c ============================================================================== --- projects/clang700-import/contrib/libarchive/libarchive/archive_pack_dev.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/libarchive/libarchive/archive_pack_dev.c Fri Sep 14 19:50:36 2018 (r338690) @@ -57,6 +57,9 @@ __RCSID("$NetBSD$"); #ifdef HAVE_SYS_STAT_H #include #endif +#ifdef HAVE_SYS_SYSMACROS_H +#include +#endif #ifdef HAVE_UNISTD_H #include #endif Modified: projects/clang700-import/contrib/llvm/tools/lld/ELF/Config.h ============================================================================== --- projects/clang700-import/contrib/llvm/tools/lld/ELF/Config.h Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/llvm/tools/lld/ELF/Config.h Fri Sep 14 19:50:36 2018 (r338690) @@ -183,6 +183,7 @@ struct Configuration { bool ZHazardplt; bool ZIfuncnoplt; bool ZInitfirst; + bool ZInterpose; bool ZKeepTextSectionPrefix; bool ZNodelete; bool ZNodlopen; Modified: projects/clang700-import/contrib/llvm/tools/lld/ELF/Driver.cpp ============================================================================== --- projects/clang700-import/contrib/llvm/tools/lld/ELF/Driver.cpp Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/llvm/tools/lld/ELF/Driver.cpp Fri Sep 14 19:50:36 2018 (r338690) @@ -846,6 +846,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args Config->ZHazardplt = hasZOption(Args, "hazardplt"); Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt"); Config->ZInitfirst = hasZOption(Args, "initfirst"); + Config->ZInterpose = hasZOption(Args, "interpose"); Config->ZKeepTextSectionPrefix = getZFlag( Args, "keep-text-section-prefix", "nokeep-text-section-prefix", false); Config->ZNodelete = hasZOption(Args, "nodelete"); Modified: projects/clang700-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp ============================================================================== --- projects/clang700-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp Fri Sep 14 19:50:36 2018 (r338690) @@ -1266,6 +1266,8 @@ template void DynamicSection::final DtFlags |= DF_SYMBOLIC; if (Config->ZInitfirst) DtFlags1 |= DF_1_INITFIRST; + if (Config->ZInterpose) + DtFlags1 |= DF_1_INTERPOSE; if (Config->ZNodelete) DtFlags1 |= DF_1_NODELETE; if (Config->ZNodlopen) Modified: projects/clang700-import/contrib/llvm/tools/lld/docs/ld.lld.1 ============================================================================== --- projects/clang700-import/contrib/llvm/tools/lld/docs/ld.lld.1 Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/llvm/tools/lld/docs/ld.lld.1 Fri Sep 14 19:50:36 2018 (r338690) @@ -3,7 +3,7 @@ .\" .\" This man page documents only lld's ELF linking support, obtained originally .\" from FreeBSD. -.Dd August 22, 2018 +.Dd September 14, 2018 .Dt LD.LLD 1 .Os .Sh NAME @@ -462,6 +462,12 @@ environments. Sets the .Dv DF_1_INITFIRST flag to indicate the module should be initialized first. +.It Cm interpose +Set the +.Dv DF_1_INTERPOSE +flag to indicate that the object is an interposer. +Runtime linkers perform symbol resolution by first searching the application, +followed by interposers, and then any other dependencies. .It Cm muldefs Do not error if a symbol is defined multiple times. The first definition will be used. Modified: projects/clang700-import/contrib/ofed/infiniband-diags/src/ibdiag_common.c ============================================================================== --- projects/clang700-import/contrib/ofed/infiniband-diags/src/ibdiag_common.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/ofed/infiniband-diags/src/ibdiag_common.c Fri Sep 14 19:50:36 2018 (r338690) @@ -84,8 +84,7 @@ static const struct ibdiag_opt *opts_map[256]; static const char *get_build_version(void) { - return "BUILD VERSION: " IBDIAG_VERSION " Build date: " __DATE__ " " - __TIME__; + return "BUILD VERSION: " IBDIAG_VERSION; } static void pretty_print(int start, int width, const char *str) Modified: projects/clang700-import/contrib/tcpdump/tcpdump.c ============================================================================== --- projects/clang700-import/contrib/tcpdump/tcpdump.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/contrib/tcpdump/tcpdump.c Fri Sep 14 19:50:36 2018 (r338690) @@ -2069,6 +2069,9 @@ main(int argc, char **argv) #else cansandbox = (cansandbox && ndo->ndo_nflag); #endif /* HAVE_CASPER */ + cansandbox = (cansandbox && (pcap_fileno(pd) != -1 || + RFileName != NULL)); + if (cansandbox && cap_enter() < 0 && errno != ENOSYS) error("unable to enter the capability mode"); #endif /* HAVE_CAPSICUM */ Modified: projects/clang700-import/etc/Makefile ============================================================================== --- projects/clang700-import/etc/Makefile Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/etc/Makefile Fri Sep 14 19:50:36 2018 (r338690) @@ -121,7 +121,6 @@ distribution: ${_+_}cd ${.CURDIR}/mtree; ${MAKE} install ${_+_}cd ${SRCTOP}/share/termcap; ${MAKE} etc-termcap ${_+_}cd ${SRCTOP}/usr.sbin/rmt; ${MAKE} etc-rmt - ${_+_}cd ${.CURDIR}/pam.d; ${MAKE} install .if ${MK_UNBOUND} != "no" if [ ! -e ${DESTDIR}/etc/unbound ]; then \ ${INSTALL_SYMLINK} ../var/unbound ${DESTDIR}/etc/unbound; \ Modified: projects/clang700-import/etc/mtree/BSD.tests.dist ============================================================================== --- projects/clang700-import/etc/mtree/BSD.tests.dist Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/etc/mtree/BSD.tests.dist Fri Sep 14 19:50:36 2018 (r338690) @@ -34,6 +34,8 @@ .. pwait .. + rm + .. rmdir .. sh Modified: projects/clang700-import/lib/Makefile ============================================================================== --- projects/clang700-import/lib/Makefile Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/lib/Makefile Fri Sep 14 19:50:36 2018 (r338690) @@ -70,6 +70,8 @@ SUBDIR= ${SUBDIR_BOOTSTRAP} \ libpathconv \ libpcap \ libpjdlog \ + libpmc \ + libpmcstat \ ${_libproc} \ libprocstat \ libregex \ @@ -198,9 +200,6 @@ _libdl= libdl .endif SUBDIR.${MK_OPENSSL}+= libmp -.if (${COMPILER_TYPE} == "clang" || (${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} >= 60100 && ${MACHINE_CPUARCH} != "riscv")) -SUBDIR.${MK_PMC}+= libpmc libpmcstat -.endif SUBDIR.${MK_RADIUS_SUPPORT}+= libradius SUBDIR.${MK_SENDMAIL}+= libmilter libsm libsmdb libsmutil SUBDIR.${MK_TELNET}+= libtelnet Modified: projects/clang700-import/lib/libpam/Makefile ============================================================================== --- projects/clang700-import/lib/libpam/Makefile Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/lib/libpam/Makefile Fri Sep 14 19:50:36 2018 (r338690) @@ -25,7 +25,7 @@ # $FreeBSD$ # The modules link in libpam. They build the static modules as well. -SUBDIR+= libpam modules +SUBDIR+= libpam modules pam.d SUBDIR_DEPEND_modules= libpam SUBDIR+= static_libpam SUBDIR_DEPEND_static_libpam= modules Modified: projects/clang700-import/lib/libpmc/Makefile ============================================================================== --- projects/clang700-import/lib/libpmc/Makefile Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/lib/libpmc/Makefile Fri Sep 14 19:50:36 2018 (r338690) @@ -7,7 +7,7 @@ SRCS= libpmc.c pmclog.c libpmc_pmu_util.c libpmc_json. INCS= pmc.h pmclog.h pmcformat.h CFLAGS+= -I${.CURDIR} -CWARNFLAGS.gcc+= -Wno-shadow +CWARNFLAGS.gcc+= -Wno-shadow -Wno-cast-align .if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" Modified: projects/clang700-import/lib/libpmc/libpmc_pmu_util.c ============================================================================== --- projects/clang700-import/lib/libpmc/libpmc_pmu_util.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/lib/libpmc/libpmc_pmu_util.c Fri Sep 14 19:50:36 2018 (r338690) @@ -237,6 +237,7 @@ pmu_parse_event(struct pmu_event_desc *ped, const char return (ENOMEM); r = event; bzero(ped, sizeof(*ped)); + ped->ped_period = DEFAULT_SAMPLE_COUNT; ped->ped_umask = -1; while ((kvp = strsep(&event, ",")) != NULL) { key = strsep(&kvp, "="); Modified: projects/clang700-import/lib/libusb/libusb10.c ============================================================================== --- projects/clang700-import/lib/libusb/libusb10.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/lib/libusb/libusb10.c Fri Sep 14 19:50:36 2018 (r338690) @@ -114,6 +114,19 @@ libusb_set_nonblocking(int f) fcntl(f, F_SETFL, flags); } +static void +libusb10_wakeup_event_loop(libusb_context *ctx) +{ + uint8_t dummy = 0; + int err; + + err = write(ctx->ctrl_pipe[1], &dummy, sizeof(dummy)); + if (err < (int)sizeof(dummy)) { + /* ignore error, if any */ + DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "Waking up event loop failed!"); + } +} + int libusb_init(libusb_context **context) { @@ -484,7 +497,6 @@ libusb_open(libusb_device *dev, libusb_device_handle * { libusb_context *ctx = dev->ctx; struct libusb20_device *pdev = dev->os_priv; - uint8_t dummy; int err; if (devh == NULL) @@ -506,12 +518,8 @@ libusb_open(libusb_device *dev, libusb_device_handle * POLLOUT | POLLRDNORM | POLLWRNORM); /* make sure our event loop detects the new device */ - dummy = 0; - err = write(ctx->ctrl_pipe[1], &dummy, sizeof(dummy)); - if (err < (int)sizeof(dummy)) { - /* ignore error, if any */ - DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_open write failed!"); - } + libusb10_wakeup_event_loop(ctx); + *devh = pdev; return (0); @@ -564,8 +572,6 @@ libusb_close(struct libusb20_device *pdev) { libusb_context *ctx; struct libusb_device *dev; - uint8_t dummy; - int err; if (pdev == NULL) return; /* be NULL safe */ @@ -581,12 +587,7 @@ libusb_close(struct libusb20_device *pdev) libusb_unref_device(dev); /* make sure our event loop detects the closed device */ - dummy = 0; - err = write(ctx->ctrl_pipe[1], &dummy, sizeof(dummy)); - if (err < (int)sizeof(dummy)) { - /* ignore error, if any */ - DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_close write failed!"); - } + libusb10_wakeup_event_loop(ctx); } libusb_device * @@ -1314,7 +1315,6 @@ libusb10_submit_transfer_sub(struct libusb20_device *p int buffsize; int maxframe; int temp; - uint8_t dummy; dev = libusb_get_device(pdev); @@ -1415,10 +1415,8 @@ found: failure: libusb10_complete_transfer(pxfer0, sxfer, LIBUSB_TRANSFER_ERROR); - /* make sure our event loop spins the done handler */ - dummy = 0; - err = write(dev->ctx->ctrl_pipe[1], &dummy, sizeof(dummy)); + libusb10_wakeup_event_loop(dev->ctx); } /* The following function must be called unlocked */ @@ -1459,6 +1457,8 @@ libusb_submit_transfer(struct libusb_transfer *uxfer) (libusb20_tr_get_priv_sc1(pxfer0) == sxfer) || (libusb20_tr_get_priv_sc1(pxfer1) == sxfer)) { err = LIBUSB_ERROR_BUSY; + } else if (dev->device_is_gone != 0) { + err = LIBUSB_ERROR_NO_DEVICE; } else { /* set pending state */ @@ -1490,6 +1490,7 @@ libusb_cancel_transfer(struct libusb_transfer *uxfer) struct libusb20_transfer *pxfer1; struct libusb_super_transfer *sxfer; struct libusb_device *dev; + struct libusb_device_handle *devh; uint8_t endpoint; int retval; @@ -1497,12 +1498,12 @@ libusb_cancel_transfer(struct libusb_transfer *uxfer) return (LIBUSB_ERROR_INVALID_PARAM); /* check if not initialised */ - if (uxfer->dev_handle == NULL) + if ((devh = uxfer->dev_handle) == NULL) return (LIBUSB_ERROR_NOT_FOUND); endpoint = uxfer->endpoint; - dev = libusb_get_device(uxfer->dev_handle); + dev = libusb_get_device(devh); DPRINTF(dev->ctx, LIBUSB_DEBUG_FUNCTION, "libusb_cancel_transfer enter"); @@ -1513,8 +1514,8 @@ libusb_cancel_transfer(struct libusb_transfer *uxfer) CTX_LOCK(dev->ctx); - pxfer0 = libusb10_get_transfer(uxfer->dev_handle, endpoint, 0); - pxfer1 = libusb10_get_transfer(uxfer->dev_handle, endpoint, 1); + pxfer0 = libusb10_get_transfer(devh, endpoint, 0); + pxfer1 = libusb10_get_transfer(devh, endpoint, 1); if (sxfer->state != LIBUSB_SUPER_XFER_ST_PEND) { /* only update the transfer status */ @@ -1526,23 +1527,38 @@ libusb_cancel_transfer(struct libusb_transfer *uxfer) sxfer->entry.tqe_prev = NULL; libusb10_complete_transfer(NULL, sxfer, LIBUSB_TRANSFER_CANCELLED); + /* make sure our event loop spins the done handler */ + libusb10_wakeup_event_loop(dev->ctx); } else if (pxfer0 == NULL || pxfer1 == NULL) { /* not started */ retval = LIBUSB_ERROR_NOT_FOUND; } else if (libusb20_tr_get_priv_sc1(pxfer0) == sxfer) { libusb10_complete_transfer(pxfer0, sxfer, LIBUSB_TRANSFER_CANCELLED); - libusb20_tr_stop(pxfer0); - /* make sure the queue doesn't stall */ - libusb10_submit_transfer_sub( - uxfer->dev_handle, endpoint); + if (dev->device_is_gone != 0) { + /* clear transfer pointer */ + libusb20_tr_set_priv_sc1(pxfer0, NULL); + /* make sure our event loop spins the done handler */ + libusb10_wakeup_event_loop(dev->ctx); + } else { + libusb20_tr_stop(pxfer0); + /* make sure the queue doesn't stall */ + libusb10_submit_transfer_sub(devh, endpoint); + } } else if (libusb20_tr_get_priv_sc1(pxfer1) == sxfer) { libusb10_complete_transfer(pxfer1, sxfer, LIBUSB_TRANSFER_CANCELLED); - libusb20_tr_stop(pxfer1); - /* make sure the queue doesn't stall */ - libusb10_submit_transfer_sub( - uxfer->dev_handle, endpoint); + /* check if handle is still active */ + if (dev->device_is_gone != 0) { + /* clear transfer pointer */ + libusb20_tr_set_priv_sc1(pxfer1, NULL); + /* make sure our event loop spins the done handler */ + libusb10_wakeup_event_loop(dev->ctx); + } else { + libusb20_tr_stop(pxfer1); + /* make sure the queue doesn't stall */ + libusb10_submit_transfer_sub(devh, endpoint); + } } else { /* not started */ retval = LIBUSB_ERROR_NOT_FOUND; @@ -1568,6 +1584,35 @@ libusb10_cancel_all_transfer(libusb_device *dev) if (xfer == NULL) continue; libusb20_tr_close(xfer); + } +} + +UNEXPORTED void +libusb10_cancel_all_transfer_locked(struct libusb20_device *pdev, struct libusb_device *dev) +{ + struct libusb_super_transfer *sxfer; + unsigned x; + + for (x = 0; x != LIBUSB_NUM_SW_ENDPOINTS; x++) { + struct libusb20_transfer *xfer; + + xfer = libusb20_tr_get_pointer(pdev, x); + if (xfer == NULL) + continue; + if (libusb20_tr_pending(xfer) == 0) + continue; + sxfer = libusb20_tr_get_priv_sc1(xfer); + if (sxfer == NULL) + continue; + /* complete pending transfer */ + libusb10_complete_transfer(xfer, sxfer, LIBUSB_TRANSFER_ERROR); + } + + while ((sxfer = TAILQ_FIRST(&dev->tr_head))) { + TAILQ_REMOVE(&dev->tr_head, sxfer, entry); + + /* complete pending transfer */ + libusb10_complete_transfer(NULL, sxfer, LIBUSB_TRANSFER_ERROR); } } Modified: projects/clang700-import/lib/libusb/libusb10.h ============================================================================== --- projects/clang700-import/lib/libusb/libusb10.h Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/lib/libusb/libusb10.h Fri Sep 14 19:50:36 2018 (r338690) @@ -41,22 +41,24 @@ #define HOTPLUG_LOCK(ctx) pthread_mutex_lock(&(ctx)->hotplug_lock) #define HOTPLUG_UNLOCK(ctx) pthread_mutex_unlock(&(ctx)->hotplug_lock) -#define DPRINTF(ctx, dbg, format, args...) do { \ - if ((ctx)->debug == dbg) { \ - switch (dbg) { \ - case LIBUSB_DEBUG_FUNCTION: \ - printf("LIBUSB_FUNCTION: " \ - format "\n", ## args); \ - break; \ - case LIBUSB_DEBUG_TRANSFER: \ - printf("LIBUSB_TRANSFER: " \ - format "\n", ## args); \ - break; \ - default: \ - break; \ - } \ - } \ -} while(0) +#define DPRINTF(ctx, dbg, format, ...) do { \ + switch (dbg) { \ + case LIBUSB_DEBUG_FUNCTION: \ + if ((ctx)->debug & LIBUSB_DEBUG_FUNCTION) { \ + printf("LIBUSB_FUNCTION: " \ + format "\n", ## __VA_ARGS__); \ + } \ + break; \ + case LIBUSB_DEBUG_TRANSFER: \ + if ((ctx)->debug & LIBUSB_DEBUG_TRANSFER) { \ + printf("LIBUSB_TRANSFER: " \ + format "\n", ## __VA_ARGS__); \ + } \ + break; \ + default: \ + break; \ + } \ +} while (0) /* internal structures */ @@ -116,6 +118,8 @@ struct libusb_context { struct libusb_device { int refcnt; + int device_is_gone; + uint32_t claimed_interfaces; struct libusb_super_pollfd dev_poll; @@ -134,5 +138,6 @@ extern struct libusb_context *usbi_default_context; void libusb10_add_pollfd(libusb_context *ctx, struct libusb_super_pollfd *pollfd, struct libusb20_device *pdev, int fd, short events); void libusb10_remove_pollfd(libusb_context *ctx, struct libusb_super_pollfd *pollfd); void libusb10_cancel_all_transfer(libusb_device *dev); +void libusb10_cancel_all_transfer_locked(struct libusb20_device *pdev, struct libusb_device *dev); #endif /* __LIBUSB10_H__ */ Modified: projects/clang700-import/lib/libusb/libusb10_io.c ============================================================================== --- projects/clang700-import/lib/libusb/libusb10_io.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/lib/libusb/libusb10_io.c Fri Sep 14 19:50:36 2018 (r338690) @@ -161,17 +161,19 @@ libusb10_handle_events_sub(struct libusb_context *ctx, if (ppdev[i] != NULL) { dev = libusb_get_device(ppdev[i]); - if (fds[i].revents == 0) - err = 0; /* nothing to do */ - else + if (fds[i].revents != 0) { err = libusb20_dev_process(ppdev[i]); - if (err) { - /* cancel all transfers - device is gone */ - libusb10_cancel_all_transfer(dev); + if (err) { + /* set device is gone */ + dev->device_is_gone = 1; - /* remove USB device from polling loop */ - libusb10_remove_pollfd(dev->ctx, &dev->dev_poll); + /* remove USB device from polling loop */ + libusb10_remove_pollfd(dev->ctx, &dev->dev_poll); + + /* cancel all pending transfers */ + libusb10_cancel_all_transfer_locked(ppdev[i], dev); + } } CTX_UNLOCK(ctx); libusb_unref_device(dev); @@ -180,10 +182,8 @@ libusb10_handle_events_sub(struct libusb_context *ctx, } else { uint8_t dummy; - while (1) { - if (read(fds[i].fd, &dummy, 1) != 1) - break; - } + while (read(fds[i].fd, &dummy, 1) == 1) + ; } } @@ -489,13 +489,26 @@ libusb_control_transfer(libusb_device_handle *devh, return (actlen); } +static libusb_context * +libusb10_get_context_by_device_handle(libusb_device_handle *devh) +{ + libusb_context *ctx; + + if (devh != NULL) + ctx = libusb_get_device(devh)->ctx; + else + ctx = NULL; + + return (GET_CONTEXT(ctx)); +} + static void libusb10_do_transfer_cb(struct libusb_transfer *transfer) { libusb_context *ctx; int *pdone; - ctx = GET_CONTEXT(NULL); + ctx = libusb10_get_context_by_device_handle(transfer->dev_handle); DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "sync I/O done"); @@ -585,7 +598,8 @@ libusb_bulk_transfer(libusb_device_handle *devh, libusb_context *ctx; int ret; - ctx = GET_CONTEXT(NULL); + ctx = libusb10_get_context_by_device_handle(devh); + DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_bulk_transfer enter"); ret = libusb10_do_transfer(devh, endpoint, data, length, transferred, @@ -603,7 +617,8 @@ libusb_interrupt_transfer(libusb_device_handle *devh, libusb_context *ctx; int ret; - ctx = GET_CONTEXT(NULL); + ctx = libusb10_get_context_by_device_handle(devh); + DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_interrupt_transfer enter"); ret = libusb10_do_transfer(devh, endpoint, data, length, transferred, Modified: projects/clang700-import/sbin/geom/core/geom.8 ============================================================================== --- projects/clang700-import/sbin/geom/core/geom.8 Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/sbin/geom/core/geom.8 Fri Sep 14 19:50:36 2018 (r338690) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 5, 2011 +.Dd September 14, 2018 .Dt GEOM 8 .Os .Sh NAME @@ -52,6 +52,11 @@ .Ar class .Cm unload .Op Fl v +.Nm +.Fl p +.Ar provider-name +.Nm +.Fl t .Sh DESCRIPTION The .Nm @@ -101,6 +106,15 @@ sysctl. Unload the kernel module which implements the given class. This command is only available if the given class is loaded as a kernel module. +.El +.Pp +Additional options include: +.Bl -tag -width ".Cm status" +.It Fl p Ar provider-name +Print detailed information about the geom which provides +.Ar provider-name . +.It Fl t +Display geoms hierarchy as a tree. .El .Pp Class-specific commands are implemented as shared libraries which Modified: projects/clang700-import/sbin/geom/core/geom.c ============================================================================== --- projects/clang700-import/sbin/geom/core/geom.c Fri Sep 14 19:25:23 2018 (r338689) +++ projects/clang700-import/sbin/geom/core/geom.c Fri Sep 14 19:50:36 2018 (r338690) @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -65,9 +66,13 @@ static uint32_t *version = NULL; static int verbose = 0; static struct g_command *class_commands = NULL; -#define GEOM_CLASS_CMDS 0x01 -#define GEOM_STD_CMDS 0x02 +#define GEOM_CLASS_CMDS 0x01 +#define GEOM_STD_CMDS 0x02 + +#define GEOM_CLASS_WIDTH 10 + static struct g_command *find_command(const char *cmdstr, int flags); +static void list_one_geom_by_provider(const char *provider_name); static int std_available(const char *name); static void std_help(struct gctl_req *req, unsigned flags); @@ -146,6 +151,8 @@ usage(void) if (class_name == NULL) { fprintf(stderr, "usage: geom [options]\n"); + fprintf(stderr, " geom -p \n"); + fprintf(stderr, " geom -t\n"); exit(EXIT_FAILURE); } else { struct g_command *cmd; @@ -650,10 +657,187 @@ get_class(int *argc, char ***argv) usage(); } +static struct ggeom * +find_geom_by_provider(struct gmesh *mesh, const char *name) +{ + struct gclass *classp; + struct ggeom *gp; + struct gprovider *pp; + + LIST_FOREACH(classp, &mesh->lg_class, lg_class) { + LIST_FOREACH(gp, &classp->lg_geom, lg_geom) { + LIST_FOREACH(pp, &gp->lg_provider, lg_provider) { + if (strcmp(pp->lg_name, name) == 0) + return (gp); + } + } + } + + return (NULL); +} + +static int +compute_tree_width_geom(struct gmesh *mesh, struct ggeom *gp, int indent) +{ + struct gclass *classp2; + struct ggeom *gp2; + struct gconsumer *cp2; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***