Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 31 Jan 2020 19:40:40 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r357350 - in projects/clang1000-import: . contrib/apr/random/unix contrib/apr/strings contrib/bmake/mk gnu/lib include lib/csu lib/libc/amd64/string lib/libc/stdio lib/libusb release/ar...
Message-ID:  <202001311940.00VJeeum059351@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Fri Jan 31 19:40:40 2020
New Revision: 357350
URL: https://svnweb.freebsd.org/changeset/base/357350

Log:
  Merge ^/head r357270 through r357349.

Added:
  projects/clang1000-import/sys/kern/subr_smr.c
     - copied unchanged from r357349, head/sys/kern/subr_smr.c
  projects/clang1000-import/sys/sys/_smr.h
     - copied unchanged from r357349, head/sys/sys/_smr.h
  projects/clang1000-import/sys/sys/smr.h
     - copied unchanged from r357349, head/sys/sys/smr.h
  projects/clang1000-import/tools/uma/
     - copied from r357349, head/tools/uma/
Deleted:
  projects/clang1000-import/release/packages/acct.ucl
  projects/clang1000-import/release/packages/acpi.ucl
  projects/clang1000-import/release/packages/amd.ucl
  projects/clang1000-import/release/packages/apm.ucl
  projects/clang1000-import/release/packages/at.ucl
  projects/clang1000-import/release/packages/autofs.ucl
  projects/clang1000-import/release/packages/bhyve.ucl
  projects/clang1000-import/release/packages/bluetooth.ucl
  projects/clang1000-import/release/packages/bsdinstall.ucl
  projects/clang1000-import/release/packages/bsnmp.ucl
  projects/clang1000-import/release/packages/dma.ucl
  projects/clang1000-import/release/packages/ee.ucl
  projects/clang1000-import/release/packages/hostapd.ucl
  projects/clang1000-import/release/packages/jail-debug.ucl
  projects/clang1000-import/release/packages/jail-development.ucl
  projects/clang1000-import/release/packages/jail-lib32-debug.ucl
  projects/clang1000-import/release/packages/jail-lib32-development.ucl
  projects/clang1000-import/release/packages/jail-lib32-profile.ucl
  projects/clang1000-import/release/packages/jail-lib32.ucl
  projects/clang1000-import/release/packages/jail-profile.ucl
  projects/clang1000-import/release/packages/rcmds.ucl
  projects/clang1000-import/release/packages/runtime-debug.ucl
  projects/clang1000-import/release/packages/runtime-development.ucl
  projects/clang1000-import/release/packages/runtime-lib32.ucl
  projects/clang1000-import/release/packages/runtime-manuals.ucl
  projects/clang1000-import/release/packages/runtime-profile.ucl
  projects/clang1000-import/release/packages/syscons.ucl
  projects/clang1000-import/release/packages/tests.ucl
  projects/clang1000-import/release/packages/vi.ucl
  projects/clang1000-import/release/packages/wpa.ucl
  projects/clang1000-import/tools/build/options/WITHOUT_BSD_CRTBEGIN
  projects/clang1000-import/tools/build/options/WITH_BSD_CRTBEGIN
