svn commit: r290186 - head/usr.bin/truss

Ed Schouten ed at FreeBSD.org
Fri Oct 30 08:11:38 UTC 2015


Author: ed
Date: Fri Oct 30 08:11:37 2015
New Revision: 290186
URL: https://svnweb.freebsd.org/changeset/base/290186

Log:
  Make truss work for CloudABI processes on aarch64.
  
  This change copies over amd64-cloudabi64.c to aarch64-cloudabi.c and
  adjusts it to fetch the proper registers on aarch64. To reduce the
  amount of shared code, the errno conversion function is moved into a
  separate source file.
  
  Reviewed by:	jhb, andrew
  Differential Revision:	https://reviews.freebsd.org/D4023

Added:
  head/usr.bin/truss/aarch64-cloudabi64.c
     - copied, changed from r290090, head/usr.bin/truss/amd64-cloudabi64.c
  head/usr.bin/truss/cloudabi.c   (contents, props changed)
  head/usr.bin/truss/cloudabi.h   (contents, props changed)
Modified:
  head/usr.bin/truss/Makefile
  head/usr.bin/truss/amd64-cloudabi64.c

Modified: head/usr.bin/truss/Makefile
==============================================================================
--- head/usr.bin/truss/Makefile	Fri Oct 30 08:06:24 2015	(r290185)
+++ head/usr.bin/truss/Makefile	Fri Oct 30 08:11:37 2015	(r290186)
@@ -2,7 +2,7 @@
 
 NO_WERROR=
 PROG=	truss
-SRCS=	main.c setup.c syscalls.c ioctl.c
+SRCS=	cloudabi.c ioctl.c main.c setup.c syscalls.c
 
 .PATH:	${.CURDIR:H}/kdump
 SRCS+=	utrace.c
@@ -24,6 +24,9 @@ ABI_SYSPATH.amd64-linux32=	sys/amd64/lin
 ABIS+=		freebsd
 # Each ABI is expected to have an ABI.c, MACHINE_ARCH-ABI.c or
 # MACHINE_CPUARCH-ABI.c file that will be used to map the syscall arguments.
+.if ${MACHINE_ARCH} == "aarch64"
+ABIS+=		cloudabi64
+.endif
 .if ${MACHINE_CPUARCH} == "i386"
 ABIS+=		i386-linux
 .endif

Copied and modified: head/usr.bin/truss/aarch64-cloudabi64.c (from r290090, head/usr.bin/truss/amd64-cloudabi64.c)
==============================================================================
--- head/usr.bin/truss/amd64-cloudabi64.c	Wed Oct 28 05:11:06 2015	(r290090, copy source)
+++ head/usr.bin/truss/aarch64-cloudabi64.c	Fri Oct 30 08:11:37 2015	(r290186)
@@ -29,22 +29,22 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/ptrace.h>
 
-#include <machine/psl.h>
+#include <machine/armreg.h>
 
 #include <errno.h>
 #include <stdio.h>
 
-#include <compat/cloudabi/cloudabi_syscalldefs.h>
-
+#include "cloudabi.h"
 #include "cloudabi64_syscalls.h"
 #include "truss.h"
 
 static int
