Index: head/usr.bin/truss/Makefile =================================================================== --- head/usr.bin/truss/Makefile (revision 288486) +++ head/usr.bin/truss/Makefile (revision 288487) @@ -1,75 +1,85 @@ # $FreeBSD$ NO_WERROR= PROG= truss SRCS= main.c setup.c syscalls.c syscalls.h ioctl.c .if exists(${.CURDIR}/${MACHINE_ARCH}-fbsd.c) SRCS+= ${MACHINE_ARCH}-fbsd.c .else SRCS+= ${MACHINE_CPUARCH}-fbsd.c .endif CFLAGS+= -I${.CURDIR} -I. CLEANFILES= syscalls.master syscalls.h ioctl.c .SUFFIXES: .master syscalls.master: ${.CURDIR}/../../sys/kern/syscalls.master cat ${.ALLSRC} > syscalls.master syscalls.h: syscalls.master /bin/sh ${.CURDIR}/../../sys/kern/makesyscalls.sh syscalls.master \ ${.CURDIR}/i386.conf ioctl.c: ${.CURDIR}/../kdump/mkioctls env MACHINE=${MACHINE} CPP="${CPP}" \ /bin/sh ${.CURDIR}/../kdump/mkioctls return ${DESTDIR}${INCLUDEDIR} > ${.TARGET} .if ${MACHINE_CPUARCH} == "i386" SRCS+= i386-linux.c linux_syscalls.h CLEANFILES+=i386l-syscalls.master linux_syscalls.h i386l-syscalls.master: ${.CURDIR}/../../sys/i386/linux/syscalls.master cat ${.ALLSRC} > ${.TARGET} linux_syscalls.h: i386l-syscalls.master /bin/sh ${.CURDIR}/../../sys/kern/makesyscalls.sh ${.ALLSRC} \ ${.CURDIR}/i386linux.conf .endif .if ${MACHINE_CPUARCH} == "amd64" SRCS+= amd64-linux32.c linux32_syscalls.h CLEANFILES+=amd64l32-syscalls.master linux32_syscalls.h amd64l32-syscalls.master: ${.CURDIR}/../../sys/amd64/linux32/syscalls.master cat ${.ALLSRC} > ${.TARGET} linux32_syscalls.h: amd64l32-syscalls.master /bin/sh ${.CURDIR}/../../sys/kern/makesyscalls.sh ${.ALLSRC} \ ${.CURDIR}/amd64linux32.conf SRCS+= amd64-fbsd32.c freebsd32_syscalls.h CLEANFILES+=fbsd32-syscalls.master freebsd32_syscalls.h fbsd32-syscalls.master: ${.CURDIR}/../../sys/compat/freebsd32/syscalls.master cat ${.ALLSRC} > ${.TARGET} freebsd32_syscalls.h: fbsd32-syscalls.master /bin/sh ${.CURDIR}/../../sys/kern/makesyscalls.sh ${.ALLSRC} \ ${.CURDIR}/fbsd32.conf + +SRCS+= amd64-cloudabi64.c cloudabi64_syscalls.h +CLEANFILES+=amd64cloudabi64-syscalls.master cloudabi64_syscalls.h + +amd64cloudabi64-syscalls.master: ${.CURDIR}/../../sys/compat/cloudabi64/syscalls.master + cat ${.ALLSRC} > ${.TARGET} + +cloudabi64_syscalls.h: amd64cloudabi64-syscalls.master + /bin/sh ${.CURDIR}/../../sys/kern/makesyscalls.sh ${.ALLSRC} \ + ${.CURDIR}/amd64cloudabi64.conf .endif .if ${MACHINE_ARCH} == "powerpc64" SRCS+= powerpc-fbsd.c freebsd32_syscalls.h CLEANFILES+=fbsd32-syscalls.master freebsd32_syscalls.h fbsd32-syscalls.master: ${.CURDIR}/../../sys/compat/freebsd32/syscalls.master cat ${.ALLSRC} > ${.TARGET} freebsd32_syscalls.h: fbsd32-syscalls.master /bin/sh ${.CURDIR}/../../sys/kern/makesyscalls.sh ${.ALLSRC} \ ${.CURDIR}/fbsd32.conf .endif .include Index: head/usr.bin/truss/amd64-cloudabi64.c =================================================================== --- head/usr.bin/truss/amd64-cloudabi64.c (nonexistent) +++ head/usr.bin/truss/amd64-cloudabi64.c (revision 288487) @@ -0,0 +1,113 @@ +/*- + * 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 +__FBSDID("$FreeBSD$"); + +#include +#include + +#include + +#include +#include + +#include "cloudabi64_syscalls.h" +#include "truss.h" + +static int +amd64_cloudabi64_fetch_args(struct trussinfo *trussinfo, unsigned int narg) +{ + struct current_syscall *cs; + struct reg regs; + lwpid_t tid; + + tid = trussinfo->curthread->tid; + if (ptrace(PT_GETREGS, tid, (caddr_t)®s, 0) == -1) { + fprintf(trussinfo->outfile, "-- CANNOT READ REGISTERS --\n"); + return (-1); + } + + 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; + return (0); +} + +static const int cloudabi_errno_table[] = { + 0, E2BIG, EACCES, EADDRINUSE, EADDRNOTAVAIL, EAFNOSUPPORT, + EAGAIN, EALREADY, EBADF, EBADMSG, EBUSY, ECANCELED, ECHILD, + ECONNABORTED, ECONNREFUSED, ECONNRESET, EDEADLK, EDESTADDRREQ, + EDOM, EDQUOT, EEXIST, EFAULT, EFBIG, EHOSTUNREACH, EIDRM, + EILSEQ, EINPROGRESS, EINTR, EINVAL, EIO, EISCONN, EISDIR, ELOOP, + EMFILE, EMLINK, EMSGSIZE, EMULTIHOP, ENAMETOOLONG, ENETDOWN, + ENETRESET, ENETUNREACH, ENFILE, ENOBUFS, ENODEV, ENOENT, + ENOEXEC, ENOLCK, ENOLINK, ENOMEM, ENOMSG, ENOPROTOOPT, ENOSPC, + ENOSYS, ENOTCONN, ENOTDIR, ENOTEMPTY, ENOTRECOVERABLE, ENOTSOCK, + ENOTSUP, ENOTTY, ENXIO, EOVERFLOW, EOWNERDEAD, EPERM, EPIPE, + EPROTO, EPROTONOSUPPORT, EPROTOTYPE, ERANGE, EROFS, ESPIPE, + ESRCH, ESTALE, ETIMEDOUT, ETXTBSY, EXDEV, ENOTCAPABLE, +}; + +static int +amd64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval, + int *errorp) +{ + struct reg regs; + lwpid_t tid; + + tid = trussinfo->curthread->tid; + if (ptrace(PT_GETREGS, tid, (caddr_t)®s, 0) == -1) { + fprintf(trussinfo->outfile, "-- CANNOT READ REGISTERS --\n"); + 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)) + *retval = cloudabi_errno_table[*retval]; + return (0); +} + +static struct procabi amd64_cloudabi64 = { + "CloudABI ELF64", + cloudabi64_syscallnames, + nitems(cloudabi64_syscallnames), + amd64_cloudabi64_fetch_args, + amd64_cloudabi64_fetch_retval +}; + +PROCABI(amd64_cloudabi64); Property changes on: head/usr.bin/truss/amd64-cloudabi64.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/usr.bin/truss/amd64cloudabi64.conf =================================================================== --- head/usr.bin/truss/amd64cloudabi64.conf (nonexistent) +++ head/usr.bin/truss/amd64cloudabi64.conf (revision 288487) @@ -0,0 +1,13 @@ +# $FreeBSD$ + +sysnames="cloudabi64_syscalls.h" +sysproto="/dev/null" +sysproto_h="/dev/null" +syshdr="/dev/null" +sysmk="/dev/null" +syssw="/dev/null" +syshide="/dev/null" +syscallprefix="SYS_" +switchname="sysent" +namesname="cloudabi64_syscallnames" +systrace="/dev/null" Property changes on: head/usr.bin/truss/amd64cloudabi64.conf ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property