Modified:
  projects/clang1000-import/Makefile.inc1
  projects/clang1000-import/contrib/apr/random/unix/apr_random.c
  projects/clang1000-import/contrib/apr/strings/apr_snprintf.c
  projects/clang1000-import/contrib/bmake/mk/meta2deps.sh
  projects/clang1000-import/gnu/lib/Makefile
  projects/clang1000-import/include/stdio.h
  projects/clang1000-import/lib/csu/Makefile.inc
  projects/clang1000-import/lib/libc/amd64/string/memcmp.S
  projects/clang1000-import/lib/libc/stdio/Makefile.inc
  projects/clang1000-import/lib/libc/stdio/Symbol.map
  projects/clang1000-import/lib/libc/stdio/fflush.3
  projects/clang1000-import/lib/libc/stdio/fflush.c
  projects/clang1000-import/lib/libc/stdio/fputc.c
  projects/clang1000-import/lib/libc/stdio/fputs.3
  projects/clang1000-import/lib/libc/stdio/fputs.c
  projects/clang1000-import/lib/libc/stdio/fread.3
  projects/clang1000-import/lib/libc/stdio/fread.c
  projects/clang1000-import/lib/libc/stdio/fwrite.c
  projects/clang1000-import/lib/libc/stdio/putc.3
  projects/clang1000-import/lib/libusb/libusb10_hotplug.c
  projects/clang1000-import/release/arm64/RPI3.conf
  projects/clang1000-import/release/packages/binutils.ucl
  projects/clang1000-import/release/packages/caroot.ucl
  projects/clang1000-import/release/packages/clang.ucl
  projects/clang1000-import/release/packages/gdb.ucl
  projects/clang1000-import/release/packages/generate-ucl.sh
  projects/clang1000-import/release/packages/groff.ucl
  projects/clang1000-import/release/packages/jail.ucl
  projects/clang1000-import/release/packages/lld.ucl
  projects/clang1000-import/release/packages/lldb.ucl
  projects/clang1000-import/release/packages/runtime.ucl
  projects/clang1000-import/release/packages/ssh.ucl
  projects/clang1000-import/release/packages/svn.ucl
  projects/clang1000-import/release/packages/unbound.ucl
  projects/clang1000-import/share/man/man4/cpufreq.4
  projects/clang1000-import/share/man/man5/src.conf.5
  projects/clang1000-import/share/man/man9/stack.9
  projects/clang1000-import/share/mk/local.dirdeps-options.mk
  projects/clang1000-import/share/mk/local.dirdeps.mk
  projects/clang1000-import/share/mk/local.gendirdeps.mk
  projects/clang1000-import/share/mk/meta2deps.sh
  projects/clang1000-import/share/mk/src.opts.mk
  projects/clang1000-import/sys/amd64/amd64/support.S
  projects/clang1000-import/sys/amd64/amd64/trap.c
  projects/clang1000-import/sys/arm/arm/stack_machdep.c
  projects/clang1000-import/sys/arm64/acpica/acpi_iort.c
  projects/clang1000-import/sys/arm64/arm64/gicv3_its.c
  projects/clang1000-import/sys/arm64/arm64/stack_machdep.c
  projects/clang1000-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h
  projects/clang1000-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h
  projects/clang1000-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
  projects/clang1000-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
  projects/clang1000-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  projects/clang1000-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
  projects/clang1000-import/sys/conf/config.mk
  projects/clang1000-import/sys/conf/files
  projects/clang1000-import/sys/dev/acpi_support/acpi_ibm.c
  projects/clang1000-import/sys/dev/aic7xxx/aic79xx_inline.h
  projects/clang1000-import/sys/dev/bwi/if_bwi.c
  projects/clang1000-import/sys/dev/bwn/if_bwn.c
  projects/clang1000-import/sys/dev/ipw/if_ipw.c
  projects/clang1000-import/sys/dev/iwi/if_iwi.c
  projects/clang1000-import/sys/dev/iwm/if_iwm.c
  projects/clang1000-import/sys/dev/iwn/if_iwn.c
  projects/clang1000-import/sys/dev/malo/if_malo.c
  projects/clang1000-import/sys/dev/mlx4/mlx4_en/mlx4_en_rx.c
  projects/clang1000-import/sys/dev/mlx5/cq.h
  projects/clang1000-import/sys/dev/mlx5/driver.h
  projects/clang1000-import/sys/dev/mlx5/mlx5_core/mlx5_cq.c
  projects/clang1000-import/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  projects/clang1000-import/sys/dev/mwl/if_mwl.c
  projects/clang1000-import/sys/dev/ral/rt2560.c
  projects/clang1000-import/sys/dev/ral/rt2661.c
  projects/clang1000-import/sys/dev/ral/rt2860.c
  projects/clang1000-import/sys/dev/rtwn/pci/rtwn_pci_rx.c
  projects/clang1000-import/sys/dev/usb/wlan/if_rum.c
  projects/clang1000-import/sys/dev/usb/wlan/if_run.c
  projects/clang1000-import/sys/dev/usb/wlan/if_uath.c
  projects/clang1000-import/sys/dev/usb/wlan/if_upgt.c
  projects/clang1000-import/sys/dev/usb/wlan/if_ural.c
  projects/clang1000-import/sys/dev/usb/wlan/if_urtw.c
  projects/clang1000-import/sys/dev/usb/wlan/if_zyd.c
  projects/clang1000-import/sys/dev/wi/if_wi.c
  projects/clang1000-import/sys/dev/wpi/if_wpi.c
  projects/clang1000-import/sys/dev/wtap/if_wtap.c
  projects/clang1000-import/sys/fs/nullfs/null_subr.c
  projects/clang1000-import/sys/fs/nullfs/null_vnops.c
  projects/clang1000-import/sys/i386/i386/trap.c
  projects/clang1000-import/sys/kern/imgact_binmisc.c
  projects/clang1000-import/sys/kern/imgact_elf.c
  projects/clang1000-import/sys/kern/init_main.c
  projects/clang1000-import/sys/kern/kern_alq.c
  projects/clang1000-import/sys/kern/kern_conf.c
  projects/clang1000-import/sys/kern/kern_exit.c
  projects/clang1000-import/sys/kern/kern_hhook.c
  projects/clang1000-import/sys/kern/kern_jail.c
  projects/clang1000-import/sys/kern/kern_kcov.c
  projects/clang1000-import/sys/kern/kern_kthread.c
  projects/clang1000-import/sys/kern/kern_linker.c
  projects/clang1000-import/sys/kern/kern_lockf.c
  projects/clang1000-import/sys/kern/kern_mib.c
  projects/clang1000-import/sys/kern/kern_mtxpool.c
  projects/clang1000-import/sys/kern/kern_pmc.c
  projects/clang1000-import/sys/kern/kern_poll.c
  projects/clang1000-import/sys/kern/kern_proc.c
  projects/clang1000-import/sys/kern/kern_resource.c
  projects/clang1000-import/sys/kern/kern_rmlock.c
  projects/clang1000-import/sys/kern/kern_sig.c
  projects/clang1000-import/sys/kern/kern_switch.c
  projects/clang1000-import/sys/kern/kern_sysctl.c
  projects/clang1000-import/sys/kern/kern_tc.c
  projects/clang1000-import/sys/kern/kern_time.c
  projects/clang1000-import/sys/kern/kern_ubsan.c
  projects/clang1000-import/sys/kern/kern_umtx.c
  projects/clang1000-import/sys/kern/link_elf.c
  projects/clang1000-import/sys/kern/link_elf_obj.c
  projects/clang1000-import/sys/kern/sched_4bsd.c
  projects/clang1000-import/sys/kern/sched_ule.c
  projects/clang1000-import/sys/kern/subr_acl_posix1e.c
  projects/clang1000-import/sys/kern/subr_blist.c
  projects/clang1000-import/sys/kern/subr_bufring.c
  projects/clang1000-import/sys/kern/subr_bus.c
  projects/clang1000-import/sys/kern/subr_clock.c
  projects/clang1000-import/sys/kern/subr_csan.c
  projects/clang1000-import/sys/kern/subr_fattime.c
  projects/clang1000-import/sys/kern/subr_filter.c
  projects/clang1000-import/sys/kern/subr_gtaskqueue.c
  projects/clang1000-import/sys/kern/subr_hints.c
  projects/clang1000-import/sys/kern/subr_intr.c
  projects/clang1000-import/sys/kern/subr_kdb.c
  projects/clang1000-import/sys/kern/subr_sbuf.c
  projects/clang1000-import/sys/kern/subr_sleepqueue.c
  projects/clang1000-import/sys/kern/subr_smp.c
  projects/clang1000-import/sys/kern/subr_stats.c
  projects/clang1000-import/sys/kern/subr_unit.c
  projects/clang1000-import/sys/kern/subr_vmem.c
  projects/clang1000-import/sys/kern/subr_witness.c
  projects/clang1000-import/sys/kern/sys_generic.c
  projects/clang1000-import/sys/kern/sys_pipe.c
  projects/clang1000-import/sys/kern/sys_process.c
  projects/clang1000-import/sys/kern/sysv_msg.c
  projects/clang1000-import/sys/kern/sysv_shm.c
  projects/clang1000-import/sys/kern/tty_info.c
  projects/clang1000-import/sys/kern/uipc_mbuf.c
  projects/clang1000-import/sys/kern/uipc_usrreq.c
  projects/clang1000-import/sys/kern/vfs_acl.c
  projects/clang1000-import/sys/kern/vfs_bio.c
  projects/clang1000-import/sys/kern/vfs_cluster.c
  projects/clang1000-import/sys/kern/vfs_extattr.c
  projects/clang1000-import/sys/kern/vfs_init.c
  projects/clang1000-import/sys/kern/vfs_subr.c
  projects/clang1000-import/sys/kern/vfs_syscalls.c
  projects/clang1000-import/sys/kern/vfs_vnops.c
  projects/clang1000-import/sys/mips/mips/stack_machdep.c
  projects/clang1000-import/sys/modules/if_lagg/Makefile
  projects/clang1000-import/sys/modules/if_vlan/Makefile
  projects/clang1000-import/sys/netinet/tcp_usrreq.c
  projects/clang1000-import/sys/netinet6/udp6_usrreq.c
  projects/clang1000-import/sys/powerpc/powerpc/stack_machdep.c
  projects/clang1000-import/sys/riscv/include/db_machdep.h
  projects/clang1000-import/sys/riscv/include/pcb.h
  projects/clang1000-import/sys/riscv/include/riscvreg.h
  projects/clang1000-import/sys/riscv/riscv/exception.S
  projects/clang1000-import/sys/riscv/riscv/genassym.c
  projects/clang1000-import/sys/riscv/riscv/machdep.c
  projects/clang1000-import/sys/riscv/riscv/stack_machdep.c
  projects/clang1000-import/sys/sparc64/sparc64/stack_machdep.c
  projects/clang1000-import/sys/sys/rmlock.h
  projects/clang1000-import/sys/sys/stack.h
  projects/clang1000-import/sys/sys/vnode.h
  projects/clang1000-import/sys/ufs/ufs/ufs_inode.c
  projects/clang1000-import/sys/vm/uma.h
  projects/clang1000-import/sys/vm/uma_core.c
  projects/clang1000-import/sys/vm/uma_int.h
  projects/clang1000-import/sys/x86/cpufreq/hwpstate_amd.c
  projects/clang1000-import/sys/x86/include/apicvar.h
  projects/clang1000-import/sys/x86/include/stack.h
  projects/clang1000-import/sys/x86/x86/mp_x86.c
  projects/clang1000-import/sys/x86/x86/stack_machdep.c
  projects/clang1000-import/targets/pseudo/userland/gnu/Makefile.depend
  projects/clang1000-import/tests/sys/sys/qmath_test.c
  projects/clang1000-import/usr.sbin/makefs/msdos/msdosfs_denode.c
  projects/clang1000-import/usr.sbin/services_mkdb/services
