Date: Fri, 19 May 2017 21:20:02 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r318561 - in projects/clang500-import: bin/sh cddl/contrib/opensolaris/lib/libzpool/common cddl/usr.sbin/dtrace/tests/tools contrib/netbsd-tests/fs/tmpfs etc etc/cron.d etc/mtree lib/li... Message-ID: <201705192120.v4JLK2Ue029340@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Fri May 19 21:20:01 2017 New Revision: 318561 URL: https://svnweb.freebsd.org/changeset/base/318561 Log: Merge ^/head r318380 through r318559. Added: projects/clang500-import/etc/cron.d/ - copied from r318559, head/etc/cron.d/ projects/clang500-import/lib/libc/tests/gen/realpath2_test.c - copied unchanged from r318559, head/lib/libc/tests/gen/realpath2_test.c projects/clang500-import/share/man/man4/ccr.4 - copied unchanged from r318559, head/share/man/man4/ccr.4 projects/clang500-import/sys/dev/cxgbe/crypto/ - copied from r318559, head/sys/dev/cxgbe/crypto/ projects/clang500-import/sys/dev/mpr/mpi/mpi2_pci.h - copied unchanged from r318559, head/sys/dev/mpr/mpi/mpi2_pci.h projects/clang500-import/sys/modules/cxgbe/ccr/ - copied from r318559, head/sys/modules/cxgbe/ccr/ projects/clang500-import/usr.bin/getconf/tests/ - copied from r318559, head/usr.bin/getconf/tests/ projects/clang500-import/usr.bin/indent/tests/binary.0 - copied unchanged from r318559, head/usr.bin/indent/tests/binary.0 projects/clang500-import/usr.bin/indent/tests/binary.0.stdout - copied unchanged from r318559, head/usr.bin/indent/tests/binary.0.stdout Modified: projects/clang500-import/bin/sh/eval.c projects/clang500-import/bin/sh/output.c projects/clang500-import/bin/sh/output.h projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh projects/clang500-import/etc/Makefile projects/clang500-import/etc/crontab projects/clang500-import/etc/mtree/BSD.tests.dist projects/clang500-import/lib/libc/stdlib/qsort.c projects/clang500-import/lib/libc/tests/gen/Makefile projects/clang500-import/lib/libthr/thread/thr_attr.c projects/clang500-import/lib/libthr/thread/thr_exit.c projects/clang500-import/lib/libthr/thread/thr_sig.c projects/clang500-import/lib/libthr/thread/thr_spec.c projects/clang500-import/lib/libthr/thread/thr_stack.c projects/clang500-import/lib/libthr/thread/thr_symbols.c projects/clang500-import/lib/libthr/thread/thr_umtx.c projects/clang500-import/lib/libthr/thread/thr_umtx.h projects/clang500-import/libexec/rtld-elf/rtld.1 projects/clang500-import/libexec/rtld-elf/rtld.c projects/clang500-import/sbin/ipfw/tables.c projects/clang500-import/share/man/man4/Makefile projects/clang500-import/share/man/man4/cxgbe.4 projects/clang500-import/share/man/man4/mpr.4 projects/clang500-import/share/man/man7/arch.7 projects/clang500-import/share/man/man9/Makefile projects/clang500-import/share/man/man9/sglist.9 projects/clang500-import/sys/amd64/amd64/sys_machdep.c projects/clang500-import/sys/amd64/amd64/vm_machdep.c projects/clang500-import/sys/amd64/include/vmparam.h projects/clang500-import/sys/arm/arm/sys_machdep.c projects/clang500-import/sys/arm/arm/vm_machdep.c projects/clang500-import/sys/arm/include/atomic-v4.h projects/clang500-import/sys/arm/include/vmparam.h projects/clang500-import/sys/arm/mv/armada38x/armada38x_mp.c projects/clang500-import/sys/arm/mv/mpic.c projects/clang500-import/sys/arm/mv/mv_common.c projects/clang500-import/sys/arm/mv/mvwin.h projects/clang500-import/sys/boot/fdt/dts/arm/armada-38x.dtsi projects/clang500-import/sys/compat/linuxkpi/common/src/linux_compat.c projects/clang500-import/sys/conf/NOTES projects/clang500-import/sys/conf/files projects/clang500-import/sys/crypto/des/des_enc.c projects/clang500-import/sys/crypto/des/des_setkey.c projects/clang500-import/sys/ddb/db_access.c projects/clang500-import/sys/ddb/db_output.c projects/clang500-import/sys/ddb/db_sym.c projects/clang500-import/sys/dev/cesa/cesa.c projects/clang500-import/sys/dev/cesa/cesa.h projects/clang500-import/sys/dev/cs/if_cs.c projects/clang500-import/sys/dev/cxgbe/adapter.h projects/clang500-import/sys/dev/cxgbe/t4_main.c projects/clang500-import/sys/dev/drm2/ttm/ttm_bo_vm.c projects/clang500-import/sys/dev/drm2/ttm/ttm_page_alloc.c projects/clang500-import/sys/dev/etherswitch/e6000sw/e6000sw.c projects/clang500-import/sys/dev/etherswitch/e6000sw/e6000swreg.h projects/clang500-import/sys/dev/ixgb/if_ixgb.c projects/clang500-import/sys/dev/lge/if_lge.c projects/clang500-import/sys/dev/mlx4/mlx4_core/mlx4_eq.c projects/clang500-import/sys/dev/mlx4/mlx4_core/mlx4_main.c projects/clang500-import/sys/dev/mpr/mpi/mpi2.h projects/clang500-import/sys/dev/mpr/mpi/mpi2_cnfg.h projects/clang500-import/sys/dev/mpr/mpi/mpi2_hbd.h projects/clang500-import/sys/dev/mpr/mpi/mpi2_history.txt projects/clang500-import/sys/dev/mpr/mpi/mpi2_init.h projects/clang500-import/sys/dev/mpr/mpi/mpi2_ioc.h projects/clang500-import/sys/dev/mpr/mpi/mpi2_tool.h projects/clang500-import/sys/dev/mpr/mpr.c projects/clang500-import/sys/dev/mpr/mpr_config.c projects/clang500-import/sys/dev/mpr/mpr_mapping.c projects/clang500-import/sys/dev/mpr/mpr_mapping.h projects/clang500-import/sys/dev/mpr/mpr_pci.c projects/clang500-import/sys/dev/mpr/mpr_sas.c projects/clang500-import/sys/dev/mpr/mpr_sas.h projects/clang500-import/sys/dev/mpr/mpr_sas_lsi.c projects/clang500-import/sys/dev/mpr/mpr_table.c projects/clang500-import/sys/dev/mpr/mpr_table.h projects/clang500-import/sys/dev/mpr/mpr_user.c projects/clang500-import/sys/dev/mpr/mprvar.h projects/clang500-import/sys/dev/mse/mse_isa.c projects/clang500-import/sys/dev/my/if_my.c projects/clang500-import/sys/dev/pcn/if_pcn.c projects/clang500-import/sys/dev/ppbus/immio.c projects/clang500-import/sys/dev/ppbus/vpoio.c projects/clang500-import/sys/dev/ppc/ppc.c projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_def.h projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_ioctl.c projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_os.c projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_os.h projects/clang500-import/sys/dev/qlxgb/qla_os.c projects/clang500-import/sys/dev/qlxgbe/ql_os.c projects/clang500-import/sys/dev/qlxge/qls_os.c projects/clang500-import/sys/dev/rl/if_rl.c projects/clang500-import/sys/dev/sound/pci/fm801.c projects/clang500-import/sys/dev/speaker/spkr.c projects/clang500-import/sys/dev/tl/if_tl.c projects/clang500-import/sys/dev/tws/tws.h projects/clang500-import/sys/dev/usb/usb_busdma.c projects/clang500-import/sys/dev/wb/if_wb.c projects/clang500-import/sys/dev/xen/blkfront/blkfront.c projects/clang500-import/sys/dev/xen/netfront/netfront.c projects/clang500-import/sys/dev/xl/if_xl.c projects/clang500-import/sys/fs/fifofs/fifo_vnops.c projects/clang500-import/sys/fs/msdosfs/bootsect.h projects/clang500-import/sys/fs/msdosfs/bpb.h projects/clang500-import/sys/fs/msdosfs/denode.h projects/clang500-import/sys/fs/msdosfs/direntry.h projects/clang500-import/sys/fs/msdosfs/msdosfs_conv.c projects/clang500-import/sys/fs/msdosfs/msdosfs_fat.c projects/clang500-import/sys/fs/msdosfs/msdosfs_lookup.c projects/clang500-import/sys/fs/msdosfs/msdosfs_vfsops.c projects/clang500-import/sys/fs/msdosfs/msdosfsmount.h projects/clang500-import/sys/fs/nandfs/nandfs_vnops.c projects/clang500-import/sys/geom/geom_vfs.c projects/clang500-import/sys/i386/i386/in_cksum.c projects/clang500-import/sys/i386/i386/k6_mem.c projects/clang500-import/sys/i386/i386/sys_machdep.c projects/clang500-import/sys/i386/i386/vm_machdep.c projects/clang500-import/sys/i386/ibcs2/ibcs2_misc.c projects/clang500-import/sys/i386/ibcs2/ibcs2_other.c projects/clang500-import/sys/i386/ibcs2/ibcs2_signal.c projects/clang500-import/sys/i386/ibcs2/ibcs2_socksys.c projects/clang500-import/sys/i386/isa/ccbque.h projects/clang500-import/sys/i386/isa/elink.c projects/clang500-import/sys/kern/inflate.c projects/clang500-import/sys/kern/kern_clock.c projects/clang500-import/sys/kern/kern_exec.c projects/clang500-import/sys/kern/kern_fail.c projects/clang500-import/sys/kern/kern_prot.c projects/clang500-import/sys/kern/kern_resource.c projects/clang500-import/sys/kern/kern_sig.c projects/clang500-import/sys/kern/kern_timeout.c projects/clang500-import/sys/kern/kern_xxx.c projects/clang500-import/sys/kern/sched_4bsd.c projects/clang500-import/sys/kern/subr_sglist.c projects/clang500-import/sys/kern/sysv_msg.c projects/clang500-import/sys/kern/vfs_export.c projects/clang500-import/sys/kern/vfs_mount.c projects/clang500-import/sys/kern/vfs_syscalls.c projects/clang500-import/sys/kern/vfs_vnops.c projects/clang500-import/sys/libkern/qsort.c projects/clang500-import/sys/libkern/zlib.c projects/clang500-import/sys/mips/cavium/cryptocteon/cavium_crypto.c projects/clang500-import/sys/mips/mips/vm_machdep.c projects/clang500-import/sys/modules/cxgbe/Makefile projects/clang500-import/sys/modules/dtrace/dtaudit/Makefile projects/clang500-import/sys/modules/ipsec/Makefile projects/clang500-import/sys/modules/qlnx/qlnxe/Makefile projects/clang500-import/sys/net/altq/altq_rio.c projects/clang500-import/sys/net/altq/altq_rmclass.h projects/clang500-import/sys/net/bpf_filter.c projects/clang500-import/sys/net/ethernet.h projects/clang500-import/sys/net/if_llatbl.c projects/clang500-import/sys/net/if_media.c projects/clang500-import/sys/net/slcompress.c projects/clang500-import/sys/net80211/ieee80211_radiotap.h projects/clang500-import/sys/netinet/in.c projects/clang500-import/sys/netinet/in_cksum.c projects/clang500-import/sys/netinet/ip_divert.c projects/clang500-import/sys/netinet/ip_icmp.c projects/clang500-import/sys/netinet6/in6_pcb.c projects/clang500-import/sys/netinet6/raw_ip6.c projects/clang500-import/sys/netipsec/ipsec_mbuf.c projects/clang500-import/sys/netpfil/ipfw/dn_aqm_pie.c projects/clang500-import/sys/netpfil/ipfw/dn_sched_fq_pie.c projects/clang500-import/sys/powerpc/conf/NOTES projects/clang500-import/sys/rpc/clnt.h projects/clang500-import/sys/sys/sglist.h projects/clang500-import/tests/sys/fs/tmpfs/Makefile projects/clang500-import/usr.bin/getconf/Makefile projects/clang500-import/usr.bin/indent/lexi.c projects/clang500-import/usr.bin/indent/tests/Makefile projects/clang500-import/usr.bin/resizewin/resizewin.1 projects/clang500-import/usr.bin/top/top.local.1 projects/clang500-import/usr.sbin/devctl/devctl.8 projects/clang500-import/usr.sbin/makefs/ffs.c projects/clang500-import/usr.sbin/makefs/ffs.h projects/clang500-import/usr.sbin/makefs/ffs/ffs_alloc.c projects/clang500-import/usr.sbin/makefs/ffs/ffs_balloc.c projects/clang500-import/usr.sbin/makefs/ffs/ffs_bswap.c projects/clang500-import/usr.sbin/makefs/ffs/mkfs.c projects/clang500-import/usr.sbin/makefs/makefs.8 projects/clang500-import/usr.sbin/makefs/mtree.c Directory Properties: projects/clang500-import/ (props changed) projects/clang500-import/cddl/ (props changed) projects/clang500-import/cddl/contrib/opensolaris/ (props changed) projects/clang500-import/contrib/netbsd-tests/ (props changed) Modified: projects/clang500-import/bin/sh/eval.c ============================================================================== --- projects/clang500-import/bin/sh/eval.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/bin/sh/eval.c Fri May 19 21:20:01 2017 (r318561) @@ -1080,9 +1080,7 @@ evalcommand(union node *cmd, int flags, #endif mode = (cmdentry.u.index == EXECCMD)? 0 : REDIR_PUSH; if (flags == EV_BACKCMD) { - memout.nleft = 0; memout.nextc = memout.buf; - memout.bufsize = 64; mode |= REDIR_BACKQ; } savecmdname = commandname; @@ -1134,8 +1132,12 @@ cmddone: exitshell(exitstatus); if (flags == EV_BACKCMD) { backcmd->buf = memout.buf; - backcmd->nleft = memout.nextc - memout.buf; + backcmd->nleft = memout.buf != NULL ? + memout.nextc - memout.buf : 0; memout.buf = NULL; + memout.nextc = NULL; + memout.bufend = NULL; + memout.bufsize = 64; } if (cmdentry.u.index != EXECCMD) popredir(); Modified: projects/clang500-import/bin/sh/output.c ============================================================================== --- projects/clang500-import/bin/sh/output.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/bin/sh/output.c Fri May 19 21:20:01 2017 (r318561) @@ -71,9 +71,9 @@ __FBSDID("$FreeBSD$"); static int doformat_wr(void *, const char *, int); -struct output output = {NULL, 0, NULL, OUTBUFSIZ, 1, 0}; -struct output errout = {NULL, 0, NULL, 256, 2, 0}; -struct output memout = {NULL, 0, NULL, 0, MEM_OUT, 0}; +struct output output = {NULL, NULL, NULL, OUTBUFSIZ, 1, 0}; +struct output errout = {NULL, NULL, NULL, 256, 2, 0}; +struct output memout = {NULL, NULL, NULL, 64, MEM_OUT, 0}; struct output *out1 = &output; struct output *out2 = &errout; @@ -208,26 +208,26 @@ outbin(const void *data, size_t len, str void emptyoutbuf(struct output *dest) { - int offset; + int offset, newsize; if (dest->buf == NULL) { INTOFF; dest->buf = ckmalloc(dest->bufsize); dest->nextc = dest->buf; - dest->nleft = dest->bufsize; + dest->bufend = dest->buf + dest->bufsize; INTON; } else if (dest->fd == MEM_OUT) { - offset = dest->bufsize; + offset = dest->nextc - dest->buf; + newsize = dest->bufsize << 1; INTOFF; - dest->bufsize <<= 1; - dest->buf = ckrealloc(dest->buf, dest->bufsize); - dest->nleft = dest->bufsize - offset; + dest->buf = ckrealloc(dest->buf, newsize); + dest->bufsize = newsize; + dest->bufend = dest->buf + newsize; dest->nextc = dest->buf + offset; INTON; } else { flushout(dest); } - dest->nleft--; } @@ -248,20 +248,13 @@ flushout(struct output *dest) if (xwrite(dest->fd, dest->buf, dest->nextc - dest->buf) < 0) dest->flags |= OUTPUT_ERR; dest->nextc = dest->buf; - dest->nleft = dest->bufsize; } void freestdout(void) { - INTOFF; - if (output.buf) { - ckfree(output.buf); - output.buf = NULL; - output.nleft = 0; - } - INTON; + output.nextc = output.buf; } Modified: projects/clang500-import/bin/sh/output.h ============================================================================== --- projects/clang500-import/bin/sh/output.h Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/bin/sh/output.h Fri May 19 21:20:01 2017 (r318561) @@ -40,7 +40,7 @@ struct output { char *nextc; - int nleft; + char *bufend; char *buf; int bufsize; short fd; @@ -75,7 +75,7 @@ void fmtstr(char *, int, const char *, . void doformat(struct output *, const char *, va_list) __printflike(2, 0); int xwrite(int, const char *, int); -#define outc(c, file) (--(file)->nleft < 0? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c))) +#define outc(c, file) ((file)->nextc == (file)->bufend ? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c))) #define out1c(c) outc(c, out1); #define out2c(c) outcslow(c, out2); Modified: projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c ============================================================================== --- projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Fri May 19 21:20:01 2017 (r318561) @@ -368,7 +368,7 @@ cv_timedwait_hires(kcondvar_t *cv, kmute int flag) { int error; - timestruc_t ts; + timespec_t ts; hrtime_t delta; ASSERT(flag == 0 || flag == CALLOUT_FLAG_ABSOLUTE); @@ -381,8 +381,13 @@ top: if (delta <= 0) return (-1); - ts.tv_sec = delta / NANOSEC; - ts.tv_nsec = delta % NANOSEC; + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += delta / NANOSEC; + ts.tv_nsec += delta % NANOSEC; + if (ts.tv_nsec >= NANOSEC) { + ts.tv_sec++; + ts.tv_nsec -= NANOSEC; + } ASSERT(mutex_owner(mp) == curthread); mp->m_owner = NULL; Modified: projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh ============================================================================== --- projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh Fri May 19 21:20:01 2017 (r318561) @@ -139,11 +139,6 @@ exclude EXFAIL common/pid/tst.newprobes. exclude EXFAIL common/pid/tst.provregex2.ksh exclude EXFAIL common/pid/tst.provregex4.ksh -# libproc doesn't properly handle probe sites that correspond to multiple -# symbols. -exclude EXFAIL common/pid/tst.weak1.d -exclude EXFAIL common/pid/tst.weak2.d - # This test checks for a leading tab on a line before #define. That is illegal # on Solaris, but the clang pre-processor on FreeBSD is happy with code like # that. Modified: projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh ============================================================================== --- projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh Fri May 19 21:20:01 2017 (r318561) @@ -28,6 +28,10 @@ # Verifies that vnd works with files stored in tmpfs. # +# Begin FreeBSD +MD_DEVICE_FILE=md.device +# End FreeBSD + atf_test_case basic cleanup basic_head() { atf_set "descr" "Verifies that vnd works with files stored in tmpfs" @@ -41,7 +45,10 @@ basic_body() { # Begin FreeBSD if true; then atf_check -s eq:0 -o empty -e empty mkdir mnt - atf_check -s eq:0 -o empty -e empty mdmfs -F disk.img md3 mnt + atf_check -s eq:0 -o empty -e empty mdmfs -F disk.img md mnt + md_dev=$(df mnt | awk 'NR != 1 { print $1 }' | xargs basename) + atf_check test -c /dev/$md_dev # Sanity check + echo -n $md_dev > $TMPDIR/$MD_DEVICE_FILE else # End FreeBSD atf_check -s eq:0 -o empty -e empty vndconfig /dev/vnd3 disk.img @@ -67,31 +74,23 @@ basic_body() { done atf_check -s eq:0 -o empty -e empty umount mnt - # Begin FreeBSD - if true; then - atf_check -s eq:0 -o empty -e empty mdconfig -d -u 3 - else - # End FreeBSD atf_check -s eq:0 -o empty -e empty vndconfig -u /dev/vnd3 - # Begin FreeBSD - fi - # End FreeBSD test_unmount touch done } basic_cleanup() { + # Begin FreeBSD + if md_dev=$(cat $TMPDIR/$MD_DEVICE_FILE); then + echo "Will try disconnecting $md_dev" + else + echo "$MD_DEVICE_FILE doesn't exist in $TMPDIR; returning early" + return 0 + fi + # End FreeBSD if [ ! -f done ]; then umount mnt 2>/dev/null 1>&2 - # Begin FreeBSD - if true; then - [ ! -c /dev/md3 ] || mdconfig -d -u 3 - else - # End FreeBSD vndconfig -u /dev/vnd3 2>/dev/null 1>&2 - # Begin FreeBSD - fi - # End FreeBSD fi } Modified: projects/clang500-import/etc/Makefile ============================================================================== --- projects/clang500-import/etc/Makefile Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/etc/Makefile Fri May 19 21:20:01 2017 (r318561) @@ -7,9 +7,6 @@ FILESGROUPS= FILES # No need as it is empty and just causes rebuilds since this file does so much. UPDATE_DEPENDFILE= no -SUBDIR= \ - newsyslog.conf.d \ - syslog.d .if ${MK_SENDMAIL} != "no" SUBDIR+=sendmail @@ -253,9 +250,11 @@ distribution: .if ${MK_CASPER} != "no" ${_+_}cd ${.CURDIR}/casper; ${MAKE} install .endif + ${_+_}cd ${.CURDIR}/cron.d; ${MAKE} install ${_+_}cd ${.CURDIR}/defaults; ${MAKE} install ${_+_}cd ${.CURDIR}/devd; ${MAKE} install ${_+_}cd ${.CURDIR}/gss; ${MAKE} install + ${_+_}cd ${.CURDIR}/newsyslog.conf.d; ${MAKE} install .if ${MK_NTP} != "no" ${_+_}cd ${.CURDIR}/ntp; ${MAKE} install .endif @@ -265,6 +264,7 @@ distribution: .endif ${_+_}cd ${.CURDIR}/rc.d; ${MAKE} install ${_+_}cd ${SRCTOP}/share/termcap; ${MAKE} etc-termcap + ${_+_}cd ${.CURDIR}/syslog.d; ${MAKE} install ${_+_}cd ${SRCTOP}/usr.sbin/rmt; ${MAKE} etc-rmt ${_+_}cd ${.CURDIR}/pam.d; ${MAKE} install cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 0444 \ Modified: projects/clang500-import/etc/crontab ============================================================================== --- projects/clang500-import/etc/crontab Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/etc/crontab Fri May 19 21:20:01 2017 (r318561) @@ -7,8 +7,6 @@ PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # #minute hour mday month wday who command # -*/5 * * * * root /usr/libexec/atrun -# # Save some entropy so that /dev/random can re-seed on boot. */11 * * * * operator /usr/libexec/save-entropy # Modified: projects/clang500-import/etc/mtree/BSD.tests.dist ============================================================================== --- projects/clang500-import/etc/mtree/BSD.tests.dist Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/etc/mtree/BSD.tests.dist Fri May 19 21:20:01 2017 (r318561) @@ -622,6 +622,8 @@ .. file2c .. + getconf + .. grep .. gzip Modified: projects/clang500-import/lib/libc/stdlib/qsort.c ============================================================================== --- projects/clang500-import/lib/libc/stdlib/qsort.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libc/stdlib/qsort.c Fri May 19 21:20:01 2017 (r318561) @@ -41,7 +41,7 @@ typedef int cmp_t(void *, const void * typedef int cmp_t(const void *, const void *); #endif static inline char *med3(char *, char *, char *, cmp_t *, void *); -static inline void swapfunc(char *, char *, int, int, int); +static inline void swapfunc(char *, char *, size_t, int, int); #define MIN(a, b) ((a) < (b) ? a : b) @@ -49,7 +49,7 @@ static inline void swapfunc(char *, cha * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function". */ #define swapcode(TYPE, parmi, parmj, n) { \ - long i = (n) / sizeof (TYPE); \ + size_t i = (n) / sizeof (TYPE); \ TYPE *pi = (TYPE *) (parmi); \ TYPE *pj = (TYPE *) (parmj); \ do { \ @@ -64,7 +64,7 @@ static inline void swapfunc(char *, cha es % sizeof(TYPE) ? 2 : es == sizeof(TYPE) ? 0 : 1; static inline void -swapfunc( char *a, char *b, int n, int swaptype_long, int swaptype_int) +swapfunc(char *a, char *b, size_t n, int swaptype_long, int swaptype_int) { if (swaptype_long <= 1) swapcode(long, a, b, n) @@ -117,7 +117,7 @@ qsort(void *a, size_t n, size_t es, cmp_ #endif { char *pa, *pb, *pc, *pd, *pl, *pm, *pn; - size_t d, r; + size_t d1, d2; int cmp_result; int swaptype_long, swaptype_int, swap_cnt; @@ -137,7 +137,8 @@ loop: SWAPINIT(long, a, es); pl = a; pn = (char *)a + (n - 1) * es; if (n > 40) { - d = (n / 8) * es; + size_t d = (n / 8) * es; + pl = med3(pl, pl + d, pl + 2 * d, cmp, thunk); pm = med3(pm - d, pm, pm + d, cmp, thunk); pn = med3(pn - 2 * d, pn - d, pn, cmp, thunk); @@ -182,21 +183,43 @@ loop: SWAPINIT(long, a, es); } pn = (char *)a + n * es; - r = MIN(pa - (char *)a, pb - pa); - vecswap(a, pb - r, r); - r = MIN(pd - pc, pn - pd - es); - vecswap(pb, pn - r, r); - if ((r = pb - pa) > es) + d1 = MIN(pa - (char *)a, pb - pa); + vecswap(a, pb - d1, d1); + d1 = MIN(pd - pc, pn - pd - es); + vecswap(pb, pn - d1, d1); + + d1 = pb - pa; + d2 = pd - pc; + if (d1 <= d2) { + /* Recurse on left partition, then iterate on right partition */ + if (d1 > es) { +#ifdef I_AM_QSORT_R + qsort_r(a, d1 / es, es, thunk, cmp); +#else + qsort(a, d1 / es, es, cmp); +#endif + } + if (d2 > es) { + /* Iterate rather than recurse to save stack space */ + /* qsort(pn - d2, d2 / es, es, cmp); */ + a = pn - d2; + n = d2 / es; + goto loop; + } + } else { + /* Recurse on right partition, then iterate on left partition */ + if (d2 > es) { #ifdef I_AM_QSORT_R - qsort_r(a, r / es, es, thunk, cmp); + qsort_r(pn - d2, d2 / es, es, thunk, cmp); #else - qsort(a, r / es, es, cmp); + qsort(pn - d2, d2 / es, es, cmp); #endif - if ((r = pd - pc) > es) { - /* Iterate rather than recurse to save stack space */ - a = pn - r; - n = r / es; - goto loop; + } + if (d1 > es) { + /* Iterate rather than recurse to save stack space */ + /* qsort(a, d1 / es, es, cmp); */ + n = d1 / es; + goto loop; + } } -/* qsort(pn - r, r / es, es, cmp);*/ } Modified: projects/clang500-import/lib/libc/tests/gen/Makefile ============================================================================== --- projects/clang500-import/lib/libc/tests/gen/Makefile Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libc/tests/gen/Makefile Fri May 19 21:20:01 2017 (r318561) @@ -13,6 +13,7 @@ ATF_TESTS_C+= popen_test ATF_TESTS_C+= posix_spawn_test ATF_TESTS_C+= wordexp_test ATF_TESTS_C+= dlopen_empty_test +ATF_TESTS_C+= realpath2_test # TODO: t_closefrom, t_cpuset, t_fmtcheck, t_randomid, # TODO: t_siginfo (fixes require further inspection) Copied: projects/clang500-import/lib/libc/tests/gen/realpath2_test.c (from r318559, head/lib/libc/tests/gen/realpath2_test.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/lib/libc/tests/gen/realpath2_test.c Fri May 19 21:20:01 2017 (r318561, copy of r318559, head/lib/libc/tests/gen/realpath2_test.c) @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2017 Jan Kokemüller + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <atf-c.h> + +ATF_TC(realpath_buffer_overflow); +ATF_TC_HEAD(realpath_buffer_overflow, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Test for out of bounds read from 'left' array " + "(compile realpath.c with '-fsanitize=address')"); +} + +ATF_TC_BODY(realpath_buffer_overflow, tc) +{ + char path[MAXPATHLEN] = { 0 }; + char resb[MAXPATHLEN] = { 0 }; + size_t i; + + path[0] = 'a'; + path[1] = '/'; + for (i = 2; i < sizeof(path) - 1; ++i) { + path[i] = 'a'; + } + + ATF_REQUIRE(realpath(path, resb) == NULL); +} + +ATF_TC(realpath_empty_symlink); +ATF_TC_HEAD(realpath_empty_symlink, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Test for correct behavior when encountering empty symlinks"); +} + +ATF_TC_BODY(realpath_empty_symlink, tc) +{ + char path[MAXPATHLEN] = { 0 }; + char slnk[MAXPATHLEN] = { 0 }; + char resb[MAXPATHLEN] = { 0 }; + int fd; + + (void)strlcat(slnk, "empty_symlink", sizeof(slnk)); + + ATF_REQUIRE(symlink("", slnk) == 0); + + fd = open("aaa", O_RDONLY | O_CREAT, 0600); + + ATF_REQUIRE(fd >= 0); + ATF_REQUIRE(close(fd) == 0); + + (void)strlcat(path, "empty_symlink", sizeof(path)); + (void)strlcat(path, "/aaa", sizeof(path)); + + ATF_REQUIRE_ERRNO(ENOENT, realpath(path, resb) == NULL); + + ATF_REQUIRE(unlink("aaa") == 0); + ATF_REQUIRE(unlink(slnk) == 0); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, realpath_buffer_overflow); + ATF_TP_ADD_TC(tp, realpath_empty_symlink); + + return atf_no_error(); +} Modified: projects/clang500-import/lib/libthr/thread/thr_attr.c ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_attr.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_attr.c Fri May 19 21:20:01 2017 (r318561) @@ -607,7 +607,7 @@ _pthread_attr_setaffinity_np(pthread_att /* Kernel checks invalid bits, we check it here too. */ size_t i; for (i = kern_size; i < cpusetsize; ++i) { - if (((char *)cpusetp)[i]) + if (((const char *)cpusetp)[i]) return (EINVAL); } } Modified: projects/clang500-import/lib/libthr/thread/thr_exit.c ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_exit.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_exit.c Fri May 19 21:20:01 2017 (r318561) @@ -119,7 +119,8 @@ _Unwind_GetCFA(struct _Unwind_Context *c #endif /* PIC */ static void -thread_unwind_cleanup(_Unwind_Reason_Code code, struct _Unwind_Exception *e) +thread_unwind_cleanup(_Unwind_Reason_Code code __unused, + struct _Unwind_Exception *e __unused) { /* * Specification said that _Unwind_Resume should not be used here, @@ -130,10 +131,10 @@ thread_unwind_cleanup(_Unwind_Reason_Cod } static _Unwind_Reason_Code -thread_unwind_stop(int version, _Unwind_Action actions, - int64_t exc_class, - struct _Unwind_Exception *exc_obj, - struct _Unwind_Context *context, void *stop_parameter) +thread_unwind_stop(int version __unused, _Unwind_Action actions, + int64_t exc_class __unused, + struct _Unwind_Exception *exc_obj __unused, + struct _Unwind_Context *context, void *stop_parameter __unused) { struct pthread *curthread = _get_curthread(); struct pthread_cleanup *cur; Modified: projects/clang500-import/lib/libthr/thread/thr_sig.c ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_sig.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_sig.c Fri May 19 21:20:01 2017 (r318561) @@ -441,7 +441,7 @@ _thr_signal_init(int dlopened) } void -_thr_sigact_unload(struct dl_phdr_info *phdr_info) +_thr_sigact_unload(struct dl_phdr_info *phdr_info __unused) { #if 0 struct pthread *curthread = _get_curthread(); Modified: projects/clang500-import/lib/libthr/thread/thr_spec.c ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_spec.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_spec.c Fri May 19 21:20:01 2017 (r318561) @@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$"); #include "thr_private.h" -struct pthread_key _thread_keytable[PTHREAD_KEYS_MAX]; +static struct pthread_key _thread_keytable[PTHREAD_KEYS_MAX]; __weak_reference(_pthread_key_create, pthread_key_create); __weak_reference(_pthread_key_delete, pthread_key_delete); Modified: projects/clang500-import/lib/libthr/thread/thr_stack.c ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_stack.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_stack.c Fri May 19 21:20:01 2017 (r318561) @@ -290,6 +290,19 @@ _thr_stack_alloc(struct pthread_attr *at return (-1); } +/* + * Disable this warning from clang: + * + * cast from 'char *' to + * 'struct stack *' increases required alignment from 1 to 8 + * [-Werror,-Wcast-align] + * spare_stack = (struct stack *) + */ +#ifdef __clang__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" +#endif + /* This function must be called with _thread_list_lock held. */ void _thr_stack_free(struct pthread_attr *attr) @@ -316,3 +329,7 @@ _thr_stack_free(struct pthread_attr *att attr->stackaddr_attr = NULL; } } + +#ifdef __clang__ +#pragma GCC diagnostic pop +#endif Modified: projects/clang500-import/lib/libthr/thread/thr_symbols.c ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_symbols.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_symbols.c Fri May 19 21:20:01 2017 (r318561) @@ -37,6 +37,10 @@ __FBSDID("$FreeBSD$"); #include "thr_private.h" +#ifdef __clang__ +#pragma GCC diagnostic ignored "-Wmissing-variable-declarations" +#endif + /* A collection of symbols needed by debugger */ /* int _libthr_debug */ Modified: projects/clang500-import/lib/libthr/thread/thr_umtx.c ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_umtx.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_umtx.c Fri May 19 21:20:01 2017 (r318561) @@ -168,7 +168,7 @@ __thr_umutex_timedlock(struct umutex *mt } int -__thr_umutex_unlock(struct umutex *mtx, uint32_t id) +__thr_umutex_unlock(struct umutex *mtx) { return (_umtx_op_err(mtx, UMTX_OP_MUTEX_UNLOCK, 0, 0, 0)); Modified: projects/clang500-import/lib/libthr/thread/thr_umtx.h ============================================================================== --- projects/clang500-import/lib/libthr/thread/thr_umtx.h Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/lib/libthr/thread/thr_umtx.h Fri May 19 21:20:01 2017 (r318561) @@ -44,7 +44,7 @@ int __thr_umutex_lock(struct umutex *mtx int __thr_umutex_lock_spin(struct umutex *mtx, uint32_t id) __hidden; int __thr_umutex_timedlock(struct umutex *mtx, uint32_t id, const struct timespec *timeout) __hidden; -int __thr_umutex_unlock(struct umutex *mtx, uint32_t id) __hidden; +int __thr_umutex_unlock(struct umutex *mtx) __hidden; int __thr_umutex_trylock(struct umutex *mtx) __hidden; int __thr_umutex_set_ceiling(struct umutex *mtx, uint32_t ceiling, uint32_t *oldceiling) __hidden; @@ -155,7 +155,7 @@ _thr_umutex_unlock2(struct umutex *mtx, if (atomic_cmpset_rel_32(&mtx->m_owner, id, noncst ? UMUTEX_RB_NOTRECOV : UMUTEX_UNOWNED)) return (0); - return (__thr_umutex_unlock(mtx, id)); + return (__thr_umutex_unlock(mtx)); } do { Modified: projects/clang500-import/libexec/rtld-elf/rtld.1 ============================================================================== --- projects/clang500-import/libexec/rtld-elf/rtld.1 Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/libexec/rtld-elf/rtld.1 Fri May 19 21:20:01 2017 (r318561) @@ -192,7 +192,7 @@ the directories specified by will be searched first followed by the set of built-in standard directories. This variable is unset for set-user-ID and set-group-ID programs. -.Ev LD_LIBRARY_PATH_FDS +.It Ev LD_LIBRARY_PATH_FDS A colon separated list of file descriptor numbers for library directories. This is intended for use within .Xr capsicum 4 Modified: projects/clang500-import/libexec/rtld-elf/rtld.c ============================================================================== --- projects/clang500-import/libexec/rtld-elf/rtld.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/libexec/rtld-elf/rtld.c Fri May 19 21:20:01 2017 (r318561) @@ -1,10 +1,14 @@ /*- * Copyright 1996, 1997, 1998, 1999, 2000 John D. Polstra. * Copyright 2003 Alexander Kabaev <kan@FreeBSD.ORG>. - * Copyright 2009-2012 Konstantin Belousov <kib@FreeBSD.ORG>. + * Copyright 2009-2013 Konstantin Belousov <kib@FreeBSD.ORG>. * Copyright 2012 John Marino <draco@marino.st>. + * Copyright 2014-2017 The FreeBSD Foundation * All rights reserved. * + * Portions of this software were developed by Konstantin Belousov + * under sponsorship from the FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -24,8 +28,6 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ /* @@ -34,6 +36,9 @@ * John Polstra <jdp@polstra.com>. */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + #include <sys/param.h> #include <sys/mount.h> #include <sys/mman.h> @@ -115,8 +120,10 @@ static void objlist_push_head(Objlist *, static void objlist_push_tail(Objlist *, Obj_Entry *); static void objlist_put_after(Objlist *, Obj_Entry *, Obj_Entry *); static void objlist_remove(Objlist *, Obj_Entry *); +static int parse_args(char* argv[], int argc, bool *use_pathp, int *fdp); static int parse_integer(const char *); static void *path_enumerate(const char *, path_enum_proc, void *); +static void print_usage(const char *argv0); static void release_object(Obj_Entry *); static int relocate_object_dag(Obj_Entry *root, bool bind_now, Obj_Entry *rtldobj, int flags, RtldLockState *lockstate); @@ -345,12 +352,14 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_ const Elf_Phdr *phdr; Objlist initlist; RtldLockState lockstate; + struct stat st; Elf_Addr *argcp; char **argv, *argv0, **env, **envp, *kexecpath, *library_path_rpath; caddr_t imgentry; char buf[MAXPATHLEN]; - int argc, fd, i, mib[2], phnum; + int argc, fd, i, mib[2], phnum, rtld_argc; size_t len; + bool dir_enable, explicit_fd, search_in_path; /* * On entry, the dynamic linker itself has not been relocated yet. @@ -419,38 +428,75 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_ assert(aux_info[AT_PHDR] != NULL); phdr = (const Elf_Phdr *)aux_info[AT_PHDR]->a_un.a_ptr; if (phdr == obj_rtld.phdr) { + if (!trust) { + rtld_printf("Tainted process refusing to run binary %s\n", + argv0); + rtld_die(); + } dbg("opening main program in direct exec mode"); if (argc >= 2) { - argv0 = argv[1]; - fd = open(argv0, O_RDONLY | O_CLOEXEC | O_VERIFY); + rtld_argc = parse_args(argv, argc, &search_in_path, &fd); + argv0 = argv[rtld_argc]; + explicit_fd = (fd != -1); + if (!explicit_fd) + fd = open(argv0, O_RDONLY | O_CLOEXEC | O_VERIFY); if (fd == -1) { rtld_printf("Opening %s: %s\n", argv0, rtld_strerror(errno)); rtld_die(); } + if (fstat(fd, &st) == -1) { + _rtld_error("failed to fstat FD %d (%s): %s", fd, + explicit_fd ? "user-provided descriptor" : argv0, + rtld_strerror(errno)); + rtld_die(); + } + + /* + * Rough emulation of the permission checks done by + * execve(2), only Unix DACs are checked, ACLs are + * ignored. Preserve the semantic of disabling owner + * to execute if owner x bit is cleared, even if + * others x bit is enabled. + * mmap(2) does not allow to mmap with PROT_EXEC if + * binary' file comes from noexec mount. We cannot + * set VV_TEXT on the binary. + */ + dir_enable = false; + if (st.st_uid == geteuid()) { + if ((st.st_mode & S_IXUSR) != 0) + dir_enable = true; + } else if (st.st_gid == getegid()) { + if ((st.st_mode & S_IXGRP) != 0) + dir_enable = true; + } else if ((st.st_mode & S_IXOTH) != 0) { + dir_enable = true; + } + if (!dir_enable) { + rtld_printf("No execute permission for binary %s\n", + argv0); + rtld_die(); + } /* * For direct exec mode, argv[0] is the interpreter - * name, we must remove it and shift arguments left by - * 1 before invoking binary main. Since stack layout + * name, we must remove it and shift arguments left + * before invoking binary main. Since stack layout * places environment pointers and aux vectors right * after the terminating NULL, we must shift * environment and aux as well. - * XXX Shift will be > 1 when options are implemented. */ + main_argc = argc - rtld_argc; + for (i = 0; i <= main_argc; i++) + argv[i] = argv[i + rtld_argc]; + *argcp -= rtld_argc; + environ = env = envp = argv + main_argc + 1; do { - *argv = *(argv + 1); - argv++; - } while (*argv != NULL); - *argcp -= 1; - main_argc = argc - 1; - environ = env = envp = argv; - do { - *envp = *(envp + 1); + *envp = *(envp + rtld_argc); envp++; } while (*envp != NULL); aux = auxp = (Elf_Auxinfo *)envp; - auxpf = (Elf_Auxinfo *)(envp + 1); + auxpf = (Elf_Auxinfo *)(envp + rtld_argc); for (;; auxp++, auxpf++) { *auxp = *auxpf; if (auxp->a_type == AT_NULL) @@ -5236,6 +5282,81 @@ symlook_init_from_req(SymLook *dst, cons /* + * Parse a set of command-line arguments. + */ +static int +parse_args(char* argv[], int argc, bool *use_pathp, int *fdp) +{ + const char *arg; + int fd, i, j, arglen; + char opt; + + dbg("Parsing command-line arguments"); + *use_pathp = false; + *fdp = -1; + + for (i = 1; i < argc; i++ ) { + arg = argv[i]; + dbg("argv[%d]: '%s'", i, arg); + + /* + * rtld arguments end with an explicit "--" or with the first + * non-prefixed argument. + */ + if (strcmp(arg, "--") == 0) { + i++; + break; + } + if (arg[0] != '-') + break; + + /* + * All other arguments are single-character options that can + * be combined, so we need to search through `arg` for them. + */ + arglen = strlen(arg); + for (j = 1; j < arglen; j++) { + opt = arg[j]; + if (opt == 'h') { + print_usage(argv[0]); + rtld_die(); + } else if (opt == 'f') { + /* + * -f XX can be used to specify a descriptor for the + * binary named at the command line (i.e., the later + * argument will specify the process name but the + * descriptor is what will actually be executed) + */ + if (j != arglen - 1) { + /* -f must be the last option in, e.g., -abcf */ + _rtld_error("invalid options: %s", arg); + rtld_die(); + } + i++; + fd = parse_integer(argv[i]); + if (fd == -1) { + _rtld_error("invalid file descriptor: '%s'", + argv[i]); + rtld_die(); + } + *fdp = fd; + break; + /* TODO: + } else if (opt == 'p') { + *use_pathp = true; + */ + } else { + rtld_printf("invalid argument: '%s'\n", arg); + print_usage(argv[0]); + rtld_die(); + } + } + } + + return (i); +} + +/* * Parse a file descriptor number without pulling in more of libc (e.g. atoi). */ static int @@ -5262,6 +5383,21 @@ parse_integer(const char *str) return (n); } +static void +print_usage(const char *argv0) +{ + + rtld_printf("Usage: %s [-h] [-f <FD>] [--] <binary> [<args>]\n" + "\n" + "Options:\n" + " -h Display this help message\n" + /* TODO: " -p Search in PATH for named binary\n" */ + " -f <FD> Execute <FD> instead of searching for <binary>\n" + " -- End of RTLD options\n" + " <binary> Name of process to execute\n" + " <args> Arguments to the executed process\n", argv0); +} + /* * Overrides for libc_pic-provided functions. */ Modified: projects/clang500-import/sbin/ipfw/tables.c ============================================================================== --- projects/clang500-import/sbin/ipfw/tables.c Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/sbin/ipfw/tables.c Fri May 19 21:20:01 2017 (r318561) @@ -1260,16 +1260,14 @@ tentry_fill_key_type(char *arg, ipfw_obj if ((p = strchr(arg, ',')) != NULL) *p++ = '\0'; - if ((port = htons(strtol(arg, NULL, 10))) == 0) { + port = htons(strtol(arg, &pp, 10)); + if (*pp != '\0') { if ((sent = getservbyname(arg, NULL)) == NULL) errx(EX_DATAERR, "Unknown service: %s", arg); - else - key = sent->s_port; + port = sent->s_port; } - tfe->sport = port; - arg = p; } @@ -1304,16 +1302,14 @@ tentry_fill_key_type(char *arg, ipfw_obj if ((p = strchr(arg, ',')) != NULL) *p++ = '\0'; - if ((port = htons(strtol(arg, NULL, 10))) == 0) { + port = htons(strtol(arg, &pp, 10)); + if (*pp != '\0') { if ((sent = getservbyname(arg, NULL)) == NULL) errx(EX_DATAERR, "Unknown service: %s", arg); - else - key = sent->s_port; + port = sent->s_port; } - tfe->dport = port; - arg = p; } Modified: projects/clang500-import/share/man/man4/Makefile ============================================================================== --- projects/clang500-import/share/man/man4/Makefile Fri May 19 21:18:42 2017 (r318560) +++ projects/clang500-import/share/man/man4/Makefile Fri May 19 21:20:01 2017 (r318561) @@ -100,6 +100,7 @@ MAN= aac.4 \ cc_newreno.4 \ cc_vegas.4 \ ${_ccd.4} \ + ccr.4 \ cd.4 \ cdce.4 \ cfi.4 \ Copied: projects/clang500-import/share/man/man4/ccr.4 (from r318559, head/share/man/man4/ccr.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang500-import/share/man/man4/ccr.4 Fri May 19 21:20:01 2017 (r318561, copy of r318559, head/share/man/man4/ccr.4) @@ -0,0 +1,110 @@ +.\" Copyright (c) 2017, Chelsio Inc +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd May 16, 2017 +.Dt CCR 4 +.Os +.Sh NAME +.Nm ccr +.Nd "Chelsio T6 crypto accelerator driver" +.Sh SYNOPSIS +To compile this driver into the kernel, +place the following lines in your +kernel configuration file: +.Bd -ragged -offset indeunt +.Cd "device ccr" +.Ed +.Pp +To load the driver as a +module at boot time, place the following line in +.Xr loader.conf 5 : +.Bd -literal -offset indent +ccr_load="YES" *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201705192120.v4JLK2Ue029340>