-amd64_cloudabi64_fetch_args(struct trussinfo *trussinfo, unsigned int narg)
+aarch64_cloudabi64_fetch_args(struct trussinfo *trussinfo, unsigned int narg)
 {
 	struct current_syscall *cs;
 	struct reg regs;
 	lwpid_t tid;
+	unsigned int i;
 
 	tid = trussinfo->curthread->tid;
 	if (ptrace(PT_GETREGS, tid, (caddr_t)&regs, 0) == -1) {
@@ -53,102 +53,13 @@ amd64_cloudabi64_fetch_args(struct truss
 	}
 
 	cs = &trussinfo->curthread->cs;
-	if (narg >= 1)
-		cs->args[0] = regs.r_rdi;
-	if (narg >= 2)
-		cs->args[1] = regs.r_rsi;
-	if (narg >= 3)
-		cs->args[2] = regs.r_rdx;
-	if (narg >= 4)
-		cs->args[3] = regs.r_rcx;
-	if (narg >= 5)
-		cs->args[4] = regs.r_r8;
-	if (narg >= 6)
-		cs->args[5] = regs.r_r9;
+	for (i = 0; i < narg && i < 8; i++)
+		cs->args[i] = regs.x[i];
 	return (0);
 }
 
-static const int cloudabi_errno_table[] = {
-	[CLOUDABI_E2BIG]		= E2BIG,
-	[CLOUDABI_EACCES]		= EACCES,
-	[CLOUDABI_EADDRINUSE]		= EADDRINUSE,
-	[CLOUDABI_EADDRNOTAVAIL]	= EADDRNOTAVAIL,
-	[CLOUDABI_EAFNOSUPPORT]		= EAFNOSUPPORT,
-	[CLOUDABI_EAGAIN]		= EAGAIN,
-	[CLOUDABI_EALREADY]		= EALREADY,
-	[CLOUDABI_EBADF]		= EBADF,
-	[CLOUDABI_EBADMSG]		= EBADMSG,
-	[CLOUDABI_EBUSY]		= EBUSY,
-	[CLOUDABI_ECANCELED]		= ECANCELED,
-	[CLOUDABI_ECHILD]		= ECHILD,
-	[CLOUDABI_ECONNABORTED]		= ECONNABORTED,
-	[CLOUDABI_ECONNREFUSED]		= ECONNREFUSED,
-	[CLOUDABI_ECONNRESET]		= ECONNRESET,
-	[CLOUDABI_EDEADLK]		= EDEADLK,
-	[CLOUDABI_EDESTADDRREQ]		= EDESTADDRREQ,
-	[CLOUDABI_EDOM]			= EDOM,
-	[CLOUDABI_EDQUOT]		= EDQUOT,
-	[CLOUDABI_EEXIST]		= EEXIST,
-	[CLOUDABI_EFAULT]		= EFAULT,
-	[CLOUDABI_EFBIG]		= EFBIG,
-	[CLOUDABI_EHOSTUNREACH]		= EHOSTUNREACH,
-	[CLOUDABI_EIDRM]		= EIDRM,
-	[CLOUDABI_EILSEQ]		= EILSEQ,
-	[CLOUDABI_EINPROGRESS]		= EINPROGRESS,
-	[CLOUDABI_EINTR]		= EINTR,
-	[CLOUDABI_EINVAL]		= EINVAL,
-	[CLOUDABI_EIO]			= EIO,
-	[CLOUDABI_EISCONN]		= EISCONN,
-	[CLOUDABI_EISDIR]		= EISDIR,
-	[CLOUDABI_ELOOP]		= ELOOP,
-	[CLOUDABI_EMFILE]		= EMFILE,
-	[CLOUDABI_EMLINK]		= EMLINK,
-	[CLOUDABI_EMSGSIZE]		= EMSGSIZE,
-	[CLOUDABI_EMULTIHOP]		= EMULTIHOP,
-	[CLOUDABI_ENAMETOOLONG]		= ENAMETOOLONG,
-	[CLOUDABI_ENETDOWN]		= ENETDOWN,
-	[CLOUDABI_ENETRESET]		= ENETRESET,
-	[CLOUDABI_ENETUNREACH]		= ENETUNREACH,
-	[CLOUDABI_ENFILE]		= ENFILE,
-	[CLOUDABI_ENOBUFS]		= ENOBUFS,
-	[CLOUDABI_ENODEV]		= ENODEV,
-	[CLOUDABI_ENOENT]		= ENOENT,
-	[CLOUDABI_ENOEXEC]		= ENOEXEC,
-	[CLOUDABI_ENOLCK]		= ENOLCK,
-	[CLOUDABI_ENOLINK]		= ENOLINK,
-	[CLOUDABI_ENOMEM]		= ENOMEM,
-	[CLOUDABI_ENOMSG]		= ENOMSG,
-	[CLOUDABI_ENOPROTOOPT]		= ENOPROTOOPT,
-	[CLOUDABI_ENOSPC]		= ENOSPC,
-	[CLOUDABI_ENOSYS]		= ENOSYS,
-	[CLOUDABI_ENOTCONN]		= ENOTCONN,
-	[CLOUDABI_ENOTDIR]		= ENOTDIR,
-	[CLOUDABI_ENOTEMPTY]		= ENOTEMPTY,
-	[CLOUDABI_ENOTRECOVERABLE]	= ENOTRECOVERABLE,
-	[CLOUDABI_ENOTSOCK]		= ENOTSOCK,
-	[CLOUDABI_ENOTSUP]		= ENOTSUP,
-	[CLOUDABI_ENOTTY]		= ENOTTY,
-	[CLOUDABI_ENXIO]		= ENXIO,
-	[CLOUDABI_EOVERFLOW]		= EOVERFLOW,
-	[CLOUDABI_EOWNERDEAD]		= EOWNERDEAD,
-	[CLOUDABI_EPERM]		= EPERM,
-	[CLOUDABI_EPIPE]		= EPIPE,
-	[CLOUDABI_EPROTO]		= EPROTO,
-	[CLOUDABI_EPROTONOSUPPORT]	= EPROTONOSUPPORT,
-	[CLOUDABI_EPROTOTYPE]		= EPROTOTYPE,
-	[CLOUDABI_ERANGE]		= ERANGE,
-	[CLOUDABI_EROFS]		= EROFS,
-	[CLOUDABI_ESPIPE]		= ESPIPE,
-	[CLOUDABI_ESRCH]		= ESRCH,
-	[CLOUDABI_ESTALE]		= ESTALE,
-	[CLOUDABI_ETIMEDOUT]		= ETIMEDOUT,
-	[CLOUDABI_ETXTBSY]		= ETXTBSY,
-	[CLOUDABI_EXDEV]		= EXDEV,
-	[CLOUDABI_ENOTCAPABLE]		= ENOTCAPABLE,
-};
-
 static int
-amd64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval,
+aarch64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval,
     int *errorp)
 {
 	struct reg regs;
@@ -160,21 +71,20 @@ amd64_cloudabi64_fetch_retval(struct tru
 		return (-1);
 	}
 
-	retval[0] = regs.r_rax;
-	retval[1] = regs.r_rdx;
-	*errorp = (regs.r_rflags & PSL_C) != 0;
-	if (*errorp && *retval >= 0 && *retval < nitems(cloudabi_errno_table) &&
-	    cloudabi_errno_table[*retval] != 0)
-		*retval = cloudabi_errno_table[*retval];
+	retval[0] = regs.x[0];
+	retval[1] = regs.x[1];
+	*errorp = (regs.spsr & PSR_C) != 0;
+	if (*errorp)
+		retval[0] = cloudabi_convert_errno(retval[0]);
 	return (0);
 }
 
