Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137890678
D3836.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
20 KB
Referenced Files
None
Subscribers
None
D3836.id.diff
View Options
Index: head/sys/compat/cloudabi/cloudabi_syscalldefs.h
===================================================================
--- head/sys/compat/cloudabi/cloudabi_syscalldefs.h
+++ head/sys/compat/cloudabi/cloudabi_syscalldefs.h
@@ -28,12 +28,19 @@
#ifndef _CLOUDABI_SYSCALLDEFS_H_
#define _CLOUDABI_SYSCALLDEFS_H_
+#ifdef _KERNEL
#include <sys/types.h>
#include <sys/stdint.h>
#define alignas _Alignas
#define alignof _Alignof
#define static_assert _Static_assert
+#else
+#include <assert.h>
+#include <stdalign.h>
+#include <stddef.h>
+#include <stdint.h>
+#endif
/* Import machine-independent CloudABI definitions. */
#include <contrib/cloudabi/syscalldefs_mi.h>
Index: head/usr.bin/truss/Makefile
===================================================================
--- head/usr.bin/truss/Makefile
+++ head/usr.bin/truss/Makefile
@@ -13,7 +13,7 @@
.PATH: ${.CURDIR:H}/kdump
SRCS+= utrace.c
-CFLAGS+= -I${.CURDIR} -I.
+CFLAGS+= -I${.CURDIR} -I. -I${.CURDIR}/../../sys
CLEANFILES= syscalls.master syscalls.h ioctl.c
.SUFFIXES: .master
Index: head/usr.bin/truss/amd64-cloudabi64.c
===================================================================
--- head/usr.bin/truss/amd64-cloudabi64.c
+++ head/usr.bin/truss/amd64-cloudabi64.c
@@ -34,6 +34,8 @@
#include <errno.h>
#include <stdio.h>
+#include <compat/cloudabi/cloudabi_syscalldefs.h>
+
#include "cloudabi64_syscalls.h"
#include "truss.h"
@@ -67,18 +69,82 @@
}
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,
+ [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
@@ -97,7 +163,8 @@
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))
+ if (*errorp && *retval >= 0 && *retval < nitems(cloudabi_errno_table) &&
+ cloudabi_errno_table[*retval] != 0)
*retval = cloudabi_errno_table[*retval];
return (0);
}
Index: head/usr.bin/truss/syscall.h
===================================================================
--- head/usr.bin/truss/syscall.h
+++ head/usr.bin/truss/syscall.h
@@ -37,14 +37,21 @@
* $FreeBSD$
*/
-enum Argtype { None = 1, Hex, Octal, Int, LongHex, Name, Ptr, Stat, Ioctl, Quad,
- Signal, Sockaddr, StringArray, Timespec, Timeval, Itimerval, Pollfd,
- Fd_set, Sigaction, Fcntl, Mprot, Mmapflags, Whence, Readlinkres,
+enum Argtype { None = 1, Hex, Octal, Int, UInt, LongHex, Name, Ptr, Stat, Ioctl,
+ Quad, Signal, Sockaddr, StringArray, Timespec, Timeval, Itimerval,
+ Pollfd, Fd_set, Sigaction, Fcntl, Mprot, Mmapflags, Whence, Readlinkres,
Sigset, Sigprocmask, StatFs, Kevent, Sockdomain, Socktype, Open,
Fcntlflag, Rusage, BinString, Shutdown, Resource, Rlimit, Timeval2,
Pathconf, Rforkflags, ExitStatus, Waitoptions, Idtype, Procctl,
LinuxSockArgs, Umtxop, Atfd, Atflags, Timespec2, Accessmode, Long,
- Sysarch, ExecArgs, ExecEnv, PipeFds, QuadHex, Utrace };
+ Sysarch, ExecArgs, ExecEnv, PipeFds, QuadHex, Utrace, IntArray,
+
+ CloudABIAdvice, CloudABIClockID, ClouduABIFDSFlags,
+ CloudABIFDStat, CloudABIFileStat, CloudABIFileType,
+ CloudABIFSFlags, CloudABILookup, CloudABIMFlags, CloudABIMProt,
+ CloudABIMSFlags, CloudABIOFlags, CloudABISDFlags,
+ CloudABISignal, CloudABISockStat, CloudABISSFlags,
+ CloudABITimestamp, CloudABIULFlags, CloudABIWhence };
#define ARG_MASK 0xff
#define OUT 0x100
Index: head/usr.bin/truss/syscalls.c
===================================================================
--- head/usr.bin/truss/syscalls.c
+++ head/usr.bin/truss/syscalls.c
@@ -59,6 +59,7 @@
#include <fcntl.h>
#include <poll.h>
#include <signal.h>
+#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
@@ -68,6 +69,8 @@
#include <unistd.h>
#include <vis.h>
+#include <compat/cloudabi/cloudabi_syscalldefs.h>
+
#include "truss.h"
#include "extern.h"
#include "syscall.h"
@@ -382,6 +385,120 @@
{ .name = "linux_stat64", .ret_type = 1, .nargs = 3,
.args = { { Name | IN, 0 }, { Ptr | OUT, 1 }, { Ptr | IN, 1 } } },
+ /* CloudABI system calls. */
+ { .name = "cloudabi_sys_clock_res_get", .ret_type = 1, .nargs = 1,
+ .args = { { CloudABIClockID, 0 } } },
+ { .name = "cloudabi_sys_clock_time_get", .ret_type = 1, .nargs = 2,
+ .args = { { CloudABIClockID, 0 }, { CloudABITimestamp, 1 } } },
+ { .name = "cloudabi_sys_condvar_signal", .ret_type = 1, .nargs = 3,
+ .args = { { Ptr, 0 }, { CloudABIMFlags, 1 }, { UInt, 2 } } },
+ { .name = "cloudabi_sys_fd_close", .ret_type = 1, .nargs = 1,
+ .args = { { Int, 0 } } },
+ { .name = "cloudabi_sys_fd_create1", .ret_type = 1, .nargs = 1,
+ .args = { { CloudABIFileType, 0 } } },
+ { .name = "cloudabi_sys_fd_create2", .ret_type = 1, .nargs = 2,
+ .args = { { CloudABIFileType, 0 }, { PipeFds | OUT, 0 } } },
+ { .name = "cloudabi_sys_fd_datasync", .ret_type = 1, .nargs = 1,
+ .args = { { Int, 0 } } },
+ { .name = "cloudabi_sys_fd_dup", .ret_type = 1, .nargs = 1,
+ .args = { { Int, 0 } } },
+ { .name = "cloudabi_sys_fd_replace", .ret_type = 1, .nargs = 2,
+ .args = { { Int, 0 }, { Int, 1 } } },
+ { .name = "cloudabi_sys_fd_seek", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { Int, 1 }, { CloudABIWhence, 2 } } },
+ { .name = "cloudabi_sys_fd_stat_get", .ret_type = 1, .nargs = 2,
+ .args = { { Int, 0 }, { CloudABIFDStat | OUT, 1 } } },
+ { .name = "cloudabi_sys_fd_stat_put", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { CloudABIFDStat | IN, 1 },
+ { ClouduABIFDSFlags, 2 } } },
+ { .name = "cloudabi_sys_fd_sync", .ret_type = 1, .nargs = 1,
+ .args = { { Int, 0 } } },
+ { .name = "cloudabi_sys_file_advise", .ret_type = 1, .nargs = 4,
+ .args = { { Int, 0 }, { Int, 1 }, { Int, 2 },
+ { CloudABIAdvice, 3 } } },
+ { .name = "cloudabi_sys_file_allocate", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { Int, 1 }, { Int, 2 } } },
+ { .name = "cloudabi_sys_file_create", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { BinString | IN, 1 },
+ { CloudABIFileType, 3 } } },
+ { .name = "cloudabi_sys_file_link", .ret_type = 1, .nargs = 4,
+ .args = { { CloudABILookup, 0 }, { BinString | IN, 1 },
+ { Int, 3 }, { BinString | IN, 4 } } },
+ { .name = "cloudabi_sys_file_open", .ret_type = 1, .nargs = 4,
+ .args = { { Int, 0 }, { BinString | IN, 1 },
+ { CloudABIOFlags, 3 }, { CloudABIFDStat | IN, 4 } } },
+ { .name = "cloudabi_sys_file_readdir", .ret_type = 1, .nargs = 4,
+ .args = { { Int, 0 }, { BinString | OUT, 1 }, { Int, 2 },
+ { Int, 3 } } },
+ { .name = "cloudabi_sys_file_readlink", .ret_type = 1, .nargs = 4,
+ .args = { { Int, 0 }, { BinString | IN, 1 },
+ { BinString | OUT, 3 }, { Int, 4 } } },
+ { .name = "cloudabi_sys_file_rename", .ret_type = 1, .nargs = 4,
+ .args = { { Int, 0 }, { BinString | IN, 1 },
+ { Int, 3 }, { BinString | IN, 4 } } },
+ { .name = "cloudabi_sys_file_stat_fget", .ret_type = 1, .nargs = 2,
+ .args = { { Int, 0 }, { CloudABIFileStat | OUT, 1 } } },
+ { .name = "cloudabi_sys_file_stat_fput", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { CloudABIFileStat | IN, 1 },
+ { CloudABIFSFlags, 2 } } },
+ { .name = "cloudabi_sys_file_stat_get", .ret_type = 1, .nargs = 3,
+ .args = { { CloudABILookup, 0 }, { BinString | IN, 1 },
+ { CloudABIFileStat | OUT, 3 } } },
+ { .name = "cloudabi_sys_file_stat_put", .ret_type = 1, .nargs = 4,
+ .args = { { CloudABILookup, 0 }, { BinString | IN, 1 },
+ { CloudABIFileStat | IN, 3 }, { CloudABIFSFlags, 4 } } },
+ { .name = "cloudabi_sys_file_symlink", .ret_type = 1, .nargs = 3,
+ .args = { { BinString | IN, 0 },
+ { Int, 2 }, { BinString | IN, 3 } } },
+ { .name = "cloudabi_sys_file_unlink", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { BinString | IN, 1 },
+ { CloudABIULFlags, 3 } } },
+ { .name = "cloudabi_sys_lock_unlock", .ret_type = 1, .nargs = 2,
+ .args = { { Ptr, 0 }, { CloudABIMFlags, 1 } } },
+ { .name = "cloudabi_sys_mem_advise", .ret_type = 1, .nargs = 3,
+ .args = { { Ptr, 0 }, { Int, 1 }, { CloudABIAdvice, 2 } } },
+ { .name = "cloudabi_sys_mem_lock", .ret_type = 1, .nargs = 2,
+ .args = { { Ptr, 0 }, { Int, 1 } } },
+ { .name = "cloudabi_sys_mem_map", .ret_type = 1, .nargs = 6,
+ .args = { { Ptr, 0 }, { Int, 1 }, { CloudABIMProt, 2 },
+ { CloudABIMFlags, 3 }, { Int, 4 }, { Int, 5 } } },
+ { .name = "cloudabi_sys_mem_protect", .ret_type = 1, .nargs = 3,
+ .args = { { Ptr, 0 }, { Int, 1 }, { CloudABIMProt, 2 } } },
+ { .name = "cloudabi_sys_mem_sync", .ret_type = 1, .nargs = 3,
+ .args = { { Ptr, 0 }, { Int, 1 }, { CloudABIMSFlags, 2 } } },
+ { .name = "cloudabi_sys_mem_unlock", .ret_type = 1, .nargs = 2,
+ .args = { { Ptr, 0 }, { Int, 1 } } },
+ { .name = "cloudabi_sys_mem_unmap", .ret_type = 1, .nargs = 2,
+ .args = { { Ptr, 0 }, { Int, 1 } } },
+ { .name = "cloudabi_sys_proc_exec", .ret_type = 1, .nargs = 5,
+ .args = { { Int, 0 }, { BinString | IN, 1 }, { Int, 2 },
+ { IntArray, 3 }, { Int, 4 } } },
+ { .name = "cloudabi_sys_proc_exit", .ret_type = 1, .nargs = 1,
+ .args = { { Int, 0 } } },
+ { .name = "cloudabi_sys_proc_fork", .ret_type = 1, .nargs = 0 },
+ { .name = "cloudabi_sys_proc_raise", .ret_type = 1, .nargs = 1,
+ .args = { { CloudABISignal, 0 } } },
+ { .name = "cloudabi_sys_random_get", .ret_type = 1, .nargs = 2,
+ .args = { { BinString | OUT, 0 }, { Int, 1 } } },
+ { .name = "cloudabi_sys_sock_accept", .ret_type = 1, .nargs = 2,
+ .args = { { Int, 0 }, { CloudABISockStat | OUT, 1 } } },
+ { .name = "cloudabi_sys_sock_bind", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { Int, 1 }, { BinString | IN, 2 } } },
+ { .name = "cloudabi_sys_sock_connect", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { Int, 1 }, { BinString | IN, 2 } } },
+ { .name = "cloudabi_sys_sock_listen", .ret_type = 1, .nargs = 2,
+ .args = { { Int, 0 }, { Int, 1 } } },
+ { .name = "cloudabi_sys_sock_shutdown", .ret_type = 1, .nargs = 2,
+ .args = { { Int, 0 }, { CloudABISDFlags, 1 } } },
+ { .name = "cloudabi_sys_sock_stat_get", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { CloudABISockStat | OUT, 1 },
+ { CloudABISSFlags, 2 } } },
+ { .name = "cloudabi_sys_thread_exit", .ret_type = 1, .nargs = 2,
+ .args = { { Ptr, 0 }, { CloudABIMFlags, 1 } } },
+ { .name = "cloudabi_sys_thread_tcb_set", .ret_type = 1, .nargs = 1,
+ .args = { { Ptr, 0 } } },
+ { .name = "cloudabi_sys_thread_yield", .ret_type = 1, .nargs = 0 },
+
{ .name = 0 },
};
static STAILQ_HEAD(, syscall) syscalls;
@@ -598,6 +715,126 @@
};
#undef X
+#define X(a) { CLOUDABI_##a, #a },
+
+static struct xlat cloudabi_advice[] = {
+ X(ADVICE_DONTNEED) X(ADVICE_NOREUSE) X(ADVICE_NORMAL)
+ X(ADVICE_RANDOM) X(ADVICE_SEQUENTIAL) X(ADVICE_WILLNEED)
+ XEND
+};
+
+static struct xlat cloudabi_clockid[] = {
+ X(CLOCK_MONOTONIC) X(CLOCK_PROCESS_CPUTIME_ID)
+ X(CLOCK_REALTIME) X(CLOCK_THREAD_CPUTIME_ID)
+ XEND
+};
+
+static struct xlat cloudabi_errno[] = {
+ X(E2BIG) X(EACCES) X(EADDRINUSE) X(EADDRNOTAVAIL)
+ X(EAFNOSUPPORT) X(EAGAIN) X(EALREADY) X(EBADF) X(EBADMSG)
+ X(EBUSY) X(ECANCELED) X(ECHILD) X(ECONNABORTED) X(ECONNREFUSED)
+ X(ECONNRESET) X(EDEADLK) X(EDESTADDRREQ) X(EDOM) X(EDQUOT)
+ X(EEXIST) X(EFAULT) X(EFBIG) X(EHOSTUNREACH) X(EIDRM) X(EILSEQ)
+ X(EINPROGRESS) X(EINTR) X(EINVAL) X(EIO) X(EISCONN) X(EISDIR)
+ X(ELOOP) X(EMFILE) X(EMLINK) X(EMSGSIZE) X(EMULTIHOP)
+ X(ENAMETOOLONG) X(ENETDOWN) X(ENETRESET) X(ENETUNREACH)
+ X(ENFILE) X(ENOBUFS) X(ENODEV) X(ENOENT) X(ENOEXEC) X(ENOLCK)
+ X(ENOLINK) X(ENOMEM) X(ENOMSG) X(ENOPROTOOPT) X(ENOSPC)
+ X(ENOSYS) X(ENOTCONN) X(ENOTDIR) X(ENOTEMPTY) X(ENOTRECOVERABLE)
+ X(ENOTSOCK) X(ENOTSUP) X(ENOTTY) X(ENXIO) X(EOVERFLOW)
+ X(EOWNERDEAD) X(EPERM) X(EPIPE) X(EPROTO) X(EPROTONOSUPPORT)
+ X(EPROTOTYPE) X(ERANGE) X(EROFS) X(ESPIPE) X(ESRCH) X(ESTALE)
+ X(ETIMEDOUT) X(ETXTBSY) X(EXDEV) X(ENOTCAPABLE)
+ XEND
+};
+
+static struct xlat cloudabi_fdflags[] = {
+ X(FDFLAG_APPEND) X(FDFLAG_DSYNC) X(FDFLAG_NONBLOCK)
+ X(FDFLAG_RSYNC) X(FDFLAG_SYNC)
+ XEND
+};
+
+static struct xlat cloudabi_fdsflags[] = {
+ X(FDSTAT_FLAGS) X(FDSTAT_RIGHTS)
+ XEND
+};
+
+static struct xlat cloudabi_filetype[] = {
+ X(FILETYPE_UNKNOWN) X(FILETYPE_BLOCK_DEVICE)
+ X(FILETYPE_CHARACTER_DEVICE) X(FILETYPE_DIRECTORY)
+ X(FILETYPE_FIFO) X(FILETYPE_POLL) X(FILETYPE_PROCESS)
+ X(FILETYPE_REGULAR_FILE) X(FILETYPE_SHARED_MEMORY)
+ X(FILETYPE_SOCKET_DGRAM) X(FILETYPE_SOCKET_SEQPACKET)
+ X(FILETYPE_SOCKET_STREAM) X(FILETYPE_SYMBOLIC_LINK)
+ XEND
+};
+
+static struct xlat cloudabi_fsflags[] = {
+ X(FILESTAT_ATIM) X(FILESTAT_ATIM_NOW) X(FILESTAT_MTIM)
+ X(FILESTAT_MTIM_NOW) X(FILESTAT_SIZE)
+ XEND
+};
+
+static struct xlat cloudabi_mflags[] = {
+ X(MAP_ANON) X(MAP_FIXED) X(MAP_PRIVATE) X(MAP_SHARED)
+ XEND
+};
+
+static struct xlat cloudabi_mprot[] = {
+ X(PROT_EXEC) X(PROT_WRITE) X(PROT_READ)
+ XEND
+};
+
+static struct xlat cloudabi_msflags[] = {
+ X(MS_ASYNC) X(MS_INVALIDATE) X(MS_SYNC)
+ XEND
+};
+
+static struct xlat cloudabi_oflags[] = {
+ X(O_CREAT) X(O_DIRECTORY) X(O_EXCL) X(O_TRUNC)
+ XEND
+};
+
+static struct xlat cloudabi_sa_family[] = {
+ X(AF_UNSPEC) X(AF_INET) X(AF_INET6) X(AF_UNIX)
+ XEND
+};
+
+static struct xlat cloudabi_sdflags[] = {
+ X(SHUT_RD) X(SHUT_WR)
+ XEND
+};
+
+static struct xlat cloudabi_signal[] = {
+ X(SIGABRT) X(SIGALRM) X(SIGBUS) X(SIGCHLD) X(SIGCONT) X(SIGFPE)
+ X(SIGHUP) X(SIGILL) X(SIGINT) X(SIGKILL) X(SIGPIPE) X(SIGQUIT)
+ X(SIGSEGV) X(SIGSTOP) X(SIGSYS) X(SIGTERM) X(SIGTRAP) X(SIGTSTP)
+ X(SIGTTIN) X(SIGTTOU) X(SIGURG) X(SIGUSR1) X(SIGUSR2)
+ X(SIGVTALRM) X(SIGXCPU) X(SIGXFSZ)
+ XEND
+};
+
+static struct xlat cloudabi_ssflags[] = {
+ X(SOCKSTAT_CLEAR_ERROR)
+ XEND
+};
+
+static struct xlat cloudabi_ssstate[] = {
+ X(SOCKSTAT_ACCEPTCONN)
+ XEND
+};
+
+static struct xlat cloudabi_ulflags[] = {
+ X(UNLINK_REMOVEDIR)
+ XEND
+};
+
+static struct xlat cloudabi_whence[] = {
+ X(WHENCE_CUR) X(WHENCE_END) X(WHENCE_SET)
+ XEND
+};
+
+#undef X
#undef XEND
/*
@@ -910,6 +1147,9 @@
case Int:
fprintf(fp, "%d", (int)args[sc->offset]);
break;
+ case UInt:
+ fprintf(fp, "%u", (unsigned int)args[sc->offset]);
+ break;
case LongHex:
fprintf(fp, "0x%lx", args[sc->offset]);
break;
@@ -1638,6 +1878,122 @@
free(utrace_addr);
break;
}
+ case IntArray: {
+ int descriptors[16];
+ unsigned long i, ndescriptors;
+ bool truncated;
+
+ ndescriptors = args[sc->offset + 1];
+ truncated = false;
+ if (ndescriptors > nitems(descriptors)) {
+ ndescriptors = nitems(descriptors);
+ truncated = true;
+ }
+ if (get_struct(pid, (void *)args[sc->offset],
+ descriptors, ndescriptors * sizeof(descriptors[0])) != -1) {
+ fprintf(fp, "{");
+ for (i = 0; i < ndescriptors; i++)
+ fprintf(fp, i == 0 ? " %d" : ", %d",
+ descriptors[i]);
+ fprintf(fp, truncated ? ", ... }" : " }");
+ } else
+ fprintf(fp, "0x%lx", args[sc->offset]);
+ break;
+ }
+
+ case CloudABIAdvice:
+ fputs(xlookup(cloudabi_advice, args[sc->offset]), fp);
+ break;
+ case CloudABIClockID:
+ fputs(xlookup(cloudabi_clockid, args[sc->offset]), fp);
+ break;
+ case ClouduABIFDSFlags:
+ fputs(xlookup_bits(cloudabi_fdsflags, args[sc->offset]), fp);
+ break;
+ case CloudABIFDStat: {
+ cloudabi_fdstat_t fds;
+ if (get_struct(pid, (void *)args[sc->offset], &fds, sizeof(fds))
+ != -1) {
+ fprintf(fp, "{ %s, ",
+ xlookup(cloudabi_filetype, fds.fs_filetype));
+ fprintf(fp, "%s, ... }",
+ xlookup_bits(cloudabi_fdflags, fds.fs_flags));
+ } else
+ fprintf(fp, "0x%lx", args[sc->offset]);
+ break;
+ }
+ case CloudABIFileStat: {
+ cloudabi_filestat_t fsb;
+ if (get_struct(pid, (void *)args[sc->offset], &fsb, sizeof(fsb))
+ != -1)
+ fprintf(fp, "{ %s, %lu }",
+ xlookup(cloudabi_filetype, fsb.st_filetype),
+ fsb.st_size);
+ else
+ fprintf(fp, "0x%lx", args[sc->offset]);
+ break;
+ }
+ case CloudABIFileType:
+ fputs(xlookup(cloudabi_filetype, args[sc->offset]), fp);
+ break;
+ case CloudABIFSFlags:
+ fputs(xlookup_bits(cloudabi_fsflags, args[sc->offset]), fp);
+ break;
+ case CloudABILookup:
+ if ((args[sc->offset] & CLOUDABI_LOOKUP_SYMLINK_FOLLOW) != 0)
+ fprintf(fp, "%d|LOOKUP_SYMLINK_FOLLOW",
+ (int)args[sc->offset]);
+ else
+ fprintf(fp, "%d", (int)args[sc->offset]);
+ break;
+ case CloudABIMFlags:
+ fputs(xlookup_bits(cloudabi_mflags, args[sc->offset]), fp);
+ break;
+ case CloudABIMProt:
+ fputs(xlookup_bits(cloudabi_mprot, args[sc->offset]), fp);
+ break;
+ case CloudABIMSFlags:
+ fputs(xlookup_bits(cloudabi_msflags, args[sc->offset]), fp);
+ break;
+ case CloudABIOFlags:
+ fputs(xlookup_bits(cloudabi_oflags, args[sc->offset]), fp);
+ break;
+ case CloudABISDFlags:
+ fputs(xlookup_bits(cloudabi_sdflags, args[sc->offset]), fp);
+ break;
+ case CloudABISignal:
+ fputs(xlookup(cloudabi_signal, args[sc->offset]), fp);
+ break;
+ case CloudABISockStat: {
+ cloudabi_sockstat_t ss;
+ if (get_struct(pid, (void *)args[sc->offset], &ss, sizeof(ss))
+ != -1) {
+ fprintf(fp, "{ %s, ", xlookup(
+ cloudabi_sa_family, ss.ss_sockname.sa_family));
+ fprintf(fp, "%s, ", xlookup(
+ cloudabi_sa_family, ss.ss_peername.sa_family));
+ fprintf(fp, "%s, ", xlookup(
+ cloudabi_errno, ss.ss_error));
+ fprintf(fp, "%s }", xlookup_bits(
+ cloudabi_ssstate, ss.ss_state));
+ } else
+ fprintf(fp, "0x%lx", args[sc->offset]);
+ break;
+ }
+ case CloudABISSFlags:
+ fputs(xlookup_bits(cloudabi_ssflags, args[sc->offset]), fp);
+ break;
+ case CloudABITimestamp:
+ fprintf(fp, "%lu.%09lus", args[sc->offset] / 1000000000,
+ args[sc->offset] % 1000000000);
+ break;
+ case CloudABIULFlags:
+ fputs(xlookup_bits(cloudabi_ulflags, args[sc->offset]), fp);
+ break;
+ case CloudABIWhence:
+ fputs(xlookup(cloudabi_whence, args[sc->offset]), fp);
+ break;
+
default:
errx(1, "Invalid argument type %d\n", sc->type & ARG_MASK);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 27, 10:38 PM (5 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26264915
Default Alt Text
D3836.id.diff (20 KB)
Attached To
Mode
D3836: Properly format pointer size independent CloudABI system calls.
Attached
Detach File
Event Timeline
Log In to Comment