Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Nov 2013 14:00:52 +0000 (UTC)
From:      Mark Murray <markm@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r258682 - in projects/random_number_generator: . contrib/gcclibs/libcpp contrib/gdb/gdb etc/mtree release sbin/ipfw sbin/sysctl share/man/man4 share/mk sys/amd64/include sys/boot/fdt/dt...
Message-ID:  <201311271400.rARE0qEo089253@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markm
Date: Wed Nov 27 14:00:52 2013
New Revision: 258682
URL: http://svnweb.freebsd.org/changeset/base/258682

Log:
  MFC - tracking commit.

Modified:
  projects/random_number_generator/UPDATING
  projects/random_number_generator/contrib/gcclibs/libcpp/errors.c
  projects/random_number_generator/contrib/gdb/gdb/amd64fbsd-nat.c
  projects/random_number_generator/etc/mtree/BSD.var.dist
  projects/random_number_generator/release/Makefile
  projects/random_number_generator/sbin/ipfw/ipfw2.c
  projects/random_number_generator/sbin/sysctl/sysctl.c
  projects/random_number_generator/share/man/man4/Makefile
  projects/random_number_generator/share/man/man4/u3g.4
  projects/random_number_generator/share/mk/bsd.own.mk
  projects/random_number_generator/sys/amd64/include/pcb.h
  projects/random_number_generator/sys/amd64/include/segments.h
  projects/random_number_generator/sys/boot/fdt/dts/rpi.dts
  projects/random_number_generator/sys/compat/freebsd32/freebsd32.h
  projects/random_number_generator/sys/dev/sfxge/common/siena_nic.c
  projects/random_number_generator/sys/fs/nfsclient/nfs_kdtrace.h
  projects/random_number_generator/sys/kern/kern_proc.c
  projects/random_number_generator/sys/net/vnet.c
  projects/random_number_generator/sys/sys/sysctl.h
  projects/random_number_generator/sys/sys/user.h
  projects/random_number_generator/usr.sbin/bhyve/uart_emul.c
  projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8
  projects/random_number_generator/usr.sbin/bhyveload/bhyveload.c
Directory Properties:
  projects/random_number_generator/   (props changed)
  projects/random_number_generator/contrib/gdb/   (props changed)
  projects/random_number_generator/sbin/   (props changed)
  projects/random_number_generator/sbin/ipfw/   (props changed)
  projects/random_number_generator/share/man/man4/   (props changed)
  projects/random_number_generator/sys/   (props changed)
  projects/random_number_generator/sys/boot/   (props changed)
  projects/random_number_generator/usr.sbin/bhyve/   (props changed)
  projects/random_number_generator/usr.sbin/bhyveload/   (props changed)

Modified: projects/random_number_generator/UPDATING
==============================================================================
--- projects/random_number_generator/UPDATING	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/UPDATING	Wed Nov 27 14:00:52 2013	(r258682)
@@ -31,6 +31,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
 	disable the most expensive debugging functionality run
 	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
 
+20131126:
+	WITH_LIB32 has been changed to WITHOUT_LIB32 by default.  You
+	can set WITH_LIB32=yes in make.conf or src.conf, or if you need
+	to do a quick 32 bit library build you can do a 'make build32'
+	and 'make install32' as a separate step AFTER doing a
+	buildworld/installworld.
+
 20131108:
 	The WITHOUT_ATF build knob has been removed and its functionality
 	has been subsumed into the more generic WITHOUT_TESTS.  If you were

Modified: projects/random_number_generator/contrib/gcclibs/libcpp/errors.c
==============================================================================
--- projects/random_number_generator/contrib/gcclibs/libcpp/errors.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/contrib/gcclibs/libcpp/errors.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -153,7 +153,20 @@ cpp_error (cpp_reader * pfile, int level
 	}
       else
 	{
-	  src_loc = pfile->cur_token[-1].src_loc;
+	  /* Find actual previous token.  */
+	  cpp_token *t;
+
+	  if (pfile->cur_token != pfile->cur_run->base)
+	    t = pfile->cur_token - 1;
+	  else
+	    {
+	      if (pfile->cur_run->prev != NULL)
+	        t = pfile->cur_run->prev->limit;
+	      else
+	        t = NULL;
+	    }
+	  /* Retrieve corresponding source location, unless we failed.  */
+	  src_loc = t ? t->src_loc : 0;
 	}
 
       if (_cpp_begin_message (pfile, level, src_loc, 0))

Modified: projects/random_number_generator/contrib/gdb/gdb/amd64fbsd-nat.c
==============================================================================
--- projects/random_number_generator/contrib/gdb/gdb/amd64fbsd-nat.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/contrib/gdb/gdb/amd64fbsd-nat.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -29,6 +29,7 @@
 #include <sys/types.h>
 #include <sys/ptrace.h>
 #include <sys/sysctl.h>
