Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Nov 2017 15:56:08 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r325858 - in stable/11: sys/compat/cloudabi sys/compat/cloudabi32 sys/compat/cloudabi64 sys/contrib/cloudabi usr.bin/truss
Message-ID:  <201711151556.vAFFu8Lp034614@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ed
Date: Wed Nov 15 15:56:08 2017
New Revision: 325858
URL: https://svnweb.freebsd.org/changeset/base/325858

Log:
  MFC r324727 and r325555:
  
    Import the latest CloudABI definitions, version 0.16.
  
    The most important change in this release is the removal of the
    poll_fd() system call; CloudABI's equivalent of kevent(). Though I think
    that kqueue is a lot saner than many of its alternatives, our
    experience is that emulating this system call on other systems
    accurately isn't easy. It has become a complex API, even though I'm not
    convinced this complexity is needed. This is why we've decided to take a
    different approach, by looking one layer up.
  
    We're currently adding an event loop to CloudABI's C library that is API
    compatible with libuv (except when incompatible with Capsicum).
    Initially, this event loop will be built on top of plain inefficient
    poll() calls. Only after this is finished, we'll work our way backwards
    and design a new set of system calls to optimize it.
  
    Interesting challenges will include integrating asynchronous I/O into
    such a system call API. libuv currently doesn't aio(4) on Linux/BSD, due
    to it being unreliable and having undesired semantics.
  
    Upgrade to CloudABI v0.17.
  
    Compared to the previous version, v0.16, there are a couple of minor
    changes:
  
    - CLOUDABI_AT_PID: Process identifiers for CloudABI processes.
  
      Initially, BSD process identifiers weren't exposed inside the runtime,
      due to them being pretty much useless inside of a cluster computing
      environment. When jobs are scheduled across systems, the BSD process
      number doesn't act as an identifier. Even on individual systems they
      may recycle relatively quickly.
  
      With this change, the kernel will now generate a UUIDv4 when executing
      a process. These UUIDs can be obtained within the process using
      program_getpid(). Right now, FreeBSD will not attempt to store this
      value. This should of course happen at some point in time, so that it
      may be printed by administration tools.
  
    - Removal of some unused structure members for polling.
  
      With the polling framework being simplified/redesigned, it turns out
      some of the structure fields were not used by the C library. We can
      remove these to keep things nice and tidy.

Modified:
  stable/11/sys/compat/cloudabi/cloudabi_fd.c
  stable/11/sys/compat/cloudabi32/cloudabi32_module.c
  stable/11/sys/compat/cloudabi32/cloudabi32_poll.c
  stable/11/sys/compat/cloudabi32/cloudabi32_proto.h
  stable/11/sys/compat/cloudabi32/cloudabi32_syscall.h
  stable/11/sys/compat/cloudabi32/cloudabi32_syscalls.c
  stable/11/sys/compat/cloudabi32/cloudabi32_sysent.c
  stable/11/sys/compat/cloudabi32/cloudabi32_systrace_args.c
  stable/11/sys/compat/cloudabi64/cloudabi64_module.c
  stable/11/sys/compat/cloudabi64/cloudabi64_poll.c
  stable/11/sys/compat/cloudabi64/cloudabi64_proto.h
  stable/11/sys/compat/cloudabi64/cloudabi64_syscall.h
  stable/11/sys/compat/cloudabi64/cloudabi64_syscalls.c
  stable/11/sys/compat/cloudabi64/cloudabi64_sysent.c
  stable/11/sys/compat/cloudabi64/cloudabi64_systrace_args.c
  stable/11/sys/contrib/cloudabi/cloudabi32_types.h
  stable/11/sys/contrib/cloudabi/cloudabi64_types.h
  stable/11/sys/contrib/cloudabi/cloudabi_types_common.h
  stable/11/sys/contrib/cloudabi/cloudabi_vdso_aarch64.S
  stable/11/sys/contrib/cloudabi/cloudabi_vdso_armv6.S
  stable/11/sys/contrib/cloudabi/cloudabi_vdso_i686.S
  stable/11/sys/contrib/cloudabi/cloudabi_vdso_i686_on_64bit.S
  stable/11/sys/contrib/cloudabi/cloudabi_vdso_x86_64.S
  stable/11/sys/contrib/cloudabi/syscalls32.master
  stable/11/sys/contrib/cloudabi/syscalls64.master
  stable/11/usr.bin/truss/syscalls.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/cloudabi/cloudabi_fd.c
==============================================================================
--- stable/11/sys/compat/cloudabi/cloudabi_fd.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi/cloudabi_fd.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -73,9 +73,7 @@ __FBSDID("$FreeBSD$");
 	MAPPING(CLOUDABI_RIGHT_MEM_MAP, CAP_MMAP)			\
 	MAPPING(CLOUDABI_RIGHT_MEM_MAP_EXEC, CAP_MMAP_X)		\
 	MAPPING(CLOUDABI_RIGHT_POLL_FD_READWRITE, CAP_EVENT)		\
-	MAPPING(CLOUDABI_RIGHT_POLL_MODIFY, CAP_KQUEUE_CHANGE)		\
 	MAPPING(CLOUDABI_RIGHT_POLL_PROC_TERMINATE, CAP_EVENT)		\
-	MAPPING(CLOUDABI_RIGHT_POLL_WAIT, CAP_KQUEUE_EVENT)		\
 	MAPPING(CLOUDABI_RIGHT_PROC_EXEC, CAP_FEXECVE)			\
 	MAPPING(CLOUDABI_RIGHT_SOCK_SHUTDOWN, CAP_SHUTDOWN)		\
 
