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)®s, 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-all
mailing list