Directory Properties:
  projects/clang1000-import/   (props changed)
  projects/clang1000-import/contrib/apr/   (props changed)
  projects/clang1000-import/contrib/bmake/   (props changed)
  projects/clang1000-import/gnu/lib/   (props changed)
  projects/clang1000-import/sys/cddl/contrib/opensolaris/   (props changed)

Modified: projects/clang1000-import/Makefile.inc1
==============================================================================
--- projects/clang1000-import/Makefile.inc1	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/Makefile.inc1	Fri Jan 31 19:40:40 2020	(r357350)
@@ -2783,13 +2783,10 @@ _prereq_libs+= lib/libssp_nonshared
 
 # These dependencies are not automatically generated:
 #
-# gnu/lib/csu, gnu/lib/libgcc, lib/csu and lib/libc must be built before
+# gnu/lib/libgcc, lib/csu and lib/libc must be built before
 # all shared libraries for ELF.
 #
 _startup_libs=	lib/csu
-.if ${MK_BSD_CRTBEGIN} == "no"
-_startup_libs+=	gnu/lib/csu
-.endif
 _startup_libs+=	lib/libc
 _startup_libs+=	lib/libc_nonshared
 .if ${MK_LIBCPLUSPLUS} != "no"

Modified: projects/clang1000-import/contrib/apr/random/unix/apr_random.c
==============================================================================
--- projects/clang1000-import/contrib/apr/random/unix/apr_random.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/contrib/apr/random/unix/apr_random.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -13,285 +13,51 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * See the paper "On Randomness" by Ben Laurie for an explanation of this PRNG.
- * http://www.apache-ssl.org/randomness.pdf
- * XXX: Is there a formal proof of this PRNG? Couldn't we use the more popular
- * Mersenne Twister PRNG (and BSD licensed)?
- */
 
 #include "apr.h"
 #include "apr_pools.h"
 #include "apr_random.h"
 #include "apr_thread_proc.h"
 #include <assert.h>
+#include <stdlib.h>
 
-#ifdef min
-#undef min
-#endif
-#define min(a,b) ((a) < (b) ? (a) : (b))
-
-#define APR_RANDOM_DEFAULT_POOLS 32
-#define APR_RANDOM_DEFAULT_REHASH_SIZE 1024
-#define APR_RANDOM_DEFAULT_RESEED_SIZE 32
-#define APR_RANDOM_DEFAULT_HASH_SECRET_SIZE 32
-#define APR_RANDOM_DEFAULT_G_FOR_INSECURE 32
-#define APR_RANDOM_DEFAULT_G_FOR_SECURE 320
-
-typedef struct apr_random_pool_t {
-    unsigned char *pool;
-    unsigned int bytes;
-    unsigned int pool_size;
-} apr_random_pool_t;
-
-#define hash_init(h)            (h)->init(h)
-#define hash_add(h,b,n)         (h)->add(h,b,n)
-#define hash_finish(h,r)        (h)->finish(h,r)
-
-#define hash(h,r,b,n)           hash_init(h),hash_add(h,b,n),hash_finish(h,r)
-
-#define crypt_setkey(c,k)       (c)->set_key((c)->data,k)
-#define crypt_crypt(c,out,in)   (c)->crypt((c)->date,out,in)
-
-struct apr_random_t {
-    apr_pool_t *apr_pool;
-    apr_crypto_hash_t *pool_hash;
-    unsigned int npools;
-    apr_random_pool_t *pools;
-    unsigned int next_pool;
-    unsigned int generation;
-    apr_size_t rehash_size;
-    apr_size_t reseed_size;
-    apr_crypto_hash_t *key_hash;
-#define K_size(g) ((g)->key_hash->size)
-    apr_crypto_hash_t *prng_hash;
-#define B_size(g) ((g)->prng_hash->size)
-
-    unsigned char *H;
-    unsigned char *H_waiting;
-#define H_size(g) (B_size(g)+K_size(g))
-#define H_current(g) (((g)->insecure_started && !(g)->secure_started) \
-                      ? (g)->H_waiting : (g)->H)
-
-    unsigned char *randomness;
-    apr_size_t random_bytes;
-    unsigned int g_for_insecure;
-    unsigned int g_for_secure;
-    unsigned int secure_base;
-    unsigned int insecure_started:1;
-    unsigned int secure_started:1;
-
-    apr_random_t *next;
-};
-
-static apr_random_t *all_random;
-
-static apr_status_t random_cleanup(void *data)
-{
-    apr_random_t *remove_this = data,
-                 *cur = all_random,
-                 **prev_ptr = &all_random;
-    while (cur) {
-        if (cur == remove_this) {
-            *prev_ptr = cur->next;
-            break;
-        }
-        prev_ptr = &cur->next;
-        cur = cur->next;
-    }
-    return APR_SUCCESS;
-}
-
-
 APR_DECLARE(void) apr_random_init(apr_random_t *g,apr_pool_t *p,
                                   apr_crypto_hash_t *pool_hash,
                                   apr_crypto_hash_t *key_hash,
                                   apr_crypto_hash_t *prng_hash)
 {
-    unsigned int n;
-
-    g->apr_pool = p;
-
-    g->pool_hash = pool_hash;
-    g->key_hash = key_hash;
-    g->prng_hash = prng_hash;
-
-    g->npools = APR_RANDOM_DEFAULT_POOLS;
-    g->pools = apr_palloc(p,g->npools*sizeof *g->pools);
-    for (n = 0; n < g->npools; ++n) {
-        g->pools[n].bytes = g->pools[n].pool_size = 0;
-        g->pools[n].pool = NULL;
-    }
-    g->next_pool = 0;
-
-    g->generation = 0;
-
-    g->rehash_size = APR_RANDOM_DEFAULT_REHASH_SIZE;
-    /* Ensure that the rehash size is twice the size of the pool hasher */
-    g->rehash_size = ((g->rehash_size+2*g->pool_hash->size-1)/g->pool_hash->size
-                    /2)*g->pool_hash->size*2;
-    g->reseed_size = APR_RANDOM_DEFAULT_RESEED_SIZE;
-
-    g->H = apr_pcalloc(p,H_size(g));
-    g->H_waiting = apr_pcalloc(p,H_size(g));
-
-    g->randomness = apr_palloc(p,B_size(g));
-    g->random_bytes = 0;
-
-    g->g_for_insecure = APR_RANDOM_DEFAULT_G_FOR_INSECURE;
-    g->secure_base = 0;
-    g->g_for_secure = APR_RANDOM_DEFAULT_G_FOR_SECURE;
-    g->secure_started = g->insecure_started = 0;
-
-    g->next = all_random;
-    all_random = g;
-    apr_pool_cleanup_register(p, g, random_cleanup, apr_pool_cleanup_null);
+    (void)g;
+    (void)p;
+    (void)pool_hash;
+    (void)key_hash;
+    (void)prng_hash;
 }
 