@@ -93,9 +91,6 @@ cloudabi_sys_fd_create1(struct thread *td,
 	struct filecaps fcaps = {};
 
 	switch (uap->type) {
-	case CLOUDABI_FILETYPE_POLL:
-		cap_rights_init(&fcaps.fc_rights, CAP_FSTAT, CAP_KQUEUE);
-		return (kern_kqueue(td, 0, &fcaps));
 	case CLOUDABI_FILETYPE_SHARED_MEMORY:
 		cap_rights_init(&fcaps.fc_rights, CAP_FSTAT, CAP_FTRUNCATE,
 		    CAP_MMAP_RWX);
@@ -201,8 +196,6 @@ cloudabi_convert_filetype(const struct file *fp)
 	switch (fp->f_type) {
 	case DTYPE_FIFO:
 		return (CLOUDABI_FILETYPE_SOCKET_STREAM);
-	case DTYPE_KQUEUE:
-		return (CLOUDABI_FILETYPE_POLL);
 	case DTYPE_PIPE:
 		return (CLOUDABI_FILETYPE_SOCKET_STREAM);
 	case DTYPE_PROCDESC:
@@ -315,10 +308,6 @@ cloudabi_remove_conflicting_rights(cloudabi_filetype_t
 		    CLOUDABI_RIGHT_MEM_MAP_EXEC |
 		    CLOUDABI_RIGHT_POLL_FD_READWRITE |
 		    CLOUDABI_RIGHT_PROC_EXEC;
-		break;
-	case CLOUDABI_FILETYPE_POLL:
-		*base &= ~CLOUDABI_RIGHT_FILE_ADVISE;
-		*inheriting = 0;
 		break;
 	case CLOUDABI_FILETYPE_PROCESS:
 		*base &= ~(CLOUDABI_RIGHT_FILE_ADVISE |

Modified: stable/11/sys/compat/cloudabi32/cloudabi32_module.c
==============================================================================
--- stable/11/sys/compat/cloudabi32/cloudabi32_module.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi32/cloudabi32_module.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -63,10 +63,10 @@ cloudabi32_copyout_strings(struct image_params *imgp)
 int
 cloudabi32_fixup(register_t **stack_base, struct image_params *imgp)
 {
-	char canarybuf[64];
+	char canarybuf[64], pidbuf[16];
 	Elf32_Auxargs *args;
 	struct thread *td;
-	void *argdata, *canary;
+	void *argdata, *canary, *pid;
 	size_t argdatalen;
 	int error;
 
@@ -79,8 +79,9 @@ cloudabi32_fixup(register_t **stack_base, struct image
 	td = curthread;
 	td->td_proc->p_osrel = __FreeBSD_version;
 
-	/* Store canary for stack smashing protection. */
 	argdata = *stack_base;
+
+	/* Store canary for stack smashing protection. */
 	arc4rand(canarybuf, sizeof(canarybuf), 0);
 	*stack_base -= howmany(sizeof(canarybuf), sizeof(register_t));
 	canary = *stack_base;
@@ -89,6 +90,20 @@ cloudabi32_fixup(register_t **stack_base, struct image
 		return (error);
 
 	/*
+	 * Generate a random UUID that identifies the process. Right now
+	 * we don't store this UUID in the kernel. Ideally, it should be
+	 * exposed through ps(1).
+	 */
+	arc4rand(pidbuf, sizeof(pidbuf), 0);
+	pidbuf[6] = (pidbuf[6] & 0x0f) | 0x40;
+	pidbuf[8] = (pidbuf[8] & 0x3f) | 0x80;
+	*stack_base -= howmany(sizeof(pidbuf), sizeof(register_t));
+	pid = *stack_base;
+	error = copyout(pidbuf, pid, sizeof(pidbuf));
+	if (error != 0)
+		return (error);
+
+	/*
 	 * Compute length of program arguments. As the argument data is
 	 * binary safe, we had to add a trailing null byte in
 	 * exec_copyin_data_fds(). Undo this by reducing the length.
@@ -111,9 +126,10 @@ cloudabi32_fixup(register_t **stack_base, struct image
 		VAL(CLOUDABI_AT_PAGESZ, args->pagesz),
 		PTR(CLOUDABI_AT_PHDR, args->phdr),
 		VAL(CLOUDABI_AT_PHNUM, args->phnum),
-		VAL(CLOUDABI_AT_TID, td->td_tid),
+		PTR(CLOUDABI_AT_PID, pid),
 		PTR(CLOUDABI_AT_SYSINFO_EHDR,
 		    imgp->proc->p_sysent->sv_shared_page_base),
+		VAL(CLOUDABI_AT_TID, td->td_tid),
 #undef VAL
 #undef PTR
 		{ .a_type = CLOUDABI_AT_NULL },

Modified: stable/11/sys/compat/cloudabi32/cloudabi32_poll.c
==============================================================================
--- stable/11/sys/compat/cloudabi32/cloudabi32_poll.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi32/cloudabi32_poll.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -78,8 +78,7 @@ convert_signal(int sig)
 
 struct cloudabi32_kevent_args {
 	const cloudabi32_subscription_t *in;
-	cloudabi32_event_t *out;
-	bool once;
+	cloudabi_event_t *out;
 };
 
 /* Converts CloudABI's subscription objects to FreeBSD's struct kevent. */
@@ -124,9 +123,7 @@ cloudabi32_kevent_copyin(void *arg, struct kevent *kev
 		case CLOUDABI_EVENTTYPE_FD_READ:
 			kevp->filter = EVFILT_READ;
 			kevp->ident = sub.fd_readwrite.fd;
-			if ((sub.fd_readwrite.flags &
-			    CLOUDABI_SUBSCRIPTION_FD_READWRITE_POLL) != 0)
-				kevp->fflags = NOTE_FILE_POLL;
+			kevp->fflags = NOTE_FILE_POLL;
 			break;
 		case CLOUDABI_EVENTTYPE_FD_WRITE:
 			kevp->filter = EVFILT_WRITE;
@@ -138,24 +135,7 @@ cloudabi32_kevent_copyin(void *arg, struct kevent *kev
 			kevp->fflags = NOTE_EXIT;
 			break;
 		}
-		if (args->once) {
-			/* Ignore flags. Simply use oneshot mode. */
-			kevp->flags = EV_ADD | EV_ONESHOT;
-		} else {
-			/* Translate flags. */
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_ADD) != 0)
-				kevp->flags |= EV_ADD;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_CLEAR) != 0)
-				kevp->flags |= EV_CLEAR;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_DELETE) != 0)
-				kevp->flags |= EV_DELETE;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_DISABLE) != 0)
-				kevp->flags |= EV_DISABLE;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_ENABLE) != 0)
-				kevp->flags |= EV_ENABLE;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_ONESHOT) != 0)
-				kevp->flags |= EV_ONESHOT;
-		}
+		kevp->flags = EV_ADD | EV_ONESHOT;
 		++kevp;
 	}
 	return (0);