+#include <sys/user.h>
 #include <machine/reg.h>
 
 #ifdef HAVE_SYS_PROCFS_H
@@ -212,24 +213,23 @@ Please report this to <bug-gdb@gnu.org>.
 
   SC_RBP_OFFSET = offset;
 
-  /* FreeBSD provides a kern.ps_strings sysctl that we can use to
+  /* FreeBSD provides a kern.proc.sigtramp sysctl that we can use to
      locate the sigtramp.  That way we can still recognize a sigtramp
-     if its location is changed in a new kernel.  Of course this is
-     still based on the assumption that the sigtramp is placed
-     directly under the location where the program arguments and
-     environment can be found.  */
+     if its location is changed in a new kernel. */
   {
-    int mib[2];
-    long ps_strings;
+    int mib[4];
+    struct kinfo_sigtramp kst;
     size_t len;
 
     mib[0] = CTL_KERN;
-    mib[1] = KERN_PS_STRINGS;
-    len = sizeof (ps_strings);
-    if (sysctl (mib, 2, &ps_strings, &len, NULL, 0) == 0)
+    mib[1] = KERN_PROC;
+    mib[2] = KERN_PROC_SIGTRAMP;
+    mib[3] = getpid();
+    len = sizeof (kst);
+    if (sysctl (mib, sizeof(mib) / sizeof(mib[0]), &kst, &len, NULL, 0) == 0)
       {
-	amd64fbsd_sigtramp_start_addr = ps_strings - 32;
-	amd64fbsd_sigtramp_end_addr = ps_strings;
+	amd64fbsd_sigtramp_start_addr = kst.ksigtramp_start;
+	amd64fbsd_sigtramp_end_addr = kst.ksigtramp_end;
       }
   }
 }

Modified: projects/random_number_generator/etc/mtree/BSD.var.dist
==============================================================================
--- projects/random_number_generator/etc/mtree/BSD.var.dist	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/etc/mtree/BSD.var.dist	Wed Nov 27 14:00:52 2013	(r258682)
@@ -28,7 +28,7 @@
 /set gname=wheel
     backups
     ..
-    cache
+    cache		mode=0755
     ..
     crash
     ..

Modified: projects/random_number_generator/release/Makefile
==============================================================================
--- projects/random_number_generator/release/Makefile	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/release/Makefile	Wed Nov 27 14:00:52 2013	(r258682)
@@ -4,6 +4,7 @@
 # 
 # User-driven targets:
 #  cdrom: Builds release CD-ROM media (disc1.iso)
+#  dvdrom: Builds release DVD-ROM media (dvd1.iso)
 #  memstick: Builds memory stick image (memstick.img)
 #  mini-memstick: Builds minimal memory stick image (mini-memstick.img)
 #  ftp: Sets up FTP distribution area (ftp)
@@ -18,6 +19,7 @@
 #  NOPORTS:  if set, do not distribute ports tree
 #  NOSRC:    if set, do not distribute source tree
 #  NODOC:    if set, do not generate release documentation
+#  NODVD:    if set, do not generate dvd1.iso
 #  TARGET/TARGET_ARCH: architecture of built release 
 #
 

Modified: projects/random_number_generator/sbin/ipfw/ipfw2.c
==============================================================================
--- projects/random_number_generator/sbin/ipfw/ipfw2.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sbin/ipfw/ipfw2.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -4274,13 +4274,24 @@ table_fill_xentry(char *arg, ipfw_table_
 			addrlen = sizeof(struct in6_addr);
 		} else {
 			/* Port or any other key */
-			key = strtol(arg, &p, 10);
 			/* Skip non-base 10 entries like 'fa1' */
-			if (p != arg) {
+			key = strtol(arg, &p, 10);
+			if (*p == '\0') {
 				pkey = (uint32_t *)paddr;
 				*pkey = htonl(key);
 				type = IPFW_TABLE_CIDR;
+				masklen = 32;
 				addrlen = sizeof(uint32_t);
+			} else if ((p != arg) && (*p == '.')) {
+				/*
+				 * Warn on IPv4 address strings
+				 * which are "valid" for inet_aton() but not
+				 * in inet_pton().
+				 *
+				 * Typical examples: '10.5' or '10.0.0.05'
+				 */
+				errx(EX_DATAERR,
+				    "Invalid IPv4 address: %s", arg);
 			}
 		}
 	}