-static void mix_pid(apr_random_t *g,unsigned char *H,pid_t pid)
-{
-    hash_init(g->key_hash);
-    hash_add(g->key_hash,H,H_size(g));
-    hash_add(g->key_hash,&pid,sizeof pid);
-    hash_finish(g->key_hash,H);
-}
-
-static void mixer(apr_random_t *g,pid_t pid)
-{
-    unsigned char *H = H_current(g);
-
-    /* mix the PID into the current H */
-    mix_pid(g,H,pid);
-    /* if we are in waiting, then also mix into main H */
-    if (H != g->H)
-        mix_pid(g,g->H,pid);
-    /* change order of pool mixing for good measure - note that going
-       backwards is much better than going forwards */
-    --g->generation;
-    /* blow away any lingering randomness */
-    g->random_bytes = 0;
-}
-
 APR_DECLARE(void) apr_random_after_fork(apr_proc_t *proc)
 {
-    apr_random_t *r;
-
-    for (r = all_random; r; r = r->next)
-        /* 
-         * XXX Note: the pid does not provide sufficient entropy to 
-         * actually call this secure.  See Ben's paper referenced at 
-         * the top of this file. 
-         */
-        mixer(r,proc->pid);
+    (void)proc;
 }
 
 APR_DECLARE(apr_random_t *) apr_random_standard_new(apr_pool_t *p)
 {
-    apr_random_t *r = apr_palloc(p,sizeof *r);
-    
-    apr_random_init(r,p,apr_crypto_sha256_new(p),apr_crypto_sha256_new(p),
-                    apr_crypto_sha256_new(p));
-    return r;
+    /* apr_random_t is an opaque struct type. */
+    return (void *)0x1;
 }
 
-static void rekey(apr_random_t *g)
-{
-    unsigned int n;
-    unsigned char *H = H_current(g);
-
-    hash_init(g->key_hash);
-    hash_add(g->key_hash,H,H_size(g));
-    for (n = 0 ; n < g->npools && (n == 0 || g->generation&(1 << (n-1)))
-            ; ++n) {
-        hash_add(g->key_hash,g->pools[n].pool,g->pools[n].bytes);
-        g->pools[n].bytes = 0;
-    }
-    hash_finish(g->key_hash,H+B_size(g));
-
-    ++g->generation;
-    if (!g->insecure_started && g->generation > g->g_for_insecure) {
-        g->insecure_started = 1;
-        if (!g->secure_started) {
-            memcpy(g->H_waiting,g->H,H_size(g));
-            g->secure_base = g->generation;
-        }
-    }
-
-    if (!g->secure_started && g->generation > g->secure_base+g->g_for_secure) {
-        g->secure_started = 1;
-        memcpy(g->H,g->H_waiting,H_size(g));
-    }
-}
-
 APR_DECLARE(void) apr_random_add_entropy(apr_random_t *g,const void *entropy_,
                                          apr_size_t bytes)
 {
-    unsigned int n;
-    const unsigned char *entropy = entropy_;
-
-    for (n = 0; n < bytes; ++n) {
-        apr_random_pool_t *p = &g->pools[g->next_pool];
-
-        if (++g->next_pool == g->npools)
-            g->next_pool = 0;
-
-        if (p->pool_size < p->bytes+1) {
-            unsigned char *np = apr_palloc(g->apr_pool,(p->bytes+1)*2);
-
-            memcpy(np,p->pool,p->bytes);
-            p->pool = np;
-            p->pool_size = (p->bytes+1)*2;
-        }
-        p->pool[p->bytes++] = entropy[n];
-
-        if (p->bytes == g->rehash_size) {
-            apr_size_t r;
-
-            for (r = 0; r < p->bytes/2; r+=g->pool_hash->size)
-                hash(g->pool_hash,p->pool+r,p->pool+r*2,g->pool_hash->size*2);
-            p->bytes/=2;
-        }
-        assert(p->bytes < g->rehash_size);
-    }
-
-    if (g->pools[0].bytes >= g->reseed_size)
-        rekey(g);
+    (void)g;
+    (void)entropy_;
+    (void)bytes;
 }
 
-/* This will give g->B_size bytes of randomness */
-static void apr_random_block(apr_random_t *g,unsigned char *random)
-{
-    /* FIXME: in principle, these are different hashes */
-    hash(g->prng_hash,g->H,g->H,H_size(g));
-    hash(g->prng_hash,random,g->H,B_size(g));
-}
-
-static void apr_random_bytes(apr_random_t *g,unsigned char *random,
-                             apr_size_t bytes)
-{
-    apr_size_t n;
-
-    for (n = 0; n < bytes; ) {
-        apr_size_t l;
-
-        if (g->random_bytes == 0) {
-            apr_random_block(g,g->randomness);
-            g->random_bytes = B_size(g);
-        }
-        l = min(bytes-n,g->random_bytes);
-        memcpy(&random[n],g->randomness+B_size(g)-g->random_bytes,l);
-        g->random_bytes-=l;
-        n+=l;
-    }
-}
-
 APR_DECLARE(apr_status_t) apr_random_secure_bytes(apr_random_t *g,
                                                   void *random,
                                                   apr_size_t bytes)
 {
-    if (!g->secure_started)
-        return APR_ENOTENOUGHENTROPY;
-    apr_random_bytes(g,random,bytes);
+    (void)g;
+    arc4random_buf(random, bytes);
     return APR_SUCCESS;
 }
 