@@ -165,7 +145,7 @@ cloudabi32_kevent_copyin(void *arg, struct kevent *kev
 static int
 cloudabi32_kevent_copyout(void *arg, struct kevent *kevp, int count)
 {
-	cloudabi32_event_t ev;
+	cloudabi_event_t ev;
 	struct cloudabi32_kevent_args *args;
 	int error;
 
@@ -177,19 +157,15 @@ cloudabi32_kevent_copyout(void *arg, struct kevent *ke
 		switch (kevp->filter) {
 		case EVFILT_TIMER:
 			ev.type = CLOUDABI_EVENTTYPE_CLOCK;
-			ev.clock.identifier = kevp->ident;
 			break;
 		case EVFILT_READ:
 			ev.type = CLOUDABI_EVENTTYPE_FD_READ;
-			ev.fd_readwrite.fd = kevp->ident;
 			break;
 		case EVFILT_WRITE:
 			ev.type = CLOUDABI_EVENTTYPE_FD_WRITE;
-			ev.fd_readwrite.fd = kevp->ident;
 			break;
 		case EVFILT_PROCDESC:
 			ev.type = CLOUDABI_EVENTTYPE_PROC_TERMINATE;
-			ev.proc_terminate.fd = kevp->ident;
 			break;
 		}
 
@@ -238,7 +214,6 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 	struct cloudabi32_kevent_args args = {
 		.in	= uap->in,
 		.out	= uap->out,
-		.once	= true,
 	};
 	struct kevent_copyops copyops = {
 		.k_copyin	= cloudabi32_kevent_copyin,
@@ -252,7 +227,7 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 	 */
 	if (uap->nsubscriptions == 1) {
 		cloudabi32_subscription_t sub;
-		cloudabi32_event_t ev = {};
+		cloudabi_event_t ev = {};
 		int error;
 
 		error = copyin(uap->in, &sub, sizeof(sub));
@@ -262,7 +237,6 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 		ev.type = sub.type;
 		if (sub.type == CLOUDABI_EVENTTYPE_CONDVAR) {
 			/* Wait on a condition variable. */
-			ev.condvar.condvar = sub.condvar.condvar;
 			ev.error = cloudabi_convert_errno(
 			    cloudabi_futex_condvar_wait(
 			        td, TO_PTR(sub.condvar.condvar),
@@ -274,7 +248,6 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 			return (copyout(&ev, uap->out, sizeof(ev)));
 		} else if (sub.type == CLOUDABI_EVENTTYPE_LOCK_RDLOCK) {
 			/* Acquire a read lock. */
-			ev.lock.lock = sub.lock.lock;
 			ev.error = cloudabi_convert_errno(
 			    cloudabi_futex_lock_rdlock(
 			        td, TO_PTR(sub.lock.lock),
@@ -284,7 +257,6 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 			return (copyout(&ev, uap->out, sizeof(ev)));
 		} else if (sub.type == CLOUDABI_EVENTTYPE_LOCK_WRLOCK) {
 			/* Acquire a write lock. */
-			ev.lock.lock = sub.lock.lock;
 			ev.error = cloudabi_convert_errno(
 			    cloudabi_futex_lock_wrlock(
 			        td, TO_PTR(sub.lock.lock),
@@ -295,7 +267,7 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 		}
 	} else if (uap->nsubscriptions == 2) {
 		cloudabi32_subscription_t sub[2];
-		cloudabi32_event_t ev[2] = {};
+		cloudabi_event_t ev[2] = {};
 		int error;
 
 		error = copyin(uap->in, &sub, sizeof(sub));
@@ -309,8 +281,6 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 		    sub[1].type == CLOUDABI_EVENTTYPE_CLOCK &&
 		    sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) {
 			/* Wait for a condition variable with timeout. */
-			ev[0].condvar.condvar = sub[0].condvar.condvar;
-			ev[1].clock.identifier = sub[1].clock.identifier;
 			error = cloudabi_futex_condvar_wait(
 			    td, TO_PTR(sub[0].condvar.condvar),
 			    sub[0].condvar.condvar_scope,
@@ -330,8 +300,6 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 		    sub[1].type == CLOUDABI_EVENTTYPE_CLOCK &&
 		    sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) {
 			/* Acquire a read lock with a timeout. */
-			ev[0].lock.lock = sub[0].lock.lock;
-			ev[1].clock.identifier = sub[1].clock.identifier;
 			error = cloudabi_futex_lock_rdlock(
 			    td, TO_PTR(sub[0].lock.lock),
 			    sub[0].lock.lock_scope, sub[1].clock.clock_id,
@@ -349,8 +317,6 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 		    sub[1].type == CLOUDABI_EVENTTYPE_CLOCK &&
 		    sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) {
 			/* Acquire a write lock with a timeout. */
-			ev[0].lock.lock = sub[0].lock.lock;
-			ev[1].clock.identifier = sub[1].clock.identifier;
 			error = cloudabi_futex_lock_wrlock(
 			    td, TO_PTR(sub[0].lock.lock),
 			    sub[0].lock.lock_scope, sub[1].clock.clock_id,
@@ -368,41 +334,4 @@ cloudabi32_sys_poll(struct thread *td, struct cloudabi
 	}
 
 	return (kern_kevent_anonymous(td, uap->nsubscriptions, &copyops));
-}
-
-int
-cloudabi32_sys_poll_fd(struct thread *td,
-    struct cloudabi32_sys_poll_fd_args *uap)
-{
-	struct cloudabi32_kevent_args args = {
-		.in	= uap->in,
-		.out	= uap->out,
-		.once	= false,
-	};
-	struct kevent_copyops copyops = {
-		.k_copyin	= cloudabi32_kevent_copyin,
-		.k_copyout	= cloudabi32_kevent_copyout,
-		.arg		= &args,
-	};
-	cloudabi32_subscription_t subtimo;
-	struct timespec timeout;
-	int error;
-
-	if (uap->timeout != NULL) {
-		/* Poll with a timeout. */
-		error = copyin(uap->timeout, &subtimo, sizeof(subtimo));
-		if (error != 0)
-			return (error);
-		if (subtimo.type != CLOUDABI_EVENTTYPE_CLOCK ||
-		    subtimo.clock.flags != 0)
-			return (EINVAL);
-		timeout.tv_sec = subtimo.clock.timeout / 1000000000;
-		timeout.tv_nsec = subtimo.clock.timeout % 1000000000;
-		return (kern_kevent(td, uap->fd, uap->in_len, uap->out_len,
-		    &copyops, &timeout));
-	} else {
-		/* Poll without a timeout. */
-		return (kern_kevent(td, uap->fd, uap->in_len, uap->out_len,
-		    &copyops, NULL));
-	}
 }

Modified: stable/11/sys/compat/cloudabi32/cloudabi32_proto.h
==============================================================================
--- stable/11/sys/compat/cloudabi32/cloudabi32_proto.h	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi32/cloudabi32_proto.h	Wed Nov 15 15:56:08 2017	(r325858)
@@ -224,17 +224,9 @@ struct cloudabi_sys_mem_unmap_args {
 };
 struct cloudabi32_sys_poll_args {
 	char in_l_[PADL_(const cloudabi32_subscription_t *)]; const cloudabi32_subscription_t * in; char in_r_[PADR_(const cloudabi32_subscription_t *)];
-	char out_l_[PADL_(cloudabi32_event_t *)]; cloudabi32_event_t * out; char out_r_[PADR_(cloudabi32_event_t *)];
+	char out_l_[PADL_(cloudabi_event_t *)]; cloudabi_event_t * out; char out_r_[PADR_(cloudabi_event_t *)];
 	char nsubscriptions_l_[PADL_(size_t)]; size_t nsubscriptions; char nsubscriptions_r_[PADR_(size_t)];
 };
-struct cloudabi32_sys_poll_fd_args {
-	char fd_l_[PADL_(cloudabi_fd_t)]; cloudabi_fd_t fd; char fd_r_[PADR_(cloudabi_fd_t)];
-	char in_l_[PADL_(const cloudabi32_subscription_t *)]; const cloudabi32_subscription_t * in; char in_r_[PADR_(const cloudabi32_subscription_t *)];
-	char in_len_l_[PADL_(size_t)]; size_t in_len; char in_len_r_[PADR_(size_t)];
-	char out_l_[PADL_(cloudabi32_event_t *)]; cloudabi32_event_t * out; char out_r_[PADR_(cloudabi32_event_t *)];
-	char out_len_l_[PADL_(size_t)]; size_t out_len; char out_len_r_[PADR_(size_t)];
-	char timeout_l_[PADL_(const cloudabi32_subscription_t *)]; const cloudabi32_subscription_t * timeout; char timeout_r_[PADR_(const cloudabi32_subscription_t *)];
-};
 struct cloudabi_sys_proc_exec_args {
 	char fd_l_[PADL_(cloudabi_fd_t)]; cloudabi_fd_t fd; char fd_r_[PADR_(cloudabi_fd_t)];
 	char data_l_[PADL_(const void *)]; const void * data; char data_r_[PADR_(const void *)];
@@ -317,7 +309,6 @@ int	cloudabi_sys_mem_protect(struct thread *, struct c
 int	cloudabi_sys_mem_sync(struct thread *, struct cloudabi_sys_mem_sync_args *);
 int	cloudabi_sys_mem_unmap(struct thread *, struct cloudabi_sys_mem_unmap_args *);
 int	cloudabi32_sys_poll(struct thread *, struct cloudabi32_sys_poll_args *);
-int	cloudabi32_sys_poll_fd(struct thread *, struct cloudabi32_sys_poll_fd_args *);
 int	cloudabi_sys_proc_exec(struct thread *, struct cloudabi_sys_proc_exec_args *);
 int	cloudabi_sys_proc_exit(struct thread *, struct cloudabi_sys_proc_exit_args *);
 int	cloudabi_sys_proc_fork(struct thread *, struct cloudabi_sys_proc_fork_args *);
@@ -397,7 +388,6 @@ int	cloudabi_sys_thread_yield(struct thread *, struct 
 #define	CLOUDABI32_SYS_AUE_cloudabi_sys_mem_sync	AUE_NULL
 #define	CLOUDABI32_SYS_AUE_cloudabi_sys_mem_unmap	AUE_NULL
 #define	CLOUDABI32_SYS_AUE_cloudabi32_sys_poll	AUE_NULL
-#define	CLOUDABI32_SYS_AUE_cloudabi32_sys_poll_fd	AUE_NULL
 #define	CLOUDABI32_SYS_AUE_cloudabi_sys_proc_exec	AUE_NULL
 #define	CLOUDABI32_SYS_AUE_cloudabi_sys_proc_exit	AUE_NULL
 #define	CLOUDABI32_SYS_AUE_cloudabi_sys_proc_fork	AUE_NULL

Modified: stable/11/sys/compat/cloudabi32/cloudabi32_syscall.h
==============================================================================
--- stable/11/sys/compat/cloudabi32/cloudabi32_syscall.h	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi32/cloudabi32_syscall.h	Wed Nov 15 15:56:08 2017	(r325858)
@@ -43,16 +43,15 @@
 #define	CLOUDABI32_SYS_cloudabi_sys_mem_sync	35
 #define	CLOUDABI32_SYS_cloudabi_sys_mem_unmap	36
 #define	CLOUDABI32_SYS_cloudabi32_sys_poll	37
-#define	CLOUDABI32_SYS_cloudabi32_sys_poll_fd	38
-#define	CLOUDABI32_SYS_cloudabi_sys_proc_exec	39
-#define	CLOUDABI32_SYS_cloudabi_sys_proc_exit	40
-#define	CLOUDABI32_SYS_cloudabi_sys_proc_fork	41
-#define	CLOUDABI32_SYS_cloudabi_sys_proc_raise	42
-#define	CLOUDABI32_SYS_cloudabi_sys_random_get	43
-#define	CLOUDABI32_SYS_cloudabi32_sys_sock_recv	44
-#define	CLOUDABI32_SYS_cloudabi32_sys_sock_send	45
-#define	CLOUDABI32_SYS_cloudabi_sys_sock_shutdown	46
-#define	CLOUDABI32_SYS_cloudabi32_sys_thread_create	47
-#define	CLOUDABI32_SYS_cloudabi_sys_thread_exit	48
-#define	CLOUDABI32_SYS_cloudabi_sys_thread_yield	49
-#define	CLOUDABI32_SYS_MAXSYSCALL	50
+#define	CLOUDABI32_SYS_cloudabi_sys_proc_exec	38
+#define	CLOUDABI32_SYS_cloudabi_sys_proc_exit	39
+#define	CLOUDABI32_SYS_cloudabi_sys_proc_fork	40
+#define	CLOUDABI32_SYS_cloudabi_sys_proc_raise	41
+#define	CLOUDABI32_SYS_cloudabi_sys_random_get	42
+#define	CLOUDABI32_SYS_cloudabi32_sys_sock_recv	43
+#define	CLOUDABI32_SYS_cloudabi32_sys_sock_send	44
+#define	CLOUDABI32_SYS_cloudabi_sys_sock_shutdown	45
+#define	CLOUDABI32_SYS_cloudabi32_sys_thread_create	46
+#define	CLOUDABI32_SYS_cloudabi_sys_thread_exit	47
+#define	CLOUDABI32_SYS_cloudabi_sys_thread_yield	48
+#define	CLOUDABI32_SYS_MAXSYSCALL	49

Modified: stable/11/sys/compat/cloudabi32/cloudabi32_syscalls.c
==============================================================================
--- stable/11/sys/compat/cloudabi32/cloudabi32_syscalls.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi32/cloudabi32_syscalls.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -44,16 +44,15 @@ const char *cloudabi32_syscallnames[] = {
 	"cloudabi_sys_mem_sync",			/* 35 = cloudabi_sys_mem_sync */
 	"cloudabi_sys_mem_unmap",			/* 36 = cloudabi_sys_mem_unmap */
 	"cloudabi32_sys_poll",			/* 37 = cloudabi32_sys_poll */
-	"cloudabi32_sys_poll_fd",			/* 38 = cloudabi32_sys_poll_fd */
-	"cloudabi_sys_proc_exec",			/* 39 = cloudabi_sys_proc_exec */
-	"cloudabi_sys_proc_exit",			/* 40 = cloudabi_sys_proc_exit */
-	"cloudabi_sys_proc_fork",			/* 41 = cloudabi_sys_proc_fork */
-	"cloudabi_sys_proc_raise",			/* 42 = cloudabi_sys_proc_raise */
-	"cloudabi_sys_random_get",			/* 43 = cloudabi_sys_random_get */
-	"cloudabi32_sys_sock_recv",			/* 44 = cloudabi32_sys_sock_recv */
-	"cloudabi32_sys_sock_send",			/* 45 = cloudabi32_sys_sock_send */
-	"cloudabi_sys_sock_shutdown",			/* 46 = cloudabi_sys_sock_shutdown */
-	"cloudabi32_sys_thread_create",			/* 47 = cloudabi32_sys_thread_create */
-	"cloudabi_sys_thread_exit",			/* 48 = cloudabi_sys_thread_exit */
-	"cloudabi_sys_thread_yield",			/* 49 = cloudabi_sys_thread_yield */
+	"cloudabi_sys_proc_exec",			/* 38 = cloudabi_sys_proc_exec */
+	"cloudabi_sys_proc_exit",			/* 39 = cloudabi_sys_proc_exit */
+	"cloudabi_sys_proc_fork",			/* 40 = cloudabi_sys_proc_fork */
+	"cloudabi_sys_proc_raise",			/* 41 = cloudabi_sys_proc_raise */
+	"cloudabi_sys_random_get",			/* 42 = cloudabi_sys_random_get */
+	"cloudabi32_sys_sock_recv",			/* 43 = cloudabi32_sys_sock_recv */
+	"cloudabi32_sys_sock_send",			/* 44 = cloudabi32_sys_sock_send */
+	"cloudabi_sys_sock_shutdown",			/* 45 = cloudabi_sys_sock_shutdown */
+	"cloudabi32_sys_thread_create",			/* 46 = cloudabi32_sys_thread_create */
+	"cloudabi_sys_thread_exit",			/* 47 = cloudabi_sys_thread_exit */
+	"cloudabi_sys_thread_yield",			/* 48 = cloudabi_sys_thread_yield */
 };

Modified: stable/11/sys/compat/cloudabi32/cloudabi32_sysent.c
==============================================================================
--- stable/11/sys/compat/cloudabi32/cloudabi32_sysent.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi32/cloudabi32_sysent.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -52,16 +52,15 @@ struct sysent cloudabi32_sysent[] = {
 	{ AS(cloudabi_sys_mem_sync_args), (sy_call_t *)cloudabi_sys_mem_sync, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 35 = cloudabi_sys_mem_sync */
 	{ AS(cloudabi_sys_mem_unmap_args), (sy_call_t *)cloudabi_sys_mem_unmap, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 36 = cloudabi_sys_mem_unmap */
 	{ AS(cloudabi32_sys_poll_args), (sy_call_t *)cloudabi32_sys_poll, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 37 = cloudabi32_sys_poll */
-	{ AS(cloudabi32_sys_poll_fd_args), (sy_call_t *)cloudabi32_sys_poll_fd, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 38 = cloudabi32_sys_poll_fd */
-	{ AS(cloudabi_sys_proc_exec_args), (sy_call_t *)cloudabi_sys_proc_exec, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 39 = cloudabi_sys_proc_exec */
-	{ AS(cloudabi_sys_proc_exit_args), (sy_call_t *)cloudabi_sys_proc_exit, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 40 = cloudabi_sys_proc_exit */
-	{ 0, (sy_call_t *)cloudabi_sys_proc_fork, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 41 = cloudabi_sys_proc_fork */
-	{ AS(cloudabi_sys_proc_raise_args), (sy_call_t *)cloudabi_sys_proc_raise, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 42 = cloudabi_sys_proc_raise */
-	{ AS(cloudabi_sys_random_get_args), (sy_call_t *)cloudabi_sys_random_get, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 43 = cloudabi_sys_random_get */
-	{ AS(cloudabi32_sys_sock_recv_args), (sy_call_t *)cloudabi32_sys_sock_recv, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 44 = cloudabi32_sys_sock_recv */
-	{ AS(cloudabi32_sys_sock_send_args), (sy_call_t *)cloudabi32_sys_sock_send, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 45 = cloudabi32_sys_sock_send */
-	{ AS(cloudabi_sys_sock_shutdown_args), (sy_call_t *)cloudabi_sys_sock_shutdown, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 46 = cloudabi_sys_sock_shutdown */
-	{ AS(cloudabi32_sys_thread_create_args), (sy_call_t *)cloudabi32_sys_thread_create, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 47 = cloudabi32_sys_thread_create */
-	{ AS(cloudabi_sys_thread_exit_args), (sy_call_t *)cloudabi_sys_thread_exit, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 48 = cloudabi_sys_thread_exit */
-	{ 0, (sy_call_t *)cloudabi_sys_thread_yield, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 49 = cloudabi_sys_thread_yield */
+	{ AS(cloudabi_sys_proc_exec_args), (sy_call_t *)cloudabi_sys_proc_exec, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 38 = cloudabi_sys_proc_exec */
+	{ AS(cloudabi_sys_proc_exit_args), (sy_call_t *)cloudabi_sys_proc_exit, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 39 = cloudabi_sys_proc_exit */
+	{ 0, (sy_call_t *)cloudabi_sys_proc_fork, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 40 = cloudabi_sys_proc_fork */
+	{ AS(cloudabi_sys_proc_raise_args), (sy_call_t *)cloudabi_sys_proc_raise, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 41 = cloudabi_sys_proc_raise */
+	{ AS(cloudabi_sys_random_get_args), (sy_call_t *)cloudabi_sys_random_get, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 42 = cloudabi_sys_random_get */
+	{ AS(cloudabi32_sys_sock_recv_args), (sy_call_t *)cloudabi32_sys_sock_recv, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 43 = cloudabi32_sys_sock_recv */
+	{ AS(cloudabi32_sys_sock_send_args), (sy_call_t *)cloudabi32_sys_sock_send, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 44 = cloudabi32_sys_sock_send */
+	{ AS(cloudabi_sys_sock_shutdown_args), (sy_call_t *)cloudabi_sys_sock_shutdown, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 45 = cloudabi_sys_sock_shutdown */
+	{ AS(cloudabi32_sys_thread_create_args), (sy_call_t *)cloudabi32_sys_thread_create, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 46 = cloudabi32_sys_thread_create */
+	{ AS(cloudabi_sys_thread_exit_args), (sy_call_t *)cloudabi_sys_thread_exit, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 47 = cloudabi_sys_thread_exit */
+	{ 0, (sy_call_t *)cloudabi_sys_thread_yield, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC },	/* 48 = cloudabi_sys_thread_yield */
 };

Modified: stable/11/sys/compat/cloudabi32/cloudabi32_systrace_args.c
==============================================================================
--- stable/11/sys/compat/cloudabi32/cloudabi32_systrace_args.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi32/cloudabi32_systrace_args.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -352,25 +352,13 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 	case 37: {
 		struct cloudabi32_sys_poll_args *p = params;
 		uarg[0] = (intptr_t) p->in; /* const cloudabi32_subscription_t * */
-		uarg[1] = (intptr_t) p->out; /* cloudabi32_event_t * */
+		uarg[1] = (intptr_t) p->out; /* cloudabi_event_t * */
 		uarg[2] = p->nsubscriptions; /* size_t */
 		*n_args = 3;
 		break;
 	}
-	/* cloudabi32_sys_poll_fd */
-	case 38: {
-		struct cloudabi32_sys_poll_fd_args *p = params;
-		iarg[0] = p->fd; /* cloudabi_fd_t */
-		uarg[1] = (intptr_t) p->in; /* const cloudabi32_subscription_t * */
-		uarg[2] = p->in_len; /* size_t */
-		uarg[3] = (intptr_t) p->out; /* cloudabi32_event_t * */
-		uarg[4] = p->out_len; /* size_t */
-		uarg[5] = (intptr_t) p->timeout; /* const cloudabi32_subscription_t * */
-		*n_args = 6;
-		break;
-	}
 	/* cloudabi_sys_proc_exec */
-	case 39: {
+	case 38: {
 		struct cloudabi_sys_proc_exec_args *p = params;
 		iarg[0] = p->fd; /* cloudabi_fd_t */
 		uarg[1] = (intptr_t) p->data; /* const void * */
@@ -381,26 +369,26 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 		break;
 	}
 	/* cloudabi_sys_proc_exit */
-	case 40: {
+	case 39: {
 		struct cloudabi_sys_proc_exit_args *p = params;
 		iarg[0] = p->rval; /* cloudabi_exitcode_t */
 		*n_args = 1;
 		break;
 	}
 	/* cloudabi_sys_proc_fork */
-	case 41: {
+	case 40: {
 		*n_args = 0;
 		break;
 	}
 	/* cloudabi_sys_proc_raise */
-	case 42: {
+	case 41: {
 		struct cloudabi_sys_proc_raise_args *p = params;
 		iarg[0] = p->sig; /* cloudabi_signal_t */
 		*n_args = 1;
 		break;
 	}
 	/* cloudabi_sys_random_get */
-	case 43: {
+	case 42: {
 		struct cloudabi_sys_random_get_args *p = params;
 		uarg[0] = (intptr_t) p->buf; /* void * */
 		uarg[1] = p->buf_len; /* size_t */
@@ -408,7 +396,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 		break;
 	}
 	/* cloudabi32_sys_sock_recv */
-	case 44: {
+	case 43: {
 		struct cloudabi32_sys_sock_recv_args *p = params;
 		iarg[0] = p->sock; /* cloudabi_fd_t */
 		uarg[1] = (intptr_t) p->in; /* const cloudabi32_recv_in_t * */
@@ -417,7 +405,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 		break;
 	}
 	/* cloudabi32_sys_sock_send */
-	case 45: {
+	case 44: {
 		struct cloudabi32_sys_sock_send_args *p = params;
 		iarg[0] = p->sock; /* cloudabi_fd_t */
 		uarg[1] = (intptr_t) p->in; /* const cloudabi32_send_in_t * */
@@ -426,7 +414,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 		break;
 	}
 	/* cloudabi_sys_sock_shutdown */
-	case 46: {
+	case 45: {
 		struct cloudabi_sys_sock_shutdown_args *p = params;
 		iarg[0] = p->sock; /* cloudabi_fd_t */
 		iarg[1] = p->how; /* cloudabi_sdflags_t */
@@ -434,14 +422,14 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 		break;
 	}
 	/* cloudabi32_sys_thread_create */
-	case 47: {
+	case 46: {
 		struct cloudabi32_sys_thread_create_args *p = params;
 		uarg[0] = (intptr_t) p->attr; /* cloudabi32_threadattr_t * */
 		*n_args = 1;
 		break;
 	}
 	/* cloudabi_sys_thread_exit */
-	case 48: {
+	case 47: {
 		struct cloudabi_sys_thread_exit_args *p = params;
 		uarg[0] = (intptr_t) p->lock; /* cloudabi_lock_t * */
 		iarg[1] = p->scope; /* cloudabi_scope_t */
@@ -449,7 +437,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 		break;
 	}
 	/* cloudabi_sys_thread_yield */
-	case 49: {
+	case 48: {
 		*n_args = 0;
 		break;
 	}
@@ -1074,7 +1062,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 			p = "const cloudabi32_subscription_t *";
 			break;
 		case 1:
-			p = "cloudabi32_event_t *";
+			p = "cloudabi_event_t *";
 			break;
 		case 2:
 			p = "size_t";
@@ -1083,38 +1071,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 			break;
 		};
 		break;
-	/* cloudabi32_sys_poll_fd */
+	/* cloudabi_sys_proc_exec */
 	case 38:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi_fd_t";
 			break;
 		case 1:
-			p = "const cloudabi32_subscription_t *";
-			break;
-		case 2:
-			p = "size_t";
-			break;
-		case 3:
-			p = "cloudabi32_event_t *";
-			break;
-		case 4:
-			p = "size_t";
-			break;
-		case 5:
-			p = "const cloudabi32_subscription_t *";
-			break;
-		default:
-			break;
-		};
-		break;
-	/* cloudabi_sys_proc_exec */
-	case 39:
-		switch(ndx) {
-		case 0:
-			p = "cloudabi_fd_t";
-			break;
-		case 1:
 			p = "const void *";
 			break;
 		case 2:
@@ -1131,7 +1094,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi_sys_proc_exit */
-	case 40:
+	case 39:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi_exitcode_t";
@@ -1141,10 +1104,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi_sys_proc_fork */
-	case 41:
+	case 40:
 		break;
 	/* cloudabi_sys_proc_raise */
-	case 42:
+	case 41:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi_signal_t";
@@ -1154,7 +1117,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi_sys_random_get */
-	case 43:
+	case 42:
 		switch(ndx) {
 		case 0:
 			p = "void *";
@@ -1167,7 +1130,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi32_sys_sock_recv */
-	case 44:
+	case 43:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi_fd_t";
@@ -1183,7 +1146,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi32_sys_sock_send */
-	case 45:
+	case 44:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi_fd_t";
@@ -1199,7 +1162,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi_sys_sock_shutdown */
-	case 46:
+	case 45:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi_fd_t";
@@ -1212,7 +1175,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi32_sys_thread_create */
-	case 47:
+	case 46:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi32_threadattr_t *";
@@ -1222,7 +1185,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi_sys_thread_exit */
-	case 48:
+	case 47:
 		switch(ndx) {
 		case 0:
 			p = "cloudabi_lock_t *";
@@ -1235,7 +1198,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
 		};
 		break;
 	/* cloudabi_sys_thread_yield */
-	case 49:
+	case 48:
 		break;
 	default:
 		break;
@@ -1438,60 +1401,55 @@ systrace_return_setargdesc(int sysnum, int ndx, char *
 		if (ndx == 0 || ndx == 1)
 			p = "size_t";
 		break;
-	/* cloudabi32_sys_poll_fd */
+	/* cloudabi_sys_proc_exec */
 	case 38:
 		if (ndx == 0 || ndx == 1)
-			p = "size_t";
-		break;
-	/* cloudabi_sys_proc_exec */
-	case 39:
-		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi_sys_proc_exit */
-	case 40:
+	case 39:
 		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi_sys_proc_fork */
-	case 41:
+	case 40:
 	/* cloudabi_sys_proc_raise */
-	case 42:
+	case 41:
 		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi_sys_random_get */
-	case 43:
+	case 42:
 		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi32_sys_sock_recv */
-	case 44:
+	case 43:
 		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi32_sys_sock_send */
-	case 45:
+	case 44:
 		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi_sys_sock_shutdown */
-	case 46:
+	case 45:
 		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi32_sys_thread_create */
-	case 47:
+	case 46:
 		if (ndx == 0 || ndx == 1)
 			p = "cloudabi_tid_t";
 		break;
 	/* cloudabi_sys_thread_exit */
-	case 48:
+	case 47:
 		if (ndx == 0 || ndx == 1)
 			p = "void";
 		break;
 	/* cloudabi_sys_thread_yield */
-	case 49:
+	case 48:
 	default:
 		break;
 	};

Modified: stable/11/sys/compat/cloudabi64/cloudabi64_module.c
==============================================================================
--- stable/11/sys/compat/cloudabi64/cloudabi64_module.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi64/cloudabi64_module.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -63,10 +63,10 @@ cloudabi64_copyout_strings(struct image_params *imgp)
 int
 cloudabi64_fixup(register_t **stack_base, struct image_params *imgp)
 {
-	char canarybuf[64];
+	char canarybuf[64], pidbuf[16];
 	Elf64_Auxargs *args;
 	struct thread *td;
-	void *argdata, *canary;
+	void *argdata, *canary, *pid;
 	size_t argdatalen;
 	int error;
 
@@ -79,8 +79,9 @@ cloudabi64_fixup(register_t **stack_base, struct image
 	td = curthread;
 	td->td_proc->p_osrel = __FreeBSD_version;
 
-	/* Store canary for stack smashing protection. */
 	argdata = *stack_base;
+
+	/* Store canary for stack smashing protection. */
 	arc4rand(canarybuf, sizeof(canarybuf), 0);
 	*stack_base -= howmany(sizeof(canarybuf), sizeof(register_t));
 	canary = *stack_base;
@@ -89,6 +90,20 @@ cloudabi64_fixup(register_t **stack_base, struct image
 		return (error);
 
 	/*
+	 * Generate a random UUID that identifies the process. Right now
+	 * we don't store this UUID in the kernel. Ideally, it should be
+	 * exposed through ps(1).
+	 */
+	arc4rand(pidbuf, sizeof(pidbuf), 0);
+	pidbuf[6] = (pidbuf[6] & 0x0f) | 0x40;
+	pidbuf[8] = (pidbuf[8] & 0x3f) | 0x80;
+	*stack_base -= howmany(sizeof(pidbuf), sizeof(register_t));
+	pid = *stack_base;
+	error = copyout(pidbuf, pid, sizeof(pidbuf));
+	if (error != 0)
+		return (error);
+
+	/*
 	 * Compute length of program arguments. As the argument data is
 	 * binary safe, we had to add a trailing null byte in
 	 * exec_copyin_data_fds(). Undo this by reducing the length.
@@ -111,9 +126,10 @@ cloudabi64_fixup(register_t **stack_base, struct image
 		VAL(CLOUDABI_AT_PAGESZ, args->pagesz),
 		PTR(CLOUDABI_AT_PHDR, args->phdr),
 		VAL(CLOUDABI_AT_PHNUM, args->phnum),
-		VAL(CLOUDABI_AT_TID, td->td_tid),
+		PTR(CLOUDABI_AT_PID, pid),
 		PTR(CLOUDABI_AT_SYSINFO_EHDR,
 		    imgp->proc->p_sysent->sv_shared_page_base),
+		VAL(CLOUDABI_AT_TID, td->td_tid),
 #undef VAL
 #undef PTR
 		{ .a_type = CLOUDABI_AT_NULL },

Modified: stable/11/sys/compat/cloudabi64/cloudabi64_poll.c
==============================================================================
--- stable/11/sys/compat/cloudabi64/cloudabi64_poll.c	Wed Nov 15 15:52:06 2017	(r325857)
+++ stable/11/sys/compat/cloudabi64/cloudabi64_poll.c	Wed Nov 15 15:56:08 2017	(r325858)
@@ -78,8 +78,7 @@ convert_signal(int sig)
 
 struct cloudabi64_kevent_args {
 	const cloudabi64_subscription_t *in;
-	cloudabi64_event_t *out;
-	bool once;
+	cloudabi_event_t *out;
 };
 
 /* Converts CloudABI's subscription objects to FreeBSD's struct kevent. */
@@ -124,9 +123,7 @@ cloudabi64_kevent_copyin(void *arg, struct kevent *kev
 		case CLOUDABI_EVENTTYPE_FD_READ:
 			kevp->filter = EVFILT_READ;
 			kevp->ident = sub.fd_readwrite.fd;
-			if ((sub.fd_readwrite.flags &
-			    CLOUDABI_SUBSCRIPTION_FD_READWRITE_POLL) != 0)
-				kevp->fflags = NOTE_FILE_POLL;
+			kevp->fflags = NOTE_FILE_POLL;
 			break;
 		case CLOUDABI_EVENTTYPE_FD_WRITE:
 			kevp->filter = EVFILT_WRITE;
@@ -138,24 +135,7 @@ cloudabi64_kevent_copyin(void *arg, struct kevent *kev
 			kevp->fflags = NOTE_EXIT;
 			break;
 		}
-		if (args->once) {
-			/* Ignore flags. Simply use oneshot mode. */
-			kevp->flags = EV_ADD | EV_ONESHOT;
-		} else {
-			/* Translate flags. */
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_ADD) != 0)
-				kevp->flags |= EV_ADD;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_CLEAR) != 0)
-				kevp->flags |= EV_CLEAR;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_DELETE) != 0)
-				kevp->flags |= EV_DELETE;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_DISABLE) != 0)
-				kevp->flags |= EV_DISABLE;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_ENABLE) != 0)
-				kevp->flags |= EV_ENABLE;
-			if ((sub.flags & CLOUDABI_SUBSCRIPTION_ONESHOT) != 0)
-				kevp->flags |= EV_ONESHOT;
-		}
+		kevp->flags = EV_ADD | EV_ONESHOT;
 		++kevp;
 	}
 	return (0);
@@ -165,7 +145,7 @@ cloudabi64_kevent_copyin(void *arg, struct kevent *kev
 static int
 cloudabi64_kevent_copyout(void *arg, struct kevent *kevp, int count)
 {
-	cloudabi64_event_t ev;
+	cloudabi_event_t ev;
 	struct cloudabi64_kevent_args *args;
 	int error;
 
@@ -177,19 +157,15 @@ cloudabi64_kevent_copyout(void *arg, struct kevent *ke
 		switch (kevp->filter) {
 		case EVFILT_TIMER:
 			ev.type = CLOUDABI_EVENTTYPE_CLOCK;
-			ev.clock.identifier = kevp->ident;
 			break;
 		case EVFILT_READ:
 			ev.type = CLOUDABI_EVENTTYPE_FD_READ;
-			ev.fd_readwrite.fd = kevp->ident;
 			break;
 		case EVFILT_WRITE:
 			ev.type = CLOUDABI_EVENTTYPE_FD_WRITE;
-			ev.fd_readwrite.fd = kevp->ident;
 			break;
 		case EVFILT_PROCDESC:
 			ev.type = CLOUDABI_EVENTTYPE_PROC_TERMINATE;
-			ev.proc_terminate.fd = kevp->ident;
 			break;
 		}
 
@@ -238,7 +214,6 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 	struct cloudabi64_kevent_args args = {
 		.in	= uap->in,
 		.out	= uap->out,
-		.once	= true,
 	};
 	struct kevent_copyops copyops = {
 		.k_copyin	= cloudabi64_kevent_copyin,
@@ -252,7 +227,7 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 	 */
 	if (uap->nsubscriptions == 1) {
 		cloudabi64_subscription_t sub;
-		cloudabi64_event_t ev = {};
+		cloudabi_event_t ev = {};
 		int error;
 
 		error = copyin(uap->in, &sub, sizeof(sub));
@@ -262,7 +237,6 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 		ev.type = sub.type;
 		if (sub.type == CLOUDABI_EVENTTYPE_CONDVAR) {
 			/* Wait on a condition variable. */
-			ev.condvar.condvar = sub.condvar.condvar;
 			ev.error = cloudabi_convert_errno(
 			    cloudabi_futex_condvar_wait(
 			        td, TO_PTR(sub.condvar.condvar),
@@ -274,7 +248,6 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 			return (copyout(&ev, uap->out, sizeof(ev)));
 		} else if (sub.type == CLOUDABI_EVENTTYPE_LOCK_RDLOCK) {
 			/* Acquire a read lock. */
-			ev.lock.lock = sub.lock.lock;
 			ev.error = cloudabi_convert_errno(
 			    cloudabi_futex_lock_rdlock(
 			        td, TO_PTR(sub.lock.lock),
@@ -284,7 +257,6 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 			return (copyout(&ev, uap->out, sizeof(ev)));
 		} else if (sub.type == CLOUDABI_EVENTTYPE_LOCK_WRLOCK) {
 			/* Acquire a write lock. */
-			ev.lock.lock = sub.lock.lock;
 			ev.error = cloudabi_convert_errno(
 			    cloudabi_futex_lock_wrlock(
 			        td, TO_PTR(sub.lock.lock),
@@ -295,7 +267,7 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 		}
 	} else if (uap->nsubscriptions == 2) {
 		cloudabi64_subscription_t sub[2];
-		cloudabi64_event_t ev[2] = {};
+		cloudabi_event_t ev[2] = {};
 		int error;
 
 		error = copyin(uap->in, &sub, sizeof(sub));
@@ -309,8 +281,6 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 		    sub[1].type == CLOUDABI_EVENTTYPE_CLOCK &&
 		    sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) {
 			/* Wait for a condition variable with timeout. */
-			ev[0].condvar.condvar = sub[0].condvar.condvar;
-			ev[1].clock.identifier = sub[1].clock.identifier;
 			error = cloudabi_futex_condvar_wait(
 			    td, TO_PTR(sub[0].condvar.condvar),
 			    sub[0].condvar.condvar_scope,
@@ -330,8 +300,6 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 		    sub[1].type == CLOUDABI_EVENTTYPE_CLOCK &&
 		    sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) {
 			/* Acquire a read lock with a timeout. */
-			ev[0].lock.lock = sub[0].lock.lock;
-			ev[1].clock.identifier = sub[1].clock.identifier;
 			error = cloudabi_futex_lock_rdlock(
 			    td, TO_PTR(sub[0].lock.lock),
 			    sub[0].lock.lock_scope, sub[1].clock.clock_id,
@@ -349,8 +317,6 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 		    sub[1].type == CLOUDABI_EVENTTYPE_CLOCK &&
 		    sub[1].clock.flags == CLOUDABI_SUBSCRIPTION_CLOCK_ABSTIME) {
 			/* Acquire a write lock with a timeout. */
-			ev[0].lock.lock = sub[0].lock.lock;
-			ev[1].clock.identifier = sub[1].clock.identifier;
 			error = cloudabi_futex_lock_wrlock(
 			    td, TO_PTR(sub[0].lock.lock),
 			    sub[0].lock.lock_scope, sub[1].clock.clock_id,
@@ -368,41 +334,4 @@ cloudabi64_sys_poll(struct thread *td, struct cloudabi
 	}
 
 	return (kern_kevent_anonymous(td, uap->nsubscriptions, &copyops));
-}
-
-int
-cloudabi64_sys_poll_fd(struct thread *td,
-    struct cloudabi64_sys_poll_fd_args *uap)
-{
-	struct cloudabi64_kevent_args args = {
-		.in	= uap->in,
-		.out	= uap->out,
-		.once	= false,
-	};
-	struct kevent_copyops copyops = {
-		.k_copyin	= cloudabi64_kevent_copyin,
-		.k_copyout	= cloudabi64_kevent_copyout,
-		.arg		= &args,
-	};
-	cloudabi64_subscription_t subtimo;
-	struct timespec timeout;
-	int error;
-
-	if (uap->timeout != NULL) {
-		/* Poll with a timeout. */
-		error = copyin(uap->timeout, &subtimo, sizeof(subtimo));
-		if (error != 0)
-			return (error);
-		if (subtimo.type != CLOUDABI_EVENTTYPE_CLOCK ||
-		    subtimo.clock.flags != 0)
-			return (EINVAL);
-		timeout.tv_sec = subtimo.clock.timeout / 1000000000;
-		timeout.tv_nsec = subtimo.clock.timeout % 1000000000;
-		return (kern_kevent(td, uap->fd, uap->in_len, uap->out_len,
-		    &copyops, &timeout));
-	} else {
-		/* Poll without a timeout. */
-		return (kern_kevent(td, uap->fd, uap->in_len, uap->out_len,
-		    &copyops, NULL));

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



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