From owner-svn-src-projects@freebsd.org Fri Jan 31 19:40:46 2020 Return-Path: Delivered-To: svn-src-projects@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2C8EB1EA99F for ; Fri, 31 Jan 2020 19:40:46 +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.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 488SHy0rrfz4868; Fri, 31 Jan 2020 19:40:46 +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 183791B021; Fri, 31 Jan 2020 19:40:46 +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 00VJejNa059375; Fri, 31 Jan 2020 19:40:45 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 00VJeeum059351; Fri, 31 Jan 2020 19:40:40 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202001311940.00VJeeum059351@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Fri, 31 Jan 2020 19:40:40 +0000 (UTC) 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... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: 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/arm64 release/packages shar... X-SVN-Commit-Revision: 357350 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.29 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, 31 Jan 2020 19:40:46 -0000 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 +#include -#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 % */ + 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 -.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 = <