@@ -299,28 +65,24 @@ APR_DECLARE(apr_status_t) apr_random_insecure_bytes(ap
                                                     void *random,
                                                     apr_size_t bytes)
 {
-    if (!g->insecure_started)
-        return APR_ENOTENOUGHENTROPY;
-    apr_random_bytes(g,random,bytes);
+    (void)g;
+    arc4random_buf(random, bytes);
     return APR_SUCCESS;
 }
 
 APR_DECLARE(void) apr_random_barrier(apr_random_t *g)
 {
-    g->secure_started = 0;
-    g->secure_base = g->generation;
+    (void)g;
 }
 
 APR_DECLARE(apr_status_t) apr_random_secure_ready(apr_random_t *r)
 {
-    if (!r->secure_started)
-        return APR_ENOTENOUGHENTROPY;
+    (void)r;
     return APR_SUCCESS;
 }
 
 APR_DECLARE(apr_status_t) apr_random_insecure_ready(apr_random_t *r)
 {
-    if (!r->insecure_started)
-        return APR_ENOTENOUGHENTROPY;
+    (void)r;
     return APR_SUCCESS;
 }

Modified: projects/clang1000-import/contrib/apr/strings/apr_snprintf.c
==============================================================================
--- projects/clang1000-import/contrib/apr/strings/apr_snprintf.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/contrib/apr/strings/apr_snprintf.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -708,6 +708,7 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_
 
     char num_buf[NUM_BUF_SIZE];
     char char_buf[2];                /* for printing %% and %<unknown> */