-static struct procabi amd64_cloudabi64 = {
+static struct procabi aarch64_cloudabi64 = {
 	"CloudABI ELF64",
 	syscallnames,
 	nitems(syscallnames),
-	amd64_cloudabi64_fetch_args,
-	amd64_cloudabi64_fetch_retval
+	aarch64_cloudabi64_fetch_args,
+	aarch64_cloudabi64_fetch_retval
 };
 
-PROCABI(amd64_cloudabi64);
+PROCABI(aarch64_cloudabi64);

Modified: head/usr.bin/truss/amd64-cloudabi64.c
==============================================================================
--- head/usr.bin/truss/amd64-cloudabi64.c	Fri Oct 30 08:06:24 2015	(r290185)
+++ head/usr.bin/truss/amd64-cloudabi64.c	Fri Oct 30 08:11:37 2015	(r290186)
@@ -34,8 +34,7 @@ __FBSDID("$FreeBSD$");
 #include <errno.h>
 #include <stdio.h>
 
-#include <compat/cloudabi/cloudabi_syscalldefs.h>
-
+#include "cloudabi.h"
 #include "cloudabi64_syscalls.h"
 #include "truss.h"
 
@@ -68,85 +67,6 @@ amd64_cloudabi64_fetch_args(struct truss
 	return (0);
 }
 
-static const int cloudabi_errno_table[] = {
-	[CLOUDABI_E2BIG]		= E2BIG,
-	[CLOUDABI_EACCES]		= EACCES,
-	[CLOUDABI_EADDRINUSE]		= EADDRINUSE,
-	[CLOUDABI_EADDRNOTAVAIL]	= EADDRNOTAVAIL,
-	[CLOUDABI_EAFNOSUPPORT]		= EAFNOSUPPORT,
-	[CLOUDABI_EAGAIN]		= EAGAIN,
-	[CLOUDABI_EALREADY]		= EALREADY,
-	[CLOUDABI_EBADF]		= EBADF,
-	[CLOUDABI_EBADMSG]		= EBADMSG,
-	[CLOUDABI_EBUSY]		= EBUSY,
-	[CLOUDABI_ECANCELED]		= ECANCELED,
-	[CLOUDABI_ECHILD]		= ECHILD,
-	[CLOUDABI_ECONNABORTED]		= ECONNABORTED,
-	[CLOUDABI_ECONNREFUSED]		= ECONNREFUSED,
-	[CLOUDABI_ECONNRESET]		= ECONNRESET,
-	[CLOUDABI_EDEADLK]		= EDEADLK,
-	[CLOUDABI_EDESTADDRREQ]		= EDESTADDRREQ,
-	[CLOUDABI_EDOM]			= EDOM,
-	[CLOUDABI_EDQUOT]		= EDQUOT,
-	[CLOUDABI_EEXIST]		= EEXIST,
-	[CLOUDABI_EFAULT]		= EFAULT,
-	[CLOUDABI_EFBIG]		= EFBIG,
-	[CLOUDABI_EHOSTUNREACH]		= EHOSTUNREACH,
-	[CLOUDABI_EIDRM]		= EIDRM,
-	[CLOUDABI_EILSEQ]		= EILSEQ,
-	[CLOUDABI_EINPROGRESS]		= EINPROGRESS,
-	[CLOUDABI_EINTR]		= EINTR,
-	[CLOUDABI_EINVAL]		= EINVAL,
-	[CLOUDABI_EIO]			= EIO,
-	[CLOUDABI_EISCONN]		= EISCONN,
-	[CLOUDABI_EISDIR]		= EISDIR,
-	[CLOUDABI_ELOOP]		= ELOOP,
-	[CLOUDABI_EMFILE]		= EMFILE,
-	[CLOUDABI_EMLINK]		= EMLINK,
-	[CLOUDABI_EMSGSIZE]		= EMSGSIZE,
-	[CLOUDABI_EMULTIHOP]		= EMULTIHOP,
-	[CLOUDABI_ENAMETOOLONG]		= ENAMETOOLONG,
-	[CLOUDABI_ENETDOWN]		= ENETDOWN,
-	[CLOUDABI_ENETRESET]		= ENETRESET,
-	[CLOUDABI_ENETUNREACH]		= ENETUNREACH,
-	[CLOUDABI_ENFILE]		= ENFILE,
-	[CLOUDABI_ENOBUFS]		= ENOBUFS,
-	[CLOUDABI_ENODEV]		= ENODEV,
-	[CLOUDABI_ENOENT]		= ENOENT,
-	[CLOUDABI_ENOEXEC]		= ENOEXEC,
-	[CLOUDABI_ENOLCK]		= ENOLCK,
-	[CLOUDABI_ENOLINK]		= ENOLINK,
-	[CLOUDABI_ENOMEM]		= ENOMEM,
-	[CLOUDABI_ENOMSG]		= ENOMSG,
-	[CLOUDABI_ENOPROTOOPT]		= ENOPROTOOPT,
-	[CLOUDABI_ENOSPC]		= ENOSPC,
-	[CLOUDABI_ENOSYS]		= ENOSYS,
-	[CLOUDABI_ENOTCONN]		= ENOTCONN,
-	[CLOUDABI_ENOTDIR]		= ENOTDIR,
-	[CLOUDABI_ENOTEMPTY]		= ENOTEMPTY,
-	[CLOUDABI_ENOTRECOVERABLE]	= ENOTRECOVERABLE,
-	[CLOUDABI_ENOTSOCK]		= ENOTSOCK,
-	[CLOUDABI_ENOTSUP]		= ENOTSUP,
-	[CLOUDABI_ENOTTY]		= ENOTTY,
-	[CLOUDABI_ENXIO]		= ENXIO,
-	[CLOUDABI_EOVERFLOW]		= EOVERFLOW,
-	[CLOUDABI_EOWNERDEAD]		= EOWNERDEAD,
-	[CLOUDABI_EPERM]		= EPERM,
-	[CLOUDABI_EPIPE]		= EPIPE,
-	[CLOUDABI_EPROTO]		= EPROTO,
-	[CLOUDABI_EPROTONOSUPPORT]	= EPROTONOSUPPORT,
-	[CLOUDABI_EPROTOTYPE]		= EPROTOTYPE,
-	[CLOUDABI_ERANGE]		= ERANGE,
-	[CLOUDABI_EROFS]		= EROFS,
-	[CLOUDABI_ESPIPE]		= ESPIPE,
-	[CLOUDABI_ESRCH]		= ESRCH,
-	[CLOUDABI_ESTALE]		= ESTALE,
-	[CLOUDABI_ETIMEDOUT]		= ETIMEDOUT,
-	[CLOUDABI_ETXTBSY]		= ETXTBSY,
-	[CLOUDABI_EXDEV]		= EXDEV,
-	[CLOUDABI_ENOTCAPABLE]		= ENOTCAPABLE,
-};
-
 static int
 amd64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval,
     int *errorp)