Modified: projects/random_number_generator/sbin/sysctl/sysctl.c
==============================================================================
--- projects/random_number_generator/sbin/sysctl/sysctl.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sbin/sysctl/sysctl.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -201,7 +201,7 @@ parse(const char *string, int lineno)
 
 	cp = buf;
 	if (snprintf(buf, BUFSIZ, "%s", string) >= BUFSIZ) {
-		warn("oid too long: '%s'%s", string, line);
+		warnx("oid too long: '%s'%s", string, line);
 		return (1);
 	}
 	bufp = strsep(&cp, "=:");
@@ -260,7 +260,7 @@ parse(const char *string, int lineno)
 		}
 	} else {
 		if ((kind & CTLTYPE) == CTLTYPE_NODE) {
-			warn("oid '%s' isn't a leaf node%s", bufp, line);
+			warnx("oid '%s' isn't a leaf node%s", bufp, line);
 			return (1);
 		}
 

Modified: projects/random_number_generator/share/man/man4/Makefile
==============================================================================
--- projects/random_number_generator/share/man/man4/Makefile	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/share/man/man4/Makefile	Wed Nov 27 14:00:52 2013	(r258682)
@@ -157,6 +157,8 @@ MAN=	aac.4 \
 	gif.4 \
 	gpib.4 \
 	gpio.4 \
+	gpioiic.4 \
+	gpioled.4 \
 	gre.4 \
 	h_ertt.4 \
 	hatm.4 \

Modified: projects/random_number_generator/share/man/man4/u3g.4
==============================================================================
--- projects/random_number_generator/share/man/man4/u3g.4	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/share/man/man4/u3g.4	Wed Nov 27 14:00:52 2013	(r258682)
@@ -103,10 +103,6 @@ and
 .Xr usb_quirk 4 ,
 .Xr devd 8 ,
 .Xr usbconfig 8
-.Sh BUGS
-The automatic mode switch from disk mode to modem mode does not work unless
-the driver is either built into the kernel or loaded before the device is
-connected.
 .Sh HISTORY
 The
 .Nm
@@ -125,3 +121,7 @@ driver was written by
 and
 .An Nick Hibma Aq n_hibma@FreeBSD.org .
 Hardware for testing was provided by AnyWi Technologies, Leiden, NL.
+.Sh BUGS
+The automatic mode switch from disk mode to modem mode does not work unless
+the driver is either built into the kernel or loaded before the device is
+connected.

Modified: projects/random_number_generator/share/mk/bsd.own.mk
==============================================================================
--- projects/random_number_generator/share/mk/bsd.own.mk	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/share/mk/bsd.own.mk	Wed Nov 27 14:00:52 2013	(r258682)
@@ -303,7 +303,6 @@ __DEFAULT_YES_OPTIONS = \
     LDNS \
     LDNS_UTILS \
     LEGACY_CONSOLE \
-    LIB32 \
     LIBPTHREAD \
     LIBTHR \
     LOCALES \
@@ -369,6 +368,7 @@ __DEFAULT_NO_OPTIONS = \
     GPL_DTC \
     HESIOD \
     INSTALL_AS_USER \
+    LIB32 \
     LLDB \
     NAND \
     OFED \

Modified: projects/random_number_generator/sys/amd64/include/pcb.h
==============================================================================
--- projects/random_number_generator/sys/amd64/include/pcb.h	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/amd64/include/pcb.h	Wed Nov 27 14:00:52 2013	(r258682)
@@ -43,6 +43,7 @@
 #include <machine/fpu.h>
 #include <machine/segments.h>
 
+#ifdef __amd64__
 struct pcb {
 	register_t	pcb_r15;
 	register_t	pcb_r14;
@@ -105,6 +106,7 @@ struct pcb {
 
 	uint64_t	pcb_pad[3];
 };
+#endif
 
 #ifdef _KERNEL
 struct trapframe;

Modified: projects/random_number_generator/sys/amd64/include/segments.h
==============================================================================
--- projects/random_number_generator/sys/amd64/include/segments.h	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/amd64/include/segments.h	Wed Nov 27 14:00:52 2013	(r258682)
@@ -82,8 +82,8 @@ struct	soft_segment_descriptor {
  * region descriptors, used to load gdt/idt tables before segments yet exist.
  */
 struct region_descriptor {
-	unsigned long rd_limit:16;		/* segment extent */
-	unsigned long rd_base:64 __packed;	/* base address  */
+	uint64_t rd_limit:16;		/* segment extent */
+	uint64_t rd_base:64 __packed;	/* base address  */
 } __packed;
 
 #ifdef _KERNEL

Modified: projects/random_number_generator/sys/boot/fdt/dts/rpi.dts
==============================================================================
--- projects/random_number_generator/sys/boot/fdt/dts/rpi.dts	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/boot/fdt/dts/rpi.dts	Wed Nov 27 14:00:52 2013	(r258682)
@@ -316,7 +316,7 @@
 
 		ok {
 			label = "ok";
-			gpios = <&gpio 16 1>;
+			gpios = <&gpio 16 2 0>;
 
 			/* Don't change this - it configures
 			 * how the led driver determines if

Modified: projects/random_number_generator/sys/compat/freebsd32/freebsd32.h
==============================================================================
--- projects/random_number_generator/sys/compat/freebsd32/freebsd32.h	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/compat/freebsd32/freebsd32.h	Wed Nov 27 14:00:52 2013	(r258682)
@@ -362,6 +362,12 @@ struct kinfo_proc32 {
 	int	ki_tdflags;
 };
 
+struct kinfo_sigtramp32 {
+	uint32_t ksigtramp_start;
+	uint32_t ksigtramp_end;
+	uint32_t ksigtramp_spare[4];
+};
+
 struct kld32_file_stat_1 {
 	int	version;	/* set to sizeof(struct kld_file_stat_1) */
 	char	name[MAXPATHLEN];

Modified: projects/random_number_generator/sys/dev/sfxge/common/siena_nic.c
==============================================================================
--- projects/random_number_generator/sys/dev/sfxge/common/siena_nic.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/dev/sfxge/common/siena_nic.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -589,6 +589,7 @@ siena_nic_probe(
 	unsigned int mask;
 	int rc;
 
+	mask = 0;	/* XXX: pacify gcc */
 	EFSYS_ASSERT3U(enp->en_family, ==, EFX_FAMILY_SIENA);
 
 	/* Read clear any assertion state */

Modified: projects/random_number_generator/sys/fs/nfsclient/nfs_kdtrace.h
==============================================================================
--- projects/random_number_generator/sys/fs/nfsclient/nfs_kdtrace.h	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/fs/nfsclient/nfs_kdtrace.h	Wed Nov 27 14:00:52 2013	(r258682)
@@ -32,9 +32,6 @@
 #ifndef _NFSCL_NFS_KDTRACE_H_
 #define	_NFSCL_NFS_KDTRACE_H_
 
-#ifdef KDTRACE_HOOKS
-#include <sys/dtrace_bsd.h>
-
 /*
  * Definitions for NFS access cache probes.
  */
@@ -43,6 +40,17 @@ extern uint32_t	nfscl_accesscache_get_hi
 extern uint32_t	nfscl_accesscache_get_miss_id;
 extern uint32_t	nfscl_accesscache_load_done_id;
 
+/*
+ * Definitions for NFS attribute cache probes.
+ */
+extern uint32_t	nfscl_attrcache_flush_done_id;
+extern uint32_t	nfscl_attrcache_get_hit_id;
+extern uint32_t	nfscl_attrcache_get_miss_id;
+extern uint32_t	nfscl_attrcache_load_done_id;
+
+#ifdef KDTRACE_HOOKS
+#include <sys/dtrace_bsd.h>
+
 #define	KDTRACE_NFS_ACCESSCACHE_FLUSH_DONE(vp)	do {			\
 	if (dtrace_nfscl_accesscache_flush_done_probe != NULL)		\
 		(dtrace_nfscl_accesscache_flush_done_probe)(		\
@@ -70,14 +78,6 @@ extern uint32_t	nfscl_accesscache_load_d
 		    (rmode), (error));					\
 } while (0)
 
-/*
- * Definitions for NFS attribute cache probes.
- */
-extern uint32_t	nfscl_attrcache_flush_done_id;
-extern uint32_t	nfscl_attrcache_get_hit_id;
-extern uint32_t	nfscl_attrcache_get_miss_id;
-extern uint32_t	nfscl_attrcache_load_done_id;
-
 #define	KDTRACE_NFS_ATTRCACHE_FLUSH_DONE(vp)	do {			\
 	if (dtrace_nfscl_attrcache_flush_done_probe != NULL)		\
 		(dtrace_nfscl_attrcache_flush_done_probe)(		\

Modified: projects/random_number_generator/sys/kern/kern_proc.c
==============================================================================
--- projects/random_number_generator/sys/kern/kern_proc.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/kern/kern_proc.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -2631,6 +2631,60 @@ errout:
 	return (error);
 }
 
+static int
+sysctl_kern_proc_sigtramp(SYSCTL_HANDLER_ARGS)
+{
+	int *name = (int *)arg1;
+	u_int namelen = arg2;
+	struct proc *p;
+	struct kinfo_sigtramp kst;
+	const struct sysentvec *sv;
+	int error;
+#ifdef COMPAT_FREEBSD32
+	struct kinfo_sigtramp32 kst32;
+#endif
+
+	if (namelen != 1)
+		return (EINVAL);
+
+	error = pget((pid_t)name[0], PGET_CANDEBUG, &p);
+	if (error != 0)
+		return (error);
+	sv = p->p_sysent;
+#ifdef COMPAT_FREEBSD32
+	if ((req->flags & SCTL_MASK32) != 0) {
+		bzero(&kst32, sizeof(kst32));
+		if (SV_PROC_FLAG(p, SV_ILP32)) {
+			if (sv->sv_sigcode_base != 0) {
+				kst32.ksigtramp_start = sv->sv_sigcode_base;
+				kst32.ksigtramp_end = sv->sv_sigcode_base +
+				    *sv->sv_szsigcode;
+			} else {
+				kst32.ksigtramp_start = sv->sv_psstrings -
+				    *sv->sv_szsigcode;
+				kst32.ksigtramp_end = sv->sv_psstrings;
+			}
+		}
+		PROC_UNLOCK(p);
+		error = SYSCTL_OUT(req, &kst32, sizeof(kst32));
+		return (error);
+	}
+#endif
+	bzero(&kst, sizeof(kst));
+	if (sv->sv_sigcode_base != 0) {
+		kst.ksigtramp_start = (char *)sv->sv_sigcode_base;
+		kst.ksigtramp_end = (char *)sv->sv_sigcode_base +
+		    *sv->sv_szsigcode;
+	} else {
+		kst.ksigtramp_start = (char *)sv->sv_psstrings -
+		    *sv->sv_szsigcode;
+		kst.ksigtramp_end = (char *)sv->sv_psstrings;
+	}
+	PROC_UNLOCK(p);
+	error = SYSCTL_OUT(req, &kst, sizeof(kst));
+	return (error);
+}
+
 SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD,  0, "Process table");
 
 SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT|
@@ -2739,3 +2793,7 @@ static SYSCTL_NODE(_kern_proc, KERN_PROC
 static SYSCTL_NODE(_kern_proc, KERN_PROC_OSREL, osrel, CTLFLAG_RW |
 	CTLFLAG_ANYBODY | CTLFLAG_MPSAFE, sysctl_kern_proc_osrel,
 	"Process binary osreldate");
+
+static SYSCTL_NODE(_kern_proc, KERN_PROC_SIGTRAMP, sigtramp, CTLFLAG_RD |
+	CTLFLAG_MPSAFE, sysctl_kern_proc_sigtramp,
+	"Process signal trampoline location");

Modified: projects/random_number_generator/sys/net/vnet.c
==============================================================================
--- projects/random_number_generator/sys/net/vnet.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/net/vnet.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -216,7 +216,7 @@ SDT_PROBE_DEFINE2(vnet, functions, vnet_
     "int", "struct vnet *");
 SDT_PROBE_DEFINE2(vnet, functions, vnet_destroy, entry,
     "int", "struct vnet *");
-SDT_PROBE_DEFINE1(vnet, functions, vnet_destroy, entry,
+SDT_PROBE_DEFINE1(vnet, functions, vnet_destroy, return,
     "int");
 
 #ifdef DDB

Modified: projects/random_number_generator/sys/sys/sysctl.h
==============================================================================
--- projects/random_number_generator/sys/sys/sysctl.h	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/sys/sysctl.h	Wed Nov 27 14:00:52 2013	(r258682)
@@ -530,6 +530,7 @@ SYSCTL_ALLOWED_TYPES(UINT64, uint64_t *a
 #define	KERN_PROC_PS_STRINGS	38	/* get ps_strings location */
 #define	KERN_PROC_UMASK		39	/* process umask */
 #define	KERN_PROC_OSREL		40	/* osreldate for process binary */
+#define	KERN_PROC_SIGTRAMP	41	/* signal trampoline location */
 
 /*
  * KERN_IPC identifiers

Modified: projects/random_number_generator/sys/sys/user.h
==============================================================================
--- projects/random_number_generator/sys/sys/user.h	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/sys/sys/user.h	Wed Nov 27 14:00:52 2013	(r258682)
@@ -498,6 +498,12 @@ struct kinfo_kstack {
 	int	 _kkst_ispare[16];		/* Space for more stuff. */
 };
 
+struct kinfo_sigtramp {
+	void	*ksigtramp_start;
+	void	*ksigtramp_end;
+	void	*ksigtramp_spare[4];
+};
+
 #ifdef _KERNEL
 /* Flags for kern_proc_out function. */
 #define KERN_PROC_NOTHREADS	0x1

Modified: projects/random_number_generator/usr.sbin/bhyve/uart_emul.c
==============================================================================
--- projects/random_number_generator/usr.sbin/bhyve/uart_emul.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/usr.sbin/bhyve/uart_emul.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
+#include <fcntl.h>
 #include <termios.h>
 #include <unistd.h>
 #include <stdbool.h>
@@ -67,6 +68,7 @@ __FBSDID("$FreeBSD$");
 #define	FIFOSZ	16
 
 static bool uart_stdio;		/* stdio in use for i/o */
+static struct termios tio_stdio_orig;
 
 static struct {
 	int	baseaddr;
@@ -87,6 +89,12 @@ struct fifo {
 	int	size;		/* size of the fifo */
 };
 
+struct ttyfd {
+	bool	opened;
+	int	fd;		/* tty device file descriptor */
+	struct termios tio_orig, tio_new;    /* I/O Terminals */
+};
+
 struct uart_softc {
 	pthread_mutex_t mtx;	/* protects all softc elements */
 	uint8_t	data;		/* Data register (R/W) */
@@ -103,8 +111,7 @@ struct uart_softc {
 
 	struct fifo rxfifo;
 
-	bool	opened;
-	bool	stdio;
+	struct ttyfd tty;
 	bool	thre_int_pending;	/* THRE interrupt pending */
 
 	void	*arg;
@@ -114,38 +121,41 @@ struct uart_softc {
 
 static void uart_drain(int fd, enum ev_type ev, void *arg);
 
-static struct termios tio_orig, tio_new;	/* I/O Terminals */
-
 static void
 ttyclose(void)
 {
 
-	tcsetattr(STDIN_FILENO, TCSANOW, &tio_orig);
+	tcsetattr(STDIN_FILENO, TCSANOW, &tio_stdio_orig);
 }
 
 static void
-ttyopen(void)
+ttyopen(struct ttyfd *tf)
 {
 
-	tcgetattr(STDIN_FILENO, &tio_orig);
+	tcgetattr(tf->fd, &tf->tio_orig);
 
-	cfmakeraw(&tio_new);
-	tcsetattr(STDIN_FILENO, TCSANOW, &tio_new);
+	tf->tio_new = tf->tio_orig;
+	cfmakeraw(&tf->tio_new);
+	tf->tio_new.c_cflag |= CLOCAL;
+	tcsetattr(tf->fd, TCSANOW, &tf->tio_new);
 
-	atexit(ttyclose);
+	if (tf->fd == STDIN_FILENO) {
+		tio_stdio_orig = tf->tio_orig;
+		atexit(ttyclose);
+	}
 }
 
 static bool
-tty_char_available(void)
+tty_char_available(struct ttyfd *tf)
 {
 	fd_set rfds;
 	struct timeval tv;
 
 	FD_ZERO(&rfds);
-	FD_SET(STDIN_FILENO, &rfds);
+	FD_SET(tf->fd, &rfds);
 	tv.tv_sec = 0;
 	tv.tv_usec = 0;
-	if (select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv) > 0 ) {
+	if (select(tf->fd + 1, &rfds, NULL, NULL, &tv) > 0 ) {
 		return (true);
 	} else {
 		return (false);
@@ -153,12 +163,12 @@ tty_char_available(void)
 }
 
 static int
-ttyread(void)
+ttyread(struct ttyfd *tf)
 {
 	char rb;
 
-	if (tty_char_available()) {
-		read(STDIN_FILENO, &rb, 1);
+	if (tty_char_available(tf)) {
+		read(tf->fd, &rb, 1);
 		return (rb & 0xff);
 	} else {
 		return (-1);
@@ -166,10 +176,10 @@ ttyread(void)
 }
 
 static void
-ttywrite(unsigned char wb)
+ttywrite(struct ttyfd *tf, unsigned char wb)
 {
 
-	(void)write(STDIN_FILENO, &wb, 1);
+	(void)write(tf->fd, &wb, 1);
 }
 
 static void
@@ -226,10 +236,8 @@ uart_opentty(struct uart_softc *sc)
 {
 	struct mevent *mev;
 
-	assert(!sc->opened && sc->stdio);
-
-	ttyopen();
-	mev = mevent_add(STDIN_FILENO, EVF_READ, uart_drain, sc);
+	ttyopen(&sc->tty);
+	mev = mevent_add(sc->tty.fd, EVF_READ, uart_drain, sc);
 	assert(mev);
 }
 
@@ -294,7 +302,7 @@ uart_drain(int fd, enum ev_type ev, void
 
 	sc = arg;	
 
-	assert(fd == STDIN_FILENO);
+	assert(fd == sc->tty.fd);
 	assert(ev == EVF_READ);
 	
 	/*
@@ -305,10 +313,10 @@ uart_drain(int fd, enum ev_type ev, void
 	pthread_mutex_lock(&sc->mtx);
 
 	if ((sc->mcr & MCR_LOOPBACK) != 0) {
-		(void) ttyread();
+		(void) ttyread(&sc->tty);
 	} else {
 		while (fifo_available(&sc->rxfifo) &&
-		       ((ch = ttyread()) != -1)) {
+		       ((ch = ttyread(&sc->tty)) != -1)) {
 			fifo_putchar(&sc->rxfifo, ch);
 		}
 		uart_toggle_intr(sc);
@@ -323,12 +331,6 @@ uart_write(struct uart_softc *sc, int of
 	int fifosz;
 	uint8_t msr;
 
-	/* Open terminal */
-	if (!sc->opened && sc->stdio) {
-		uart_opentty(sc);
-		sc->opened = true;
-	}
-
 	pthread_mutex_lock(&sc->mtx);
 	
 	/*
@@ -351,8 +353,8 @@ uart_write(struct uart_softc *sc, int of
 		if (sc->mcr & MCR_LOOPBACK) {
 			if (fifo_putchar(&sc->rxfifo, value) != 0)
 				sc->lsr |= LSR_OE;
-		} else if (sc->stdio) {
-			ttywrite(value);
+		} else if (sc->tty.opened) {
+			ttywrite(&sc->tty, value);
 		} /* else drop on floor */
 		sc->thre_int_pending = true;
 		break;
@@ -459,12 +461,6 @@ uart_read(struct uart_softc *sc, int off
 {
 	uint8_t iir, intr_reason, reg;
 
-	/* Open terminal */
-	if (!sc->opened && sc->stdio) {
-		uart_opentty(sc);
-		sc->opened = true;
-	}
-
 	pthread_mutex_lock(&sc->mtx);
 
 	/*
@@ -581,19 +577,47 @@ uart_init(uart_intr_func_t intr_assert, 
 	return (sc);
 }
 
+static int
+uart_tty_backend(struct uart_softc *sc, const char *opts)
+{
+	int fd;
+	int retval;
+
+	retval = -1;
+
+	fd = open(opts, O_RDWR);
+	if (fd > 0 && isatty(fd)) {
+		sc->tty.fd = fd;
+		sc->tty.opened = true;
+		retval = 0;
+	}
+	    
+	return (retval);
+}
+
 int
 uart_set_backend(struct uart_softc *sc, const char *opts)
 {
-	/*
-	 * XXX one stdio backend supported at this time.
-	 */
+	int retval;
+
+	retval = -1;
+
 	if (opts == NULL)
 		return (0);
 
-	if (strcmp("stdio", opts) == 0 && !uart_stdio) {
-		sc->stdio = true;
-		uart_stdio = true;
-		return (0);
-	} else
-		return (-1);
+	if (strcmp("stdio", opts) == 0) {
+		if (!uart_stdio) {
+			sc->tty.fd = STDIN_FILENO;
+			sc->tty.opened = true;
+			uart_stdio = true;
+			retval = 0;
+		}
+	} else if (uart_tty_backend(sc, opts) == 0) {
+		retval = 0;
+	}
+
+	if (retval == 0)
+		uart_opentty(sc);
+
+	return (retval);
 }

Modified: projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8
==============================================================================
--- projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8	Wed Nov 27 14:00:52 2013	(r258682)
@@ -39,6 +39,7 @@ guest inside a bhyve virtual machine
 .Op Fl d Ar disk-path
 .Op Fl h Ar host-path
 .Op Fl e Ar name=value
+.Op Fl c Ar cons-dev
 .Ar vmname
 .Sh DESCRIPTION
 .Nm
@@ -100,6 +101,16 @@ to
 .Pp
 The option may be used more than once to set more than one environment
 variable.
+.It Fl c Ar cons-dev
+.Ar cons-dev
+is a
+.Xr tty 4
+device to use for
+.Nm
+terminal I/O.
+.Pp
+The text string "stdio" is also accepted and selects the use of
+unbuffered standard I/O. This is the default value.
 .El
 .Sh EXAMPLES
 To create a virtual machine named
@@ -109,10 +120,23 @@ that boots off the ISO image
 and has 1GB memory allocated to it:
 .Pp
 .Dl "bhyveload -m 1G -d /freebsd/release.iso freebsd-vm"
+.Pp
+To create a virtual machine named
+.Ar test-vm
+with 256MB of memory allocated, the guest root filesystem under the host
+directory
+.Pa /user/images/test
+and terminal I/O sent to the
+.Xr nmdm 4
+device
+.Pa /dev/nmdm1B
+.Pp
+.Dl "bhyveload -m 256MB -h /usr/images/test -c /dev/nmdm1B test-vm
 .Sh SEE ALSO
 .Xr bhyve 4 ,
 .Xr bhyve 8 ,
 .Xr loader 8 ,
+.Xr nmdm 4,
 .Xr vmm 4
 .Sh HISTORY
 .Nm

Modified: projects/random_number_generator/usr.sbin/bhyveload/bhyveload.c
==============================================================================
--- projects/random_number_generator/usr.sbin/bhyveload/bhyveload.c	Wed Nov 27 13:46:11 2013	(r258681)
+++ projects/random_number_generator/usr.sbin/bhyveload/bhyveload.c	Wed Nov 27 14:00:52 2013	(r258682)
@@ -88,9 +88,10 @@ __FBSDID("$FreeBSD$");
 #define	GB	(1024 * 1024 * 1024UL)
 #define	BSP	0
 
-static char *host_base = "/";
+static char *host_base;
 static struct termios term, oldterm;
 static int disk_fd = -1;
+static int consin_fd, consout_fd;
 
 static char *vmname, *progname;
 static struct vmctx *ctx;
@@ -108,7 +109,7 @@ cb_putc(void *arg, int ch)
 {
 	char c = ch;
 
-	write(1, &c, 1);
+	(void) write(consout_fd, &c, 1);
 }
 
 static int
@@ -116,7 +117,7 @@ cb_getc(void *arg)
 {
 	char c;
 
-	if (read(0, &c, 1) == 1)
+	if (read(consin_fd, &c, 1) == 1)
 		return (c);
 	return (-1);
 }
@@ -126,7 +127,7 @@ cb_poll(void *arg)
 {
 	int n;
 
-	if (ioctl(0, FIONREAD, &n) >= 0)
+	if (ioctl(consin_fd, FIONREAD, &n) >= 0)
 		return (n > 0);
 	return (0);
 }
@@ -488,7 +489,7 @@ static void
 cb_exit(void *arg, int v)
 {
 
-	tcsetattr(0, TCSAFLUSH, &oldterm);
+	tcsetattr(consout_fd, TCSAFLUSH, &oldterm);
 	exit(v);
 }
 
@@ -564,13 +565,45 @@ static struct loader_callbacks cb = {
 	.getenv = cb_getenv,
 };
 
+static int
+altcons_open(char *path)
+{
+	struct stat sb;
+	int err;
+	int fd;
+
+	/*
+	 * Allow stdio to be passed in so that the same string
+	 * can be used for the bhyveload console and bhyve com-port
+	 * parameters
+	 */
+	if (!strcmp(path, "stdio"))
+		return (0);
+
+	err = stat(path, &sb);
+	if (err == 0) {
+		if (!S_ISCHR(sb.st_mode))
+			err = ENOTSUP;
+		else {
+			fd = open(path, O_RDWR | O_NONBLOCK);
+			if (fd < 0)
+				err = errno;
+			else
+				consin_fd = consout_fd = fd;
+		}
+	}
+
+	return (err);
+}
+
 static void
 usage(void)
 {
 
 	fprintf(stderr,
 	    "usage: %s [-m mem-size] [-d <disk-path>] [-h <host-path>]\n"
-	    "       %*s [-e <name=value>] <vmname>\n", progname,
+	    "       %*s [-e <name=value>] [-c <console-device>] <vmname>\n",
+	    progname,
 	    (int)strlen(progname), "");
 	exit(1);
 }
@@ -589,8 +622,16 @@ main(int argc, char** argv)
 	mem_size = 256 * MB;
 	disk_image = NULL;
 
-	while ((opt = getopt(argc, argv, "d:e:h:m:")) != -1) {
+	consin_fd = STDIN_FILENO;
+	consout_fd = STDOUT_FILENO;
+
+	while ((opt = getopt(argc, argv, "c:d:e:h:m:")) != -1) {
 		switch (opt) {
+		case 'c':
+			error = altcons_open(optarg);
+			if (error != 0)
+				errx(EX_USAGE, "Could not open '%s'", optarg);
+			break;
 		case 'd':
 			disk_image = optarg;
 			break;
@@ -640,11 +681,13 @@ main(int argc, char** argv)
 		exit(1);
 	}
 
-	tcgetattr(0, &term);
+	tcgetattr(consout_fd, &term);
 	oldterm = term;
-	term.c_lflag &= ~(ICANON|ECHO);
-	term.c_iflag &= ~ICRNL;
-	tcsetattr(0, TCSAFLUSH, &term);
+	cfmakeraw(&term);
+	term.c_cflag |= CLOCAL;
+	
+	tcsetattr(consout_fd, TCSAFLUSH, &term);
+
 	h = dlopen("/boot/userboot.so", RTLD_LOCAL);
 	if (!h) {
 		printf("%s\n", dlerror());



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