+    char buf[5];                     /* for printing %B, %F, and %S */
 
     enum var_type_enum {
             IS_QUAD, IS_LONG, IS_SHORT, IS_INT
@@ -1246,7 +1247,6 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_
                 case 'F':
                 case 'S':
                 {
-                    char buf[5];
                     apr_off_t size = 0;
 
                     if (*fmt == 'B') {

Modified: projects/clang1000-import/contrib/bmake/mk/meta2deps.sh
==============================================================================
--- projects/clang1000-import/contrib/bmake/mk/meta2deps.sh	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/contrib/bmake/mk/meta2deps.sh	Fri Jan 31 19:40:40 2020	(r357350)
@@ -49,7 +49,6 @@
 #	The output, is a set of absolute paths with "SB" like:
 #.nf
 #
-#	$SB/obj-i386/bsd/gnu/lib/csu
 #	$SB/obj-i386/bsd/gnu/lib/libgcc
 #	$SB/obj-i386/bsd/include
 #	$SB/obj-i386/bsd/lib/csu/i386

Modified: projects/clang1000-import/gnu/lib/Makefile
==============================================================================
--- projects/clang1000-import/gnu/lib/Makefile	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/gnu/lib/Makefile	Fri Jan 31 19:40:40 2020	(r357350)
@@ -10,10 +10,6 @@ SUBDIR+=		libgomp
 .endif
 SUBDIR.${MK_TESTS}+=	tests
 
-.if ${MK_BSD_CRTBEGIN} == "no"
-SUBDIR+=		csu
-.endif
-
 .if ${MK_GNU_GREP} != "no" || ${MK_GNU_GREP_COMPAT} != "no" || \
     ${MK_GDB} != "no"
 SUBDIR+=		libregex

Modified: projects/clang1000-import/include/stdio.h
==============================================================================
--- projects/clang1000-import/include/stdio.h	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/include/stdio.h	Fri Jan 31 19:40:40 2020	(r357350)
@@ -346,7 +346,12 @@ int	 putchar_unlocked(int);
 void	 clearerr_unlocked(FILE *);
 int	 feof_unlocked(FILE *);
 int	 ferror_unlocked(FILE *);
+int	 fflush_unlocked(FILE *);
 int	 fileno_unlocked(FILE *);
+int	 fputs_unlocked(const char * __restrict, FILE * __restrict);
+size_t	 fread_unlocked(void * __restrict, size_t, size_t, FILE * __restrict);
+size_t	 fwrite_unlocked(const void * __restrict, size_t, size_t,
+    FILE * __restrict);
 #endif
 
 #if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500
@@ -507,10 +512,11 @@ extern int __isthreaded;
  * See ISO/IEC 9945-1 ANSI/IEEE Std 1003.1 Second Edition 1996-07-12
  * B.8.2.7 for the rationale behind the *_unlocked() macros.
  */
+#define	clearerr_unlocked(p)	__sclearerr(p)
 #define	feof_unlocked(p)	__sfeof(p)
 #define	ferror_unlocked(p)	__sferror(p)
-#define	clearerr_unlocked(p)	__sclearerr(p)
 #define	fileno_unlocked(p)	__sfileno(p)
+#define	fputc_unlocked(s, p)	__sputc(s, p)
 #endif
 #if __POSIX_VISIBLE >= 199506
 #define	getc_unlocked(fp)	__sgetc(fp)

Modified: projects/clang1000-import/lib/csu/Makefile.inc
==============================================================================
--- projects/clang1000-import/lib/csu/Makefile.inc	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/csu/Makefile.inc	Fri Jan 31 19:40:40 2020	(r357350)
@@ -8,7 +8,7 @@ NO_WMISSING_VARIABLE_DECLARATIONS=
 
 .include <src.opts.mk>
 
-.if ${MK_BSD_CRTBEGIN} != "no" && !defined(BUILDING_TESTS)
+.if !defined(BUILDING_TESTS)
 
 OBJS+=	crtbegin.o crtbeginS.o crtbeginT.o
 OBJS+=	crtend.o crtendS.o

Modified: projects/clang1000-import/lib/libc/amd64/string/memcmp.S
==============================================================================
--- projects/clang1000-import/lib/libc/amd64/string/memcmp.S	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/amd64/string/memcmp.S	Fri Jan 31 19:40:40 2020	(r357350)
@@ -45,7 +45,7 @@ ENTRY(memcmp)
 	movq	(%rdi),%r8
 	movq	(%rsi),%r9
 	cmpq	%r8,%r9
-	jne	1f
+	jne	80f
 	movq	-8(%rdi,%rdx),%r8
 	movq	-8(%rsi,%rdx),%r9
 	cmpq	%r8,%r9
@@ -54,34 +54,33 @@ ENTRY(memcmp)
 100408:
 	cmpb	$4,%dl
 	jl	100204f
-	movl	(%rsi),%r8d
-	movl	(%rdi),%r9d
+	movl	(%rdi),%r8d
+	movl	(%rsi),%r9d
 	cmpl	%r8d,%r9d
-	jne	1f
-	movl	-4(%rsi,%rdx),%r8d
-	movl	-4(%rdi,%rdx),%r9d
+	jne	80f
+	movl	-4(%rdi,%rdx),%r8d
+	movl	-4(%rsi,%rdx),%r9d
 	cmpl	%r8d,%r9d
-	jne	1f
+	jne	10040804f
 	ret
 100204:
 	cmpb	$2,%dl
 	jl	100001f
-	movzwl	(%rsi),%r8d
-	movzwl	(%rdi),%r9d
+	movzwl	(%rdi),%r8d
+	movzwl	(%rsi),%r9d
 	cmpl	%r8d,%r9d
 	jne	1f
-	movzwl	-2(%rsi,%rdx),%r8d
-	movzwl	-2(%rdi,%rdx),%r9d
+	movzwl	-2(%rdi,%rdx),%r8d
+	movzwl	-2(%rsi,%rdx),%r9d
 	cmpl	%r8d,%r9d
 	jne	1f
 	ret
 100001:
 	cmpb	$1,%dl
 	jl	100000f
-	movzbl	(%rdi),%r8d
-	movzbl	(%rsi),%r9d
-	cmpb	%r8b,%r9b
-	jne	1f
+	movzbl	(%rdi),%eax
+	movzbl	(%rsi),%r8d
+	subl	%r8d,%eax
 100000:
 	ret
 ALIGN_TEXT
@@ -91,11 +90,11 @@ ALIGN_TEXT
 	movq	(%rdi),%r8
 	movq	(%rsi),%r9
 	cmpq	%r8,%r9
-	jne	1f
+	jne	80f
 	movq	8(%rdi),%r8
 	movq	8(%rsi),%r9
 	cmpq	%r8,%r9
-	jne	 10163208f
+	jne	10163208f
 	movq	-16(%rdi,%rdx),%r8
 	movq	-16(%rsi,%rdx),%r9
 	cmpq	%r8,%r9
@@ -111,14 +110,14 @@ ALIGN_TEXT
 	movq	8(%rdi),%r9
 	subq	(%rsi),%r8
 	subq	8(%rsi),%r9
-	or	%r8,%r9
+	orq	%r8,%r9
 	jnz	10320000f
 
 	movq    16(%rdi),%r8
 	movq    24(%rdi),%r9
 	subq    16(%rsi),%r8
 	subq    24(%rsi),%r9
-	or      %r8,%r9
+	orq	%r8,%r9
 	jnz     10320016f
 
 	leaq	32(%rdi),%rdi
@@ -130,40 +129,57 @@ ALIGN_TEXT
 	jne	10b
 	ret
 
+/*
+ * Mismatch was found.
+ *
+ * Before we compute it we narrow down the range (16 -> 8 -> 4 bytes).
+ */
+ALIGN_TEXT
 10320016:
 	leaq	16(%rdi),%rdi
 	leaq	16(%rsi),%rsi
 10320000:
-/*
- * Mismatch was found within a 16 bytes range. The part of the routine
- * which calculates it only operates on sizes up to 8 bytes. Find the
- * right part.
- */
 	movq	(%rdi),%r8
 	movq	(%rsi),%r9
 	cmpq	%r8,%r9
-	jne	1f
+	jne	80f
 	leaq	8(%rdi),%rdi
 	leaq	8(%rsi),%rsi
-	jmp	1f
+	jmp	80f
+ALIGN_TEXT
+10081608:
 10163224:
 	leaq	-8(%rdi,%rdx),%rdi
 	leaq	-8(%rsi,%rdx),%rsi
-	jmp	1f
+	jmp	80f
+ALIGN_TEXT
 10163216:
 	leaq	-16(%rdi,%rdx),%rdi
 	leaq	-16(%rsi,%rdx),%rsi
-	jmp	1f
+	jmp	80f
+ALIGN_TEXT
 10163208:
-10081608:
 	leaq	8(%rdi),%rdi
 	leaq	8(%rsi),%rsi
+	jmp	80f
+ALIGN_TEXT
+10040804:
+	leaq	-4(%rdi,%rdx),%rdi
+	leaq	-4(%rsi,%rdx),%rsi
 	jmp	1f
 
+ALIGN_TEXT
+80:
+	movl	(%rdi),%r8d
+	movl	(%rsi),%r9d
+	cmpl	%r8d,%r9d
+	jne	1f
+	leaq	4(%rdi),%rdi
+	leaq	4(%rsi),%rsi
+
 /*
- * Mismatch was found. We have no more than 8 bytes to inspect.
+ * We have up to 4 bytes to inspect.
  */
-ALIGN_TEXT
 1:
 	movzbl	(%rdi),%eax
 	movzbl	(%rsi),%r8d
@@ -182,31 +198,6 @@ ALIGN_TEXT
 
 	movzbl	3(%rdi),%eax
 	movzbl	3(%rsi),%r8d
-	cmpb	%r8b,%al
-	jne	2f
-
-	movzbl	4(%rdi),%eax
-	movzbl	4(%rsi),%r8d
-	cmpb	%r8b,%al
-	jne	2f
-
-	movzbl	5(%rdi),%eax
-	movzbl	5(%rsi),%r8d
-	cmpb	%r8b,%al
-	jne	2f
-
-	movzbl	6(%rdi),%eax
-	movzbl	6(%rsi),%r8d
-	cmpb	%r8b,%al
-	jne	2f
-
-	movzbl	7(%rdi),%eax
-	movzbl	7(%rsi),%r8d
-	cmpb	%r8b,%al
-	jne	2f
-
-	xorl	%eax,%eax
-	ret
 2:
 	subl	%r8d,%eax
 	ret

Modified: projects/clang1000-import/lib/libc/stdio/Makefile.inc
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/Makefile.inc	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/Makefile.inc	Fri Jan 31 19:40:40 2020	(r357350)
@@ -48,13 +48,17 @@ MLINKS+=ferror.3 ferror_unlocked.3 \
 	ferror.3 clearerr.3 ferror.3 clearerr_unlocked.3 \
 	ferror.3 feof.3 ferror.3 feof_unlocked.3 \
 	ferror.3 fileno.3 ferror.3 fileno_unlocked.3
-MLINKS+=fflush.3 fpurge.3
+MLINKS+=fflush.3 fflush_unlocked.3 \
+	fflush.3 fpurge.3
 MLINKS+=fgets.3 gets.3
 MLINKS+=fgets.3 gets_s.3
 MLINKS+=flockfile.3 ftrylockfile.3 flockfile.3 funlockfile.3
 MLINKS+=fopen.3 fdopen.3 fopen.3 freopen.3 fopen.3 fmemopen.3
-MLINKS+=fputs.3 puts.3
-MLINKS+=fread.3 fwrite.3
+MLINKS+=fputs.3 fputs_unlocked.3 \
+	fputs.3 puts.3
+MLINKS+=fread.3 fread_unlocked.3 \
+	fread.3 fwrite.3 \
+	fread.3 fwrite_unlocked.3
 MLINKS+=fseek.3 fgetpos.3 fseek.3 fseeko.3 fseek.3 fsetpos.3 fseek.3 ftell.3 \
 	fseek.3 ftello.3 fseek.3 rewind.3
 MLINKS+=funopen.3 fropen.3 funopen.3 fwopen.3

Modified: projects/clang1000-import/lib/libc/stdio/Symbol.map
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/Symbol.map	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/Symbol.map	Fri Jan 31 19:40:40 2020	(r357350)
@@ -172,6 +172,10 @@ FBSD_1.5 {
 };
 
 FBSD_1.6 {
+	fflush_unlocked;
+	fputs_unlocked;
+	fread_unlocked;
+	fwrite_unlocked;
 	mkostempsat;
 };
 

Modified: projects/clang1000-import/lib/libc/stdio/fflush.3
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fflush.3	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fflush.3	Fri Jan 31 19:40:40 2020	(r357350)
@@ -32,11 +32,12 @@
 .\"     @(#)fflush.3	8.1 (Berkeley) 6/4/93
 .\" $FreeBSD$
 .\"
-.Dd December 25, 2017
+.Dd January 23, 2020
 .Dt FFLUSH 3
 .Os
 .Sh NAME
 .Nm fflush ,
+.Nm fflush_unlocked ,
 .Nm fpurge
 .Nd flush a stream
 .Sh LIBRARY
@@ -46,6 +47,8 @@
 .Ft int
 .Fn fflush "FILE *stream"
 .Ft int
+.Fn fflush_unlocked "FILE *stream"
+.Ft int
 .Fn fpurge "FILE *stream"
 .Sh DESCRIPTION
 The function
@@ -63,6 +66,16 @@ argument is
 flushes
 .Em all
 open output streams.
+.Pp
+The
+.Fn fflush_unlocked
+function is equivalent to
+.Fn fflush ,
+except that the caller is responsible for locking the stream with
+.Xr flockfile 3
+before calling it.
+This function may be used to avoid the overhead of locking the stream and to
+prevent races when multiple threads are operating on the same stream.
 .Pp
 The function
 .Fn fpurge

Modified: projects/clang1000-import/lib/libc/stdio/fflush.c
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fflush.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fflush.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -100,6 +100,8 @@ __fflush(FILE *fp)
 	return (retval);
 }
 
+__weak_reference(__fflush, fflush_unlocked);
+
 int
 __sflush(FILE *fp)
 {

Modified: projects/clang1000-import/lib/libc/stdio/fputc.c
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fputc.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fputc.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -44,6 +44,8 @@ __FBSDID("$FreeBSD$");
 #include "local.h"
 #include "libc_private.h"
 
+#undef fputc_unlocked
+
 int
 fputc(int c, FILE *fp)
 {

Modified: projects/clang1000-import/lib/libc/stdio/fputs.3
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fputs.3	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fputs.3	Fri Jan 31 19:40:40 2020	(r357350)
@@ -32,11 +32,12 @@
 .\"     @(#)fputs.3	8.1 (Berkeley) 6/4/93
 .\" $FreeBSD$
 .\"
-.Dd June 4, 1993
+.Dd January 23, 2020
 .Dt FPUTS 3
 .Os
 .Sh NAME
 .Nm fputs ,
+.Nm fputs_unlocked ,
 .Nm puts
 .Nd output a line to a stream
 .Sh LIBRARY
@@ -46,6 +47,8 @@
 .Ft int
 .Fn fputs "const char *str" "FILE *stream"
 .Ft int
+.Fn fputs_unlocked "const char *str" "FILE *stream"
+.Ft int
 .Fn puts "const char *str"
 .Sh DESCRIPTION
 The function
@@ -57,6 +60,16 @@ to the stream pointed to by
 .\" The terminating
 .\" .Dv NUL
 .\" character is not written.
+.Pp
+The
+.Fn fputs_unlocked
+function is equivalent to
+.Fn fputs ,
+except that the caller is responsible for locking the stream with
+.Xr flockfile 3
+before calling it.
+This function may be used to avoid the overhead of locking the stream and to
+prevent races when multiple threads are operating on the same stream.
 .Pp
 The function
 .Fn puts

Modified: projects/clang1000-import/lib/libc/stdio/fputs.c
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fputs.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fputs.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -51,7 +51,7 @@ __FBSDID("$FreeBSD$");
  * Write the given string to the given file.
  */
 int
-fputs(const char * __restrict s, FILE * __restrict fp)
+fputs_unlocked(const char * __restrict s, FILE * __restrict fp)
 {
 	int retval;
 	struct __suio uio;
@@ -61,11 +61,20 @@ fputs(const char * __restrict s, FILE * __restrict fp)
 	uio.uio_resid = iov.iov_len = strlen(s);
 	uio.uio_iov = &iov;
 	uio.uio_iovcnt = 1;
-	FLOCKFILE_CANCELSAFE(fp);
 	ORIENT(fp, -1);
 	retval = __sfvwrite(fp, &uio);
-	FUNLOCKFILE_CANCELSAFE();
 	if (retval == 0)
 		return (iov.iov_len > INT_MAX ? INT_MAX : iov.iov_len);
+	return (retval);
+}
+
+int
+fputs(const char * __restrict s, FILE * __restrict fp)
+{
+	int retval;
+
+	FLOCKFILE_CANCELSAFE(fp);
+	retval = fputs_unlocked(s, fp);
+	FUNLOCKFILE_CANCELSAFE();
 	return (retval);
 }

Modified: projects/clang1000-import/lib/libc/stdio/fread.3
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fread.3	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fread.3	Fri Jan 31 19:40:40 2020	(r357350)
@@ -32,12 +32,14 @@
 .\"     @(#)fread.3	8.2 (Berkeley) 3/8/94
 .\" $FreeBSD$
 .\"
-.Dd March 8, 1994
+.Dd January 23, 2020
 .Dt FREAD 3
 .Os
 .Sh NAME
 .Nm fread ,
-.Nm fwrite
+.Nm fread_unlocked ,
+.Nm fwrite ,
+.Nm fwrite_unlocked
 .Nd binary stream input/output
 .Sh LIBRARY
 .Lb libc
@@ -46,7 +48,11 @@
 .Ft size_t
 .Fn fread "void * restrict ptr" "size_t size" "size_t nmemb" "FILE * restrict stream"
 .Ft size_t
+.Fn fread_unlocked "void * restrict ptr" "size_t size" "size_t nmemb" "FILE * restrict stream"
+.Ft size_t
 .Fn fwrite "const void * restrict ptr" "size_t size" "size_t nmemb" "FILE * restrict stream"
+.Ft size_t
+.Fn fwrite_unlocked "const void * restrict ptr" "size_t size" "size_t nmemb" "FILE * restrict stream"
 .Sh DESCRIPTION
 The function
 .Fn fread
@@ -69,6 +75,21 @@ bytes long, to the stream pointed to by
 .Fa stream ,
 obtaining them from the location given by
 .Fa ptr .
+.Pp
+The
+.Fn fread_unlocked
+and
+.Fn fwrite_unlocked
+functions are equivalent to
+.Fn fread
+and
+.Fn fwrite
+respectively, except that the caller is responsible for locking the stream
+with
+.Xr flockfile 3
+before calling them.
+These functions may be used to avoid the overhead of locking the stream
+and to prevent races when multiple threads are operating on the same stream.
 .Sh RETURN VALUES
 The functions
 .Fn fread

Modified: projects/clang1000-import/lib/libc/stdio/fread.c
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fread.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fread.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -115,3 +115,5 @@ __fread(void * __restrict buf, size_t size, size_t cou
 	fp->_p += resid;
 	return (count);
 }
+
+__weak_reference(__fread, fread_unlocked);

Modified: projects/clang1000-import/lib/libc/stdio/fwrite.c
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/fwrite.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/fwrite.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -52,7 +52,8 @@ __FBSDID("$FreeBSD$");
  * Return the number of whole objects written.
  */
 size_t
-fwrite(const void * __restrict buf, size_t size, size_t count, FILE * __restrict fp)
+fwrite_unlocked(const void * __restrict buf, size_t size, size_t count,
+    FILE * __restrict fp)
 {
 	size_t n;
 	struct __suio uio;
@@ -84,7 +85,6 @@ fwrite(const void * __restrict buf, size_t size, size_
 	uio.uio_iov = &iov;
 	uio.uio_iovcnt = 1;
 
-	FLOCKFILE_CANCELSAFE(fp);
 	ORIENT(fp, -1);
 	/*
 	 * The usual case is success (__sfvwrite returns 0);
@@ -93,6 +93,17 @@ fwrite(const void * __restrict buf, size_t size, size_
 	 */
 	if (__sfvwrite(fp, &uio) != 0)
 	    count = (n - uio.uio_resid) / size;
-	FUNLOCKFILE_CANCELSAFE();
 	return (count);
+}
+
+size_t
+fwrite(const void * __restrict buf, size_t size, size_t count,
+    FILE * __restrict fp)
+{
+	size_t n;
+
+	FLOCKFILE_CANCELSAFE(fp);
+	n = fwrite_unlocked(buf, size, count, fp);
+	FUNLOCKFILE_CANCELSAFE();
+	return (n);
 }

Modified: projects/clang1000-import/lib/libc/stdio/putc.3
==============================================================================
--- projects/clang1000-import/lib/libc/stdio/putc.3	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libc/stdio/putc.3	Fri Jan 31 19:40:40 2020	(r357350)
@@ -32,11 +32,12 @@
 .\"     @(#)putc.3	8.1 (Berkeley) 6/4/93
 .\" $FreeBSD$
 .\"
-.Dd January 10, 2003
+.Dd January 23, 2020
 .Dt PUTC 3
 .Os
 .Sh NAME
 .Nm fputc ,
+.Nm fputc_unlocked ,
 .Nm putc ,
 .Nm putc_unlocked ,
 .Nm putchar ,
@@ -50,6 +51,8 @@
 .Ft int
 .Fn fputc "int c" "FILE *stream"
 .Ft int
+.Fn fputc_unlocked "int c" "FILE *stream"
+.Ft int
 .Fn putc "int c" "FILE *stream"
 .Ft int
 .Fn putc_unlocked "int c" "FILE *stream"
@@ -97,11 +100,13 @@ to the named output
 .Fa stream .
 .Pp
 The
-.Fn putc_unlocked
+.Fn fputc_unlocked ,
+.Fn putc_unlocked ,
 and
 .Fn putchar_unlocked
 functions are equivalent to
-.Fn putc
+.Fn fputc ,
+.Fn putc ,
 and
 .Fn putchar
 respectively,

Modified: projects/clang1000-import/lib/libusb/libusb10_hotplug.c
==============================================================================
--- projects/clang1000-import/lib/libusb/libusb10_hotplug.c	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/lib/libusb/libusb10_hotplug.c	Fri Jan 31 19:40:40 2020	(r357350)
@@ -123,8 +123,10 @@ libusb_hotplug_scan(void *arg)
 		TAILQ_INIT(&hotplug_devs);
 
 		if (ctx->hotplug_handler != NO_THREAD) {
-			if (libusb_hotplug_enumerate(ctx, &hotplug_devs) < 0)
+			if (libusb_hotplug_enumerate(ctx, &hotplug_devs) < 0) {
+				HOTPLUG_UNLOCK(ctx);
 				continue;
+			}
 		} else {
 			do_loop = 0;
 		}

Modified: projects/clang1000-import/release/arm64/RPI3.conf
==============================================================================
--- projects/clang1000-import/release/arm64/RPI3.conf	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/release/arm64/RPI3.conf	Fri Jan 31 19:40:40 2020	(r357350)
@@ -25,7 +25,9 @@ arm_install_uboot() {
 	UBOOT_FILES="README u-boot.bin"
 	DTB_FILES="armstub8.bin armstub8-gic.bin bootcode.bin fixup_cd.dat \
 		fixup_db.dat fixup_x.dat fixup.dat LICENCE.broadcom \
-		start_cd.elf start_db.elf start_x.elf start.elf ${DTB}"
+		start_cd.elf start_db.elf start_x.elf start.elf \
+		fixup4.dat fixup4cd.dat fixup4db.dat fixup4x.dat start4.elf \
+		start4cd.elf start4db.elf start4x.elf ${DTB}"
 	FATMOUNT="${DESTDIR%${KERNEL}}fat"
 	chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}"
 	chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}

Modified: projects/clang1000-import/release/packages/binutils.ucl
==============================================================================
--- projects/clang1000-import/release/packages/binutils.ucl	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/release/packages/binutils.ucl	Fri Jan 31 19:40:40 2020	(r357350)
@@ -15,10 +15,4 @@ licenses = [ GPLv2 ]
 desc = <<EOD
 %DESC%
 EOD
-deps: {
-    FreeBSD-%PKGDEPS%: {
-        origin: "base",
-        version: "%VERSION%"
-    }
-}
 

Modified: projects/clang1000-import/release/packages/caroot.ucl
==============================================================================
--- projects/clang1000-import/release/packages/caroot.ucl	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/release/packages/caroot.ucl	Fri Jan 31 19:40:40 2020	(r357350)
@@ -15,12 +15,6 @@ licenses = [ BSD2CLAUSE ]
 desc = <<EOD
 %DESC%
 EOD
-deps: {
-    FreeBSD-%PKGDEPS%: {
-        origin: "base",
-        version: "%VERSION%"
-    }
-}
 scripts: {
 	# XXX If pkg picks up a mechanism to detect in the post-install script
 	# files being added or removed, we should use it instead to gate the

Modified: projects/clang1000-import/release/packages/clang.ucl
==============================================================================
--- projects/clang1000-import/release/packages/clang.ucl	Fri Jan 31 19:36:14 2020	(r357349)
+++ projects/clang1000-import/release/packages/clang.ucl	Fri Jan 31 19:40:40 2020	(r357350)
@@ -15,10 +15,4 @@ licenses = [ NCSA ]

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001311940.00VJeeum059351>