@@ -163,9 +83,8 @@ amd64_cloudabi64_fetch_retval(struct tru
 	retval[0] = regs.r_rax;
 	retval[1] = regs.r_rdx;
 	*errorp = (regs.r_rflags & PSL_C) != 0;
-	if (*errorp && *retval >= 0 && *retval < nitems(cloudabi_errno_table) &&
-	    cloudabi_errno_table[*retval] != 0)
-		*retval = cloudabi_errno_table[*retval];
+	if (*errorp)
+		retval[0] = cloudabi_convert_errno(retval[0]);
 	return (0);
 }
 

Added: head/usr.bin/truss/cloudabi.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/usr.bin/truss/cloudabi.c	Fri Oct 30 08:11:37 2015	(r290186)
@@ -0,0 +1,122 @@
+/*-
+ * Copyright (c) 2015 Nuxi, https://nuxi.nl/
+ *
+ * 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 <compat/cloudabi/cloudabi_syscalldefs.h>
+
+#include "cloudabi.h"
+
+long
+cloudabi_convert_errno(long error)
+{
+	static const int table[] = {
+		[CLOUDABI_E2BIG]		= E2BIG,
+		[CLOUDABI_EACCES]		= EACCES,
+		[CLOUDABI_EADDRINUSE]		= EADDRINUSE,
+		[CLOUDABI_EADDRNOTAVAIL]	= EADDRNOTAVAIL,
+		[CLOUDABI_EAFNOSUPPORT]		= EAFNOSUPPORT,
+		[CLOUDABI_EAGAIN]		= EAGAIN,
+		[CLOUDABI_EALREADY]		= EALREADY,
+		[CLOUDABI_EBADF]		= EBADF,
+		[CLOUDABI_EBADMSG]		= EBADMSG,
+		[CLOUDABI_EBUSY]		= EBUSY,
+		[CLOUDABI_ECANCELED]		= ECANCELED,
+		[CLOUDABI_ECHILD]		= ECHILD,
+		[CLOUDABI_ECONNABORTED]		= ECONNABORTED,
+		[CLOUDABI_ECONNREFUSED]		= ECONNREFUSED,
+		[CLOUDABI_ECONNRESET]		= ECONNRESET,
+		[CLOUDABI_EDEADLK]		= EDEADLK,
+		[CLOUDABI_EDESTADDRREQ]		= EDESTADDRREQ,
+		[CLOUDABI_EDOM]			= EDOM,
+		[CLOUDABI_EDQUOT]		= EDQUOT,
+		[CLOUDABI_EEXIST]		= EEXIST,
+		[CLOUDABI_EFAULT]		= EFAULT,
+		[CLOUDABI_EFBIG]		= EFBIG,
+		[CLOUDABI_EHOSTUNREACH]		= EHOSTUNREACH,
+		[CLOUDABI_EIDRM]		= EIDRM,
+		[CLOUDABI_EILSEQ]		= EILSEQ,
+		[CLOUDABI_EINPROGRESS]		= EINPROGRESS,
+		[CLOUDABI_EINTR]		= EINTR,
+		[CLOUDABI_EINVAL]		= EINVAL,
+		[CLOUDABI_EIO]			= EIO,
+		[CLOUDABI_EISCONN]		= EISCONN,
+		[CLOUDABI_EISDIR]		= EISDIR,
+		[CLOUDABI_ELOOP]		= ELOOP,
+		[CLOUDABI_EMFILE]		= EMFILE,
+		[CLOUDABI_EMLINK]		= EMLINK,
+		[CLOUDABI_EMSGSIZE]		= EMSGSIZE,
+		[CLOUDABI_EMULTIHOP]		= EMULTIHOP,
+		[CLOUDABI_ENAMETOOLONG]		= ENAMETOOLONG,
+		[CLOUDABI_ENETDOWN]		= ENETDOWN,
+		[CLOUDABI_ENETRESET]		= ENETRESET,
+		[CLOUDABI_ENETUNREACH]		= ENETUNREACH,
+		[CLOUDABI_ENFILE]		= ENFILE,
+		[CLOUDABI_ENOBUFS]		= ENOBUFS,
+		[CLOUDABI_ENODEV]		= ENODEV,
+		[CLOUDABI_ENOENT]		= ENOENT,
+		[CLOUDABI_ENOEXEC]		= ENOEXEC,
+		[CLOUDABI_ENOLCK]		= ENOLCK,
+		[CLOUDABI_ENOLINK]		= ENOLINK,
+		[CLOUDABI_ENOMEM]		= ENOMEM,
+		[CLOUDABI_ENOMSG]		= ENOMSG,
+		[CLOUDABI_ENOPROTOOPT]		= ENOPROTOOPT,
+		[CLOUDABI_ENOSPC]		= ENOSPC,
+		[CLOUDABI_ENOSYS]		= ENOSYS,
+		[CLOUDABI_ENOTCONN]		= ENOTCONN,
+		[CLOUDABI_ENOTDIR]		= ENOTDIR,
+		[CLOUDABI_ENOTEMPTY]		= ENOTEMPTY,
+		[CLOUDABI_ENOTRECOVERABLE]	= ENOTRECOVERABLE,
+		[CLOUDABI_ENOTSOCK]		= ENOTSOCK,
+		[CLOUDABI_ENOTSUP]		= ENOTSUP,
+		[CLOUDABI_ENOTTY]		= ENOTTY,
+		[CLOUDABI_ENXIO]		= ENXIO,
+		[CLOUDABI_EOVERFLOW]		= EOVERFLOW,
+		[CLOUDABI_EOWNERDEAD]		= EOWNERDEAD,
+		[CLOUDABI_EPERM]		= EPERM,
+		[CLOUDABI_EPIPE]		= EPIPE,
+		[CLOUDABI_EPROTO]		= EPROTO,
+		[CLOUDABI_EPROTONOSUPPORT]	= EPROTONOSUPPORT,
+		[CLOUDABI_EPROTOTYPE]		= EPROTOTYPE,
+		[CLOUDABI_ERANGE]		= ERANGE,
+		[CLOUDABI_EROFS]		= EROFS,
+		[CLOUDABI_ESPIPE]		= ESPIPE,
+		[CLOUDABI_ESRCH]		= ESRCH,
+		[CLOUDABI_ESTALE]		= ESTALE,
+		[CLOUDABI_ETIMEDOUT]		= ETIMEDOUT,
+		[CLOUDABI_ETXTBSY]		= ETXTBSY,
+		[CLOUDABI_EXDEV]		= EXDEV,
+		[CLOUDABI_ENOTCAPABLE]		= ENOTCAPABLE,
+	};
+
+	if (error < 0 || error >= nitems(table) || table[error] == 0)
+		return (error);
+	return (table[error]);
+}

Added: head/usr.bin/truss/cloudabi.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/usr.bin/truss/cloudabi.h	Fri Oct 30 08:11:37 2015	(r290186)
@@ -0,0 +1,28 @@
+/*-
+ * Copyright (c) 2015 Nuxi, https://nuxi.nl/
+ *
+ * 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$
+ */
+
+long	cloudabi_convert_errno(long);


More information about the svn-src-head mailing list