aboutsummaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2016-02-23 20:00:55 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2016-02-23 20:00:55 +0000
commit287b96dd253d69d2a3ff2033fb2eb19aec44605f (patch)
tree2e652af1c6fc8f563dbb36930037dca0ed084d27 /usr.bin
parentd70876fd7e2fe46f9d1fb2212a2687f9684ccb7a (diff)
Notes
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/kdump/kdump.c71
-rw-r--r--usr.bin/truss/Makefile2
-rw-r--r--usr.bin/truss/aarch64-cloudabi64.c4
-rw-r--r--usr.bin/truss/amd64-cloudabi64.c4
-rw-r--r--usr.bin/truss/amd64-linux32.c27
-rw-r--r--usr.bin/truss/cloudabi.c122
-rw-r--r--usr.bin/truss/cloudabi.h28
-rw-r--r--usr.bin/truss/i386-linux.c27
-rw-r--r--usr.bin/truss/syscalls.c8
9 files changed, 10 insertions, 283 deletions
diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c
index 8fe03ea277662..b4a1f69651223 100644
--- a/usr.bin/kdump/kdump.c
+++ b/usr.bin/kdump/kdump.c
@@ -142,28 +142,6 @@ static struct ktr_header ktr_header;
c = ','; \
} while (0)
-#if defined(__amd64__) || defined(__i386__)
-
-void linux_ktrsysret(struct ktr_sysret *, u_int);
-
-/*
- * from linux.h
- * Linux syscalls return negative errno's, we do positive and map them
- */
-static int bsd_to_linux_errno[ELAST + 1] = {
- -0, -1, -2, -3, -4, -5, -6, -7, -8, -9,
- -10, -35, -12, -13, -14, -15, -16, -17, -18, -19,
- -20, -21, -22, -23, -24, -25, -26, -27, -28, -29,
- -30, -31, -32, -33, -34, -11,-115,-114, -88, -89,
- -90, -91, -92, -93, -94, -95, -96, -97, -98, -99,
- -100,-101,-102,-103,-104,-105,-106,-107,-108,-109,
- -110,-111, -40, -36,-112,-113, -39, -11, -87,-122,
- -116, -66, -6, -6, -6, -6, -6, -37, -38, -9,
- -6, -6, -43, -42, -75,-125, -84, -95, -16, -74,
- -72, -67, -71
-};
-#endif
-
struct proc_info
{
TAILQ_ENTRY(proc_info) info;
@@ -393,13 +371,7 @@ main(int argc, char *argv[])
ktrsyscall((struct ktr_syscall *)m, sv_flags);
break;
case KTR_SYSRET:
-#if defined(__amd64__) || defined(__i386__)
- if ((sv_flags & SV_ABI_MASK) == SV_ABI_LINUX)
- linux_ktrsysret((struct ktr_sysret *)m,
- sv_flags);
- else
-#endif
- ktrsysret((struct ktr_sysret *)m, sv_flags);
+ ktrsysret((struct ktr_sysret *)m, sv_flags);
break;
case KTR_NAMEI:
case KTR_SYSCTL:
@@ -1366,7 +1338,8 @@ ktrsysret(struct ktr_sysret *ktr, u_int sv_flags)
else if (error == EJUSTRETURN)
printf("JUSTRETURN");
else {
- printf("-1 errno %d", ktr->ktr_error);
+ printf("-1 errno %d", sysdecode_freebsd_to_abi_errno(
+ syscallabi(sv_flags), error));
if (fancy)
printf(" %s", strerror(ktr->ktr_error));
}
@@ -1852,44 +1825,6 @@ ktrfaultend(struct ktr_faultend *ktr)
printf("\n");
}
-#if defined(__amd64__) || defined(__i386__)
-void
-linux_ktrsysret(struct ktr_sysret *ktr, u_int sv_flags)
-{
- register_t ret = ktr->ktr_retval;
- int error = ktr->ktr_error;
-
- syscallname(ktr->ktr_code, sv_flags);
- printf(" ");
-
- if (error == 0) {
- if (fancy) {
- printf("%ld", (long)ret);
- if (ret < 0 || ret > 9)
- printf("/%#lx", (unsigned long)ret);
- } else {
- if (decimal)
- printf("%ld", (long)ret);
- else
- printf("%#lx", (unsigned long)ret);
- }
- } else if (error == ERESTART)
- printf("RESTART");
- else if (error == EJUSTRETURN)
- printf("JUSTRETURN");
- else {
- if (ktr->ktr_error <= ELAST + 1)
- error = abs(bsd_to_linux_errno[ktr->ktr_error]);
- else
- error = 999;
- printf("-1 errno %d", error);
- if (fancy)
- printf(" %s", strerror(ktr->ktr_error));
- }
- putchar('\n');
-}
-#endif
-
void
usage(void)
{
diff --git a/usr.bin/truss/Makefile b/usr.bin/truss/Makefile
index b28098c802a8d..7ba439283edc3 100644
--- a/usr.bin/truss/Makefile
+++ b/usr.bin/truss/Makefile
@@ -2,7 +2,7 @@
NO_WERROR=
PROG= truss
-SRCS= cloudabi.c main.c setup.c syscalls.c
+SRCS= main.c setup.c syscalls.c
LIBADD= sysdecode
diff --git a/usr.bin/truss/aarch64-cloudabi64.c b/usr.bin/truss/aarch64-cloudabi64.c
index f2891afe02a87..27906ea9204f7 100644
--- a/usr.bin/truss/aarch64-cloudabi64.c
+++ b/usr.bin/truss/aarch64-cloudabi64.c
@@ -31,11 +31,9 @@ __FBSDID("$FreeBSD$");
#include <machine/armreg.h>
-#include <errno.h>
#include <stdio.h>
#include <sysdecode.h>
-#include "cloudabi.h"
#include "truss.h"
static int
@@ -74,8 +72,6 @@ aarch64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *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);
}
diff --git a/usr.bin/truss/amd64-cloudabi64.c b/usr.bin/truss/amd64-cloudabi64.c
index ce8b18918fd80..f7d7c1aa14427 100644
--- a/usr.bin/truss/amd64-cloudabi64.c
+++ b/usr.bin/truss/amd64-cloudabi64.c
@@ -31,11 +31,9 @@ __FBSDID("$FreeBSD$");
#include <machine/psl.h>
-#include <errno.h>
#include <stdio.h>
#include <sysdecode.h>
-#include "cloudabi.h"
#include "truss.h"
static int
@@ -83,8 +81,6 @@ amd64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval,
retval[0] = regs.r_rax;
retval[1] = regs.r_rdx;
*errorp = (regs.r_rflags & PSL_C) != 0;
- if (*errorp)
- retval[0] = cloudabi_convert_errno(retval[0]);
return (0);
}
diff --git a/usr.bin/truss/amd64-linux32.c b/usr.bin/truss/amd64-linux32.c
index 873ef01ee3866..279d2285b3b32 100644
--- a/usr.bin/truss/amd64-linux32.c
+++ b/usr.bin/truss/amd64-linux32.c
@@ -83,28 +83,12 @@ amd64_linux32_fetch_args(struct trussinfo *trussinfo, u_int narg)
return (0);
}
-/*
- * Linux syscalls return negative errno's, we do positive and map them
- */
-static const int bsd_to_linux_errno[] = {
- -0, -1, -2, -3, -4, -5, -6, -7, -8, -9,
- -10, -35, -12, -13, -14, -15, -16, -17, -18, -19,
- -20, -21, -22, -23, -24, -25, -26, -27, -28, -29,
- -30, -31, -32, -33, -34, -11,-115,-114, -88, -89,
- -90, -91, -92, -93, -94, -95, -96, -97, -98, -99,
- -100,-101,-102,-103,-104,-105,-106,-107,-108,-109,
- -110,-111, -40, -36,-112,-113, -39, -11, -87,-122,
- -116, -66, -6, -6, -6, -6, -6, -37, -38, -9,
- -6,
-};
-
static int
amd64_linux32_fetch_retval(struct trussinfo *trussinfo, long *retval,
int *errorp)
{
struct reg regs;
lwpid_t tid;
- size_t i;
tid = trussinfo->curthread->tid;
if (ptrace(PT_GETREGS, tid, (caddr_t)&regs, 0) < 0) {
@@ -117,17 +101,6 @@ amd64_linux32_fetch_retval(struct trussinfo *trussinfo, long *retval,
*errorp = !!(regs.r_rflags & PSL_C);
if (*errorp)
retval[0] = (int)retval[0];
-
- if (*errorp) {
- for (i = 0; i < nitems(bsd_to_linux_errno); i++) {
- if (retval[0] == bsd_to_linux_errno[i]) {
- retval[0] = i;
- return (0);
- }
- }
-
- /* XXX: How to handle unknown errors? */
- }
return (0);
}
diff --git a/usr.bin/truss/cloudabi.c b/usr.bin/truss/cloudabi.c
deleted file mode 100644
index d4265002739d0..0000000000000
--- a/usr.bin/truss/cloudabi.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*-
- * 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]);
-}
diff --git a/usr.bin/truss/cloudabi.h b/usr.bin/truss/cloudabi.h
deleted file mode 100644
index abc8c0cd65a1a..0000000000000
--- a/usr.bin/truss/cloudabi.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*-
- * 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);
diff --git a/usr.bin/truss/i386-linux.c b/usr.bin/truss/i386-linux.c
index c5f625d7303bf..52232b41d4502 100644
--- a/usr.bin/truss/i386-linux.c
+++ b/usr.bin/truss/i386-linux.c
@@ -83,27 +83,11 @@ i386_linux_fetch_args(struct trussinfo *trussinfo, u_int narg)
return (0);
}
-/*
- * Linux syscalls return negative errno's, we do positive and map them
- */
-static const int bsd_to_linux_errno[] = {
- -0, -1, -2, -3, -4, -5, -6, -7, -8, -9,
- -10, -35, -12, -13, -14, -15, -16, -17, -18, -19,
- -20, -21, -22, -23, -24, -25, -26, -27, -28, -29,
- -30, -31, -32, -33, -34, -11,-115,-114, -88, -89,
- -90, -91, -92, -93, -94, -95, -96, -97, -98, -99,
- -100,-101,-102,-103,-104,-105,-106,-107,-108,-109,
- -110,-111, -40, -36,-112,-113, -39, -11, -87,-122,
- -116, -66, -6, -6, -6, -6, -6, -37, -38, -9,
- -6,
-};
-
static int
i386_linux_fetch_retval(struct trussinfo *trussinfo, long *retval, int *errorp)
{
struct reg regs;
lwpid_t tid;
- size_t i;
tid = trussinfo->curthread->tid;
if (ptrace(PT_GETREGS, tid, (caddr_t)&regs, 0) < 0) {
@@ -114,17 +98,6 @@ i386_linux_fetch_retval(struct trussinfo *trussinfo, long *retval, int *errorp)
retval[0] = regs.r_eax;
retval[1] = regs.r_edx;
*errorp = !!(regs.r_eflags & PSL_C);
-
- if (*errorp) {
- for (i = 0; i < nitems(bsd_to_linux_errno); i++) {
- if (retval[0] == bsd_to_linux_errno[i]) {
- retval[0] = i;
- return (0);
- }
- }
-
- /* XXX: How to handle unknown errors? */
- }
return (0);
}
diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c
index 97723211c7aa0..b3a4c423f7b70 100644
--- a/usr.bin/truss/syscalls.c
+++ b/usr.bin/truss/syscalls.c
@@ -2039,6 +2039,7 @@ print_syscall_ret(struct trussinfo *trussinfo, int errorp, long *retval)
struct timespec timediff;
struct threadinfo *t;
struct syscall *sc;
+ int error;
t = trussinfo->curthread;
sc = t->cs.sc;
@@ -2053,9 +2054,12 @@ print_syscall_ret(struct trussinfo *trussinfo, int errorp, long *retval)
print_syscall(trussinfo);
fflush(trussinfo->outfile);
- if (errorp)
+ if (errorp) {
+ error = sysdecode_abi_to_freebsd_errno(t->proc->abi->abi,
+ retval[0]);
fprintf(trussinfo->outfile, " ERR#%ld '%s'\n", retval[0],
- strerror(retval[0]));
+ error == INT_MAX ? "Unknown error" : strerror(error));
+ }
#ifndef __LP64__
else if (sc->ret_type == 2) {
off_t off;