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);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to