Skip site navigation (1)Skip section navigation (2)
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>