Upgrade to strace 4.8.
* Changes in behavior
* In case of normal strace termination, when the trace output is
redirected to a pipe, strace now closes it and waits for the pipe
process termination before exit.
* Improvements
* Implemented tracing using PTRACE_SEIZE API (when available).
* Implemented more reliable PTRACE_GETREGSET-based process personality
detection on x86-64 and x32 (when available).
* Added -e trace=memory option for tracing memory mapping related syscalls.
* Documented -b option.
* Allowed exit status messages to be suppressed by giving -q option twice.
* Added AArch64 architecture support
(addresses Debian bug #693074 and Fedora bug #969858).
* Added support for OpenRISC 1000, Meta, and Xtensa architectures.
* Added tilegx personality support for Tile.
* Enhanced support of NOMMU architectures.
* Enhanced decoding of getdents, mmap, perf_event_open, ptrace, and
quotactl syscalls.
* Added new syscall entries to match Linux 3.9.
* Regenerated the list of common ioctl names from Linux 3.9.
* Updated the list of errno constants.
* Updated lists of AF_*, MADV_*, MAP_*, MSG_*, MS_*, PF_*, PR_*,
PTRACE_O_*, and TCP_* constants.
* Implemented decoding of UBI ioctls.
* Removed redundant "*32" ioctl names.
* Bug fixes
* Fixed ERESTARTNOINTR leaking to userspace on ancient kernels
(addresses Fedora bug #659382).
* Fixed kernel release string parsing
(addresses Debian bug #702309).
* Fixed decoding of *xattr syscalls
(addresses Fedora bug #885233).
* Fixed handling of files with 64-bit inode numbers by 32-bit strace
(addresses Fedora bug #912790).
* Fixed tracing forks on SPARC.
* Fixed decoding of fadvise64, fallocate, ftruncate64, io_submit, pread,
preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl,
and truncate64 syscalls.
* Fixed categories of multiple syscalls on most of supported architectures.
* Fixed decoding of non-native 32-bit personality recv[m]msg syscalls.
* Fixed decoding of multiple 32-bit personality syscalls on x32.
* Fixed decoding of long long syscall arguments on ARM, MIPS/o32, PowerPC,
S390x, and Tile architectures.
* Fixed semtimedop decoding on S390x.
* Fixed sram_alloc decoding on Blackfin.
* Fixed build when process_vm_readv is a stab.
* Fixed build with older versions of libaio.h.
Change-Id: I48abffaccddd616663000dcd0cc14964cae0dcd1
diff --git a/Android.mk b/Android.mk
index 11601a8..82a364e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -3,7 +3,7 @@
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
-strace_VERSION = 4.7
+strace_version := $(shell grep Version $(LOCAL_PATH)/strace.spec | cut -d " " -f 2)
LOCAL_SRC_FILES := \
bjm.c \
@@ -35,106 +35,84 @@
LOCAL_SHARED_LIBRARIES :=
-LOCAL_CFLAGS := -DLINUX=1 \
- -DGETGROUPS_T=gid_t \
- -DHAVE_ASM_SIGCONTEXT_H=1 \
- -DHAVE_DECL_PTRACE_O_TRACECLONE=1 \
- -DHAVE_DECL_PTRACE_O_TRACEEXEC=1 \
- -DHAVE_DECL_PTRACE_O_TRACEEXIT=1 \
- -DHAVE_DECL_PTRACE_O_TRACEFORK=1 \
- -DHAVE_DECL_PTRACE_O_TRACESYSGOOD=1 \
- -DHAVE_DECL_PTRACE_O_TRACEVFORK=1 \
- -DHAVE_DECL_SYS_ERRLIST=1 \
- -DHAVE_DECL_SYS_SIGLIST=1 \
- -DHAVE_DECL_____PTRACE_EVENT_CLONE=1 \
- -DHAVE_DECL_____PTRACE_EVENT_FORK=1 \
- -DHAVE_DECL_____PTRACE_EVENT_VFORK=1 \
- -DHAVE_DECL_____PTRACE_GETEVENTMSG=1 \
- -DHAVE_DECL_____PTRACE_GETSIGINFO=1 \
- -DHAVE_DECL_____PTRACE_O_TRACECLONE=1 \
- -DHAVE_DECL_____PTRACE_O_TRACEFORK=1 \
- -DHAVE_DECL_____PTRACE_O_TRACEVFORK=1 \
- -DHAVE_DECL_____PTRACE_SETOPTIONS=1 \
- -DHAVE_DECL_____PTRACE_EVENT_CLONE=1 \
- -DHAVE_DECL_____PTRACE_EVENT_CLONE=1 \
- -DHAVE_DIRENT_H=1 \
- -DHAVE_FORK=1 \
- -DHAVE_GETDENTS=1 \
- -DHAVE_IF_INDEXTONAME=1 \
- -DHAVE_INET_NTOP=1 \
- -DHAVE_INTTYPES_H=1 \
- -DHAVE_LINUX_CAPABILITY_H=1 \
- -DHAVE_LINUX_ICMP_H=1 \
- -DHAVE_LINUX_IF_PACKET_H=1 \
- -DHAVE_LINUX_IN6_H=1 \
- -DHAVE_LINUX_NETLINK_H=1 \
- -DHAVE_LINUX_UTSNAME_H=1 \
- -DHAVE_LITTLE_ENDIAN_LONG_LONG=1 \
- -DHAVE_LONG_LONG=1 \
- -DHAVE_LONG_LONG_RLIM_T=1 \
- -DHAVE_MEMORY_H=1 \
- -DHAVE_NETINET_TCP_H=1 \
- -DHAVE_NETINET_UDP_H=1 \
- -DHAVE_POLL_H=1 \
- -DHAVE_PRCTL=1 \
- -DHAVE_PREAD=1 \
- -DHAVE_SENDMSG=1 \
- -DHAVE_SIGACTION=1 \
- -DHAVE_SIGINFO_T=1 \
- -DHAVE_SIG_ATOMIC_T=1 \
- -DHAVE_STATFS64=1 \
- -DHAVE_STDBOOL_H=1 \
- -DHAVE_STDINT_H=1 \
- -DHAVE_STDLIB_H=1 \
- -DHAVE_STRERROR=1 \
- -DHAVE_STRINGS_H=1 \
- -DHAVE_STRING_H=1 \
- -DHAVE_STRSIGNAL=1 \
- -DHAVE_STRUCT_MSGHDR_MSG_CONTROL=1 \
- -DHAVE_STRUCT_SIGCONTEXT \
- -DHAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID=1 \
- -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 \
- -DHAVE_STRUCT_STAT_ST_BLOCKS=1 \
- -DHAVE_STRUCT_STAT_ST_RDEV=1 \
- -DHAVE_STRUCT_USER_DESC=1 \
- -DHAVE_SYS_EPOLL_H=1 \
- -DHAVE_SYS_IOCTL_H=1 \
- -DHAVE_SYS_POLL_H=1 \
- -DHAVE_SYS_PTRACE_H=1 \
- -DHAVE_SYS_REG_H=1 \
- -DHAVE_SYS_SIGLIST=1 \
- -DHAVE_SYS_STAT_H=1 \
- -DHAVE_SYS_TYPES_H=1 \
- -DHAVE_SYS_VFS_H=1 \
- -DHAVE_UNISTD_H=1 \
- -DLINUX=1 \
- -DMAJOR_IN_SYSMACROS \
- -DPACKAGE=strace \
- -DPACKAGE_BUGREPORT= \
- -DPACKAGE_NAME='"strace"' \
- -DPACKAGE_STRING='"strace $(strace_VERSION)"' \
- -DPACKAGE_TARNAME='"strace"' \
- -DPACKAGE_VERSION='"$(strace_VERSION)"' \
- -DRETSIGTYPE=void \
- -DSIZEOF_RLIM_T=8 \
- -DSTDC_HEADER=1 \
- -DVERSION='"$(strace_VERSION)"' \
- -D_GNU_SOURCE=1 \
- -D_POSIX_SOURCE=1 \
- -Dfopen64=fopen \
- -Dd_fileno=d_ino \
- -D_LFS64_LARGEFILE=1 \
- -D__KERNEL__=1 \
+LOCAL_CFLAGS := \
+ -DGETGROUPS_T=gid_t \
+ -DHAVE_ASM_SIGCONTEXT_H=1 \
+ -DHAVE_DECL_PTRACE_EVENT_FORK=1 \
+ -DHAVE_DECL_PTRACE_EVENT_VFORK=1 \
+ -DHAVE_DECL_PTRACE_EVENT_CLONE=1 \
+ -DHAVE_DECL_PTRACE_EVENT_EXEC=1 \
+ -DHAVE_DECL_PTRACE_EVENT_VFORK_DONE=1 \
+ -DHAVE_DECL_PTRACE_EVENT_EXIT=1 \
+ -DHAVE_DECL_PTRACE_GETEVENTMSG=1 \
+ -DHAVE_DECL_PTRACE_GETSIGINFO=1 \
+ -DHAVE_DECL_PTRACE_O_TRACECLONE=1 \
+ -DHAVE_DECL_PTRACE_O_TRACEEXEC=1 \
+ -DHAVE_DECL_PTRACE_O_TRACEEXIT=1 \
+ -DHAVE_DECL_PTRACE_O_TRACEFORK=1 \
+ -DHAVE_DECL_PTRACE_O_TRACESYSGOOD=1 \
+ -DHAVE_DECL_PTRACE_O_TRACEVFORK=1 \
+ -DHAVE_DECL_PTRACE_SETOPTIONS=1 \
+ -UHAVE_DECL_IO_CMD_PWRITE \
+ -UHAVE_DECL_IO_CMD_PWRITEV \
+ -UHAVE_DECL_LO_FLAGS_AUTOCLEAR \
+ -UHAVE_DECL_LO_FLAGS_PARTSCAN \
+ -DHAVE_DECL_SYS_ERRLIST=1 \
+ -DHAVE_FORK=1 \
+ -DHAVE_IF_INDEXTONAME=1 \
+ -DHAVE_INET_NTOP=1 \
+ -DHAVE_LINUX_CAPABILITY_H=1 \
+ -DHAVE_LINUX_ICMP_H=1 \
+ -DHAVE_LINUX_IF_PACKET_H=1 \
+ -DHAVE_LINUX_IN6_H=1 \
+ -DHAVE_LINUX_NETLINK_H=1 \
+ -DHAVE_LITTLE_ENDIAN_LONG_LONG=1 \
+ -DHAVE_LONG_LONG=1 \
+ -DHAVE_NETINET_TCP_H=1 \
+ -DHAVE_NETINET_UDP_H=1 \
+ -DHAVE_POLL_H=1 \
+ -DHAVE_PRCTL=1 \
+ -DHAVE_SENDMSG=1 \
+ -DHAVE_SIGACTION=1 \
+ -DHAVE_SIGINFO_T=1 \
+ -DHAVE_SIG_ATOMIC_T=1 \
+ -DHAVE_STATFS64=1 \
+ -DHAVE_STDBOOL_H=1 \
+ -DHAVE_STRERROR=1 \
+ -DHAVE_STRUCT_MSGHDR_MSG_CONTROL=1 \
+ -DHAVE_STRUCT_SIGCONTEXT \
+ -DHAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID=1 \
+ -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 \
+ -DHAVE_STRUCT_STAT_ST_BLOCKS=1 \
+ -DHAVE_STRUCT_STAT_ST_RDEV=1 \
+ -DHAVE_STRUCT_USER_DESC=1 \
+ -DHAVE_SYS_EPOLL_H=1 \
+ -DHAVE_SYS_IOCTL_H=1 \
+ -DHAVE_SYS_POLL_H=1 \
+ -DHAVE_SYS_REG_H=1 \
+ -DHAVE_SYS_VFS_H=1 \
+ -DMAJOR_IN_SYSMACROS \
+ -DPACKAGE_NAME='"strace"' \
+ -DVERSION='"$(strace_version)"' \
+ -DSIZEOF_LONG_LONG=8 \
+ -DSTDC_HEADERS=1 \
+ -D_LFS64_LARGEFILE=1 \
+
+LOCAL_CFLAGS += -D_GNU_SOURCE=1 -D_POSIX_SOURCE=1
# bionic doesn't have fputs_unlocked.
LOCAL_CFLAGS += -Dfputs_unlocked=fputs
+# bionic's LFS64 support is incomplete.
+LOCAL_CFLAGS += -Dfopen64=fopen
+LOCAL_CFLAGS += -Dreaddir64=readdir
# uapi's asm/sigcontext.h doesn't have sigcontext_struct.
LOCAL_CFLAGS += -Dsigcontext_struct=sigcontext
-#These are defined in AndroidConfig.h so we omit them above.
-# -DHAVE_SYS_UIO_H=1 \
-# -DHAVE_TERMIO_H=1 \
-
+ifeq ($(TARGET_IS_64_BIT),true)
+ LOCAL_CFLAGS += -DSIZEOF_LONG=8 -DSIZEOF_RLIM_T=8
+else
+ LOCAL_CFLAGS += -DSIZEOF_LONG=4 -DSIZEOF_RLIM_T=4
+endif
arch := $(TARGET_ARCH)
ifeq ($(TARGET_ARCH),arm)
@@ -145,7 +123,7 @@
LOCAL_CFLAGS += -DMIPS=1
LOCAL_CFLAGS += -DHAVE_STAT64=1
LOCAL_CFLAGS += -DHAVE_ASM_SYSMIPS_H=1
- # mips does not use STRUCT__OLD_KERNEL_STAT type
+ LOCAL_CFLAGS += -UHAVE_STRUCT___OLD_KERNEL_STAT
else ifeq ($(TARGET_ARCH),x86)
LOCAL_CFLAGS += -DI386=1
LOCAL_CFLAGS += -DHAVE_STAT64=1
@@ -162,9 +140,9 @@
-Wno-sign-compare \
LOCAL_C_INCLUDES := \
- $(KERNEL_HEADERS) \
- $(LOCAL_PATH)/linux/$(arch) \
- $(LOCAL_PATH)/linux
+ $(KERNEL_HEADERS) \
+ $(LOCAL_PATH)/linux/$(arch) \
+ $(LOCAL_PATH)/linux
LOCAL_MODULE := strace
diff --git a/Android.patch b/Android.patch
index 847dfcc..e6c9f21 100644
--- a/Android.patch
+++ b/Android.patch
@@ -1,18 +1,8 @@
-diff -r -u -d /home/enh/Downloads/strace-4.7/defs.h ./defs.h
---- /home/enh/Downloads/strace-4.7/defs.h 2012-04-28 05:58:35.000000000 -0700
-+++ ./defs.h 2014-01-08 17:19:46.318388528 -0800
-@@ -36,9 +36,6 @@
- # define _LFS64_LARGEFILE 1
- # endif
- #endif
--#ifdef MIPS
--# include <sgidefs.h>
--#endif
- #include <features.h>
- #ifdef HAVE_STDBOOL_H
- # include <stdbool.h>
-@@ -149,7 +146,7 @@
- extern long ptrace(int, int, char *, long);
+diff -r -u -d /home/enh/Downloads/strace-4.8/defs.h ./defs.h
+--- /home/enh/Downloads/strace-4.8/defs.h 2013-05-14 07:10:42.000000000 -0700
++++ ./defs.h 2014-01-09 13:41:19.118883996 -0800
+@@ -222,7 +222,7 @@
+ # define PTRACE_EVENT_EXIT 6
#endif
-#if !defined(__GLIBC__)
@@ -20,9 +10,9 @@
# define PTRACE_PEEKUSER PTRACE_PEEKUSR
# define PTRACE_POKEUSER PTRACE_POKEUSR
#endif
-diff -r -u -d /home/enh/Downloads/strace-4.7/ioctl.c ./ioctl.c
---- /home/enh/Downloads/strace-4.7/ioctl.c 2012-04-18 08:27:25.000000000 -0700
-+++ ./ioctl.c 2014-01-07 20:25:53.752273114 -0800
+diff -r -u -d /home/enh/Downloads/strace-4.8/ioctl.c ./ioctl.c
+--- /home/enh/Downloads/strace-4.8/ioctl.c 2013-05-02 15:50:55.000000000 -0700
++++ ./ioctl.c 2014-01-09 13:36:50.612156623 -0800
@@ -86,8 +86,10 @@
case 0x03:
case 0x12:
@@ -34,9 +24,9 @@
case 'L':
return loop_ioctl(tcp, code, arg);
case 'M':
-diff -r -u -d /home/enh/Downloads/strace-4.7/ipc.c ./ipc.c
---- /home/enh/Downloads/strace-4.7/ipc.c 2012-04-16 04:00:01.000000000 -0700
-+++ ./ipc.c 2014-01-07 20:25:53.752273114 -0800
+diff -r -u -d /home/enh/Downloads/strace-4.8/ipc.c ./ipc.c
+--- /home/enh/Downloads/strace-4.8/ipc.c 2013-02-23 11:07:44.000000000 -0800
++++ ./ipc.c 2014-01-09 13:36:50.612156623 -0800
@@ -34,9 +34,15 @@
#endif
#include <fcntl.h>
@@ -53,21 +43,9 @@
#ifndef MSG_STAT
#define MSG_STAT 11
-diff -r -u -d /home/enh/Downloads/strace-4.7/signal.c ./signal.c
---- /home/enh/Downloads/strace-4.7/signal.c 2012-04-16 19:38:17.000000000 -0700
-+++ ./signal.c 2014-01-07 20:25:53.762272989 -0800
-@@ -419,7 +419,7 @@
- # define SI_FROMUSER(sip) ((sip)->si_code <= 0)
- #endif
-
--#if __GLIBC_MINOR__ < 1
-+#if __GLIBC_MINOR__ < 1 && !defined(HAVE_ANDROID_OS)
- /* Type for data associated with a signal. */
- typedef union sigval
- {
-diff -r -u -d /home/enh/Downloads/strace-4.7/time.c ./time.c
---- /home/enh/Downloads/strace-4.7/time.c 2012-05-01 14:17:51.000000000 -0700
-+++ ./time.c 2014-01-07 20:25:53.762272989 -0800
+diff -r -u -d /home/enh/Downloads/strace-4.8/time.c ./time.c
+--- /home/enh/Downloads/strace-4.8/time.c 2012-05-01 14:17:51.000000000 -0700
++++ ./time.c 2014-01-09 12:41:29.912928183 -0800
@@ -29,7 +29,11 @@
#include "defs.h"
@@ -80,10 +58,10 @@
#include <linux/ioctl.h>
#include <linux/rtc.h>
-diff -r -u -d /home/enh/Downloads/strace-4.7/util.c ./util.c
---- /home/enh/Downloads/strace-4.7/util.c 2012-04-28 05:58:35.000000000 -0700
-+++ ./util.c 2014-01-08 17:20:55.057579140 -0800
-@@ -50,7 +50,9 @@
+diff -r -u -d /home/enh/Downloads/strace-4.8/util.c ./util.c
+--- /home/enh/Downloads/strace-4.8/util.c 2013-05-06 11:23:01.000000000 -0700
++++ ./util.c 2014-01-09 13:36:50.622156503 -0800
+@@ -46,7 +46,9 @@
#ifdef HAVE_SYS_REG_H
# include <sys/reg.h>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..e9078d3
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,29 @@
+Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
+Copyright (c) 1995, 1996 Michael Elizabeth Chastain <mec@duracef.shout.net>
+Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+Copyright (C) 1998-2001 Wichert Akkerman <wakkerma@deephackmode.org>
+All rights reserved.
+
+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.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
diff --git a/CREDITS b/CREDITS
index 98eb532..399bcaf 100644
--- a/CREDITS
+++ b/CREDITS
@@ -19,14 +19,18 @@
Anton Blanchard <anton@samba.org>
Arkadiusz Miskiewicz <misiek@pld.org.pl>
Bai Weidong <baiwd@cn.fujitsu.com>
+ Ben Noordhuis <info@bnoordhuis.nl>
Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Bo Kullmar <bk@kullmar.se>
Cai Fei <caifei@cn.fujitsu.com>
Carlos O'Donell <carlos@systemhalted.org>
Carmelo AMOROSO <carmelo.amoroso@st.com>
Chris Metcalf <cmetcalf@tilera.com>
+ Chris Zankel <chris@zankel.net>
+ Christian Svensson <blue@cmd.nu>
D.J. Barrow <djbarrow@de.ibm.com>
Damir Shayhutdinov <damir@altlinux.ru>
+ Daniel P. Berrange <berrange@redhat.com>
David Daney <ddaney@caviumnetworks.com>
David Mosberger-Tang <davidm@hpl.hp.com>
David S. Miller <davem@caip.rutgers.edu>
@@ -50,11 +54,13 @@
Holger Hans Peter Freyther <holger@freyther.de>
Jakub Bogusz <qboosh@pld-linux.org>
Jakub Jelinek <jj@ultra.linux.cz>
+ James Hogan <james.hogan@imgtec.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
Jeff Mahoney <jeffm@suse.com>
Joe Ilacqua <spike@world.std.com>
Johannes Stezenbach <js@sig21.net>
John Hughes <john@Calva.COM>
+ John Spencer <maillist-strace@barfooze.de>
Ju"rgen Fluk <louis@marco.de>
Juergen Weigert <jnweiger@immd4.informatik.uni-erlangen.de>
Keith Thompson <kst@alsys.com>
@@ -69,6 +75,7 @@
Matt Day <mday@artisoft.com>
Matthias Pfaller <leo@dachau.marco.de>
Maxim Shchetynin <maxim@de.ibm.com>
+ Maxin B. John <maxin.john@enea.com>
Michael E Chastain <mec@duracef.shout.net>
Michael Holzheu <holzheu@de.ibm.com>
Michail Litvak <mci@owl.openwall.com>
@@ -76,6 +83,7 @@
Mike Frysinger <vapier@gentoo.org>
Mike Stroyan <mike.stroyan@hp.com>
Muttley Meen <muttley.meen@gmail.com>
+ Namhyung Kim <namhyung.kim@lge.com>
Nate Eldredge <nate@cartsys.com>
Nate Sammons <nate@users.sourceforge.net>
Neil Campbell <lists@thebatcave.org.uk>
@@ -100,7 +108,9 @@
Simon Murray <simon@transitive.com>
Solar Designer <solar@openwall.com>
Srinivasa Ds <srinivasa@in.ibm.com>
+ Stanislav Brabec <sbrabec@suse.cz>
Steve Bennett <steveb@workware.net.au>
+ Steve McIntyre <steve.mcintyre@linaro.org>
Thanh Ma <tma@encore.com>
Thiemo Seufer <ths@networkno.de>
Thomas Bogendoerfer <tsbogend@bigbug.franken.de>
@@ -115,5 +125,6 @@
Xiaoning Ding <dingxn@gmail.com>
Yang Zhiguo <yzgcsu@cn.fujitsu.com>
Zach Brown <zach.brown@oracle.com>
+ Zev Weiss <zev@bewilderbeest.net>
Zhang Le <zhilg@users.sourceforge.net>
Марк Коренберг <socketpair@gmail.com>
diff --git a/ChangeLog b/ChangeLog
index 408a554..c135d85 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,2309 @@
+2013-06-03 Dmitry V. Levin <ldv@altlinux.org>
+
+ ioctlent: add UAPI support.
+ * Makefile.am (IOCTLSORT_INCLUDEDIR): Define.
+ (ioctlsort): Use it.
+ * linux/ioctlent.sh (lookup_ioctls): Look into uapi directory tree.
+ Strip "uapi/" prefix from output path names.
+ * linux/ioctlent.h.in: Regenerate from v3.9 headers.
+ * NEWS: Mention it.
+
+ Prepare for 4.8 release.
+ * NEWS: Update for 4.8 release.
+ * debian/changelog: 4.8-1.
+ * strace.spec: 4.8-1.
+
+2013-06-02 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix "make dist" on recently added architectures.
+ * Makefile.am (EXTRA_DIST): Add linux/aarch64/errnoent1.h,
+ linux/aarch64/ioctlent.h.in, linux/aarch64/ioctlent1.h,
+ linux/aarch64/signalent1.h, linux/aarch64/syscallent.h,
+ linux/aarch64/syscallent1.h, linux/metag/ioctlent.h.in,
+ linux/metag/syscallent.h, linux/or1k/ioctlent.h.in,
+ linux/or1k/syscallent.h, linux/tile/errnoent1.h, linux/tile/ioctlent1.h,
+ linux/tile/signalent1.h, linux/tile/syscallent1.h, linux/ubi-user.h,
+ linux/xtensa/ioctlent.h.in, and linux/xtensa/syscallent.h.
+
+ Fix "make dist" regression introduced by commit v4.7-184-gd648f29.
+ * Makefile.am (EXTRA_DIST): Add linux/ubi-user.h.
+
+2013-05-28 Dmitry V. Levin <ldv@altlinux.org>
+
+ Do not suppress signal delivery messages with -qq.
+ Current implementation of -qq does not allow suppressing exit status
+ messages without suppressing signal delivery messages, which is not
+ good. There is a traditional "-e signal=none" syntax that can be used
+ to suppress all signal delivery messages.
+ This partially reverts commit v4.7-222-g01997cf.
+
+ * strace.c (trace): Do not suppress signal delivery messages with -qq.
+ * strace.1: Update documentation about -qq option.
+
+2013-05-23 Chris Metcalf <cmetcalf@tilera.com>
+
+ tile: use siginfo_t, not struct siginfo.
+ As of glibc 2.16, "struct siginfo" is no longer supported,
+ and "siginfo_t" must be used instead.
+
+ tile: remove MAP_CACHE_xxx support in mem.c.
+ These flags support functionality in mmap() that has not been
+ pushed back to the community, and which may or may not eventually
+ end up being the final community model. In the interim, having
+ these flags unconditionally present for "#ifdef TILE" just means
+ that the TILE build breaks if using the community versions of
+ the kernel and glibc, so just revert the code until such time
+ as it may end up in the community.
+
+2013-05-17 Mike Frysinger <vapier@gentoo.org>
+
+ Rename COPYRIGHT to COPYING.
+ The standard name people have adopted is "COPYING" rather than
+ "COPYRIGHT". Use that as a lot of license scanning tools look for it.
+
+ * COPYRIGHT: Rename to ...
+ * COPYING: ... this.
+ * Makefile.am (EXTRA_DIST): Rename COPYRIGHT to COPYING.
+ * README: Likewise.
+ * strace.spec (%files): Likewise.
+
+2013-05-17 Dmitry V. Levin <ldv@altlinux.org>
+
+ Sync strace.spec and debian/ with packages.
+ * debian/changelog: Sync with 4.7-1.
+ * debian/strace.docs: Likewise.
+ * strace.spec: Sync with 4.7-3.
+
+ Update PTRACE_O_* constants.
+ * process.c (ptrace_setoptions_flags): Sync with Linux 3.9.
+
+ Update AF_*, PF_*, MSG_*, and TCP_* constants.
+ * net.c (domains, addrfams, protocols, socktcpoptions): Sync with
+ Linux 3.9.
+
+2013-05-14 Dmitry V. Levin <ldv@altlinux.org>
+
+ NOMMU: do not hide startup syscalls unless in -D mode.
+ On NOMMU systems in "strace PROG" case, we have no way to attach to
+ the tracee before it calls execve unless in -D mode. That is, the
+ first execve call is very likely to be missed, and setting
+ hide_log_until_execve just results to empty log.
+
+ * strace.c (init) [NOMMU_SYSTEM]: Do not set hide_log_until_execve
+ unless in -D mode.
+
+ Make -D mode work when the Yama LSM is enabled.
+ * strace.c [HAVE_PRCTL]: Include sys/prctl.h.
+ (startup_child) [HAVE_PRCTL && PR_SET_PTRACER && PR_SET_PTRACER_ANY]:
+ In -D mode, allow tracing the process that is going to become the
+ tracee.
+
+ Update PR_* constants.
+ * process.c (prctl_options): Add PR_SET_PTRACER.
+
+2013-05-14 Denys Vlasenko <dvlasenk@redhat.com>
+
+ Hide startup syscalls.
+ Tested with "./strace [-D] [-q] [-bexecve] env true",
+ all cases seem to work.
+
+ * defs.h: Declare new variable: bool hide_log_until_execve.
+ * strace.c: Define hide_log_until_execve.
+ Rename skip_startup_execve to skip_one_b_execve.
+ (startup_child): Do not set skip_one_b_execve = 1 here.
+ (init): If "strace PROG" case (as opposed to "strace -pPID"),
+ set skip_one_b_execve and hide_log_until_execve to 1.
+ (trace): Don't print signal messages if hide_log_until_execve == 1.
+ * syscall.c (trace_syscall_entering):
+ Skip syscall printing if hide_log_until_execve == 1.
+ Reset hide_log_until_execve if we enter execve syscall.
+ (trace_syscall_exiting): Skip syscall printing if hide_log_until_execve == 1.
+
+2013-05-13 Daniel P. Berrange <berrange@redhat.com>
+
+ Allow -q to be repeated for very quiet output.
+ Even with the -q flag specified, tracing output is still mixed
+ with messages about signals and process exit status, which is
+ often irrelevant. Allow the -q option to be repeated to force
+ the suppression of signals / exit status info too.
+
+ * defs.h: Change 'qflag' from 'bool' to 'unsigned int'.
+ * strace.1: Document ability to repeat '-q' option.
+ * strace.c: Allow '-q' to be repeated to quieten process
+ exit status and signal messages.
+
+2013-05-11 Dmitry V. Levin <ldv@altlinux.org>
+
+ mips o32: fix syscall table.
+ * linux/mips/syscallent-o32.h: Add entries for getpmsg, putpmsg,
+ get_mempolicy, set_mempolicy and vserver. Fix names for umount,
+ umount2, mmap, mmap2, pread64, pwrite64, sigaltstack and fstatat64
+ syscalls.
+
+2013-05-10 Dmitry V. Levin <ldv@altlinux.org>
+
+ mips n64: fix syscall table.
+ * linux/mips/syscallent-n64.h: Add entries for get_mempolicy,
+ set_mempolicy and timerfd syscalls. Fix entry for socket syscall.
+ Fix names for pread64, pwrite64, shmat, rt_sigsuspend, sigaltstack
+ and umount2 syscalls.
+
+ mips n32: fix syscall table.
+ * linux/mips/syscallent-n32.h: Add entries for mbind, get_mempolicy,
+ set_mempolicy and timerfd syscalls. Fix entry for socket syscall.
+ Fix handlers for truncate, ftruncate and getdents64 syscalls.
+ Fix names for pread64, pwrite64, shmat, rt_sigsuspend, sigaltstack,
+ umount2, and getdents64 syscalls.
+
+2013-05-08 Dmitry V. Levin <ldv@altlinux.org>
+
+ sync_file_range: fix number of syscall arguments.
+ * linux/avr32/syscallent.h: Set the number of sync_file_range arguments
+ to 6.
+ * linux/bfin/syscallent.h: Likewise.
+ * linux/hppa/syscallent.h: Likewise.
+ * linux/i386/syscallent.h: Likewise.
+ * linux/m68k/syscallent.h: Likewise.
+ * linux/microblaze/syscallent.h: Likewise.
+ * linux/mips/syscallent-o32.h: Likewise.
+ * linux/or1k/syscallent.h: Likewise.
+ * linux/s390/syscallent.h: Likewise.
+ * linux/sh/syscallent.h: Likewise.
+ * linux/powerpc/syscallent.h: Change sync_file_range to
+ sync_file_range2, set the number of sync_file_range2 arguments to 6.
+ * linux/tile/syscallent.h: Change sync_file_range to sync_file_range2,
+ set the number of sync_file_range2 arguments to 4.
+ * linux/tile/syscallent1.h: Change sync_file_range to sync_file_range2.
+ update handler.
+ * linux/xtensa/syscallent.h: Likewise.
+
+ Add syscall entries for new linux syscalls.
+ * linux/dummy.h: Add printargs aliases for sys_finit_module, sys_kcmp
+ and sys_sync_file_range2.
+ * linux/alpha/syscallent.h: Add entries for process_vm_readv
+ and process_vm_writev.
+ * linux/bfin/syscallent.h: Likewise.
+ * linux/arm/syscallent.h: Add entries for sync_file_range2, kcmp
+ and finit_module.
+ * linux/hppa/syscallent.h: Add entries for process_vm_readv,
+ process_vm_writev, kcmp and finit_module.
+ * linux/tile/syscallent.h: Likewise.
+ * linux/tile/syscallent1.h: Likewise.
+ * linux/ia64/syscallent.h: Add entry for finit_module.
+ * linux/i386/syscallent.h: Add entries for kcmp and finit_module.
+ * linux/m68k/syscallent.h: Likewise.
+ * linux/metag/syscallent.h: Likewise.
+ * linux/microblaze/syscallent.h: Likewise.
+ * linux/mips/syscallent-n32.h: Likewise.
+ * linux/mips/syscallent-n64.h: Likewise.
+ * linux/mips/syscallent-o32.h: Likewise.
+ * linux/or1k/syscallent.h: Likewise.
+ * linux/powerpc/syscallent.h: Likewise.
+ * linux/sh/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/x32/syscallent.h: Likewise.
+ * linux/x86_64/syscallent.h: Likewise.
+ * linux/xtensa/syscallent.h: Likewise.
+ * linux/s390/syscallent.h: Add entries for s390_runtime_instr, kcmp
+ and finit_module.
+ * linux/s390x/syscallent.h: Likewise.
+ * linux/sparc/syscallent.h: Add entries for kern_features, kcmp
+ and finit_module.
+
+ tests/net: fix portability issues.
+ * tests/net-accept-connect.c: Fix address length passed to bind()
+ and connect().
+ * tests/net: Update regexps.
+
+ tests: add a test for basic network syscalls.
+ * tests/.gitignore: Add net-accept-connect, *.o and *.log.*.
+ * tests/Makefile.am (AM_CFLAGS): New variable.
+ (check_PROGRAMS): Add net-accept-connect.
+ (TESTS): Add net.
+ * tests/net-accept-connect.c: New file.
+ * tests/net: New file.
+
+ tests: do not skip tests when timeout utility is not available.
+ * tests/init.sh (check_timeout): New function.
+ * tests/ptrace_setoptions: Use it.
+ * tests/qual_syscall: Likewise.
+ * tests/stat: Likewise.
+ * tests/strace-f: Likewise.
+
+2013-05-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ Move subcall decoding configuration out of the common code.
+ * Makefile.am (EXTRA_DIST): Add linux/subcall.h.
+ * linux/syscall.h (SYS_socket_subcall): Remove.
+ (SYS_socket_nsubcalls, SYS_ipc_subcall, SYS_ipc_nsubcalls): Move to ...
+ * linux/subcall.h: ... new file.
+ * linux/arm/syscallent.h: Define SYS_socket_subcall, include subcall.h.
+ * linux/i386/syscallent.h: Likewise.
+ * linux/m68k/syscallent.h: Likewise.
+ * linux/powerpc/syscallent.h: Likewise.
+ * linux/s390/syscallent.h: Likewise.
+ * linux/s390x/syscallent.h: Likewise.
+ * linux/sh/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/sparc/syscallent.h: Likewise.
+
+ Suggested by Mike Frysinger and Chris Metcalf.
+
+ sparc: remove some unused declarations and macros.
+ * linux/syscall.h [SPARC || SPARC64] (sys_msgsys, sys_semsys,
+ sys_shmsys): Remove declarations.
+ [SPARC || SPARC64] (SYS_semsys_subcall, SYS_semsys_nsubcalls,
+ SYS_msgsys_subcall, SYS_msgsys_nsubcalls, SYS_shmsys_subcall,
+ SYS_shmsys_nsubcalls): Remove macros.
+
+2013-05-07 Mike Frysinger <vapier@gentoo.org>
+
+ mips: fix build regression.
+ The recent commit (2690fadc8b35190dddd29274a7405bac13adc469) shuffled
+ the mips headers around causing it to check the ABI defines before it
+ included the header which set those up. Now all mips builds fail with:
+ In file included from count.c:36:0:
+ defs.h:48:4: error: #error Unsupported _MIPS_SIM
+
+ * defs.h [MIPS]: Move sgidefs.h above _MIPS_SIM check.
+
+2013-05-07 James Hogan <james.hogan@imgtec.com>
+
+ metag: rename llseek syscall to _llseek.
+ The raw llseek syscall is called _llseek from userland, so fix the
+ naming of it for metag to allow the stat test to pass.
+
+ * linux/metag/syscallent.h: Rename llseek syscall to _llseek.
+
+ metag: disable socket and ipc subcall support.
+ The metag architecture also uses dedicated syscalls and doesn't need to
+ multiplex ipc and socket subcalls.
+
+ * linux/syscall.h [METAG]: Do not define SYS_socket_subcall and
+ SYS_ipc_subcall.
+
+2013-05-07 Dmitry V. Levin <ldv@altlinux.org>
+
+ pread, pwrite: fix number of syscall arguments.
+ The number of pread and pwrite arguments depends on architecture and
+ personality. For 64bit and ilp32 it equals to 4, for unaligned
+ 32bit it equals to 5, and for aligned 32bit it equals to 6.
+
+ * linux/aarch64/syscallent1.h: Change the number of pread and pwrite
+ arguments to 4.
+ * linux/alpha/syscallent.h: Likewise.
+ * linux/mips/syscallent-n32.h: Likewise.
+ * linux/mips/syscallent-n64.h: Likewise.
+ * linux/s390x/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/tile/syscallent.h: Likewise.
+ * linux/x32/syscallent.h: Likewise.
+ * linux/x86_64/syscallent.h: Likewise.
+ * linux/or1k/syscallent.h: Change the number of pread and pwrite
+ arguments to 5.
+
+ preadv, pwritev: fix number of syscall arguments.
+ The number of preadv and pwritev arguments depends on architecture and
+ personality. For 64bit and ilp32 it equals to 4, for unaligned 32bit
+ it equals to 5, and for aligned 32bit it equals to 6.
+
+ * linux/aarch64/syscallent1.h: Change the number of preadv and pwritev
+ arguments to 4.
+ * linux/alpha/syscallent.h: Likewise.
+ * linux/ia64/syscallent.h: Likewise.
+ * linux/mips/syscallent-n32.h: Likewise.
+ * linux/mips/syscallent-n64.h: Likewise.
+ * linux/s390x/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/tile/syscallent.h: Likewise.
+ * linux/x32/syscallent.h: Likewise.
+ * linux/x86_64/syscallent.h: Likewise.
+ * linux/powerpc/syscallent.h: Change the number of preadv and pwritev
+ arguments to 6.
+ * linux/sh/syscallent.h: Likewise.
+ * linux/xtensa/syscallent.h: Likewise.
+
+ ftruncate64, truncate64: fix number of syscall arguments.
+ The number of ftruncate64/truncate64 arguments depends on architecture
+ and personality. For 64bit and ilp32 it equals to 2, for unaligned
+ 32bit it equals to 3, and for aligned 32bit it equals to 4.
+
+ * linux/or1k/syscallent.h: Change the number of ftruncate64 and
+ truncate64 arguments to 3.
+ * linux/sh/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Change ftruncate64 and truncate64 handlers.
+ * linux/sparc/syscallent.h: Change ftruncate64 handler, change the
+ number of its arguments to 3.
+ * linux/xtensa/syscallent.h: Change the number of ftruncate64 and
+ truncate64 arguments to 4.
+
+ fallocate: fix number of syscall arguments.
+ The number of fallocate arguments depends on architecture and
+ personality. For 64bit and ilp32 it equals to 4,
+ for 32bit it equals to 6.
+
+ * linux/aarch64/syscallent1.h: Change the number of fallocate arguments
+ to 4.
+ * linux/alpha/syscallent.h: Likewise.
+ * linux/mips/syscallent-n32.h: Likewise.
+ * linux/mips/syscallent-n64.h: Likewise.
+ * linux/s390x/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/tile/syscallent.h: Likewise.
+ * linux/x32/syscallent.h: Likewise.
+ * linux/x86_64/syscallent.h: Likewise.
+ * linux/microblaze/syscallent.h: Set fallocate handler and flags.
+
+ fadvise64, fadvise64_64: fix handlers and number of syscall arguments.
+ The number of fadvise64 arguments depends on architecture and
+ personality. For 64bit and ilp32 it equals to 4, for unaligned
+ 32bit it equals to 5, and for aligned 32bit it equals to 6.
+
+ The number of fadvise64_64 arguments is 4 for 64bit and ilp32, for
+ unaligned 32bit and most of aligned 32bit it equals to 6, and for
+ mips o32 it equals to 7.
+
+ * linux/alpha/syscallent.h: Set fadvise64 handler.
+ * linux/s390/syscallent.h: Likewise.
+ * linux/hppa/syscallent.h: Set fadvise64_64 handler, change the number
+ of syscall arguments to 6.
+ * linux/ia64/syscallent.h: Change the number of fadvise64 arguments
+ to 4.
+ * linux/mips/syscallent-n32.h: Likewise.
+ * linux/tile/syscallent1.h: Change the number of fadvise64 arguments
+ to 5.
+ * linux/mips/syscallent-o32.h: Change the number of fadvise64_64
+ arguments to 7.
+ * linux/s390x/syscallent.h: Change fadvise64_64 handler. Set fadvise64
+ handler. Change numbers of fadvise64 and fadvise64_64 arguments to 4.
+ * linux/sh64/syscallent.h: Change fadvise64_64 handler.
+ Change numbers of fadvise64 and fadvise64_64 arguments to 4.
+ * linux/sparc/syscallent.h: Set fadvise64 and fadvise64_64 handlers,
+ change numbers of their arguments to 5 and 6.
+ * linux/x86_64/syscallent.h: Change fadvise64 handler.
+
+ mips o32: raise the max number of syscall arguments to 7.
+ On mips o32, fadvise64_64 takes 7 arguments.
+
+ * defs.h [LINUX_MIPSO32]: Raise MAX_ARGS to 7.
+
+ mips: split syscallent.h.
+ linux/mips/syscallent.h consisted of several parts that had little in
+ common. Split them into separate files to ease maintenance.
+
+ * linux/mips/syscallent-compat.h: New file.
+ * linux/mips/syscallent-n32.h: Likewise.
+ * linux/mips/syscallent-n64.h: Likewise.
+ * linux/mips/syscallent-o32.h: Likewise.
+ * linux/mips/syscallent.h: Include them.
+ * Makefile.am (EXTRA_DIST): Add them.
+
+ readahead: fix number of syscall arguments.
+ The number of readahead arguments depends on architecture and
+ personality. For 64bit and ilp32 it equals to 3, for unaligned 32bit it
+ equals to 4, and for aligned 32bit it equals to 5.
+
+ * linux/aarch64/syscallent1.h: Set number of readahead arguments to 3.
+ * linux/alpha/syscallent.h: Likewise.
+ * linux/ia64/syscallent.h: Likewise.
+ * linux/s390x/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/x32/syscallent.h: Likewise.
+ * linux/x86_64/syscallent.h: Likewise.
+ * linux/or1k/syscallent.h: Set number of readahead arguments to 4.
+ * linux/sh/syscallent.h: Likewise.
+ * linux/tile/syscallent.h: Likewise.
+ * linux/xtensa/syscallent.h: Set number of readahead arguments to 5.
+
+2013-05-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ linux/syscall.h: make subcall decoding configuration more readable.
+ * linux/syscall.h: Inverse and sort the subcall ifdef,
+ add a comment why subcall decoding support is not enabled
+ on some architectures.
+
+2013-05-06 Chris Zankel <chris@zankel.net>
+
+ xtensa: disable socket and ipc subcall support.
+ The Xtensa architecture also uses dedicated syscalls and doesn't
+ need to multiplex ipc and socket subcalls.
+
+ * linux/syscall.h [XTENSA]: Do not define SYS_socket_subcall and
+ SYS_ipc_subcall.
+
+2013-05-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix syscall flags.
+ * linux/aarch64/syscallent1.h: Fix syscall flags for send.
+ * linux/alpha/syscallent.h: Fix syscall flags for fchdir, getcwd,
+ oldumount, sigaltstack, umount, uselib, and utimes.
+ * linux/arm/syscallent.h: Fix syscall flags for close, creat, dup, dup2,
+ fchdir, fchmod, fchown, fchown32, fcntl, fcntl64, fdatasync, flock,
+ fsetxattr, fsync, getdents, getdents64, ioctl, oldfstat, oldselect,
+ open, pipe, poll, pread, pwrite, read, readahead, readdir, readv,
+ select, socketcall, write, and writev.
+ * linux/avr32/syscallent.h: Fix syscall flags for inotify_init and
+ unshare.
+ * linux/bfin/syscallent.h: Fix syscall flags for pread64 and pwrite64.
+ * linux/hppa/syscallent.h: Fix syscall flags for fchdir, flistxattr,
+ getcwd, pause, signal, umount2, uselib, utime, and vfork.
+ * linux/ia64/syscallent.h: Fix syscall flags for creat, fchdir,
+ lstat, umount, uselib, and utimes. Fix syscall handlers for
+ fgetxattr, flistxattr, fremovexattr, and fsetxattr.
+ * linux/m68k/syscallent.h: Fix syscall flags for close, creat, dup,
+ dup2, fchdir, fchmod, fchown, fchown32, fcntl, fcntl64, fdatasync,
+ flock, fsetxattr, getdents, ioctl, oldfstat, oldselect, open, pipe,
+ poll, pread64, pwrite64, read, readahead, readdir, readv, select,
+ socketcall, write, and writev.
+ * linux/metag/syscallent.h: Fix syscall flags for fanotify_init,
+ prlimit64, process_vm_readv, process_vm_writev, and quotactl.
+ * linux/microblaze/syscallent.h: Fix syscall flags for close, creat,
+ dup, dup2, fchdir, fchmod, fchown, fchown32, fcntl, fcntl64,
+ fdatasync, flock, fsetxattr, getdents, ioctl, oldfstat, oldselect,
+ open, perf_event_open, pipe, poll, pread64, pwrite64, read, readahead,
+ readdir, readv, select, socketcall, write, and writev.
+ * linux/mips/syscallent.h: Fix syscall flags for close, creat, dup,
+ dup2, fchdir, fchmod, fchown, fcntl, fcntl64, fdatasync, flock,
+ fsetxattr, getdents, getdents64, getxattr, ioctl, lgetxattr,
+ listxattr, llistxattr, lremovexattr, lsetxattr, oldfstat, open, pipe,
+ pivot_root, poll, pread, pwrite, read, readahead, readv, removexattr,
+ select, setxattr, socketcall, statfs, write, and writev.
+ * linux/or1k/syscallent.h: Fix syscall flags for fchdir and quotactl.
+ * linux/powerpc/syscallent.h: Fix syscall flags for fchdir.
+ * linux/sh/syscallent.h: Fix syscall flags for getcwd.
+ * linux/sparc/syscallent.h: Fix syscall flags for getresgid, getresuid,
+ setresgid, setresgid32, and setresuid.
+ * linux/xtensa/syscallent.h: Fix syscall flags for close, creat, dup,
+ dup2, fallocate, fchdir, fchmod, fchown, fcntl, fcntl64, fdatasync,
+ flock, fsetxattr, fstatfs, fstatfs64, fsync, getdents, getdents64,
+ ioctl, open, pipe, pivot_root, poll, pread64, pwrite64, read,
+ readahead, readv, rt_sigreturn, select, setfsgid, setfsuid, setuid,
+ swapoff, times, utime, write, and writev.
+
+ tests/stat: enhance regexps.
+ * tests/stat: Enhance regexps that check tracing of stat/stat64 and
+ fstatat/fstatat64 syscalls.
+
+2013-05-06 Chris Metcalf <cmetcalf@tilera.com>
+
+ tests/stat: support fstatat syscall for stat()
+ Newer Linux architectures don't support the stat/stat64 syscalls.
+ Instead they use fstatat() with AT_FDCWD and an extra flags argument.
+ Support seeing this output in the 'strace -efile' test.
+
+ As part of this change, use "grep -E -x" syntax consistently for
+ all stat tests, since the number of \(foo\)\? expressions was becoming
+ pretty unwieldy.
+
+ * tests/stat: Update stat/stat64 check regexp to handle architectures
+ that use fstatat instead. Use "grep -E -x" syntax consistently.
+
+2013-05-06 Dmitry V. Levin <ldv@altlinux.org>
+
+ ARM OABI: fix 64-bit arguments decoding.
+ ARM OABI and ARM EABI have different function parameters passing rules,
+ see commit v4.6-11-g7a5b08f for details.
+
+ * util.c (printllval): Do not align argument number in case of ARM OABI.
+ * file.c (sys_fadvise64_64): Likewise.
+
+2013-05-06 Mike Frysinger <vapier@gentoo.org>
+
+ printllval: fix 64bit unpacking on mips/o32 and xtensa.
+ The mips/o32 ABI and xtensa arch also do 64bit aligning, so add it to the
+ printllval list for this.
+
+ Normally for sys_fadvise64_64 we'd handle the same list of arches, but
+ mips/o32 ABI is funky and doesn't shift -- it has 7 args. So just add
+ xtensa to it.
+
+ * file.c (sys_fadvise64_64): Add XTENSA to the shifted list.
+ * util.c (printllval): Add LINUX_MIPSO32 and XTENSA to the shifted list.
+
+2013-05-06 Chris Metcalf <cmetcalf@tilera.com>
+
+ tile: disable socket and ipc subcall support.
+ The tile arch just has the dedicated syscalls, so disable
+ the logic for parsing subcalls.
+
+ * linux/syscall.h [TILE]: Do not define SYS_socket_subcall and
+ SYS_ipc_subcall.
+
+2013-05-06 Mike Frysinger <vapier@gentoo.org>
+
+ Blackfin: disable socketcall and ipc subcall support.
+ The Blackfin arch does not have a socketcall or ipc subcall
+ (it has dedicated syscalls broken out), so disable the logic for it.
+
+ * linux/syscall.h [BFIN]: Do not define SYS_socket_subcall and
+ SYS_ipc_subcall.
+
+2013-05-05 Mike Frysinger <vapier@gentoo.org>
+
+ s390: fix # of args truncate64/ftruncate64 takes.
+ * linux/s390/syscallent.h: Change nargs to 3 for truncate64/ftruncate64.
+
+ mtd: clamp ubi name strings.
+ Since the length fields with the ubi volnames are signed 16bit values,
+ make sure we clamp that number to the size of the buffer we've allocated
+ on the stack to prevent buffer overflows.
+
+ * mtd.c (ubi_ioctl): Clamp length to string_quote to 0/UBI_MAX_VOLUME_NAME.
+ Check the return of string_quote and tweak the output accordingly.
+
+2013-05-04 Dmitry V. Levin <ldv@altlinux.org>
+
+ printxval: support more architectures.
+ * configure.ac: Define SIZEOF_LONG_LONG.
+ * util.c (printllval): Handle all architectures with sizeof(long) > 4
+ and sizeof(long) == sizeof(long long).
+
+2013-05-04 Mike Frysinger <vapier@gentoo.org>
+
+ Fix building for sparc64 targets.
+ * util.c (printllval): Handle SPARC64 define.
+
+ Fix building for mips n64 targets.
+ * util.c (printllval): Handle LINUX_MIPSN64 define.
+
+2013-05-03 Dmitry V. Levin <ldv@altlinux.org>
+
+ hppa: fix stat64 and fstat64 decoding.
+ * file.c [HPPA]: Do not redefine stat64 to hpux_stat64.
+
+ arm, aarch64, ppc: fix printllval-based decoders.
+ * util.c (printllval) [ARM || POWERPC]: Align argument number.
+ [AARCH64]: Align argument number in 32bit mode.
+ * file.c (sys_fadvise64_64) [ARM || POWERPC]: Remove no longer needed
+ printllval workaround.
+ [AARCH64]: Fix printing POSIX_FADV_* constants in 32bit mode.
+
+2013-05-02 Mike Frysinger <vapier@gentoo.org>
+
+ Decode mtd/ubi ioctls.
+ Been playing with UBI of late and it'd help if I could see what it was
+ doing. Not entirely sure about the decoding of UBI_IOCVOLUP -- it takes
+ a pointer to a 64bit value, not a strict.
+
+ * util.c (MAX, MIN): Move to ...
+ * defs.h (MAX, MIN): ... here.
+ (CLAMP): Define.
+ (ubi_ioctl): New prototype.
+ * ioctl.c (ioctl_decode): Call ubi_ioctl when code is 'o' or 'O'.
+ * mtd.c: Include ubi user API header.
+ (ubi_volume_types): New enum decode.
+ (ubi_volume_props): Likewise.
+ (ubi_ioctl): Define.
+ * linux/ubi-user.h: Import from linux 3.8.
+
+ test: add mtd/ubi test helpers.
+ I used these to develop the mtd/ubi ioctl decoders.
+
+ * test/.gitignore: Add mtd/ubi.
+ * test/Makefile: Declare all tests in a PROGS var.
+ Declare build targets .PHONY.
+ (all): Depend on $(PROGS) instead of hardcoded list.
+ (clean): Remove $(PROGS) instead of hardcoded list.
+ * test/mtd.c: New file.
+ * test/ubi.c: Likewise.
+
+ test: include headers for used funcs.
+ These funcs use things like wait/write/read/strcmp but sometimes
+ don't include the right header for them.
+
+ * test/Makefile: Add -Wall to CFLAGS.
+ * test/clone.c: Include unistd.h.
+ * test/fork.c: Include sys/wait.h.
+ * test/sig.c: Include unistd.h.
+ * test/sigkill_rain.c: Include sys/wait.h.
+ * test/vfork.c: Include sys/wait.h.
+ * test/wait_must_be_interruptible.c: Include string.h
+
+2013-05-02 Dmitry V. Levin <ldv@altlinux.org>
+
+ ia64: fix compilation warnings introduced by commit v4.7-174-g44f0ed1.
+ * linux/ia64/syscallent.h: Undefine sys_oldlstat, sys_lstat and
+ sys_lstat64 before redefining them to printargs.
+
+ Reported-by: Mike Frysinger <vapier@gentoo.org>
+
+2013-05-02 Mike Frysinger <vapier@gentoo.org>
+
+ tests: stat: fix clean up of sample file.
+ * tests/stat: Also rm the sample file at the end of the test.
+
+ Ignore more files.
+ * .gitignore: Add gdb related files.
+ * tests/.gitignore: Ignore test logs.
+
+2013-05-02 Dmitry V. Levin <ldv@altlinux.org>
+
+ x32: fix decoding of i386 truncate and ftruncate syscalls.
+ * linux/x32/syscallent1.h: Remove sys_*truncate64 redirections.
+
+ x32: fix printllval-based decoders of i386 syscalls.
+ * util.c (printllval) [X32]: Handle i386 personality.
+
+ tests: add basic test for ftruncate, lseek and stat family syscalls.
+ * tests/stat: New test.
+ * tests/Makefile.am (TESTS): Add stat.
+
+2013-05-01 Dmitry V. Levin <ldv@altlinux.org>
+
+ x32: fix build regressions introduced by commit v4.7-96-g8435d67.
+ * desc.c (printflock) [X32]: Add special handling required for
+ this architecture with sizeof(long) < sizeof(off_t).
+ * file.c [X32] (struct stat64): Add __attribute__((packed)).
+ [X32] (HAVE_STAT64): Define.
+ (printstat) [X32]: Redirect to printstat64.
+ (printstat64) [X32]: Use "struct stat" instead of "struct stat64".
+ [X32] (realprintstat64): Rename to printstat64_x32.
+ (sys_stat64, sys_fstat64) [X32]: Remove second definitions of these
+ functions. Call printstat64_x32 instead of printstat64
+ * linux/x32/syscallent.h: Fix handlers for truncate and ftruncate.
+
+ Alias sys_*lstat* syscall printing functions.
+ * file.c (sys_lstat, sys_lstat64, sys_oldlstat): Remove.
+ * linux/dummy.h: Move !HAVE_STRUCT___OLD_KERNEL_STAT aliases forward.
+ (sys_lstat): Alias to sys_stat.
+ (sys_lstat64): Alias to sys_stat64.
+ (sys_oldlstat): Alias to sys_oldstat.
+ * linux/syscall.h (sys_lstat, sys_lstat64, sys_oldlstat): Remove.
+ * linux/x32/syscallent1.h (sys_lstat64): Remove.
+
+ x86_64: decode __old_kernel_stat based syscalls.
+ * linux/x86_64/syscallent1.h: Remove sys_old*stat redirections.
+
+ x32: fix decoding of __old_kernel_stat based syscalls.
+ * file.c [X32] (struct __old_kernel_stat): Define.
+ * linux/x32/syscallent1.h: Remove sys_old*stat redirections.
+
+2013-05-01 James Hogan <james.hogan@imgtec.com>
+
+ test/threaded_execve: fix on metag.
+ The metag ABI has stacks growing upwards so clone expects the stack
+ argument to point at the bottom of the stack instead of the top.
+
+ * test/threaded_execve.c [__metag__]: Define clone2 differently
+ to avoid a segfault at runtime.
+
+ test/skodic: make a bit more portable.
+ * test/skodic.c (main): Don't use MAP_FIXED since valid virtual addresses
+ vary between architectures (as far as I can tell the use of MAP_FIXED is
+ not relevant to the test). Also don't assume the file desriptor returned
+ by open call is 3 when passing it to mmap.
+
+2013-05-01 Mike Frysinger <vapier@gentoo.org>
+
+ printllval: handle s390x.
+ This is a 64bit arch w/no personalities, so fix printing.
+ It can now trace a simple call like readahead:
+ $ cat test.c
+ main(){readahead(-1, (unsigned long long)1 << 50, 0);}
+ $ gcc test.c
+ $ ./strace -ereadahead ./a.out
+ readahead(-1, 1125899906842624, 0) = -1 EBADF (Bad file descriptor)
+
+ * util.c (printllval): Handle S390X define.
+
+ Stop using old AM_CONFIG_HEADER macro.
+ Building with automake-1.13 throws an error:
+ configure.ac:6: error: 'AM_CONFIG_HEADER': this macro is obsolete.
+ You should use the 'AC_CONFIG_HEADERS' macro instead.
+
+ * configure.ac (AM_CONFIG_HEADER): Rename to AC_CONFIG_HEADERS.
+
+2013-04-30 Dmitry V. Levin <ldv@altlinux.org>
+
+ build: introduce git-version-gen.
+ * .gitignore: Add .version.
+ * Makefile.am (EXTRA_DIST, BUILT_SOURCES): Add $(srcdir)/.version.
+ Add rules to check NEWS, generate $(srcdir)/.version and
+ $(distdir)/.tarball-version files.
+ Change ChangeLog and CREDITS generation rules to depend on
+ $(srcdir)/.version instead of $(srcdir)/.git/refs/heads/*.
+ * NEWS: Add dates to recent releases.
+ * configure.ac (AC_INIT): Use git-version-gen.
+ (AM_INIT_AUTOMAKE): Remove check-news.
+ * git-version-gen: Import from gnulib.
+ * make-dist: Check NEWS.
+
+ Makefile.am: sort long lists to ease maintenance.
+ * Makefile.am (strace_SOURCES, EXTRA_DIST): Sort, place one list element
+ per line.
+
+ build: fix "make dist" regression introduced by commit v4.7-105-g7270de5
+ * Makefile.am (EXTRA_DIST): Remove linux/arm/syscallent1.h,
+ linux/arm/signalent1.h, linux/arm/ioctlent1.h and linux/arm/errnoent1.h.
+
+ build: fix "make dist" regression introduced by commit v4.7-29-g17e3860.
+ * Makefile.am (EXTRA_DIST): Add linux/ioctlent-filter.awk.
+
+2013-04-30 Mike Frysinger <vapier@gentoo.org>
+
+ Blackfin: tweak sram_alloc syscall decode.
+ * system.c (sys_sram_alloc): The 2nd argument of sram_alloc syscall
+ is a bit field, not a specific value, so decode it as such.
+
+2013-03-31 Zev Weiss <zev@bewilderbeest.net>
+
+ Print io_submit() offsets in decimal.
+ This makes output formatting more consistent with pread()/pwrite(),
+ which print their offset parameters in decimal.
+
+ * desc.c (sys_io_submit): Change offset output format from %llx to %lld.
+
+2013-03-30 Andreas Schwab <schwab@suse.de>
+
+ Fix building outside source directory.
+ The file linux/ioctlent.h is generated in the build directory, so
+ "../ioctlent.h" won't find it.
+
+ * linux/aarch64/ioctlent1.h: Remove "../" from include file name.
+ * linux/powerpc/ioctlent1.h: Likewise.
+ * linux/tile/ioctlent1.h: Likewise.
+ * linux/x32/ioctlent1.h: Likewise.
+ * linux/x86_64/ioctlent1.h: Likewise.
+ * linux/x86_64/ioctlent2.h: Likewise.
+
+ AArch64: Fix printing of long long value.
+ * util.c (printllval): Fix printing of long long values on
+ AArch64.
+
+2013-03-27 Dmitry V. Levin <ldv@altlinux.org>
+
+ Update PR_* constants.
+ * process.c (prctl_options): Add more PR_* constants from linux/prctl.h.
+
+2013-03-25 Chris Zankel <chris@zankel.net>
+
+ Add support for the XTENSA architecture.
+ * configure.ac: Add XTENSA to the list of supported architectures.
+ * defs.h: Add XTENSA support.
+ * linux/xtensa/syscallent.h: New file.
+ * linux/xtensa/ioctlent.h.in: Likewise.
+ * process.c (struct_user_offsets): Add XTENSA support.
+ * signal.c (sys_sigreturn): Likewise.
+ * syscall.c (printcall, get_scno, get_syscall_args,
+ get_syscall_result, get_error): Likewise.
+ * util.c (change_syscall): Likewise.
+
+2013-03-22 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Add example script which builds static (possibly cross-compiled) strace.
+
+2013-03-21 Dmitry V. Levin <ldv@altlinux.org>
+
+ Use 64-bit versions of stat, readdir and setrlimit functions when available
+ strace already has a mechanism to use fopen64 for output when the 64-bit
+ version of fopen is available on 32-bit architectures. Apply this
+ mechanism for other three functions to make strace fully adopted for
+ 64-bit types.
+
+ * strace.c (struct_stat, stat_file, struct_dirent, read_dir,
+ struct_rlimit, set_rlimit): New macros.
+ (startup_attach): Use read_dir.
+ (startup_child): Use struct_stat and stat_file.
+ (main): Use struct_rlimit and set_rlimit.
+
+2013-03-20 Dmitry V. Levin <ldv@altlinux.org>
+
+ Do not use struct dirent in readdir decoding.
+ struct dirent from libc should not be used for umove'ing into because it
+ contains fixed size d_name.
+
+ * file.c (printdir): Rename to print_old_dirent.
+ [SH64]: Decode using struct kernel_dirent.
+ [!SH64]: Decode using an open-coded struct with 32-bit d_ino and d_off.
+ (sys_readdir): Update.
+
+ Do not use off_t in sendfile decoding.
+ sendfile parser used to decode off_t* parameter as a pointer to host
+ off_t type. With this change, it is decoded as a pointer to target long
+ type.
+
+ * io.c (print_off_t): New function.
+ (sys_sendfile): Use it.
+ * linux/aarch64/syscallent1.h: Use sys_sendfile64 for sendfile decoding.
+ * linux/tile/syscallent.h: Likewise.
+ * linux/x32/syscallent.h: Likewise.
+ * linux/x86_64/syscallent.h: Likewise.
+ * linux/hppa/syscallent.h: Use sys_sendfile64 for sendfile64 decoding.
+ * linux/metag/syscallent.h: Correct sendfile syscall name.
+ * linux/or1k/syscallent.h: Likewise.
+
+2013-03-18 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix build with older versions of libaio.h.
+ * configure.ac: When libaio.h is available, check for
+ struct iocb.u.c.flags, IO_CMD_PWRITE and IO_CMD_PWRITEV.
+ * desc.c (print_common_flags): Check for HAVE_STRUCT_IOCB_U_C_FLAGS.
+ (sys_io_submit): Check for HAVE_DECL_IO_CMD_PWRITE and
+ HAVE_DECL_IO_CMD_PWRITEV.
+
+ Fix io_submit decoding.
+ * desc.c (print_common_flags, sys_io_submit): Add missing ", " to
+ SUB_COMMON output, remove extra ", " from SUB_VECTOR output.
+
+2013-03-18 Maxin B. John <maxin.john@enea.com>
+
+ tests: relax check_prog to allow timeout command provided by busybox.
+ Busybox version of timeout doesn't have --version option.
+ Relax check_prog to handle those cases.
+
+ * tests/init.sh (check_prog): Use type builtin to check program
+ availability.
+
+2013-03-18 Dmitry V. Levin <ldv@altlinux.org>
+
+ Reorganize get_regs code, hopefully without functional changes.
+ * syscall.c [I386 || ARM || OR1K || METAG] (ARCH_REGS_FOR_GETREGSET):
+ New macro.
+ (get_regset): Implement for AARCH64, METAG, OR1K and X32.
+ (get_regs) [AARCH64 || METAG || OR1K || X32]: Use it.
+
+ arm, i386: use PTRACE_GETREGSET if available.
+ * syscall.c [ARM || I386 || X86_64] (get_regset): New function.
+ (get_regs) [ARM || I386 || X86_64]: Use it.
+
+ Include <sys/uio.h> and <elf.h> on all architectures.
+ * syscall.c: Include <sys/uio.h> and <elf.h> on all architectures.
+
+ x86-64: enhance PTRACE_GETREGSET test.
+ * syscall.c (get_regs) [X86_64]: Check whether PTRACE_GETREGSET
+ works regardless of the kernel version.
+
+ x32: use PTRACE_GETREGSET unconditionally.
+ * syscall.c (get_regs) [X32]: Assume that PTRACE_GETREGSET always works
+ regardless of the kernel version.
+
+ x86-64, x32: do not include linux/ptrace.h unnecessarily.
+ * syscall.c [X86_64 || X32]: Stop including linux/ptrace.h.
+
+ i386, tile, x32: do not redefine ptrace prototype.
+ * defs.h [I386 || TILE || X32]: Use ptrace prototype from sys/ptrace.h.
+
+ ptrace: decode note segment descriptor types.
+ * configure.ac (AC_CHECK_HEADERS): Add elf.h.
+ * process.c: Include elf.h.
+ (nt_descriptor_types): New xlat structure.
+ (sys_ptrace): Use it.
+
+2013-03-14 Dmitry V. Levin <ldv@altlinux.org>
+
+ Update MADV_* constants.
+ * mem.c (madvise_cmds): Add more MADV_* constants from
+ asm-generic/mman-common.h
+
+ Reported-by: Robin Hack <hack.robin@gmail.com>
+
+2013-03-07 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Tweaks for -c: fixed setitimer/getitimer hack; optimized call_summary_pers()
+ count_syscall() was calling setitimer/getitimer once in order to find
+ smallest "tick" OS uses in time accounting, in order to use it
+ for syscalls which apparently spent less than that time in syscall.
+ The code assumed that this "tick" is not zero... but it is zero
+ on linux-3.6.11. Which means that this hack doesn't work...
+
+ At least this change prevents this measurement from being done
+ _repeatedly_, by initializing one_tick to -1, not 0.
+
+ While at it, added comments in count_syscall() explaining what we are doing.
+
+ Optimized call_summary_pers() a bit, by eliminating redundant tv -> float
+ conversions, and prevented 0.0/0.0 which was resulting in "% time"
+ being shown as "-nan" if total CPU time spent was 0.000000
+ (try "strace -c /bin/true").
+
+ The code seems to seriously underestimate CPU usage:
+ "strace -c ls -lR /usr/share >/dev/null" shows total time spent
+ in syscalls to be only ~10..20% of what "time ls -lR /usr/share >/dev/null"
+ shows.
+
+ It might be useful to have a mode where we show wall clock time
+ spent in syscalls, not CPU time. It might also be more accurate.
+
+ text data bss dec hex filename
+ 245019 676 5708 251403 3d60b strace_old
+ 244923 684 5676 251283 3d593 strace
+
+2013-03-06 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Open-code isprint(c) and isspace(c)
+ We don't call setlocale, thus we always use C locale.
+ But libc supports various other locales, and therefore
+ its ctype interface is general and at times inefficient.
+ For example, in glibc these macros result in function call,
+ whereas for e.g. isprint(c) just c >= ' ' && c <= 0x7e
+ suffices.
+
+ By open-coding ctype checks (we have only 4 of them)
+ we avoid function calls, we get smaller code:
+
+ text data bss dec hex filename
+ 245127 680 5708 251515 3d67b strace_old
+ 245019 676 5708 251403 3d60b strace
+
+ and we don't link in ctype tables (beneficial for static builds).
+
+ Makefile: add commented-out tweak to generate link map.
+
+ Stop using a large static buffer in getfdpath.
+ text data bss dec hex filename
+ 245075 680 9836 255591 3e667 strace_old
+ 245143 680 5708 251531 3d68b strace
+
+2013-03-05 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Fix wrongly indented closing curly brace. No code changes.
+
+ strace_vfprintf: if malloc fails, exit gracefully.
+
+2013-03-05 Dmitry V. Levin <ldv@altlinux.org>
+
+ Use sysconf(_SC_PAGESIZE) instead of hardcoded PAGE_SHIFT.
+ PAGE_SHIFT couldn't be reliably obtained at compile time,
+ thanks to Chris Metcalf for the hint.
+
+ * mem.c: Do not include <sys/user.h>.
+ [SH64] Do not include <asm/page.h>.
+ (get_pagesize): New function.
+ (sys_mmap_pgoff, sys_old_mmap_pgoff): Use it.
+
+2013-03-05 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Emit better message for ERESTARTNOHAND return.
+
+ Disable STREAMS syscalls for non-SPARC.
+ text data bss dec hex filename
+ 3002 0 1024 4026 fba stream.o.old
+ 1729 0 1024 2753 ac1 stream.o
+
+ Fix printstrbufarg's address argument to be long, not int.
+
+ Remove variable tracing_paths and check in pathtrace_match.
+
+ Use dynamically-sized selected[] array for -P PATH.
+ While at it, added a small optimization of not remembering
+ the path twice if it happens to be the same.
+
+ text data bss dec hex filename
+ 245111 680 10860 256651 3ea8b strace_old
+ 245075 680 9804 255559 3e647 strace
+
+ metag,or1k: whitesace style fix. no code changes.
+
+ Assorted fixes to syscallent.h.
+ or1k was missing TM on many memory-related syscalls
+ sys_lookup_dcookie is 3-arg on 64-bit arches, and isn't TF
+ sys_recvmsg is 3-arg on all arches
+ sys_nfsservctl is 3-arg on all arches
+ sys_timerfd_create is 2-arg on all arches
+ sys_[f]truncate64 is 4-arg or 3-arg, never 5-arg
+ truncate64 is TF
+ sys_[l]lseek is TD
+ fstat[64] is TD
+
+2013-03-05 James Hogan <james.hogan@imgtec.com>
+
+ Add support for Imagination Technologies Meta.
+ Add support for Imagination Technologies Meta architecture (the
+ architecture/ABI is usually referred to as metag in code). The Meta
+ Linux kernel port is in the process of being upstreamed for v3.9 so it
+ uses generic system call numbers.
+
+ sys_lookup_dcookie writes a filename to buffer argument, so I've set
+ TF flag.
+ nfsservctl appears to be set to sys_ni_syscall in asm-generic/unistd.h
+ so I've left it blank.
+ truncate64/ftruncate64/pread64/pwrite64/readahead have unaligned 64bit
+ args which are packed tightly on metag, so less arguments on metag.
+ fchdir/llseek takes a file descriptor so s/TF/TD/
+ sync_file_range has 2 64bit args so uses 6 args, so s/4/6/
+ timerfd_create/msgget/msgctl/msgrcv/semget/segtimedop/semop/shmget/
+ shmctl/shmat/shmdt/recvmsg/migrate_pages have different number of args.
+ oldgetrlimit is just getrlimit for metag.
+ add TM flag to various memory syscalls.
+ metag doesn't directly use sys_mmap_pgoff for mmap2.
+ prlimit64/process_vm_readv/process_vm_writev take a pid so add TP flag.
+ fanotify_init doesn't appear to take a file descriptor so remove TD.
+ Add kcmp syscall.
+
+ Cc: Christian Svensson <blue@cmd.nu>
+
+2013-03-01 Denys Vlasenko <vda.linux@googlemail.com>
+
+ umovestr: speed up check for NUL byte in the fetched word.
+
+2013-03-01 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix trace=set regression introduced by commit v4.7-111-g9cbc15b.
+ * syscall.c (qual_syscall, qualify): Pass personality down to
+ qualify_one.
+ * tests/qual_syscall: New test.
+ * tests/Makefile.am (TESTS): Add qual_syscall.
+
+2013-03-01 Chris Metcalf <cmetcalf@tilera.com>
+
+ tile: handle printllval like x86_64 or powerpc64.
+ Without this fix the tilegx build fails when it hits the new #error
+ about SIZEOF_LONG > 4.
+
+ * util.c (printllval): Fix printing of long long values on TILE.
+
+2013-02-27 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Make -b take SYSCALL param, document it in --help and in manpage.
+ To not waste an option letter for just one trick,
+ extend -b to take a parameter:
+ "on which syscalls do you want to detach?".
+ Currently supports only execve.
+
+ While at it, fixed (by removing non-Linux and stale info)
+ and extended manpage text about -f.
+
+2013-02-26 Dmitry V. Levin <ldv@altlinux.org>
+
+ Cleanup umoven and umovestr.
+ Cleanup sloppy error handling.
+
+ First, EFAULT kind of errors from process_vm_readv by itself is not
+ something unusual, so a warning message will not be issued unless a
+ short read is detected.
+
+ Second, clients of umoven and umovestr are not prepared to detect and
+ handle short reads that can happen in these functions. The most safe
+ way to handle them is to return an error code.
+
+ * util.c (umoven, umovestr): Cleanup handling of errors coming from
+ process_vm_readv and PTRACE_PEEKDATA.
+
+ pathtrace: fix umovestr return code check.
+ * pathtrace.c (upathmatch): Only NUL-terminated strings can be
+ path-matched, so fix the umovestr return code check to filter out
+ unsuitable strings.
+
+ Fix compilation errors uncovered by -Werror=enum-compare.
+ This fixes regression introduced by commit v4.7-111-g9cbc15b.
+
+ * syscall.c: Merge all nsyscalls* enums into single enum.
+ Likewise merge nerrnos*, nsignals*, and nioctlents* into single enums.
+
+2013-02-26 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Mass replace error_msg("%s", "literal") -> error_msg("literal")
+ There is no need to print literal strings through "%s".
+ Only untrusted strings such as filenames need that.
+
+2013-02-26 Ben Noordhuis <info@bnoordhuis.nl>
+
+ Make umoven report success as 0, not >=0, stop returning success on partial reads
+ umoven() uses process_vm_readv() when available but it returns the
+ return value of that syscall, which is the number of bytes copied,
+ while its callers expect it to simply return zero on success.
+
+ It was causing syscalls that take a user-space argument to print
+ the abbreviated version, e.g.:
+
+ epoll_ctl(5, EPOLL_CTL_ADD, 10, {...})
+
+ Instead of:
+
+ epoll_ctl(5, EPOLL_CTL_ADD, 10, {EPOLLIN, {u32=10, u64=10}})
+
+ * util.c (umoven): Make umove[n] report success as 0, not >=0,
+ stop returning "success" on partial reads.
+
+2013-02-26 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Assorted NOMMU fixes.
+ With -D, strdup'ing of pathname is necessary only on NOMMU.
+
+ Don't set skip_startup_execve to 1 if NOMMU and not in daemonized mode
+ (try "strace [-D] -b env echo HI" to see whether we detach on correct execve).
+
+ Fix test_ptrace_FOO shortcuts on NOMMU to always assume success
+ and _properly_ set all variables.
+
+ Shorten help text - no need to show deprecated option -F.
+
+2013-02-23 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Merge adjacent tprint's.
+
+ Correct i > MAX_NSYSCALLS commparison: should be i >= MAX_NSYSCALLS.
+
+2013-02-22 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Fix wrong offset display in dumpstr.
+ BTW, the new code from prev commit is 5 times faster
+ than old one :)
+
+ Fix a bug in dumpstr (no null termination). Essentially rewrote dumpstr.
+ This is a 14 year old bug (!).
+
+ It wasn't biting us merely because outstr[80] was static, thus ended up
+ in bss and whatever was after it "accidentally" provided the NUL byte.
+ When dumpstr was changed to use on-stack buffer, the bug reared its ugly head.
+
+ This is a rewrite which is smaller and should be significantly faster
+ for _long_ strings.
+
+ text data bss dec hex filename
+ 244627 680 10860 256167 3e8a7 strace.t9/strace
+ 244563 680 10860 256103 3e867 strace.ta/strace
+
+ * util.c (dumpstr): Rewrite to be faster and smaller.
+
+ Eliminate MAX_QUALS, make qualifier array dynamic.
+ MAX_QUALS was 2048, even though most arches used less than 500 entries
+ in it. MAX_QUALS had to be maintained by hand to be higher than syscall
+ count. It also limited the highest possible fd to track.
+
+ This change makes qual_flagsN[] arrays start sized to the required minimum
+ (number of syscalls) and grow dynamically if user requested
+ -e read=BIGNUM. As a precaution, BIGNUM should be < 2^15, but this limit
+ can be raised with no cost for normal strace invocations.
+
+ qual_flags is now a define to qual_vec[current_personality].
+
+ As a bonus, this patch aliases sysent, errnoent, signalent, ioctlent
+ names in one-personality arches to their corresponding <foo>0 arrays,
+ removing one indirection level.
+
+ text data bss dec hex filename
+ 244471 700 12928 258099 3f033 strace.t7/strace
+ 244627 680 10860 256167 3e8a7 strace.t8/strace
+
+ Create and use struct_sysent and struct_ioctlent typedefs.
+ This is a preparatory mass replace patch with no code changes.
+
+ The future change will need to typedef sysent to sysent0,
+ which results in compile failures when "struct sysent" string
+ gets mangled into "struct sysent0".
+
+ Use tcp->qual_flg instead of qual_flags[] in verbose() and abbrev()
+ We have hundreds of uses of these macros.
+ Result is more efficient and 1.1 kbyte shorter code:
+
+ text data bss dec hex filename
+ 245579 700 12928 259207 3f487 strace.t5/strace
+ 244471 700 12928 258099 3f033 strace.t6/strace
+
+2013-02-21 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Remove unused QUAL_FAULT code (was used by non-Linux code only).
+
+ Use uint8_t for qual_flags[] instead of ints.
+ Resulting bss reduction is ~6kbytes:
+
+ text data bss dec hex filename
+ 245703 700 19072 265475 40d03 strace.t4/strace
+ 245687 700 12928 259315 3f4f3 strace.t5/strace
+
+ Eliminate many SCNO_IS_VALID checks.
+ By adding tcp->s_ent pointer tot syscall table entry,
+ we can replace sysent[tcp->scno] references by tcp->s_ent.
+ More importantly, we may ensure that tcp->s_ent is always valid,
+ regardless of tcp->scno value. This allows us to drop
+ SCNO_IS_VALID(tcp->scno) checks before we access syscall
+ table entry.
+
+ We can optimize (qual_flags[tcp->scno] & QUAL_foo) checks
+ with a similar technique.
+
+ Resulting code shrink:
+ text data bss dec hex filename
+ 245975 700 19072 265747 40e13 strace.t3/strace
+ 245703 700 19072 265475 40d03 strace.t4/strace
+
+ * count.c (count_syscall): Use cheaper SCNO_IN_RANGE() check.
+ * defs.h: Add "int qual_flg" and "const struct sysent *s_ent"
+ to struct tcb. Remove "int u_nargs" from it.
+ Add UNDEFINED_SCNO constant which will mark undefined scnos
+ in tcp->qual_flg.
+ * pathtrace.c (pathtrace_match): Drop SCNO_IS_VALID check.
+ Use tcp->s_ent instead of sysent[tcp->scno].
+ * process.c (sys_prctl): Use tcp->s_ent->nargs instead of tcp->u_nargs.
+ (sys_waitid): Likewise.
+ * strace.c (init): Add compile-time check that DEFAULT_QUAL_FLAGS
+ constant is consistent with init code.
+ * syscall.c (decode_socket_subcall): Use tcp->s_ent->nargs
+ instead of tcp->u_nargs. Set tcp->qual_flg and tcp->s_ent.
+ (decode_ipc_subcall): Likewise.
+ (printargs): Use tcp->s_ent->nargs instead of tcp->u_nargs.
+ (printargs_lu): Likewise.
+ (printargs_ld): Likewise.
+ (get_scno): [MIPS,ALPHA] Use cheaper SCNO_IN_RANGE() check.
+ If !SCNO_IS_VALID, set tcp->s_ent and tcp->qual_flg to default values.
+ (internal_fork): Use tcp->s_ent instead of sysent[tcp->scno].
+ (syscall_fixup_for_fork_exec): Remove SCNO_IS_VALID check.
+ Use tcp->s_ent instead of sysent[tcp->scno].
+ (get_syscall_args): Likewise.
+ (get_error): Drop SCNO_IS_VALID check where it is redundant.
+ (dumpio): Drop SCNO_IS_VALID check where it is redundant.
+ Use tcp->s_ent instead of sysent[tcp->scno].
+ (trace_syscall_entering): Use (tcp->qual_flg & UNDEFINED_SCNO) instead
+ of SCNO_IS_VALID check. Use tcp->s_ent instead of sysent[tcp->scno].
+ Drop SCNO_IS_VALID check where it is redundant.
+ Print undefined syscall name with undefined_scno_name(tcp).
+ (trace_syscall_exiting): Likewise.
+ * util.c (setbpt): Use tcp->s_ent instead of sysent[tcp->scno].
+
+ ARM: make it one-personality arch.
+ ARM in fact _is_ one personality.
+
+ We had two personalities for it because it has a handful of
+ syscalls with huge scnos (0x000f00xx).
+
+ Extending syscall table to have [0x000f0005] index is of course
+ not a good idea.
+
+ Someone decided to handle that by having a separate personality
+ just for these syscalls.
+
+ But multi-personality arch does a bit more work in other parts.
+
+ This patch is another alternative: "move" 0x000f00nn syscalls
+ down to the entries just above last ordinary syscall,
+ by manipulating scno if it falls into the 0x000f00xx range.
+
+ In order to not worsen genuine undefined scnos' printing,
+ the code remaps scno back to actual value before printing
+ "syscall_NNN" string.
+
+ * defs.h: Remove multi-reprsonality defines from ARM.
+ * syscall.c (shuffle_scno): New function.
+ (undefined_scno_name): New function.
+ (get_scno): [ARM] Replace personality setting with scno shuffling.
+ (trace_syscall_entering): Print unknown syscall name using
+ undefined_scno_name().
+ (trace_syscall_exiting): Likewise.
+ * linux/arm/syscallent.h: Add ARM specific syscalls at the end.
+ * linux/arm/errnoent1.h: Deleted.
+ * linux/arm/ioctlent1.h: Deleted.
+ * linux/arm/signalent1.h: Deleted.
+ * linux/arm/syscallent1.h: Deleted.
+
+2013-02-20 Denys Vlasenko <vda.linux@googlemail.com>
+
+ arm: shorten syscall table for EABI - no point in storing NULL entries.
+ Also, reformatted ARM code in get_scno(), mostly improved comments,
+ without code changes.
+
+ Use the same style of includes in linux/*/* files.
+ While at it, fix some comments which say
+ "we use i386 syscalls/ioctls/errnos" but in reality
+ common ones are used.
+
+2013-02-19 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Fix compiler warnings.
+ With constant current_wordsize == 4 and 32-bit longs,
+ gcc was spooked by "1ul << (8 * current_wordsize)" = "1ul << 32".
+
+ Make such places conditional on SIZEOF_LONG > 4.
+
+ Improve comment text. No code changes.
+
+ Fix NOMMU + daemonized tracer SEGV.
+ pathname[] was getting destroyed, execve of garbage pathname
+ failing, and to top it off, the tracer's stack was also
+ smashed and trecer segfaulted.
+
+ * strace.c (exec_or_die): New function.
+ (startup_child): Don't use pathname[] contents after vfork,
+ make a malloced copy instead. Explain "NOMMU + -D bug"
+ and how we work around it.
+
+ Make it possible to to do test builds for NOMMU architectures.
+ And while using it, I discovered that -D doesn't work too well
+ on NOMMU. Added a comment about it.
+
+ Clean up mmap decoding.
+ Previous code merges too many similar, but different ways
+ of decoding mmap. For example, sys_old_mmap is "params in memory"
+ API... except SH[64], where it is "params in regs",
+ i.e. what sys_mmap ("new mmap") function does on other arches!
+
+ It's much simpler when every mmap handler has same API regardless
+ of arch. Where API means whether params are in regs or in memory,
+ and whether offset is in bytes, pages, or 4k blocks.
+
+ Then we just insert correct function pointers into
+ arch syscall tables.
+
+ It turns out there are four common mmap APIs over
+ all architectures which exist in Linux kernel,
+ and one outlier for S390.
+
+ A number of mmap decoders were plain wrong in arch tables.
+ For example, BFIN has no old_mmap. It returns ENOSYS.
+ I checked kernel sources for all arches nad fixed the tables.
+
+ There was dead code for x86_64 for old_mmap:
+ x86_64 has no old_mmap.
+
+ * mem.c: Refactor mmap functions so that we have five mmap syscall
+ handlers, each with the fixed API (not varying by arch).
+ * pathtrace.c (pathtrace_match): Adjust sys_func == mmap_func checks.
+ * linux/syscall.h: Declare new mmap syscall handler functions.
+ * linux/arm/syscallent.h: mmap2 is sys_mmap_pgoff.
+ * linux/avr32/syscallent.h: mmap is sys_mmap_pgoff.
+ * linux/bfin/syscallent.h: old_mmap is ENOSYS, mmap2 is sys_mmap_pgoff.
+ * linux/hppa/syscallent.h: mmap2 is sys_mmap_4koff.
+ * linux/i386/syscallent.h: mmap2 is sys_mmap_pgoff.
+ * linux/ia64/syscallent.h: mmap2 is sys_mmap_pgoff.
+ * linux/m68k/syscallent.h: mmap2 is sys_mmap_pgoff.
+ * linux/microblaze/syscallent.h: old_mmap is sys_mmap, mmap2 is sys_mmap_pgoff.
+ * linux/mips/syscallent.h: mmap is sys_mmap_4kgoff.
+ * linux/or1k/syscallent.h: mmap2 is sys_mmap_pgoff.
+ * linux/powerpc/syscallent.h: mmap2 is sys_mmap_4kgoff.
+ * linux/s390/syscallent.h: mmap2 is sys_old_mmap_pgoff.
+ * linux/s390x/syscallent.h: mmap is sys_old_mmap and thus has 1 arg.
+ * linux/sh/syscallent.h: old_mmap2 is sys_mmap, mmap2 is sys_mmap_4koff.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/sparc/syscallent1.h: mmap is TD|TM.
+ * linux/tile/syscallent1.h: mmap2 is sys_mmap_4koff.
+
+2013-02-18 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Remove unused function sys_mmap64.
+ No wonder that it is unused.
+ It's code looked quite questionable.
+
+ * mem.c (sys_mmap64): Remove this function.
+
+ Remove code which supports systems with long long off_t.
+ While looking at mmap mess, did experimenting in order
+ to figure out what gets used when.
+
+ Tried building armv4tl, armv5l, armv6l, mips, mipsel, i686,
+ x86_64 and none of they have long long off_t,
+ which isn't suprprising: we aren't using glibc defines
+ which enable that.
+
+ Moreover, we SHOULD NOT use off_t in syscall decode!
+ Its size depends on libc, not on arch! I.e. it is essentially
+ unpredictable and can even in theory vary on the same arch
+ with different libc.
+
+ We should use longs or long longs, in a way which matches
+ architectural ABI for the given syscall. There are usually
+ *at most* two permutations, no need to add yet another variable
+ (sizeof(off_t)) to the mix.
+
+ This change removes almost all HAVE_LONG_LONG_OFF_T conditionals,
+ which will reveal further possible simplifications.
+
+ * mem.c: Remove code conditional on HAVE_LONG_LONG_OFF_T.
+ As a result, never remap sys_mmap64 to sys_mmap.
+ (print_mmap): Compile unconditionally.
+ (sys_old_mmap): Compile unconditionally.
+ (sys_mmap): Compile unconditionally.
+ * io.c (sys_sendfile): Add a FIXME comment.
+ * file.c: Remove code conditional on HAVE_LONG_LONG_OFF_T.
+ As a result, never remap sys_*stat64 to sys_*stat etc.
+ (sys_truncate): Compile unconditionally.
+ (realprintstat): Likewise.
+ (sys_stat): Likewise.
+ (sys_fstat): Likewise.
+ (sys_lstat): Likewise.
+ * desc.c (printflock): Likewise.
+
+ Fixes in "new" mmap.
+ * mem.c (sys_mmap): Ensure unsigned expansion of tcp->u_arg[5].
+ Add page shift of offset for I386.
+ Use tcp->ext_arg[5] as offset for X32.
+ (sys_old_mmap): [X32] Remove this function, X32 doesn't use is.
+
+ Preliminary simplifications in mmap functions.
+ * mem.c: Move "define sys_mmap64 sys_mmap" from the top
+ to the only place it affects.
+ (print_mmap): Make offset argument unsigned, for safer implicit conversions.
+ (sys_old_mmap): [IA64] use unsigned narrow_arg[].
+ Cast u_arg[5] (offset param) to unsigned long, to prevent erroneous signed
+ expansion.
+
+2013-02-17 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Remove broken HAVE_LONG_LONG conditionals.
+ We use printllval without HAVE_LONG_LONG guards in many places,
+ but define it only if HAVE_LONG_LONG. This means that
+ on !HAVE_LONG_LONG systems we won't build for some time now.
+
+ * defs.h: Remove HAVE_LONG_LONG guard around LONG_LONG() macro
+ and printllval() function declaration.
+ * util.c: Remove HAVE_LONG_LONG guard around printllval()
+ function definition.
+ (printllval): Add compile-time error check for using wrong
+ if branch. Explain places where we deliberately use mismatched
+ types for printf formats.
+
+ Use explicit long type instead of off_t.
+ * file.c (sys_lseek): Use long instead of off_t.
+
+ Merge two identical tables.
+ * defs.h: Declare whence_codes[].
+ * desc.c: Delete static whence[].
+ (printflock[64]): Use whence_codes.
+ * file.c: Make whence_codes[] non-static.
+ Add SEEK_DATA and SEEK_HOLE to them.
+
+ Remove wrong x32-specific lseek.
+ Testing confirmed what I suspected: x32 lseek uses kernel-sized
+ (i.e. wide) long for offset parameter.
+
+ * file.c: Delete sys_lseek32.
+ * linux/syscall.h: Likewise.
+ * linux/x32/syscallent1.h: Likewise.
+ * test/x32_lseek.c: New file.
+
+ Fix SEGV in lseek.
+ I found hard way why the code was using "_whence" name.
+
+ * file.c: Rename whence[] to whence_codes[].
+ (sys_lseek): Fix printxval() to use whence_codes[].
+ (sys_lseek32): Likewise.
+
+ Comment inner workings of sys_[l]lseek.
+ The code doesn't look fully correct to me, but I need to experiment
+ on actual x32 machine before I start "fixing" things.
+ For now, add comments, and optimize out one tprints() call...
+
+ * file.c (sys_lseek): Rename '_whence' as 'whence'.
+ Merge printing of ", " into subsequent tprintf.
+ (sys_lseek32): Likewise.
+ (sys_llseek): Likewise.
+
+ Cosmetic fixes to syscall tables, no code changes.
+
+2013-02-16 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Make linux/mips/syscallent.h smaller.
+ * linux/mips/syscallent.h: Remove trailing empty elements.
+ Compactify huge stretches of NULL elements in the middle.
+
+ Simple optimization in get_error.
+ * defs.h: Define SCNO_IN_RANGE(scno) macro.
+ * syscall.c (get_error): Change return type to void.
+ Use SCNO_IN_RANGE instead of SCNO_IS_VALID.
+ (trace_syscall_exiting): Stop checking get_error() return value.
+
+ Mass rename of SCNO_IN_RANGE define to SCNO_IS_VALID.
+
+ Finish prefixing regs struct names with arch_
+ * defs: Rename regs -> sparc_regs.
+ * signal.c (sys_sigreturn): Use new variable name.
+ * syscall.c: Rename regs -> sparc_regs, regs -> avr32_regs.
+ (getrval2): Use new variable names.
+ (printcall): Likewise.
+
+2013-02-15 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Use the same type for i386_regs on 32-bit and 64-bit x86.
+ * defs.h: Stop including <asm/ptrace.h> for x86.
+ Change i386_regs from "struct pt_regs" to "struct user_regs_struct".
+ * syscall.c: Likewise.
+
+ Fix build error on Tile.
+ * syscall.c (get_scno): [TILE] Remove TCB_WAITEXECVE check,
+ it is never true on Tile, and stopped compiling when
+ TCB_WAITEXECVE define was removed for Tile.
+
+ x86: zero-extend 32-bit args in syscall entry instead of sign-extension.
+ Zero-extension is slightly more common that sign-extension:
+ all pointers are zero-extended, and some other params are unsigned.
+
+ Whereas signed ones (fds, pids, etc) are often treated as
+ _32-bit ints_ even by kernel, so just unconditionally casting
+ such tcp->u_arg[N] to int works.
+
+ * syscall.c (get_syscall_args): [X86] Zero-extend 32-bit args
+ instead of sign-extension.
+
+ Macroize conditional signed widening operation.
+ * defs.h: Define widen_to_long() macro.
+ * signal.c (sys_kill): Use it instead of open-coding it.
+ (sys_tgkill): Use widen_to_long() on pids.
+ * resource.c (decode_rlimit): Formatting fix.
+
+ A better handling of current_wordsize.
+ On x86_64:
+ text data bss dec hex filename
+ 435661 26628 47424 509713 7c711 strace_old
+ 435501 26612 47440 509553 7c671 strace_new_clever_wordsize
+
+ On x32 and arm it should be even better, current_wordsize becomes
+ a constant there.
+
+ * defs.h: Declare current_wordsize as a variable if needed,
+ else declare as a constant define.
+ Remove declatation of personality_wordsize[].
+ * syscall.c: Make personality_wordsize[] static.
+ Declare current_wordsize as a variable if needed.
+ (set_personality): Set current_wordsize only if non-constant.
+
+ Remove unnecessary "return 0" statements.
+ * util.c (change_syscall): Remove dummy "return 0"s.
+
+2013-02-14 Denys Vlasenko <vda.linux@googlemail.com>
+
+ x86: fix required kernel version for GETREGSET.
+ * syscall.c (get_regs): [X86] Use GETREGSET only if kernel >= 2.6.35
+
+ Whitespace fix, no code changes.
+
+2013-02-14 Christian Svensson <blue@cmd.nu>
+
+ Add support for the OpenRISC 1000 platform.
+ * configure.ac: Added or1k architecture..
+ * defs.h: Added or1k to use register reading system.
+ * linux/or1k/ioctlent.h.in: Use i386 ioctls.
+ * linux/or1k/syscallent.h: New file.
+ * process.c: Added or1k register defs to struct_user_offsets[].
+ * syscall.c: Added or1k_io iovec for or1k GETREGSET,
+ regset structure for or1k.
+ (printcall): Added handling for or1k.
+ (get_regs): Likewise.
+ (get_scno): Likewise.
+ (get_syscall_args): Likewise.
+ (get_syscall_result): Likewise.
+ (get_error): Likewise.
+ * util.c (change_syscall): Added dummy handling for or1k.
+ * system.c (sys_or1k_atomic): New function (or1k specific syscall).
+
+2013-02-14 Denys Vlasenko <vda.linux@googlemail.com>
+
+ [X86] Use ptrace(PTRACE_GETREGSET, NT_PRSTATUS) to get registers.
+ Unlike PTRACE_GETREGS, this new method detects 32-bit processes
+ reliably, without checking segment register values which
+ are undocumented and aren't part of any sort of API.
+ While at it, also fixed x32 detection to use __X32_SYSCALL_BIT,
+ as it should have been from the beginning.
+
+ * defs.h: Declare os_release and KERNEL_VERSION.
+ * strace.c: Make os_release non-static, remove KERNEL_VERSION define.
+ * syscall.c: New struct i386_user_regs_struct,
+ static union x86_regs_union and struct iovec x86_io.
+ (printcall): Use i386_regs or x86_64_regs depending on x86_io.iov_len.
+ (get_regs): On x86 and kernels 2.6.30+, use PTRACE_GETREGSET,
+ on earlier kernels fall back to old method.
+ (get_scno): [X86] Determine personality based on regset size
+ on scno & __X32_SYSCALL_BIT.
+ (syscall_fixup_on_sysenter): Use i386_regs or x86_64_regs depending
+ on x86_io.iov_len.
+ (get_syscall_args): Likewise.
+ (get_error): Likewise.
+
+2013-02-13 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Rename some register statics by prefixing their names with arch.
+ This makes it easier to grep for them.
+
+ * syscall.c: Rename variables:
+ r0 -> bfin_r0,alpha_r0,sh_r0.
+ a3 -> mips_a3.
+ r2 -> mips_r2.
+ (get_scno): Use new variable names.
+ (get_syscall_result): Likewise.
+ (get_error): Likewise.
+
+ Factor out code to check addr, fetch and print siginfo.
+ * defs.h: Declare new function printsiginfo_at(tcp, addr).
+ * process.c (sys_waitid): Use printsiginfo_at().
+ (sys_ptrace): Likewise.
+ * signal.c: (printsiginfo_at): Implement this new function.
+ (sys_rt_sigsuspend): Use printsiginfo_at().
+ (sys_rt_sigtimedwait): Likewise.
+
+ Decode struct iov in PTRACE_GET/SETREGSET.
+ * process.c (sys_ptrace): Decode struct iov in PTRACE_GET/SETREGSET.
+
+2013-02-12 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Unify representations of struct user fields for subarchitectures.
+ * process.c: Unify MIPS and LINUX_MIPSN32, and SH and SH64 parts of
+ struct_user_offsets[].
+
+ Add start_code and start_data members of struct user.
+ * process.c: Add start_code and start_data members of struct user
+ in struct_user_offsets[], where appropriate.
+
+ Remove hacks for old kernels for architectures which require new kernels
+ * util.c (change_syscall): For MICROBLAZE, replace code
+ with dummy "return 0" and a comment explaining why that is ok
+ for this architecture.
+
+ Remove stray syscall result reading code on syscall entry for s390.
+ This is a leftover from sysenter/sysexit split.
+ I can't run-test it, but from code inspection it seems to be correct.
+
+ * syscall.c (get_scno): Remove stray syscall result reading for s390[x].
+
+ Deobfuscate definitions of struct user offsets.
+ The maze of ifdefs/ifndefs was scaring new contributors.
+ Format it so that every arch has its own ifdef block.
+
+ * process.c: Deobfuscate definitions of struct user offsets.
+
+ Remove hacks for old kernels for architectures which require new kernels
+ * defs.h: Do not define TCB_WAITEXECVE for AARCH64.
+ * util.c (change_syscall): For AARCH64 and X32, replace code
+ with dummy "return 0" and a comment explaining why that is ok
+ for these architectures.
+
+ Remove old kernel hacks for architectures which require new kernels.
+ * defs.h: Do not define TCB_WAITEXECVE for AVR32, BFIN and TILE.
+ * util.c (change_syscall): For AVR32, BFIN and TILE, replace code
+ with dummy "return 0" and a comment explaining why that is ok
+ for these architectures.
+
+ Handle recv[m]msg for non-native 32-bit personality syscalls.
+ * net.c (printmsghdr): If current_wordsize is 4 and long is wider than it,
+ read 32-bit struct msghdr and expand it into a native one before using it.
+ (printmmsghdr): Likewise for struct mmsghdr.
+
+ Fix is_negated_errno() check for X32.
+ X32's return value is 64-bit. We were truncating it to 32-bit long
+ before checking for -errno.
+
+ * syscall.c (is_negated_errno_x32): New function.
+ (get_error): Use is_negated_errno_x32 for X32 architecture.
+
+ Remove unused / ambiguously used defines.
+ We sometimes use LINUXSPARC and sometimes (more often)
+ use "defined(SPARC) || defined(SPARC64)". Better to use
+ one construct consistently.
+ LINUX_MIPS64 is altogether unused.
+
+ * defs.h: Remove LINUXSPARC and LINUX_MIPS64 defines.
+ Move PTRACE_xxx compat defines up, before arch-specific
+ machinery. Use defined(SPARC) || defined(SPARC64)
+ instead of LINUXSPARC.
+ * file.c: Use defined(SPARC) || defined(SPARC64) instead of LINUXSPARC.
+ * signal.c: Likewise.
+
+2013-02-11 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Preparatory patch for "new" x86 personality detection.
+ * syscall.c: Move PT_FLAGS_COMPAT define to its only user, get_scno().
+ Rename arm_regs_union's fields to names less likely to collide with
+ system defines.
+ (get_regs): Use sizeof(arm_regs_union) instead of sizeof(aarch64_regs).
+ This should be the same, but htis way it's cleaner.
+ Remove __X32_SYSCALL_MASK and use __X32_SYSCALL_BIT instead.
+ Explain 64-bit check in X32 build better.
+
+2013-02-09 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix sigaltstack decoder.
+ strace used to hang when decoding sigaltstack called with invalid
+ stack_t pointers because of mishandling umove() return code.
+
+ * signal.c (print_stack_t): Handle unfetchable stack_t properly.
+ Change return type to void.
+ (sys_sigaltstack): Update print_stack_t() usage.
+
+ Reported-by: kawillia@ucalgary.ca
+
+2013-02-09 Mike Frysinger <vapier@gentoo.org>
+
+ Fix decoding of sysctl() when oldval fields are NULL.
+ If you call glibc's syscall wrapper like so:
+ static int name[] = { CTL_NET, NET_IPV4, NET_IPV4_LOCAL_PORT_RANGE };
+ int buffer[2] = { 32768, 61000 };
+ size_t size = sizeof(buffer);
+ sysctl(name, 3, 0, 0, buffer, size);
+ (note that oldval/oldlenp are NULL).
+
+ The current strace code complains like so:
+ _sysctl({{CTL_NET, NET_IPV4, NET_IPV4_LOCAL_PORT_RANGE, 38}, 3, process_vm_readv: Bad address
+ (nil), 0, 0x7fffe23c3960, 8}) = -1 EACCES (Permission denied)
+
+ Since passing NULL for the old values is valid, handle that explicitly.
+ This also simplifies the code a bit by splitting up the handling of the
+ new and old args so that we only handle the new args once.
+
+ Now the output looks like:
+ _sysctl({{CTL_NET, NET_IPV4, NET_IPV4_LOCAL_PORT_RANGE, 38}, 3, NULL, 0, 0x7fff8c0c91b0, 8) = -1 EACCES (Permission denied)
+
+ * system.c (sys_sysctl): Check if info.oldval is NULL first. Move the
+ processing of oldlen/info.newval/info.newlen out so they always get
+ executed. Fix the format strings so we use %lu for unsigned long rather
+ than a mix of %ld and %lu.
+
+2013-02-08 Denys Vlasenko <vda.linux@googlemail.com>
+
+ If we are on a glibc system, assume it's at least glibc 2.1.
+ It is not likely anyone uses glibc older that that:
+ glibc 2.1.1 was released in 1999
+
+ * net.c: Remove test for glibc >= 2.1.
+ * signal.c: Remove code which is compiled only for glibc < 2.1.
+ * util.c: Likewise.
+
+ S390: stop using needlessly static long pc variable.
+ * syscall.c: Remove "static long pc" variable.
+ (get_scno): Use an automatic long variable instead of a static.
+
+ Dying suddenly with abort() is rude, avoid if possible.
+ * file.c (sys_utime): Don't call abort() if wordsize is strange.
+ Instead, warn user about it.
+ * desc.c (printflock): Use the same message string as in sys_utime.
+
+ Remove vestigial hacks around non-Linux struct sigactions.
+ * signal.c: Stop using __sighandler_t glibc'ism. Remove SA_HANDLER macro.
+ Explain why we can't use "sa_handler" as a field name.
+ (sys_sigaction): Use __sa_handler instead of SA_HANDLER macro.
+ (sys_rt_sigaction): Likewise.
+
+ Optimize AArch64 handling of 32-bit personality.
+ By putting aarch64_regs and arm_regs into a union,
+ register copying is eliminated.
+ No need to check and change personality on syscall exit.
+
+ * defs.h: Remove unused NUM_ARM_REGS define. Fix indentation.
+ * syscall.c: Put aarch64_regs and arm_regs into a union.
+ (update_personality): Shorten bitness message.
+ (printcall): Add commented-out PC printing.
+ (get_regs): Remove now-unnecessary 64-to-32 bits register copying.
+ (get_syscall_result): Drop personality changing code.
+
+2013-02-07 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Rename some register statics by prefixing their names with arch.
+ This makes it easier to grep for them.
+
+ * syscall.c: Make IA64's r8, r10 global variables static.
+ Rename variables:
+ r8,r10 -> ia64_r8,ia64_r10.
+ d0 -> m68k_d0.
+ a3 -> alpha_a3.
+ r28 -> hppa_r28.
+ r9 -> sh64_r9.
+ r10 -> cris_r10.
+ r3 -> microblaze_r3.
+ (get_scno): Use new variable names.
+ (syscall_fixup_on_sysenter): Likewise.
+ (get_syscall_result): Likewise.
+ (get_error): Likewise.
+
+2013-02-06 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Rename ARM's regs structure to arm_regs.
+ Compile-tested.
+
+ * defs.h: Rename regs structure to arm_regs.
+ * syscall.c: Likewise.
+ (printcall): Use new name instead of old one.
+ (get_regs): Likewise.
+ (get_scno): Likewise.
+ (get_syscall_args): Likewise.
+ (get_error): Likewise.
+ * signal.c (sys_sigreturn): Likewise.
+
+ Stop needlessly using static variable.
+ * syscall.c: Remove static long psr.
+ (get_scno): Use local psr variable.
+ (get_syscall_result): Likewise.
+
+ Shortcut tests for fork/exec syscalls.
+ This change should speed up strace by a tiny bit.
+
+ More importantly, it makes it much more clear that
+ fork and exec fixups are not necessary for any reasonably
+ recent kernels. IOW: syscall_fixup_for_fork_exec() and its callees
+ are all dead code.
+
+ * defs.h: Declare new need_fork_exec_workarounds flag variable.
+ * strace.c: Define need_fork_exec_workarounds flag variable.
+ (test_ptrace_setoptions_followfork): Return 0/1 as success/fail indicator.
+ (test_ptrace_setoptions_for_all): Likewise.
+ (init): Set need_fork_exec_workarounds to TRUE if needed.
+ * syscall.c: Rename internal_syscall() to syscall_fixup_for_fork_exec().
+ (trace_syscall_entering): Call syscall_fixup_for_fork_exec() only if
+ need_fork_exec_workarounds == TRUE.
+ (trace_syscall_exiting): Likewise.
+
+2013-02-05 Ben Noordhuis <info@bnoordhuis.nl>
+
+ Improve perf_event_open argument decoding.
+ * configure.ac (AC_CHECK_HEADERS): Add linux/perf_event.h.
+ * desc.c [HAVE_LINUX_PERF_EVENT_H]: Include <linux/perf_event.h>.
+ (perf_event_open_flags): New xlat structure.
+ (sys_perf_event_open): New function.
+ * linux/dummy.h (sys_perf_event_open): Remove.
+ * linux/syscall.h (sys_perf_event_open): New prototype.
+
+2013-02-05 Chris Metcalf <cmetcalf@tilera.com>
+
+ tile: fix merge skew with new get_regs architecture.
+ * defs.h [TILE]: Declare clear_regs(), get_regs() and get_regs_error.
+ * syscall.c (get_regs) [TILE]: Fix merge skew.
+ (printcall) [TILE]: fix a compiler warning about pt_reg_t in
+ a printf expression.
+
+2013-02-05 Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
+
+ mount: decode MS_NOSEC.
+ * system.c (MS_NOSEC): Define.
+ (mount_flags): Add MS_NOSEC.
+
+ mmap: decode MAP_UNINITIALIZED.
+ * mem.c (mmap_flags): Add MAP_UNINITIALIZED.
+
+2013-02-05 Dmitry V. Levin <ldv@altlinux.org>
+
+ Print 64-bit instruction pointers zero padded.
+ * syscall.c (printcall): Print 64-bit instruction pointers zero padded.
+
+ x86_64: fix compilation warning introduced in previous commit.
+ * syscall.c (printcall): Cast x86_64_regs.rip to the type being printed.
+
+2013-02-05 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Simple bug fix for x86_86.
+ * syscall.c (printcall): Use x86_64_regs.rip, not x86_64_regs.ip.
+
+2013-02-05 Chris Metcalf <cmetcalf@tilera.com>
+
+ Add tilegx support to strace.
+ tilegx support has been in the kernel since 3.0.
+ In addition, fix some issues with the tilepro support already
+ present in strace, primarily the decision to use the
+ <asm/unistd.h> numbering space for system calls.
+
+ * defs.h [TILE]: Include <asm/ptrace.h> and provide an extern
+ struct pt_regs tile_regs for efficiency. Provide compat 32-bit
+ personality via SUPPORTED_PERSONALITIES, PERSONALITY0_WORDSIZE,
+ PERSONALITY1_WORDSIZE, and DEFAULT_PERSONALITY.
+ * linux/tile/errnoent1.h: New file, includes linux/errnoent.h.
+ * linux/tile/ioctlent1.h: New file, includes linux/ioctlent.h.
+ * linux/tile/signalent1.h: New file, includes linux/signalent.h.
+ * linux/tile/syscallent.h: Update with new asm-generic syscalls.
+ The version previously committed was the from the first tile patch
+ to LKML, which subsequently was changed to use <asm-generic/unistd.h>.
+ * linux/tile/syscallent1.h: Copy from linux/tile/syscallent.h.
+ * mem.c (addtileflags) [TILE]: use %ld properly for a "long" variable.
+ * process.c [TILE]: Choose clone arguments correctly and properly
+ suppress all "struct user" related offsets in user_struct_offsets.
+ * signal.c [TILE]: Use tile_regs not upeek.
+ * syscall.c (update_personality) [TILE]: Print mode.
+ (PT_FLAGS_COMPAT) [TILE]: Provide if not in system headers.
+ (tile_regs) [TILE]: Define 'struct pt_regs' variable to hold state.
+ (get_regs) [TILE]: use PTRACE_GETREGS to set tile_regs rather than using upeek.
+ (get_scno) [TILE]: Set personality.
+ (get_syscall_args) [TILE]: Use tile_regs.
+ (get_syscall_result) [TILE]: Update tile_regs.
+ (get_error) [TILE]: Use tile_regs.
+ (printcall) [TILE]: Print pc.
+ (arg0_offset, arg1_offset, restore_arg0, restore_arg1) [TILE]:
+ Properly handle tile call semantics and support tilegx.
+
+2013-02-05 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Small optimization for SPARC[64] get_scno.
+ * syscall.c: Remove static unsigned long trap veriable.
+ (get_scno): Use local trap variable.
+
+ Do not compile getrval2() if not needed.
+ * syscall.c (getrval2): Do not compile it for architetures where
+ it isn't ever used.
+
+ Optimize out PTRACE_PEEKUSER with -i.
+ strace -i was fetching PC with a separate PEEKUSER
+ despite having GETREGS data:
+
+ ptrace(PTRACE_GETREGS, 22331, 0, 0x8087f00) = 0
+ ptrace(PTRACE_PEEKUSER, 22331, 4*EIP, [0x80dd7b7]) = 0
+ write(3, "[080dd7b7] ioctl(0, SNDCTL_TMR_T"..., 82) = 82
+ ptrace(PTRACE_SYSCALL, 22331, 0, SIG_0) = 0
+
+ Now it does this:
+
+ ptrace(PTRACE_GETREGS, 22549, 0, 0x8087ea0) = 0
+ write(3, "[080dd7b7] ioctl(0, SNDCTL_TMR_T"..., 82) = 82
+ ptrace(PTRACE_SYSCALL, 22549, 0, SIG_0) = 0
+
+ Analogous improvement in sys_sigreturn() is also implemented.
+
+ * defs.h: Declare extern struct pt_regs regs for SPARC[64] and ARM.
+ Declare clear_regs(), get_regs() and get_regs_error flag variable.
+ * strace.c (trace): Call get_regs(pid) as soon as we know the tcb
+ and that it is stopped.
+ * syscall.c (get_regs): New function. Used to fetch registers early,
+ just after tracee has stopped.
+ (printcall): Move it here from util.c. Use global regs.REG data,
+ if available on the arch, instead of re-fetching it.
+ (get_scno): Use global regs.REG data.
+ (get_syscall_result): Likewise.
+ * signal.c (sys_sigreturn): Likewise.
+ * util.c (printcall): Moved to syscall.c.
+
+2012-12-15 Stanislav Brabec <sbrabec@suse.cz>
+
+ Fix sys_semtimedop decoding on s390x.
+ The s390 and s390x pass semtimedop arguments differently from other
+ architectures. sys_semtimedop parser was fixed for s390 by commit
+ v4.6-177-ge0f5fd8, and s390x requires the same fix.
+
+ * linux/ipc.c (sys_semtimedop): Fix timespec decoding on s390x.
+
+2012-12-08 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix *xattr decoding.
+ * file.c (print_xattr_val): Do not attempt to decode a zero sized array.
+ Fixes RH#885233.
+
+2012-12-08 Stanislav Brabec <sbrabec@suse.cz>
+
+ sys_semtimedop: fix timeval argument index in wrapped call.
+ Looking at the implementation of wrapped semtimedop() call inside glibc
+ and kernel, I started to believe that timeval should be located in
+ tcp->u_arg[4] and not tcp->u_arg[5]. Fortunately, tcp->u_arg[5] now
+ works correctly as well, due to side effects of decode_ipc_subcall().
+
+ declaration in header:
+ int semtimedop(semid, *sops, nsops, *timeout);
+ 0 1 2 3
+
+ sys_ipc arguments in glibc on all patforms except s390*:
+ semid, (int) nsops, 0, CHECK_N (sops, nsops), timeout
+ 0 1 2 3 4
+ We have to use indexes: 0 3 1 4
+
+ sys_ipc arguments on s390*:
+ semid, (int) nsops, timeout, sops
+ 0 1 2 3
+ We have to use indexes: 0 3 1 2
+
+ * ipc.c (sys_semtimedop) [!S390]: Fix timeval argument index in
+ indirect_ipccall case.
+
+2012-12-06 John Spencer <maillist-strace@barfooze.de>
+
+ Fix glibc version checks.
+ * util.c: Check if __GLIBC__ is defined before using it.
+ * signal.c: Likewise. Fix __GLIBC_MINOR__ checks.
+
+2012-11-29 James Hogan <james.hogan@imgtec.com>
+
+ Add state argument to change_syscall and fix SPARC.
+ Add a state argument to change_syscall() so that SPARC can modify that
+ instead of read-modify-writing the whole register set. This function is
+ always called within an arg_setup/arg_finish_change sequence which on
+ certain architectures like SPARC will also be doing a read-modify-write.
+ This prevents the second write (from arg_finish_change) from undoing the
+ effects of the change_syscall call.
+
+ * util.c (change_syscall): Move below definition of arg_setup_state.
+ Add state argument.
+ [SPARC || SPARC64] Change to set state->u_regs[U_REG_G1] rather than
+ read-modify-writing it with PTRACE_GETREGS and PTRACE_SETREGS.
+ (setbpt, clearbpt): Pass state argument to change_syscall.
+
+2012-11-12 Steve McIntyre <steve.mcintyre@linaro.org>
+
+ Add support for tracing 32-bit ARM EABI binaries on AArch64.
+ * defs.h [AARCH64]: Copy in the definition of arm_pt_regs and the
+ accessor macros, so it's possible to build on AArch64 without
+ ARM system headers. Set SUPPORTED_PERSONALITIES to 2.
+ Define PERSONALITY0_WORDSIZE and PERSONALITY1_WORDSIZE.
+ Set DEFAULT_PERSONALITY to 1.
+ * linux/aarch64/errnoent1.h: New file, includes generic errnoent.h.
+ * linux/aarch64/ioctlent1.h: New file, includes generic ioctlent.h.
+ * linux/aarch64/signalent1.h: New file, includes generic signalent.h.
+ * linux/aarch64/syscallent1.h: Rename from linux/aarch64/syscallent.h.
+ * linux/aarch64/syscallent.h: New file, includes arm/syscallent.h.
+ * syscall.c [AARCH64]: Define aarch64_regs.
+ (update_personality) [AARCH64]: Add debug output.
+ (get_scno) [AARCH64]: Determine if we're in ARM or AArch64 mode by
+ checking the size of the returned uio structure from PTRACE_GETREGSET
+ and interpret the structure accordingly.
+ (get_syscall_result): Likewise.
+ (get_syscall_args): Merge the AArch64 and ARM sections so that on
+ AArch64 we can fall back to supporting the ARM personality.
+ (get_error): Likewise.
+
+2012-11-12 Dmitry V. Levin <ldv@altlinux.org>
+
+ Move asm-generic ioctl definitions to linux/ioctlent.h.in.
+ * linux/ioctlent.h.in: Add asm-generic ioctl entries from all
+ linux/*/ioctlent.h.in files.
+ * linux/bfin/ioctlent.h.in: Remove asm-generic ioctl entries.
+ * linux/i386/ioctlent.h.in: Likewise.
+ * linux/powerpc/ioctlent.h.in: Likewise.
+ * linux/s390/ioctlent.h.in: Likewise.
+ * linux/sparc/ioctlent.h.in: Likewise.
+
+2012-10-27 Dmitry V. Levin <ldv@altlinux.org>
+
+ Filter out redundant "*32" ioctl entries.
+ * linux/ioctlent-filter.awk: New file.
+ * Makefile.am: Use it.
+ * linux/ioctlent.h.in: Removed redundant "*32" entries.
+
+2012-10-26 Dmitry V. Levin <ldv@altlinux.org>
+
+ Enhance quotactl decoding.
+ * quota.c (sys_quotactl): Decode 2nd syscall argument using printpath.
+ * pathtrace.c (pathtrace_match): Add quotactl support.
+ * linux/*/syscallent.h: Add TF flag to quotactl entry.
+
+2012-10-26 Steve McIntyre <steve.mcintyre@linaro.org>
+
+ Add AArch64 support to strace.
+ AArch64 has been included in linux from 3.7 onwards.
+ Add support for AArch64 in strace, tested on linux in a simulator.
+
+ * configure.ac: Support AArch64.
+ * defs.h [AARCH64]: Include <sys/ptrace.h>, define TCB_WAITEXECVE.
+ * ipc.c (indirect_ipccall): Support AArch64.
+ * process.c (struct_user_offsets): Likewise.
+ * syscall.c [AARCH64]: Include <asm/ptrace.h>, <sys/uio.h>, and
+ <elf.h>. Define struct user_pt_regs regs.
+ (get_scno, get_syscall_result): Support AArch64 using PTRACE_GETREGSET.
+ (get_syscall_args, get_error): Support AArch64.
+ * linux/aarch64/ioctlent.h.in: New file.
+ * linux/aarch64/syscallent.h: New file, based on linux 3.7 version of
+ asm-generic/unistd.h.
+
+ linux: add new errno values for EPROBE_DEFER and EOPENSTALE.
+ New definitions match updates in Linux 3.4 and Linux 3.5 respectively.
+
+ * linux/errnoent.h (ERRNO_517): Change to EPROBE_DEFER.
+ (ERRNO_518): Change to EOPENSTALE.
+
+2012-10-26 Namhyung Kim <namhyung.kim@lge.com>
+
+ Add -e trace=memory option.
+ Add a new 'memory' category for tracing memory mapping related syscalls.
+
+ Affected syscalls are: break, brk, get_mempolicy, madvise, mbind,
+ migrate_pages, mincore, mlock, mlockall, mmap, move_pages, mprotect,
+ mremap, msync, munlock, munlockall, munmap, remap_file_pages, and
+ set_mempolicy.
+
+ * defs.h (TRACE_MEMORY): New macro.
+ * syscall.c (lookup_class): Handle trace=memory option.
+ * strace.1: Document it.
+ * linux/alpha/syscallent.h: Add TM flag to memory mapping related syscalls.
+ * linux/arm/syscallent.h: Likewise.
+ * linux/avr32/syscallent.h: Likewise.
+ * linux/bfin/syscallent.h: Likewise.
+ * linux/hppa/syscallent.h: Likewise.
+ * linux/i386/syscallent.h: Likewise.
+ * linux/ia64/syscallent.h: Likewise.
+ * linux/m68k/syscallent.h: Likewise.
+ * linux/microblaze/syscallent.h: Likewise.
+ * linux/mips/syscallent.h: Likewise.
+ * linux/powerpc/syscallent.h: Likewise.
+ * linux/s390/syscallent.h: Likewise.
+ * linux/s390x/syscallent.h: Likewise.
+ * linux/sh/syscallent.h: Likewise.
+ * linux/sh64/syscallent.h: Likewise.
+ * linux/sparc/syscallent.h: Likewise.
+ * linux/tile/syscallent.h: Likewise.
+ * linux/x32/syscallent.h: Likewise.
+ * linux/x86_64/syscallent.h: Likewise.
+
+2012-09-28 Mike Frysinger <vapier@gentoo.org>
+
+ x32: add 64bit annotation too.
+ Since someone can invoke these entry points directly with syscall(),
+ at least decode their name and show that they're 64bit versions rather
+ than just showing syscall_###.
+
+ * linux/x32/syscallent.h: Sync all missing entries below 312 with x86_64.
+
+2012-09-28 Dmitry V. Levin <ldv@altlinux.org>
+
+ Ignore fflush(3) return value.
+ strace used to honor fflush(3) return value in trace_syscall_entering
+ which resulted to tracees not being PTRACE_SYSCALL'ed which in turn
+ caused nasty hangups like this one:
+
+ $ strace -o'|:' pwd
+ |:: Broken pipe
+
+ There is little strace can do in case of fflush(3) returning EOF, and
+ hangup is certainly not the best solution for the issue.
+
+ * syscall.c (trace_syscall_entering): Ignore fflush(3) return value.
+
+ Use perror_msg instead of perror.
+ * signal.c (sys_sigreturn): Use perror_msg instead of perror.
+ * strace.c (tprintf, tprints, detach, startup_attach): Likewise.
+ * syscall.c (get_scno): Likewise.
+ * util.c (umoven, umovestr): Likewise.
+
+2012-09-27 Denys Vlasenko <vda.linux@googlemail.com>
+
+ process_vm_readv may return ESRCH if tracee was killed, don't complain.
+ Discovered by running test/sigkill_rain under strace.
+
+ * util.c (umoven): Do not emit error message if process_vm_readv
+ fails with ESRCH.
+ (umovestr): LikeWise.
+
+2012-09-13 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Trivial fixes, no code changes.
+ * strace.c: Fix compiler warning message about tgkill - we don't use it.
+ Fix indentation of preprocessor directives.
+ (trace): Remove outdated comment.
+
+2012-08-24 Dmitry V. Levin <ldv@altlinux.org>
+
+ Always check setreuid return code.
+ * strace.c (startup_child): Check setreuid return code.
+
+2012-08-24 Mike Frysinger <vapier@gentoo.org>
+
+ x32: update {g,s}etsockopt syscall numbers.
+ Starting with linux 3.6 (and backported to earlier kernels), these two
+ syscalls have changed numbers (moving from native to compat entry points).
+ Update the strace syscall list accordingly.
+
+ * linux/x32/syscallent.h: Move setsockopt from 54 to 541, and move
+ getsockopt from 55 to 542.
+
+2012-08-16 Dmitry V. Levin <ldv@altlinux.org>
+
+ Decode file type returned by getdents system call.
+ * file.c (sys_getdents): Decode d_type in unabbreviated mode.
+
+2012-07-12 Dmitry V. Levin <ldv@altlinux.org>
+
+ Close pipe and wait for the pipe process termination.
+ In case of normal strace termination, when the trace output is
+ redirected to a file or a pipe, close it and wait for the pipe
+ process termination.
+
+ * strace.c (main): Before normal exit, close shared_log when it
+ differs from stderr, and wait for popen_pid termination.
+
+2012-07-10 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Enable usage of PTRACE_SEIZE.
+ * defs.h: Define USE_SEIZE to 1. Remove PTRACE_SEIZE_DEVEL
+ and PTRACE_EVENT_STOP1.
+ * strace.c (ptrace_attach_or_seize): Replace PTRACE_SEIZE_DEVEL
+ with 0.
+ (trace): Do not check for PTRACE_EVENT_STOP1.
+
+2012-06-05 Mike Frysinger <vapier@gentoo.org>
+
+ x32: update syscall table.
+ This syncs with the syscall table as it is in linux 3.4.
+
+ * linux/x32/syscallent.h (59): Fix comment typo.
+ (78): Add missing getdents entry.
+ (174): Delete create_module entry (not in the kernel).
+ (181, 182, 183, 184, 185): Add missing entries.
+ (524, 536, 539, 540): Fix spacing.
+
+2012-05-18 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Merge adjacent printing operations in a few places.
+ * file.c (sys_readahead): Merge tprints() with following printllval().
+ (sys_ftruncate64): Likewise.
+ (sys_fadvise64): Likewise.
+ (sys_fadvise64_64): Likewise.
+ (sys_fallocate): Merge tprints() with following tprintf().
+
+2012-05-16 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Use %d printf format instead of %i everywhere.
+ * loop.c (loop_ioctl): Use %d instead of %i.
+ * mtd.c (mtd_ioctl): Likewise.
+
+ Fix a few goofs in sys_sysctl()
+ * system.c (sys_sysctl): Cast pointer to long, not size_t,
+ when we intend to use it as an address. Set oldlen to 0 prior
+ to reading into it - we want to have deterministic result
+ if read fails.
+
+ Stop using non-standard %Zu and %Zd formats for size_t printing.
+ The documented formats are %zu and %zd, but since our (normally disabled)
+ "fast" printf code doesn't support those too, I convert them to %lu and %ld.
+
+ * bjm.c (sys_query_module): Convert %Zd usages to %lu.
+ * system.c (sys_sysctl): Likewise.
+
+2012-05-15 Denys Vlasenko <vda.linux@googlemail.com>
+
+ Remove outdated comment about suspending new tracees.
+ We no longer track parent/child relationship between tracees.
+ Therefore, we no longer suspend new tracee until parent is seen
+ exiting form [v]fork/clone. The comment is obsolete.
+
+ * strace.c (trace): Remove outdated comment.
+
+ Make sure current_wordsize and PERSONALITY0_WORDSIZE are ints in all arches
+ On 64bit systems with a single personality, they used to be sizeof(long),
+ which has type "long", not "int", which complicates printf formats.
+
+ * defs.h: Ensure that PERSONALITY0_WORDSIZE;s tyoe is int.
+ This in turn makes sure current_wordsize is also an int.
+ * count.c (call_summary): Revert the change which added cast to int.
+
+2012-05-15 Dmitry V. Levin <ldv@altlinux.org>
+
+ Add configure --enable-gcc-Werror option.
+ * configure.ac: New option --enable-gcc-Werror.
+
+ Make x86-64 build free of artificial warnings.
+ * signal.c (sys_sigreturn): Do not issue "no sys_sigreturn" warning
+ on X86_64.
+
+2012-05-14 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix kernel release string parsing.
+ * strace.c (get_os_release): Handle "X.Y-something" utsname.release
+ strings properly.
+
+ Reported-by: Bryce Gibson <bryce@gibson-consulting.com.au>
+
+2012-05-14 Denys Vlasenko <vda.linux@googlemail.com>
+
+ On clearing "breakpopint", restore syscall number too.
+ This fixes Fedora bug 659382.
+ Low risk: this code is not supposed to be used on any non-acient kernel.
+
+ * util.c (clearbpt): Restore syscall number too.
+
+2012-05-05 Mike Frysinger <vapier@gentoo.org>
+
+ util: fix building when glibc has a stub process_vm_readv.
+ If you have a newer glibc which provides process_vm_readv, but it is built
+ against older kernel headers which lack __NR_process_vm_readv, the library
+ will contain a stub implementation that just returns ENOSYS. Autoconf
+ checks for this case explicitly and will declare it as unavailable. So we
+ end up in a case where the headers provide the prototype, but autoconf has
+ not defined HAVE_PROCESS_VM_READV, so we hit the same build failure again:
+
+ util.c:738:16: error: static declaration of 'process_vm_readv' follows non-static declaration
+ /usr/include/bits/uio.h:58:16: note: previous declaration of 'process_vm_readv' was here
+
+ So rename our local function to something unique, and add a define so the
+ callers all hit the right place.
+
+ * util.c (strace_process_vm_readv): Rename from process_vm_readv.
+ (process_vm_readv): Define to strace_process_vm_readv.
+
+2012-05-03 Dmitry V. Levin <ldv@altlinux.org>
+
+ doc: describe documentation policy.
+ * README-hacking: Describe documentation policy.
+
2012-05-02 Dmitry V. Levin <ldv@altlinux.org>
+ maint: post-release administrivia.
+ * NEWS: Add header line for next release.
+
Prepare for 4.7 release.
* configure.ac: Version 4.7.
* debian/changelog: 4.7-1.
diff --git a/NEWS b/NEWS
index 1f3de08..1ec49f7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,58 @@
-Noteworthy changes in release 4.7
-=================================
+Noteworthy changes in release 4.8 (2013-06-03)
+==============================================
+
+* Changes in behavior
+ * In case of normal strace termination, when the trace output is
+ redirected to a pipe, strace now closes it and waits for the pipe
+ process termination before exit.
+
+* Improvements
+ * Implemented tracing using PTRACE_SEIZE API (when available).
+ * Implemented more reliable PTRACE_GETREGSET-based process personality
+ detection on x86-64 and x32 (when available).
+ * Added -e trace=memory option for tracing memory mapping related syscalls.
+ * Documented -b option.
+ * Allowed exit status messages to be suppressed by giving -q option twice.
+ * Added AArch64 architecture support
+ (addresses Debian bug #693074 and Fedora bug #969858).
+ * Added support for OpenRISC 1000, Meta, and Xtensa architectures.
+ * Added tilegx personality support for Tile.
+ * Enhanced support of NOMMU architectures.
+ * Enhanced decoding of getdents, mmap, perf_event_open, ptrace, and
+ quotactl syscalls.
+ * Added new syscall entries to match Linux 3.9.
+ * Regenerated the list of common ioctl names from Linux 3.9.
+ * Updated the list of errno constants.
+ * Updated lists of AF_*, MADV_*, MAP_*, MSG_*, MS_*, PF_*, PR_*,
+ PTRACE_O_*, and TCP_* constants.
+ * Implemented decoding of UBI ioctls.
+ * Removed redundant "*32" ioctl names.
+
+* Bug fixes
+ * Fixed ERESTARTNOINTR leaking to userspace on ancient kernels
+ (addresses Fedora bug #659382).
+ * Fixed kernel release string parsing
+ (addresses Debian bug #702309).
+ * Fixed decoding of *xattr syscalls
+ (addresses Fedora bug #885233).
+ * Fixed handling of files with 64-bit inode numbers by 32-bit strace
+ (addresses Fedora bug #912790).
+ * Fixed tracing forks on SPARC.
+ * Fixed decoding of fadvise64, fallocate, ftruncate64, io_submit, pread,
+ preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl,
+ and truncate64 syscalls.
+ * Fixed categories of multiple syscalls on most of supported architectures.
+ * Fixed decoding of non-native 32-bit personality recv[m]msg syscalls.
+ * Fixed decoding of multiple 32-bit personality syscalls on x32.
+ * Fixed decoding of long long syscall arguments on ARM, MIPS/o32, PowerPC,
+ S390x, and Tile architectures.
+ * Fixed semtimedop decoding on S390x.
+ * Fixed sram_alloc decoding on Blackfin.
+ * Fixed build when process_vm_readv is a stab.
+ * Fixed build with older versions of libaio.h.
+
+Noteworthy changes in release 4.7 (2012-05-02)
+==============================================
* Changes in behavior
* strace no longer suspends waitpid until there is a child
@@ -74,8 +127,8 @@
* Linux kernel >= 2.6.18 is recommended. Older versions might still
work but they haven't been thoroughly tested with this release.
-Noteworthy changes in release 4.6
-=================================
+Noteworthy changes in release 4.6 (2011-03-15)
+==============================================
* Changes in behavior
* Print diagnostic information about changes in personality mode to
@@ -125,8 +178,8 @@
* Fixed misleading italics in the manual page.
(Addresses Debian bug #589323).
-Noteworthy changes in release 4.5.20
-====================================
+Noteworthy changes in release 4.5.20 (2010-04-13)
+=================================================
* Improvements
* Implemented decoding of new linux syscalls: inotify_init1, recvmmsg.
@@ -160,8 +213,8 @@
(Addresses Debian bug #513014)
* Corrected handling of killed threads.
-Noteworthy changes in release 4.5.19
-====================================
+Noteworthy changes in release 4.5.19 (2009-10-21)
+=================================================
* Changes in behavior
* When command exits, strace now exits with the same exit status.
diff --git a/README b/README
index 244a5c3..4ef0834 100644
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
This is strace, a system call tracer for Linux.
strace is released under a Berkeley-style license at the request
-of Paul Kranenburg; see the file COPYRIGHT for details.
+of Paul Kranenburg; see the file COPYING for details.
See the file CREDITS for a list of authors and other contributors.
diff --git a/bjm.c b/bjm.c
index 6ae3758..cd7dc13 100644
--- a/bjm.c
+++ b/bjm.c
@@ -115,7 +115,7 @@
printflags(modflags, mi.flags, "MOD_???");
tprintf(", usecount=%lu}, ", mi.usecount);
}
- tprintf("%Zu", ret);
+ tprintf("%lu", (unsigned long)ret);
} else if ((tcp->u_arg[1]==QM_MODULES) ||
(tcp->u_arg[1]==QM_DEPS) ||
(tcp->u_arg[1]==QM_REFS)) {
@@ -127,11 +127,11 @@
if (!data) {
fprintf(stderr, "out of memory\n");
- tprintf(" /* %Zu entries */ ", ret);
+ tprintf(" /* %lu entries */ ", (unsigned long)ret);
} else {
if (umoven(tcp, tcp->u_arg[2],
tcp->u_arg[3], data) < 0) {
- tprintf(" /* %Zu entries */ ", ret);
+ tprintf(" /* %lu entries */ ", (unsigned long)ret);
} else {
for (idx = 0; idx < ret; idx++) {
tprintf("%s%s",
@@ -143,8 +143,8 @@
free(data);
}
} else
- tprintf(" /* %Zu entries */ ", ret);
- tprintf("}, %Zu", ret);
+ tprintf(" /* %lu entries */ ", (unsigned long)ret);
+ tprintf("}, %lu", (unsigned long)ret);
} else if (tcp->u_arg[1]==QM_SYMBOLS) {
tprints("{");
if (!abbrev(tcp)) {
@@ -154,11 +154,11 @@
if (!data) {
fprintf(stderr, "out of memory\n");
- tprintf(" /* %Zu entries */ ", ret);
+ tprintf(" /* %lu entries */ ", (unsigned long)ret);
} else {
if (umoven(tcp, tcp->u_arg[2],
tcp->u_arg[3], data) < 0) {
- tprintf(" /* %Zu entries */ ", ret);
+ tprintf(" /* %lu entries */ ", (unsigned long)ret);
} else {
for (idx = 0; idx < ret; idx++) {
tprintf("%s{name=%s, value=%lu}",
@@ -171,8 +171,8 @@
free(data);
}
} else
- tprintf(" /* %Zu entries */ ", ret);
- tprintf("}, %Zd", ret);
+ tprintf(" /* %lu entries */ ", (unsigned long)ret);
+ tprintf("}, %ld", (unsigned long)ret);
} else {
printstr(tcp, tcp->u_arg[2], tcp->u_arg[3]);
tprintf(", %#lx", tcp->u_arg[4]);
@@ -195,8 +195,7 @@
sys_init_module(struct tcb *tcp)
{
if (entering(tcp)) {
- tprintf("%#lx, ", tcp->u_arg[0]);
- tprintf("%lu, ", tcp->u_arg[1]);
+ tprintf("%#lx, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
printstr(tcp, tcp->u_arg[2], -1);
}
return 0;
diff --git a/block.c b/block.c
index ea571b6..374002e 100644
--- a/block.c
+++ b/block.c
@@ -188,7 +188,7 @@
tprintf(", %#lx", arg);
else
tprintf(", %lu", val);
- }
+ }
break;
#ifdef HAVE_BLKGETSIZE64
diff --git a/count.c b/count.c
index 9496b04..8395466 100644
--- a/count.c
+++ b/count.c
@@ -35,7 +35,9 @@
#include "defs.h"
+/* Per-syscall stats structure */
struct call_counts {
+ /* system time spent in syscall (not wall clock time) */
struct timeval time;
int calls, errors;
};
@@ -45,10 +47,14 @@
static struct timeval shortest = { 1000000, 0 };
+/* On entry, tv is syscall exit timestamp */
void
count_syscall(struct tcb *tcp, struct timeval *tv)
{
- if (!SCNO_IN_RANGE(tcp->scno))
+ struct call_counts *cc;
+ unsigned long scno = tcp->scno;
+
+ if (!SCNO_IN_RANGE(scno))
return;
if (!counts) {
@@ -56,16 +62,20 @@
if (!counts)
die_out_of_memory();
}
+ cc = &counts[scno];
- counts[tcp->scno].calls++;
+ cc->calls++;
if (tcp->u_error)
- counts[tcp->scno].errors++;
+ cc->errors++;
+ /* tv = wall clock time spent while in syscall */
tv_sub(tv, tv, &tcp->etime);
- if (tv_cmp(tv, &tcp->dtime) > 0) {
- static struct timeval one_tick;
- if (one_tick.tv_usec == 0) {
+ /* Spent more wall clock time than spent system time? (usually yes) */
+ if (tv_cmp(tv, &tcp->dtime) > 0) {
+ static struct timeval one_tick = { -1, 0 };
+
+ if (one_tick.tv_sec == -1) {
/* Initialize it. */
struct itimerval it;
@@ -74,11 +84,15 @@
setitimer(ITIMER_REAL, &it, NULL);
getitimer(ITIMER_REAL, &it);
one_tick = it.it_interval;
+//FIXME: this hack doesn't work (tested on linux-3.6.11): one_tick = 0.000000
+//tprintf(" one_tick.tv_usec:%u\n", (unsigned)one_tick.tv_usec);
}
if (tv_nz(&tcp->dtime))
+ /* tv = system time spent, if it isn't 0 */
*tv = tcp->dtime;
else if (tv_cmp(tv, &one_tick) > 0) {
+ /* tv = smallest "sane" time interval */
if (tv_cmp(&shortest, &one_tick) < 0)
*tv = shortest;
else
@@ -87,7 +101,7 @@
}
if (tv_cmp(tv, &shortest) < 0)
shortest = *tv;
- tv_add(&counts[tcp->scno].time, &counts[tcp->scno].time, tv);
+ tv_add(&cc->time, &cc->time, tv);
}
static int
@@ -141,17 +155,24 @@
static void
call_summary_pers(FILE *outf)
{
- int i, j;
+ int i;
int call_cum, error_cum;
struct timeval tv_cum, dtv;
+ double float_tv_cum;
double percent;
- const char *dashes = "-------------------------";
- char error_str[16];
- int *sorted_count = calloc(sizeof(int), nsyscalls);
+ const char *dashes = "----------------";
+ char error_str[sizeof(int)*3];
+ int *sorted_count;
+ fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %s\n",
+ "% time", "seconds", "usecs/call",
+ "calls", "errors", "syscall");
+ fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %s\n",
+ dashes, dashes, dashes, dashes, dashes, dashes);
+
+ sorted_count = calloc(sizeof(int), nsyscalls);
if (!sorted_count)
die_out_of_memory();
-
call_cum = error_cum = tv_cum.tv_sec = tv_cum.tv_usec = 0;
if (overhead.tv_sec == -1) {
tv_mul(&overhead, &shortest, 8);
@@ -167,42 +188,41 @@
error_cum += counts[i].errors;
tv_add(&tv_cum, &tv_cum, &counts[i].time);
}
- if (counts && sortfun)
- qsort((void *) sorted_count, nsyscalls, sizeof(int), sortfun);
- fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %s\n",
- "% time", "seconds", "usecs/call",
- "calls", "errors", "syscall");
- fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %-16.16s\n",
- dashes, dashes, dashes, dashes, dashes, dashes);
+ float_tv_cum = tv_float(&tv_cum);
if (counts) {
+ if (sortfun)
+ qsort((void *) sorted_count, nsyscalls, sizeof(int), sortfun);
for (i = 0; i < nsyscalls; i++) {
- j = sorted_count[i];
- if (counts[j].calls == 0)
+ double float_syscall_time;
+ int idx = sorted_count[i];
+ struct call_counts *cc = &counts[idx];
+ if (cc->calls == 0)
continue;
- tv_div(&dtv, &counts[j].time, counts[j].calls);
- if (counts[j].errors)
- sprintf(error_str, "%d", counts[j].errors);
- else
- error_str[0] = '\0';
- percent = (100.0 * tv_float(&counts[j].time)
- / tv_float(&tv_cum));
- fprintf(outf, "%6.2f %11.6f %11ld %9d %9.9s %s\n",
- percent, tv_float(&counts[j].time),
+ tv_div(&dtv, &cc->time, cc->calls);
+ error_str[0] = '\0';
+ if (cc->errors)
+ sprintf(error_str, "%u", cc->errors);
+ float_syscall_time = tv_float(&cc->time);
+ percent = (100.0 * float_syscall_time);
+ if (percent != 0.0)
+ percent /= float_tv_cum;
+ /* else: float_tv_cum can be 0.0 too and we get 0/0 = NAN */
+ fprintf(outf, "%6.2f %11.6f %11lu %9u %9.9s %s\n",
+ percent, float_syscall_time,
(long) (1000000 * dtv.tv_sec + dtv.tv_usec),
- counts[j].calls,
- error_str, sysent[j].sys_name);
+ cc->calls,
+ error_str, sysent[idx].sys_name);
}
}
free(sorted_count);
- fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %-16.16s\n",
+ fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %s\n",
dashes, dashes, dashes, dashes, dashes, dashes);
+ error_str[0] = '\0';
if (error_cum)
- sprintf(error_str, "%d", error_cum);
- else
- error_str[0] = '\0';
- fprintf(outf, "%6.6s %11.6f %11.11s %9d %9.9s %s\n",
- "100.00", tv_float(&tv_cum), "",
+ sprintf(error_str, "%u", error_cum);
+ fprintf(outf, "%6.6s %11.6f %11.11s %9u %9.9s %s\n",
+ "100.00", float_tv_cum, "",
call_cum, error_str, "total");
}
@@ -220,7 +240,7 @@
if (i)
fprintf(outf,
"System call usage summary for %d bit mode:\n",
- (int) (current_wordsize * 8));
+ current_wordsize * 8);
call_summary_pers(outf);
}
diff --git a/defs.h b/defs.h
index c95c518..85262f8 100644
--- a/defs.h
+++ b/defs.h
@@ -36,6 +36,20 @@
# define _LFS64_LARGEFILE 1
# endif
#endif
+
+#ifdef MIPS
+# include <sgidefs.h>
+# if _MIPS_SIM == _MIPS_SIM_ABI64
+# define LINUX_MIPSN64
+# elif _MIPS_SIM == _MIPS_SIM_NABI32
+# define LINUX_MIPSN32
+# elif _MIPS_SIM == _MIPS_SIM_ABI32
+# define LINUX_MIPSO32
+# else
+# error Unsupported _MIPS_SIM
+# endif
+#endif
+
#include <features.h>
#ifdef HAVE_STDBOOL_H
# include <stdbool.h>
@@ -49,7 +63,10 @@
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
-#include <ctype.h>
+/* Open-coding isprint(ch) et al proved more efficient than calling
+ * generalized libc interface. We don't *want* to do non-ASCII anyway.
+ */
+/* #include <ctype.h> */
#include <string.h>
#include <errno.h>
#include <signal.h>
@@ -80,6 +97,15 @@
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+/* macros */
+#ifndef MAX
+# define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef MIN
+# define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+#define CLAMP(val, min, max) MIN(MAX(min, val), max)
+
/* Glibc has an efficient macro for sigemptyset
* (it just does one or two assignments of 0 to internal vector of longs).
*/
@@ -88,13 +114,6 @@
#endif
/* Configuration section */
-#ifndef MAX_QUALS
-# if defined(MIPS)
-# define MAX_QUALS 7000 /* maximum number of syscalls, signals, etc. */
-# else
-# define MAX_QUALS 2048 /* maximum number of syscalls, signals, etc. */
-# endif
-#endif
#ifndef DEFAULT_STRLEN
/* default maximum # of bytes printed in `printstr', change with -s switch */
# define DEFAULT_STRLEN 32
@@ -106,32 +125,37 @@
* Maximum number of args to a syscall.
*
* Make sure that all entries in all syscallent.h files have nargs <= MAX_ARGS!
- * linux/<ARCH>/syscallent.h: all have nargs <= 6.
+ * linux/<ARCH>/syscallent*.h:
+ * all have nargs <= 6 except mips o32 which has nargs <= 7.
*/
#ifndef MAX_ARGS
-# define MAX_ARGS 6
+# ifdef LINUX_MIPSO32
+# define MAX_ARGS 7
+# else
+# define MAX_ARGS 6
+# endif
#endif
/* default sorting method for call profiling */
#ifndef DEFAULT_SORTBY
# define DEFAULT_SORTBY "time"
#endif
+/*
+ * Experimental code using PTRACE_SEIZE can be enabled here.
+ * This needs Linux kernel 3.4.x or later to work.
+ */
+#define USE_SEIZE 1
+/* To force NOMMU build, set to 1 */
+#define NOMMU_SYSTEM 0
-#if defined(SPARC) || defined(SPARC64)
-# define LINUXSPARC
-#endif
-#if defined(MIPS) && _MIPS_SIM == _MIPS_SIM_ABI32
-# define LINUX_MIPSO32
-#endif
-#if defined(MIPS) && _MIPS_SIM == _MIPS_SIM_NABI32
-# define LINUX_MIPSN32
-# define LINUX_MIPS64
-#endif
-#if defined(MIPS) && _MIPS_SIM == _MIPS_SIM_ABI64
-# define LINUX_MIPSN64
-# define LINUX_MIPS64
-#endif
-
-#if (defined(LINUXSPARC) || defined(X86_64) || defined(ARM) || defined(AVR32)) && defined(__GLIBC__)
+#if (defined(SPARC) || defined(SPARC64) \
+ || defined(I386) || defined(X32) || defined(X86_64) \
+ || defined(ARM) || defined(AARCH64) \
+ || defined(AVR32) \
+ || defined(OR1K) \
+ || defined(METAG) \
+ || defined(TILE) \
+ || defined(XTENSA) \
+ ) && defined(__GLIBC__)
# include <sys/ptrace.h>
#else
/* Work around awkward prototype in ptrace.h. */
@@ -146,107 +170,8 @@
extern long ptrace(int, int, char *, long);
#endif
-#if !defined(__GLIBC__) && !defined(__BIONIC__)
-# define PTRACE_PEEKUSER PTRACE_PEEKUSR
-# define PTRACE_POKEUSER PTRACE_POKEUSR
-#endif
-#if defined(X86_64) || defined(X32) || defined(I386)
-/* For struct pt_regs. x86 strace uses PTRACE_GETREGS.
- * PTRACE_GETREGS returns registers in the layout of this struct.
- */
-# include <asm/ptrace.h>
-#endif
-#ifdef ALPHA
-# define REG_R0 0
-# define REG_A0 16
-# define REG_A3 19
-# define REG_FP 30
-# define REG_PC 64
-#endif /* ALPHA */
-#ifdef MIPS
-# define REG_V0 2
-# define REG_A0 4
-# define REG_A3 7
-# define REG_SP 29
-# define REG_EPC 64
-#endif /* MIPS */
-#ifdef HPPA
-# define PT_GR20 (20*4)
-# define PT_GR26 (26*4)
-# define PT_GR28 (28*4)
-# define PT_IAOQ0 (106*4)
-# define PT_IAOQ1 (107*4)
-#endif /* HPPA */
-#ifdef SH64
- /* SH64 Linux - this code assumes the following kernel API for system calls:
- PC Offset 0
- System Call Offset 16 (actually, (syscall no.) | (0x1n << 16),
- where n = no. of parameters.
- Other regs Offset 24+
-
- On entry: R2-7 = parameters 1-6 (as many as necessary)
- On return: R9 = result. */
-
- /* Offset for peeks of registers */
-# define REG_OFFSET (24)
-# define REG_GENERAL(x) (8*(x)+REG_OFFSET)
-# define REG_PC (0*8)
-# define REG_SYSCALL (2*8)
-#endif /* SH64 */
-
-#define SUPPORTED_PERSONALITIES 1
-#define DEFAULT_PERSONALITY 0
-
-#ifdef LINUXSPARC
-/* Indexes into the pt_regs.u_reg[] array -- UREG_XX from kernel are all off
- * by 1 and use Ix instead of Ox. These work for both 32 and 64 bit Linux. */
-# define U_REG_G1 0
-# define U_REG_O0 7
-# define U_REG_O1 8
-# define PERSONALITY0_WORDSIZE 4
-# define PERSONALITY1_WORDSIZE 4
-# undef SUPPORTED_PERSONALITIES
-# if defined(SPARC64)
-# include <asm/psrcompat.h>
-# define SUPPORTED_PERSONALITIES 3
-# define PERSONALITY2_WORDSIZE 8
-# else
-# include <asm/psr.h>
-# define SUPPORTED_PERSONALITIES 2
-# endif /* SPARC64 */
-#endif /* LINUXSPARC */
-
-#ifdef X86_64
-# undef SUPPORTED_PERSONALITIES
-# define SUPPORTED_PERSONALITIES 3
-# define PERSONALITY0_WORDSIZE 8
-# define PERSONALITY1_WORDSIZE 4
-# define PERSONALITY2_WORDSIZE 4
-#endif
-
-#ifdef X32
-# undef SUPPORTED_PERSONALITIES
-# define SUPPORTED_PERSONALITIES 2
-# define PERSONALITY0_WORDSIZE 4
-# define PERSONALITY1_WORDSIZE 4
-#endif
-
-#ifdef ARM
-# undef SUPPORTED_PERSONALITIES
-# define SUPPORTED_PERSONALITIES 2
-# define PERSONALITY0_WORDSIZE 4
-# define PERSONALITY1_WORDSIZE 4
-#endif
-
-#ifdef POWERPC64
-# undef SUPPORTED_PERSONALITIES
-# define SUPPORTED_PERSONALITIES 2
-# define PERSONALITY0_WORDSIZE 8
-# define PERSONALITY1_WORDSIZE 4
-#endif
-
-#ifndef PERSONALITY0_WORDSIZE
-# define PERSONALITY0_WORDSIZE sizeof(long)
+#if defined(TILE)
+# include <asm/ptrace.h> /* struct pt_regs */
#endif
#if !HAVE_DECL_PTRACE_SETOPTIONS
@@ -297,51 +222,196 @@
# define PTRACE_EVENT_EXIT 6
#endif
-/* Experimental code using PTRACE_SEIZE can be enabled here: */
-//# define USE_SEIZE 1
+#if !defined(__GLIBC__) && !defined(__BIONIC__)
+# define PTRACE_PEEKUSER PTRACE_PEEKUSR
+# define PTRACE_POKEUSER PTRACE_POKEUSR
+#endif
-#ifdef USE_SEIZE
+#if USE_SEIZE
# undef PTRACE_SEIZE
# define PTRACE_SEIZE 0x4206
# undef PTRACE_INTERRUPT
# define PTRACE_INTERRUPT 0x4207
# undef PTRACE_LISTEN
# define PTRACE_LISTEN 0x4208
-# undef PTRACE_SEIZE_DEVEL
-# define PTRACE_SEIZE_DEVEL 0x80000000
# undef PTRACE_EVENT_STOP
-# define PTRACE_EVENT_STOP 7
-# define PTRACE_EVENT_STOP1 128
+# define PTRACE_EVENT_STOP 128
+#endif
+
+#ifdef ALPHA
+# define REG_R0 0
+# define REG_A0 16
+# define REG_A3 19
+# define REG_FP 30
+# define REG_PC 64
+#endif /* ALPHA */
+#ifdef MIPS
+# define REG_V0 2
+# define REG_A0 4
+# define REG_A3 7
+# define REG_SP 29
+# define REG_EPC 64
+#endif /* MIPS */
+#ifdef HPPA
+# define PT_GR20 (20*4)
+# define PT_GR26 (26*4)
+# define PT_GR28 (28*4)
+# define PT_IAOQ0 (106*4)
+# define PT_IAOQ1 (107*4)
+#endif /* HPPA */
+#ifdef SH64
+ /* SH64 Linux - this code assumes the following kernel API for system calls:
+ PC Offset 0
+ System Call Offset 16 (actually, (syscall no.) | (0x1n << 16),
+ where n = no. of parameters.
+ Other regs Offset 24+
+
+ On entry: R2-7 = parameters 1-6 (as many as necessary)
+ On return: R9 = result. */
+
+ /* Offset for peeks of registers */
+# define REG_OFFSET (24)
+# define REG_GENERAL(x) (8*(x)+REG_OFFSET)
+# define REG_PC (0*8)
+# define REG_SYSCALL (2*8)
+#endif /* SH64 */
+#ifdef AARCH64
+struct arm_pt_regs {
+ int uregs[18];
+};
+# define ARM_cpsr uregs[16]
+# define ARM_pc uregs[15]
+# define ARM_lr uregs[14]
+# define ARM_sp uregs[13]
+# define ARM_ip uregs[12]
+# define ARM_fp uregs[11]
+# define ARM_r10 uregs[10]
+# define ARM_r9 uregs[9]
+# define ARM_r8 uregs[8]
+# define ARM_r7 uregs[7]
+# define ARM_r6 uregs[6]
+# define ARM_r5 uregs[5]
+# define ARM_r4 uregs[4]
+# define ARM_r3 uregs[3]
+# define ARM_r2 uregs[2]
+# define ARM_r1 uregs[1]
+# define ARM_r0 uregs[0]
+# define ARM_ORIG_r0 uregs[17]
+#endif /* AARCH64 */
+
+#if defined(SPARC) || defined(SPARC64)
+/* Indexes into the pt_regs.u_reg[] array -- UREG_XX from kernel are all off
+ * by 1 and use Ix instead of Ox. These work for both 32 and 64 bit Linux. */
+# define U_REG_G1 0
+# define U_REG_O0 7
+# define U_REG_O1 8
+# define PERSONALITY0_WORDSIZE 4
+# define PERSONALITY1_WORDSIZE 4
+# if defined(SPARC64)
+# include <asm/psrcompat.h>
+# define SUPPORTED_PERSONALITIES 3
+# define PERSONALITY2_WORDSIZE 8
+# else
+# include <asm/psr.h>
+# define SUPPORTED_PERSONALITIES 2
+# endif /* SPARC64 */
+#endif /* SPARC[64] */
+
+#ifdef X86_64
+# define SUPPORTED_PERSONALITIES 3
+# define PERSONALITY0_WORDSIZE 8
+# define PERSONALITY1_WORDSIZE 4
+# define PERSONALITY2_WORDSIZE 4
+#endif
+
+#ifdef X32
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 4
+# define PERSONALITY1_WORDSIZE 4
+#endif
+
+#ifdef ARM
+/* one personality */
+#endif
+
+#ifdef AARCH64
+/* The existing ARM personality, then AArch64 */
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 4
+# define PERSONALITY1_WORDSIZE 8
+# define DEFAULT_PERSONALITY 1
+#endif
+
+#ifdef POWERPC64
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 8
+# define PERSONALITY1_WORDSIZE 4
+#endif
+
+#ifdef TILE
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 8
+# define PERSONALITY1_WORDSIZE 4
+# ifdef __tilepro__
+# define DEFAULT_PERSONALITY 1
+# endif
+#endif
+
+#ifndef SUPPORTED_PERSONALITIES
+# define SUPPORTED_PERSONALITIES 1
+#endif
+#ifndef DEFAULT_PERSONALITY
+# define DEFAULT_PERSONALITY 0
+#endif
+#ifndef PERSONALITY0_WORDSIZE
+# define PERSONALITY0_WORDSIZE (int)(sizeof(long))
#endif
#if defined(I386)
-extern struct pt_regs i386_regs;
-#endif
-#if defined(IA64)
+extern struct user_regs_struct i386_regs;
+#elif defined(IA64)
extern long ia32;
+#elif defined(SPARC) || defined(SPARC64)
+extern struct pt_regs sparc_regs;
+#elif defined(ARM)
+extern struct pt_regs arm_regs;
+#elif defined(TILE)
+extern struct pt_regs tile_regs;
#endif
+typedef struct sysent {
+ unsigned nargs;
+ int sys_flags;
+ int (*sys_func)();
+ const char *sys_name;
+} struct_sysent;
+
+typedef struct ioctlent {
+ const char *doth;
+ const char *symbol;
+ unsigned long code;
+} struct_ioctlent;
+
/* Trace Control Block */
struct tcb {
int flags; /* See below for TCB_ values */
int pid; /* Process Id of this entry */
- int u_nargs; /* System call argument count */
+ int qual_flg; /* qual_flags[scno] or DEFAULT_QUAL_FLAGS + RAW */
int u_error; /* Error code */
long scno; /* System call number */
long u_arg[MAX_ARGS]; /* System call arguments */
#if defined(LINUX_MIPSN32) || defined(X32)
- long long ext_arg[MAX_ARGS]; /* System call arguments */
-#endif
- long u_rval; /* return value */
-#if defined(LINUX_MIPSN32) || defined(X32)
+ long long ext_arg[MAX_ARGS];
long long u_lrval; /* long long return value */
#endif
+ long u_rval; /* Return value */
#if SUPPORTED_PERSONALITIES > 1
int currpers; /* Personality at the time of scno update */
#endif
int curcol; /* Output column for this process */
FILE *outf; /* Output file for this process */
const char *auxstr; /* Auxiliary info from syscall (see RVAL_STR) */
+ const struct_sysent *s_ent; /* sysent[scno] or dummy struct for bad scno */
struct timeval stime; /* System time usage as of last process wait */
struct timeval dtime; /* Delta for system time usage */
struct timeval etime; /* Syscall entry time */
@@ -380,14 +450,23 @@
#define TCB_REPRINT 00200 /* We should reprint this syscall on exit */
#define TCB_FILTERED 00400 /* This system call has been filtered out */
/* x86 does not need TCB_WAITEXECVE.
- * It can detect SIGTRAP by looking at eax/rax.
- * See "not a syscall entry (eax = %ld)\n" message
- * in syscall_fixup_on_sysenter().
+ * It can detect post-execve SIGTRAP by looking at eax/rax.
+ * See "not a syscall entry (eax = %ld)\n" message.
+ *
+ * Note! On new kernels (about 2.5.46+), we use PTRACE_O_TRACEEXEC, which
+ * suppresses post-execve SIGTRAP. If you are adding a new arch which is
+ * only supported by newer kernels, you most likely don't need to define
+ * TCB_WAITEXECVE!
*/
-#if defined(ALPHA) || defined(AVR32) || defined(SPARC) || defined(SPARC64) \
- || defined(POWERPC) || defined(IA64) || defined(HPPA) \
- || defined(SH) || defined(SH64) || defined(S390) || defined(S390X) \
- || defined(ARM) || defined(MIPS) || defined(BFIN) || defined(TILE)
+#if defined(ALPHA) \
+ || defined(SPARC) || defined(SPARC64) \
+ || defined(POWERPC) \
+ || defined(IA64) \
+ || defined(HPPA) \
+ || defined(SH) || defined(SH64) \
+ || defined(S390) || defined(S390X) \
+ || defined(ARM) \
+ || defined(MIPS)
/* This tracee has entered into execve syscall. Expect post-execve SIGTRAP
* to happen. (When it is detected, tracee is continued and this bit is cleared.)
*/
@@ -395,20 +474,23 @@
#endif
/* qualifier flags */
-#define QUAL_TRACE 0001 /* this system call should be traced */
-#define QUAL_ABBREV 0002 /* abbreviate the structures of this syscall */
-#define QUAL_VERBOSE 0004 /* decode the structures of this syscall */
-#define QUAL_RAW 0010 /* print all args in hex for this syscall */
-#define QUAL_SIGNAL 0020 /* report events with this signal */
-#define QUAL_FAULT 0040 /* report events with this fault */
-#define QUAL_READ 0100 /* dump data read on this file descriptor */
-#define QUAL_WRITE 0200 /* dump data written to this file descriptor */
+#define QUAL_TRACE 0x001 /* this system call should be traced */
+#define QUAL_ABBREV 0x002 /* abbreviate the structures of this syscall */
+#define QUAL_VERBOSE 0x004 /* decode the structures of this syscall */
+#define QUAL_RAW 0x008 /* print all args in hex for this syscall */
+#define QUAL_SIGNAL 0x010 /* report events with this signal */
+#define QUAL_READ 0x020 /* dump data read on this file descriptor */
+#define QUAL_WRITE 0x040 /* dump data written to this file descriptor */
+typedef uint8_t qualbits_t;
+#define UNDEFINED_SCNO 0x100 /* Used only in tcp->qual_flg */
+
+#define DEFAULT_QUAL_FLAGS (QUAL_TRACE | QUAL_ABBREV | QUAL_VERBOSE)
#define entering(tcp) (!((tcp)->flags & TCB_INSYSCALL))
#define exiting(tcp) ((tcp)->flags & TCB_INSYSCALL)
#define syserror(tcp) ((tcp)->u_error != 0)
-#define verbose(tcp) (qual_flags[(tcp)->scno] & QUAL_VERBOSE)
-#define abbrev(tcp) (qual_flags[(tcp)->scno] & QUAL_ABBREV)
+#define verbose(tcp) ((tcp)->qual_flg & QUAL_VERBOSE)
+#define abbrev(tcp) ((tcp)->qual_flg & QUAL_ABBREV)
#define filtered(tcp) ((tcp)->flags & TCB_FILTERED)
struct xlat {
@@ -420,6 +502,7 @@
extern const struct xlat addrfams[];
extern const struct xlat struct_user_offsets[];
extern const struct xlat open_access_modes[];
+extern const struct xlat whence_codes[];
/* Format of syscall return values */
#define RVAL_DECIMAL 000 /* decimal format */
@@ -445,7 +528,8 @@
#define TRACE_PROCESS 010 /* Trace process-related syscalls. */
#define TRACE_SIGNAL 020 /* Trace signal-related syscalls. */
#define TRACE_DESC 040 /* Trace file descriptor-related syscalls. */
-#define SYSCALL_NEVER_FAILS 0100 /* Syscall is always successful. */
+#define TRACE_MEMORY 0100 /* Trace memory mapping-related syscalls. */
+#define SYSCALL_NEVER_FAILS 0200 /* Syscall is always successful. */
typedef enum {
CFLAG_NONE = 0,
@@ -453,17 +537,23 @@
CFLAG_BOTH
} cflag_t;
extern cflag_t cflag;
-extern int *qual_flags;
extern bool debug_flag;
extern bool Tflag;
-extern bool qflag;
+extern unsigned int qflag;
extern bool not_failing_only;
extern bool show_fd_path;
-extern bool tracing_paths;
-extern unsigned int xflag;
-extern unsigned int followfork;
-extern unsigned int ptrace_setoptions;
-extern unsigned int max_strlen;
+extern bool hide_log_until_execve;
+/* are we filtering traces based on paths? */
+extern const char **paths_selected;
+#define tracing_paths (paths_selected != NULL)
+extern bool need_fork_exec_workarounds;
+extern unsigned xflag;
+extern unsigned followfork;
+extern unsigned ptrace_setoptions;
+extern unsigned max_strlen;
+extern unsigned os_release;
+#undef KERNEL_VERSION
+#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
enum bitness_t { BITNESS_CURRENT = 0, BITNESS_32 };
@@ -497,6 +587,23 @@
extern void count_syscall(struct tcb *, struct timeval *);
extern void call_summary(FILE *);
+#if defined(AVR32) \
+ || defined(I386) \
+ || defined(X86_64) || defined(X32) \
+ || defined(AARCH64) \
+ || defined(ARM) \
+ || defined(SPARC) || defined(SPARC64) \
+ || defined(TILE) \
+ || defined(OR1K) \
+ || defined(METAG)
+extern long get_regs_error;
+# define clear_regs() (get_regs_error = -1)
+extern void get_regs(pid_t pid);
+#else
+# define get_regs_error 0
+# define clear_regs() ((void)0)
+# define get_regs(pid) ((void)0)
+#endif
extern int umoven(struct tcb *, long, int, char *);
#define umove(pid, addr, objp) \
umoven((pid), (addr), sizeof(*(objp)), (char *) (objp))
@@ -516,28 +623,27 @@
extern const char *signame(int);
extern int is_restart_error(struct tcb *);
-extern int pathtrace_select(const char *);
+extern void pathtrace_select(const char *);
extern int pathtrace_match(struct tcb *);
-extern const char *getfdpath(struct tcb *, int);
+extern int getfdpath(struct tcb *, int, char *, unsigned);
extern const char *xlookup(const struct xlat *, int);
extern int string_to_uint(const char *str);
extern int string_quote(const char *, char *, long, int);
-#if HAVE_LONG_LONG
-/* _l refers to the lower numbered u_arg,
- * _h refers to the higher numbered u_arg
+/* a refers to the lower numbered u_arg,
+ * b refers to the higher numbered u_arg
*/
-# if HAVE_LITTLE_ENDIAN_LONG_LONG
-# define LONG_LONG(_l,_h) \
- ((long long)((unsigned long long)(unsigned)(_l) | ((unsigned long long)(_h)<<32)))
-# else
-# define LONG_LONG(_l,_h) \
- ((long long)((unsigned long long)(unsigned)(_h) | ((unsigned long long)(_l)<<32)))
-# endif
-extern int printllval(struct tcb *, const char *, int);
+#if HAVE_LITTLE_ENDIAN_LONG_LONG
+# define LONG_LONG(a,b) \
+ ((long long)((unsigned long long)(unsigned)(a) | ((unsigned long long)(b)<<32)))
+#else
+# define LONG_LONG(a,b) \
+ ((long long)((unsigned long long)(unsigned)(b) | ((unsigned long long)(a)<<32)))
#endif
+extern int printllval(struct tcb *, const char *, int);
+
extern void printxval(const struct xlat *, int, const char *);
extern int printargs(struct tcb *);
extern int printargs_lu(struct tcb *);
@@ -564,6 +670,7 @@
extern void sprint_timespec(char *, struct tcb *, long);
#ifdef HAVE_SIGINFO_T
extern void printsiginfo(siginfo_t *, int);
+extern void printsiginfo_at(struct tcb *tcp, long addr);
#endif
extern void printfd(struct tcb *, int);
extern void printsock(struct tcb *, long, int);
@@ -582,8 +689,8 @@
extern const char *sprint_open_modes(mode_t);
extern void print_loff_t(struct tcb *, long);
-extern const struct ioctlent *ioctl_lookup(long);
-extern const struct ioctlent *ioctl_next_match(const struct ioctlent *);
+extern const struct_ioctlent *ioctl_lookup(long);
+extern const struct_ioctlent *ioctl_next_match(const struct_ioctlent *);
extern int ioctl_decode(struct tcb *, long, long);
extern int term_ioctl(struct tcb *, long, long);
extern int sock_ioctl(struct tcb *, long, long);
@@ -592,6 +699,7 @@
extern int scsi_ioctl(struct tcb *, long, long);
extern int block_ioctl(struct tcb *, long, long);
extern int mtd_ioctl(struct tcb *, long, long);
+extern int ubi_ioctl(struct tcb *, long, long);
extern int loop_ioctl(struct tcb *, long, long);
extern int tv_nz(struct timeval *);
@@ -628,36 +736,61 @@
#if SUPPORTED_PERSONALITIES > 1
extern void set_personality(int personality);
-extern int current_personality;
-extern const int personality_wordsize[];
-# define current_wordsize (personality_wordsize[current_personality])
+extern unsigned current_personality;
#else
# define set_personality(personality) ((void)0)
# define current_personality 0
-# define current_wordsize PERSONALITY0_WORDSIZE
#endif
-struct sysent {
- unsigned nargs;
- int sys_flags;
- int (*sys_func)();
- const char *sys_name;
-};
+#if SUPPORTED_PERSONALITIES == 1
+# define current_wordsize PERSONALITY0_WORDSIZE
+#else
+# if SUPPORTED_PERSONALITIES == 2 && PERSONALITY0_WORDSIZE == PERSONALITY1_WORDSIZE
+# define current_wordsize PERSONALITY0_WORDSIZE
+# else
+extern unsigned current_wordsize;
+# endif
+#endif
-struct ioctlent {
- const char *doth;
- const char *symbol;
- unsigned long code;
-};
+/* In many, many places we play fast and loose and use
+ * tprintf("%d", (int) tcp->u_arg[N]) to print fds, pids etc.
+ * We probably need to use widen_to_long() instead:
+ */
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+# define widen_to_long(v) (current_wordsize == 4 ? (long)(int32_t)(v) : (long)(v))
+#else
+# define widen_to_long(v) ((long)(v))
+#endif
-extern const struct sysent *sysent;
-extern unsigned nsyscalls;
+extern const struct_sysent sysent0[];
+extern const char *const errnoent0[];
+extern const char *const signalent0[];
+extern const struct_ioctlent ioctlent0[];
+extern qualbits_t *qual_vec[SUPPORTED_PERSONALITIES];
+#define qual_flags (qual_vec[current_personality])
+#if SUPPORTED_PERSONALITIES > 1
+extern const struct_sysent *sysent;
extern const char *const *errnoent;
-extern unsigned nerrnos;
-extern const struct ioctlent *ioctlent;
-extern unsigned nioctlents;
extern const char *const *signalent;
+extern const struct_ioctlent *ioctlent;
+#else
+# define sysent sysent0
+# define errnoent errnoent0
+# define signalent signalent0
+# define ioctlent ioctlent0
+#endif
+extern unsigned nsyscalls;
+extern unsigned nerrnos;
extern unsigned nsignals;
+extern unsigned nioctlents;
+extern unsigned num_quals;
+/*
+ * If you need non-NULL sysent[scno].sys_func and sysent[scno].sys_name
+ */
+#define SCNO_IS_VALID(scno) \
+ ((unsigned long)(scno) < nsyscalls && sysent[scno].sys_func)
+
+/* Only ensures that sysent[scno] isn't out of range */
#define SCNO_IN_RANGE(scno) \
- ((unsigned long)(scno) < nsyscalls && sysent[scno].sys_func)
+ ((unsigned long)(scno) < nsyscalls)
diff --git a/desc.c b/desc.c
index f0c1890..a420feb 100644
--- a/desc.c
+++ b/desc.c
@@ -37,13 +37,8 @@
#ifdef HAVE_LIBAIO_H
# include <libaio.h>
#endif
-
-#if HAVE_LONG_LONG_OFF_T
-/*
- * Hacks for systems that have a long long off_t
- */
-# define flock64 flock /* Horrid hack */
-# define printflock printflock64 /* Horrider hack */
+#ifdef HAVE_LINUX_PERF_EVENT_H
+# include <linux/perf_event.h>
#endif
static const struct xlat fcntlcmds[] = {
@@ -215,14 +210,42 @@
};
#endif
-static const struct xlat whence[] = {
- { SEEK_SET, "SEEK_SET" },
- { SEEK_CUR, "SEEK_CUR" },
- { SEEK_END, "SEEK_END" },
- { 0, NULL },
+static const struct xlat perf_event_open_flags[] = {
+#ifdef PERF_FLAG_FD_NO_GROUP
+ { PERF_FLAG_FD_NO_GROUP, "PERF_FLAG_FD_NO_GROUP" },
+#endif
+#ifdef PERF_FLAG_FD_OUTPUT
+ { PERF_FLAG_FD_OUTPUT, "PERF_FLAG_FD_OUTPUT" },
+#endif
+#ifdef PERF_FLAG_PID_CGROUP
+ { PERF_FLAG_PID_CGROUP, "PERF_FLAG_PID_CGROUP" },
+#endif
+ { 0, NULL },
};
-#ifndef HAVE_LONG_LONG_OFF_T
+#if _LFS64_LARGEFILE
+/* fcntl/lockf */
+static void
+printflock64(struct tcb *tcp, long addr, int getlk)
+{
+ struct flock64 fl;
+
+ if (umove(tcp, addr, &fl) < 0) {
+ tprints("{...}");
+ return;
+ }
+ tprints("{type=");
+ printxval(lockfcmds, fl.l_type, "F_???");
+ tprints(", whence=");
+ printxval(whence_codes, fl.l_whence, "SEEK_???");
+ tprintf(", start=%lld, len=%lld", (long long) fl.l_start, (long long) fl.l_len);
+ if (getlk)
+ tprintf(", pid=%lu}", (unsigned long) fl.l_pid);
+ else
+ tprints("}");
+}
+#endif
+
/* fcntl/lockf */
static void
printflock(struct tcb *tcp, long addr, int getlk)
@@ -230,6 +253,12 @@
struct flock fl;
#if SUPPORTED_PERSONALITIES > 1
+# ifdef X32
+ if (current_personality == 0) {
+ printflock64(tcp, addr, getlk);
+ return;
+ }
+# endif
if (current_wordsize != sizeof(fl.l_start)) {
if (current_wordsize == 4) {
/* 32-bit x86 app on x86_64 and similar cases */
@@ -251,7 +280,7 @@
fl.l_pid = fl32.l_pid;
} else {
/* let people know we have a problem here */
- tprintf("{ <decode error: unsupported wordsize %d> }",
+ tprintf("<decode error: unsupported wordsize %d>",
current_wordsize);
return;
}
@@ -266,37 +295,17 @@
tprints("{type=");
printxval(lockfcmds, fl.l_type, "F_???");
tprints(", whence=");
- printxval(whence, fl.l_whence, "SEEK_???");
+ printxval(whence_codes, fl.l_whence, "SEEK_???");
+#ifdef X32
+ tprintf(", start=%lld, len=%lld", fl.l_start, fl.l_len);
+#else
tprintf(", start=%ld, len=%ld", fl.l_start, fl.l_len);
+#endif
if (getlk)
tprintf(", pid=%lu}", (unsigned long) fl.l_pid);
else
tprints("}");
}
-#endif
-
-#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
-/* fcntl/lockf */
-static void
-printflock64(struct tcb *tcp, long addr, int getlk)
-{
- struct flock64 fl;
-
- if (umove(tcp, addr, &fl) < 0) {
- tprints("{...}");
- return;
- }
- tprints("{type=");
- printxval(lockfcmds, fl.l_type, "F_???");
- tprints(", whence=");
- printxval(whence, fl.l_whence, "SEEK_???");
- tprintf(", start=%lld, len=%lld", (long long) fl.l_start, (long long) fl.l_len);
- if (getlk)
- tprintf(", pid=%lu}", (unsigned long) fl.l_pid);
- else
- tprints("}");
-}
-#endif
int
sys_fcntl(struct tcb *tcp)
@@ -855,10 +864,14 @@
static void
print_common_flags(struct iocb *iocb)
{
+#if HAVE_STRUCT_IOCB_U_C_FLAGS
if (iocb->u.c.flags & IOCB_RESFD)
- tprintf("resfd=%d, ", iocb->u.c.resfd);
+ tprintf(", resfd=%d", iocb->u.c.resfd);
if (iocb->u.c.flags & ~IOCB_RESFD)
- tprintf("flags=%x, ", iocb->u.c.flags);
+ tprintf(", flags=%x", iocb->u.c.flags);
+#else
+# warning "libaio.h is too old => limited io_submit decoding"
+#endif
}
#endif /* HAVE_LIBAIO_H */
@@ -902,24 +915,31 @@
tprintf("filedes:%d", iocb.aio_fildes);
switch (sub) {
case SUB_COMMON:
+#if HAVE_DECL_IO_CMD_PWRITE
if (iocb.aio_lio_opcode == IO_CMD_PWRITE) {
tprints(", str:");
printstr(tcp, (unsigned long)iocb.u.c.buf,
iocb.u.c.nbytes);
- } else {
+ } else
+#endif
tprintf(", buf:%p", iocb.u.c.buf);
- }
- tprintf(", nbytes:%lu, offset:%llx",
+ tprintf(", nbytes:%lu, offset:%lld",
iocb.u.c.nbytes,
iocb.u.c.offset);
print_common_flags(&iocb);
break;
case SUB_VECTOR:
- tprintf(", %llx, ", iocb.u.v.offset);
+ tprintf(", %lld", iocb.u.v.offset);
print_common_flags(&iocb);
+ tprints(", ");
tprint_iov(tcp, iocb.u.v.nr,
(unsigned long)iocb.u.v.vec,
- iocb.aio_lio_opcode == IO_CMD_PWRITEV);
+#if HAVE_DECL_IO_CMD_PWRITEV
+ iocb.aio_lio_opcode == IO_CMD_PWRITEV
+#else
+ 0
+#endif
+ );
break;
case SUB_POLL:
tprintf(", %x", iocb.u.poll.events);
@@ -932,7 +952,7 @@
if (i)
tprints("}");
#else
-#warning "libaio-devel is not available => no io_submit decoding"
+#warning "libaio.h is not available => no io_submit decoding"
tprintf("%#lx", tcp->u_arg[2]);
#endif
}
@@ -1068,3 +1088,18 @@
{
return do_eventfd(tcp, 1);
}
+
+int
+sys_perf_event_open(struct tcb *tcp)
+{
+ if (entering(tcp)) {
+ tprintf("%#lx, %d, %d, %d, ",
+ tcp->u_arg[0],
+ (int) tcp->u_arg[1],
+ (int) tcp->u_arg[2],
+ (int) tcp->u_arg[3]);
+ printflags(perf_event_open_flags, tcp->u_arg[4],
+ "PERF_FLAG_???");
+ }
+ return 0;
+}
diff --git a/file.c b/file.c
index 0cda7e1..9a83287 100644
--- a/file.c
+++ b/file.c
@@ -32,7 +32,7 @@
#include <dirent.h>
#include <sys/swap.h>
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
struct stat {
unsigned short st_dev;
unsigned int st_ino;
@@ -117,6 +117,21 @@
unsigned long st_ctime;
unsigned long st_ctime_nsec;
unsigned long long st_ino;
+} __attribute__((packed));
+# define HAVE_STAT64 1
+
+struct __old_kernel_stat {
+ unsigned short st_dev;
+ unsigned short st_ino;
+ unsigned short st_mode;
+ unsigned short st_nlink;
+ unsigned short st_uid;
+ unsigned short st_gid;
+ unsigned short st_rdev;
+ unsigned int st_size;
+ unsigned int st_atime;
+ unsigned int st_mtime;
+ unsigned int st_ctime;
};
#else
# undef dev_t
@@ -156,9 +171,6 @@
# define loff_t loff_t
#endif
-#ifdef HPPA /* asm-parisc/stat.h defines stat64 */
-# undef stat64
-#endif
#define stat libc_stat
#define stat64 libc_stat64
#include <sys/stat.h>
@@ -168,9 +180,6 @@
#undef st_atime
#undef st_mtime
#undef st_ctime
-#ifdef HPPA
-# define stat64 hpux_stat64
-#endif
#include <fcntl.h>
#ifdef HAVE_SYS_VFS_H
@@ -183,19 +192,6 @@
# define XATTR_REPLACE 2
#endif
-#if HAVE_LONG_LONG_OFF_T
-/*
- * Ugly hacks for systems that have typedef long long off_t
- */
-# define stat64 stat
-# define HAVE_STAT64 1 /* Ugly hack */
-# define sys_stat64 sys_stat
-# define sys_fstat64 sys_fstat
-# define sys_lstat64 sys_lstat
-# define sys_truncate64 sys_truncate
-# define sys_ftruncate64 sys_ftruncate
-#endif
-
#ifdef MAJOR_IN_SYSMACROS
# include <sys/sysmacros.h>
#endif
@@ -421,7 +417,7 @@
return decode_open(tcp, 1);
}
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
static const struct xlat openmodessol[] = {
{ 0, "O_RDWR" },
{ 1, "O_RDONLY" },
@@ -516,103 +512,100 @@
return RVAL_OCTAL;
}
-static const struct xlat whence[] = {
+const struct xlat whence_codes[] = {
{ SEEK_SET, "SEEK_SET" },
{ SEEK_CUR, "SEEK_CUR" },
{ SEEK_END, "SEEK_END" },
+#ifdef SEEK_DATA
+ { SEEK_DATA, "SEEK_DATA" },
+#endif
+#ifdef SEEK_HOLE
+ { SEEK_HOLE, "SEEK_HOLE" },
+#endif
{ 0, NULL },
};
+/* Linux kernel has exactly one version of lseek:
+ * fs/read_write.c::SYSCALL_DEFINE3(lseek, unsigned, fd, off_t, offset, unsigned, origin)
+ * In kernel, off_t is always the same as (kernel's) long
+ * (see include/uapi/asm-generic/posix_types.h),
+ * which means that on x32 we need to use tcp->ext_arg[N] to get offset argument.
+ * Use test/x32_lseek.c to test lseek decoding.
+ */
#if defined(LINUX_MIPSN32) || defined(X32)
int
sys_lseek(struct tcb *tcp)
{
long long offset;
- int _whence;
+ int whence;
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
offset = tcp->ext_arg[1];
- _whence = tcp->u_arg[2];
- if (_whence == SEEK_SET)
- tprintf("%llu, ", offset);
+ whence = tcp->u_arg[2];
+ if (whence == SEEK_SET)
+ tprintf(", %llu, ", offset);
else
- tprintf("%lld, ", offset);
- printxval(whence, _whence, "SEEK_???");
+ tprintf(", %lld, ", offset);
+ printxval(whence_codes, whence, "SEEK_???");
}
return RVAL_LUDECIMAL;
}
-
-# if defined(X32)
-int
-sys_lseek32(struct tcb *tcp)
-{
- long offset;
- int _whence;
-
- if (entering(tcp)) {
- printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
- offset = tcp->u_arg[1];
- _whence = tcp->u_arg[2];
- if (_whence == SEEK_SET)
- tprintf("%lu, ", offset);
- else
- tprintf("%ld, ", offset);
- printxval(whence, _whence, "SEEK_???");
- }
- return RVAL_UDECIMAL;
-}
-# endif
#else
int
sys_lseek(struct tcb *tcp)
{
- off_t offset;
- int _whence;
+ long offset;
+ int whence;
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
offset = tcp->u_arg[1];
- _whence = tcp->u_arg[2];
- if (_whence == SEEK_SET)
- tprintf("%lu, ", offset);
+ whence = tcp->u_arg[2];
+ if (whence == SEEK_SET)
+ tprintf(", %lu, ", offset);
else
- tprintf("%ld, ", offset);
- printxval(whence, _whence, "SEEK_???");
+ tprintf(", %ld, ", offset);
+ printxval(whence_codes, whence, "SEEK_???");
}
return RVAL_UDECIMAL;
}
#endif
+/* llseek syscall takes explicitly two ulong arguments hi, lo,
+ * rather than one 64-bit argument for which LONG_LONG works
+ * appropriate for the native byte order.
+ *
+ * See kernel's fs/read_write.c::SYSCALL_DEFINE5(llseek, ...)
+ *
+ * hi,lo are "unsigned longs" and combined exactly this way in kernel:
+ * ((loff_t) hi << 32) | lo
+ * Note that for architectures with kernel's long wider than userspace long
+ * (such as x32), combining code will use *kernel's*, i.e. *wide* longs
+ * for hi and lo. We would need to use tcp->ext_arg[N] on x32...
+ * ...however, x32 (and x86_64) does not _have_ llseek syscall as such.
+ */
int
sys_llseek(struct tcb *tcp)
{
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
- /*
- * This one call takes explicitly two 32-bit arguments hi, lo,
- * rather than one 64-bit argument for which LONG_LONG works
- * appropriate for the native byte order.
- */
if (tcp->u_arg[4] == SEEK_SET)
tprintf(", %llu, ",
- ((long long int) tcp->u_arg[1]) << 32 |
+ ((long long) tcp->u_arg[1]) << 32 |
(unsigned long long) (unsigned) tcp->u_arg[2]);
else
tprintf(", %lld, ",
- ((long long int) tcp->u_arg[1]) << 32 |
+ ((long long) tcp->u_arg[1]) << 32 |
(unsigned long long) (unsigned) tcp->u_arg[2]);
}
else {
- long long int off;
+ long long off;
if (syserror(tcp) || umove(tcp, tcp->u_arg[3], &off) < 0)
tprintf("%#lx, ", tcp->u_arg[3]);
else
tprintf("[%llu], ", off);
- printxval(whence, tcp->u_arg[4], "SEEK_???");
+ printxval(whence_codes, tcp->u_arg[4], "SEEK_???");
}
return 0;
}
@@ -623,14 +616,12 @@
if (entering(tcp)) {
int argn;
printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
- argn = printllval(tcp, "%lld", 1);
+ argn = printllval(tcp, ", %lld", 1);
tprintf(", %ld", tcp->u_arg[argn]);
}
return 0;
}
-#ifndef HAVE_LONG_LONG_OFF_T
int
sys_truncate(struct tcb *tcp)
{
@@ -640,9 +631,8 @@
}
return 0;
}
-#endif
-#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
+#if _LFS64_LARGEFILE
int
sys_truncate64(struct tcb *tcp)
{
@@ -654,7 +644,6 @@
}
#endif
-#ifndef HAVE_LONG_LONG_OFF_T
int
sys_ftruncate(struct tcb *tcp)
{
@@ -664,16 +653,14 @@
}
return 0;
}
-#endif
-#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
+#if _LFS64_LARGEFILE
int
sys_ftruncate64(struct tcb *tcp)
{
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
- printllval(tcp, "%llu", 1);
+ printllval(tcp, ", %llu", 1);
}
return 0;
}
@@ -738,7 +725,7 @@
return buf;
}
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
typedef struct {
int tv_sec;
int tv_nsec;
@@ -808,7 +795,7 @@
tprints("...}");
}
-#if defined(SPARC64)
+# if defined(SPARC64)
static void
printstat_sparc64(struct tcb *tcp, long addr)
{
@@ -854,8 +841,8 @@
else
tprints("...}");
}
-#endif /* SPARC64 */
-#endif /* LINUXSPARC */
+# endif /* SPARC64 */
+#endif /* SPARC[64] */
#if defined POWERPC64
struct stat_powerpc32 {
@@ -925,7 +912,6 @@
{ 0, NULL },
};
-#ifndef HAVE_LONG_LONG_OFF_T
static void
realprintstat(struct tcb *tcp, struct stat *statbuf)
{
@@ -991,6 +977,7 @@
tprints("...}");
}
+#ifndef X32
static void
printstat(struct tcb *tcp, long addr)
{
@@ -1005,7 +992,7 @@
return;
}
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
if (current_personality == 1) {
printstatsol(tcp, addr);
return;
@@ -1016,7 +1003,7 @@
return;
}
#endif
-#endif /* LINUXSPARC */
+#endif /* SPARC[64] */
#if defined POWERPC64
if (current_personality == 1) {
@@ -1032,7 +1019,9 @@
realprintstat(tcp, &statbuf);
}
-#endif /* !HAVE_LONG_LONG_OFF_T */
+#else /* X32 */
+# define printstat printstat64
+#endif
#if !defined HAVE_STAT64 && defined X86_64
/*
@@ -1070,7 +1059,11 @@
static void
printstat64(struct tcb *tcp, long addr)
{
+#ifdef X32
+ struct stat statbuf;
+#else
struct stat64 statbuf;
+#endif
#ifdef STAT64_SIZE
(void) sizeof(char[sizeof statbuf == STAT64_SIZE ? 1 : -1]);
@@ -1085,7 +1078,7 @@
return;
}
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
if (current_personality == 1) {
printstatsol(tcp, addr);
return;
@@ -1096,7 +1089,7 @@
return;
}
# endif
-#endif /* LINUXSPARC */
+#endif /* SPARC[64] */
#if defined X86_64
if (current_personality != 1) {
@@ -1186,7 +1179,7 @@
}
#endif /* HAVE_STAT64 */
-#if defined(HAVE_STRUCT___OLD_KERNEL_STAT) && !defined(HAVE_LONG_LONG_OFF_T)
+#if defined(HAVE_STRUCT___OLD_KERNEL_STAT)
static void
convertoldstat(const struct __old_kernel_stat *oldbuf, struct stat *newbuf)
{
@@ -1220,7 +1213,7 @@
return;
}
-# ifdef LINUXSPARC
+# if defined(SPARC) || defined(SPARC64)
if (current_personality == 1) {
printstatsol(tcp, addr);
return;
@@ -1237,7 +1230,6 @@
}
#endif
-#ifndef HAVE_LONG_LONG_OFF_T
int
sys_stat(struct tcb *tcp)
{
@@ -1249,7 +1241,63 @@
}
return 0;
}
-#endif
+
+#ifdef X32
+static void
+printstat64_x32(struct tcb *tcp, long addr)
+{
+ struct stat64 statbuf;
+
+ if (!addr) {
+ tprints("NULL");
+ return;
+ }
+ if (syserror(tcp) || !verbose(tcp)) {
+ tprintf("%#lx", addr);
+ return;
+ }
+
+ if (umove(tcp, addr, &statbuf) < 0) {
+ tprints("{...}");
+ return;
+ }
+
+ if (!abbrev(tcp)) {
+ tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ",
+ (unsigned long) major(statbuf.st_dev),
+ (unsigned long) minor(statbuf.st_dev),
+ (unsigned long long) statbuf.st_ino,
+ sprintmode(statbuf.st_mode));
+ tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
+ (unsigned long) statbuf.st_nlink,
+ (unsigned long) statbuf.st_uid,
+ (unsigned long) statbuf.st_gid);
+ tprintf("st_blksize=%lu, ",
+ (unsigned long) statbuf.st_blksize);
+ tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
+ }
+ else
+ tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
+ switch (statbuf.st_mode & S_IFMT) {
+ case S_IFCHR: case S_IFBLK:
+ tprintf("st_rdev=makedev(%lu, %lu), ",
+ (unsigned long) major(statbuf.st_rdev),
+ (unsigned long) minor(statbuf.st_rdev));
+ break;
+ default:
+ tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size);
+ break;
+ }
+ if (!abbrev(tcp)) {
+ tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
+ tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
+ tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
+ tprints("}");
+ }
+ else
+ tprints("...}");
+}
+#endif /* X32 */
int
sys_stat64(struct tcb *tcp)
@@ -1259,7 +1307,11 @@
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
} else {
+# ifdef X32
+ printstat64_x32(tcp, tcp->u_arg[1]);
+# else
printstat64(tcp, tcp->u_arg[1]);
+# endif
}
return 0;
#else
@@ -1316,7 +1368,7 @@
return 0;
}
-#if defined(HAVE_STRUCT___OLD_KERNEL_STAT) && !defined(HAVE_LONG_LONG_OFF_T)
+#if defined(HAVE_STRUCT___OLD_KERNEL_STAT)
int
sys_oldstat(struct tcb *tcp)
{
@@ -1330,7 +1382,6 @@
}
#endif
-#ifndef HAVE_LONG_LONG_OFF_T
int
sys_fstat(struct tcb *tcp)
{
@@ -1342,7 +1393,6 @@
}
return 0;
}
-#endif
int
sys_fstat64(struct tcb *tcp)
@@ -1352,7 +1402,11 @@
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
} else {
+# ifdef X32
+ printstat64_x32(tcp, tcp->u_arg[1]);
+# else
printstat64(tcp, tcp->u_arg[1]);
+# endif
}
return 0;
#else
@@ -1360,7 +1414,7 @@
#endif
}
-#if defined(HAVE_STRUCT___OLD_KERNEL_STAT) && !defined(HAVE_LONG_LONG_OFF_T)
+#if defined(HAVE_STRUCT___OLD_KERNEL_STAT)
int
sys_oldfstat(struct tcb *tcp)
{
@@ -1374,51 +1428,7 @@
}
#endif
-#ifndef HAVE_LONG_LONG_OFF_T
-int
-sys_lstat(struct tcb *tcp)
-{
- if (entering(tcp)) {
- printpath(tcp, tcp->u_arg[0]);
- tprints(", ");
- } else {
- printstat(tcp, tcp->u_arg[1]);
- }
- return 0;
-}
-#endif
-
-int
-sys_lstat64(struct tcb *tcp)
-{
-#ifdef HAVE_STAT64
- if (entering(tcp)) {
- printpath(tcp, tcp->u_arg[0]);
- tprints(", ");
- } else {
- printstat64(tcp, tcp->u_arg[1]);
- }
- return 0;
-#else
- return printargs(tcp);
-#endif
-}
-
-#if defined(HAVE_STRUCT___OLD_KERNEL_STAT) && !defined(HAVE_LONG_LONG_OFF_T)
-int
-sys_oldlstat(struct tcb *tcp)
-{
- if (entering(tcp)) {
- printpath(tcp, tcp->u_arg[0]);
- tprints(", ");
- } else {
- printoldstat(tcp, tcp->u_arg[1]);
- }
- return 0;
-}
-#endif
-
-#if defined(LINUXSPARC)
+#if defined(SPARC) || defined(SPARC64)
int
sys_xstat(struct tcb *tcp)
@@ -1594,7 +1604,7 @@
# endif /* HAVE_SYS_ACL_H */
-#endif /* LINUXSPARC */
+#endif /* SPARC[64] */
static const struct xlat fsmagic[] = {
{ 0x73757245, "CODA_SUPER_MAGIC" },
@@ -2123,12 +2133,15 @@
union {
long utl[2];
int uti[2];
+ long paranoia_for_huge_wordsize[4];
} u;
- unsigned wordsize = current_wordsize;
+ unsigned wordsize;
if (entering(tcp)) {
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
+
+ wordsize = current_wordsize;
if (!tcp->u_arg[1])
tprints("NULL");
else if (!verbose(tcp))
@@ -2144,7 +2157,8 @@
tprintf(" %s]", sprinttime(u.uti[1]));
}
else
- abort();
+ tprintf("<decode error: unsupported wordsize %d>",
+ wordsize);
}
return 0;
}
@@ -2160,7 +2174,7 @@
switch (mode & S_IFMT) {
case S_IFCHR:
case S_IFBLK:
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
if (current_personality == 1)
tprintf(", makedev(%lu, %lu)",
(unsigned long) ((tcp->u_arg[offset + 2] >> 18) & 0x3fff),
@@ -2193,22 +2207,31 @@
}
static void
-printdir(struct tcb *tcp, long addr)
+print_old_dirent(struct tcb *tcp, long addr)
{
- struct dirent d;
+#ifdef SH64
+ typedef struct kernel_dirent old_dirent_t;
+#else
+ typedef struct {
+ uint32_t d_ino;
+ uint32_t d_off;
+ unsigned short d_reclen;
+ char d_name[1];
+ } old_dirent_t;
+#endif
+ old_dirent_t d;
- if (!verbose(tcp)) {
+ if (!verbose(tcp) || umove(tcp, addr, &d) < 0) {
tprintf("%#lx", addr);
return;
}
- if (umove(tcp, addr, &d) < 0) {
- tprints("{...}");
- return;
- }
- tprintf("{d_ino=%ld, ", (unsigned long) d.d_ino);
- tprints("d_name=");
- printpathn(tcp, (long) ((struct dirent *) addr)->d_name, d.d_reclen);
- tprints("}");
+
+ tprintf("{d_ino=%lu, d_off=%lu, d_reclen=%u, d_name=\"",
+ (unsigned long) d.d_ino, (unsigned long) d.d_off, d.d_reclen);
+ if (d.d_reclen > 256)
+ d.d_reclen = 256;
+ printpathn(tcp, addr + offsetof(old_dirent_t, d_name), d.d_reclen);
+ tprints("\"}");
}
int
@@ -2221,7 +2244,7 @@
if (syserror(tcp) || tcp->u_rval == 0 || !verbose(tcp))
tprintf("%#lx", tcp->u_arg[1]);
else
- printdir(tcp, tcp->u_arg[1]);
+ print_old_dirent(tcp, tcp->u_arg[1]);
/* Not much point in printing this out, it is always 1. */
if (tcp->u_arg[2] != 1)
tprintf(", %lu", tcp->u_arg[2]);
@@ -2278,8 +2301,10 @@
if (!abbrev(tcp)) {
tprintf("%s{d_ino=%lu, d_off=%lu, ",
i ? " " : "", d->d_ino, d->d_off);
- tprintf("d_reclen=%u, d_name=\"%s\"}",
+ tprintf("d_reclen=%u, d_name=\"%s\", d_type=",
d->d_reclen, d->d_name);
+ printxval(direnttypes, buf[i + d->d_reclen - 1], "DT_???");
+ tprints("}");
}
if (!d->d_reclen) {
tprints("/* d_reclen == 0, problem here */");
@@ -2466,6 +2491,8 @@
unsigned long insize,
unsigned long size)
{
+ if (insize == 0)
+ failed = 1;
if (!failed) {
unsigned long capacity = 4 * size + 1;
unsigned char *buf = (capacity < size) ? NULL : malloc(capacity);
@@ -2478,7 +2505,7 @@
unsigned char *in = &buf[3 * size];
size_t i;
for (i = 0; i < size; ++i) {
- if (isprint(in[i]))
+ if (in[i] >= ' ' && in[i] <= 0x7e)
*out++ = in[i];
else {
#define tohex(n) "0123456789abcdef"[n]
@@ -2635,8 +2662,7 @@
if (entering(tcp)) {
int argn;
printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
- argn = printllval(tcp, "%lld", 1);
+ argn = printllval(tcp, ", %lld", 1);
tprintf(", %ld, ", tcp->u_arg[argn++]);
printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???");
}
@@ -2649,14 +2675,9 @@
if (entering(tcp)) {
int argn;
printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
-#if defined ARM || defined POWERPC
- argn = printllval(tcp, "%lld, ", 2);
-#else
- argn = printllval(tcp, "%lld, ", 1);
-#endif
+ argn = printllval(tcp, ", %lld, ", 1);
argn = printllval(tcp, "%lld, ", argn);
-#if defined ARM || defined POWERPC
+#if defined __ARM_EABI__ || defined AARCH64 || defined POWERPC || defined XTENSA
printxval(advise, tcp->u_arg[1], "POSIX_FADV_???");
#else
printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???");
@@ -2732,8 +2753,7 @@
if (entering(tcp)) {
int argn;
printfd(tcp, tcp->u_arg[0]); /* fd */
- tprints(", ");
- tprintf("%#lo, ", tcp->u_arg[1]); /* mode */
+ tprintf(", %#lo, ", tcp->u_arg[1]); /* mode */
argn = printllval(tcp, "%llu, ", 2); /* offset */
printllval(tcp, "%llu", argn); /* len */
}
@@ -2766,88 +2786,3 @@
}
return 0;
}
-
-#ifdef X32
-# undef stat64
-# undef sys_fstat64
-# undef sys_stat64
-
-static void
-realprintstat64(struct tcb *tcp, long addr)
-{
- struct stat64 statbuf;
-
- if (!addr) {
- tprints("NULL");
- return;
- }
- if (syserror(tcp) || !verbose(tcp)) {
- tprintf("%#lx", addr);
- return;
- }
-
- if (umove(tcp, addr, &statbuf) < 0) {
- tprints("{...}");
- return;
- }
-
- if (!abbrev(tcp)) {
- tprintf("{st_dev=makedev(%lu, %lu), st_ino=%llu, st_mode=%s, ",
- (unsigned long) major(statbuf.st_dev),
- (unsigned long) minor(statbuf.st_dev),
- (unsigned long long) statbuf.st_ino,
- sprintmode(statbuf.st_mode));
- tprintf("st_nlink=%lu, st_uid=%lu, st_gid=%lu, ",
- (unsigned long) statbuf.st_nlink,
- (unsigned long) statbuf.st_uid,
- (unsigned long) statbuf.st_gid);
- tprintf("st_blksize=%lu, ",
- (unsigned long) statbuf.st_blksize);
- tprintf("st_blocks=%lu, ", (unsigned long) statbuf.st_blocks);
- }
- else
- tprintf("{st_mode=%s, ", sprintmode(statbuf.st_mode));
- switch (statbuf.st_mode & S_IFMT) {
- case S_IFCHR: case S_IFBLK:
- tprintf("st_rdev=makedev(%lu, %lu), ",
- (unsigned long) major(statbuf.st_rdev),
- (unsigned long) minor(statbuf.st_rdev));
- break;
- default:
- tprintf("st_size=%llu, ", (unsigned long long) statbuf.st_size);
- break;
- }
- if (!abbrev(tcp)) {
- tprintf("st_atime=%s, ", sprinttime(statbuf.st_atime));
- tprintf("st_mtime=%s, ", sprinttime(statbuf.st_mtime));
- tprintf("st_ctime=%s", sprinttime(statbuf.st_ctime));
- tprints("}");
- }
- else
- tprints("...}");
-}
-
-int
-sys_fstat64(struct tcb *tcp)
-{
- if (entering(tcp)) {
- printfd(tcp, tcp->u_arg[0]);
- tprints(", ");
- } else {
- realprintstat64(tcp, tcp->u_arg[1]);
- }
- return 0;
-}
-
-int
-sys_stat64(struct tcb *tcp)
-{
- if (entering(tcp)) {
- printpath(tcp, tcp->u_arg[0]);
- tprints(", ");
- } else {
- realprintstat64(tcp, tcp->u_arg[1]);
- }
- return 0;
-}
-#endif
diff --git a/import-Android.sh b/import-Android.sh
index ad03f17..d1e54d6 100755
--- a/import-Android.sh
+++ b/import-Android.sh
@@ -8,6 +8,8 @@
#
UNNEEDED_SOURCES="\
+ .tarball-version \
+ .version \
Makefile.am \
Makefile.in \
README-freebsd \
@@ -33,7 +35,9 @@
linux/hppa \
linux/ia64 \
linux/m68k \
+ linux/metag \
linux/microblaze \
+ linux/or1k \
linux/powerpc \
linux/s390 \
linux/s390x \
@@ -42,6 +46,7 @@
linux/sparc \
linux/sparc64 \
linux/tile \
+ linux/xtensa \
m4 \
missing \
mkinstalldirs \
diff --git a/io.c b/io.c
index 6b3f4b7..b7bf832 100644
--- a/io.c
+++ b/io.c
@@ -250,26 +250,41 @@
}
#endif /* HAVE_SYS_UIO_H */
+static void
+print_off_t(struct tcb *tcp, long addr)
+{
+ unsigned long offset;
+
+ if (!addr) {
+ tprints("NULL");
+ return;
+ }
+
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+ if (current_wordsize == 4) {
+ uint32_t off;
+
+ if (umove(tcp, addr, &off) < 0)
+ tprintf("%#lx", addr);
+ else
+ tprintf("[%u]", off);
+ } else
+#endif
+ if (umove(tcp, addr, &offset) < 0)
+ tprintf("%#lx", addr);
+ else
+ tprintf("[%lu]", offset);
+}
+
int
sys_sendfile(struct tcb *tcp)
{
if (entering(tcp)) {
- off_t offset;
-
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
printfd(tcp, tcp->u_arg[1]);
tprints(", ");
- if (!tcp->u_arg[2])
- tprints("NULL");
- else if (umove(tcp, tcp->u_arg[2], &offset) < 0)
- tprintf("%#lx", tcp->u_arg[2]);
- else
-#ifdef HAVE_LONG_LONG_OFF_T
- tprintf("[%llu]", offset);
-#else
- tprintf("[%lu]", offset);
-#endif
+ print_off_t(tcp, tcp->u_arg[2]);
tprintf(", %lu", tcp->u_arg[3]);
}
return 0;
@@ -379,7 +394,7 @@
int
sys_ioctl(struct tcb *tcp)
{
- const struct ioctlent *iop;
+ const struct_ioctlent *iop;
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
diff --git a/ioctl.c b/ioctl.c
index 69ba56c..b504729 100644
--- a/ioctl.c
+++ b/ioctl.c
@@ -35,14 +35,14 @@
compare(const void *a, const void *b)
{
unsigned long code1 = (long) a;
- unsigned long code2 = ((struct ioctlent *) b)->code;
+ unsigned long code2 = ((struct_ioctlent *) b)->code;
return (code1 > code2) ? 1 : (code1 < code2) ? -1 : 0;
}
-const struct ioctlent *
+const struct_ioctlent *
ioctl_lookup(long code)
{
- struct ioctlent *iop;
+ struct_ioctlent *iop;
code &= (_IOC_NRMASK<<_IOC_NRSHIFT) | (_IOC_TYPEMASK<<_IOC_TYPESHIFT);
iop = bsearch((void*)code, ioctlent,
@@ -57,8 +57,8 @@
return iop;
}
-const struct ioctlent *
-ioctl_next_match(const struct ioctlent *iop)
+const struct_ioctlent *
+ioctl_next_match(const struct_ioctlent *iop)
{
long code;
@@ -94,6 +94,9 @@
return loop_ioctl(tcp, code, arg);
case 'M':
return mtd_ioctl(tcp, code, arg);
+ case 'o':
+ case 'O':
+ return ubi_ioctl(tcp, code, arg);
default:
break;
}
diff --git a/ipc.c b/ipc.c
index 2a27c9b..3e471b5 100644
--- a/ipc.c
+++ b/ipc.c
@@ -152,10 +152,9 @@
{
if (entering(tcp)) {
if (tcp->u_arg[0])
- tprintf("%#lx", tcp->u_arg[0]);
+ tprintf("%#lx, ", tcp->u_arg[0]);
else
- tprints("IPC_PRIVATE");
- tprints(", ");
+ tprints("IPC_PRIVATE, ");
if (printflags(resource_flags, tcp->u_arg[1] & ~0777, NULL) != 0)
tprints("|");
tprintf("%#lo", tcp->u_arg[1] & 0777);
@@ -180,7 +179,7 @@
#if defined IA64
return tcp->scno < 1024; /* ia32 emulation syscalls are low */
#endif
-#if defined(ALPHA) || defined(MIPS) || defined(HPPA) || defined(__ARM_EABI__)
+#if defined(ALPHA) || defined(MIPS) || defined(HPPA) || defined(__ARM_EABI__) || defined(AARCH64)
return 0;
#endif
return 1;
@@ -333,10 +332,10 @@
if (indirect_ipccall(tcp)) {
tprint_sembuf(tcp, tcp->u_arg[3], tcp->u_arg[1]);
tprints(", ");
-#if defined(S390)
+#if defined(S390) || defined(S390X)
printtv(tcp, tcp->u_arg[2]);
#else
- printtv(tcp, tcp->u_arg[5]);
+ printtv(tcp, tcp->u_arg[4]);
#endif
} else {
tprint_sembuf(tcp, tcp->u_arg[1], tcp->u_arg[2]);
@@ -354,8 +353,7 @@
tprintf("%#lx", tcp->u_arg[0]);
else
tprints("IPC_PRIVATE");
- tprintf(", %lu", tcp->u_arg[1]);
- tprints(", ");
+ tprintf(", %lu, ", tcp->u_arg[1]);
if (printflags(resource_flags, tcp->u_arg[2] & ~0777, NULL) != 0)
tprints("|");
tprintf("%#lo", tcp->u_arg[2] & 0777);
@@ -366,8 +364,7 @@
int sys_semctl(struct tcb *tcp)
{
if (entering(tcp)) {
- tprintf("%lu", tcp->u_arg[0]);
- tprintf(", %lu, ", tcp->u_arg[1]);
+ tprintf("%lu, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
PRINTCTL(semctl_flags, tcp->u_arg[2], "SEM_???");
tprintf(", %#lx", tcp->u_arg[3]);
}
@@ -381,8 +378,7 @@
tprintf("%#lx", tcp->u_arg[0]);
else
tprints("IPC_PRIVATE");
- tprintf(", %lu", tcp->u_arg[1]);
- tprints(", ");
+ tprintf(", %lu, ", tcp->u_arg[1]);
if (printflags(shm_resource_flags, tcp->u_arg[2] & ~0777, NULL) != 0)
tprints("|");
tprintf("%#lo", tcp->u_arg[2] & 0777);
@@ -409,12 +405,10 @@
if (exiting(tcp)) {
tprintf("%lu", tcp->u_arg[0]);
if (indirect_ipccall(tcp)) {
- tprintf(", %#lx", tcp->u_arg[3]);
- tprints(", ");
+ tprintf(", %#lx, ", tcp->u_arg[3]);
printflags(shm_flags, tcp->u_arg[1], "SHM_???");
} else {
- tprintf(", %#lx", tcp->u_arg[1]);
- tprints(", ");
+ tprintf(", %#lx, ", tcp->u_arg[1]);
printflags(shm_flags, tcp->u_arg[2], "SHM_???");
}
if (syserror(tcp))
@@ -458,7 +452,7 @@
/* mode */
tprintf(", %#lo, ", tcp->u_arg[2]);
if (umove(tcp, tcp->u_arg[3], &attr) < 0)
- tprints("{ ??? }");
+ tprints("{???}");
else
tprintf("{mq_maxmsg=%ld, mq_msgsize=%ld}",
(long) attr.mq_maxmsg,
diff --git a/linux/aarch64/errnoent1.h b/linux/aarch64/errnoent1.h
new file mode 100644
index 0000000..e1cbe33
--- /dev/null
+++ b/linux/aarch64/errnoent1.h
@@ -0,0 +1,2 @@
+/* Native AArch64 */
+#include "../errnoent.h"
diff --git a/linux/aarch64/ioctlent1.h b/linux/aarch64/ioctlent1.h
new file mode 100644
index 0000000..72eeaf1
--- /dev/null
+++ b/linux/aarch64/ioctlent1.h
@@ -0,0 +1 @@
+#include "ioctlent.h"
diff --git a/linux/aarch64/signalent1.h b/linux/aarch64/signalent1.h
new file mode 100644
index 0000000..d31e6a4
--- /dev/null
+++ b/linux/aarch64/signalent1.h
@@ -0,0 +1 @@
+#include "../signalent.h"
diff --git a/linux/aarch64/syscallent.h b/linux/aarch64/syscallent.h
new file mode 100644
index 0000000..1b892be
--- /dev/null
+++ b/linux/aarch64/syscallent.h
@@ -0,0 +1 @@
+#include "../arm/syscallent.h"
diff --git a/linux/aarch64/syscallent1.h b/linux/aarch64/syscallent1.h
new file mode 100644
index 0000000..e772a5e
--- /dev/null
+++ b/linux/aarch64/syscallent1.h
@@ -0,0 +1,330 @@
+ { 2, 0, sys_io_setup, "io_setup" }, /* 0 */
+ { 1, 0, sys_io_destroy, "io_destroy" }, /* 1 */
+ { 3, 0, sys_io_submit, "io_submit" }, /* 2 */
+ { 3, 0, sys_io_cancel, "io_cancel" }, /* 3 */
+ { 5, 0, sys_io_getevents, "io_getevents" }, /* 4 */
+ { 5, TF, sys_setxattr, "setxattr" }, /* 5 */
+ { 5, TF, sys_setxattr, "lsetxattr" }, /* 6 */
+ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 7 */
+ { 4, TF, sys_getxattr, "getxattr" }, /* 8 */
+ { 4, TF, sys_getxattr, "lgetxattr" }, /* 9 */
+ { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 10 */
+ { 3, TF, sys_listxattr, "listxattr" }, /* 11 */
+ { 3, TF, sys_listxattr, "llistxattr" }, /* 12 */
+ { 3, TD, sys_flistxattr, "flistxattr" }, /* 13 */
+ { 2, TF, sys_removexattr, "removexattr" }, /* 14 */
+ { 2, TF, sys_removexattr, "lremovexattr" }, /* 15 */
+ { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 16 */
+ { 2, TF, sys_getcwd, "getcwd" }, /* 17 */
+ { 3, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 18 */
+ { 2, TD, sys_eventfd2, "eventfd2" }, /* 19 */
+ { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 20 */
+ { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 21 */
+ { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 22 */
+ { 1, TD, sys_dup, "dup" }, /* 23 */
+ { 3, TD, sys_dup3, "dup3" }, /* 24 */
+ { 3, TD, sys_fcntl, "fcntl" }, /* 25 */
+ { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 26 */
+ { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 27 */
+ { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 28 */
+ { 3, TD, sys_ioctl, "ioctl" }, /* 29 */
+ { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 30 */
+ { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 31 */
+ { 2, TD, sys_flock, "flock" }, /* 32 */
+ { 4, TD|TF, sys_mknodat, "mknodat" }, /* 33 */
+ { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 34 */
+ { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 35 */
+ { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 36 */
+ { 5, TD|TF, sys_linkat, "linkat" }, /* 37 */
+ { 4, TD|TF, sys_renameat, "renameat" }, /* 38 */
+ { 2, TF, sys_umount2, "umount2" }, /* 39 */
+ { 5, TF, sys_mount, "mount" }, /* 40 */
+ { 2, TF, sys_pivotroot, "pivot_root" }, /* 41 */
+ { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 42 */
+ { 2, TF, sys_statfs, "statfs64" }, /* 43 */
+ { 2, TD, sys_fstatfs, "fstatfs64" }, /* 44 */
+ { 2, TF, sys_truncate, "truncate64" }, /* 45 */
+ { 2, TD, sys_ftruncate, "ftruncate64" }, /* 46 */
+ { 4, TD, sys_fallocate, "fallocate" }, /* 47 */
+ { 3, TD|TF, sys_faccessat, "faccessat" }, /* 48 */
+ { 1, TF, sys_chdir, "chdir" }, /* 49 */
+ { 1, TD, sys_fchdir, "fchdir" }, /* 50 */
+ { 1, TF, sys_chroot, "chroot" }, /* 51 */
+ { 2, TD, sys_fchmod, "fchmod" }, /* 52 */
+ { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 53 */
+ { 5, TD|TF, sys_fchownat, "fchownat" }, /* 54 */
+ { 3, TD, sys_fchown, "fchown" }, /* 55 */
+ { 4, TD|TF, sys_openat, "openat" }, /* 56 */
+ { 1, TD, sys_close, "close" }, /* 57 */
+ { 0, 0, sys_vhangup, "vhangup" }, /* 58 */
+ { 2, TD, sys_pipe2, "pipe2" }, /* 59 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 60 */
+ { 3, TD, sys_getdents64, "getdents64" }, /* 61 */
+ { 3, TD, sys_lseek, "lseek" }, /* 62 */
+ { 3, TD, sys_read, "read" }, /* 63 */
+ { 3, TD, sys_write, "write" }, /* 64 */
+ { 3, TD, sys_readv, "readv" }, /* 65 */
+ { 3, TD, sys_writev, "writev" }, /* 66 */
+ { 4, TD, sys_pread, "pread64" }, /* 67 */
+ { 4, TD, sys_pwrite, "pwrite64" }, /* 68 */
+ { 4, TD, sys_preadv, "preadv" }, /* 69 */
+ { 4, TD, sys_pwritev, "pwritev" }, /* 70 */
+ { 4, TD|TN, sys_sendfile64, "sendfile" }, /* 71 */
+ { 6, TD, sys_pselect6, "pselect6" }, /* 72 */
+ { 5, TD, sys_ppoll, "ppoll" }, /* 73 */
+ { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 74 */
+ { 4, TD, sys_vmsplice, "vmsplice" }, /* 75 */
+ { 6, TD, sys_splice, "splice" }, /* 76 */
+ { 4, TD, sys_tee, "tee" }, /* 77 */
+ { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 78 */
+ { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 79 */
+ { 2, TD, sys_fstat, "fstat" }, /* 80 */
+ { 0, 0, sys_sync, "sync" }, /* 81 */
+ { 1, TD, sys_fsync, "fsync" }, /* 82 */
+ { 1, TD, sys_fdatasync, "fdatasync" }, /* 83 */
+ { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 84 */
+ { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 85 */
+ { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 86 */
+ { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 87 */
+ { 4, TD|TF, sys_utimensat, "utimensat" }, /* 88 */
+ { 1, TF, sys_acct, "acct" }, /* 89 */
+ { 2, 0, sys_capget, "capget" }, /* 90 */
+ { 2, 0, sys_capset, "capset" }, /* 91 */
+ { 1, 0, sys_personality, "personality" }, /* 92 */
+ { 1, TP, sys_exit, "exit" }, /* 93 */
+ { 1, TP, sys_exit, "exit_group" }, /* 94 */
+ { 5, TP, sys_waitid, "waitid" }, /* 95 */
+ { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 96 */
+ { 1, TP, sys_unshare, "unshare" }, /* 97 */
+ { 6, 0, sys_futex, "futex" }, /* 98 */
+ { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 99 */
+ { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 100 */
+ { 2, 0, sys_nanosleep, "nanosleep" }, /* 101 */
+ { 2, 0, sys_getitimer, "getitimer" }, /* 102 */
+ { 3, 0, sys_setitimer, "setitimer" }, /* 103 */
+ { 4, 0, sys_kexec_load, "kexec_load" }, /* 104 */
+ { 3, 0, sys_init_module, "init_module" }, /* 105 */
+ { 2, 0, sys_delete_module, "delete_module" }, /* 106 */
+ { 3, 0, sys_timer_create, "timer_create" }, /* 107 */
+ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 108 */
+ { 1, 0, sys_timer_getoverrun, "timer_getoverrun" }, /* 109 */
+ { 4, 0, sys_timer_settime, "timer_settime" }, /* 110 */
+ { 1, 0, sys_timer_delete, "timer_delete" }, /* 111 */
+ { 2, 0, sys_clock_settime, "clock_settime" }, /* 112 */
+ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 113 */
+ { 2, 0, sys_clock_getres, "clock_getres" }, /* 114 */
+ { 4, 0, sys_clock_nanosleep, "clock_nanosleep" }, /* 115 */
+ { 3, 0, sys_syslog, "syslog" }, /* 116 */
+ { 4, 0, sys_ptrace, "ptrace" }, /* 117 */
+ { 0, 0, sys_sched_setparam, "sched_setparam" }, /* 118 */
+ { 3, 0, sys_sched_setscheduler, "sched_setscheduler" }, /* 119 */
+ { 1, 0, sys_sched_getscheduler, "sched_getscheduler" }, /* 120 */
+ { 2, 0, sys_sched_getparam, "sched_getparam" }, /* 121 */
+ { 3, 0, sys_sched_setaffinity, "sched_setaffinity" }, /* 122 */
+ { 3, 0, sys_sched_getaffinity, "sched_getaffinity" }, /* 123 */
+ { 0, 0, sys_sched_yield, "sched_yield" }, /* 124 */
+ { 1, 0, sys_sched_get_priority_max, "sched_get_priority_max" }, /* 125 */
+ { 1, 0, sys_sched_get_priority_min, "sched_get_priority_min" }, /* 126 */
+ { 2, 0, sys_sched_rr_get_interval, "sched_rr_get_interval" }, /* 127 */
+ { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 128 */
+ { 2, TS, sys_kill, "kill" }, /* 129 */
+ { 2, TS, sys_kill, "tkill" }, /* 130 */
+ { 3, TS, sys_tgkill, "tgkill" }, /* 131 */
+ { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 132 */
+ { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 133 */
+ { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 134 */
+ { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask" }, /* 135 */
+ { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 136 */
+ { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait" }, /* 137 */
+ { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo" }, /* 138 */
+ { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 139 */
+ { 3, 0, sys_setpriority, "setpriority" }, /* 140 */
+ { 2, 0, sys_getpriority, "getpriority" }, /* 141 */
+ { 4, 0, sys_reboot, "reboot" }, /* 142 */
+ { 2, 0, sys_setregid, "setregid" }, /* 143 */
+ { 1, 0, sys_setgid, "setgid" }, /* 144 */
+ { 2, 0, sys_setreuid, "setreuid" }, /* 145 */
+ { 1, 0, sys_setuid, "setuid" }, /* 146 */
+ { 3, 0, sys_setresuid, "setresuid" }, /* 147 */
+ { 3, 0, sys_getresuid, "getresuid" }, /* 148 */
+ { 3, 0, sys_setresgid, "setresgid" }, /* 149 */
+ { 3, 0, sys_getresgid, "getresgid" }, /* 150 */
+ { 1, NF, sys_setfsuid, "setfsuid" }, /* 151 */
+ { 1, NF, sys_setfsgid, "setfsgid" }, /* 152 */
+ { 1, 0, sys_times, "times" }, /* 153 */
+ { 2, 0, sys_setpgid, "setpgid" }, /* 154 */
+ { 1, 0, sys_getpgid, "getpgid" }, /* 155 */
+ { 1, 0, sys_getsid, "getsid" }, /* 156 */
+ { 0, 0, sys_setsid, "setsid" }, /* 157 */
+ { 2, 0, sys_getgroups, "getgroups" }, /* 158 */
+ { 2, 0, sys_setgroups, "setgroups" }, /* 159 */
+ { 1, 0, sys_uname, "uname" }, /* 160 */
+ { 2, 0, sys_sethostname, "sethostname" }, /* 161 */
+ { 2, 0, sys_setdomainname, "setdomainname" }, /* 162 */
+ { 2, 0, sys_getrlimit, "getrlimit" }, /* 163 */
+ { 2, 0, sys_setrlimit, "setrlimit" }, /* 164 */
+ { 2, 0, sys_getrusage, "getrusage" }, /* 165 */
+ { 1, 0, sys_umask, "umask" }, /* 166 */
+ { 5, 0, sys_prctl, "prctl" }, /* 167 */
+ { 3, 0, sys_getcpu, "getcpu" }, /* 168 */
+ { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 169 */
+ { 2, 0, sys_settimeofday, "settimeofday" }, /* 170 */
+ { 1, 0, sys_adjtimex, "adjtimex" }, /* 171 */
+ { 0, 0, sys_getpid, "getpid" }, /* 172 */
+ { 0, 0, sys_getppid, "getppid" }, /* 173 */
+ { 0, NF, sys_getuid, "getuid" }, /* 174 */
+ { 0, NF, sys_geteuid, "geteuid" }, /* 175 */
+ { 0, NF, sys_getgid, "getgid" }, /* 176 */
+ { 0, NF, sys_getegid, "getegid" }, /* 177 */
+ { 0, 0, sys_gettid, "gettid" }, /* 178 */
+ { 1, 0, sys_sysinfo, "sysinfo" }, /* 179 */
+ { 4, 0, sys_mq_open, "mq_open" }, /* 180 */
+ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 181 */
+ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 182 */
+ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 183 */
+ { 2, 0, sys_mq_notify, "mq_notify" }, /* 184 */
+ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 185 */
+ { 4, TI, sys_msgget, "msgget" }, /* 186 */
+ { 3, TI, sys_msgctl, "msgctl" }, /* 187 */
+ { 5, TI, sys_msgrcv, "msgrcv" }, /* 188 */
+ { 4, TI, sys_msgsnd, "msgsnd" }, /* 189 */
+ { 4, TI, sys_semget, "semget" }, /* 190 */
+ { 4, TI, sys_semctl, "semctl" }, /* 191 */
+ { 5, TI, sys_semtimedop, "semtimedop" }, /* 192 */
+ { 4, TI, sys_semop, "semop" }, /* 193 */
+ { 4, TI, sys_shmget, "shmget" }, /* 194 */
+ { 4, TI, sys_shmctl, "shmctl" }, /* 195 */
+ { 4, TI, sys_shmat, "shmat" }, /* 196 */
+ { 4, TI, sys_shmdt, "shmdt" }, /* 197 */
+ { 3, TN, sys_socket, "socket" }, /* 198 */
+ { 4, TN, sys_socketpair, "socketpair" }, /* 199 */
+ { 3, TN, sys_bind, "bind" }, /* 200 */
+ { 2, TN, sys_listen, "listen" }, /* 201 */
+ { 3, TN, sys_accept, "accept" }, /* 202 */
+ { 3, TN, sys_connect, "connect" }, /* 203 */
+ { 3, TN, sys_getsockname, "getsockname" }, /* 204 */
+ { 3, TN, sys_getpeername, "getpeername" }, /* 205 */
+ { 6, TN, sys_sendto, "sendto" }, /* 206 */
+ { 6, TN, sys_recvfrom, "recvfrom" }, /* 207 */
+ { 5, TN, sys_setsockopt, "setsockopt" }, /* 208 */
+ { 5, TN, sys_getsockopt, "getsockopt" }, /* 209 */
+ { 2, TN, sys_shutdown, "shutdown" }, /* 210 */
+ { 3, TN, sys_sendmsg, "sendmsg" }, /* 211 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 212 */
+ { 3, TD, sys_readahead, "readahead" }, /* 213 */
+ { 1, TM, sys_brk, "brk" }, /* 214 */
+ { 2, TM, sys_munmap, "munmap" }, /* 215 */
+ { 5, TM, sys_mremap, "mremap" }, /* 216 */
+ { 5, 0, sys_add_key, "add_key" }, /* 217 */
+ { 4, 0, sys_request_key, "request_key" }, /* 218 */
+ { 5, 0, sys_keyctl, "keyctl" }, /* 219 */
+ { 5, TP, sys_clone, "clone" }, /* 220 */
+ { 3, TF|TP, sys_execve, "execve" }, /* 221 */
+ { 6, TD|TM, sys_mmap, "mmap" }, /* 222 */
+ { 4, TD, sys_fadvise64, "fadvise64" }, /* 223 */
+ { 2, TF, sys_swapon, "swapon" }, /* 224 */
+ { 1, TF, sys_swapoff, "swapoff" }, /* 225 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 226 */
+ { 3, TM, sys_msync, "msync" }, /* 227 */
+ { 3, TM, sys_msync, "msync" }, /* 228 */
+ { 2, TM, sys_munlock, "munlock" }, /* 229 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 230 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 231 */
+ { 3, TM, sys_mincore, "mincore" }, /* 232 */
+ { 3, TM, sys_madvise, "madvise" }, /* 233 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages" }, /* 234 */
+ { 6, TM, sys_mbind, "mbind" }, /* 235 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 236 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 237 */
+ { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 238 */
+ { 6, TM, sys_move_pages, "move_pages" }, /* 239 */
+ { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 240 */
+ { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 241 */
+ { 4, TN, sys_accept4, "accept4" }, /* 242 */
+ { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 243 */
+
+ /* Arch-specific block, not used on AArch64 */
+ [244 ... 259] = { },
+
+ { 4, TP, sys_wait4, "wait4" }, /* 260 */
+ { 4, 0, sys_prlimit64, "prlimit64" }, /* 261 */
+ { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 262 */
+ { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 263 */
+ { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at" }, /* 264 */
+ { 3, TD, sys_open_by_handle_at, "open_by_handle_at" }, /* 265 */
+ { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 266 */
+ { 1, TD, sys_syncfs, "syncfs" }, /* 267 */
+ { 2, TD, sys_setns, "setns" }, /* 268 */
+ { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 269 */
+ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 270 */
+ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 271 */
+
+ /* Blank down to 1023 */
+ [272 ... 1023] = { },
+
+ /* Quote from asm-generic/unistd.h:
+ *
+ * All syscalls below here should go away really,
+ * these are provided for both review and as a porting
+ * help for the C library version.
+ *
+ * Last chance: are any of these important enough to
+ * enable by default?
+ */
+
+ { 3, TD|TF, sys_open, "open" }, /* 1024 */
+ { 2, TF, sys_link, "link" }, /* 1025 */
+ { 1, TF, sys_unlink, "unlink" }, /* 1026 */
+ { 3, TF, sys_mknod, "mknod" }, /* 1027 */
+ { 2, TF, sys_chmod, "chmod" }, /* 1028 */
+ { 3, TF, sys_chown, "chown" }, /* 1029 */
+ { 2, TF, sys_mkdir, "mkdir" }, /* 1030 */
+ { 1, TF, sys_rmdir, "rmdir" }, /* 1031 */
+ { 3, TF, sys_chown, "lchown" }, /* 1032 */
+ { 2, TF, sys_access, "access" }, /* 1033 */
+ { 2, TF, sys_rename, "rename" }, /* 1034 */
+ { 3, TF, sys_readlink, "readlink" }, /* 1035 */
+ { 2, TF, sys_symlink, "symlink" }, /* 1036 */
+ { 2, TF, sys_utimes, "utimes" }, /* 1037 */
+ { 2, TF, sys_stat, "stat" }, /* 1038 */
+ { 2, TF, sys_lstat, "lstat" }, /* 1039 */
+ { 1, TD, sys_pipe, "pipe" }, /* 1040 */
+ { 2, TD, sys_dup2, "dup2" }, /* 1041 */
+ { 1, TD, sys_epoll_create, "epoll_create" }, /* 1042 */
+ { 0, TD, sys_inotify_init, "inotify_init" }, /* 1043 */
+ { 1, TD, sys_eventfd, "eventfd" }, /* 1044 */
+ { 3, TD|TS, sys_signalfd, "signalfd" }, /* 1045 */
+ { 4, TD|TN, sys_sendfile64, "sendfile" }, /* 1046 */
+ { 2, TD, sys_ftruncate, "ftruncate" }, /* 1047 */
+ { 2, TF, sys_truncate, "truncate" }, /* 1048 */
+ { 2, TF, sys_stat, "stat" }, /* 1049 */
+ { 2, TF, sys_lstat, "lstat" }, /* 1050 */
+ { 2, TD, sys_fstat, "fstat" }, /* 1051 */
+ { 3, TD, sys_fcntl, "fcntl" }, /* 1052 */
+ { 4, TD, sys_fadvise64, "fadvise64" }, /* 1053 */
+ { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 1054 */
+ { 2, TD, sys_fstatfs, "fstatfs" }, /* 1055 */
+ { 2, TF, sys_statfs, "statfs" }, /* 1056 */
+ { 3, TD, sys_lseek, "lseek" }, /* 1057 */
+ { 6, TD|TM, sys_mmap, "mmap" }, /* 1058 */
+ { 1, 0, sys_alarm, "alarm" }, /* 1059 */
+ { 0, 0, sys_getpgrp, "getpgrp" }, /* 1060 */
+ { 0, TS, sys_pause, "pause" }, /* 1061 */
+ { 1, 0, sys_time, "time" }, /* 1062 */
+ { 2, TF, sys_utime, "utime" }, /* 1063 */
+ { 2, TD|TF, sys_creat, "creat" }, /* 1064 */
+ { 3, TD, sys_getdents, "getdents" }, /* 1065 */
+ { 3, TD|TF, sys_futimesat, "futimesat" }, /* 1066 */
+ { 5, TD, sys_select, "select" }, /* 1067 */
+ { 3, TD, sys_poll, "poll" }, /* 1068 */
+ { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 1069 */
+ { 2, 0, sys_ustat, "ustat" }, /* 1070 */
+ { 0, TP, sys_vfork, "vfork" }, /* 1071 */
+ { 4, TP, sys_wait4, "wait4" }, /* 1072 */
+ { 6, TN, sys_recv, "recv" }, /* 1073 */
+ { 4, TN, sys_send, "send" }, /* 1074 */
+ { 2, 0, sys_bdflush, "bdflush" }, /* 1075 */
+ { 2, TF, sys_umount, "umount" }, /* 1076 */
+ { 1, TF, sys_uselib, "uselib" }, /* 1077 */
+ { 1, 0, sys_sysctl, "sysctl" }, /* 1078 */
+ { 0, TP, sys_fork, "fork" }, /* 1079 */
diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h
index 550335e..132b22a 100644
--- a/linux/arm/syscallent.h
+++ b/linux/arm/syscallent.h
@@ -29,12 +29,12 @@
{ 0, 0, sys_restart_syscall, "restart_syscall"}, /* 0 */
{ 1, TP, sys_exit, "exit" }, /* 1 */
{ 0, TP, sys_fork, "fork" }, /* 2 */
- { 3, 0, sys_read, "read" }, /* 3 */
- { 3, 0, sys_write, "write" }, /* 4 */
- { 3, TF, sys_open, "open" }, /* 5 */
- { 1, 0, sys_close, "close" }, /* 6 */
+ { 3, TD, sys_read, "read" }, /* 3 */
+ { 3, TD, sys_write, "write" }, /* 4 */
+ { 3, TD|TF, sys_open, "open" }, /* 5 */
+ { 1, TD, sys_close, "close" }, /* 6 */
{ 3, TP, sys_waitpid, "waitpid" }, /* 7 */
- { 2, TF, sys_creat, "creat" }, /* 8 */
+ { 2, TD|TF, sys_creat, "creat" }, /* 8 */
{ 2, TF, sys_link, "link" }, /* 9 */
{ 1, TF, sys_unlink, "unlink" }, /* 10 */
{ 3, TF|TP, sys_execve, "execve" }, /* 11 */
@@ -43,9 +43,9 @@
{ 3, TF, sys_mknod, "mknod" }, /* 14 */
{ 2, TF, sys_chmod, "chmod" }, /* 15 */
{ 3, TF, sys_chown, "lchown" }, /* 16 */
- { 0, 0, sys_break, "break" }, /* 17 */
+ { 0, TM, sys_break, "break" }, /* 17 */
{ 2, TF, sys_oldstat, "oldstat" }, /* 18 */
- { 3, 0, sys_lseek, "lseek" }, /* 19 */
+ { 3, TD, sys_lseek, "lseek" }, /* 19 */
{ 0, 0, sys_getpid, "getpid" }, /* 20 */
{ 5, TF, sys_mount, "mount" }, /* 21 */
{ 1, TF, sys_umount, "oldumount" }, /* 22 */
@@ -54,7 +54,7 @@
{ 1, 0, sys_stime, "stime" }, /* 25 */
{ 4, 0, sys_ptrace, "ptrace" }, /* 26 */
{ 1, 0, sys_alarm, "alarm" }, /* 27 */
- { 2, 0, sys_oldfstat, "oldfstat" }, /* 28 */
+ { 2, TD, sys_oldfstat, "oldfstat" }, /* 28 */
{ 0, TS, sys_pause, "pause" }, /* 29 */
{ 2, TF, sys_utime, "utime" }, /* 30 */
{ 2, 0, sys_stty, "stty" }, /* 31 */
@@ -67,11 +67,11 @@
{ 2, TF, sys_rename, "rename" }, /* 38 */
{ 2, TF, sys_mkdir, "mkdir" }, /* 39 */
{ 1, TF, sys_rmdir, "rmdir" }, /* 40 */
- { 1, 0, sys_dup, "dup" }, /* 41 */
- { 1, 0, sys_pipe, "pipe" }, /* 42 */
+ { 1, TD, sys_dup, "dup" }, /* 41 */
+ { 1, TD, sys_pipe, "pipe" }, /* 42 */
{ 1, 0, sys_times, "times" }, /* 43 */
{ 0, 0, sys_prof, "prof" }, /* 44 */
- { 1, 0, sys_brk, "brk" }, /* 45 */
+ { 1, TM, sys_brk, "brk" }, /* 45 */
{ 1, 0, sys_setgid, "setgid" }, /* 46 */
{ 0, NF, sys_getgid, "getgid" }, /* 47 */
{ 3, TS, sys_signal, "signal" }, /* 48 */
@@ -80,8 +80,8 @@
{ 1, TF, sys_acct, "acct" }, /* 51 */
{ 2, TF, sys_umount2, "umount" }, /* 52 */
{ 0, 0, sys_lock, "lock" }, /* 53 */
- { 3, 0, sys_ioctl, "ioctl" }, /* 54 */
- { 3, 0, sys_fcntl, "fcntl" }, /* 55 */
+ { 3, TD, sys_ioctl, "ioctl" }, /* 54 */
+ { 3, TD, sys_fcntl, "fcntl" }, /* 55 */
{ 0, 0, sys_mpx, "mpx" }, /* 56 */
{ 2, 0, sys_setpgid, "setpgid" }, /* 57 */
{ 2, 0, sys_ulimit, "ulimit" }, /* 58 */
@@ -89,7 +89,7 @@
{ 1, 0, sys_umask, "umask" }, /* 60 */
{ 1, TF, sys_chroot, "chroot" }, /* 61 */
{ 2, 0, sys_ustat, "ustat" }, /* 62 */
- { 2, 0, sys_dup2, "dup2" }, /* 63 */
+ { 2, TD, sys_dup2, "dup2" }, /* 63 */
{ 0, 0, sys_getppid, "getppid" }, /* 64 */
{ 0, 0, sys_getpgrp, "getpgrp" }, /* 65 */
{ 0, 0, sys_setsid, "setsid" }, /* 66 */
@@ -108,33 +108,33 @@
{ 2, 0, sys_settimeofday, "settimeofday" }, /* 79 */
{ 2, 0, sys_getgroups, "getgroups" }, /* 80 */
{ 2, 0, sys_setgroups, "setgroups" }, /* 81 */
- { 1, 0, sys_oldselect, "oldselect" }, /* 82 */
+ { 1, TD, sys_oldselect, "oldselect" }, /* 82 */
{ 2, TF, sys_symlink, "symlink" }, /* 83 */
{ 2, TF, sys_oldlstat, "oldlstat" }, /* 84 */
{ 3, TF, sys_readlink, "readlink" }, /* 85 */
{ 1, TF, sys_uselib, "uselib" }, /* 86 */
{ 2, TF, sys_swapon, "swapon" }, /* 87 */
{ 4, 0, sys_reboot, "reboot" }, /* 88 */
- { 3, 0, sys_readdir, "readdir" }, /* 89 */
- { 6, TD, sys_old_mmap, "old_mmap" }, /* 90 */
- { 2, 0, sys_munmap, "munmap" }, /* 91 */
+ { 3, TD, sys_readdir, "readdir" }, /* 89 */
+ { 1, TD|TM, sys_old_mmap, "old_mmap" }, /* 90 */
+ { 2, TM, sys_munmap, "munmap" }, /* 91 */
{ 2, TF, sys_truncate, "truncate" }, /* 92 */
- { 2, 0, sys_ftruncate, "ftruncate" }, /* 93 */
- { 2, 0, sys_fchmod, "fchmod" }, /* 94 */
- { 3, 0, sys_fchown, "fchown" }, /* 95 */
+ { 2, TD, sys_ftruncate, "ftruncate" }, /* 93 */
+ { 2, TD, sys_fchmod, "fchmod" }, /* 94 */
+ { 3, TD, sys_fchown, "fchown" }, /* 95 */
{ 2, 0, sys_getpriority, "getpriority" }, /* 96 */
{ 3, 0, sys_setpriority, "setpriority" }, /* 97 */
{ 4, 0, sys_profil, "profil" }, /* 98 */
{ 2, TF, sys_statfs, "statfs" }, /* 99 */
- { 2, 0, sys_fstatfs, "fstatfs" }, /* 100 */
+ { 2, TD, sys_fstatfs, "fstatfs" }, /* 100 */
{ 3, 0, sys_ioperm, "ioperm" }, /* 101 */
- { 2, 0, sys_socketcall, "socketcall" }, /* 102 */
+ { 2, TD, sys_socketcall, "socketcall" }, /* 102 */
{ 3, 0, sys_syslog, "syslog" }, /* 103 */
{ 3, 0, sys_setitimer, "setitimer" }, /* 104 */
{ 2, 0, sys_getitimer, "getitimer" }, /* 105 */
{ 2, TF, sys_stat, "stat" }, /* 106 */
{ 2, TF, sys_lstat, "lstat" }, /* 107 */
- { 2, 0, sys_fstat, "fstat" }, /* 108 */
+ { 2, TD, sys_fstat, "fstat" }, /* 108 */
{ 1, 0, sys_olduname, "olduname" }, /* 109 */
{ 1, 0, sys_iopl, "iopl" }, /* 110 */
{ 0, 0, sys_vhangup, "vhangup" }, /* 111 */
@@ -144,42 +144,42 @@
{ 1, TF, sys_swapoff, "swapoff" }, /* 115 */
{ 1, 0, sys_sysinfo, "sysinfo" }, /* 116 */
{ 6, TI, sys_ipc, "ipc" }, /* 117 */
- { 1, 0, sys_fsync, "fsync" }, /* 118 */
+ { 1, TD, sys_fsync, "fsync" }, /* 118 */
{ 0, TS, sys_sigreturn, "sigreturn" }, /* 119 */
{ 5, TP, sys_clone, "clone" }, /* 120 */
{ 2, 0, sys_setdomainname, "setdomainname" }, /* 121 */
{ 1, 0, sys_uname, "uname" }, /* 122 */
{ 3, 0, sys_modify_ldt, "modify_ldt" }, /* 123 */
{ 1, 0, sys_adjtimex, "adjtimex" }, /* 124 */
- { 3, 0, sys_mprotect, "mprotect" }, /* 125 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 125 */
{ 3, TS, sys_sigprocmask, "sigprocmask" }, /* 126 */
{ 2, 0, sys_create_module, "create_module" }, /* 127 */
{ 3, 0, sys_init_module, "init_module" }, /* 128 */
{ 2, 0, sys_delete_module, "delete_module" }, /* 129 */
{ 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 130 */
- { 4, 0, sys_quotactl, "quotactl" }, /* 131 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 131 */
{ 1, 0, sys_getpgid, "getpgid" }, /* 132 */
- { 1, 0, sys_fchdir, "fchdir" }, /* 133 */
+ { 1, TD, sys_fchdir, "fchdir" }, /* 133 */
{ 0, 0, sys_bdflush, "bdflush" }, /* 134 */
{ 3, 0, sys_sysfs, "sysfs" }, /* 135 */
{ 1, 0, sys_personality, "personality" }, /* 136 */
{ 5, 0, sys_afs_syscall, "afs_syscall" }, /* 137 */
{ 1, NF, sys_setfsuid, "setfsuid" }, /* 138 */
{ 1, NF, sys_setfsgid, "setfsgid" }, /* 139 */
- { 5, 0, sys_llseek, "_llseek" }, /* 140 */
- { 3, 0, sys_getdents, "getdents" }, /* 141 */
- { 5, 0, sys_select, "select" }, /* 142 */
- { 2, 0, sys_flock, "flock" }, /* 143 */
- { 3, 0, sys_msync, "msync" }, /* 144 */
- { 3, 0, sys_readv, "readv" }, /* 145 */
- { 3, 0, sys_writev, "writev" }, /* 146 */
+ { 5, TD, sys_llseek, "_llseek" }, /* 140 */
+ { 3, TD, sys_getdents, "getdents" }, /* 141 */
+ { 5, TD, sys_select, "select" }, /* 142 */
+ { 2, TD, sys_flock, "flock" }, /* 143 */
+ { 3, TM, sys_msync, "msync" }, /* 144 */
+ { 3, TD, sys_readv, "readv" }, /* 145 */
+ { 3, TD, sys_writev, "writev" }, /* 146 */
{ 1, 0, sys_getsid, "getsid" }, /* 147 */
- { 1, 0, sys_fdatasync, "fdatasync" }, /* 148 */
+ { 1, TD, sys_fdatasync, "fdatasync" }, /* 148 */
{ 1, 0, sys_sysctl, "_sysctl" }, /* 149 */
- { 2, 0, sys_mlock, "mlock" }, /* 150 */
- { 2, 0, sys_munlock, "munlock" }, /* 151 */
- { 1, 0, sys_mlockall, "mlockall" }, /* 152 */
- { 0, 0, sys_munlockall, "munlockall" }, /* 153 */
+ { 2, TM, sys_mlock, "mlock" }, /* 150 */
+ { 2, TM, sys_munlock, "munlock" }, /* 151 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 152 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 153 */
{ 0, 0, sys_sched_setparam, "sched_setparam"}, /* 154 */
{ 2, 0, sys_sched_getparam, "sched_getparam"}, /* 155 */
{ 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 156 */
@@ -189,12 +189,12 @@
{ 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 160 */
{ 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 161 */
{ 2, 0, sys_nanosleep, "nanosleep" }, /* 162 */
- { 5, 0, sys_mremap, "mremap" }, /* 163 */
+ { 5, TM, sys_mremap, "mremap" }, /* 163 */
{ 3, 0, sys_setresuid, "setresuid" }, /* 164 */
{ 3, 0, sys_getresuid, "getresuid" }, /* 165 */
{ 5, 0, sys_vm86, "vm86" }, /* 166 */
{ 5, 0, sys_query_module, "query_module" }, /* 167 */
- { 3, 0, sys_poll, "poll" }, /* 168 */
+ { 3, TD, sys_poll, "poll" }, /* 168 */
{ 3, 0, sys_nfsservctl, "nfsservctl" }, /* 169 */
{ 3, 0, sys_setresgid, "setresgid" }, /* 170 */
{ 3, 0, sys_getresgid, "getresgid" }, /* 171 */
@@ -207,8 +207,8 @@
{ 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"}, /* 178 */
{ 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 179 */
- { 6, TF, sys_pread, "pread" }, /* 180 */
- { 6, TF, sys_pwrite, "pwrite" }, /* 181 */
+ { 6, TD, sys_pread, "pread" }, /* 180 */
+ { 6, TD, sys_pwrite, "pwrite" }, /* 181 */
{ 3, TF, sys_chown, "chown" }, /* 182 */
{ 2, TF, sys_getcwd, "getcwd" }, /* 183 */
{ 2, 0, sys_capget, "capget" }, /* 184 */
@@ -219,12 +219,12 @@
{ 5, 0, sys_putpmsg, "putpmsg" }, /* 189 */
{ 0, TP, sys_vfork, "vfork" }, /* 190 */
{ 2, 0, sys_getrlimit, "getrlimit" }, /* 191 */
- { 6, TD, sys_mmap, "mmap2" }, /* 192 */
+ { 6, TD|TM, sys_mmap_pgoff, "mmap2" }, /* 192 */
{ 4, TF, sys_truncate64, "truncate64" }, /* 193 */
- { 4, TF, sys_ftruncate64, "ftruncate64" }, /* 194 */
+ { 4, TD, sys_ftruncate64, "ftruncate64" }, /* 194 */
{ 2, TF, sys_stat64, "stat64" }, /* 195 */
{ 2, TF, sys_lstat64, "lstat64" }, /* 196 */
- { 2, TF, sys_fstat64, "fstat64" }, /* 197 */
+ { 2, TD, sys_fstat64, "fstat64" }, /* 197 */
{ 3, TF, sys_chown, "lchown32" }, /* 198 */
{ 0, NF, sys_getuid, "getuid32" }, /* 199 */
@@ -235,7 +235,7 @@
{ 2, 0, sys_setregid, "setregid32" }, /* 204 */
{ 2, 0, sys_getgroups32, "getgroups32" }, /* 205 */
{ 2, 0, sys_setgroups32, "setgroups32" }, /* 206 */
- { 3, 0, sys_fchown, "fchown32" }, /* 207 */
+ { 3, TD, sys_fchown, "fchown32" }, /* 207 */
{ 3, 0, sys_setresuid, "setresuid32" }, /* 208 */
{ 3, 0, sys_getresuid, "getresuid32" }, /* 209 */
{ 3, 0, sys_setresgid, "setresgid32" }, /* 210 */
@@ -245,18 +245,18 @@
{ 1, 0, sys_setgid, "setgid32" }, /* 214 */
{ 1, NF, sys_setfsuid, "setfsuid32" }, /* 215 */
{ 1, NF, sys_setfsgid, "setfsgid32" }, /* 216 */
- { 3, 0, sys_getdents64, "getdents64" }, /* 217 */
+ { 3, TD, sys_getdents64, "getdents64" }, /* 217 */
{ 2, TF, sys_pivotroot, "pivot_root" }, /* 218 */
- { 3, 0, sys_mincore, "mincore" }, /* 219 */
- { 3, 0, sys_madvise, "madvise" }, /* 220 */
- { 3, 0, sys_fcntl, "fcntl64" }, /* 221 */
+ { 3, TM, sys_mincore, "mincore" }, /* 219 */
+ { 3, TM, sys_madvise, "madvise" }, /* 220 */
+ { 3, TD, sys_fcntl, "fcntl64" }, /* 221 */
{ 5, 0, NULL, NULL }, /* 222 */
{ 5, 0, NULL, NULL }, /* 223 */
{ 0, 0, sys_gettid, "gettid" }, /* 224 */
- { 5, 0, sys_readahead, "readahead" }, /* 225 */
+ { 5, TD, sys_readahead, "readahead" }, /* 225 */
{ 5, TF, sys_setxattr, "setxattr" }, /* 226 */
{ 5, TF, sys_setxattr, "lsetxattr" }, /* 227 */
- { 5, 0, sys_fsetxattr, "fsetxattr" }, /* 228 */
+ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 228 */
{ 4, TF, sys_getxattr, "getxattr" }, /* 229 */
{ 4, TF, sys_getxattr, "lgetxattr" }, /* 230 */
{ 4, TD, sys_fgetxattr, "fgetxattr" }, /* 231 */
@@ -281,7 +281,7 @@
{ 1, TD, sys_epoll_create, "epoll_create" }, /* 250 */
{ 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 251 */
{ 4, TD, sys_epoll_wait, "epoll_wait" }, /* 252 */
- { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 253 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages"}, /* 253 */
{ 5, 0, NULL, NULL }, /* 254 */
{ 5, 0, NULL, NULL }, /* 255 */
{ 1, 0, sys_set_tid_address, "set_tid_address"}, /* 256 */
@@ -295,7 +295,7 @@
{ 2, 0, sys_clock_getres, "clock_getres" }, /* 264 */
{ 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 265 */
{ 3, TF, sys_statfs64, "statfs64" }, /* 266 */
- { 3, 0, sys_fstatfs64, "fstatfs64" }, /* 267 */
+ { 3, TD, sys_fstatfs64, "fstatfs64" }, /* 267 */
{ 3, TS, sys_tgkill, "tgkill" }, /* 268 */
{ 2, TF, sys_utimes, "utimes" }, /* 269 */
{ 6, TD, sys_fadvise64_64, "fadvise64_64" }, /* 270 */
@@ -347,9 +347,9 @@
{ 0, TD, sys_inotify_init, "inotify_init" }, /* 316 */
{ 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 317 */
{ 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 318 */
- { 6, 0, sys_mbind, "mbind" }, /* 319 */
- { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 320 */
- { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 321 */
+ { 6, TM, sys_mbind, "mbind" }, /* 319 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 320 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 321 */
{ 4, TD|TF, sys_openat, "openat" }, /* 322 */
{ 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 323 */
{ 4, TD|TF, sys_mknodat, "mknodat" }, /* 324 */
@@ -369,10 +369,10 @@
{ 2, 0, sys_set_robust_list, "set_robust_list" }, /* 338 */
{ 3, 0, sys_get_robust_list, "get_robust_list" }, /* 339 */
{ 6, TD, sys_splice, "splice" }, /* 340 */
- { 5, 0, NULL, NULL }, /* 341 */
+ { 6, TD, sys_sync_file_range2, "sync_file_range2"}, /* 341 */
{ 4, TD, sys_tee, "tee" }, /* 342 */
{ 4, TD, sys_vmsplice, "vmsplice" }, /* 343 */
- { 6, 0, sys_move_pages, "move_pages" }, /* 344 */
+ { 6, TM, sys_move_pages, "move_pages" }, /* 344 */
{ 3, 0, sys_getcpu, "getcpu" }, /* 345 */
{ 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 346 */
{ 4, 0, sys_kexec_load, "kexec_load" }, /* 347 */
@@ -406,8 +406,11 @@
{ 2, TD, sys_setns, "setns" }, /* 375 */
{ 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 376 */
{ 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 377 */
- { 5, 0, NULL, NULL }, /* 378 */
- { 5, 0, NULL, NULL }, /* 379 */
+ { 5, 0, sys_kcmp, "kcmp" }, /* 378 */
+ { 3, TD, sys_finit_module, "finit_module" }, /* 379 */
+#ifdef __ARM_EABI__
+# define ARM_LAST_ORDINARY_SYSCALL 379
+#else
{ 5, 0, NULL, NULL }, /* 380 */
{ 5, 0, NULL, NULL }, /* 381 */
{ 5, 0, NULL, NULL }, /* 382 */
@@ -428,11 +431,8 @@
{ 5, 0, NULL, NULL }, /* 397 */
{ 5, 0, NULL, NULL }, /* 398 */
{ 5, 0, NULL, NULL }, /* 399 */
-
-#ifndef __ARM_EABI__
-#if SYS_socket_subcall != 400
- #error fix me
-#endif
+#define SYS_socket_subcall 400
+#include "subcall.h"
{ 6, 0, printargs, "socket_subcall"}, /* 400 */
{ 3, TN, sys_socket, "socket" }, /* 401 */
{ 3, TN, sys_bind, "bind" }, /* 402 */
@@ -450,13 +450,13 @@
{ 5, TN, sys_setsockopt, "setsockopt" }, /* 414 */
{ 5, TN, sys_getsockopt, "getsockopt" }, /* 415 */
{ 3, TN, sys_sendmsg, "sendmsg" }, /* 416 */
- { 5, TN, sys_recvmsg, "recvmsg" }, /* 417 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 417 */
{ 4, TN, sys_accept4, "accept4" }, /* 418 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 419 */
-#if SYS_ipc_subcall != 420
- #error fix me
-#endif
+# if SYS_ipc_subcall != 420
+# error fix me
+# endif
{ 4, 0, printargs, "ipc_subcall" }, /* 420 */
{ 4, TI, sys_semop, "semop" }, /* 421 */
{ 4, TI, sys_semget, "semget" }, /* 422 */
@@ -482,4 +482,22 @@
{ 4, TI, sys_shmdt, "shmdt" }, /* 442 */
{ 4, TI, sys_shmget, "shmget" }, /* 443 */
{ 4, TI, sys_shmctl, "shmctl" }, /* 444 */
-#endif
+# define ARM_LAST_ORDINARY_SYSCALL 444
+#endif /* !EABI */
+
+ /* __ARM_NR_cmpxchg (0x000ffff0).
+ * Remapped by shuffle_scno() to be directly after ordinary syscalls
+ * in this table.
+ */
+ { 5, 0, printargs, "cmpxchg" },
+
+ /* ARM specific syscalls. Encoded with scno 0x000f00xx.
+ * Remapped by shuffle_scno() to be directly after __ARM_NR_cmpxchg.
+ */
+ { 5, 0, NULL, NULL }, /* 0 */
+ { 5, 0, printargs, "breakpoint" }, /* 1 */
+ { 5, 0, printargs, "cacheflush" }, /* 2 */
+ { 5, 0, printargs, "usr26" }, /* 3 */
+ { 5, 0, printargs, "usr32" }, /* 4 */
+ { 5, 0, printargs, "set_tls" }, /* 5 */
+#define ARM_LAST_SPECIAL_SYSCALL 5
diff --git a/linux/dummy.h b/linux/dummy.h
index ce340b9..9d33fe1 100644
--- a/linux/dummy.h
+++ b/linux/dummy.h
@@ -26,22 +26,29 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#ifndef HAVE_STRUCT___OLD_KERNEL_STAT
+#define sys_oldfstat printargs
+#define sys_oldstat printargs
+#endif
+
/* still unfinished */
#define sys_add_key printargs
#define sys_fanotify_init printargs
#define sys_fanotify_mark printargs
+#define sys_finit_module printargs
#define sys_ioperm printargs
#define sys_iopl printargs
#define sys_ioprio_get printargs
#define sys_ioprio_set printargs
+#define sys_kcmp printargs
#define sys_kexec_load printargs
#define sys_keyctl printargs
#define sys_lookup_dcookie printargs
#define sys_name_to_handle_at printargs
#define sys_open_by_handle_at printargs
-#define sys_perf_event_open printargs
#define sys_request_key printargs
#define sys_sync_file_range printargs
+#define sys_sync_file_range2 printargs
#define sys_sysfs printargs
#define sys_vm86old printargs
#define sys_vm86 printargs
@@ -68,9 +75,12 @@
#define sys_geteuid sys_getuid
#define sys_getgid sys_getuid
#define sys_getresgid sys_getresuid
+#define sys_lstat sys_stat
+#define sys_lstat64 sys_stat64
#define sys_mlock sys_munmap
#define sys_mq_unlink sys_chdir
#define sys_munlock sys_munmap
+#define sys_oldlstat sys_oldstat
#define sys_pivotroot sys_link
#define sys_rename sys_link
#define sys_rmdir sys_chdir
@@ -145,15 +155,15 @@
#define sys_sendmsg printargs
#endif
-#ifndef SYS_getpmsg
+/* Who has STREAMS syscalls?
+ * Linux hasn't. Solaris has (had?).
+ * Just in case I miss something, retain in for Sparc.
+ * Note: SYS_get/putpmsg may be defined even though syscalls
+ * return ENOSYS. Can't just check defined(SYS_getpmsg).
+ */
+#if (!defined(SPARC) && !defined(SPARC64)) || !defined(SYS_getpmsg)
#define sys_getpmsg printargs
#endif
-#ifndef SYS_putpmsg
+#if (!defined(SPARC) && !defined(SPARC64)) || !defined(SYS_putpmsg)
#define sys_putpmsg printargs
#endif
-
-#ifndef HAVE_STRUCT___OLD_KERNEL_STAT
-#define sys_oldfstat printargs
-#define sys_oldlstat printargs
-#define sys_oldstat printargs
-#endif
diff --git a/linux/errnoent.h b/linux/errnoent.h
index e43bff5..c2ac683 100644
--- a/linux/errnoent.h
+++ b/linux/errnoent.h
@@ -519,8 +519,8 @@
"ERESTARTNOHAND", /* 514 */
"ENOIOCTLCMD", /* 515 */
"ERESTART_RESTARTBLOCK", /* 516 */
- "ERRNO_517", /* 517 */
- "ERRNO_518", /* 518 */
+ "EPROBE_DEFER", /* 517 */
+ "EOPENSTALE", /* 518 */
"ERRNO_519", /* 519 */
"ERRNO_520", /* 520 */
"EBADHANDLE", /* 521 */
diff --git a/linux/i386/syscallent.h b/linux/i386/syscallent.h
index 4092f2e..480a28e 100644
--- a/linux/i386/syscallent.h
+++ b/linux/i386/syscallent.h
@@ -27,13 +27,13 @@
*/
{ 0, 0, sys_restart_syscall, "restart_syscall" }, /* 0 */
- { 1, TP, sys_exit, "_exit", }, /* 1 */
- { 0, TP, sys_fork, "fork", }, /* 2 */
- { 3, TD, sys_read, "read", }, /* 3 */
- { 3, TD, sys_write, "write", }, /* 4 */
+ { 1, TP, sys_exit, "_exit" }, /* 1 */
+ { 0, TP, sys_fork, "fork" }, /* 2 */
+ { 3, TD, sys_read, "read" }, /* 3 */
+ { 3, TD, sys_write, "write" }, /* 4 */
{ 3, TD|TF, sys_open, "open" }, /* 5 */
{ 1, TD, sys_close, "close" }, /* 6 */
- { 3, TP, sys_waitpid, "waitpid", }, /* 7 */
+ { 3, TP, sys_waitpid, "waitpid" }, /* 7 */
{ 2, TD|TF, sys_creat, "creat" }, /* 8 */
{ 2, TF, sys_link, "link" }, /* 9 */
{ 1, TF, sys_unlink, "unlink" }, /* 10 */
@@ -43,7 +43,7 @@
{ 3, TF, sys_mknod, "mknod" }, /* 14 */
{ 2, TF, sys_chmod, "chmod" }, /* 15 */
{ 3, TF, sys_chown, "lchown" }, /* 16 */
- { 0, 0, sys_break, "break" }, /* 17 */
+ { 0, TM, sys_break, "break" }, /* 17 */
{ 2, TF, sys_oldstat, "oldstat" }, /* 18 */
{ 3, TD, sys_lseek, "lseek" }, /* 19 */
{ 0, 0, sys_getpid, "getpid" }, /* 20 */
@@ -71,7 +71,7 @@
{ 1, TD, sys_pipe, "pipe" }, /* 42 */
{ 1, 0, sys_times, "times" }, /* 43 */
{ 0, 0, sys_prof, "prof" }, /* 44 */
- { 1, 0, sys_brk, "brk" }, /* 45 */
+ { 1, TM, sys_brk, "brk" }, /* 45 */
{ 1, 0, sys_setgid, "setgid" }, /* 46 */
{ 0, NF, sys_getgid, "getgid" }, /* 47 */
{ 3, TS, sys_signal, "signal" }, /* 48 */
@@ -116,8 +116,8 @@
{ 2, TF, sys_swapon, "swapon" }, /* 87 */
{ 4, 0, sys_reboot, "reboot" }, /* 88 */
{ 3, TD, sys_readdir, "readdir" }, /* 89 */
- { 6, TD, sys_old_mmap, "old_mmap" }, /* 90 */
- { 2, 0, sys_munmap, "munmap" }, /* 91 */
+ { 6, TD|TM, sys_old_mmap, "old_mmap" }, /* 90 */
+ { 2, TM, sys_munmap, "munmap" }, /* 91 */
{ 2, TF, sys_truncate, "truncate" }, /* 92 */
{ 2, TD, sys_ftruncate, "ftruncate" }, /* 93 */
{ 2, TD, sys_fchmod, "fchmod" }, /* 94 */
@@ -140,10 +140,10 @@
{ 0, 0, sys_vhangup, "vhangup" }, /* 111 */
{ 0, 0, sys_idle, "idle" }, /* 112 */
{ 1, 0, sys_vm86old, "vm86old" }, /* 113 */
- { 4, TP, sys_wait4, "wait4", }, /* 114 */
+ { 4, TP, sys_wait4, "wait4" }, /* 114 */
{ 1, TF, sys_swapoff, "swapoff" }, /* 115 */
{ 1, 0, sys_sysinfo, "sysinfo" }, /* 116 */
- { 6, TI, sys_ipc, "ipc", }, /* 117 */
+ { 6, TI, sys_ipc, "ipc" }, /* 117 */
{ 1, TD, sys_fsync, "fsync" }, /* 118 */
{ 0, TS, sys_sigreturn, "sigreturn" }, /* 119 */
{ 5, TP, sys_clone, "clone" }, /* 120 */
@@ -151,17 +151,17 @@
{ 1, 0, sys_uname, "uname" }, /* 122 */
{ 3, 0, sys_modify_ldt, "modify_ldt" }, /* 123 */
{ 1, 0, sys_adjtimex, "adjtimex" }, /* 124 */
- { 3, 0, sys_mprotect, "mprotect" }, /* 125 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 125 */
{ 3, TS, sys_sigprocmask, "sigprocmask" }, /* 126 */
{ 2, 0, sys_create_module, "create_module" }, /* 127 */
{ 3, 0, sys_init_module, "init_module" }, /* 128 */
{ 2, 0, sys_delete_module, "delete_module" }, /* 129 */
{ 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 130 */
- { 4, 0, sys_quotactl, "quotactl" }, /* 131 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 131 */
{ 1, 0, sys_getpgid, "getpgid" }, /* 132 */
{ 1, TD, sys_fchdir, "fchdir" }, /* 133 */
{ 0, 0, sys_bdflush, "bdflush" }, /* 134 */
- { 3, 0, sys_sysfs, "sysfs", }, /* 135 */
+ { 3, 0, sys_sysfs, "sysfs" }, /* 135 */
{ 1, 0, sys_personality, "personality" }, /* 136 */
{ 5, 0, sys_afs_syscall, "afs_syscall" }, /* 137 */
{ 1, NF, sys_setfsuid, "setfsuid" }, /* 138 */
@@ -170,16 +170,16 @@
{ 3, TD, sys_getdents, "getdents" }, /* 141 */
{ 5, TD, sys_select, "select" }, /* 142 */
{ 2, TD, sys_flock, "flock" }, /* 143 */
- { 3, 0, sys_msync, "msync" }, /* 144 */
- { 3, TD, sys_readv, "readv", }, /* 145 */
- { 3, TD, sys_writev, "writev", }, /* 146 */
+ { 3, TM, sys_msync, "msync" }, /* 144 */
+ { 3, TD, sys_readv, "readv" }, /* 145 */
+ { 3, TD, sys_writev, "writev" }, /* 146 */
{ 1, 0, sys_getsid, "getsid" }, /* 147 */
{ 1, TD, sys_fdatasync, "fdatasync" }, /* 148 */
{ 1, 0, sys_sysctl, "_sysctl" }, /* 149 */
- { 2, 0, sys_mlock, "mlock" }, /* 150 */
- { 2, 0, sys_munlock, "munlock" }, /* 151 */
- { 1, 0, sys_mlockall, "mlockall" }, /* 152 */
- { 0, 0, sys_munlockall, "munlockall" }, /* 153 */
+ { 2, TM, sys_mlock, "mlock" }, /* 150 */
+ { 2, TM, sys_munlock, "munlock" }, /* 151 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 152 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 153 */
{ 0, 0, sys_sched_setparam, "sched_setparam"}, /* 154 */
{ 2, 0, sys_sched_getparam, "sched_getparam"}, /* 155 */
{ 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 156 */
@@ -189,7 +189,7 @@
{ 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 160 */
{ 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 161 */
{ 2, 0, sys_nanosleep, "nanosleep" }, /* 162 */
- { 5, 0, sys_mremap, "mremap" }, /* 163 */
+ { 5, TM, sys_mremap, "mremap" }, /* 163 */
{ 3, 0, sys_setresuid, "setresuid" }, /* 164 */
{ 3, 0, sys_getresuid, "getresuid" }, /* 165 */
{ 5, 0, sys_vm86, "vm86" }, /* 166 */
@@ -207,8 +207,8 @@
{ 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"}, /* 178 */
{ 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 179 */
- { 5, TD, sys_pread, "pread64", }, /* 180 */
- { 5, TD, sys_pwrite, "pwrite64", }, /* 181 */
+ { 5, TD, sys_pread, "pread64" }, /* 180 */
+ { 5, TD, sys_pwrite, "pwrite64" }, /* 181 */
{ 3, TF, sys_chown, "chown" }, /* 182 */
{ 2, TF, sys_getcwd, "getcwd" }, /* 183 */
{ 2, 0, sys_capget, "capget" }, /* 184 */
@@ -219,7 +219,7 @@
{ 5, 0, sys_putpmsg, "putpmsg" }, /* 189 */
{ 0, TP, sys_vfork, "vfork" }, /* 190 */
{ 2, 0, sys_getrlimit, "getrlimit" }, /* 191 */
- { 6, TD, sys_mmap, "mmap2" }, /* 192 */
+ { 6, TD|TM, sys_mmap_pgoff, "mmap2" }, /* 192 */
{ 3, TF, sys_truncate64, "truncate64" }, /* 193 */
{ 3, TD, sys_ftruncate64, "ftruncate64" }, /* 194 */
{ 2, TF, sys_stat64, "stat64" }, /* 195 */
@@ -246,8 +246,8 @@
{ 1, NF, sys_setfsuid, "setfsuid32" }, /* 215 */
{ 1, NF, sys_setfsgid, "setfsgid32" }, /* 216 */
{ 2, TF, sys_pivotroot, "pivot_root" }, /* 217 */
- { 3, 0, sys_mincore, "mincore" }, /* 218 */
- { 3, 0, sys_madvise, "madvise" }, /* 219 */
+ { 3, TM, sys_mincore, "mincore" }, /* 218 */
+ { 3, TM, sys_madvise, "madvise" }, /* 219 */
{ 3, TD, sys_getdents64, "getdents64" }, /* 220 */
{ 3, TD, sys_fcntl, "fcntl64" }, /* 221 */
{ 6, 0, NULL, NULL }, /* 222 */
@@ -285,7 +285,7 @@
{ 1, TD, sys_epoll_create, "epoll_create" }, /* 254 */
{ 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 255 */
{ 4, TD, sys_epoll_wait, "epoll_wait" }, /* 256 */
- { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 257 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages"}, /* 257 */
{ 1, 0, sys_set_tid_address, "set_tid_address"}, /* 258 */
{ 3, 0, sys_timer_create, "timer_create" }, /* 259 */
{ 4, 0, sys_timer_settime, "timer_settime" }, /* 260 */
@@ -302,9 +302,9 @@
{ 2, TF, sys_utimes, "utimes" }, /* 271 */
{ 6, TD, sys_fadvise64_64, "fadvise64_64" }, /* 272 */
{ 5, 0, sys_vserver, "vserver" }, /* 273 */
- { 6, 0, sys_mbind, "mbind" }, /* 274 */
- { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 275 */
- { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 276 */
+ { 6, TM, sys_mbind, "mbind" }, /* 274 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 275 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 276 */
{ 4, 0, sys_mq_open, "mq_open" }, /* 277 */
{ 1, 0, sys_mq_unlink, "mq_unlink" }, /* 278 */
{ 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 279 */
@@ -312,7 +312,7 @@
{ 2, 0, sys_mq_notify, "mq_notify" }, /* 281 */
{ 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 282 */
{ 4, 0, sys_kexec_load, "kexec_load" }, /* 283 */
- { 5, TP, sys_waitid, "waitid", }, /* 284 */
+ { 5, TP, sys_waitid, "waitid" }, /* 284 */
{ 6, 0, NULL, NULL }, /* 285 */
{ 5, 0, sys_add_key, "add_key" }, /* 286 */
{ 4, 0, sys_request_key, "request_key" }, /* 287 */
@@ -322,7 +322,7 @@
{ 0, TD, sys_inotify_init, "inotify_init" }, /* 291 */
{ 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 292 */
{ 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 293 */
- { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 294 */
+ { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 294 */
{ 4, TD|TF, sys_openat, "openat" }, /* 295 */
{ 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 296 */
{ 4, TD|TF, sys_mknodat, "mknodat" }, /* 297 */
@@ -342,10 +342,10 @@
{ 2, 0, sys_set_robust_list, "set_robust_list" }, /* 311 */
{ 3, 0, sys_get_robust_list, "get_robust_list" }, /* 312 */
{ 6, TD, sys_splice, "splice" }, /* 313 */
- { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 314 */
+ { 6, TD, sys_sync_file_range, "sync_file_range" }, /* 314 */
{ 4, TD, sys_tee, "tee" }, /* 315 */
{ 4, TD, sys_vmsplice, "vmsplice" }, /* 316 */
- { 6, 0, sys_move_pages, "move_pages" }, /* 317 */
+ { 6, TM, sys_move_pages, "move_pages" }, /* 317 */
{ 3, 0, sys_getcpu, "getcpu" }, /* 318 */
{ 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 319 */
{ 4, TD|TF, sys_utimensat, "utimensat" }, /* 320 */
@@ -377,8 +377,8 @@
{ 2, TD, sys_setns, "setns" }, /* 346 */
{ 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 347 */
{ 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 348 */
- { 5, 0, NULL, NULL }, /* 349 */
- { 5, 0, NULL, NULL }, /* 350 */
+ { 5, 0, sys_kcmp, "kcmp" }, /* 349 */
+ { 3, TD, sys_finit_module, "finit_module" }, /* 350 */
{ 5, 0, NULL, NULL }, /* 351 */
{ 5, 0, NULL, NULL }, /* 352 */
{ 5, 0, NULL, NULL }, /* 353 */
@@ -428,10 +428,8 @@
{ 5, 0, NULL, NULL }, /* 397 */
{ 5, 0, NULL, NULL }, /* 398 */
{ 5, 0, NULL, NULL }, /* 399 */
-
-#if SYS_socket_subcall != 400
- #error fix me
-#endif
+#define SYS_socket_subcall 400
+#include "subcall.h"
{ 6, 0, printargs, "socket_subcall"}, /* 400 */
{ 3, TN, sys_socket, "socket" }, /* 401 */
{ 3, TN, sys_bind, "bind" }, /* 402 */
@@ -441,15 +439,15 @@
{ 3, TN, sys_getsockname, "getsockname" }, /* 406 */
{ 3, TN, sys_getpeername, "getpeername" }, /* 407 */
{ 4, TN, sys_socketpair, "socketpair" }, /* 408 */
- { 4, TN, sys_send, "send", }, /* 409 */
- { 4, TN, sys_recv, "recv", }, /* 410 */
- { 6, TN, sys_sendto, "sendto", }, /* 411 */
- { 6, TN, sys_recvfrom, "recvfrom", }, /* 412 */
+ { 4, TN, sys_send, "send" }, /* 409 */
+ { 4, TN, sys_recv, "recv" }, /* 410 */
+ { 6, TN, sys_sendto, "sendto" }, /* 411 */
+ { 6, TN, sys_recvfrom, "recvfrom" }, /* 412 */
{ 2, TN, sys_shutdown, "shutdown" }, /* 413 */
{ 5, TN, sys_setsockopt, "setsockopt" }, /* 414 */
{ 5, TN, sys_getsockopt, "getsockopt" }, /* 415 */
{ 3, TN, sys_sendmsg, "sendmsg" }, /* 416 */
- { 5, TN, sys_recvmsg, "recvmsg" }, /* 417 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 417 */
{ 4, TN, sys_accept4, "accept4" }, /* 418 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 419 */
diff --git a/linux/ioctlent-filter.awk b/linux/ioctlent-filter.awk
new file mode 100644
index 0000000..181c4bf
--- /dev/null
+++ b/linux/ioctlent-filter.awk
@@ -0,0 +1,19 @@
+#!/bin/awk -f
+# Filter out redundant "*32" symbols.
+
+BEGIN {
+ s=""
+ c=""
+}
+
+NF == 3 && $2 ~ /^"[^",]*",$/ {
+ if ($2 == s && $3 == c)
+ next
+ s = $2
+ sub(/",$/, "32\",", s)
+ c = $3
+}
+
+{
+ print
+}
diff --git a/linux/ioctlent.sh b/linux/ioctlent.sh
index 9bcff5f..c483ba8 100755
--- a/linux/ioctlent.sh
+++ b/linux/ioctlent.sh
@@ -47,7 +47,7 @@
# Build the list of all ioctls
regexp='^[[:space:]]*#[[:space:]]*define[[:space:]]\+[A-Z][A-Z0-9_]*[[:space:]]\+0x'"$type"'..\>'
- (cd "$dir" && grep "$regexp" "$@" /dev/null 2>/dev/null) |
+ (cd "$dir" && for f; do grep "$regexp" "$f" "uapi/$f" 2>/dev/null; done) |
sed -ne "s,$asm/,asm/,g"'
s/^\(.*\):[[:space:]]*#[[:space:]]*define[[:space:]]*\([A-Z0-9_]*\)[[:space:]]*\(0x'"$type"'..\).*/ { "\1", "\2", \3 },/p' \
>> ioctls.h
@@ -94,8 +94,11 @@
-e 's/^\(.*\):[[:space:]]*#[[:space:]]*define[[:space:]]*\([A-Z0-9_]*\)[[:space:]]*_S\?I.*(\([^[,]*\)[[:space:]]*,[[:space:]]*\([^,)]*\).*/ { "\1", "\2", _IOC(_IOC_NONE,\3,\4,0) },/p' \
>> ioctls.h
-# Sort and drop dups?
-# sort -u <ioctls.h >ioctls1.h && mv ioctls1.h ioctls.h
+# Strip uapi/ prefix
+sed -i 's|"uapi/|"|' ioctls.h
+
+# Sort and drop dups
+sort -u -o ioctls.h ioctls.h
> ioctldefs.h
diff --git a/linux/mips/syscallent-compat.h b/linux/mips/syscallent-compat.h
new file mode 100644
index 0000000..696108f
--- /dev/null
+++ b/linux/mips/syscallent-compat.h
@@ -0,0 +1,870 @@
+ { 0, 0, printargs, "svr4_syscall" }, /* 000 */
+ { 0, 0, printargs, "svr4_exit" }, /* 001 */
+ { 0, 0, printargs, "svr4_fork" }, /* 002 */
+ { 0, 0, printargs, "svr4_read" }, /* 003 */
+ { 0, 0, printargs, "svr4_write" }, /* 004 */
+ { 0, 0, printargs, "svr4_open" }, /* 005 */
+ { 0, 0, printargs, "svr4_close" }, /* 006 */
+ { 0, 0, printargs, "svr4_wait" }, /* 007 */
+ { 0, 0, printargs, "svr4_creat" }, /* 008 */
+ { 0, 0, printargs, "svr4_link" }, /* 009 */
+ { 0, 0, printargs, "svr4_unlink" }, /* 010 */
+ { 0, 0, printargs, "svr4_exec" }, /* 011 */
+ { 0, 0, printargs, "svr4_chdir" }, /* 012 */
+ { 0, 0, printargs, "svr4_gtime" }, /* 013 */
+ { 0, 0, printargs, "svr4_mknod" }, /* 014 */
+ { 0, 0, printargs, "svr4_chmod" }, /* 015 */
+ { 0, 0, printargs, "svr4_chown" }, /* 016 */
+ { 0, TM, printargs, "svr4_sbreak" }, /* 017 */
+ { 0, 0, printargs, "svr4_stat" }, /* 018 */
+ { 0, 0, printargs, "svr4_lseek" }, /* 019 */
+ { 0, 0, printargs, "svr4_getpid" }, /* 020 */
+ { 0, 0, printargs, "svr4_mount" }, /* 021 */
+ { 0, 0, printargs, "svr4_umount" }, /* 022 */
+ { 0, 0, printargs, "svr4_setuid" }, /* 023 */
+ { 0, 0, printargs, "svr4_getuid" }, /* 024 */
+ { 0, 0, printargs, "svr4_stime" }, /* 025 */
+ { 0, 0, printargs, "svr4_ptrace" }, /* 026 */
+ { 0, 0, printargs, "svr4_alarm" }, /* 027 */
+ { 0, 0, printargs, "svr4_fstat" }, /* 028 */
+ { 0, 0, printargs, "svr4_pause" }, /* 029 */
+ { 0, 0, printargs, "svr4_utime" }, /* 030 */
+ { 0, 0, printargs, "svr4_stty" }, /* 031 */
+ { 0, 0, printargs, "svr4_gtty" }, /* 032 */
+ { 0, 0, printargs, "svr4_access" }, /* 033 */
+ { 0, 0, printargs, "svr4_nice" }, /* 034 */
+ { 0, 0, printargs, "svr4_statfs" }, /* 035 */
+ { 0, 0, printargs, "svr4_sync" }, /* 036 */
+ { 0, 0, printargs, "svr4_kill" }, /* 037 */
+ { 0, 0, printargs, "svr4_fstatfs" }, /* 038 */
+ { 0, 0, printargs, "svr4_setpgrp" }, /* 039 */
+ { 0, 0, printargs, "svr4_cxenix" }, /* 040 */
+ { 0, 0, printargs, "svr4_dup" }, /* 041 */
+ { 0, 0, printargs, "svr4_pipe" }, /* 042 */
+ { 0, 0, printargs, "svr4_times" }, /* 043 */
+ { 0, 0, printargs, "svr4_profil" }, /* 044 */
+ { 0, 0, printargs, "svr4_plock" }, /* 045 */
+ { 0, 0, printargs, "svr4_setgid" }, /* 046 */
+ { 0, 0, printargs, "svr4_getgid" }, /* 047 */
+ { 0, 0, printargs, "svr4_sig" }, /* 048 */
+ { 0, 0, printargs, "svr4_msgsys" }, /* 049 */
+ { 0, 0, printargs, "svr4_sysmips" }, /* 050 */
+ { 0, 0, printargs, "svr4_sysacct" }, /* 051 */
+ { 0, 0, printargs, "svr4_shmsys" }, /* 052 */
+ { 0, 0, printargs, "svr4_semsys" }, /* 053 */
+ { 0, 0, printargs, "svr4_ioctl" }, /* 054 */
+ { 0, 0, printargs, "svr4_uadmin" }, /* 055 */
+ { 0, 0, printargs, "svr4_exch" }, /* 056 */
+ { 0, 0, printargs, "svr4_utssys" }, /* 057 */
+ { 0, 0, printargs, "svr4_fsync" }, /* 058 */
+ { 0, 0, printargs, "svr4_exece" }, /* 059 */
+ { 0, 0, printargs, "svr4_umask" }, /* 060 */
+ { 0, 0, printargs, "svr4_chroot" }, /* 061 */
+ { 0, 0, printargs, "svr4_fcntl" }, /* 062 */
+ { 0, 0, printargs, "svr4_ulimit" }, /* 063 */
+ { 0, 0, NULL, NULL }, /* 064 */
+ { 0, 0, NULL, NULL }, /* 065 */
+ { 0, 0, NULL, NULL }, /* 066 */
+ { 0, 0, NULL, NULL }, /* 067 */
+ { 0, 0, NULL, NULL }, /* 068 */
+ { 0, 0, NULL, NULL }, /* 069 */
+ { 0, 0, printargs, "svr4_advfs" }, /* 070 */
+ { 0, 0, printargs, "svr4_unadvfs" }, /* 071 */
+ { 0, 0, NULL, NULL }, /* 072 */
+ { 0, 0, NULL, NULL }, /* 073 */
+ { 0, 0, printargs, "svr4_rfstart" }, /* 074 */
+ { 0, 0, NULL, NULL }, /* 075 */
+ { 0, 0, printargs, "svr4_rdebug" }, /* 076 */
+ { 0, 0, printargs, "svr4_rfstop" }, /* 077 */
+ { 0, 0, printargs, "svr4_rfsys" }, /* 078 */
+ { 0, 0, printargs, "svr4_rmdir" }, /* 079 */
+ { 0, 0, printargs, "svr4_mkdir" }, /* 080 */
+ { 0, 0, printargs, "svr4_getdents" }, /* 081 */
+ { 0, 0, printargs, "svr4_libattach" }, /* 082 */
+ { 0, 0, printargs, "svr4_libdetach" }, /* 083 */
+ { 0, 0, printargs, "svr4_sysfs" }, /* 084 */
+ { 0, 0, printargs, "svr4_getmsg" }, /* 085 */
+ { 0, 0, printargs, "svr4_putmsg" }, /* 086 */
+ { 0, 0, printargs, "svr4_poll" }, /* 087 */
+ { 0, 0, printargs, "svr4_lstat" }, /* 088 */
+ { 0, 0, printargs, "svr4_symlink" }, /* 089 */
+ { 0, 0, printargs, "svr4_readlink" }, /* 090 */
+ { 0, 0, printargs, "svr4_setgroups" }, /* 091 */
+ { 0, 0, printargs, "svr4_getgroups" }, /* 092 */
+ { 0, 0, printargs, "svr4_fchmod" }, /* 093 */
+ { 0, 0, printargs, "svr4_fchown" }, /* 094 */
+ { 0, 0, printargs, "svr4_sigprocmask" }, /* 095 */
+ { 0, 0, printargs, "svr4_sigsuspend" }, /* 096 */
+ { 0, 0, printargs, "svr4_sigaltstack" }, /* 097 */
+ { 0, 0, printargs, "svr4_sigaction" }, /* 098 */
+ { 0, 0, printargs, "svr4_sigpending" }, /* 099 */
+ { 0, 0, printargs, "svr4_setcontext" }, /* 0100 */
+ { 0, 0, printargs, "svr4_evsys" }, /* 0101 */
+ { 0, 0, printargs, "svr4_evtrapret" }, /* 0102 */
+ { 0, 0, printargs, "svr4_statvfs" }, /* 0103 */
+ { 0, 0, printargs, "svr4_fstatvfs" }, /* 0104 */
+ { 0, 0, NULL, NULL }, /* 105 */
+ { 0, 0, printargs, "svr4_nfssys" }, /* 0106 */
+ { 0, 0, printargs, "svr4_waitid" }, /* 0107 */
+ { 0, 0, printargs, "svr4_sigsendset" }, /* 0108 */
+ { 0, 0, printargs, "svr4_hrtsys" }, /* 0109 */
+ { 0, 0, printargs, "svr4_acancel" }, /* 0110 */
+ { 0, 0, printargs, "svr4_async" }, /* 0111 */
+ { 0, 0, printargs, "svr4_priocntlset" }, /* 0112 */
+ { 0, 0, printargs, "svr4_pathconf" }, /* 0113 */
+ { 0, TM, printargs, "svr4_mincore" }, /* 0114 */
+ { 0, TD|TM, printargs, "svr4_mmap" }, /* 0115 */
+ { 0, TM, printargs, "svr4_mprotect" }, /* 0116 */
+ { 0, TM, printargs, "svr4_munmap" }, /* 0117 */
+ { 0, 0, printargs, "svr4_fpathconf" }, /* 0118 */
+ { 0, 0, printargs, "svr4_vfork" }, /* 0119 */
+ { 0, 0, printargs, "svr4_fchdir" }, /* 0120 */
+ { 0, 0, printargs, "svr4_readv" }, /* 0121 */
+ { 0, 0, printargs, "svr4_writev" }, /* 0122 */
+ { 0, 0, printargs, "svr4_xstat" }, /* 0123 */
+ { 0, 0, printargs, "svr4_lxstat" }, /* 0124 */
+ { 0, 0, printargs, "svr4_fxstat" }, /* 0125 */
+ { 0, 0, printargs, "svr4_xmknod" }, /* 0126 */
+ { 0, 0, printargs, "svr4_clocal" }, /* 0127 */
+ { 0, 0, printargs, "svr4_setrlimit" }, /* 0128 */
+ { 0, 0, printargs, "svr4_getrlimit" }, /* 0129 */
+ { 0, 0, printargs, "svr4_lchown" }, /* 0130 */
+ { 0, 0, printargs, "svr4_memcntl" }, /* 0131 */
+ { 0, 0, printargs, "svr4_getpmsg" }, /* 0132 */
+ { 0, 0, printargs, "svr4_putpmsg" }, /* 0133 */
+ { 0, 0, printargs, "svr4_rename" }, /* 0134 */
+ { 0, 0, printargs, "svr4_nuname" }, /* 0135 */
+ { 0, 0, printargs, "svr4_setegid" }, /* 0136 */
+ { 0, 0, printargs, "svr4_sysconf" }, /* 0137 */
+ { 0, 0, printargs, "svr4_adjtime" }, /* 0138 */
+ { 0, 0, printargs, "svr4_sysinfo" }, /* 0139 */
+ { 0, 0, NULL, NULL }, /* 140 */
+ { 0, 0, printargs, "svr4_seteuid" }, /* 0141 */
+ { 0, 0, printargs, "svr4_PYRAMID_statis" }, /* 0142 */
+ { 0, 0, printargs, "svr4_PYRAMID_tuning" }, /* 0143 */
+ { 0, 0, printargs, "svr4_PYRAMID_forcerr" }, /* 0144 */
+ { 0, 0, printargs, "svr4_PYRAMID_mpcntl" }, /* 0145 */
+ { 0, 0, NULL, NULL }, /* 146 */
+ { 0, 0, NULL, NULL }, /* 147 */
+ { 0, 0, NULL, NULL }, /* 148 */
+ { 0, 0, NULL, NULL }, /* 149 */
+ { 0, 0, NULL, NULL }, /* 150 */
+ { 0, 0, NULL, NULL }, /* 151 */
+ { 0, 0, NULL, NULL }, /* 152 */
+ { 0, 0, NULL, NULL }, /* 153 */
+ { 0, 0, NULL, NULL }, /* 154 */
+ { 0, 0, NULL, NULL }, /* 155 */
+ { 0, 0, NULL, NULL }, /* 156 */
+ { 0, 0, NULL, NULL }, /* 157 */
+ { 0, 0, NULL, NULL }, /* 158 */
+ { 0, 0, NULL, NULL }, /* 159 */
+ { 0, 0, NULL, NULL }, /* 160 */
+ { 0, 0, NULL, NULL }, /* 161 */
+ { 0, 0, NULL, NULL }, /* 162 */
+ { 0, 0, NULL, NULL }, /* 163 */
+ { 0, 0, NULL, NULL }, /* 164 */
+ { 0, 0, NULL, NULL }, /* 165 */
+ { 0, 0, NULL, NULL }, /* 166 */
+ { 0, 0, NULL, NULL }, /* 167 */
+ { 0, 0, NULL, NULL }, /* 168 */
+ { 0, 0, NULL, NULL }, /* 169 */
+ { 0, 0, NULL, NULL }, /* 170 */
+ { 0, 0, NULL, NULL }, /* 171 */
+ { 0, 0, NULL, NULL }, /* 172 */
+ { 0, 0, NULL, NULL }, /* 173 */
+ { 0, 0, NULL, NULL }, /* 174 */
+ { 0, 0, NULL, NULL }, /* 175 */
+ { 0, 0, NULL, NULL }, /* 176 */
+ { 0, 0, NULL, NULL }, /* 177 */
+ { 0, 0, NULL, NULL }, /* 178 */
+ { 0, 0, NULL, NULL }, /* 179 */
+ { 0, 0, NULL, NULL }, /* 180 */
+ { 0, 0, NULL, NULL }, /* 181 */
+ { 0, 0, NULL, NULL }, /* 182 */
+ { 0, 0, NULL, NULL }, /* 183 */
+ { 0, 0, NULL, NULL }, /* 184 */
+ { 0, 0, NULL, NULL }, /* 185 */
+ { 0, 0, NULL, NULL }, /* 186 */
+ { 0, 0, NULL, NULL }, /* 187 */
+ { 0, 0, NULL, NULL }, /* 188 */
+ { 0, 0, NULL, NULL }, /* 189 */
+ { 0, 0, NULL, NULL }, /* 190 */
+ { 0, 0, NULL, NULL }, /* 191 */
+ { 0, 0, NULL, NULL }, /* 192 */
+ { 0, 0, NULL, NULL }, /* 193 */
+ { 0, 0, NULL, NULL }, /* 194 */
+ { 0, 0, NULL, NULL }, /* 195 */
+ { 0, 0, NULL, NULL }, /* 196 */
+ { 0, 0, NULL, NULL }, /* 197 */
+ { 0, 0, NULL, NULL }, /* 198 */
+ { 0, 0, NULL, NULL }, /* 199 */
+ { 0, 0, NULL, NULL }, /* 200 */
+ { 0, 0, printargs, "svr4_aread" }, /* 0201 */
+ { 0, 0, printargs, "svr4_awrite" }, /* 0202 */
+ { 0, 0, printargs, "svr4_listio" }, /* 0203 */
+ { 0, 0, printargs, "svr4_mips_acancel" }, /* 0204 */
+ { 0, 0, printargs, "svr4_astatus" }, /* 0205 */
+ { 0, 0, printargs, "svr4_await" }, /* 0206 */
+ { 0, 0, printargs, "svr4_areadv" }, /* 0207 */
+ { 0, 0, printargs, "svr4_awritev" }, /* 0208 */
+
+ [209 ... 999] = { }, /* 999 */ /* end of SVR4 */
+
+ { 0, 0, printargs, "sysv_syscall" }, /* 1000 */ /* start of SYSV */
+ { 0, 0, printargs, "sysv_exit" }, /* 1001 */
+ { 0, 0, printargs, "sysv_fork" }, /* 1002 */
+ { 0, 0, printargs, "sysv_read" }, /* 1003 */
+ { 0, 0, printargs, "sysv_write" }, /* 1004 */
+ { 0, 0, printargs, "sysv_open" }, /* 1005 */
+ { 0, 0, printargs, "sysv_close" }, /* 1006 */
+ { 0, 0, printargs, "sysv_wait" }, /* 1007 */
+ { 0, 0, printargs, "sysv_creat" }, /* 1008 */
+ { 0, 0, printargs, "sysv_link" }, /* 1009 */
+ { 0, 0, printargs, "sysv_unlink" }, /* 1010 */
+ { 0, 0, printargs, "sysv_execv" }, /* 1011 */
+ { 0, 0, printargs, "sysv_chdir" }, /* 1012 */
+ { 0, 0, printargs, "sysv_time" }, /* 1013 */
+ { 0, 0, printargs, "sysv_mknod" }, /* 1014 */
+ { 0, 0, printargs, "sysv_chmod" }, /* 1015 */
+ { 0, 0, printargs, "sysv_chown" }, /* 1016 */
+ { 0, TM, printargs, "sysv_brk" }, /* 1017 */
+ { 0, 0, printargs, "sysv_stat" }, /* 1018 */
+ { 0, 0, printargs, "sysv_lseek" }, /* 1019 */
+ { 0, 0, printargs, "sysv_getpid" }, /* 1020 */
+ { 0, 0, printargs, "sysv_mount" }, /* 1021 */
+ { 0, 0, printargs, "sysv_umount" }, /* 1022 */
+ { 0, 0, printargs, "sysv_setuid" }, /* 1023 */
+ { 0, 0, printargs, "sysv_getuid" }, /* 1024 */
+ { 0, 0, printargs, "sysv_stime" }, /* 1025 */
+ { 0, 0, printargs, "sysv_ptrace" }, /* 1026 */
+ { 0, 0, printargs, "sysv_alarm" }, /* 1027 */
+ { 0, 0, printargs, "sysv_fstat" }, /* 1028 */
+ { 0, 0, printargs, "sysv_pause" }, /* 1029 */
+ { 0, 0, printargs, "sysv_utime" }, /* 1030 */
+ { 0, 0, printargs, "sysv_stty" }, /* 1031 */
+ { 0, 0, printargs, "sysv_gtty" }, /* 1032 */
+ { 0, 0, printargs, "sysv_access" }, /* 1033 */
+ { 0, 0, printargs, "sysv_nice" }, /* 1034 */
+ { 0, 0, printargs, "sysv_statfs" }, /* 1035 */
+ { 0, 0, printargs, "sysv_sync" }, /* 1036 */
+ { 0, 0, printargs, "sysv_kill" }, /* 1037 */
+ { 0, 0, printargs, "sysv_fstatfs" }, /* 1038 */
+ { 0, 0, printargs, "sysv_setpgrp" }, /* 1039 */
+ { 0, 0, printargs, "sysv_syssgi" }, /* 1040 */
+ { 0, 0, printargs, "sysv_dup" }, /* 1041 */
+ { 0, 0, printargs, "sysv_pipe" }, /* 1042 */
+ { 0, 0, printargs, "sysv_times" }, /* 1043 */
+ { 0, 0, printargs, "sysv_profil" }, /* 1044 */
+ { 0, 0, printargs, "sysv_plock" }, /* 1045 */
+ { 0, 0, printargs, "sysv_setgid" }, /* 1046 */
+ { 0, 0, printargs, "sysv_getgid" }, /* 1047 */
+ { 0, 0, printargs, "sysv_sig" }, /* 1048 */
+ { 0, 0, printargs, "sysv_msgsys" }, /* 1049 */
+ { 0, 0, printargs, "sysv_sysmips" }, /* 1050 */
+ { 0, 0, printargs, "sysv_acct" }, /* 1051 */
+ { 0, 0, printargs, "sysv_shmsys" }, /* 1052 */
+ { 0, 0, printargs, "sysv_semsys" }, /* 1053 */
+ { 0, 0, printargs, "sysv_ioctl" }, /* 1054 */
+ { 0, 0, printargs, "sysv_uadmin" }, /* 1055 */
+ { 0, 0, printargs, "sysv_sysmp" }, /* 1056 */
+ { 0, 0, printargs, "sysv_utssys" }, /* 1057 */
+ { 0, 0, NULL, NULL }, /* 1058 */
+ { 0, 0, printargs, "sysv_execve" }, /* 1059 */
+ { 0, 0, printargs, "sysv_umask" }, /* 1060 */
+ { 0, 0, printargs, "sysv_chroot" }, /* 1061 */
+ { 0, 0, printargs, "sysv_fcntl" }, /* 1062 */
+ { 0, 0, printargs, "sysv_ulimit" }, /* 1063 */
+ { 0, 0, NULL, NULL }, /* 1064 */
+ { 0, 0, NULL, NULL }, /* 1065 */
+ { 0, 0, NULL, NULL }, /* 1066 */
+ { 0, 0, NULL, NULL }, /* 1067 */
+ { 0, 0, NULL, NULL }, /* 1068 */
+ { 0, 0, NULL, NULL }, /* 1069 */
+ { 0, 0, printargs, "sysv_advfs" }, /* 1070 */
+ { 0, 0, printargs, "sysv_unadvfs" }, /* 1071 */
+ { 0, 0, printargs, "sysv_rmount" }, /* 1072 */
+ { 0, 0, printargs, "sysv_rumount" }, /* 1073 */
+ { 0, 0, printargs, "sysv_rfstart" }, /* 1074 */
+ { 0, 0, printargs, "sysv_getrlimit64" }, /* 1075 */
+ { 0, 0, printargs, "sysv_setrlimit64" }, /* 1076 */
+ { 0, 0, printargs, "sysv_nanosleep" }, /* 1077 */
+ { 0, 0, printargs, "sysv_lseek64" }, /* 1078 */
+ { 0, 0, printargs, "sysv_rmdir" }, /* 1079 */
+ { 0, 0, printargs, "sysv_mkdir" }, /* 1080 */
+ { 0, 0, printargs, "sysv_getdents" }, /* 1081 */
+ { 0, 0, printargs, "sysv_sginap" }, /* 1082 */
+ { 0, 0, printargs, "sysv_sgikopt" }, /* 1083 */
+ { 0, 0, printargs, "sysv_sysfs" }, /* 1084 */
+ { 0, 0, printargs, "sysv_getmsg" }, /* 1085 */
+ { 0, 0, printargs, "sysv_putmsg" }, /* 1086 */
+ { 0, 0, printargs, "sysv_poll" }, /* 1087 */
+ { 0, 0, printargs, "sysv_sigreturn" }, /* 1088 */
+ { 0, 0, printargs, "sysv_accept" }, /* 1089 */
+ { 0, 0, printargs, "sysv_bind" }, /* 1090 */
+ { 0, 0, printargs, "sysv_connect" }, /* 1091 */
+ { 0, 0, printargs, "sysv_gethostid" }, /* 1092 */
+ { 0, 0, printargs, "sysv_getpeername" }, /* 1093 */
+ { 0, 0, printargs, "sysv_getsockname" }, /* 1094 */
+ { 0, 0, printargs, "sysv_getsockopt" }, /* 1095 */
+ { 0, 0, printargs, "sysv_listen" }, /* 1096 */
+ { 0, 0, printargs, "sysv_recv" }, /* 1097 */
+ { 0, 0, printargs, "sysv_recvfrom" }, /* 1098 */
+ { 0, 0, printargs, "sysv_recvmsg" }, /* 1099 */
+ { 0, 0, printargs, "sysv_select" }, /* 1100 */
+ { 0, 0, printargs, "sysv_send" }, /* 1101 */
+ { 0, 0, printargs, "sysv_sendmsg" }, /* 1102 */
+ { 0, 0, printargs, "sysv_sendto" }, /* 1103 */
+ { 0, 0, printargs, "sysv_sethostid" }, /* 1104 */
+ { 0, 0, printargs, "sysv_setsockopt" }, /* 1105 */
+ { 0, 0, printargs, "sysv_shutdown" }, /* 1106 */
+ { 0, 0, printargs, "sysv_socket" }, /* 1107 */
+ { 0, 0, printargs, "sysv_gethostname" }, /* 1108 */
+ { 0, 0, printargs, "sysv_sethostname" }, /* 1109 */
+ { 0, 0, printargs, "sysv_getdomainname" }, /* 1110 */
+ { 0, 0, printargs, "sysv_setdomainname" }, /* 1111 */
+ { 0, 0, printargs, "sysv_truncate" }, /* 1112 */
+ { 0, 0, printargs, "sysv_ftruncate" }, /* 1113 */
+ { 0, 0, printargs, "sysv_rename" }, /* 1114 */
+ { 0, 0, printargs, "sysv_symlink" }, /* 1115 */
+ { 0, 0, printargs, "sysv_readlink" }, /* 1116 */
+ { 0, 0, printargs, "sysv_lstat" }, /* 1117 */
+ { 0, 0, printargs, "sysv_nfsmount" }, /* 1118 */
+ { 0, 0, printargs, "sysv_nfssvc" }, /* 1119 */
+ { 0, 0, printargs, "sysv_getfh" }, /* 1120 */
+ { 0, 0, printargs, "sysv_async_daemon" }, /* 1121 */
+ { 0, 0, printargs, "sysv_exportfs" }, /* 1122 */
+ { 0, 0, printargs, "sysv_setregid" }, /* 1123 */
+ { 0, 0, printargs, "sysv_setreuid" }, /* 1124 */
+ { 0, 0, printargs, "sysv_getitimer" }, /* 1125 */
+ { 0, 0, printargs, "sysv_setitimer" }, /* 1126 */
+ { 0, 0, printargs, "sysv_adjtime" }, /* 1127 */
+ { 0, 0, printargs, "sysv_BSD_getime" }, /* 1128 */
+ { 0, 0, printargs, "sysv_sproc" }, /* 1129 */
+ { 0, 0, printargs, "sysv_prctl" }, /* 1130 */
+ { 0, 0, printargs, "sysv_procblk" }, /* 1131 */
+ { 0, 0, printargs, "sysv_sprocsp" }, /* 1132 */
+ { 0, 0, printargs, "sysv_sgigsc" }, /* 1133 */
+ { 0, TD|TM, printargs, "sysv_mmap" }, /* 1134 */
+ { 0, TM, printargs, "sysv_munmap" }, /* 1135 */
+ { 0, TM, printargs, "sysv_mprotect" }, /* 1136 */
+ { 0, TM, printargs, "sysv_msync" }, /* 1137 */
+ { 0, TM, printargs, "sysv_madvise" }, /* 1138 */
+ { 0, 0, printargs, "sysv_pagelock" }, /* 1139 */
+ { 0, 0, printargs, "sysv_getpagesize" }, /* 1140 */
+ { 0, TF, printargs, "sysv_quotactl" }, /* 1141 */
+ { 0, 0, printargs, "sysv_libdetach" }, /* 1142 */
+ { 0, 0, printargs, "sysv_BSDgetpgrp" }, /* 1143 */
+ { 0, 0, printargs, "sysv_BSDsetpgrp" }, /* 1144 */
+ { 0, 0, printargs, "sysv_vhangup" }, /* 1145 */
+ { 0, 0, printargs, "sysv_fsync" }, /* 1146 */
+ { 0, 0, printargs, "sysv_fchdir" }, /* 1147 */
+ { 0, 0, printargs, "sysv_getrlimit" }, /* 1148 */
+ { 0, 0, printargs, "sysv_setrlimit" }, /* 1149 */
+ { 0, 0, printargs, "sysv_cacheflush" }, /* 1150 */
+ { 0, 0, printargs, "sysv_cachectl" }, /* 1151 */
+ { 0, 0, printargs, "sysv_fchown" }, /* 1152 */
+ { 0, 0, printargs, "sysv_fchmod" }, /* 1153 */
+ { 0, 0, printargs, "sysv_wait3" }, /* 1154 */
+ { 0, 0, printargs, "sysv_socketpair" }, /* 1155 */
+ { 0, 0, printargs, "sysv_sysinfo" }, /* 1156 */
+ { 0, 0, printargs, "sysv_nuname" }, /* 1157 */
+ { 0, 0, printargs, "sysv_xstat" }, /* 1158 */
+ { 0, 0, printargs, "sysv_lxstat" }, /* 1159 */
+ { 0, 0, printargs, "sysv_fxstat" }, /* 1160 */
+ { 0, 0, printargs, "sysv_xmknod" }, /* 1161 */
+ { 0, 0, printargs, "sysv_ksigaction" }, /* 1162 */
+ { 0, 0, printargs, "sysv_sigpending" }, /* 1163 */
+ { 0, 0, printargs, "sysv_sigprocmask" }, /* 1164 */
+ { 0, 0, printargs, "sysv_sigsuspend" }, /* 1165 */
+ { 0, 0, printargs, "sysv_sigpoll" }, /* 1166 */
+ { 0, 0, printargs, "sysv_swapctl" }, /* 1167 */
+ { 0, 0, printargs, "sysv_getcontext" }, /* 1168 */
+ { 0, 0, printargs, "sysv_setcontext" }, /* 1169 */
+ { 0, 0, printargs, "sysv_waitsys" }, /* 1170 */
+ { 0, 0, printargs, "sysv_sigstack" }, /* 1171 */
+ { 0, 0, printargs, "sysv_sigaltstack" }, /* 1172 */
+ { 0, 0, printargs, "sysv_sigsendset" }, /* 1173 */
+ { 0, 0, printargs, "sysv_statvfs" }, /* 1174 */
+ { 0, 0, printargs, "sysv_fstatvfs" }, /* 1175 */
+ { 0, 0, printargs, "sysv_getpmsg" }, /* 1176 */
+ { 0, 0, printargs, "sysv_putpmsg" }, /* 1177 */
+ { 0, 0, printargs, "sysv_lchown" }, /* 1178 */
+ { 0, 0, printargs, "sysv_priocntl" }, /* 1179 */
+ { 0, 0, printargs, "sysv_ksigqueue" }, /* 1180 */
+ { 0, 0, printargs, "sysv_readv" }, /* 1181 */
+ { 0, 0, printargs, "sysv_writev" }, /* 1182 */
+ { 0, 0, printargs, "sysv_truncate64" }, /* 1183 */
+ { 0, 0, printargs, "sysv_ftruncate64" }, /* 1184 */
+ { 0, TD|TM, printargs, "sysv_mmap64" }, /* 1185 */
+ { 0, 0, printargs, "sysv_dmi" }, /* 1186 */
+ { 0, 0, printargs, "sysv_pread" }, /* 1187 */
+ { 0, 0, printargs, "sysv_pwrite" }, /* 1188 */
+
+ [1189 ... 1999] = { }, /* 1999 */ /* end of SYSV */
+
+ { 0, 0, printargs, "bsd43_syscall" }, /* 2000 */ /* start of BSD 4.3 */
+ { 0, 0, printargs, "bsd43_exit" }, /* 2001 */
+ { 0, 0, printargs, "bsd43_fork" }, /* 2002 */
+ { 0, 0, printargs, "bsd43_read" }, /* 2003 */
+ { 0, 0, printargs, "bsd43_write" }, /* 2004 */
+ { 0, 0, printargs, "bsd43_open" }, /* 2005 */
+ { 0, 0, printargs, "bsd43_close" }, /* 2006 */
+ { 0, 0, printargs, "bsd43_wait" }, /* 2007 */
+ { 0, 0, printargs, "bsd43_creat" }, /* 2008 */
+ { 0, 0, printargs, "bsd43_link" }, /* 2009 */
+ { 0, 0, printargs, "bsd43_unlink" }, /* 2010 */
+ { 0, 0, printargs, "bsd43_exec" }, /* 2011 */
+ { 0, 0, printargs, "bsd43_chdir" }, /* 2012 */
+ { 0, 0, printargs, "bsd43_time" }, /* 2013 */
+ { 0, 0, printargs, "bsd43_mknod" }, /* 2014 */
+ { 0, 0, printargs, "bsd43_chmod" }, /* 2015 */
+ { 0, 0, printargs, "bsd43_chown" }, /* 2016 */
+ { 0, TM, printargs, "bsd43_sbreak" }, /* 2017 */
+ { 0, 0, printargs, "bsd43_oldstat" }, /* 2018 */
+ { 0, 0, printargs, "bsd43_lseek" }, /* 2019 */
+ { 0, 0, printargs, "bsd43_getpid" }, /* 2020 */
+ { 0, 0, printargs, "bsd43_oldmount" }, /* 2021 */
+ { 0, 0, printargs, "bsd43_umount" }, /* 2022 */
+ { 0, 0, printargs, "bsd43_setuid" }, /* 2023 */
+ { 0, 0, printargs, "bsd43_getuid" }, /* 2024 */
+ { 0, 0, printargs, "bsd43_stime" }, /* 2025 */
+ { 0, 0, printargs, "bsd43_ptrace" }, /* 2026 */
+ { 0, 0, printargs, "bsd43_alarm" }, /* 2027 */
+ { 0, 0, printargs, "bsd43_oldfstat" }, /* 2028 */
+ { 0, 0, printargs, "bsd43_pause" }, /* 2029 */
+ { 0, 0, printargs, "bsd43_utime" }, /* 2030 */
+ { 0, 0, printargs, "bsd43_stty" }, /* 2031 */
+ { 0, 0, printargs, "bsd43_gtty" }, /* 2032 */
+ { 0, 0, printargs, "bsd43_access" }, /* 2033 */
+ { 0, 0, printargs, "bsd43_nice" }, /* 2034 */
+ { 0, 0, printargs, "bsd43_ftime" }, /* 2035 */
+ { 0, 0, printargs, "bsd43_sync" }, /* 2036 */
+ { 0, 0, printargs, "bsd43_kill" }, /* 2037 */
+ { 0, 0, printargs, "bsd43_stat" }, /* 2038 */
+ { 0, 0, printargs, "bsd43_oldsetpgrp" }, /* 2039 */
+ { 0, 0, printargs, "bsd43_lstat" }, /* 2040 */
+ { 0, 0, printargs, "bsd43_dup" }, /* 2041 */
+ { 0, 0, printargs, "bsd43_pipe" }, /* 2042 */
+ { 0, 0, printargs, "bsd43_times" }, /* 2043 */
+ { 0, 0, printargs, "bsd43_profil" }, /* 2044 */
+ { 0, 0, printargs, "bsd43_msgsys" }, /* 2045 */
+ { 0, 0, printargs, "bsd43_setgid" }, /* 2046 */
+ { 0, 0, printargs, "bsd43_getgid" }, /* 2047 */
+ { 0, 0, printargs, "bsd43_ssig" }, /* 2048 */
+ { 0, 0, NULL, NULL }, /* 2049 */
+ { 0, 0, NULL, NULL }, /* 2050 */
+ { 0, 0, printargs, "bsd43_sysacct" }, /* 2051 */
+ { 0, 0, printargs, "bsd43_phys" }, /* 2052 */
+ { 0, 0, printargs, "bsd43_lock" }, /* 2053 */
+ { 0, 0, printargs, "bsd43_ioctl" }, /* 2054 */
+ { 0, 0, printargs, "bsd43_reboot" }, /* 2055 */
+ { 0, 0, printargs, "bsd43_mpxchan" }, /* 2056 */
+ { 0, 0, printargs, "bsd43_symlink" }, /* 2057 */
+ { 0, 0, printargs, "bsd43_readlink" }, /* 2058 */
+ { 0, 0, printargs, "bsd43_execve" }, /* 2059 */
+ { 0, 0, printargs, "bsd43_umask" }, /* 2060 */
+ { 0, 0, printargs, "bsd43_chroot" }, /* 2061 */
+ { 0, 0, printargs, "bsd43_fstat" }, /* 2062 */
+ { 0, 0, NULL, NULL }, /* 2063 */
+ { 0, 0, printargs, "bsd43_getpagesize" }, /* 2064 */
+ { 0, TM, printargs, "bsd43_mremap" }, /* 2065 */
+ { 0, 0, printargs, "bsd43_vfork" }, /* 2066 */
+ { 0, 0, printargs, "bsd43_vread" }, /* 2067 */
+ { 0, 0, printargs, "bsd43_vwrite" }, /* 2068 */
+ { 0, TM, printargs, "bsd43_sbrk" }, /* 2069 */
+ { 0, 0, printargs, "bsd43_sstk" }, /* 2070 */
+ { 0, TD|TM, printargs, "bsd43_mmap" }, /* 2071 */
+ { 0, 0, printargs, "bsd43_vadvise" }, /* 2072 */
+ { 0, TM, printargs, "bsd43_munmap" }, /* 2073 */
+ { 0, TM, printargs, "bsd43_mprotect" }, /* 2074 */
+ { 0, TM, printargs, "bsd43_madvise" }, /* 2075 */
+ { 0, 0, printargs, "bsd43_vhangup" }, /* 2076 */
+ { 0, 0, printargs, "bsd43_vlimit" }, /* 2077 */
+ { 0, TM, printargs, "bsd43_mincore" }, /* 2078 */
+ { 0, 0, printargs, "bsd43_getgroups" }, /* 2079 */
+ { 0, 0, printargs, "bsd43_setgroups" }, /* 2080 */
+ { 0, 0, printargs, "bsd43_getpgrp" }, /* 2081 */
+ { 0, 0, printargs, "bsd43_setpgrp" }, /* 2082 */
+ { 0, 0, printargs, "bsd43_setitimer" }, /* 2083 */
+ { 0, 0, printargs, "bsd43_wait3" }, /* 2084 */
+ { 0, 0, printargs, "bsd43_swapon" }, /* 2085 */
+ { 0, 0, printargs, "bsd43_getitimer" }, /* 2086 */
+ { 0, 0, printargs, "bsd43_gethostname" }, /* 2087 */
+ { 0, 0, printargs, "bsd43_sethostname" }, /* 2088 */
+ { 0, 0, printargs, "bsd43_getdtablesize" }, /* 2089 */
+ { 0, 0, printargs, "bsd43_dup2" }, /* 2090 */
+ { 0, 0, printargs, "bsd43_getdopt" }, /* 2091 */
+ { 0, 0, printargs, "bsd43_fcntl" }, /* 2092 */
+ { 0, 0, printargs, "bsd43_select" }, /* 2093 */
+ { 0, 0, printargs, "bsd43_setdopt" }, /* 2094 */
+ { 0, 0, printargs, "bsd43_fsync" }, /* 2095 */
+ { 0, 0, printargs, "bsd43_setpriority" }, /* 2096 */
+ { 0, 0, printargs, "bsd43_socket" }, /* 2097 */
+ { 0, 0, printargs, "bsd43_connect" }, /* 2098 */
+ { 0, 0, printargs, "bsd43_oldaccept" }, /* 2099 */
+ { 0, 0, printargs, "bsd43_getpriority" }, /* 2100 */
+ { 0, 0, printargs, "bsd43_send" }, /* 2101 */
+ { 0, 0, printargs, "bsd43_recv" }, /* 2102 */
+ { 0, 0, printargs, "bsd43_sigreturn" }, /* 2103 */
+ { 0, 0, printargs, "bsd43_bind" }, /* 2104 */
+ { 0, 0, printargs, "bsd43_setsockopt" }, /* 2105 */
+ { 0, 0, printargs, "bsd43_listen" }, /* 2106 */
+ { 0, 0, printargs, "bsd43_vtimes" }, /* 2107 */
+ { 0, 0, printargs, "bsd43_sigvec" }, /* 2108 */
+ { 0, 0, printargs, "bsd43_sigblock" }, /* 2109 */
+ { 0, 0, printargs, "bsd43_sigsetmask" }, /* 2110 */
+ { 0, 0, printargs, "bsd43_sigpause" }, /* 2111 */
+ { 0, 0, printargs, "bsd43_sigstack" }, /* 2112 */
+ { 0, 0, printargs, "bsd43_oldrecvmsg" }, /* 2113 */
+ { 0, 0, printargs, "bsd43_oldsendmsg" }, /* 2114 */
+ { 0, 0, printargs, "bsd43_vtrace" }, /* 2115 */
+ { 0, 0, printargs, "bsd43_gettimeofday" }, /* 2116 */
+ { 0, 0, printargs, "bsd43_getrusage" }, /* 2117 */
+ { 0, 0, printargs, "bsd43_getsockopt" }, /* 2118 */
+ { 0, 0, NULL, NULL }, /* 2119 */
+ { 0, 0, printargs, "bsd43_readv" }, /* 2120 */
+ { 0, 0, printargs, "bsd43_writev" }, /* 2121 */
+ { 0, 0, printargs, "bsd43_settimeofday" }, /* 2122 */
+ { 0, 0, printargs, "bsd43_fchown" }, /* 2123 */
+ { 0, 0, printargs, "bsd43_fchmod" }, /* 2124 */
+ { 0, 0, printargs, "bsd43_oldrecvfrom" }, /* 2125 */
+ { 0, 0, printargs, "bsd43_setreuid" }, /* 2126 */
+ { 0, 0, printargs, "bsd43_setregid" }, /* 2127 */
+ { 0, 0, printargs, "bsd43_rename" }, /* 2128 */
+ { 0, 0, printargs, "bsd43_truncate" }, /* 2129 */
+ { 0, 0, printargs, "bsd43_ftruncate" }, /* 2130 */
+ { 0, 0, printargs, "bsd43_flock" }, /* 2131 */
+ { 0, 0, printargs, "bsd43_semsys" }, /* 2132 */
+ { 0, 0, printargs, "bsd43_sendto" }, /* 2133 */
+ { 0, 0, printargs, "bsd43_shutdown" }, /* 2134 */
+ { 0, 0, printargs, "bsd43_socketpair" }, /* 2135 */
+ { 0, 0, printargs, "bsd43_mkdir" }, /* 2136 */
+ { 0, 0, printargs, "bsd43_rmdir" }, /* 2137 */
+ { 0, 0, printargs, "bsd43_utimes" }, /* 2138 */
+ { 0, 0, printargs, "bsd43_sigcleanup" }, /* 2139 */
+ { 0, 0, printargs, "bsd43_adjtime" }, /* 2140 */
+ { 0, 0, printargs, "bsd43_oldgetpeername" }, /* 2141 */
+ { 0, 0, printargs, "bsd43_gethostid" }, /* 2142 */
+ { 0, 0, printargs, "bsd43_sethostid" }, /* 2143 */
+ { 0, 0, printargs, "bsd43_getrlimit" }, /* 2144 */
+ { 0, 0, printargs, "bsd43_setrlimit" }, /* 2145 */
+ { 0, 0, printargs, "bsd43_killpg" }, /* 2146 */
+ { 0, 0, printargs, "bsd43_shmsys" }, /* 2147 */
+ { 0, 0, printargs, "bsd43_quota" }, /* 2148 */
+ { 0, 0, printargs, "bsd43_qquota" }, /* 2149 */
+ { 0, 0, printargs, "bsd43_oldgetsockname" }, /* 2150 */
+ { 0, 0, printargs, "bsd43_sysmips" }, /* 2151 */
+ { 0, 0, printargs, "bsd43_cacheflush" }, /* 2152 */
+ { 0, 0, printargs, "bsd43_cachectl" }, /* 2153 */
+ { 0, 0, printargs, "bsd43_debug" }, /* 2154 */
+ { 0, 0, NULL, NULL }, /* 2155 */
+ { 0, 0, NULL, NULL }, /* 2156 */
+ { 0, 0, printargs, "bsd43_nfs_mount" }, /* 2157 */
+ { 0, 0, printargs, "bsd43_nfs_svc" }, /* 2158 */
+ { 0, 0, printargs, "bsd43_getdirentries" }, /* 2159 */
+ { 0, 0, printargs, "bsd43_statfs" }, /* 2160 */
+ { 0, 0, printargs, "bsd43_fstatfs" }, /* 2161 */
+ { 0, 0, printargs, "bsd43_unmount" }, /* 2162 */
+ { 0, 0, printargs, "bsd43_async_daemon" }, /* 2163 */
+ { 0, 0, printargs, "bsd43_nfs_getfh" }, /* 2164 */
+ { 0, 0, printargs, "bsd43_getdomainname" }, /* 2165 */
+ { 0, 0, printargs, "bsd43_setdomainname" }, /* 2166 */
+ { 0, 0, printargs, "bsd43_pcfs_mount" }, /* 2167 */
+ { 0, TF, printargs, "bsd43_quotactl" }, /* 2168 */
+ { 0, 0, printargs, "bsd43_oldexportfs" }, /* 2169 */
+ { 0, 0, printargs, "bsd43_smount" }, /* 2170 */
+ { 0, 0, printargs, "bsd43_mipshwconf" }, /* 2171 */
+ { 0, 0, printargs, "bsd43_exportfs" }, /* 2172 */
+ { 0, 0, printargs, "bsd43_nfsfh_open" }, /* 2173 */
+ { 0, 0, printargs, "bsd43_libattach" }, /* 2174 */
+ { 0, 0, printargs, "bsd43_libdetach" }, /* 2175 */
+ { 0, 0, printargs, "bsd43_accept" }, /* 2176 */
+ { 0, 0, NULL, NULL }, /* 2177 */
+ { 0, 0, NULL, NULL }, /* 2178 */
+ { 0, 0, printargs, "bsd43_recvmsg" }, /* 2179 */
+ { 0, 0, printargs, "bsd43_recvfrom" }, /* 2180 */
+ { 0, 0, printargs, "bsd43_sendmsg" }, /* 2181 */
+ { 0, 0, printargs, "bsd43_getpeername" }, /* 2182 */
+ { 0, 0, printargs, "bsd43_getsockname" }, /* 2183 */
+ { 0, 0, printargs, "bsd43_aread" }, /* 2184 */
+ { 0, 0, printargs, "bsd43_awrite" }, /* 2185 */
+ { 0, 0, printargs, "bsd43_listio" }, /* 2186 */
+ { 0, 0, printargs, "bsd43_acancel" }, /* 2187 */
+ { 0, 0, printargs, "bsd43_astatus" }, /* 2188 */
+ { 0, 0, printargs, "bsd43_await" }, /* 2189 */
+ { 0, 0, printargs, "bsd43_areadv" }, /* 2190 */
+ { 0, 0, printargs, "bsd43_awritev" }, /* 2191 */
+
+ [2192 ... 2999] = { }, /* 2999 */ /* end of BSD 4.3 */
+
+ { 0, 0, printargs, "posix_syscall" }, /* 3000 */ /* start of POSIX */
+ { 0, 0, printargs, "posix_exit" }, /* 3001 */
+ { 0, 0, printargs, "posix_fork" }, /* 3002 */
+ { 0, 0, printargs, "posix_read" }, /* 3003 */
+ { 0, 0, printargs, "posix_write" }, /* 3004 */
+ { 0, 0, printargs, "posix_open" }, /* 3005 */
+ { 0, 0, printargs, "posix_close" }, /* 3006 */
+ { 0, 0, printargs, "posix_wait" }, /* 3007 */
+ { 0, 0, printargs, "posix_creat" }, /* 3008 */
+ { 0, 0, printargs, "posix_link" }, /* 3009 */
+ { 0, 0, printargs, "posix_unlink" }, /* 3010 */
+ { 0, 0, printargs, "posix_exec" }, /* 3011 */
+ { 0, 0, printargs, "posix_chdir" }, /* 3012 */
+ { 0, 0, printargs, "posix_gtime" }, /* 3013 */
+ { 0, 0, printargs, "posix_mknod" }, /* 3014 */
+ { 0, 0, printargs, "posix_chmod" }, /* 3015 */
+ { 0, 0, printargs, "posix_chown" }, /* 3016 */
+ { 0, TM, printargs, "posix_sbreak" }, /* 3017 */
+ { 0, 0, printargs, "posix_stat" }, /* 3018 */
+ { 0, 0, printargs, "posix_lseek" }, /* 3019 */
+ { 0, 0, printargs, "posix_getpid" }, /* 3020 */
+ { 0, 0, printargs, "posix_mount" }, /* 3021 */
+ { 0, 0, printargs, "posix_umount" }, /* 3022 */
+ { 0, 0, printargs, "posix_setuid" }, /* 3023 */
+ { 0, 0, printargs, "posix_getuid" }, /* 3024 */
+ { 0, 0, printargs, "posix_stime" }, /* 3025 */
+ { 0, 0, printargs, "posix_ptrace" }, /* 3026 */
+ { 0, 0, printargs, "posix_alarm" }, /* 3027 */
+ { 0, 0, printargs, "posix_fstat" }, /* 3028 */
+ { 0, 0, printargs, "posix_pause" }, /* 3029 */
+ { 0, 0, printargs, "posix_utime" }, /* 3030 */
+ { 0, 0, printargs, "posix_stty" }, /* 3031 */
+ { 0, 0, printargs, "posix_gtty" }, /* 3032 */
+ { 0, 0, printargs, "posix_access" }, /* 3033 */
+ { 0, 0, printargs, "posix_nice" }, /* 3034 */
+ { 0, 0, printargs, "posix_statfs" }, /* 3035 */
+ { 0, 0, printargs, "posix_sync" }, /* 3036 */
+ { 0, 0, printargs, "posix_kill" }, /* 3037 */
+ { 0, 0, printargs, "posix_fstatfs" }, /* 3038 */
+ { 0, 0, printargs, "posix_getpgrp" }, /* 3039 */
+ { 0, 0, printargs, "posix_syssgi" }, /* 3040 */
+ { 0, 0, printargs, "posix_dup" }, /* 3041 */
+ { 0, 0, printargs, "posix_pipe" }, /* 3042 */
+ { 0, 0, printargs, "posix_times" }, /* 3043 */
+ { 0, 0, printargs, "posix_profil" }, /* 3044 */
+ { 0, 0, printargs, "posix_lock" }, /* 3045 */
+ { 0, 0, printargs, "posix_setgid" }, /* 3046 */
+ { 0, 0, printargs, "posix_getgid" }, /* 3047 */
+ { 0, 0, printargs, "posix_sig" }, /* 3048 */
+ { 0, 0, printargs, "posix_msgsys" }, /* 3049 */
+ { 0, 0, printargs, "posix_sysmips" }, /* 3050 */
+ { 0, 0, printargs, "posix_sysacct" }, /* 3051 */
+ { 0, 0, printargs, "posix_shmsys" }, /* 3052 */
+ { 0, 0, printargs, "posix_semsys" }, /* 3053 */
+ { 0, 0, printargs, "posix_ioctl" }, /* 3054 */
+ { 0, 0, printargs, "posix_uadmin" }, /* 3055 */
+ { 0, 0, printargs, "posix_exch" }, /* 3056 */
+ { 0, 0, printargs, "posix_utssys" }, /* 3057 */
+ { 0, 0, NULL, NULL }, /* 3058 */
+ { 0, 0, printargs, "posix_exece" }, /* 3059 */
+ { 0, 0, printargs, "posix_umask" }, /* 3060 */
+ { 0, 0, printargs, "posix_chroot" }, /* 3061 */
+ { 0, 0, printargs, "posix_fcntl" }, /* 3062 */
+ { 0, 0, printargs, "posix_ulimit" }, /* 3063 */
+ { 0, 0, NULL, NULL }, /* 3064 */
+ { 0, 0, NULL, NULL }, /* 3065 */
+ { 0, 0, NULL, NULL }, /* 3066 */
+ { 0, 0, NULL, NULL }, /* 3067 */
+ { 0, 0, NULL, NULL }, /* 3068 */
+ { 0, 0, NULL, NULL }, /* 3069 */
+ { 0, 0, printargs, "posix_advfs" }, /* 3070 */
+ { 0, 0, printargs, "posix_unadvfs" }, /* 3071 */
+ { 0, 0, printargs, "posix_rmount" }, /* 3072 */
+ { 0, 0, printargs, "posix_rumount" }, /* 3073 */
+ { 0, 0, printargs, "posix_rfstart" }, /* 3074 */
+ { 0, 0, NULL, NULL }, /* 3075 */
+ { 0, 0, printargs, "posix_rdebug" }, /* 3076 */
+ { 0, 0, printargs, "posix_rfstop" }, /* 3077 */
+ { 0, 0, printargs, "posix_rfsys" }, /* 3078 */
+ { 0, 0, printargs, "posix_rmdir" }, /* 3079 */
+ { 0, 0, printargs, "posix_mkdir" }, /* 3080 */
+ { 0, 0, printargs, "posix_getdents" }, /* 3081 */
+ { 0, 0, printargs, "posix_sginap" }, /* 3082 */
+ { 0, 0, printargs, "posix_sgikopt" }, /* 3083 */
+ { 0, 0, printargs, "posix_sysfs" }, /* 3084 */
+ { 0, 0, printargs, "posix_getmsg" }, /* 3085 */
+ { 0, 0, printargs, "posix_putmsg" }, /* 3086 */
+ { 0, 0, printargs, "posix_poll" }, /* 3087 */
+ { 0, 0, printargs, "posix_sigreturn" }, /* 3088 */
+ { 0, 0, printargs, "posix_accept" }, /* 3089 */
+ { 0, 0, printargs, "posix_bind" }, /* 3090 */
+ { 0, 0, printargs, "posix_connect" }, /* 3091 */
+ { 0, 0, printargs, "posix_gethostid" }, /* 3092 */
+ { 0, 0, printargs, "posix_getpeername" }, /* 3093 */
+ { 0, 0, printargs, "posix_getsockname" }, /* 3094 */
+ { 0, 0, printargs, "posix_getsockopt" }, /* 3095 */
+ { 0, 0, printargs, "posix_listen" }, /* 3096 */
+ { 0, 0, printargs, "posix_recv" }, /* 3097 */
+ { 0, 0, printargs, "posix_recvfrom" }, /* 3098 */
+ { 0, 0, printargs, "posix_recvmsg" }, /* 3099 */
+ { 0, 0, printargs, "posix_select" }, /* 3100 */
+ { 0, 0, printargs, "posix_send" }, /* 3101 */
+ { 0, 0, printargs, "posix_sendmsg" }, /* 3102 */
+ { 0, 0, printargs, "posix_sendto" }, /* 3103 */
+ { 0, 0, printargs, "posix_sethostid" }, /* 3104 */
+ { 0, 0, printargs, "posix_setsockopt" }, /* 3105 */
+ { 0, 0, printargs, "posix_shutdown" }, /* 3106 */
+ { 0, 0, printargs, "posix_socket" }, /* 3107 */
+ { 0, 0, printargs, "posix_gethostname" }, /* 3108 */
+ { 0, 0, printargs, "posix_sethostname" }, /* 3109 */
+ { 0, 0, printargs, "posix_getdomainname" }, /* 3110 */
+ { 0, 0, printargs, "posix_setdomainname" }, /* 3111 */
+ { 0, 0, printargs, "posix_truncate" }, /* 3112 */
+ { 0, 0, printargs, "posix_ftruncate" }, /* 3113 */
+ { 0, 0, printargs, "posix_rename" }, /* 3114 */
+ { 0, 0, printargs, "posix_symlink" }, /* 3115 */
+ { 0, 0, printargs, "posix_readlink" }, /* 3116 */
+ { 0, 0, printargs, "posix_lstat" }, /* 3117 */
+ { 0, 0, printargs, "posix_nfs_mount" }, /* 3118 */
+ { 0, 0, printargs, "posix_nfs_svc" }, /* 3119 */
+ { 0, 0, printargs, "posix_nfs_getfh" }, /* 3120 */
+ { 0, 0, printargs, "posix_async_daemon" }, /* 3121 */
+ { 0, 0, printargs, "posix_exportfs" }, /* 3122 */
+ { 0, 0, printargs, "posix_SGI_setregid" }, /* 3123 */
+ { 0, 0, printargs, "posix_SGI_setreuid" }, /* 3124 */
+ { 0, 0, printargs, "posix_getitimer" }, /* 3125 */
+ { 0, 0, printargs, "posix_setitimer" }, /* 3126 */
+ { 0, 0, printargs, "posix_adjtime" }, /* 3127 */
+ { 0, 0, printargs, "posix_SGI_bsdgettime" }, /* 3128 */
+ { 0, 0, printargs, "posix_SGI_sproc" }, /* 3129 */
+ { 0, 0, printargs, "posix_SGI_prctl" }, /* 3130 */
+ { 0, 0, printargs, "posix_SGI_blkproc" }, /* 3131 */
+ { 0, 0, NULL, NULL }, /* 3132 */
+ { 0, 0, printargs, "posix_SGI_sgigsc" }, /* 3133 */
+ { 0, TD|TM, printargs, "posix_SGI_mmap" }, /* 3134 */
+ { 0, TM, printargs, "posix_SGI_munmap" }, /* 3135 */
+ { 0, TM, printargs, "posix_SGI_mprotect" }, /* 3136 */
+ { 0, TM, printargs, "posix_SGI_msync" }, /* 3137 */
+ { 0, TM, printargs, "posix_SGI_madvise" }, /* 3138 */
+ { 0, 0, printargs, "posix_SGI_mpin" }, /* 3139 */
+ { 0, 0, printargs, "posix_SGI_getpagesize" }, /* 3140 */
+ { 0, 0, printargs, "posix_SGI_libattach" }, /* 3141 */
+ { 0, 0, printargs, "posix_SGI_libdetach" }, /* 3142 */
+ { 0, 0, printargs, "posix_SGI_getpgrp" }, /* 3143 */
+ { 0, 0, printargs, "posix_SGI_setpgrp" }, /* 3144 */
+ { 0, 0, NULL, NULL }, /* 3145 */
+ { 0, 0, NULL, NULL }, /* 3146 */
+ { 0, 0, NULL, NULL }, /* 3147 */
+ { 0, 0, NULL, NULL }, /* 3148 */
+ { 0, 0, NULL, NULL }, /* 3149 */
+ { 0, 0, printargs, "posix_cacheflush" }, /* 3150 */
+ { 0, 0, printargs, "posix_cachectl" }, /* 3151 */
+ { 0, 0, printargs, "posix_fchown" }, /* 3152 */
+ { 0, 0, printargs, "posix_fchmod" }, /* 3153 */
+ { 0, 0, printargs, "posix_wait3" }, /* 3154 */
+ { 0, TD|TM, printargs, "posix_mmap" }, /* 3155 */
+ { 0, TM, printargs, "posix_munmap" }, /* 3156 */
+ { 0, TM, printargs, "posix_madvise" }, /* 3157 */
+ { 0, 0, printargs, "posix_BSD_getpagesize" }, /* 3158 */
+ { 0, 0, printargs, "posix_setreuid" }, /* 3159 */
+ { 0, 0, printargs, "posix_setregid" }, /* 3160 */
+ { 0, 0, printargs, "posix_setpgid" }, /* 3161 */
+ { 0, 0, printargs, "posix_getgroups" }, /* 3162 */
+ { 0, 0, printargs, "posix_setgroups" }, /* 3163 */
+ { 0, 0, printargs, "posix_gettimeofday" }, /* 3164 */
+ { 0, 0, printargs, "posix_getrusage" }, /* 3165 */
+ { 0, 0, printargs, "posix_getrlimit" }, /* 3166 */
+ { 0, 0, printargs, "posix_setrlimit" }, /* 3167 */
+ { 0, 0, printargs, "posix_waitpid" }, /* 3168 */
+ { 0, 0, printargs, "posix_dup2" }, /* 3169 */
+ { 0, 0, NULL, NULL }, /* 3170 */
+ { 0, 0, NULL, NULL }, /* 3171 */
+ { 0, 0, NULL, NULL }, /* 3172 */
+ { 0, 0, NULL, NULL }, /* 3173 */
+ { 0, 0, NULL, NULL }, /* 3174 */
+ { 0, 0, NULL, NULL }, /* 3175 */
+ { 0, 0, NULL, NULL }, /* 3176 */
+ { 0, 0, NULL, NULL }, /* 3177 */
+ { 0, 0, NULL, NULL }, /* 3178 */
+ { 0, 0, NULL, NULL }, /* 3179 */
+ { 0, 0, NULL, NULL }, /* 3180 */
+ { 0, 0, NULL, NULL }, /* 3181 */
+ { 0, 0, NULL, NULL }, /* 3182 */
+ { 0, 0, NULL, NULL }, /* 3183 */
+ { 0, 0, NULL, NULL }, /* 3184 */
+ { 0, 0, NULL, NULL }, /* 3185 */
+ { 0, 0, NULL, NULL }, /* 3186 */
+ { 0, 0, NULL, NULL }, /* 3187 */
+ { 0, 0, NULL, NULL }, /* 3188 */
+ { 0, 0, NULL, NULL }, /* 3189 */
+ { 0, 0, NULL, NULL }, /* 3190 */
+ { 0, 0, NULL, NULL }, /* 3191 */
+ { 0, 0, NULL, NULL }, /* 3192 */
+ { 0, 0, NULL, NULL }, /* 3193 */
+ { 0, 0, NULL, NULL }, /* 3194 */
+ { 0, 0, NULL, NULL }, /* 3195 */
+ { 0, 0, NULL, NULL }, /* 3196 */
+ { 0, 0, NULL, NULL }, /* 3197 */
+ { 0, 0, NULL, NULL }, /* 3198 */
+ { 0, 0, NULL, NULL }, /* 3199 */
+ { 0, 0, NULL, NULL }, /* 3200 */
+ { 0, 0, NULL, NULL }, /* 3201 */
+ { 0, 0, NULL, NULL }, /* 3202 */
+ { 0, 0, NULL, NULL }, /* 3203 */
+ { 0, 0, NULL, NULL }, /* 3204 */
+ { 0, 0, NULL, NULL }, /* 3205 */
+ { 0, 0, NULL, NULL }, /* 3206 */
+ { 0, 0, NULL, NULL }, /* 3207 */
+ { 0, 0, NULL, NULL }, /* 3208 */
+ { 0, 0, NULL, NULL }, /* 3209 */
+ { 0, 0, NULL, NULL }, /* 3210 */
+ { 0, 0, NULL, NULL }, /* 3211 */
+ { 0, 0, NULL, NULL }, /* 3212 */
+ { 0, 0, NULL, NULL }, /* 3213 */
+ { 0, 0, NULL, NULL }, /* 3214 */
+ { 0, 0, NULL, NULL }, /* 3215 */
+ { 0, 0, NULL, NULL }, /* 3216 */
+ { 0, 0, NULL, NULL }, /* 3217 */
+ { 0, 0, NULL, NULL }, /* 3218 */
+ { 0, 0, NULL, NULL }, /* 3219 */
+ { 0, 0, NULL, NULL }, /* 3220 */
+ { 0, 0, NULL, NULL }, /* 3221 */
+ { 0, 0, NULL, NULL }, /* 3222 */
+ { 0, 0, NULL, NULL }, /* 3223 */
+ { 0, 0, NULL, NULL }, /* 3224 */
+ { 0, 0, NULL, NULL }, /* 3225 */
+ { 0, 0, NULL, NULL }, /* 3226 */
+ { 0, 0, NULL, NULL }, /* 3227 */
+ { 0, 0, NULL, NULL }, /* 3228 */
+ { 0, 0, NULL, NULL }, /* 3229 */
+ { 0, 0, NULL, NULL }, /* 3230 */
+ { 0, 0, NULL, NULL }, /* 3231 */
+ { 0, 0, NULL, NULL }, /* 3232 */
+ { 0, 0, NULL, NULL }, /* 3233 */
+ { 0, 0, NULL, NULL }, /* 3234 */
+ { 0, 0, NULL, NULL }, /* 3235 */
+ { 0, 0, NULL, NULL }, /* 3236 */
+ { 0, 0, NULL, NULL }, /* 3237 */
+ { 0, 0, NULL, NULL }, /* 3238 */
+ { 0, 0, NULL, NULL }, /* 3239 */
+ { 0, 0, NULL, NULL }, /* 3240 */
+ { 0, 0, NULL, NULL }, /* 3241 */
+ { 0, 0, NULL, NULL }, /* 3242 */
+ { 0, 0, NULL, NULL }, /* 3243 */
+ { 0, 0, NULL, NULL }, /* 3244 */
+ { 0, 0, NULL, NULL }, /* 3245 */
+ { 0, 0, NULL, NULL }, /* 3246 */
+ { 0, 0, NULL, NULL }, /* 3247 */
+ { 0, 0, NULL, NULL }, /* 3248 */
+ { 0, 0, NULL, NULL }, /* 3249 */
+ { 0, 0, NULL, NULL }, /* 3250 */
+ { 0, 0, NULL, NULL }, /* 3251 */
+ { 0, 0, NULL, NULL }, /* 3252 */
+ { 0, 0, NULL, NULL }, /* 3253 */
+ { 0, 0, NULL, NULL }, /* 3254 */
+ { 0, 0, NULL, NULL }, /* 3255 */
+ { 0, 0, NULL, NULL }, /* 3256 */
+ { 0, 0, NULL, NULL }, /* 3257 */
+ { 0, 0, NULL, NULL }, /* 3258 */
+ { 0, 0, NULL, NULL }, /* 3259 */
+ { 0, 0, printargs, "posix_netboot" }, /* 3260 */
+ { 0, 0, printargs, "posix_netunboot" }, /* 3261 */
+ { 0, 0, printargs, "posix_rdump" }, /* 3262 */
+ { 0, 0, printargs, "posix_setsid" }, /* 3263 */
+ { 0, 0, printargs, "posix_getmaxsig" }, /* 3264 */
+ { 0, 0, printargs, "posix_sigpending" }, /* 3265 */
+ { 0, 0, printargs, "posix_sigprocmask" }, /* 3266 */
+ { 0, 0, printargs, "posix_sigsuspend" }, /* 3267 */
+ { 0, 0, printargs, "posix_sigaction" }, /* 3268 */
+
+ [3269 ... 3999] = { }, /* 3999 */ /* end of POSIX */
diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h
new file mode 100644
index 0000000..69453b1
--- /dev/null
+++ b/linux/mips/syscallent-n32.h
@@ -0,0 +1,630 @@
+#if defined LINUX_MIPSN32
+ /* For an N32 strace decode the N32 64-bit syscalls. */
+ { 3, TD, sys_read, "read" }, /* 6000 */ /* start of Linux N32 */
+ { 3, TD, sys_write, "write" }, /* 6001 */
+ { 3, TD|TF, sys_open, "open" }, /* 6002 */
+ { 1, TD, sys_close, "close" }, /* 6003 */
+ { 2, TF, sys_stat64, "stat" }, /* 6004 */
+ { 2, TD, sys_fstat64, "fstat" }, /* 6005 */
+ { 2, TF, sys_lstat64, "lstat" }, /* 6006 */
+ { 3, TD, sys_poll, "poll" }, /* 6007 */
+ { 3, TD, sys_lseek, "lseek" }, /* 6008 */
+ { 6, TD|TM, sys_mmap, "mmap" }, /* 6009 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 6010 */
+ { 2, TM, sys_munmap, "munmap" }, /* 6011 */
+ { 1, TM, sys_brk, "brk" }, /* 6012 */
+ { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 6013 */
+ { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 6014 */
+ { 3, TD, sys_ioctl, "ioctl" }, /* 6015 */
+ { 4, TD, sys_pread, "pread64" }, /* 6016 */
+ { 4, TD, sys_pwrite, "pwrite64" }, /* 6017 */
+ { 3, TD, sys_readv, "readv" }, /* 6018 */
+ { 3, TD, sys_writev, "writev" }, /* 6019 */
+ { 2, TF, sys_access, "access" }, /* 6020 */
+ { 1, TD, sys_pipe, "pipe" }, /* 6021 */
+ { 5, TD, sys_select, "_newselect" }, /* 6022 */
+ { 0, 0, sys_sched_yield, "sched_yield" }, /* 6023 */
+ { 5, TM, sys_mremap, "mremap" }, /* 6024 */
+ { 3, TM, sys_msync, "msync" }, /* 6025 */
+ { 3, TM, sys_mincore, "mincore" }, /* 6026 */
+ { 3, TM, sys_madvise, "madvise" }, /* 6027 */
+ { 3, TI, sys_shmget, "shmget" }, /* 6028 */
+ { 3, TI, sys_shmat, "shmat" }, /* 6029 */
+ { 3, TI, sys_shmctl, "shmctl" }, /* 6030 */
+ { 1, TD, sys_dup, "dup" }, /* 6031 */
+ { 2, TD, sys_dup2, "dup2" }, /* 6032 */
+ { 0, TS, sys_pause, "pause" }, /* 6033 */
+ { 2, 0, sys_nanosleep, "nanosleep" }, /* 6034 */
+ { 2, 0, sys_getitimer, "getitimer" }, /* 6035 */
+ { 3, 0, sys_setitimer, "setitimer" }, /* 6036 */
+ { 1, 0, sys_alarm, "alarm" }, /* 6037 */
+ { 0, 0, sys_getpid, "getpid" }, /* 6038 */
+ { 4, TD|TN, sys_sendfile, "sendfile" }, /* 6039 */
+ { 3, TN, sys_socket, "socket" }, /* 6040 */
+ { 3, TN, sys_connect, "connect" }, /* 6041 */
+ { 3, TN, sys_accept, "accept" }, /* 6042 */
+ { 6, TN, sys_sendto, "sendto" }, /* 6043 */
+ { 6, TN, sys_recvfrom, "recvfrom" }, /* 6044 */
+ { 3, TN, sys_sendmsg, "sendmsg" }, /* 6045 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 6046 */
+ { 2, TN, sys_shutdown, "shutdown" }, /* 6047 */
+ { 3, TN, sys_bind, "bind" }, /* 6048 */
+ { 2, TN, sys_listen, "listen" }, /* 6049 */
+ { 3, TN, sys_getsockname, "getsockname" }, /* 6050 */
+ { 3, TN, sys_getpeername, "getpeername" }, /* 6051 */
+ { 4, TN, sys_socketpair, "socketpair" }, /* 6052 */
+ { 5, TN, sys_setsockopt, "setsockopt" }, /* 6053 */
+ { 5, TN, sys_getsockopt, "getsockopt" }, /* 6054 */
+ { 2, TP, sys_clone, "clone" }, /* 6055 */
+ { 0, TP, sys_fork, "fork" }, /* 6056 */
+ { 3, TF|TP, sys_execve, "execve" }, /* 6057 */
+ { 1, TP, sys_exit, "exit" }, /* 6058 */
+ { 4, TP, sys_wait4, "wait4" }, /* 6059 */
+ { 2, TS, sys_kill, "kill" }, /* 6060 */
+ { 1, 0, sys_uname, "uname" }, /* 6061 */
+ { 3, TI, sys_semget, "semget" }, /* 6062 */
+ { 3, TI, printargs, "semop" }, /* 6063 */
+ { 4, TI, sys_semctl, "semctl" }, /* 6064 */
+ { 1, TI, sys_shmdt, "shmdt" }, /* 6065 */
+ { 2, TI, sys_msgget, "msgget" }, /* 6066 */
+ { 4, TI, sys_msgsnd, "msgsnd" }, /* 6067 */
+ { 5, TI, sys_msgrcv, "msgrcv" }, /* 6068 */
+ { 3, TI, sys_msgctl, "msgctl" }, /* 6069 */
+ { 3, TD, sys_fcntl, "fcntl" }, /* 6070 */
+ { 2, TD, sys_flock, "flock" }, /* 6071 */
+ { 1, TD, sys_fsync, "fsync" }, /* 6072 */
+ { 1, TD, sys_fdatasync, "fdatasync" }, /* 6073 */
+ { 2, TF, sys_truncate64, "truncate" }, /* 6074 */
+ { 2, TD, sys_ftruncate64, "ftruncate" }, /* 6075 */
+ { 3, TD, sys_getdents, "getdents" }, /* 6076 */
+ { 2, TF, sys_getcwd, "getcwd" }, /* 6077 */
+ { 1, TF, sys_chdir, "chdir" }, /* 6078 */
+ { 1, TD, sys_fchdir, "fchdir" }, /* 6079 */
+ { 2, TF, sys_rename, "rename" }, /* 6080 */
+ { 2, TF, sys_mkdir, "mkdir" }, /* 6081 */
+ { 1, TF, sys_rmdir, "rmdir" }, /* 6082 */
+ { 2, TD|TF, sys_creat, "creat" }, /* 6083 */
+ { 2, TF, sys_link, "link" }, /* 6084 */
+ { 1, TF, sys_unlink, "unlink" }, /* 6085 */
+ { 2, TF, sys_symlink, "symlink" }, /* 6086 */
+ { 3, TF, sys_readlink, "readlink" }, /* 6087 */
+ { 2, TF, sys_chmod, "chmod" }, /* 6088 */
+ { 2, TD, sys_fchmod, "fchmod" }, /* 6089 */
+ { 3, TF, sys_chown, "chown" }, /* 6090 */
+ { 3, TD, sys_fchown, "fchown" }, /* 6091 */
+ { 3, TF, sys_chown, "lchown" }, /* 6092 */
+ { 1, 0, sys_umask, "umask" }, /* 6093 */
+ { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 6094 */
+ { 2, 0, sys_getrlimit, "getrlimit" }, /* 6095 */
+ { 2, 0, sys_getrusage, "getrusage" }, /* 6096 */
+ { 1, 0, sys_sysinfo, "sysinfo" }, /* 6097 */
+ { 1, 0, sys_times, "times" }, /* 6098 */
+ { 4, 0, sys_ptrace, "ptrace" }, /* 6099 */
+ { 0, NF, sys_getuid, "getuid" }, /* 6100 */
+ { 3, 0, sys_syslog, "syslog" }, /* 6101 */
+ { 0, NF, sys_getgid, "getgid" }, /* 6102 */
+ { 1, 0, sys_setuid, "setuid" }, /* 6103 */
+ { 1, 0, sys_setgid, "setgid" }, /* 6104 */
+ { 0, NF, sys_geteuid, "geteuid" }, /* 6105 */
+ { 0, NF, sys_getegid, "getegid" }, /* 6106 */
+ { 2, 0, sys_setpgid, "setpgid" }, /* 6107 */
+ { 0, 0, sys_getppid, "getppid" }, /* 6108 */
+ { 0, 0, sys_getpgrp, "getpgrp" }, /* 6109 */
+ { 0, 0, sys_setsid, "setsid" }, /* 6110 */
+ { 2, 0, sys_setreuid, "setreuid" }, /* 6111 */
+ { 2, 0, sys_setregid, "setregid" }, /* 6112 */
+ { 2, 0, sys_getgroups, "getgroups" }, /* 6113 */
+ { 2, 0, sys_setgroups, "setgroups" }, /* 6114 */
+ { 3, 0, sys_setresuid, "setresuid" }, /* 6115 */
+ { 3, 0, sys_getresuid, "getresuid" }, /* 6116 */
+ { 3, 0, sys_setresgid, "setresgid" }, /* 6117 */
+ { 3, 0, sys_getresgid, "getresgid" }, /* 6118 */
+ { 0, 0, sys_getpgid, "getpgid" }, /* 6119 */
+ { 1, NF, sys_setfsuid, "setfsuid" }, /* 6120 */
+ { 1, NF, sys_setfsgid, "setfsgid" }, /* 6121 */
+ { 1, 0, sys_getsid, "getsid" }, /* 6122 */
+ { 2, 0, sys_capget, "capget" }, /* 6123 */
+ { 2, 0, sys_capset, "capset" }, /* 6124 */
+ { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 6125 */
+ { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait"},/* 6126 */
+ { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"},/* 6127 */
+ { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 6128 */
+ { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 6129 */
+ { 2, TF, sys_utime, "utime" }, /* 6130 */
+ { 3, TF, sys_mknod, "mknod" }, /* 6131 */
+ { 1, 0, sys_personality, "personality" }, /* 6132 */
+ { 2, 0, sys_ustat, "ustat" }, /* 6133 */
+ { 3, TF, sys_statfs, "statfs" }, /* 6134 */
+ { 3, TD, sys_fstatfs, "fstatfs" }, /* 6135 */
+ { 5, 0, sys_sysfs, "sysfs" }, /* 6136 */
+ { 2, 0, sys_getpriority, "getpriority" }, /* 6137 */
+ { 3, 0, sys_setpriority, "setpriority" }, /* 6138 */
+ { 2, 0, sys_sched_setparam, "sched_setparam"}, /* 6139 */
+ { 2, 0, sys_sched_getparam, "sched_getparam"}, /* 6140 */
+ { 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 6141 */
+ { 1, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 6142 */
+ { 1, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 6143 */
+ { 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 6144 */
+ { 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 6145 */
+ { 2, TM, sys_mlock, "mlock" }, /* 6146 */
+ { 2, TM, sys_munlock, "munlock" }, /* 6147 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 6148 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 6149 */
+ { 0, 0, sys_vhangup, "vhangup" }, /* 6150 */
+ { 2, TF, sys_pivotroot, "pivot_root" }, /* 6151 */
+ { 1, 0, sys_sysctl, "_sysctl" }, /* 6152 */
+ { 5, 0, sys_prctl, "prctl" }, /* 6153 */
+ { 1, 0, sys_adjtimex, "adjtimex" }, /* 6154 */
+ { 2, 0, sys_setrlimit, "setrlimit" }, /* 6155 */
+ { 1, TF, sys_chroot, "chroot" }, /* 6156 */
+ { 0, 0, sys_sync, "sync" }, /* 6157 */
+ { 1, TF, sys_acct, "acct" }, /* 6158 */
+ { 2, 0, sys_settimeofday, "settimeofday" }, /* 6159 */
+ { 5, TF, sys_mount, "mount" }, /* 6160 */
+ { 2, TF, sys_umount2, "umount2" }, /* 6161 */
+ { 2, TF, sys_swapon, "swapon" }, /* 6162 */
+ { 1, TF, sys_swapoff, "swapoff" }, /* 6163 */
+ { 4, 0, sys_reboot, "reboot" }, /* 6164 */
+ { 2, 0, sys_sethostname, "sethostname" }, /* 6165 */
+ { 2, 0, sys_setdomainname, "setdomainname" }, /* 6166 */
+ { 2, 0, sys_create_module, "create_module" }, /* 6167 */
+ { 4, 0, sys_init_module, "init_module" }, /* 6168 */
+ { 1, 0, sys_delete_module, "delete_module" }, /* 6169 */
+ { 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 6170 */
+ { 5, 0, sys_query_module, "query_module" }, /* 6171 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 6172 */
+ { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 6173 */
+ { 5, TN, printargs, "getpmsg" }, /* 6174 */
+ { 5, TN, printargs, "putpmsg" }, /* 6175 */
+ { 0, 0, sys_afs_syscall, "afs_syscall" }, /* 6176 */
+ { 0, 0, printargs, "reserved177" }, /* 6177 */
+ { 0, 0, sys_gettid, "gettid" }, /* 6178 */
+ { 3, TD, sys_readahead, "readahead" }, /* 6179 */
+ { 5, TF, sys_setxattr, "setxattr" }, /* 6180 */
+ { 5, TF, sys_setxattr, "lsetxattr" }, /* 6181 */
+ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 6182 */
+ { 4, TF, sys_getxattr, "getxattr" }, /* 6183 */
+ { 4, TF, sys_getxattr, "lgetxattr" }, /* 6184 */
+ { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 6185 */
+ { 3, TF, sys_listxattr, "listxattr" }, /* 6186 */
+ { 3, TF, sys_listxattr, "llistxattr" }, /* 6187 */
+ { 3, TD, sys_flistxattr, "flistxattr" }, /* 6188 */
+ { 2, TF, sys_removexattr, "removexattr" }, /* 6189 */
+ { 2, TF, sys_removexattr, "lremovexattr" }, /* 6190 */
+ { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 6191 */
+ { 2, TS, sys_kill, "tkill" }, /* 6192 */
+ { 1, 0, sys_time, "time" }, /* 6193 */
+ { 6, 0, sys_futex, "futex" }, /* 6194 */
+ { 3, 0, sys_sched_setaffinity, "sched_setaffinity"}, /* 6195 */
+ { 3, 0, sys_sched_getaffinity, "sched_getaffinity"}, /* 6196 */
+ { 3, 0, printargs, "cacheflush" }, /* 6197 */
+ { 3, 0, printargs, "cachectl" }, /* 6198 */
+ { 4, 0, sys_sysmips, "sysmips" }, /* 6199 */
+ { 2, 0, sys_io_setup, "io_setup" }, /* 6200 */
+ { 1, 0, sys_io_destroy, "io_destroy" }, /* 6201 */
+ { 5, 0, sys_io_getevents, "io_getevents" }, /* 6202 */
+ { 3, 0, sys_io_submit, "io_submit" }, /* 6203 */
+ { 3, 0, sys_io_cancel, "io_cancel" }, /* 6204 */
+ { 1, TP, sys_exit, "exit_group" }, /* 6205 */
+ { 3, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 6206 */
+ { 1, TD, sys_epoll_create, "epoll_create" }, /* 6207 */
+ { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 6208 */
+ { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 6209 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages" }, /* 6210 */
+ { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 6211 */
+ { 3, TD, sys_fcntl, "fcntl64" }, /* 6212 */
+ { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 6213 */
+ { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 6214 */
+ { 5, TI, sys_semtimedop, "semtimedop" }, /* 6215 */
+ { 4, TD, sys_fadvise64, "fadvise64" }, /* 6216 */
+ { 3, TF, sys_statfs64, "statfs64" }, /* 6217 */
+ { 3, TD, sys_fstatfs64, "fstatfs64" }, /* 6218 */
+ { 4, TD|TN, sys_sendfile64, "sendfile64" }, /* 6219 */
+ { 3, 0, sys_timer_create, "timer_create" }, /* 6220 */
+ { 4, 0, sys_timer_settime, "timer_settime" }, /* 6221 */
+ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 6222 */
+ { 1, 0, sys_timer_getoverrun, "timer_getoverrun" }, /* 6223 */
+ { 1, 0, sys_timer_delete, "timer_delete" }, /* 6224 */
+ { 2, 0, sys_clock_settime, "clock_settime" }, /* 6225 */
+ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 6226 */
+ { 2, 0, sys_clock_getres, "clock_getres" }, /* 6227 */
+ { 4, 0, sys_clock_nanosleep, "clock_nanosleep" }, /* 6228 */
+ { 3, TS, sys_tgkill, "tgkill" }, /* 6229 */
+ { 2, TF, sys_utimes, "utimes" }, /* 6230 */
+ { 6, TM, sys_mbind, "mbind" }, /* 6231 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 6232 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 6233 */
+ { 4, 0, sys_mq_open, "mq_open" }, /* 6234 */
+ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 6235 */
+ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 6236 */
+ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 6237 */
+ { 2, 0, sys_mq_notify, "mq_notify" }, /* 6238 */
+ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 6239 */
+ { 5, 0, sys_vserver, "vserver" }, /* 6240 */
+ { 5, TP, sys_waitid, "waitid" }, /* 6241 */
+ [6242] = { },
+ { 5, 0, sys_add_key, "add_key" }, /* 6243 */
+ { 4, 0, sys_request_key, "request_key" }, /* 6244 */
+ { 5, 0, sys_keyctl, "keyctl" }, /* 6245 */
+ { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 6246 */
+ { 0, TD, sys_inotify_init, "inotify_init" }, /* 6247 */
+ { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 6248 */
+ { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 6249 */
+ { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 6250 */
+ { 4, TD|TF, sys_openat, "openat" }, /* 6251 */
+ { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 6252 */
+ { 4, TD|TF, sys_mknodat, "mknodat" }, /* 6253 */
+ { 5, TD|TF, sys_fchownat, "fchownat" }, /* 6254 */
+ { 3, TD|TF, sys_futimesat, "futimesat" }, /* 6255 */
+ { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 6256 */
+ { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 6257 */
+ { 4, TD|TF, sys_renameat, "renameat" }, /* 6258 */
+ { 5, TD|TF, sys_linkat, "linkat" }, /* 6259 */
+ { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 6260 */
+ { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 6261 */
+ { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 6262 */
+ { 3, TD|TF, sys_faccessat, "faccessat" }, /* 6263 */
+ { 6, TD, sys_pselect6, "pselect6" }, /* 6264 */
+ { 5, TD, sys_ppoll, "ppoll" }, /* 6265 */
+ { 1, TP, sys_unshare, "unshare" }, /* 6266 */
+ { 6, TD, sys_splice, "splice" }, /* 6267 */
+ { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 6268 */
+ { 4, TD, sys_tee, "tee" }, /* 6269 */
+ { 4, TD, sys_vmsplice, "vmsplice" }, /* 6270 */
+ { 6, TM, printargs, "move_pages" }, /* 6271 */
+ { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 6272 */
+ { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 6273 */
+ { 4, 0, sys_kexec_load, "kexec_load" }, /* 6274 */
+ { 3, 0, sys_getcpu, "getcpu" }, /* 6275 */
+ { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 6276 */
+ { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 6277 */
+ { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 6278 */
+ { 4, TD|TF, sys_utimensat, "utimensat" }, /* 6279 */
+ { 3, TD|TS, sys_signalfd, "signalfd" }, /* 6280 */
+ { 4, TD, sys_timerfd, "timerfd" }, /* 6281 */
+ { 1, TD, sys_eventfd, "eventfd" }, /* 6282 */
+ { 4, TD, sys_fallocate, "fallocate" }, /* 6283 */
+ { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 6284 */
+ { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 6285 */
+ { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 6286 */
+ { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 6287 */
+ { 2, TD, sys_eventfd2, "eventfd2" }, /* 6288 */
+ { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 6289 */
+ { 3, TD, sys_dup3, "dup3" }, /* 6290 */
+ { 2, TD, sys_pipe2, "pipe2" }, /* 6291 */
+ { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 6292 */
+ { 4, TD, sys_preadv, "preadv" }, /* 6293 */
+ { 4, TD, sys_pwritev, "pwritev" }, /* 6294 */
+ { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 6295 */
+ { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 6296 */
+ { 4, TN, sys_accept4, "accept4" }, /* 6297 */
+ { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 6298 */
+ { 3, TD, sys_getdents64, "getdents64" }, /* 6299 */
+ { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 6300 */
+ { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 6301 */
+ { 4, 0, sys_prlimit64, "prlimit64" }, /* 6302 */
+ { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at"}, /* 6303 */
+ { 3, TD, sys_open_by_handle_at, "open_by_handle_at"}, /* 6304 */
+ { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 6305 */
+ { 1, TD, sys_syncfs, "syncfs" }, /* 6306 */
+ { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 6307 */
+ { 2, TD, sys_setns, "setns" }, /* 6308 */
+ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 6309 */
+ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 6310 */
+ { 5, 0, sys_kcmp, "kcmp" }, /* 6311 */
+ { 3, TD, sys_finit_module, "finit_module" }, /* 6312 */
+#else
+ { 0, 0, printargs, "n32_read" }, /* 6000 */
+ { 0, 0, printargs, "n32_write" }, /* 6001 */
+ { 0, 0, printargs, "n32_open" }, /* 6002 */
+ { 0, 0, printargs, "n32_close" }, /* 6003 */
+ { 0, 0, printargs, "n32_stat" }, /* 6004 */
+ { 0, 0, printargs, "n32_fstat" }, /* 6005 */
+ { 0, 0, printargs, "n32_lstat" }, /* 6006 */
+ { 0, 0, printargs, "n32_poll" }, /* 6007 */
+ { 0, 0, printargs, "n32_lseek" }, /* 6008 */
+ { 0, TD|TM, printargs, "n32_mmap" }, /* 6009 */
+ { 0, TM, printargs, "n32_mprotect" }, /* 6010 */
+ { 0, TM, printargs, "n32_munmap" }, /* 6011 */
+ { 0, TM, printargs, "n32_brk" }, /* 6012 */
+ { 0, 0, printargs, "n32_rt_sigaction" }, /* 6013 */
+ { 0, 0, printargs, "n32_rt_sigprocmask" }, /* 6014 */
+ { 0, 0, printargs, "n32_ioctl" }, /* 6015 */
+ { 0, 0, printargs, "n32_pread64" }, /* 6016 */
+ { 0, 0, printargs, "n32_pwrite64" }, /* 6017 */
+ { 0, 0, printargs, "n32_readv" }, /* 6018 */
+ { 0, 0, printargs, "n32_writev" }, /* 6019 */
+ { 0, 0, printargs, "n32_access" }, /* 6020 */
+ { 0, 0, printargs, "n32_pipe" }, /* 6021 */
+ { 0, 0, printargs, "n32__newselect" }, /* 6022 */
+ { 0, 0, printargs, "n32_sched_yield" }, /* 6023 */
+ { 0, TM, printargs, "n32_mremap" }, /* 6024 */
+ { 0, TM, printargs, "n32_msync" }, /* 6025 */
+ { 0, TM, printargs, "n32_mincore" }, /* 6026 */
+ { 0, TM, printargs, "n32_madvise" }, /* 6027 */
+ { 0, 0, printargs, "n32_shmget" }, /* 6028 */
+ { 0, 0, printargs, "n32_shmat" }, /* 6029 */
+ { 0, 0, printargs, "n32_shmctl" }, /* 6030 */
+ { 0, 0, printargs, "n32_dup" }, /* 6031 */
+ { 0, 0, printargs, "n32_dup2" }, /* 6032 */
+ { 0, 0, printargs, "n32_pause" }, /* 6033 */
+ { 0, 0, printargs, "n32_nanosleep" }, /* 6034 */
+ { 0, 0, printargs, "n32_getitimer" }, /* 6035 */
+ { 0, 0, printargs, "n32_setitimer" }, /* 6036 */
+ { 0, 0, printargs, "n32_alarm" }, /* 6037 */
+ { 0, 0, printargs, "n32_getpid" }, /* 6038 */
+ { 0, 0, printargs, "n32_sendfile" }, /* 6039 */
+ { 0, 0, printargs, "n32_socket" }, /* 6040 */
+ { 0, 0, printargs, "n32_connect" }, /* 6041 */
+ { 0, 0, printargs, "n32_accept" }, /* 6042 */
+ { 0, 0, printargs, "n32_sendto" }, /* 6043 */
+ { 0, 0, printargs, "n32_recvfrom" }, /* 6044 */
+ { 0, 0, printargs, "n32_sendmsg" }, /* 6045 */
+ { 0, 0, printargs, "n32_recvmsg" }, /* 6046 */
+ { 0, 0, printargs, "n32_shutdown" }, /* 6047 */
+ { 0, 0, printargs, "n32_bind" }, /* 6048 */
+ { 0, 0, printargs, "n32_listen" }, /* 6049 */
+ { 0, 0, printargs, "n32_getsockname" }, /* 6050 */
+ { 0, 0, printargs, "n32_getpeername" }, /* 6051 */
+ { 0, 0, printargs, "n32_socketpair" }, /* 6052 */
+ { 0, 0, printargs, "n32_setsockopt" }, /* 6053 */
+ { 0, 0, printargs, "n32_getsockopt" }, /* 6054 */
+ { 0, 0, printargs, "n32_clone" }, /* 6055 */
+ { 0, 0, printargs, "n32_fork" }, /* 6056 */
+ { 0, 0, printargs, "n32_execve" }, /* 6057 */
+ { 0, 0, printargs, "n32_exit" }, /* 6058 */
+ { 0, 0, printargs, "n32_wait4" }, /* 6059 */
+ { 0, 0, printargs, "n32_kill" }, /* 6060 */
+ { 0, 0, printargs, "n32_uname" }, /* 6061 */
+ { 0, 0, printargs, "n32_semget" }, /* 6062 */
+ { 0, 0, printargs, "n32_semop" }, /* 6063 */
+ { 0, 0, printargs, "n32_semctl" }, /* 6064 */
+ { 0, 0, printargs, "n32_shmdt" }, /* 6065 */
+ { 0, 0, printargs, "n32_msgget" }, /* 6066 */
+ { 0, 0, printargs, "n32_msgsnd" }, /* 6067 */
+ { 0, 0, printargs, "n32_msgrcv" }, /* 6068 */
+ { 0, 0, printargs, "n32_msgctl" }, /* 6069 */
+ { 0, 0, printargs, "n32_fcntl" }, /* 6070 */
+ { 0, 0, printargs, "n32_flock" }, /* 6071 */
+ { 0, 0, printargs, "n32_fsync" }, /* 6072 */
+ { 0, 0, printargs, "n32_fdatasync" }, /* 6073 */
+ { 0, 0, printargs, "n32_truncate" }, /* 6074 */
+ { 0, 0, printargs, "n32_ftruncate" }, /* 6075 */
+ { 0, 0, printargs, "n32_getdents" }, /* 6076 */
+ { 0, 0, printargs, "n32_getcwd" }, /* 6077 */
+ { 0, 0, printargs, "n32_chdir" }, /* 6078 */
+ { 0, 0, printargs, "n32_fchdir" }, /* 6079 */
+ { 0, 0, printargs, "n32_rename" }, /* 6080 */
+ { 0, 0, printargs, "n32_mkdir" }, /* 6081 */
+ { 0, 0, printargs, "n32_rmdir" }, /* 6082 */
+ { 0, 0, printargs, "n32_creat" }, /* 6083 */
+ { 0, 0, printargs, "n32_link" }, /* 6084 */
+ { 0, 0, printargs, "n32_unlink" }, /* 6085 */
+ { 0, 0, printargs, "n32_symlink" }, /* 6086 */
+ { 0, 0, printargs, "n32_readlink" }, /* 6087 */
+ { 0, 0, printargs, "n32_chmod" }, /* 6088 */
+ { 0, 0, printargs, "n32_fchmod" }, /* 6089 */
+ { 0, 0, printargs, "n32_chown" }, /* 6090 */
+ { 0, 0, printargs, "n32_fchown" }, /* 6091 */
+ { 0, 0, printargs, "n32_lchown" }, /* 6092 */
+ { 0, 0, printargs, "n32_umask" }, /* 6093 */
+ { 0, 0, printargs, "n32_gettimeofday" }, /* 6094 */
+ { 0, 0, printargs, "n32_getrlimit" }, /* 6095 */
+ { 0, 0, printargs, "n32_getrusage" }, /* 6096 */
+ { 0, 0, printargs, "n32_sysinfo" }, /* 6097 */
+ { 0, 0, printargs, "n32_times" }, /* 6098 */
+ { 0, 0, printargs, "n32_ptrace" }, /* 6099 */
+ { 0, 0, printargs, "n32_getuid" }, /* 6100 */
+ { 0, 0, printargs, "n32_syslog" }, /* 6101 */
+ { 0, 0, printargs, "n32_getgid" }, /* 6102 */
+ { 0, 0, printargs, "n32_setuid" }, /* 6103 */
+ { 0, 0, printargs, "n32_setgid" }, /* 6104 */
+ { 0, 0, printargs, "n32_geteuid" }, /* 6105 */
+ { 0, 0, printargs, "n32_getegid" }, /* 6106 */
+ { 0, 0, printargs, "n32_setpgid" }, /* 6107 */
+ { 0, 0, printargs, "n32_getppid" }, /* 6108 */
+ { 0, 0, printargs, "n32_getpgrp" }, /* 6109 */
+ { 0, 0, printargs, "n32_setsid" }, /* 6110 */
+ { 0, 0, printargs, "n32_setreuid" }, /* 6111 */
+ { 0, 0, printargs, "n32_setregid" }, /* 6112 */
+ { 0, 0, printargs, "n32_getgroups" }, /* 6113 */
+ { 0, 0, printargs, "n32_setgroups" }, /* 6114 */
+ { 0, 0, printargs, "n32_setresuid" }, /* 6115 */
+ { 0, 0, printargs, "n32_getresuid" }, /* 6116 */
+ { 0, 0, printargs, "n32_setresgid" }, /* 6117 */
+ { 0, 0, printargs, "n32_getresgid" }, /* 6118 */
+ { 0, 0, printargs, "n32_getpgid" }, /* 6119 */
+ { 0, 0, printargs, "n32_setfsuid" }, /* 6120 */
+ { 0, 0, printargs, "n32_setfsgid" }, /* 6121 */
+ { 0, 0, printargs, "n32_getsid" }, /* 6122 */
+ { 0, 0, printargs, "n32_capget" }, /* 6123 */
+ { 0, 0, printargs, "n32_capset" }, /* 6124 */
+ { 0, 0, printargs, "n32_rt_sigpending" }, /* 6125 */
+ { 0, 0, printargs, "n32_rt_sigtimedwait" }, /* 6126 */
+ { 0, 0, printargs, "n32_rt_sigqueueinfo" }, /* 6127 */
+ { 0, 0, printargs, "n32_rt_sigsuspend" }, /* 6128 */
+ { 0, 0, printargs, "n32_sigaltstack" }, /* 6129 */
+ { 0, 0, printargs, "n32_utime" }, /* 6130 */
+ { 0, 0, printargs, "n32_mknod" }, /* 6131 */
+ { 0, 0, printargs, "n32_personality" }, /* 6132 */
+ { 0, 0, printargs, "n32_ustat" }, /* 6133 */
+ { 0, 0, printargs, "n32_statfs" }, /* 6134 */
+ { 0, 0, printargs, "n32_fstatfs" }, /* 6135 */
+ { 0, 0, printargs, "n32_sysfs" }, /* 6136 */
+ { 0, 0, printargs, "n32_getpriority" }, /* 6137 */
+ { 0, 0, printargs, "n32_setpriority" }, /* 6138 */
+ { 0, 0, printargs, "n32_sched_setparam" }, /* 6139 */
+ { 0, 0, printargs, "n32_sched_getparam" }, /* 6140 */
+ { 0, 0, printargs, "n32_sched_setscheduler"}, /* 6141 */
+ { 0, 0, printargs, "n32_sched_getscheduler"}, /* 6142 */
+ { 0, 0, printargs, "n32_sched_get_priority_max"}, /* 6143 */
+ { 0, 0, printargs, "n32_sched_get_priority_min"}, /* 6144 */
+ { 0, 0, printargs, "n32_sched_rr_get_interval"}, /* 6145 */
+ { 0, TM, printargs, "n32_mlock" }, /* 6146 */
+ { 0, TM, printargs, "n32_munlock" }, /* 6147 */
+ { 0, TM, printargs, "n32_mlockall" }, /* 6148 */
+ { 0, TM, printargs, "n32_munlockall" }, /* 6149 */
+ { 0, 0, printargs, "n32_vhangup" }, /* 6150 */
+ { 0, 0, printargs, "n32_pivot_root" }, /* 6151 */
+ { 0, 0, printargs, "n32__sysctl" }, /* 6152 */
+ { 0, 0, printargs, "n32_prctl" }, /* 6153 */
+ { 0, 0, printargs, "n32_adjtimex" }, /* 6154 */
+ { 0, 0, printargs, "n32_setrlimit" }, /* 6155 */
+ { 0, 0, printargs, "n32_chroot" }, /* 6156 */
+ { 0, 0, printargs, "n32_sync" }, /* 6157 */
+ { 0, 0, printargs, "n32_acct" }, /* 6158 */
+ { 0, 0, printargs, "n32_settimeofday" }, /* 6159 */
+ { 0, 0, printargs, "n32_mount" }, /* 6160 */
+ { 0, 0, printargs, "n32_umount2" }, /* 6161 */
+ { 0, 0, printargs, "n32_swapon" }, /* 6162 */
+ { 0, 0, printargs, "n32_swapoff" }, /* 6163 */
+ { 0, 0, printargs, "n32_reboot" }, /* 6164 */
+ { 0, 0, printargs, "n32_sethostname" }, /* 6165 */
+ { 0, 0, printargs, "n32_setdomainname" }, /* 6166 */
+ { 0, 0, printargs, "n32_create_module" }, /* 6167 */
+ { 0, 0, printargs, "n32_init_module" }, /* 6168 */
+ { 0, 0, printargs, "n32_delete_module" }, /* 6169 */
+ { 0, 0, printargs, "n32_get_kernel_syms" }, /* 6170 */
+ { 0, 0, printargs, "n32_query_module" }, /* 6171 */
+ { 0, TF, printargs, "n32_quotactl" }, /* 6172 */
+ { 0, 0, printargs, "n32_nfsservctl" }, /* 6173 */
+ { 0, 0, printargs, "n32_getpmsg" }, /* 6174 */
+ { 0, 0, printargs, "n32_putpmsg" }, /* 6175 */
+ { 0, 0, printargs, "n32_afs_syscall" }, /* 6176 */
+ { 0, 0, printargs, "n32_reserved177" }, /* 6177 */
+ { 0, 0, printargs, "n32_gettid" }, /* 6178 */
+ { 0, 0, printargs, "n32_readahead" }, /* 6179 */
+ { 0, 0, printargs, "n32_setxattr" }, /* 6180 */
+ { 0, 0, printargs, "n32_lsetxattr" }, /* 6181 */
+ { 0, 0, printargs, "n32_fsetxattr" }, /* 6182 */
+ { 0, 0, printargs, "n32_getxattr" }, /* 6183 */
+ { 0, 0, printargs, "n32_lgetxattr" }, /* 6184 */
+ { 0, 0, printargs, "n32_fgetxattr" }, /* 6185 */
+ { 0, 0, printargs, "n32_listxattr" }, /* 6186 */
+ { 0, 0, printargs, "n32_llistxattr" }, /* 6187 */
+ { 0, 0, printargs, "n32_flistxattr" }, /* 6188 */
+ { 0, 0, printargs, "n32_removexattr" }, /* 6189 */
+ { 0, 0, printargs, "n32_lremovexattr" }, /* 6190 */
+ { 0, 0, printargs, "n32_fremovexattr" }, /* 6191 */
+ { 0, 0, printargs, "n32_tkill" }, /* 6192 */
+ { 0, 0, printargs, "n32_time" }, /* 6193 */
+ { 0, 0, printargs, "n32_futex" }, /* 6194 */
+ { 0, 0, printargs, "n32_sched_setaffinity" }, /* 6195 */
+ { 0, 0, printargs, "n32_sched_getaffinity" }, /* 6196 */
+ { 0, 0, printargs, "n32_cacheflush" }, /* 6197 */
+ { 0, 0, printargs, "n32_cachectl" }, /* 6198 */
+ { 0, 0, printargs, "n32_sysmips" }, /* 6199 */
+ { 0, 0, printargs, "n32_io_setup" }, /* 6200 */
+ { 0, 0, printargs, "n32_io_destroy" }, /* 6201 */
+ { 0, 0, printargs, "n32_io_getevents" }, /* 6202 */
+ { 0, 0, printargs, "n32_io_submit" }, /* 6203 */
+ { 0, 0, printargs, "n32_io_cancel" }, /* 6204 */
+ { 1, TP, printargs, "n32_exit_group" }, /* 6205 */
+ { 0, 0, printargs, "n32_lookup_dcookie" }, /* 6206 */
+ { 0, 0, printargs, "n32_epoll_create" }, /* 6207 */
+ { 0, 0, printargs, "n32_epoll_ctl" }, /* 6208 */
+ { 0, 0, printargs, "n32_epoll_wait" }, /* 6209 */
+ { 0, TM, printargs, "n32_remap_file_pages" }, /* 6210 */
+ { 0, 0, printargs, "n32_rt_sigreturn" }, /* 6211 */
+ { 0, 0, printargs, "n32_fcntl64" }, /* 6212 */
+ { 0, 0, printargs, "n32_set_tid_address" }, /* 6213 */
+ { 0, 0, printargs, "n32_restart_syscall" }, /* 6214 */
+ { 0, 0, printargs, "n32_semtimedop" }, /* 6215 */
+ { 0, 0, printargs, "n32_fadvise64" }, /* 6216 */
+ { 0, 0, printargs, "n32_statfs64" }, /* 6217 */
+ { 0, 0, printargs, "n32_fstatfs64" }, /* 6218 */
+ { 0, 0, printargs, "n32_sendfile64" }, /* 6219 */
+ { 3, 0, printargs, "n32_timer_create" }, /* 6220 */
+ { 4, 0, printargs, "n32_timer_settime" }, /* 6221 */
+ { 2, 0, printargs, "n32_timer_gettime" }, /* 6222 */
+ { 1, 0, printargs, "n32_timer_getoverrun" }, /* 6223 */
+ { 1, 0, printargs, "n32_timer_delete" }, /* 6224 */
+ { 2, 0, printargs, "n32_clock_settime" }, /* 6225 */
+ { 2, 0, printargs, "n32_clock_gettime" }, /* 6226 */
+ { 2, 0, printargs, "n32_clock_getres" }, /* 6227 */
+ { 4, 0, printargs, "n32_clock_nanosleep" }, /* 6228 */
+ { 3, 0, printargs, "n32_tgkill" }, /* 6229 */
+ { 2, 0, printargs, "n32_utimes" }, /* 6230 */
+ { 6, TM, printargs, "n32_mbind" }, /* 6231 */
+ { 5, TM, printargs, "n32_get_mempolicy" }, /* 6232 */
+ { 3, TM, printargs, "n32_set_mempolicy" }, /* 6233 */
+ { 4, 0, printargs, "n32_mq_open" }, /* 6234 */
+ { 1, 0, printargs, "n32_mq_unlink" }, /* 6235 */
+ { 5, 0, printargs, "n32_mq_timedsend" }, /* 6236 */
+ { 5, 0, printargs, "n32_mq_timedreceive" }, /* 6237 */
+ { 2, 0, printargs, "n32_mq_notify" }, /* 6238 */
+ { 3, 0, printargs, "n32_mq_getsetattr" }, /* 6239 */
+ { 5, 0, printargs, "n32_vserver" }, /* 6240 */
+ { 5, TP, printargs, "n32_waitid" }, /* 6241 */
+ { 0, 0, printargs, "n32_SYS_6242" }, /* 6242 */
+ { 5, 0, printargs, "n32_add_key" }, /* 6243 */
+ { 4, 0, printargs, "n32_request_key" }, /* 6244 */
+ { 5, 0, printargs, "n32_keyctl" }, /* 6245 */
+ { 1, 0, printargs, "n32_set_thread_area" }, /* 6246 */
+ { 0, TD, printargs, "n32_inotify_init" }, /* 6247 */
+ { 3, TD, printargs, "n32_inotify_add_watch" }, /* 6248 */
+ { 2, TD, printargs, "n32_inotify_rm_watch" }, /* 6249 */
+ { 4, TM, printargs, "n32_migrate_pages" }, /* 6250 */
+ { 4, TD|TF, printargs, "n32_openat" }, /* 6251 */
+ { 3, TD|TF, printargs, "n32_mkdirat" }, /* 6252 */
+ { 4, TD|TF, printargs, "n32_mknodat" }, /* 6253 */
+ { 5, TD|TF, printargs, "n32_fchownat" }, /* 6254 */
+ { 3, TD|TF, printargs, "n32_futimesat" }, /* 6255 */
+ { 4, TD|TF, printargs, "n32_newfstatat" }, /* 6256 */
+ { 3, TD|TF, printargs, "n32_unlinkat" }, /* 6257 */
+ { 4, TD|TF, printargs, "n32_renameat" }, /* 6258 */
+ { 5, TD|TF, printargs, "n32_linkat" }, /* 6259 */
+ { 3, TD|TF, printargs, "n32_symlinkat" }, /* 6260 */
+ { 4, TD|TF, printargs, "n32_readlinkat" }, /* 6261 */
+ { 3, TD|TF, printargs, "n32_fchmodat" }, /* 6262 */
+ { 3, TD|TF, printargs, "n32_faccessat" }, /* 6263 */
+ { 6, TD, printargs, "n32_pselect6" }, /* 6264 */
+ { 5, TD, printargs, "n32_ppoll" }, /* 6265 */
+ { 1, TP, printargs, "n32_unshare" }, /* 6266 */
+ { 6, TD, printargs, "n32_splice" }, /* 6267 */
+ { 4, TD, printargs, "n32_sync_file_range" }, /* 6268 */
+ { 4, TD, printargs, "n32_tee" }, /* 6269 */
+ { 4, TD, printargs, "n32_vmsplice" }, /* 6270 */
+ { 6, TM, printargs, "n32_move_pages" }, /* 6271 */
+ { 2, 0, printargs, "n32_set_robust_list" }, /* 6272 */
+ { 3, 0, printargs, "n32_get_robust_list" }, /* 6273 */
+ { 5, 0, printargs, "n32_kexec_load" }, /* 6274 */
+ { 3, 0, printargs, "n32_getcpu" }, /* 6275 */
+ { 5, TD, printargs, "n32_epoll_pwait" }, /* 6276 */
+ { 3, 0, printargs, "n32_ioprio_set" }, /* 6277 */
+ { 2, 0, printargs, "n32_ioprio_get" }, /* 6278 */
+ { 4, TD|TF, printargs, "n32_utimensat" }, /* 6279 */
+ { 3, TD|TS, printargs, "n32_signalfd" }, /* 6280 */
+ { 4, TD, printargs, "n32_timerfd" }, /* 6281 */
+ { 1, TD, printargs, "n32_eventfd" }, /* 6282 */
+ { 6, TD, printargs, "n32_fallocate" }, /* 6283 */
+ { 2, TD, printargs, "n32_timerfd_create" }, /* 6284 */
+ { 2, TD, printargs, "n32_timerfd_gettime" }, /* 6285 */
+ { 4, TD, printargs, "n32_timerfd_settime" }, /* 6286 */
+ { 4, TD|TS, printargs, "n32_signalfd4" }, /* 6287 */
+ { 2, TD, printargs, "n32_eventfd2" }, /* 6288 */
+ { 1, TD, printargs, "n32_epoll_create1" }, /* 6289 */
+ { 3, TD, printargs, "n32_dup3" }, /* 6290 */
+ { 2, TD, printargs, "n32_pipe2" }, /* 6291 */
+ { 1, TD, printargs, "n32_inotify_init1" }, /* 6292 */
+ { 5, TD, printargs, "n32_preadv" }, /* 6293 */
+ { 5, TD, printargs, "n32_pwritev" }, /* 6294 */
+ { 4, TP|TS, printargs, "n32_rt_tgsigqueueinfo" }, /* 6295 */
+ { 5, TD, printargs, "n32_perf_event_open" }, /* 6296 */
+ { 4, TN, printargs, "n32_accept4" }, /* 6297 */
+ { 5, TN, printargs, "n32_recvmmsg" }, /* 6298 */
+ { 3, TD, printargs, "n32_getdents64" }, /* 6299 */
+ { 2, 0, printargs, "n32_fanotify_init" }, /* 6300 */
+ { 5, 0, printargs, "n32_fanotify_mark" }, /* 6301 */
+ { 4, 0, printargs, "n32_prlimit64" }, /* 6302 */
+ { 5, TD|TF, printargs, "n32_name_to_handle_at" }, /* 6303 */
+ { 3, TD, printargs, "n32_open_by_handle_at" }, /* 6304 */
+ { 2, 0, printargs, "n32_clock_adjtime" }, /* 6305 */
+ { 1, TD, printargs, "n32_syncfs" }, /* 6306 */
+ { 4, TN, printargs, "n32_sendmmsg" }, /* 6307 */
+ { 2, TD, printargs, "n32_setns" }, /* 6308 */
+ { 6, 0, printargs, "n32_process_vm_readv" }, /* 6309 */
+ { 6, 0, printargs, "n32_process_vm_writev" }, /* 6310 */
+ { 5, 0, printargs, "n32_kcmp" }, /* 6311 */
+ { 3, TD, printargs, "n32_finit_module" }, /* 6312 */
+#endif
diff --git a/linux/mips/syscallent-n64.h b/linux/mips/syscallent-n64.h
new file mode 100644
index 0000000..dd5da40
--- /dev/null
+++ b/linux/mips/syscallent-n64.h
@@ -0,0 +1,621 @@
+#if defined LINUX_MIPSN64
+ /* For an N64 strace decode the N64 64-bit syscalls. */
+ { 3, TD, sys_read, "read" }, /* 5000 */ /* start of Linux N64 */
+ { 3, TD, sys_write, "write" }, /* 5001 */
+ { 3, TD|TF, sys_open, "open" }, /* 5002 */
+ { 1, TD, sys_close, "close" }, /* 5003 */
+ { 2, TF, sys_stat, "stat" }, /* 5004 */
+ { 2, TD, sys_fstat, "fstat" }, /* 5005 */
+ { 2, TF, sys_lstat, "lstat" }, /* 5006 */
+ { 3, TD, sys_poll, "poll" }, /* 5007 */
+ { 3, TD, sys_lseek, "lseek" }, /* 5008 */
+ { 6, TD|TM, sys_mmap, "mmap" }, /* 5009 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 5010 */
+ { 2, TM, sys_munmap, "munmap" }, /* 5011 */
+ { 1, TM, sys_brk, "brk" }, /* 5012 */
+ { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 5013 */
+ { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 5014 */
+ { 3, TD, sys_ioctl, "ioctl" }, /* 5015 */
+ { 4, TD, sys_pread, "pread64" }, /* 5016 */
+ { 4, TD, sys_pwrite, "pwrite64" }, /* 5017 */
+ { 3, TD, sys_readv, "readv" }, /* 5018 */
+ { 3, TD, sys_writev, "writev" }, /* 5019 */
+ { 2, TF, sys_access, "access" }, /* 5020 */
+ { 1, TD, sys_pipe, "pipe" }, /* 5021 */
+ { 5, TD, sys_select, "_newselect" }, /* 5022 */
+ { 0, 0, sys_sched_yield, "sched_yield" }, /* 5023 */
+ { 5, TM, sys_mremap, "mremap" }, /* 5024 */
+ { 3, TM, sys_msync, "msync" }, /* 5025 */
+ { 3, TM, sys_mincore, "mincore" }, /* 5026 */
+ { 3, TM, sys_madvise, "madvise" }, /* 5027 */
+ { 3, TI, sys_shmget, "shmget" }, /* 5028 */
+ { 3, TI, sys_shmat, "shmat" }, /* 5029 */
+ { 3, TI, sys_shmctl, "shmctl" }, /* 5030 */
+ { 1, TD, sys_dup, "dup" }, /* 5031 */
+ { 2, TD, sys_dup2, "dup2" }, /* 5032 */
+ { 0, TS, sys_pause, "pause" }, /* 5033 */
+ { 2, 0, sys_nanosleep, "nanosleep" }, /* 5034 */
+ { 2, 0, sys_getitimer, "getitimer" }, /* 5035 */
+ { 3, 0, sys_setitimer, "setitimer" }, /* 5036 */
+ { 1, 0, sys_alarm, "alarm" }, /* 5037 */
+ { 0, 0, sys_getpid, "getpid" }, /* 5038 */
+ { 4, TD|TN, sys_sendfile, "sendfile" }, /* 5039 */
+ { 3, TN, sys_socket, "socket" }, /* 5040 */
+ { 3, TN, sys_connect, "connect" }, /* 5041 */
+ { 3, TN, sys_accept, "accept" }, /* 5042 */
+ { 6, TN, sys_sendto, "sendto" }, /* 5043 */
+ { 6, TN, sys_recvfrom, "recvfrom" }, /* 5044 */
+ { 3, TN, sys_sendmsg, "sendmsg" }, /* 5045 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 5046 */
+ { 2, TN, sys_shutdown, "shutdown" }, /* 5047 */
+ { 3, TN, sys_bind, "bind" }, /* 5048 */
+ { 2, TN, sys_listen, "listen" }, /* 5049 */
+ { 3, TN, sys_getsockname, "getsockname" }, /* 5050 */
+ { 3, TN, sys_getpeername, "getpeername" }, /* 5051 */
+ { 4, TN, sys_socketpair, "socketpair" }, /* 5052 */
+ { 5, TN, sys_setsockopt, "setsockopt" }, /* 5053 */
+ { 5, TN, sys_getsockopt, "getsockopt" }, /* 5054 */
+ { 2, TP, sys_clone, "clone" }, /* 5055 */
+ { 0, TP, sys_fork, "fork" }, /* 5056 */
+ { 3, TF|TP, sys_execve, "execve" }, /* 5057 */
+ { 1, TP, sys_exit, "exit" }, /* 5058 */
+ { 4, TP, sys_wait4, "wait4" }, /* 5059 */
+ { 2, TS, sys_kill, "kill" }, /* 5060 */
+ { 1, 0, sys_uname, "uname" }, /* 5061 */
+ { 3, TI, sys_semget, "semget" }, /* 5062 */
+ { 3, TI, printargs, "semop" }, /* 5063 */
+ { 4, TI, sys_semctl, "semctl" }, /* 5064 */
+ { 1, TI, sys_shmdt, "shmdt" }, /* 5065 */
+ { 2, TI, sys_msgget, "msgget" }, /* 5066 */
+ { 4, TI, sys_msgsnd, "msgsnd" }, /* 5067 */
+ { 5, TI, sys_msgrcv, "msgrcv" }, /* 5068 */
+ { 3, TI, sys_msgctl, "msgctl" }, /* 5069 */
+ { 3, TD, sys_fcntl, "fcntl" }, /* 5070 */
+ { 2, TD, sys_flock, "flock" }, /* 5071 */
+ { 1, TD, sys_fsync, "fsync" }, /* 5072 */
+ { 1, TD, sys_fdatasync, "fdatasync" }, /* 5073 */
+ { 2, TF, sys_truncate, "truncate" }, /* 5074 */
+ { 2, TD, sys_ftruncate, "ftruncate" }, /* 5075 */
+ { 3, TD, sys_getdents, "getdents" }, /* 5076 */
+ { 2, TF, sys_getcwd, "getcwd" }, /* 5077 */
+ { 1, TF, sys_chdir, "chdir" }, /* 5078 */
+ { 1, TD, sys_fchdir, "fchdir" }, /* 5079 */
+ { 2, TF, sys_rename, "rename" }, /* 5080 */
+ { 2, TF, sys_mkdir, "mkdir" }, /* 5081 */
+ { 1, TF, sys_rmdir, "rmdir" }, /* 5082 */
+ { 2, TD|TF, sys_creat, "creat" }, /* 5083 */
+ { 2, TF, sys_link, "link" }, /* 5084 */
+ { 1, TF, sys_unlink, "unlink" }, /* 5085 */
+ { 2, TF, sys_symlink, "symlink" }, /* 5086 */
+ { 3, TF, sys_readlink, "readlink" }, /* 5087 */
+ { 2, TF, sys_chmod, "chmod" }, /* 5088 */
+ { 2, TD, sys_fchmod, "fchmod" }, /* 5089 */
+ { 3, TF, sys_chown, "chown" }, /* 5090 */
+ { 3, TD, sys_fchown, "fchown" }, /* 5091 */
+ { 3, TF, sys_chown, "lchown" }, /* 5092 */
+ { 1, 0, sys_umask, "umask" }, /* 5093 */
+ { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 5094 */
+ { 2, 0, sys_getrlimit, "getrlimit" }, /* 5095 */
+ { 2, 0, sys_getrusage, "getrusage" }, /* 5096 */
+ { 1, 0, sys_sysinfo, "sysinfo" }, /* 5097 */
+ { 1, 0, sys_times, "times" }, /* 5098 */
+ { 4, 0, sys_ptrace, "ptrace" }, /* 5099 */
+ { 0, NF, sys_getuid, "getuid" }, /* 5100 */
+ { 3, 0, sys_syslog, "syslog" }, /* 5101 */
+ { 0, NF, sys_getgid, "getgid" }, /* 5102 */
+ { 1, 0, sys_setuid, "setuid" }, /* 5103 */
+ { 1, 0, sys_setgid, "setgid" }, /* 5104 */
+ { 0, NF, sys_geteuid, "geteuid" }, /* 5105 */
+ { 0, NF, sys_getegid, "getegid" }, /* 5106 */
+ { 2, 0, sys_setpgid, "setpgid" }, /* 5107 */
+ { 0, 0, sys_getppid, "getppid" }, /* 5108 */
+ { 0, 0, sys_getpgrp, "getpgrp" }, /* 5109 */
+ { 0, 0, sys_setsid, "setsid" }, /* 5110 */
+ { 2, 0, sys_setreuid, "setreuid" }, /* 5111 */
+ { 2, 0, sys_setregid, "setregid" }, /* 5112 */
+ { 2, 0, sys_getgroups, "getgroups" }, /* 5113 */
+ { 2, 0, sys_setgroups, "setgroups" }, /* 5114 */
+ { 3, 0, sys_setresuid, "setresuid" }, /* 5115 */
+ { 3, 0, sys_getresuid, "getresuid" }, /* 5116 */
+ { 3, 0, sys_setresgid, "setresgid" }, /* 5117 */
+ { 3, 0, sys_getresgid, "getresgid" }, /* 5118 */
+ { 0, 0, sys_getpgid, "getpgid" }, /* 5119 */
+ { 1, NF, sys_setfsuid, "setfsuid" }, /* 5120 */
+ { 1, NF, sys_setfsgid, "setfsgid" }, /* 5121 */
+ { 1, 0, sys_getsid, "getsid" }, /* 5122 */
+ { 2, 0, sys_capget, "capget" }, /* 5123 */
+ { 2, 0, sys_capset, "capset" }, /* 5124 */
+ { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 5125 */
+ { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait"},/* 5126 */
+ { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"},/* 5127 */
+ { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 5128 */
+ { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 5129 */
+ { 2, TF, sys_utime, "utime" }, /* 5130 */
+ { 3, TF, sys_mknod, "mknod" }, /* 5131 */
+ { 1, 0, sys_personality, "personality" }, /* 5132 */
+ { 2, 0, sys_ustat, "ustat" }, /* 5133 */
+ { 3, TF, sys_statfs, "statfs" }, /* 5134 */
+ { 3, TD, sys_fstatfs, "fstatfs" }, /* 5135 */
+ { 5, 0, sys_sysfs, "sysfs" }, /* 5136 */
+ { 2, 0, sys_getpriority, "getpriority" }, /* 5137 */
+ { 3, 0, sys_setpriority, "setpriority" }, /* 5138 */
+ { 2, 0, sys_sched_setparam, "sched_setparam"}, /* 5139 */
+ { 2, 0, sys_sched_getparam, "sched_getparam"}, /* 5140 */
+ { 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 5141 */
+ { 1, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 5142 */
+ { 1, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 5143 */
+ { 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 5144 */
+ { 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 5145 */
+ { 2, TM, sys_mlock, "mlock" }, /* 5146 */
+ { 2, TM, sys_munlock, "munlock" }, /* 5147 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 5148 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 5149 */
+ { 0, 0, sys_vhangup, "vhangup" }, /* 5150 */
+ { 2, TF, sys_pivotroot, "pivot_root" }, /* 5151 */
+ { 1, 0, sys_sysctl, "_sysctl" }, /* 5152 */
+ { 5, 0, sys_prctl, "prctl" }, /* 5153 */
+ { 1, 0, sys_adjtimex, "adjtimex" }, /* 5154 */
+ { 2, 0, sys_setrlimit, "setrlimit" }, /* 5155 */
+ { 1, TF, sys_chroot, "chroot" }, /* 5156 */
+ { 0, 0, sys_sync, "sync" }, /* 5157 */
+ { 1, TF, sys_acct, "acct" }, /* 5158 */
+ { 2, 0, sys_settimeofday, "settimeofday" }, /* 5159 */
+ { 5, TF, sys_mount, "mount" }, /* 5160 */
+ { 2, TF, sys_umount2, "umount2" }, /* 5161 */
+ { 2, TF, sys_swapon, "swapon" }, /* 5162 */
+ { 1, TF, sys_swapoff, "swapoff" }, /* 5163 */
+ { 4, 0, sys_reboot, "reboot" }, /* 5164 */
+ { 2, 0, sys_sethostname, "sethostname" }, /* 5165 */
+ { 2, 0, sys_setdomainname, "setdomainname" }, /* 5166 */
+ { 2, 0, sys_create_module, "create_module" }, /* 5167 */
+ { 4, 0, sys_init_module, "init_module" }, /* 5168 */
+ { 1, 0, sys_delete_module, "delete_module" }, /* 5169 */
+ { 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 5170 */
+ { 5, 0, sys_query_module, "query_module" }, /* 5171 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 5172 */
+ { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 5173 */
+ { 5, TN, printargs, "getpmsg" }, /* 5174 */
+ { 5, TN, printargs, "putpmsg" }, /* 5175 */
+ { 0, 0, sys_afs_syscall, "afs_syscall" }, /* 5176 */
+ { 0, 0, printargs, "reserved177" }, /* 5177 */
+ { 0, 0, sys_gettid, "gettid" }, /* 5178 */
+ { 3, TD, sys_readahead, "readahead" }, /* 5179 */
+ { 5, TF, sys_setxattr, "setxattr" }, /* 5180 */
+ { 5, TF, sys_setxattr, "lsetxattr" }, /* 5181 */
+ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 5182 */
+ { 4, TF, sys_getxattr, "getxattr" }, /* 5183 */
+ { 4, TF, sys_getxattr, "lgetxattr" }, /* 5184 */
+ { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 5185 */
+ { 3, TF, sys_listxattr, "listxattr" }, /* 5186 */
+ { 3, TF, sys_listxattr, "llistxattr" }, /* 5187 */
+ { 3, TD, sys_flistxattr, "flistxattr" }, /* 5188 */
+ { 2, TF, sys_removexattr, "removexattr" }, /* 5189 */
+ { 2, TF, sys_removexattr, "lremovexattr" }, /* 5190 */
+ { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 5191 */
+ { 2, TS, sys_kill, "tkill" }, /* 5192 */
+ { 1, 0, sys_time, "time" }, /* 5193 */
+ { 6, 0, sys_futex, "futex" }, /* 5194 */
+ { 3, 0, sys_sched_setaffinity, "sched_setaffinity"}, /* 5195 */
+ { 3, 0, sys_sched_getaffinity, "sched_getaffinity"}, /* 5196 */
+ { 3, 0, printargs, "cacheflush" }, /* 5197 */
+ { 3, 0, printargs, "cachectl" }, /* 5198 */
+ { 4, 0, sys_sysmips, "sysmips" }, /* 5199 */
+ { 2, 0, sys_io_setup, "io_setup" }, /* 5200 */
+ { 1, 0, sys_io_destroy, "io_destroy" }, /* 5201 */
+ { 5, 0, sys_io_getevents, "io_getevents" }, /* 5202 */
+ { 3, 0, sys_io_submit, "io_submit" }, /* 5203 */
+ { 3, 0, sys_io_cancel, "io_cancel" }, /* 5204 */
+ { 1, TP, sys_exit, "exit_group" }, /* 5205 */
+ { 3, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 5206 */
+ { 1, TD, sys_epoll_create, "epoll_create" }, /* 5207 */
+ { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 5208 */
+ { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 5209 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages" }, /* 5210 */
+ { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 5211 */
+ { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 5212 */
+ { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 5213 */
+ { 5, TI, sys_semtimedop, "semtimedop" }, /* 5214 */
+ { 4, TD, sys_fadvise64_64, "fadvise64_64" }, /* 5215 */
+ { 3, 0, sys_timer_create, "timer_create" }, /* 5216 */
+ { 4, 0, sys_timer_settime, "timer_settime" }, /* 5217 */
+ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 5218 */
+ { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 5219 */
+ { 1, 0, sys_timer_delete, "timer_delete" }, /* 5220 */
+ { 2, 0, sys_clock_settime, "clock_settime" }, /* 5221 */
+ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 5222 */
+ { 2, 0, sys_clock_getres, "clock_getres" }, /* 5223 */
+ { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 5224 */
+ { 3, TS, sys_tgkill, "tgkill" }, /* 5225 */
+ { 2, TF, sys_utimes, "utimes" }, /* 5226 */
+ { 6, TM, sys_mbind, "mbind" }, /* 5227 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 5228 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 5229 */
+ { 4, 0, sys_mq_open, "mq_open" }, /* 5230 */
+ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 5231 */
+ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 5232 */
+ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 5233 */
+ { 2, 0, sys_mq_notify, "mq_notify" }, /* 5234 */
+ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 5235 */
+ { 5, 0, sys_vserver, "vserver" }, /* 5236 */
+ { 5, TP, sys_waitid, "waitid" }, /* 5237 */
+ [5238] = { },
+ { 5, 0, sys_add_key, "add_key" }, /* 5239 */
+ { 4, 0, sys_request_key, "request_key" }, /* 5230 */
+ { 5, 0, sys_keyctl, "keyctl" }, /* 5241 */
+ { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 5242 */
+ { 0, TD, sys_inotify_init, "inotify_init" }, /* 5243 */
+ { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 5244 */
+ { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 5245 */
+ { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 5246 */
+ { 4, TD|TF, sys_openat, "openat" }, /* 5247 */
+ { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 5248 */
+ { 4, TD|TF, sys_mknodat, "mknodat" }, /* 5249 */
+ { 5, TD|TF, sys_fchownat, "fchownat" }, /* 5250 */
+ { 3, TD|TF, sys_futimesat, "futimesat" }, /* 5251 */
+ { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 5252 */
+ { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 5253 */
+ { 4, TD|TF, sys_renameat, "renameat" }, /* 5254 */
+ { 5, TD|TF, sys_linkat, "linkat" }, /* 5255 */
+ { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 5256 */
+ { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 5257 */
+ { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 5258 */
+ { 3, TD|TF, sys_faccessat, "faccessat" }, /* 5259 */
+ { 6, TD, sys_pselect6, "pselect6" }, /* 5260 */
+ { 5, TD, sys_ppoll, "ppoll" }, /* 5261 */
+ { 1, TP, sys_unshare, "unshare" }, /* 5262 */
+ { 6, TD, sys_splice, "splice" }, /* 5263 */
+ { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 5264 */
+ { 4, TD, sys_tee, "tee" }, /* 5265 */
+ { 4, TD, sys_vmsplice, "vmsplice" }, /* 5266 */
+ { 6, TM, printargs, "move_pages" }, /* 5267 */
+ { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 5268 */
+ { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 5269 */
+ { 4, 0, sys_kexec_load, "kexec_load" }, /* 5270 */
+ { 3, 0, sys_getcpu, "getcpu" }, /* 5271 */
+ { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 5272 */
+ { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 5273 */
+ { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 5274 */
+ { 4, TD|TF, sys_utimensat, "utimensat" }, /* 5275 */
+ { 3, TD|TS, sys_signalfd, "signalfd" }, /* 5276 */
+ { 4, TD, sys_timerfd, "timerfd" }, /* 5277 */
+ { 1, TD, sys_eventfd, "eventfd" }, /* 5278 */
+ { 4, TD, sys_fallocate, "fallocate" }, /* 5279 */
+ { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 5280 */
+ { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 5281 */
+ { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 5282 */
+ { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 5283 */
+ { 2, TD, sys_eventfd2, "eventfd2" }, /* 5284 */
+ { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 5285 */
+ { 3, TD, sys_dup3, "dup3" }, /* 5286 */
+ { 2, TD, sys_pipe2, "pipe2" }, /* 5287 */
+ { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 5288 */
+ { 4, TD, sys_preadv, "preadv" }, /* 5289 */
+ { 4, TD, sys_pwritev, "pwritev" }, /* 5290 */
+ { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 5291 */
+ { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 5292 */
+ { 4, TN, sys_accept4, "accept4" }, /* 5293 */
+ { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 5294 */
+ { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 5295 */
+ { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 5296 */
+ { 4, 0, sys_prlimit64, "prlimit64" }, /* 5297 */
+ { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at"}, /* 5298 */
+ { 3, TD, sys_open_by_handle_at, "open_by_handle_at"}, /* 5299 */
+ { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 5300 */
+ { 1, TD, sys_syncfs, "syncfs" }, /* 5301 */
+ { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 5302 */
+ { 2, TD, sys_setns, "setns" }, /* 5303 */
+ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 5304 */
+ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 5305 */
+ { 5, 0, sys_kcmp, "kcmp" }, /* 5306 */
+ { 3, TD, sys_finit_module, "finit_module" }, /* 5307 */
+#else
+ { 0, 0, printargs, "n64_read" }, /* 5000 */
+ { 0, 0, printargs, "n64_write" }, /* 5001 */
+ { 0, 0, printargs, "n64_open" }, /* 5002 */
+ { 0, 0, printargs, "n64_close" }, /* 5003 */
+ { 0, 0, printargs, "n64_stat" }, /* 5004 */
+ { 0, 0, printargs, "n64_fstat" }, /* 5005 */
+ { 0, 0, printargs, "n64_lstat" }, /* 5006 */
+ { 0, 0, printargs, "n64_poll" }, /* 5007 */
+ { 0, 0, printargs, "n64_lseek" }, /* 5008 */
+ { 0, TD|TM, printargs, "n64_mmap" }, /* 5009 */
+ { 0, TM, printargs, "n64_mprotect" }, /* 5010 */
+ { 0, TM, printargs, "n64_munmap" }, /* 5011 */
+ { 0, TM, printargs, "n64_brk" }, /* 5012 */
+ { 0, 0, printargs, "n64_rt_sigaction" }, /* 5013 */
+ { 0, 0, printargs, "n64_rt_sigprocmask" }, /* 5014 */
+ { 0, 0, printargs, "n64_ioctl" }, /* 5015 */
+ { 0, 0, printargs, "n64_pread" }, /* 5016 */
+ { 0, 0, printargs, "n64_pwrite" }, /* 5017 */
+ { 0, 0, printargs, "n64_readv" }, /* 5018 */
+ { 0, 0, printargs, "n64_writev" }, /* 5019 */
+ { 0, 0, printargs, "n64_access" }, /* 5020 */
+ { 0, 0, printargs, "n64_pipe" }, /* 5021 */
+ { 0, 0, printargs, "n64__newselect" }, /* 5022 */
+ { 0, 0, printargs, "n64_sched_yield" }, /* 5023 */
+ { 0, TM, printargs, "n64_mremap" }, /* 5024 */
+ { 0, TM, printargs, "n64_msync" }, /* 5025 */
+ { 0, TM, printargs, "n64_mincore" }, /* 5026 */
+ { 0, TM, printargs, "n64_madvise" }, /* 5027 */
+ { 0, 0, printargs, "n64_shmget" }, /* 5028 */
+ { 0, 0, printargs, "n64_shmat" }, /* 5029 */
+ { 0, 0, printargs, "n64_shmctl" }, /* 5030 */
+ { 0, 0, printargs, "n64_dup" }, /* 5031 */
+ { 0, 0, printargs, "n64_dup2" }, /* 5032 */
+ { 0, 0, printargs, "n64_pause" }, /* 5033 */
+ { 0, 0, printargs, "n64_nanosleep" }, /* 5034 */
+ { 0, 0, printargs, "n64_getitimer" }, /* 5035 */
+ { 0, 0, printargs, "n64_setitimer" }, /* 5036 */
+ { 0, 0, printargs, "n64_alarm" }, /* 5037 */
+ { 0, 0, printargs, "n64_getpid" }, /* 5038 */
+ { 0, 0, printargs, "n64_sendfile" }, /* 5039 */
+ { 0, 0, printargs, "n64_socketcall" }, /* 5040 */
+ { 0, 0, printargs, "n64_connect" }, /* 5041 */
+ { 0, 0, printargs, "n64_accept" }, /* 5042 */
+ { 0, 0, printargs, "n64_sendto" }, /* 5043 */
+ { 0, 0, printargs, "n64_recvfrom" }, /* 5044 */
+ { 0, 0, printargs, "n64_sendmsg" }, /* 5045 */
+ { 0, 0, printargs, "n64_recvmsg" }, /* 5046 */
+ { 0, 0, printargs, "n64_shutdown" }, /* 5047 */
+ { 0, 0, printargs, "n64_bind" }, /* 5048 */
+ { 0, 0, printargs, "n64_listen" }, /* 5049 */
+ { 0, 0, printargs, "n64_getsockname" }, /* 5050 */
+ { 0, 0, printargs, "n64_getpeername" }, /* 5051 */
+ { 0, 0, printargs, "n64_socketpair" }, /* 5052 */
+ { 0, 0, printargs, "n64_setsockopt" }, /* 5053 */
+ { 0, 0, printargs, "n64_getsockopt" }, /* 5054 */
+ { 0, 0, printargs, "n64_clone" }, /* 5055 */
+ { 0, 0, printargs, "n64_fork" }, /* 5056 */
+ { 0, 0, printargs, "n64_execve" }, /* 5057 */
+ { 0, 0, printargs, "n64_exit" }, /* 5058 */
+ { 0, 0, printargs, "n64_wait4" }, /* 5059 */
+ { 0, 0, printargs, "n64_kill" }, /* 5060 */
+ { 0, 0, printargs, "n64_uname" }, /* 5061 */
+ { 0, 0, printargs, "n64_semget" }, /* 5062 */
+ { 0, 0, printargs, "n64_semop" }, /* 5063 */
+ { 0, 0, printargs, "n64_semctl" }, /* 5064 */
+ { 0, 0, printargs, "n64_shmdt" }, /* 5065 */
+ { 0, 0, printargs, "n64_msgget" }, /* 5066 */
+ { 0, 0, printargs, "n64_msgsnd" }, /* 5067 */
+ { 0, 0, printargs, "n64_msgrcv" }, /* 5068 */
+ { 0, 0, printargs, "n64_msgctl" }, /* 5069 */
+ { 0, 0, printargs, "n64_fcntl" }, /* 5070 */
+ { 0, 0, printargs, "n64_flock" }, /* 5071 */
+ { 0, 0, printargs, "n64_fsync" }, /* 5072 */
+ { 0, 0, printargs, "n64_fdatasync" }, /* 5073 */
+ { 0, 0, printargs, "n64_truncate" }, /* 5074 */
+ { 0, 0, printargs, "n64_ftruncate" }, /* 5075 */
+ { 0, 0, printargs, "n64_getdents" }, /* 5076 */
+ { 0, 0, printargs, "n64_getcwd" }, /* 5077 */
+ { 0, 0, printargs, "n64_chdir" }, /* 5078 */
+ { 0, 0, printargs, "n64_fchdir" }, /* 5079 */
+ { 0, 0, printargs, "n64_rename" }, /* 5080 */
+ { 0, 0, printargs, "n64_mkdir" }, /* 5081 */
+ { 0, 0, printargs, "n64_rmdir" }, /* 5082 */
+ { 0, 0, printargs, "n64_creat" }, /* 5083 */
+ { 0, 0, printargs, "n64_link" }, /* 5084 */
+ { 0, 0, printargs, "n64_unlink" }, /* 5085 */
+ { 0, 0, printargs, "n64_symlink" }, /* 5086 */
+ { 0, 0, printargs, "n64_readlink" }, /* 5087 */
+ { 0, 0, printargs, "n64_chmod" }, /* 5088 */
+ { 0, 0, printargs, "n64_fchmod" }, /* 5089 */
+ { 0, 0, printargs, "n64_chown" }, /* 5090 */
+ { 0, 0, printargs, "n64_fchown" }, /* 5091 */
+ { 0, 0, printargs, "n64_lchown" }, /* 5092 */
+ { 0, 0, printargs, "n64_umask" }, /* 5093 */
+ { 0, 0, printargs, "n64_gettimeofday" }, /* 5094 */
+ { 0, 0, printargs, "n64_getrlimit" }, /* 5095 */
+ { 0, 0, printargs, "n64_getrusage" }, /* 5096 */
+ { 0, 0, printargs, "n64_sysinfo" }, /* 5097 */
+ { 0, 0, printargs, "n64_times" }, /* 5098 */
+ { 0, 0, printargs, "n64_ptrace" }, /* 5099 */
+ { 0, 0, printargs, "n64_getuid" }, /* 5100 */
+ { 0, 0, printargs, "n64_syslog" }, /* 5101 */
+ { 0, 0, printargs, "n64_getgid" }, /* 5102 */
+ { 0, 0, printargs, "n64_setuid" }, /* 5103 */
+ { 0, 0, printargs, "n64_setgid" }, /* 5104 */
+ { 0, 0, printargs, "n64_geteuid" }, /* 5105 */
+ { 0, 0, printargs, "n64_getegid" }, /* 5106 */
+ { 0, 0, printargs, "n64_setpgid" }, /* 5107 */
+ { 0, 0, printargs, "n64_getppid" }, /* 5108 */
+ { 0, 0, printargs, "n64_getpgrp" }, /* 5109 */
+ { 0, 0, printargs, "n64_setsid" }, /* 5110 */
+ { 0, 0, printargs, "n64_setreuid" }, /* 5111 */
+ { 0, 0, printargs, "n64_setregid" }, /* 5112 */
+ { 0, 0, printargs, "n64_getgroups" }, /* 5113 */
+ { 0, 0, printargs, "n64_setgroups" }, /* 5114 */
+ { 0, 0, printargs, "n64_setresuid" }, /* 5115 */
+ { 0, 0, printargs, "n64_getresuid" }, /* 5116 */
+ { 0, 0, printargs, "n64_setresgid" }, /* 5117 */
+ { 0, 0, printargs, "n64_getresgid" }, /* 5118 */
+ { 0, 0, printargs, "n64_getpgid" }, /* 5119 */
+ { 0, 0, printargs, "n64_setfsuid" }, /* 5120 */
+ { 0, 0, printargs, "n64_setfsgid" }, /* 5121 */
+ { 0, 0, printargs, "n64_getsid" }, /* 5122 */
+ { 0, 0, printargs, "n64_capget" }, /* 5123 */
+ { 0, 0, printargs, "n64_capset" }, /* 5124 */
+ { 0, 0, printargs, "n64_rt_sigpending" }, /* 5125 */
+ { 0, 0, printargs, "n64_rt_sigtimedwait" }, /* 5126 */
+ { 0, 0, printargs, "n64_rt_sigqueueinfo" }, /* 5127 */
+ { 0, 0, printargs, "n64_rt_sigsuspend" }, /* 5128 */
+ { 0, 0, printargs, "n64_sigaltstack" }, /* 5129 */
+ { 0, 0, printargs, "n64_utime" }, /* 5130 */
+ { 0, 0, printargs, "n64_mknod" }, /* 5131 */
+ { 0, 0, printargs, "n64_personality" }, /* 5132 */
+ { 0, 0, printargs, "n64_ustat" }, /* 5133 */
+ { 0, 0, printargs, "n64_statfs" }, /* 5134 */
+ { 0, 0, printargs, "n64_fstatfs" }, /* 5135 */
+ { 0, 0, printargs, "n64_sysfs" }, /* 5136 */
+ { 0, 0, printargs, "n64_getpriority" }, /* 5137 */
+ { 0, 0, printargs, "n64_setpriority" }, /* 5138 */
+ { 0, 0, printargs, "n64_sched_setparam" }, /* 5139 */
+ { 0, 0, printargs, "n64_sched_getparam" }, /* 5140 */
+ { 0, 0, printargs, "n64_sched_setscheduler"}, /* 5141 */
+ { 0, 0, printargs, "n64_sched_getscheduler"}, /* 5142 */
+ { 0, 0, printargs, "n64_sched_get_priority_max"}, /* 5143 */
+ { 0, 0, printargs, "n64_sched_get_priority_min"}, /* 5144 */
+ { 0, 0, printargs, "n64_sched_rr_get_interval"}, /* 5145 */
+ { 0, TM, printargs, "n64_mlock" }, /* 5146 */
+ { 0, TM, printargs, "n64_munlock" }, /* 5147 */
+ { 0, TM, printargs, "n64_mlockall" }, /* 5148 */
+ { 0, TM, printargs, "n64_munlockall" }, /* 5149 */
+ { 0, 0, printargs, "n64_vhangup" }, /* 5150 */
+ { 0, 0, printargs, "n64_pivot_root" }, /* 5151 */
+ { 0, 0, printargs, "n64__sysctl" }, /* 5152 */
+ { 0, 0, printargs, "n64_prctl" }, /* 5153 */
+ { 0, 0, printargs, "n64_adjtimex" }, /* 5154 */
+ { 0, 0, printargs, "n64_setrlimit" }, /* 5155 */
+ { 0, 0, printargs, "n64_chroot" }, /* 5156 */
+ { 0, 0, printargs, "n64_sync" }, /* 5157 */
+ { 0, 0, printargs, "n64_acct" }, /* 5158 */
+ { 0, 0, printargs, "n64_settimeofday" }, /* 5159 */
+ { 0, 0, printargs, "n64_mount" }, /* 5160 */
+ { 0, 0, printargs, "n64_umount" }, /* 5161 */
+ { 0, 0, printargs, "n64_swapon" }, /* 5162 */
+ { 0, 0, printargs, "n64_swapoff" }, /* 5163 */
+ { 0, 0, printargs, "n64_reboot" }, /* 5164 */
+ { 0, 0, printargs, "n64_sethostname" }, /* 5165 */
+ { 0, 0, printargs, "n64_setdomainname" }, /* 5166 */
+ { 0, 0, printargs, "n64_create_module" }, /* 5167 */
+ { 0, 0, printargs, "n64_init_module" }, /* 5168 */
+ { 0, 0, printargs, "n64_delete_module" }, /* 5169 */
+ { 0, 0, printargs, "n64_get_kernel_syms" }, /* 5170 */
+ { 0, 0, printargs, "n64_query_module" }, /* 5171 */
+ { 0, TF, printargs, "n64_quotactl" }, /* 5172 */
+ { 0, 0, printargs, "n64_nfsservctl" }, /* 5173 */
+ { 0, 0, printargs, "n64_getpmsg" }, /* 5174 */
+ { 0, 0, printargs, "n64_putpmsg" }, /* 5175 */
+ { 0, 0, printargs, "n64_afs_syscall" }, /* 5176 */
+ { 0, 0, printargs, "n64_reserved177" }, /* 5177 */
+ { 0, 0, printargs, "n64_gettid" }, /* 5178 */
+ { 0, 0, printargs, "n64_readahead" }, /* 5179 */
+ { 0, 0, printargs, "n64_setxattr" }, /* 5180 */
+ { 0, 0, printargs, "n64_lsetxattr" }, /* 5181 */
+ { 0, 0, printargs, "n64_fsetxattr" }, /* 5182 */
+ { 0, 0, printargs, "n64_getxattr" }, /* 5183 */
+ { 0, 0, printargs, "n64_lgetxattr" }, /* 5184 */
+ { 0, 0, printargs, "n64_fgetxattr" }, /* 5185 */
+ { 0, 0, printargs, "n64_listxattr" }, /* 5186 */
+ { 0, 0, printargs, "n64_llistxattr" }, /* 5187 */
+ { 0, 0, printargs, "n64_flistxattr" }, /* 5188 */
+ { 0, 0, printargs, "n64_removexattr" }, /* 5189 */
+ { 0, 0, printargs, "n64_lremovexattr" }, /* 5190 */
+ { 0, 0, printargs, "n64_fremovexattr" }, /* 5191 */
+ { 0, 0, printargs, "n64_tkill" }, /* 5192 */
+ { 0, 0, printargs, "n64_time" }, /* 5193 */
+ { 0, 0, printargs, "n64_futex" }, /* 5194 */
+ { 0, 0, printargs, "n64_sched_setaffinity" }, /* 5195 */
+ { 0, 0, printargs, "n64_sched_getaffinity" }, /* 5196 */
+ { 0, 0, printargs, "n64_cacheflush" }, /* 5197 */
+ { 0, 0, printargs, "n64_cachectl" }, /* 5198 */
+ { 0, 0, printargs, "n64_sysmips" }, /* 5199 */
+ { 0, 0, printargs, "n64_io_setup" }, /* 5200 */
+ { 0, 0, printargs, "n64_io_destroy" }, /* 5201 */
+ { 0, 0, printargs, "n64_io_getevents" }, /* 5202 */
+ { 0, 0, printargs, "n64_io_submit" }, /* 5203 */
+ { 0, 0, printargs, "n64_io_cancel" }, /* 5204 */
+ { 1, TP, printargs, "n64_exit_group" }, /* 5205 */
+ { 0, 0, printargs, "n64_lookup_dcookie" }, /* 5206 */
+ { 0, 0, printargs, "n64_epoll_create" }, /* 5207 */
+ { 0, 0, printargs, "n64_epoll_ctl" }, /* 5208 */
+ { 0, 0, printargs, "n64_epoll_wait" }, /* 5209 */
+ { 0, TM, printargs, "n64_remap_file_pages" }, /* 5210 */
+ { 0, 0, printargs, "n64_rt_sigreturn" }, /* 5211 */
+ { 1, 0, printargs, "n64_set_tid_address" }, /* 5212 */
+ { 0, 0, printargs, "n64_restart_syscall" }, /* 5213 */
+ { 5, TI, printargs, "n64_semtimedop" }, /* 5214 */
+ { 0, 0, printargs, "n64_fadvise64_64" }, /* 5215 */
+ { 0, 0, printargs, "n64_timer_create" }, /* 5216 */
+ { 0, 0, printargs, "n64_timer_settime" }, /* 5217 */
+ { 0, 0, printargs, "n64_timer_gettime" }, /* 5218 */
+ { 0, 0, printargs, "n64_timer_getoverrun" }, /* 5219 */
+ { 0, 0, printargs, "n64_timer_delete" }, /* 5220 */
+ { 0, 0, printargs, "n64_clock_settime" }, /* 5221 */
+ { 0, 0, printargs, "n64_clock_gettime" }, /* 5222 */
+ { 0, 0, printargs, "n64_clock_getres" }, /* 5223 */
+ { 0, 0, printargs, "n64_clock_nanosleep" }, /* 5224 */
+ { 0, 0, printargs, "n64_tgkill" }, /* 5225 */
+ { 0, 0, printargs, "n64_utimes" }, /* 5226 */
+ { 6, TM, printargs, "n64_mbind" }, /* 5227 */
+ { 5, TM, printargs, "n64_get_mempolicy" }, /* 5228 */
+ { 3, TM, printargs, "n64_set_mempolicy" }, /* 5229 */
+ { 0, 0, printargs, "n64_mq_open" }, /* 5230 */
+ { 0, 0, printargs, "n64_mq_unlink" }, /* 5231 */
+ { 0, 0, printargs, "n64_mq_timedsend" }, /* 5232 */
+ { 0, 0, printargs, "n64_mq_timedreceive" }, /* 5233 */
+ { 0, 0, printargs, "n64_mq_notify" }, /* 5234 */
+ { 0, 0, printargs, "n64_mq_getsetattr" }, /* 5235 */
+ { 5, 0, printargs, "n64_vserver" }, /* 5236 */
+ { 0, 0, printargs, "n64_waitid" }, /* 5237 */
+ { 0, 0, printargs, "n64_SYS_5238" }, /* 5238 */
+ { 0, 0, printargs, "n64_add_key" }, /* 5239 */
+ { 0, 0, printargs, "n64_request_key" }, /* 5230 */
+ { 0, 0, printargs, "n64_keyctl" }, /* 5241 */
+ { 0, 0, printargs, "n64_set_thread_area" }, /* 5242 */
+ { 0, 0, printargs, "n64_inotify_init" }, /* 5243 */
+ { 0, 0, printargs, "n64_inotify_add_watch" }, /* 5244 */
+ { 0, 0, printargs, "n64_inotify_rm_watch" }, /* 5245 */
+ { 0, TM, printargs, "n64_migrate_pages" }, /* 5246 */
+ { 0, 0, printargs, "n64_openat" }, /* 5247 */
+ { 0, 0, printargs, "n64_mkdirat" }, /* 5248 */
+ { 0, 0, printargs, "n64_mknodat" }, /* 5249 */
+ { 0, 0, printargs, "n64_fchownat" }, /* 5250 */
+ { 0, 0, printargs, "n64_futimesat" }, /* 5251 */
+ { 0, 0, printargs, "n64_newfstatat" }, /* 5252 */
+ { 0, 0, printargs, "n64_unlinkat" }, /* 5253 */
+ { 0, 0, printargs, "n64_renameat" }, /* 5254 */
+ { 0, 0, printargs, "n64_linkat" }, /* 5255 */
+ { 0, 0, printargs, "n64_symlinkat" }, /* 5256 */
+ { 0, 0, printargs, "n64_readlinkat" }, /* 5257 */
+ { 0, 0, printargs, "n64_fchmodat" }, /* 5258 */
+ { 0, 0, printargs, "n64_faccessat" }, /* 5259 */
+ { 0, 0, printargs, "n64_pselect6" }, /* 5260 */
+ { 0, 0, printargs, "n64_ppoll" }, /* 5261 */
+ { 0, 0, printargs, "n64_unshare" }, /* 5262 */
+ { 0, 0, printargs, "n64_splice" }, /* 5263 */
+ { 0, 0, printargs, "n64_sync_file_range" }, /* 5264 */
+ { 0, 0, printargs, "n64_tee" }, /* 5265 */
+ { 0, 0, printargs, "n64_vmsplice" }, /* 5266 */
+ { 0, TM, printargs, "n64_move_pages" }, /* 5267 */
+ { 0, 0, printargs, "n64_set_robust_list" }, /* 5268 */
+ { 0, 0, printargs, "n64_get_robust_list" }, /* 5269 */
+ { 0, 0, printargs, "n64_kexec_load" }, /* 5270 */
+ { 0, 0, printargs, "n64_getcpu" }, /* 5271 */
+ { 0, 0, printargs, "n64_epoll_pwait" }, /* 5272 */
+ { 0, 0, printargs, "n64_ioprio_set" }, /* 5273 */
+ { 0, 0, printargs, "n64_ioprio_get" }, /* 5274 */
+ { 0, 0, printargs, "n64_utimensat" }, /* 5275 */
+ { 0, 0, printargs, "n64_signalfd" }, /* 5276 */
+ { 4, TD, printargs, "n64_timerfd" }, /* 5277 */
+ { 0, 0, printargs, "n64_eventfd" }, /* 5278 */
+ { 0, 0, printargs, "n64_fallocate" }, /* 5279 */
+ { 0, 0, printargs, "n64_timerfd_create" }, /* 5280 */
+ { 0, 0, printargs, "n64_timerfd_gettime" }, /* 5281 */
+ { 0, 0, printargs, "n64_timerfd_settime" }, /* 5282 */
+ { 0, 0, printargs, "n64_signalfd4" }, /* 5283 */
+ { 0, 0, printargs, "n64_eventfd2" }, /* 5284 */
+ { 0, 0, printargs, "n64_epoll_create1" }, /* 5285 */
+ { 0, 0, printargs, "n64_dup3" }, /* 5286 */
+ { 0, 0, printargs, "n64_pipe2" }, /* 5287 */
+ { 0, 0, printargs, "n64_inotify_init1" }, /* 5288 */
+ { 0, 0, printargs, "n64_preadv" }, /* 5289 */
+ { 0, 0, printargs, "n64_pwritev" }, /* 5290 */
+ { 0, 0, printargs, "n64_rt_tgsigqueueinfo" }, /* 5291 */
+ { 0, 0, printargs, "n64_perf_event_open" }, /* 5292 */
+ { 0, 0, printargs, "n64_accept4" }, /* 5293 */
+ { 0, 0, printargs, "n64_recvmmsg" }, /* 5294 */
+ { 2, 0, printargs, "n64_fanotify_init" }, /* 5295 */
+ { 5, 0, printargs, "n64_fanotify_mark" }, /* 5296 */
+ { 4, 0, printargs, "n64_prlimit64" }, /* 5297 */
+ { 5, TD|TF, printargs, "n64_name_to_handle_at" }, /* 5298 */
+ { 3, TD, printargs, "n64_open_by_handle_at" }, /* 5299 */
+ { 2, 0, printargs, "n64_clock_adjtime" }, /* 5300 */
+ { 1, TD, printargs, "n64_syncfs" }, /* 5301 */
+ { 4, TN, printargs, "n64_sendmmsg" }, /* 5302 */
+ { 2, TD, printargs, "n64_setns" }, /* 5303 */
+ { 6, 0, printargs, "n64_process_vm_readv" }, /* 5304 */
+ { 6, 0, printargs, "n64_process_vm_writev" }, /* 5305 */
+ { 5, 0, printargs, "kcmp" }, /* 5306 */
+ { 3, TD, printargs, "finit_module" }, /* 5307 */
+#endif
+ [5308 ... 5999] = { }, /* 5999 */ /* end of Linux N64 */
diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h
new file mode 100644
index 0000000..c23ac14
--- /dev/null
+++ b/linux/mips/syscallent-o32.h
@@ -0,0 +1,703 @@
+#if defined LINUX_MIPSO32
+ /* For an O32 strace, decode the o32 syscalls. */
+ { MA, 0, printargs, "syscall" }, /* 4000 */ /* start of Linux o32 */
+ { 1, TP, sys_exit, "exit" }, /* 4001 */
+ { 0, TP, sys_fork, "fork" }, /* 4002 */
+ { 3, TD, sys_read, "read" }, /* 4003 */
+ { 3, TD, sys_write, "write" }, /* 4004 */
+ { 3, TD|TF, sys_open, "open" }, /* 4005 */
+ { 1, TD, sys_close, "close" }, /* 4006 */
+ { 3, TP, sys_waitpid, "waitpid" }, /* 4007 */
+ { 2, TD|TF, sys_creat, "creat" }, /* 4008 */
+ { 2, TF, sys_link, "link" }, /* 4009 */
+ { 1, TF, sys_unlink, "unlink" }, /* 4010 */
+ { 3, TF|TP, sys_execve, "execve" }, /* 4011 */
+ { 1, TF, sys_chdir, "chdir" }, /* 4012 */
+ { 1, 0, sys_time, "time" }, /* 4013 */
+ { 3, TF, sys_mknod, "mknod" }, /* 4014 */
+ { 2, TF, sys_chmod, "chmod" }, /* 4015 */
+ { 3, TF, sys_chown, "lchown" }, /* 4016 */
+ { 0, TM, sys_break, "break" }, /* 4017 */
+ { 2, TF, sys_oldstat, "oldstat" }, /* 4018 */
+ { 3, TD, sys_lseek, "lseek" }, /* 4019 */
+ { 0, 0, sys_getpid, "getpid" }, /* 4020 */
+ { 5, TF, sys_mount, "mount" }, /* 4021 */
+ { 1, TF, sys_umount, "umount" }, /* 4022 */
+ { 1, 0, sys_setuid, "setuid" }, /* 4023 */
+ { 0, NF, sys_getuid, "getuid" }, /* 4024 */
+ { 1, 0, sys_stime, "stime" }, /* 4025 */
+ { 4, 0, sys_ptrace, "ptrace" }, /* 4026 */
+ { 1, 0, sys_alarm, "alarm" }, /* 4027 */
+ { 2, TD, sys_oldfstat, "oldfstat" }, /* 4028 */
+ { 0, TS, sys_pause, "pause" }, /* 4029 */
+ { 2, TF, sys_utime, "utime" }, /* 4030 */
+ { 0, 0, sys_stty, "stty" }, /* 4031 */
+ { 0, 0, sys_gtty, "gtty" }, /* 4032 */
+ { 2, TF, sys_access, "access" }, /* 4033 */
+ { 1, 0, sys_nice, "nice" }, /* 4034 */
+ { 1, 0, sys_ftime, "ftime" }, /* 4035 */
+ { 0, 0, sys_sync, "sync" }, /* 4036 */
+ { 2, TS, sys_kill, "kill" }, /* 4037 */
+ { 2, TF, sys_rename, "rename" }, /* 4038 */
+ { 2, TF, sys_mkdir, "mkdir" }, /* 4039 */
+ { 1, TF, sys_rmdir, "rmdir" }, /* 4040 */
+ { 1, TD, sys_dup, "dup" }, /* 4041 */
+ { 1, TD, sys_pipe, "pipe" }, /* 4042 */
+ { 1, 0, sys_times, "times" }, /* 4043 */
+ { 0, 0, sys_prof, "prof" }, /* 4044 */
+ { 1, TM, sys_brk, "brk" }, /* 4045 */
+ { 1, 0, sys_setgid, "setgid" }, /* 4046 */
+ { 0, NF, sys_getgid, "getgid" }, /* 4047 */
+ { 1, TS, sys_signal, "signal" }, /* 4048 */
+ { 0, NF, sys_geteuid, "geteuid" }, /* 4049 */
+ { 0, NF, sys_getegid, "getegid" }, /* 4050 */
+ { 1, TF, sys_acct, "acct" }, /* 4051 */
+ { 2, TF, sys_umount2, "umount2" }, /* 4052 */
+ { 0, 0, sys_lock, "lock" }, /* 4053 */
+ { 3, TD, sys_ioctl, "ioctl" }, /* 4054 */
+ { 3, TD, sys_fcntl, "fcntl" }, /* 4055 */
+ { 0, 0, sys_mpx, "mpx" }, /* 4056 */
+ { 2, 0, sys_setpgid, "setpgid" }, /* 4057 */
+ { 0, 0, sys_ulimit, "ulimit" }, /* 4058 */
+ { 1, 0, sys_oldolduname, "oldolduname" }, /* 4059 */
+ { 1, 0, sys_umask, "umask" }, /* 4060 */
+ { 1, TF, sys_chroot, "chroot" }, /* 4061 */
+ { 2, 0, sys_ustat, "ustat" }, /* 4062 */
+ { 2, TD, sys_dup2, "dup2" }, /* 4063 */
+ { 0, 0, sys_getppid, "getppid" }, /* 4064 */
+ { 0, 0, sys_getpgrp, "getpgrp" }, /* 4065 */
+ { 0, 0, sys_setsid, "setsid" }, /* 4066 */
+ { 3, TS, sys_sigaction, "sigaction" }, /* 4067 */
+ { 0, TS, sys_siggetmask, "sgetmask" }, /* 4068 */
+ { 1, TS, sys_sigsetmask, "ssetmask" }, /* 4069 */
+ { 2, 0, sys_setreuid, "setreuid" }, /* 4070 */
+ { 2, 0, sys_setregid, "setregid" }, /* 4071 */
+ { 3, TS, sys_sigsuspend, "sigsuspend" }, /* 4072 */
+ { 1, TS, sys_sigpending, "sigpending" }, /* 4073 */
+ { 2, 0, sys_sethostname, "sethostname" }, /* 4074 */
+ { 2, 0, sys_setrlimit, "setrlimit" }, /* 4075 */
+ { 2, 0, sys_getrlimit, "getrlimit" }, /* 4076 */
+ { 2, 0, sys_getrusage, "getrusage" }, /* 4077 */
+ { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 4078 */
+ { 2, 0, sys_settimeofday, "settimeofday" }, /* 4079 */
+ { 2, 0, sys_getgroups, "getgroups" }, /* 4080 */
+ { 2, 0, sys_setgroups, "setgroups" }, /* 4081 */
+ { 0, 0, printargs, "reserved82" }, /* 4082 */
+ { 2, TF, sys_symlink, "symlink" }, /* 4083 */
+ { 2, TF, sys_oldlstat, "oldlstat" }, /* 4084 */
+ { 3, TF, sys_readlink, "readlink" }, /* 4085 */
+ { 1, TF, sys_uselib, "uselib" }, /* 4086 */
+ { 2, TF, sys_swapon, "swapon" }, /* 4087 */
+ { 4, 0, sys_reboot, "reboot" }, /* 4088 */
+ { 3, TD, sys_readdir, "readdir" }, /* 4089 */
+ { 6, TD|TM, sys_mmap, "mmap" }, /* 4090 */
+ { 2, TM, sys_munmap, "munmap" }, /* 4091 */
+ { 2, TF, sys_truncate, "truncate" }, /* 4092 */
+ { 2, TD, sys_ftruncate, "ftruncate" }, /* 4093 */
+ { 2, TD, sys_fchmod, "fchmod" }, /* 4094 */
+ { 3, TD, sys_fchown, "fchown" }, /* 4095 */
+ { 2, 0, sys_getpriority, "getpriority" }, /* 4096 */
+ { 3, 0, sys_setpriority, "setpriority" }, /* 4097 */
+ { 0, 0, sys_profil, "profil" }, /* 4098 */
+ { 3, TF, sys_statfs, "statfs" }, /* 4099 */
+ { 3, TD, sys_fstatfs, "fstatfs" }, /* 4100 */
+ { 0, 0, sys_ioperm, "ioperm" }, /* 4101 */
+ { 2, TD, sys_socketcall, "socketcall" }, /* 4102 */
+ { 3, 0, sys_syslog, "syslog" }, /* 4103 */
+ { 3, 0, sys_setitimer, "setitimer" }, /* 4104 */
+ { 2, 0, sys_getitimer, "getitimer" }, /* 4105 */
+ { 2, TF, sys_stat, "stat" }, /* 4106 */
+ { 2, TF, sys_lstat, "lstat" }, /* 4107 */
+ { 2, TD, sys_fstat, "fstat" }, /* 4108 */
+ { 1, 0, sys_olduname, "olduname" }, /* 4109 */
+ { 0, 0, sys_iopl, "iopl" }, /* 4110 */
+ { 0, 0, sys_vhangup, "vhangup" }, /* 4111 */
+ { 0, 0, sys_idle, "idle" }, /* 4112 */
+ { 5, 0, sys_vm86old, "vm86" }, /* 4113 */
+ { 4, TP, sys_wait4, "wait4" }, /* 4114 */
+ { 1, TF, sys_swapoff, "swapoff" }, /* 4115 */
+ { 1, 0, sys_sysinfo, "sysinfo" }, /* 4116 */
+ { 6, TI, sys_ipc, "ipc" }, /* 4117 */
+ { 1, TD, sys_fsync, "fsync" }, /* 4118 */
+ { 0, TS, sys_sigreturn, "sigreturn" }, /* 4119 */
+ { 5, TP, sys_clone, "clone" }, /* 4120 */
+ { 2, 0, sys_setdomainname, "setdomainname" }, /* 4121 */
+ { 1, 0, sys_uname, "uname" }, /* 4122 */
+ { 0, 0, sys_modify_ldt, "modify_ldt" }, /* 4123 */
+ { 1, 0, sys_adjtimex, "adjtimex" }, /* 4124 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 4125 */
+ { 3, TS, sys_sigprocmask, "sigprocmask" }, /* 4126 */
+ { 2, 0, sys_create_module, "create_module" }, /* 4127 */
+ { 3, 0, sys_init_module, "init_module" }, /* 4128 */
+ { 2, 0, sys_delete_module, "delete_module" }, /* 4129 */
+ { 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 4130 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 4131 */
+ { 1, 0, sys_getpgid, "getpgid" }, /* 4132 */
+ { 1, TD, sys_fchdir, "fchdir" }, /* 4133 */
+ { 2, 0, sys_bdflush, "bdflush" }, /* 4134 */
+ { 3, 0, sys_sysfs, "sysfs" }, /* 4135 */
+ { 1, 0, sys_personality, "personality" }, /* 4136 */
+ { 0, 0, sys_afs_syscall, "afs_syscall" }, /* 4137 */
+ { 1, NF, sys_setfsuid, "setfsuid" }, /* 4138 */
+ { 1, NF, sys_setfsgid, "setfsgid" }, /* 4139 */
+ { 5, TD, sys_llseek, "_llseek" }, /* 4140 */
+ { 3, TD, sys_getdents, "getdents" }, /* 4141 */
+ { 5, TD, sys_select, "_newselect" }, /* 4142 */
+ { 2, TD, sys_flock, "flock" }, /* 4143 */
+ { 3, TM, sys_msync, "msync" }, /* 4144 */
+ { 3, TD, sys_readv, "readv" }, /* 4145 */
+ { 3, TD, sys_writev, "writev" }, /* 4146 */
+ { 3, 0, printargs, "cacheflush" }, /* 4147 */
+ { 3, 0, printargs, "cachectl" }, /* 4148 */
+ { 4, 0, sys_sysmips, "sysmips" }, /* 4149 */
+ { 0, 0, sys_setup, "setup" }, /* 4150 */
+ { 1, 0, sys_getsid, "getsid" }, /* 4151 */
+ { 1, TD, sys_fdatasync, "fdatasync" }, /* 4152 */
+ { 1, 0, sys_sysctl, "_sysctl" }, /* 4153 */
+ { 2, TM, sys_mlock, "mlock" }, /* 4154 */
+ { 2, TM, sys_munlock, "munlock" }, /* 4155 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 4156 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 4157 */
+ { 2, 0, sys_sched_setparam, "sched_setparam"}, /* 4158 */
+ { 2, 0, sys_sched_getparam, "sched_getparam"}, /* 4159 */
+ { 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 4160 */
+ { 1, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 4161 */
+ { 0, 0, sys_sched_yield, "sched_yield" }, /* 4162 */
+ { 1, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 4163 */
+ { 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 4164 */
+ { 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 4165 */
+ { 2, 0, sys_nanosleep, "nanosleep" }, /* 4166 */
+ { 5, TM, sys_mremap, "mremap" }, /* 4167 */
+ { 3, TN, sys_accept, "accept" }, /* 4168 */
+ { 3, TN, sys_bind, "bind" }, /* 4169 */
+ { 3, TN, sys_connect, "connect" }, /* 4170 */
+ { 3, TN, sys_getpeername, "getpeername" }, /* 4171 */
+ { 3, TN, sys_getsockname, "getsockname" }, /* 4172 */
+ { 5, TN, sys_getsockopt, "getsockopt" }, /* 4173 */
+ { 2, TN, sys_listen, "listen" }, /* 4174 */
+ { 4, TN, sys_recv, "recv" }, /* 4175 */
+ { 6, TN, sys_recvfrom, "recvfrom" }, /* 4176 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 4177 */
+ { 4, TN, sys_send, "send" }, /* 4178 */
+ { 3, TN, sys_sendmsg, "sendmsg" }, /* 4179 */
+ { 6, TN, sys_sendto, "sendto" }, /* 4180 */
+ { 5, TN, sys_setsockopt, "setsockopt" }, /* 4181 */
+ { 2, TN, sys_shutdown, "shutdown" }, /* 4182 */
+ { 3, TN, sys_socket, "socket" }, /* 4183 */
+ { 4, TN, sys_socketpair, "socketpair" }, /* 4184 */
+ { 3, 0, sys_setresuid, "setresuid" }, /* 4185 */
+ { 3, 0, sys_getresuid, "getresuid" }, /* 4186 */
+ { 5, 0, sys_query_module, "query_module" }, /* 4187 */
+ { 3, TD, sys_poll, "poll" }, /* 4188 */
+ { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 4189 */
+ { 3, 0, sys_setresgid, "setresgid" }, /* 4190 */
+ { 3, 0, sys_getresgid, "getresgid" }, /* 4191 */
+ { 5, 0, sys_prctl, "prctl" }, /* 4192 */
+ { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 4193 */
+ { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 4194 */
+ { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 4195 */
+ { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 4196 */
+ { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait"},/* 4197 */
+ { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"},/* 4198 */
+ { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 4199 */
+ { 6, TD, sys_pread, "pread64" }, /* 4200 */
+ { 6, TD, sys_pwrite, "pwrite64" }, /* 4201 */
+ { 3, TF, sys_chown, "chown" }, /* 4202 */
+ { 2, TF, sys_getcwd, "getcwd" }, /* 4203 */
+ { 2, 0, sys_capget, "capget" }, /* 4204 */
+ { 2, 0, sys_capset, "capset" }, /* 4205 */
+ { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 4206 */
+ { 4, TD|TN, sys_sendfile, "sendfile" }, /* 4207 */
+ { 5, TN, printargs, "getpmsg" }, /* 4208 */
+ { 5, TN, printargs, "putpmsg" }, /* 4209 */
+ { 6, TD|TM, sys_mmap_4koff, "mmap2" }, /* 4210 */
+ { 4, TF, sys_truncate64, "truncate64" }, /* 4211 */
+ { 4, TD, sys_ftruncate64, "ftruncate64" }, /* 4212 */
+ { 2, TF, sys_stat64, "stat64" }, /* 4213 */
+ { 2, TF, sys_lstat64, "lstat64" }, /* 4214 */
+ { 2, TD, sys_fstat64, "fstat64" }, /* 4215 */
+ { 2, TF, sys_pivotroot, "pivot_root" }, /* 4216 */
+ { 3, TM, sys_mincore, "mincore" }, /* 4217 */
+ { 3, TM, sys_madvise, "madvise" }, /* 4218 */
+ { 3, TD, sys_getdents64, "getdents64" }, /* 4219 */
+ { 3, TD, sys_fcntl, "fcntl64" }, /* 4220 */
+ { 0, 0, NULL, NULL }, /* 4221 */
+ { 0, 0, sys_gettid, "gettid" }, /* 4222 */
+ { 5, TD, sys_readahead, "readahead" }, /* 4223 */
+ { 5, TF, sys_setxattr, "setxattr" }, /* 4224 */
+ { 5, TF, sys_setxattr, "lsetxattr" }, /* 4225 */
+ { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 4226 */
+ { 4, TF, sys_getxattr, "getxattr" }, /* 4227 */
+ { 4, TF, sys_getxattr, "lgetxattr" }, /* 4228 */
+ { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 4229 */
+ { 3, TF, sys_listxattr, "listxattr" }, /* 4230 */
+ { 3, TF, sys_listxattr, "llistxattr" }, /* 4231 */
+ { 3, TD, sys_flistxattr, "flistxattr" }, /* 4232 */
+ { 2, TF, sys_removexattr, "removexattr" }, /* 4233 */
+ { 2, TF, sys_removexattr, "lremovexattr" }, /* 4234 */
+ { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 4235 */
+ { 2, TS, sys_kill, "tkill" }, /* 4236 */
+ { 4, TD|TN, sys_sendfile64, "sendfile64" }, /* 4237 */
+ { 6, 0, sys_futex, "futex" }, /* 4238 */
+ { 3, 0, sys_sched_setaffinity, "sched_setaffinity"}, /* 4239 */
+ { 3, 0, sys_sched_getaffinity, "sched_getaffinity"}, /* 4240 */
+ { 2, 0, sys_io_setup, "io_setup" }, /* 4241 */
+ { 1, 0, sys_io_destroy, "io_destroy" }, /* 4242 */
+ { 5, 0, sys_io_getevents, "io_getevents" }, /* 4243 */
+ { 3, 0, sys_io_submit, "io_submit" }, /* 4244 */
+ { 3, 0, sys_io_cancel, "io_cancel" }, /* 4245 */
+ { 1, TP, sys_exit, "exit_group" }, /* 4246 */
+ { 4, 0, sys_lookup_dcookie, "lookup_dcookie"}, /* 4247 */
+ { 1, TD, sys_epoll_create, "epoll_create" }, /* 4248 */
+ { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 4249 */
+ { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 4250 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages"}, /* 4251 */
+ { 1, 0, sys_set_tid_address, "set_tid_address"}, /* 4252 */
+ { 0, 0, sys_restart_syscall, "restart_syscall"}, /* 4253 */
+ { 7, TD, sys_fadvise64_64, "fadvise64_64" }, /* 4254 */
+ { 3, TF, sys_statfs64, "statfs64" }, /* 4255 */
+ { 2, TD, sys_fstatfs64, "fstatfs64" }, /* 4256 */
+ { 3, 0, sys_timer_create, "timer_create" }, /* 4257 */
+ { 4, 0, sys_timer_settime, "timer_settime" }, /* 4258 */
+ { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 4259 */
+ { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 4260 */
+ { 1, 0, sys_timer_delete, "timer_delete" }, /* 4261 */
+ { 2, 0, sys_clock_settime, "clock_settime" }, /* 4262 */
+ { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 4263 */
+ { 2, 0, sys_clock_getres, "clock_getres" }, /* 4264 */
+ { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 4265 */
+ { 3, TS, sys_tgkill, "tgkill" }, /* 4266 */
+ { 2, TF, sys_utimes, "utimes" }, /* 4267 */
+ { 4, TM, sys_mbind, "mbind" }, /* 4268 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 4269 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 4270 */
+ { 4, 0, sys_mq_open, "mq_open" }, /* 4271 */
+ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 4272 */
+ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 4273 */
+ { 5, 0, sys_mq_timedreceive, "mq_timedreceive"}, /* 4274 */
+ { 2, 0, sys_mq_notify, "mq_notify" }, /* 4275 */
+ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 4276 */
+ { 5, 0, sys_vserver, "vserver" }, /* 4277 */
+ { 5, TP, sys_waitid, "waitid" }, /* 4278 */
+ { 0, 0, NULL, NULL }, /* 4279 */
+ { 5, 0, sys_add_key, "add_key" }, /* 4280 */
+ { 4, 0, sys_request_key, "request_key" }, /* 4281 */
+ { 5, 0, sys_keyctl, "keyctl" }, /* 4282 */
+ { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 4283 */
+ { 0, TD, sys_inotify_init, "inotify_init" }, /* 4284 */
+ { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 4285 */
+ { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 4286 */
+ { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 4287 */
+ { 4, TD|TF, sys_openat, "openat" }, /* 4288 */
+ { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 4289 */
+ { 4, TD|TF, sys_mknodat, "mknodat" }, /* 4290 */
+ { 5, TD|TF, sys_fchownat, "fchownat" }, /* 4291 */
+ { 3, TD|TF, sys_futimesat, "futimesat" }, /* 4292 */
+ { 4, TD|TF, sys_newfstatat, "fstatat64" }, /* 4293 */
+ { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 4294 */
+ { 4, TD|TF, sys_renameat, "renameat" }, /* 4295 */
+ { 5, TD|TF, sys_linkat, "linkat" }, /* 4296 */
+ { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 4297 */
+ { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 4298 */
+ { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 4299 */
+ { 3, TD|TF, sys_faccessat, "faccessat" }, /* 4300 */
+ { 6, TD, sys_pselect6, "pselect6" }, /* 4301 */
+ { 5, TD, sys_ppoll, "ppoll" }, /* 4302 */
+ { 1, TP, sys_unshare, "unshare" }, /* 4303 */
+ { 6, TD, sys_splice, "splice" }, /* 4304 */
+ { 6, TD, sys_sync_file_range, "sync_file_range" }, /* 4305 */
+ { 4, TD, sys_tee, "tee" }, /* 4306 */
+ { 4, TD, sys_vmsplice, "vmsplice" }, /* 4307 */
+ { 6, TM, sys_move_pages, "move_pages" }, /* 4308 */
+ { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 4309 */
+ { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 4310 */
+ { 4, 0, sys_kexec_load, "kexec_load" }, /* 4311 */
+ { 3, 0, sys_getcpu, "getcpu" }, /* 4312 */
+ { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 4313 */
+ { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 4314 */
+ { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 4315 */
+ { 4, 0, printargs, "utimensat" }, /* 4316 */
+ { 3, TD|TS, sys_signalfd, "signalfd" }, /* 4317 */
+ { 4, TD, sys_timerfd, "timerfd" }, /* 4318 */
+ { 1, TD, sys_eventfd, "eventfd" }, /* 4319 */
+ { 6, TD, sys_fallocate, "fallocate" }, /* 4320 */
+ { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 4321 */
+ { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 4322 */
+ { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 4323 */
+ { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 4324 */
+ { 2, TD, sys_eventfd2, "eventfd2" }, /* 4325 */
+ { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 4326 */
+ { 3, TD, sys_dup3, "dup3" }, /* 4327 */
+ { 2, TD, sys_pipe2, "pipe2" }, /* 4328 */
+ { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 4329 */
+ { 6, TD, sys_preadv, "preadv" }, /* 4330 */
+ { 6, TD, sys_pwritev, "pwritev" }, /* 4331 */
+ { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 4332 */
+ { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 4333 */
+ { 4, TN, sys_accept4, "accept4" }, /* 4334 */
+ { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 4335 */
+ { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 4336 */
+ { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 4337 */
+ { 4, 0, sys_prlimit64, "prlimit64" }, /* 4338 */
+ { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at"}, /* 4339 */
+ { 3, TD, sys_open_by_handle_at, "open_by_handle_at"}, /* 4340 */
+ { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 4341 */
+ { 1, TD, sys_syncfs, "syncfs" }, /* 4342 */
+ { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 4343 */
+ { 2, TD, sys_setns, "setns" }, /* 4344 */
+ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 4345 */
+ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 4346 */
+ { 5, 0, sys_kcmp, "kcmp" }, /* 4347 */
+ { 3, TD, sys_finit_module, "finit_module" }, /* 4348 */
+#else
+ { 0, 0, printargs, "o32_syscall" }, /* 4000 */
+ { 0, 0, printargs, "o32_exit" }, /* 4001 */
+ { 0, 0, printargs, "o32_fork" }, /* 4002 */
+ { 0, 0, printargs, "o32_read" }, /* 4003 */
+ { 0, 0, printargs, "o32_write" }, /* 4004 */
+ { 0, 0, printargs, "o32_open" }, /* 4005 */
+ { 0, 0, printargs, "o32_close" }, /* 4006 */
+ { 0, 0, printargs, "o32_waitpid" }, /* 4007 */
+ { 0, 0, printargs, "o32_creat" }, /* 4008 */
+ { 0, 0, printargs, "o32_link" }, /* 4009 */
+ { 0, 0, printargs, "o32_unlink" }, /* 4010 */
+ { 0, 0, printargs, "o32_execve" }, /* 4011 */
+ { 0, 0, printargs, "o32_chdir" }, /* 4012 */
+ { 0, 0, printargs, "o32_time" }, /* 4013 */
+ { 0, 0, printargs, "o32_mknod" }, /* 4014 */
+ { 0, 0, printargs, "o32_chmod" }, /* 4015 */
+ { 0, 0, printargs, "o32_lchown" }, /* 4016 */
+ { 0, TM, printargs, "o32_break" }, /* 4017 */
+ { 0, 0, printargs, "o32_oldstat" }, /* 4018 */
+ { 0, 0, printargs, "o32_lseek" }, /* 4019 */
+ { 0, 0, printargs, "o32_getpid" }, /* 4020 */
+ { 0, 0, printargs, "o32_mount" }, /* 4021 */
+ { 0, 0, printargs, "o32_umount" }, /* 4022 */
+ { 0, 0, printargs, "o32_setuid" }, /* 4023 */
+ { 0, 0, printargs, "o32_getuid" }, /* 4024 */
+ { 0, 0, printargs, "o32_stime" }, /* 4025 */
+ { 0, 0, printargs, "o32_ptrace" }, /* 4026 */
+ { 0, 0, printargs, "o32_alarm" }, /* 4027 */
+ { 0, 0, printargs, "o32_oldfstat" }, /* 4028 */
+ { 0, 0, printargs, "o32_pause" }, /* 4029 */
+ { 0, 0, printargs, "o32_utime" }, /* 4030 */
+ { 0, 0, printargs, "o32_stty" }, /* 4031 */
+ { 0, 0, printargs, "o32_gtty" }, /* 4032 */
+ { 0, 0, printargs, "o32_access" }, /* 4033 */
+ { 0, 0, printargs, "o32_nice" }, /* 4034 */
+ { 0, 0, printargs, "o32_ftime" }, /* 4035 */
+ { 0, 0, printargs, "o32_sync" }, /* 4036 */
+ { 0, 0, printargs, "o32_kill" }, /* 4037 */
+ { 0, 0, printargs, "o32_rename" }, /* 4038 */
+ { 0, 0, printargs, "o32_mkdir" }, /* 4039 */
+ { 0, 0, printargs, "o32_rmdir" }, /* 4040 */
+ { 0, 0, printargs, "o32_dup" }, /* 4041 */
+ { 0, 0, printargs, "o32_pipe" }, /* 4042 */
+ { 0, 0, printargs, "o32_times" }, /* 4043 */
+ { 0, 0, printargs, "o32_prof" }, /* 4044 */
+ { 0, TM, printargs, "o32_brk" }, /* 4045 */
+ { 0, 0, printargs, "o32_setgid" }, /* 4046 */
+ { 0, 0, printargs, "o32_getgid" }, /* 4047 */
+ { 0, 0, printargs, "o32_signal" }, /* 4048 */
+ { 0, 0, printargs, "o32_geteuid" }, /* 4049 */
+ { 0, 0, printargs, "o32_getegid" }, /* 4050 */
+ { 0, 0, printargs, "o32_acct" }, /* 4051 */
+ { 0, 0, printargs, "o32_umount2" }, /* 4052 */
+ { 0, 0, printargs, "o32_lock" }, /* 4053 */
+ { 0, 0, printargs, "o32_ioctl" }, /* 4054 */
+ { 0, 0, printargs, "o32_fcntl" }, /* 4055 */
+ { 0, 0, printargs, "o32_mpx" }, /* 4056 */
+ { 0, 0, printargs, "o32_setpgid" }, /* 4057 */
+ { 0, 0, printargs, "o32_ulimit" }, /* 4058 */
+ { 0, 0, printargs, "o32_oldolduname" }, /* 4059 */
+ { 0, 0, printargs, "o32_umask" }, /* 4060 */
+ { 0, 0, printargs, "o32_chroot" }, /* 4061 */
+ { 0, 0, printargs, "o32_ustat" }, /* 4062 */
+ { 0, 0, printargs, "o32_dup2" }, /* 4063 */
+ { 0, 0, printargs, "o32_getppid" }, /* 4064 */
+ { 0, 0, printargs, "o32_getpgrp" }, /* 4065 */
+ { 0, 0, printargs, "o32_setsid" }, /* 4066 */
+ { 0, 0, printargs, "o32_sigaction" }, /* 4067 */
+ { 0, 0, printargs, "o32_siggetmask" }, /* 4068 */
+ { 0, 0, printargs, "o32_sigsetmask" }, /* 4069 */
+ { 0, 0, printargs, "o32_setreuid" }, /* 4070 */
+ { 0, 0, printargs, "o32_setregid" }, /* 4071 */
+ { 0, 0, printargs, "o32_sigsuspend" }, /* 4072 */
+ { 0, 0, printargs, "o32_sigpending" }, /* 4073 */
+ { 0, 0, printargs, "o32_sethostname" }, /* 4074 */
+ { 0, 0, printargs, "o32_setrlimit" }, /* 4075 */
+ { 0, 0, printargs, "o32_getrlimit" }, /* 4076 */
+ { 0, 0, printargs, "o32_getrusage" }, /* 4077 */
+ { 0, 0, printargs, "o32_gettimeofday" }, /* 4078 */
+ { 0, 0, printargs, "o32_settimeofday" }, /* 4079 */
+ { 0, 0, printargs, "o32_getgroups" }, /* 4080 */
+ { 0, 0, printargs, "o32_setgroups" }, /* 4081 */
+ { 0, 0, printargs, "o32_reserved82" }, /* 4082 */
+ { 0, 0, printargs, "o32_symlink" }, /* 4083 */
+ { 0, 0, printargs, "o32_oldlstat" }, /* 4084 */
+ { 0, 0, printargs, "o32_readlink" }, /* 4085 */
+ { 0, 0, printargs, "o32_uselib" }, /* 4086 */
+ { 0, 0, printargs, "o32_swapon" }, /* 4087 */
+ { 0, 0, printargs, "o32_reboot" }, /* 4088 */
+ { 0, 0, printargs, "o32_readdir" }, /* 4089 */
+ { 0, TD|TM, printargs, "o32_mmap" }, /* 4090 */
+ { 0, TM, printargs, "o32_munmap" }, /* 4091 */
+ { 0, 0, printargs, "o32_truncate" }, /* 4092 */
+ { 0, 0, printargs, "o32_ftruncate" }, /* 4093 */
+ { 0, 0, printargs, "o32_fchmod" }, /* 4094 */
+ { 0, 0, printargs, "o32_fchown" }, /* 4095 */
+ { 0, 0, printargs, "o32_getpriority" }, /* 4096 */
+ { 0, 0, printargs, "o32_setpriority" }, /* 4097 */
+ { 0, 0, printargs, "o32_profil" }, /* 4098 */
+ { 0, 0, printargs, "o32_statfs" }, /* 4099 */
+ { 0, 0, printargs, "o32_fstatfs" }, /* 4100 */
+ { 0, 0, printargs, "o32_ioperm" }, /* 4101 */
+ { 0, 0, printargs, "o32_socketcall" }, /* 4102 */
+ { 0, 0, printargs, "o32_syslog" }, /* 4103 */
+ { 0, 0, printargs, "o32_setitimer" }, /* 4104 */
+ { 0, 0, printargs, "o32_getitimer" }, /* 4105 */
+ { 0, 0, printargs, "o32_stat" }, /* 4106 */
+ { 0, 0, printargs, "o32_lstat" }, /* 4107 */
+ { 0, 0, printargs, "o32_fstat" }, /* 4108 */
+ { 0, 0, printargs, "o32_olduname" }, /* 4109 */
+ { 0, 0, printargs, "o32_iopl" }, /* 4110 */
+ { 0, 0, printargs, "o32_vhangup" }, /* 4111 */
+ { 0, 0, printargs, "o32_idle" }, /* 4112 */
+ { 0, 0, printargs, "o32_vm86" }, /* 4113 */
+ { 0, 0, printargs, "o32_wait4" }, /* 4114 */
+ { 0, 0, printargs, "o32_swapoff" }, /* 4115 */
+ { 0, 0, printargs, "o32_sysinfo" }, /* 4116 */
+ { 0, 0, printargs, "o32_ipc" }, /* 4117 */
+ { 0, 0, printargs, "o32_fsync" }, /* 4118 */
+ { 0, 0, printargs, "o32_sigreturn" }, /* 4119 */
+ { 0, 0, printargs, "o32_clone" }, /* 4120 */
+ { 0, 0, printargs, "o32_setdomainname" }, /* 4121 */
+ { 0, 0, printargs, "o32_uname" }, /* 4122 */
+ { 0, 0, printargs, "o32_modify_ldt" }, /* 4123 */
+ { 0, 0, printargs, "o32_adjtimex" }, /* 4124 */
+ { 0, TM, printargs, "o32_mprotect" }, /* 4125 */
+ { 0, 0, printargs, "o32_sigprocmask" }, /* 4126 */
+ { 0, 0, printargs, "o32_create_module" }, /* 4127 */
+ { 0, 0, printargs, "o32_init_module" }, /* 4128 */
+ { 0, 0, printargs, "o32_delete_module" }, /* 4129 */
+ { 0, 0, printargs, "o32_get_kernel_syms"}, /* 4130 */
+ { 0, TF, printargs, "o32_quotactl" }, /* 4131 */
+ { 0, 0, printargs, "o32_getpgid" }, /* 4132 */
+ { 0, 0, printargs, "o32_fchdir" }, /* 4133 */
+ { 0, 0, printargs, "o32_bdflush" }, /* 4134 */
+ { 0, 0, printargs, "o32_sysfs" }, /* 4135 */
+ { 0, 0, printargs, "o32_personality" }, /* 4136 */
+ { 0, 0, printargs, "o32_afs_syscall" }, /* 4137 */
+ { 0, 0, printargs, "o32_setfsuid" }, /* 4138 */
+ { 0, 0, printargs, "o32_setfsgid" }, /* 4139 */
+ { 0, 0, printargs, "o32__llseek" }, /* 4140 */
+ { 0, 0, printargs, "o32_getdents" }, /* 4141 */
+ { 0, 0, printargs, "o32__newselect" }, /* 4142 */
+ { 0, 0, printargs, "o32_flock" }, /* 4143 */
+ { 0, TM, printargs, "o32_msync" }, /* 4144 */
+ { 0, 0, printargs, "o32_readv" }, /* 4145 */
+ { 0, 0, printargs, "o32_writev" }, /* 4146 */
+ { 0, 0, printargs, "o32_cacheflush" }, /* 4147 */
+ { 0, 0, printargs, "o32_cachectl" }, /* 4148 */
+ { 0, 0, printargs, "o32_sysmips" }, /* 4149 */
+ { 0, 0, printargs, "o32_setup" }, /* 4150 */
+ { 0, 0, printargs, "o32_getsid" }, /* 4151 */
+ { 0, 0, printargs, "o32_fdatasync" }, /* 4152 */
+ { 0, 0, printargs, "o32__sysctl" }, /* 4153 */
+ { 0, TM, printargs, "o32_mlock" }, /* 4154 */
+ { 0, TM, printargs, "o32_munlock" }, /* 4155 */
+ { 0, TM, printargs, "o32_mlockall" }, /* 4156 */
+ { 0, TM, printargs, "o32_munlockall" }, /* 4157 */
+ { 0, 0, printargs, "o32_sched_setparam"}, /* 4158 */
+ { 0, 0, printargs, "o32_sched_getparam"}, /* 4159 */
+ { 0, 0, printargs, "o32_sched_setscheduler"}, /* 4160 */
+ { 0, 0, printargs, "o32_sched_getscheduler"}, /* 4161 */
+ { 0, 0, printargs, "o32_sched_yield" }, /* 4162 */
+ { 0, 0, printargs, "o32_sched_get_priority_max"}, /* 4163 */
+ { 0, 0, printargs, "o32_sched_get_priority_min"},/* 4164 */
+ { 0, 0, printargs, "o32_sched_rr_get_interval"}, /* 4165 */
+ { 0, 0, printargs, "o32_nanosleep" }, /* 4166 */
+ { 0, TM, printargs, "o32_mremap" }, /* 4167 */
+ { 0, 0, printargs, "o32_accept" }, /* 4168 */
+ { 0, 0, printargs, "o32_bind" }, /* 4169 */
+ { 0, 0, printargs, "o32_connect" }, /* 4170 */
+ { 0, 0, printargs, "o32_getpeername" }, /* 4171 */
+ { 0, 0, printargs, "o32_getsockname" }, /* 4172 */
+ { 0, 0, printargs, "o32_getsockopt" }, /* 4173 */
+ { 0, 0, printargs, "o32_listen" }, /* 4174 */
+ { 0, 0, printargs, "o32_recv" }, /* 4175 */
+ { 0, 0, printargs, "o32_recvfrom" }, /* 4176 */
+ { 0, 0, printargs, "o32_recvmsg" }, /* 4177 */
+ { 0, 0, printargs, "o32_send" }, /* 4178 */
+ { 0, 0, printargs, "o32_sendmsg" }, /* 4179 */
+ { 0, 0, printargs, "o32_sendto" }, /* 4180 */
+ { 0, 0, printargs, "o32_setsockopt" }, /* 4181 */
+ { 0, 0, printargs, "o32_shutdown" }, /* 4182 */
+ { 0, 0, printargs, "o32_socket" }, /* 4183 */
+ { 0, 0, printargs, "o32_socketpair" }, /* 4184 */
+ { 0, 0, printargs, "o32_setresuid" }, /* 4185 */
+ { 0, 0, printargs, "o32_getresuid" }, /* 4186 */
+ { 0, 0, printargs, "o32_query_module" }, /* 4187 */
+ { 0, 0, printargs, "o32_poll" }, /* 4188 */
+ { 0, 0, printargs, "o32_nfsservctl" }, /* 4189 */
+ { 0, 0, printargs, "o32_setresgid" }, /* 4190 */
+ { 0, 0, printargs, "o32_getresgid" }, /* 4191 */
+ { 0, 0, printargs, "o32_prctl" }, /* 4192 */
+ { 0, 0, printargs, "o32_rt_sigreturn" }, /* 4193 */
+ { 0, 0, printargs, "o32_rt_sigaction" }, /* 4194 */
+ { 0, 0, printargs, "o32_rt_sigprocmask"}, /* 4195 */
+ { 0, 0, printargs, "o32_rt_sigpending" }, /* 4196 */
+ { 0, 0, printargs, "o32_rt_sigtimedwait"},/* 4197 */
+ { 0, 0, printargs, "o32_rt_sigqueueinfo"},/* 4198 */
+ { 0, 0, printargs, "o32_rt_siguspend" }, /* 4199 */
+ { 0, 0, printargs, "o32_pread64" }, /* 4200 */
+ { 0, 0, printargs, "o32_pwrite64" }, /* 4201 */
+ { 0, 0, printargs, "o32_chown" }, /* 4202 */
+ { 0, 0, printargs, "o32_getcwd" }, /* 4203 */
+ { 0, 0, printargs, "o32_capget" }, /* 4204 */
+ { 0, 0, printargs, "o32_capset" }, /* 4205 */
+ { 0, 0, printargs, "o32_sigaltstack" }, /* 4206 */
+ { 0, 0, printargs, "o32_sendfile" }, /* 4207 */
+ { 5, TN, printargs, "o32_getpmsg" }, /* 4208 */
+ { 5, TN, printargs, "o32_putpmsg" }, /* 4209 */
+ { 6, TD|TM, printargs, "o32_mmap2" }, /* 4210 */
+ { 0, 0, printargs, "o32_truncate64" }, /* 4211 */
+ { 0, 0, printargs, "o32_ftruncate64" }, /* 4212 */
+ { 0, 0, printargs, "o32_stat64" }, /* 4213 */
+ { 0, 0, printargs, "o32_lstat64" }, /* 4214 */
+ { 0, 0, printargs, "o32_fstat64" }, /* 4215 */
+ { 0, 0, printargs, "o32_pivot_root" }, /* 4216 */
+ { 0, TM, printargs, "o32_mincore" }, /* 4217 */
+ { 0, TM, printargs, "o32_madvise" }, /* 4218 */
+ { 0, 0, printargs, "o32_getdents64" }, /* 4219 */
+ { 0, 0, printargs, "o32_fcntl64" }, /* 4220 */
+ { 0, 0, NULL, NULL }, /* 4221 */
+ { 0, 0, printargs, "o32_gettid" }, /* 4222 */
+ { 5, TD, printargs, "o32_readahead" }, /* 4223 */
+ { 5, TF, printargs, "o32_setxattr" }, /* 4224 */
+ { 5, TF, printargs, "o32_lsetxattr" }, /* 4225 */
+ { 5, TD, printargs, "o32_fsetxattr" }, /* 4226 */
+ { 4, TF, printargs, "o32_getxattr" }, /* 4227 */
+ { 4, TF, printargs, "o32_lgetxattr" }, /* 4228 */
+ { 4, TD, printargs, "o32_fgetxattr" }, /* 4229 */
+ { 3, TF, printargs, "o32_listxattr" }, /* 4230 */
+ { 3, TF, printargs, "o32_llistxattr" }, /* 4231 */
+ { 3, TD, printargs, "o32_flistxattr" }, /* 4232 */
+ { 2, TF, printargs, "o32_removexattr" }, /* 4233 */
+ { 2, TF, printargs, "o32_lremovexattr" }, /* 4234 */
+ { 2, TD, printargs, "o32_fremovexattr" }, /* 4235 */
+ { 2, TS, printargs, "o32_tkill" }, /* 4236 */
+ { 5, TD|TN, printargs, "o32_sendfile64" }, /* 4237 */
+ { 6, 0, printargs, "o32_futex" }, /* 4238 */
+ { 3, 0, printargs, "o32_sched_setaffinity"}, /* 4239 */
+ { 3, 0, printargs, "o32_sched_getaffinity"}, /* 4240 */
+ { 2, 0, printargs, "o32_io_setup" }, /* 4241 */
+ { 1, 0, printargs, "o32_io_destroy" }, /* 4242 */
+ { 5, 0, printargs, "o32_io_getevents" }, /* 4243 */
+ { 3, 0, printargs, "o32_io_submit" }, /* 4244 */
+ { 3, 0, printargs, "o32_io_cancel" }, /* 4245 */
+ { 1, TP, printargs, "o32_exit_group" }, /* 4246 */
+ { 3, 0, printargs, "o32_lookup_dcookie"}, /* 4247 */
+ { 1, TD, printargs, "o32_epoll_create" }, /* 4248 */
+ { 4, TD, printargs, "o32_epoll_ctl" }, /* 4249 */
+ { 4, TD, printargs, "o32_epoll_wait" }, /* 4250 */
+ { 5, TM, printargs, "o32_remap_file_pages"}, /* 4251 */
+ { 1, 0, printargs, "o32_set_tid_address"}, /* 4252 */
+ { 0, 0, printargs, "o32_restart_syscall"}, /* 4253 */
+ { MA, 0, printargs, "o32_fadvise64_64" }, /* 4254 */
+ { 3, TF, printargs, "o32_statfs64" }, /* 4255 */
+ { 2, TD, printargs, "o32_fstatfs64" }, /* 4256 */
+ { 3, 0, printargs, "o32_timer_create" }, /* 4257 */
+ { 4, 0, printargs, "o32_timer_settime" }, /* 4258 */
+ { 2, 0, printargs, "o32_timer_gettime" }, /* 4259 */
+ { 1, 0, printargs, "o32_timer_getoverrun"}, /* 4260 */
+ { 1, 0, printargs, "o32_timer_delete" }, /* 4261 */
+ { 2, 0, printargs, "o32_clock_settime" }, /* 4262 */
+ { 2, 0, printargs, "o32_clock_gettime" }, /* 4263 */
+ { 2, 0, printargs, "o32_clock_getres" }, /* 4264 */
+ { 4, 0, printargs, "o32_clock_nanosleep"}, /* 4265 */
+ { 3, TS, printargs, "o32_tgkill" }, /* 4266 */
+ { 2, TF, printargs, "o32_utimes" }, /* 4267 */
+ { 4, TM, printargs, "o32_mbind" }, /* 4268 */
+ { 5, TM, printargs, "o32_get_mempolicy" }, /* 4269 */
+ { 3, TM, printargs, "o32_set_mempolicy" }, /* 4270 */
+ { 4, 0, printargs, "o32_mq_open" }, /* 4271 */
+ { 1, 0, printargs, "o32_mq_unlink" }, /* 4272 */
+ { 5, 0, printargs, "o32_mq_timedsend" }, /* 4273 */
+ { 5, 0, printargs, "o32_mq_timedreceive"}, /* 4274 */
+ { 2, 0, printargs, "o32_mq_notify" }, /* 4275 */
+ { 3, 0, printargs, "o32_mq_getsetattr" }, /* 4276 */
+ { 5, 0, printargs, "o32_vserver" }, /* 4277 */
+ { 5, TP, printargs, "o32_waitid" }, /* 4278 */
+ { 0, 0, printargs, "o32_SYS_4279" }, /* 4279 */
+ { 5, 0, printargs, "o32_add_key" }, /* 4280 */
+ { 4, 0, printargs, "o32_request_key" }, /* 4281 */
+ { 5, 0, printargs, "o32_keyctl" }, /* 4282 */
+ { 1, 0, printargs, "o32_set_thread_area" }, /* 4283 */
+ { 0, TD, printargs, "o32_inotify_init" }, /* 4284 */
+ { 3, TD, printargs, "o32_inotify_add_watch" }, /* 4285 */
+ { 2, TD, printargs, "o32_inotify_rm_watch" }, /* 4286 */
+ { 4, TM, printargs, "o32_migrate_pages" }, /* 4287 */
+ { 4, TD|TF, printargs, "o32_openat" }, /* 4288 */
+ { 3, TD|TF, printargs, "o32_mkdirat" }, /* 4289 */
+ { 4, TD|TF, printargs, "o32_mknodat" }, /* 4290 */
+ { 5, TD|TF, printargs, "o32_fchownat" }, /* 4291 */
+ { 3, TD|TF, printargs, "o32_futimesat" }, /* 4292 */
+ { 4, TD|TF, printargs, "o32_fstatat64" }, /* 4293 */
+ { 3, TD|TF, printargs, "o32_unlinkat" }, /* 4294 */
+ { 4, TD|TF, printargs, "o32_renameat" }, /* 4295 */
+ { 5, TD|TF, printargs, "o32_linkat" }, /* 4296 */
+ { 3, TD|TF, printargs, "o32_symlinkat" }, /* 4297 */
+ { 4, TD|TF, printargs, "o32_readlinkat" }, /* 4298 */
+ { 3, TD|TF, printargs, "o32_fchmodat" }, /* 4299 */
+ { 3, TD|TF, printargs, "o32_faccessat" }, /* 4300 */
+ { 6, TD, printargs, "o32_pselect6" }, /* 4301 */
+ { 5, TD, printargs, "o32_ppoll" }, /* 4302 */
+ { 1, TP, printargs, "o32_unshare" }, /* 4303 */
+ { 6, TD, printargs, "o32_splice" }, /* 4304 */
+ { 4, TD, printargs, "o32_sync_file_range" }, /* 4305 */
+ { 4, TD, printargs, "o32_tee" }, /* 4306 */
+ { 4, TD, printargs, "o32_vmsplice" }, /* 4307 */
+ { 6, TM, printargs, "o32_move_pages" }, /* 4308 */
+ { 2, 0, printargs, "o32_set_robust_list" }, /* 4309 */
+ { 3, 0, printargs, "o32_get_robust_list" }, /* 4310 */
+ { 4, 0, printargs, "o32_kexec_load" }, /* 4311 */
+ { 3, 0, printargs, "o32_getcpu" }, /* 4312 */
+ { 5, TD, printargs, "o32_epoll_pwait" }, /* 4313 */
+ { 3, 0, printargs, "o32_ioprio_set" }, /* 4314 */
+ { 2, 0, printargs, "o32_ioprio_get" }, /* 4315 */
+ { 4, 0, printargs, "o32_utimensat" }, /* 4316 */
+ { 3, TD|TS, printargs, "o32_signalfd" }, /* 4317 */
+ { 4, TD, printargs, "o32_timerfd" }, /* 4318 */
+ { 1, TD, printargs, "o32_eventfd" }, /* 4319 */
+ { 6, TD, printargs, "o32_fallocate" }, /* 4320 */
+ { 2, TD, printargs, "o32_timerfd_create" }, /* 4321 */
+ { 2, TD, printargs, "o32_timerfd_gettime" }, /* 4322 */
+ { 4, TD, printargs, "o32_timerfd_settime" }, /* 4323 */
+ { 4, TD|TS, printargs, "o32_signalfd4" }, /* 4324 */
+ { 2, TD, printargs, "o32_eventfd2" }, /* 4325 */
+ { 1, TD, printargs, "o32_epoll_create1" }, /* 4326 */
+ { 3, TD, printargs, "o32_dup3" }, /* 4327 */
+ { 2, TD, printargs, "o32_pipe2" }, /* 4328 */
+ { 1, TD, printargs, "o32_inotify_init1" }, /* 4329 */
+ { 6, TD, printargs, "o32_preadv" }, /* 4330 */
+ { 6, TD, printargs, "o32_pwritev" }, /* 4331 */
+ { 4, TP|TS, printargs, "o32_rt_tgsigqueueinfo" }, /* 4332 */
+ { 5, TD, printargs, "o32_perf_event_open" }, /* 4333 */
+ { 4, TN, printargs, "o32_accept4" }, /* 4334 */
+ { 5, TN, printargs, "o32_recvmmsg" }, /* 4335 */
+ { 2, TD, printargs, "o32_fanotify_init" }, /* 4336 */
+ { 5, TD|TF, printargs, "o32_fanotify_mark" }, /* 4337 */
+ { 4, 0, printargs, "o32_prlimit64" }, /* 4338 */
+ { 5, TD|TF, printargs, "o32_name_to_handle_at"}, /* 4339 */
+ { 3, TD, printargs, "o32_open_by_handle_at"}, /* 4340 */
+ { 2, 0, printargs, "o32_clock_adjtime" }, /* 4341 */
+ { 1, TD, printargs, "o32_syncfs" }, /* 4342 */
+ { 4, TN, printargs, "o32_sendmmsg" }, /* 4343 */
+ { 2, TD, printargs, "o32_setns" }, /* 4344 */
+ { 6, 0, printargs, "o32_process_vm_readv" }, /* 4345 */
+ { 6, 0, printargs, "o32_process_vm_writev" }, /* 4346 */
+ { 5, 0, printargs, "o32_kcmp" }, /* 4347 */
+ { 3, TD, printargs, "o32_finit_module" }, /* 4348 */
+#endif
+ [4349 ... 4999] = { }, /* 4999 */ /* end of Linux o32 */
diff --git a/linux/mips/syscallent.h b/linux/mips/syscallent.h
index ebb93f9..61430d2 100644
--- a/linux/mips/syscallent.h
+++ b/linux/mips/syscallent.h
@@ -1,7980 +1,5 @@
#include "../dummy.h"
-
- { 0, 0, printargs, "svr4_syscall" }, /* 000 */
- { 0, 0, printargs, "svr4_exit" }, /* 001 */
- { 0, 0, printargs, "svr4_fork" }, /* 002 */
- { 0, 0, printargs, "svr4_read" }, /* 003 */
- { 0, 0, printargs, "svr4_write" }, /* 004 */
- { 0, 0, printargs, "svr4_open" }, /* 005 */
- { 0, 0, printargs, "svr4_close" }, /* 006 */
- { 0, 0, printargs, "svr4_wait" }, /* 007 */
- { 0, 0, printargs, "svr4_creat" }, /* 008 */
- { 0, 0, printargs, "svr4_link" }, /* 009 */
- { 0, 0, printargs, "svr4_unlink" }, /* 010 */
- { 0, 0, printargs, "svr4_exec" }, /* 011 */
- { 0, 0, printargs, "svr4_chdir" }, /* 012 */
- { 0, 0, printargs, "svr4_gtime" }, /* 013 */
- { 0, 0, printargs, "svr4_mknod" }, /* 014 */
- { 0, 0, printargs, "svr4_chmod" }, /* 015 */
- { 0, 0, printargs, "svr4_chown" }, /* 016 */
- { 0, 0, printargs, "svr4_sbreak" }, /* 017 */
- { 0, 0, printargs, "svr4_stat" }, /* 018 */
- { 0, 0, printargs, "svr4_lseek" }, /* 019 */
- { 0, 0, printargs, "svr4_getpid" }, /* 020 */
- { 0, 0, printargs, "svr4_mount" }, /* 021 */
- { 0, 0, printargs, "svr4_umount" }, /* 022 */
- { 0, 0, printargs, "svr4_setuid" }, /* 023 */
- { 0, 0, printargs, "svr4_getuid" }, /* 024 */
- { 0, 0, printargs, "svr4_stime" }, /* 025 */
- { 0, 0, printargs, "svr4_ptrace" }, /* 026 */
- { 0, 0, printargs, "svr4_alarm" }, /* 027 */
- { 0, 0, printargs, "svr4_fstat" }, /* 028 */
- { 0, 0, printargs, "svr4_pause" }, /* 029 */
- { 0, 0, printargs, "svr4_utime" }, /* 030 */
- { 0, 0, printargs, "svr4_stty" }, /* 031 */
- { 0, 0, printargs, "svr4_gtty" }, /* 032 */
- { 0, 0, printargs, "svr4_access" }, /* 033 */
- { 0, 0, printargs, "svr4_nice" }, /* 034 */
- { 0, 0, printargs, "svr4_statfs" }, /* 035 */
- { 0, 0, printargs, "svr4_sync" }, /* 036 */
- { 0, 0, printargs, "svr4_kill" }, /* 037 */
- { 0, 0, printargs, "svr4_fstatfs" }, /* 038 */
- { 0, 0, printargs, "svr4_setpgrp" }, /* 039 */
- { 0, 0, printargs, "svr4_cxenix" }, /* 040 */
- { 0, 0, printargs, "svr4_dup" }, /* 041 */
- { 0, 0, printargs, "svr4_pipe" }, /* 042 */
- { 0, 0, printargs, "svr4_times" }, /* 043 */
- { 0, 0, printargs, "svr4_profil" }, /* 044 */
- { 0, 0, printargs, "svr4_plock" }, /* 045 */
- { 0, 0, printargs, "svr4_setgid" }, /* 046 */
- { 0, 0, printargs, "svr4_getgid" }, /* 047 */
- { 0, 0, printargs, "svr4_sig" }, /* 048 */
- { 0, 0, printargs, "svr4_msgsys" }, /* 049 */
- { 0, 0, printargs, "svr4_sysmips" }, /* 050 */
- { 0, 0, printargs, "svr4_sysacct" }, /* 051 */
- { 0, 0, printargs, "svr4_shmsys" }, /* 052 */
- { 0, 0, printargs, "svr4_semsys" }, /* 053 */
- { 0, 0, printargs, "svr4_ioctl" }, /* 054 */
- { 0, 0, printargs, "svr4_uadmin" }, /* 055 */
- { 0, 0, printargs, "svr4_exch" }, /* 056 */
- { 0, 0, printargs, "svr4_utssys" }, /* 057 */
- { 0, 0, printargs, "svr4_fsync" }, /* 058 */
- { 0, 0, printargs, "svr4_exece" }, /* 059 */
- { 0, 0, printargs, "svr4_umask" }, /* 060 */
- { 0, 0, printargs, "svr4_chroot" }, /* 061 */
- { 0, 0, printargs, "svr4_fcntl" }, /* 062 */
- { 0, 0, printargs, "svr4_ulimit" }, /* 063 */
- { 0, 0, NULL, NULL , }, /* 064 */
- { 0, 0, NULL, NULL , }, /* 065 */
- { 0, 0, NULL, NULL , }, /* 066 */
- { 0, 0, NULL, NULL , }, /* 067 */
- { 0, 0, NULL, NULL , }, /* 068 */
- { 0, 0, NULL, NULL , }, /* 069 */
- { 0, 0, printargs, "svr4_advfs" }, /* 070 */
- { 0, 0, printargs, "svr4_unadvfs" }, /* 071 */
- { 0, 0, NULL, NULL , }, /* 072 */
- { 0, 0, NULL, NULL , }, /* 073 */
- { 0, 0, printargs, "svr4_rfstart" }, /* 074 */
- { 0, 0, NULL, NULL , }, /* 075 */
- { 0, 0, printargs, "svr4_rdebug" }, /* 076 */
- { 0, 0, printargs, "svr4_rfstop" }, /* 077 */
- { 0, 0, printargs, "svr4_rfsys" }, /* 078 */
- { 0, 0, printargs, "svr4_rmdir" }, /* 079 */
- { 0, 0, printargs, "svr4_mkdir" }, /* 080 */
- { 0, 0, printargs, "svr4_getdents" }, /* 081 */
- { 0, 0, printargs, "svr4_libattach" }, /* 082 */
- { 0, 0, printargs, "svr4_libdetach" }, /* 083 */
- { 0, 0, printargs, "svr4_sysfs" }, /* 084 */
- { 0, 0, printargs, "svr4_getmsg" }, /* 085 */
- { 0, 0, printargs, "svr4_putmsg" }, /* 086 */
- { 0, 0, printargs, "svr4_poll" }, /* 087 */
- { 0, 0, printargs, "svr4_lstat" }, /* 088 */
- { 0, 0, printargs, "svr4_symlink" }, /* 089 */
- { 0, 0, printargs, "svr4_readlink" }, /* 090 */
- { 0, 0, printargs, "svr4_setgroups" }, /* 091 */
- { 0, 0, printargs, "svr4_getgroups" }, /* 092 */
- { 0, 0, printargs, "svr4_fchmod" }, /* 093 */
- { 0, 0, printargs, "svr4_fchown" }, /* 094 */
- { 0, 0, printargs, "svr4_sigprocmask" }, /* 095 */
- { 0, 0, printargs, "svr4_sigsuspend" }, /* 096 */
- { 0, 0, printargs, "svr4_sigaltstack" }, /* 097 */
- { 0, 0, printargs, "svr4_sigaction" }, /* 098 */
- { 0, 0, printargs, "svr4_sigpending" }, /* 099 */
- { 0, 0, printargs, "svr4_setcontext" }, /* 0100 */
- { 0, 0, printargs, "svr4_evsys" }, /* 0101 */
- { 0, 0, printargs, "svr4_evtrapret" }, /* 0102 */
- { 0, 0, printargs, "svr4_statvfs" }, /* 0103 */
- { 0, 0, printargs, "svr4_fstatvfs" }, /* 0104 */
- { 0, 0, NULL, NULL , }, /* 105 */
- { 0, 0, printargs, "svr4_nfssys" }, /* 0106 */
- { 0, 0, printargs, "svr4_waitid" }, /* 0107 */
- { 0, 0, printargs, "svr4_sigsendset" }, /* 0108 */
- { 0, 0, printargs, "svr4_hrtsys" }, /* 0109 */
- { 0, 0, printargs, "svr4_acancel" }, /* 0110 */
- { 0, 0, printargs, "svr4_async" }, /* 0111 */
- { 0, 0, printargs, "svr4_priocntlset" }, /* 0112 */
- { 0, 0, printargs, "svr4_pathconf" }, /* 0113 */
- { 0, 0, printargs, "svr4_mincore" }, /* 0114 */
- { 0, 0, printargs, "svr4_mmap" }, /* 0115 */
- { 0, 0, printargs, "svr4_mprotect" }, /* 0116 */
- { 0, 0, printargs, "svr4_munmap" }, /* 0117 */
- { 0, 0, printargs, "svr4_fpathconf" }, /* 0118 */
- { 0, 0, printargs, "svr4_vfork" }, /* 0119 */
- { 0, 0, printargs, "svr4_fchdir" }, /* 0120 */
- { 0, 0, printargs, "svr4_readv" }, /* 0121 */
- { 0, 0, printargs, "svr4_writev" }, /* 0122 */
- { 0, 0, printargs, "svr4_xstat" }, /* 0123 */
- { 0, 0, printargs, "svr4_lxstat" }, /* 0124 */
- { 0, 0, printargs, "svr4_fxstat" }, /* 0125 */
- { 0, 0, printargs, "svr4_xmknod" }, /* 0126 */
- { 0, 0, printargs, "svr4_clocal" }, /* 0127 */
- { 0, 0, printargs, "svr4_setrlimit" }, /* 0128 */
- { 0, 0, printargs, "svr4_getrlimit" }, /* 0129 */
- { 0, 0, printargs, "svr4_lchown" }, /* 0130 */
- { 0, 0, printargs, "svr4_memcntl" }, /* 0131 */
- { 0, 0, printargs, "svr4_getpmsg" }, /* 0132 */
- { 0, 0, printargs, "svr4_putpmsg" }, /* 0133 */
- { 0, 0, printargs, "svr4_rename" }, /* 0134 */
- { 0, 0, printargs, "svr4_nuname" }, /* 0135 */
- { 0, 0, printargs, "svr4_setegid" }, /* 0136 */
- { 0, 0, printargs, "svr4_sysconf" }, /* 0137 */
- { 0, 0, printargs, "svr4_adjtime" }, /* 0138 */
- { 0, 0, printargs, "svr4_sysinfo" }, /* 0139 */
- { 0, 0, NULL, NULL , }, /* 140 */
- { 0, 0, printargs, "svr4_seteuid" }, /* 0141 */
- { 0, 0, printargs, "svr4_PYRAMID_statis" }, /* 0142 */
- { 0, 0, printargs, "svr4_PYRAMID_tuning" }, /* 0143 */
- { 0, 0, printargs, "svr4_PYRAMID_forcerr" }, /* 0144 */
- { 0, 0, printargs, "svr4_PYRAMID_mpcntl" }, /* 0145 */
- { 0, 0, NULL, NULL , }, /* 146 */
- { 0, 0, NULL, NULL , }, /* 147 */
- { 0, 0, NULL, NULL , }, /* 148 */
- { 0, 0, NULL, NULL , }, /* 149 */
- { 0, 0, NULL, NULL , }, /* 150 */
- { 0, 0, NULL, NULL , }, /* 151 */
- { 0, 0, NULL, NULL , }, /* 152 */
- { 0, 0, NULL, NULL , }, /* 153 */
- { 0, 0, NULL, NULL , }, /* 154 */
- { 0, 0, NULL, NULL , }, /* 155 */
- { 0, 0, NULL, NULL , }, /* 156 */
- { 0, 0, NULL, NULL , }, /* 157 */
- { 0, 0, NULL, NULL , }, /* 158 */
- { 0, 0, NULL, NULL , }, /* 159 */
- { 0, 0, NULL, NULL , }, /* 160 */
- { 0, 0, NULL, NULL , }, /* 161 */
- { 0, 0, NULL, NULL , }, /* 162 */
- { 0, 0, NULL, NULL , }, /* 163 */
- { 0, 0, NULL, NULL , }, /* 164 */
- { 0, 0, NULL, NULL , }, /* 165 */
- { 0, 0, NULL, NULL , }, /* 166 */
- { 0, 0, NULL, NULL , }, /* 167 */
- { 0, 0, NULL, NULL , }, /* 168 */
- { 0, 0, NULL, NULL , }, /* 169 */
- { 0, 0, NULL, NULL , }, /* 170 */
- { 0, 0, NULL, NULL , }, /* 171 */
- { 0, 0, NULL, NULL , }, /* 172 */
- { 0, 0, NULL, NULL , }, /* 173 */
- { 0, 0, NULL, NULL , }, /* 174 */
- { 0, 0, NULL, NULL , }, /* 175 */
- { 0, 0, NULL, NULL , }, /* 176 */
- { 0, 0, NULL, NULL , }, /* 177 */
- { 0, 0, NULL, NULL , }, /* 178 */
- { 0, 0, NULL, NULL , }, /* 179 */
- { 0, 0, NULL, NULL , }, /* 180 */
- { 0, 0, NULL, NULL , }, /* 181 */
- { 0, 0, NULL, NULL , }, /* 182 */
- { 0, 0, NULL, NULL , }, /* 183 */
- { 0, 0, NULL, NULL , }, /* 184 */
- { 0, 0, NULL, NULL , }, /* 185 */
- { 0, 0, NULL, NULL , }, /* 186 */
- { 0, 0, NULL, NULL , }, /* 187 */
- { 0, 0, NULL, NULL , }, /* 188 */
- { 0, 0, NULL, NULL , }, /* 189 */
- { 0, 0, NULL, NULL , }, /* 190 */
- { 0, 0, NULL, NULL , }, /* 191 */
- { 0, 0, NULL, NULL , }, /* 192 */
- { 0, 0, NULL, NULL , }, /* 193 */
- { 0, 0, NULL, NULL , }, /* 194 */
- { 0, 0, NULL, NULL , }, /* 195 */
- { 0, 0, NULL, NULL , }, /* 196 */
- { 0, 0, NULL, NULL , }, /* 197 */
- { 0, 0, NULL, NULL , }, /* 198 */
- { 0, 0, NULL, NULL , }, /* 199 */
- { 0, 0, NULL, NULL , }, /* 200 */
- { 0, 0, printargs, "svr4_aread" }, /* 0201 */
- { 0, 0, printargs, "svr4_awrite" }, /* 0202 */
- { 0, 0, printargs, "svr4_listio" }, /* 0203 */
- { 0, 0, printargs, "svr4_mips_acancel" }, /* 0204 */
- { 0, 0, printargs, "svr4_astatus" }, /* 0205 */
- { 0, 0, printargs, "svr4_await" }, /* 0206 */
- { 0, 0, printargs, "svr4_areadv" }, /* 0207 */
- { 0, 0, printargs, "svr4_awritev" }, /* 0208 */
- { 0, 0, NULL, NULL , }, /* 209 */
- { 0, 0, NULL, NULL , }, /* 210 */
- { 0, 0, NULL, NULL , }, /* 211 */
- { 0, 0, NULL, NULL , }, /* 212 */
- { 0, 0, NULL, NULL , }, /* 213 */
- { 0, 0, NULL, NULL , }, /* 214 */
- { 0, 0, NULL, NULL , }, /* 215 */
- { 0, 0, NULL, NULL , }, /* 216 */
- { 0, 0, NULL, NULL , }, /* 217 */
- { 0, 0, NULL, NULL , }, /* 218 */
- { 0, 0, NULL, NULL , }, /* 219 */
- { 0, 0, NULL, NULL , }, /* 220 */
- { 0, 0, NULL, NULL , }, /* 221 */
- { 0, 0, NULL, NULL , }, /* 222 */
- { 0, 0, NULL, NULL , }, /* 223 */
- { 0, 0, NULL, NULL , }, /* 224 */
- { 0, 0, NULL, NULL , }, /* 225 */
- { 0, 0, NULL, NULL , }, /* 226 */
- { 0, 0, NULL, NULL , }, /* 227 */
- { 0, 0, NULL, NULL , }, /* 228 */
- { 0, 0, NULL, NULL , }, /* 229 */
- { 0, 0, NULL, NULL , }, /* 230 */
- { 0, 0, NULL, NULL , }, /* 231 */
- { 0, 0, NULL, NULL , }, /* 232 */
- { 0, 0, NULL, NULL , }, /* 233 */
- { 0, 0, NULL, NULL , }, /* 234 */
- { 0, 0, NULL, NULL , }, /* 235 */
- { 0, 0, NULL, NULL , }, /* 236 */
- { 0, 0, NULL, NULL , }, /* 237 */
- { 0, 0, NULL, NULL , }, /* 238 */
- { 0, 0, NULL, NULL , }, /* 239 */
- { 0, 0, NULL, NULL , }, /* 240 */
- { 0, 0, NULL, NULL }, /* 241 */
- { 0, 0, NULL, NULL }, /* 242 */
- { 0, 0, NULL, NULL }, /* 243 */
- { 0, 0, NULL, NULL }, /* 244 */
- { 0, 0, NULL, NULL }, /* 245 */
- { 0, 0, NULL, NULL }, /* 246 */
- { 0, 0, NULL, NULL }, /* 247 */
- { 0, 0, NULL, NULL }, /* 248 */
- { 0, 0, NULL, NULL }, /* 249 */
- { 0, 0, NULL, NULL }, /* 250 */
- { 0, 0, NULL, NULL }, /* 251 */
- { 0, 0, NULL, NULL }, /* 252 */
- { 0, 0, NULL, NULL }, /* 253 */
- { 0, 0, NULL, NULL }, /* 254 */
- { 0, 0, NULL, NULL }, /* 255 */
- { 0, 0, NULL, NULL }, /* 256 */
- { 0, 0, NULL, NULL }, /* 257 */
- { 0, 0, NULL, NULL }, /* 258 */
- { 0, 0, NULL, NULL }, /* 259 */
- { 0, 0, NULL, NULL }, /* 260 */
- { 0, 0, NULL, NULL }, /* 261 */
- { 0, 0, NULL, NULL }, /* 262 */
- { 0, 0, NULL, NULL }, /* 263 */
- { 0, 0, NULL, NULL }, /* 264 */
- { 0, 0, NULL, NULL }, /* 265 */
- { 0, 0, NULL, NULL }, /* 266 */
- { 0, 0, NULL, NULL }, /* 267 */
- { 0, 0, NULL, NULL }, /* 268 */
- { 0, 0, NULL, NULL }, /* 269 */
- { 0, 0, NULL, NULL }, /* 270 */
- { 0, 0, NULL, NULL }, /* 271 */
- { 0, 0, NULL, NULL }, /* 272 */
- { 0, 0, NULL, NULL }, /* 273 */
- { 0, 0, NULL, NULL }, /* 274 */
- { 0, 0, NULL, NULL }, /* 275 */
- { 0, 0, NULL, NULL }, /* 276 */
- { 0, 0, NULL, NULL }, /* 277 */
- { 0, 0, NULL, NULL }, /* 278 */
- { 0, 0, NULL, NULL }, /* 279 */
- { 0, 0, NULL, NULL }, /* 280 */
- { 0, 0, NULL, NULL }, /* 281 */
- { 0, 0, NULL, NULL }, /* 282 */
- { 0, 0, NULL, NULL }, /* 283 */
- { 0, 0, NULL, NULL }, /* 284 */
- { 0, 0, NULL, NULL }, /* 285 */
- { 0, 0, NULL, NULL }, /* 286 */
- { 0, 0, NULL, NULL }, /* 287 */
- { 0, 0, NULL, NULL }, /* 288 */
- { 0, 0, NULL, NULL }, /* 289 */
- { 0, 0, NULL, NULL }, /* 290 */
- { 0, 0, NULL, NULL }, /* 291 */
- { 0, 0, NULL, NULL }, /* 292 */
- { 0, 0, NULL, NULL }, /* 293 */
- { 0, 0, NULL, NULL }, /* 294 */
- { 0, 0, NULL, NULL }, /* 295 */
- { 0, 0, NULL, NULL }, /* 296 */
- { 0, 0, NULL, NULL }, /* 297 */
- { 0, 0, NULL, NULL }, /* 298 */
- { 0, 0, NULL, NULL }, /* 299 */
- { 0, 0, NULL, NULL }, /* 300 */
- { 0, 0, NULL, NULL }, /* 301 */
- { 0, 0, NULL, NULL }, /* 302 */
- { 0, 0, NULL, NULL }, /* 303 */
- { 0, 0, NULL, NULL }, /* 304 */
- { 0, 0, NULL, NULL }, /* 305 */
- { 0, 0, NULL, NULL }, /* 306 */
- { 0, 0, NULL, NULL }, /* 307 */
- { 0, 0, NULL, NULL }, /* 308 */
- { 0, 0, NULL, NULL }, /* 309 */
- { 0, 0, NULL, NULL }, /* 310 */
- { 0, 0, NULL, NULL }, /* 311 */
- { 0, 0, NULL, NULL }, /* 312 */
- { 0, 0, NULL, NULL }, /* 313 */
- { 0, 0, NULL, NULL }, /* 314 */
- { 0, 0, NULL, NULL }, /* 315 */
- { 0, 0, NULL, NULL }, /* 316 */
- { 0, 0, NULL, NULL }, /* 317 */
- { 0, 0, NULL, NULL }, /* 318 */
- { 0, 0, NULL, NULL }, /* 319 */
- { 0, 0, NULL, NULL }, /* 320 */
- { 0, 0, NULL, NULL }, /* 321 */
- { 0, 0, NULL, NULL }, /* 322 */
- { 0, 0, NULL, NULL }, /* 323 */
- { 0, 0, NULL, NULL }, /* 324 */
- { 0, 0, NULL, NULL }, /* 325 */
- { 0, 0, NULL, NULL }, /* 326 */
- { 0, 0, NULL, NULL }, /* 327 */
- { 0, 0, NULL, NULL }, /* 328 */
- { 0, 0, NULL, NULL }, /* 329 */
- { 0, 0, NULL, NULL }, /* 330 */
- { 0, 0, NULL, NULL }, /* 331 */
- { 0, 0, NULL, NULL }, /* 332 */
- { 0, 0, NULL, NULL }, /* 333 */
- { 0, 0, NULL, NULL }, /* 334 */
- { 0, 0, NULL, NULL }, /* 335 */
- { 0, 0, NULL, NULL }, /* 336 */
- { 0, 0, NULL, NULL }, /* 337 */
- { 0, 0, NULL, NULL }, /* 338 */
- { 0, 0, NULL, NULL }, /* 339 */
- { 0, 0, NULL, NULL }, /* 340 */
- { 0, 0, NULL, NULL }, /* 341 */
- { 0, 0, NULL, NULL }, /* 342 */
- { 0, 0, NULL, NULL }, /* 343 */
- { 0, 0, NULL, NULL }, /* 344 */
- { 0, 0, NULL, NULL }, /* 345 */
- { 0, 0, NULL, NULL }, /* 346 */
- { 0, 0, NULL, NULL }, /* 347 */
- { 0, 0, NULL, NULL }, /* 348 */
- { 0, 0, NULL, NULL }, /* 349 */
- { 0, 0, NULL, NULL }, /* 350 */
- { 0, 0, NULL, NULL }, /* 351 */
- { 0, 0, NULL, NULL }, /* 352 */
- { 0, 0, NULL, NULL }, /* 353 */
- { 0, 0, NULL, NULL }, /* 354 */
- { 0, 0, NULL, NULL }, /* 355 */
- { 0, 0, NULL, NULL }, /* 356 */
- { 0, 0, NULL, NULL }, /* 357 */
- { 0, 0, NULL, NULL }, /* 358 */
- { 0, 0, NULL, NULL }, /* 359 */
- { 0, 0, NULL, NULL }, /* 360 */
- { 0, 0, NULL, NULL }, /* 361 */
- { 0, 0, NULL, NULL }, /* 362 */
- { 0, 0, NULL, NULL }, /* 363 */
- { 0, 0, NULL, NULL }, /* 364 */
- { 0, 0, NULL, NULL }, /* 365 */
- { 0, 0, NULL, NULL }, /* 366 */
- { 0, 0, NULL, NULL }, /* 367 */
- { 0, 0, NULL, NULL }, /* 368 */
- { 0, 0, NULL, NULL }, /* 369 */
- { 0, 0, NULL, NULL }, /* 370 */
- { 0, 0, NULL, NULL }, /* 371 */
- { 0, 0, NULL, NULL }, /* 372 */
- { 0, 0, NULL, NULL }, /* 373 */
- { 0, 0, NULL, NULL }, /* 374 */
- { 0, 0, NULL, NULL }, /* 375 */
- { 0, 0, NULL, NULL }, /* 376 */
- { 0, 0, NULL, NULL }, /* 377 */
- { 0, 0, NULL, NULL }, /* 378 */
- { 0, 0, NULL, NULL }, /* 379 */
- { 0, 0, NULL, NULL }, /* 380 */
- { 0, 0, NULL, NULL }, /* 381 */
- { 0, 0, NULL, NULL }, /* 382 */
- { 0, 0, NULL, NULL }, /* 383 */
- { 0, 0, NULL, NULL }, /* 384 */
- { 0, 0, NULL, NULL }, /* 385 */
- { 0, 0, NULL, NULL }, /* 386 */
- { 0, 0, NULL, NULL }, /* 387 */
- { 0, 0, NULL, NULL }, /* 388 */
- { 0, 0, NULL, NULL }, /* 389 */
- { 0, 0, NULL, NULL }, /* 390 */
- { 0, 0, NULL, NULL }, /* 391 */
- { 0, 0, NULL, NULL }, /* 392 */
- { 0, 0, NULL, NULL }, /* 393 */
- { 0, 0, NULL, NULL }, /* 394 */
- { 0, 0, NULL, NULL }, /* 395 */
- { 0, 0, NULL, NULL }, /* 396 */
- { 0, 0, NULL, NULL }, /* 397 */
- { 0, 0, NULL, NULL }, /* 398 */
- { 0, 0, NULL, NULL }, /* 399 */
- { 0, 0, NULL, NULL }, /* 400 */
- { 0, 0, NULL, NULL }, /* 401 */
- { 0, 0, NULL, NULL }, /* 402 */
- { 0, 0, NULL, NULL }, /* 403 */
- { 0, 0, NULL, NULL }, /* 404 */
- { 0, 0, NULL, NULL }, /* 405 */
- { 0, 0, NULL, NULL }, /* 406 */
- { 0, 0, NULL, NULL }, /* 407 */
- { 0, 0, NULL, NULL }, /* 408 */
- { 0, 0, NULL, NULL }, /* 409 */
- { 0, 0, NULL, NULL }, /* 410 */
- { 0, 0, NULL, NULL }, /* 411 */
- { 0, 0, NULL, NULL }, /* 412 */
- { 0, 0, NULL, NULL }, /* 413 */
- { 0, 0, NULL, NULL }, /* 414 */
- { 0, 0, NULL, NULL }, /* 415 */
- { 0, 0, NULL, NULL }, /* 416 */
- { 0, 0, NULL, NULL }, /* 417 */
- { 0, 0, NULL, NULL }, /* 418 */
- { 0, 0, NULL, NULL }, /* 419 */
- { 0, 0, NULL, NULL }, /* 420 */
- { 0, 0, NULL, NULL }, /* 421 */
- { 0, 0, NULL, NULL }, /* 422 */
- { 0, 0, NULL, NULL }, /* 423 */
- { 0, 0, NULL, NULL }, /* 424 */
- { 0, 0, NULL, NULL }, /* 425 */
- { 0, 0, NULL, NULL }, /* 426 */
- { 0, 0, NULL, NULL }, /* 427 */
- { 0, 0, NULL, NULL }, /* 428 */
- { 0, 0, NULL, NULL }, /* 429 */
- { 0, 0, NULL, NULL }, /* 430 */
- { 0, 0, NULL, NULL }, /* 431 */
- { 0, 0, NULL, NULL }, /* 432 */
- { 0, 0, NULL, NULL }, /* 433 */
- { 0, 0, NULL, NULL }, /* 434 */
- { 0, 0, NULL, NULL }, /* 435 */
- { 0, 0, NULL, NULL }, /* 436 */
- { 0, 0, NULL, NULL }, /* 437 */
- { 0, 0, NULL, NULL }, /* 438 */
- { 0, 0, NULL, NULL }, /* 439 */
- { 0, 0, NULL, NULL }, /* 440 */
- { 0, 0, NULL, NULL }, /* 441 */
- { 0, 0, NULL, NULL }, /* 442 */
- { 0, 0, NULL, NULL }, /* 443 */
- { 0, 0, NULL, NULL }, /* 444 */
- { 0, 0, NULL, NULL }, /* 445 */
- { 0, 0, NULL, NULL }, /* 446 */
- { 0, 0, NULL, NULL }, /* 447 */
- { 0, 0, NULL, NULL }, /* 448 */
- { 0, 0, NULL, NULL }, /* 449 */
- { 0, 0, NULL, NULL }, /* 450 */
- { 0, 0, NULL, NULL }, /* 451 */
- { 0, 0, NULL, NULL }, /* 452 */
- { 0, 0, NULL, NULL }, /* 453 */
- { 0, 0, NULL, NULL }, /* 454 */
- { 0, 0, NULL, NULL }, /* 455 */
- { 0, 0, NULL, NULL }, /* 456 */
- { 0, 0, NULL, NULL }, /* 457 */
- { 0, 0, NULL, NULL }, /* 458 */
- { 0, 0, NULL, NULL }, /* 459 */
- { 0, 0, NULL, NULL }, /* 460 */
- { 0, 0, NULL, NULL }, /* 461 */
- { 0, 0, NULL, NULL }, /* 462 */
- { 0, 0, NULL, NULL }, /* 463 */
- { 0, 0, NULL, NULL }, /* 464 */
- { 0, 0, NULL, NULL }, /* 465 */
- { 0, 0, NULL, NULL }, /* 466 */
- { 0, 0, NULL, NULL }, /* 467 */
- { 0, 0, NULL, NULL }, /* 468 */
- { 0, 0, NULL, NULL }, /* 469 */
- { 0, 0, NULL, NULL }, /* 470 */
- { 0, 0, NULL, NULL }, /* 471 */
- { 0, 0, NULL, NULL }, /* 472 */
- { 0, 0, NULL, NULL }, /* 473 */
- { 0, 0, NULL, NULL }, /* 474 */
- { 0, 0, NULL, NULL }, /* 475 */
- { 0, 0, NULL, NULL }, /* 476 */
- { 0, 0, NULL, NULL }, /* 477 */
- { 0, 0, NULL, NULL }, /* 478 */
- { 0, 0, NULL, NULL }, /* 479 */
- { 0, 0, NULL, NULL }, /* 480 */
- { 0, 0, NULL, NULL }, /* 481 */
- { 0, 0, NULL, NULL }, /* 482 */
- { 0, 0, NULL, NULL }, /* 483 */
- { 0, 0, NULL, NULL }, /* 484 */
- { 0, 0, NULL, NULL }, /* 485 */
- { 0, 0, NULL, NULL }, /* 486 */
- { 0, 0, NULL, NULL }, /* 487 */
- { 0, 0, NULL, NULL }, /* 488 */
- { 0, 0, NULL, NULL }, /* 489 */
- { 0, 0, NULL, NULL }, /* 490 */
- { 0, 0, NULL, NULL }, /* 491 */
- { 0, 0, NULL, NULL }, /* 492 */
- { 0, 0, NULL, NULL }, /* 493 */
- { 0, 0, NULL, NULL }, /* 494 */
- { 0, 0, NULL, NULL }, /* 495 */
- { 0, 0, NULL, NULL }, /* 496 */
- { 0, 0, NULL, NULL }, /* 497 */
- { 0, 0, NULL, NULL }, /* 498 */
- { 0, 0, NULL, NULL }, /* 499 */
- { 0, 0, NULL, NULL }, /* 500 */
- { 0, 0, NULL, NULL }, /* 501 */
- { 0, 0, NULL, NULL }, /* 502 */
- { 0, 0, NULL, NULL }, /* 503 */
- { 0, 0, NULL, NULL }, /* 504 */
- { 0, 0, NULL, NULL }, /* 505 */
- { 0, 0, NULL, NULL }, /* 506 */
- { 0, 0, NULL, NULL }, /* 507 */
- { 0, 0, NULL, NULL }, /* 508 */
- { 0, 0, NULL, NULL }, /* 509 */
- { 0, 0, NULL, NULL }, /* 510 */
- { 0, 0, NULL, NULL }, /* 511 */
- { 0, 0, NULL, NULL }, /* 512 */
- { 0, 0, NULL, NULL }, /* 513 */
- { 0, 0, NULL, NULL }, /* 514 */
- { 0, 0, NULL, NULL }, /* 515 */
- { 0, 0, NULL, NULL }, /* 516 */
- { 0, 0, NULL, NULL }, /* 517 */
- { 0, 0, NULL, NULL }, /* 518 */
- { 0, 0, NULL, NULL }, /* 519 */
- { 0, 0, NULL, NULL }, /* 520 */
- { 0, 0, NULL, NULL }, /* 521 */
- { 0, 0, NULL, NULL }, /* 522 */
- { 0, 0, NULL, NULL }, /* 523 */
- { 0, 0, NULL, NULL }, /* 524 */
- { 0, 0, NULL, NULL }, /* 525 */
- { 0, 0, NULL, NULL }, /* 526 */
- { 0, 0, NULL, NULL }, /* 527 */
- { 0, 0, NULL, NULL }, /* 528 */
- { 0, 0, NULL, NULL }, /* 529 */
- { 0, 0, NULL, NULL }, /* 530 */
- { 0, 0, NULL, NULL }, /* 531 */
- { 0, 0, NULL, NULL }, /* 532 */
- { 0, 0, NULL, NULL }, /* 533 */
- { 0, 0, NULL, NULL }, /* 534 */
- { 0, 0, NULL, NULL }, /* 535 */
- { 0, 0, NULL, NULL }, /* 536 */
- { 0, 0, NULL, NULL }, /* 537 */
- { 0, 0, NULL, NULL }, /* 538 */
- { 0, 0, NULL, NULL }, /* 539 */
- { 0, 0, NULL, NULL }, /* 540 */
- { 0, 0, NULL, NULL }, /* 541 */
- { 0, 0, NULL, NULL }, /* 542 */
- { 0, 0, NULL, NULL }, /* 543 */
- { 0, 0, NULL, NULL }, /* 544 */
- { 0, 0, NULL, NULL }, /* 545 */
- { 0, 0, NULL, NULL }, /* 546 */
- { 0, 0, NULL, NULL }, /* 547 */
- { 0, 0, NULL, NULL }, /* 548 */
- { 0, 0, NULL, NULL }, /* 549 */
- { 0, 0, NULL, NULL }, /* 550 */
- { 0, 0, NULL, NULL }, /* 551 */
- { 0, 0, NULL, NULL }, /* 552 */
- { 0, 0, NULL, NULL }, /* 553 */
- { 0, 0, NULL, NULL }, /* 554 */
- { 0, 0, NULL, NULL }, /* 555 */
- { 0, 0, NULL, NULL }, /* 556 */
- { 0, 0, NULL, NULL }, /* 557 */
- { 0, 0, NULL, NULL }, /* 558 */
- { 0, 0, NULL, NULL }, /* 559 */
- { 0, 0, NULL, NULL }, /* 560 */
- { 0, 0, NULL, NULL }, /* 561 */
- { 0, 0, NULL, NULL }, /* 562 */
- { 0, 0, NULL, NULL }, /* 563 */
- { 0, 0, NULL, NULL }, /* 564 */
- { 0, 0, NULL, NULL }, /* 565 */
- { 0, 0, NULL, NULL }, /* 566 */
- { 0, 0, NULL, NULL }, /* 567 */
- { 0, 0, NULL, NULL }, /* 568 */
- { 0, 0, NULL, NULL }, /* 569 */
- { 0, 0, NULL, NULL }, /* 570 */
- { 0, 0, NULL, NULL }, /* 571 */
- { 0, 0, NULL, NULL }, /* 572 */
- { 0, 0, NULL, NULL }, /* 573 */
- { 0, 0, NULL, NULL }, /* 574 */
- { 0, 0, NULL, NULL }, /* 575 */
- { 0, 0, NULL, NULL }, /* 576 */
- { 0, 0, NULL, NULL }, /* 577 */
- { 0, 0, NULL, NULL }, /* 578 */
- { 0, 0, NULL, NULL }, /* 579 */
- { 0, 0, NULL, NULL }, /* 580 */
- { 0, 0, NULL, NULL }, /* 581 */
- { 0, 0, NULL, NULL }, /* 582 */
- { 0, 0, NULL, NULL }, /* 583 */
- { 0, 0, NULL, NULL }, /* 584 */
- { 0, 0, NULL, NULL }, /* 585 */
- { 0, 0, NULL, NULL }, /* 586 */
- { 0, 0, NULL, NULL }, /* 587 */
- { 0, 0, NULL, NULL }, /* 588 */
- { 0, 0, NULL, NULL }, /* 589 */
- { 0, 0, NULL, NULL }, /* 590 */
- { 0, 0, NULL, NULL }, /* 591 */
- { 0, 0, NULL, NULL }, /* 592 */
- { 0, 0, NULL, NULL }, /* 593 */
- { 0, 0, NULL, NULL }, /* 594 */
- { 0, 0, NULL, NULL }, /* 595 */
- { 0, 0, NULL, NULL }, /* 596 */
- { 0, 0, NULL, NULL }, /* 597 */
- { 0, 0, NULL, NULL }, /* 598 */
- { 0, 0, NULL, NULL }, /* 599 */
- { 0, 0, NULL, NULL }, /* 600 */
- { 0, 0, NULL, NULL }, /* 601 */
- { 0, 0, NULL, NULL }, /* 602 */
- { 0, 0, NULL, NULL }, /* 603 */
- { 0, 0, NULL, NULL }, /* 604 */
- { 0, 0, NULL, NULL }, /* 605 */
- { 0, 0, NULL, NULL }, /* 606 */
- { 0, 0, NULL, NULL }, /* 607 */
- { 0, 0, NULL, NULL }, /* 608 */
- { 0, 0, NULL, NULL }, /* 609 */
- { 0, 0, NULL, NULL }, /* 610 */
- { 0, 0, NULL, NULL }, /* 611 */
- { 0, 0, NULL, NULL }, /* 612 */
- { 0, 0, NULL, NULL }, /* 613 */
- { 0, 0, NULL, NULL }, /* 614 */
- { 0, 0, NULL, NULL }, /* 615 */
- { 0, 0, NULL, NULL }, /* 616 */
- { 0, 0, NULL, NULL }, /* 617 */
- { 0, 0, NULL, NULL }, /* 618 */
- { 0, 0, NULL, NULL }, /* 619 */
- { 0, 0, NULL, NULL }, /* 620 */
- { 0, 0, NULL, NULL }, /* 621 */
- { 0, 0, NULL, NULL }, /* 622 */
- { 0, 0, NULL, NULL }, /* 623 */
- { 0, 0, NULL, NULL }, /* 624 */
- { 0, 0, NULL, NULL }, /* 625 */
- { 0, 0, NULL, NULL }, /* 626 */
- { 0, 0, NULL, NULL }, /* 627 */
- { 0, 0, NULL, NULL }, /* 628 */
- { 0, 0, NULL, NULL }, /* 629 */
- { 0, 0, NULL, NULL }, /* 630 */
- { 0, 0, NULL, NULL }, /* 631 */
- { 0, 0, NULL, NULL }, /* 632 */
- { 0, 0, NULL, NULL }, /* 633 */
- { 0, 0, NULL, NULL }, /* 634 */
- { 0, 0, NULL, NULL }, /* 635 */
- { 0, 0, NULL, NULL }, /* 636 */
- { 0, 0, NULL, NULL }, /* 637 */
- { 0, 0, NULL, NULL }, /* 638 */
- { 0, 0, NULL, NULL }, /* 639 */
- { 0, 0, NULL, NULL }, /* 640 */
- { 0, 0, NULL, NULL }, /* 641 */
- { 0, 0, NULL, NULL }, /* 642 */
- { 0, 0, NULL, NULL }, /* 643 */
- { 0, 0, NULL, NULL }, /* 644 */
- { 0, 0, NULL, NULL }, /* 645 */
- { 0, 0, NULL, NULL }, /* 646 */
- { 0, 0, NULL, NULL }, /* 647 */
- { 0, 0, NULL, NULL }, /* 648 */
- { 0, 0, NULL, NULL }, /* 649 */
- { 0, 0, NULL, NULL }, /* 650 */
- { 0, 0, NULL, NULL }, /* 651 */
- { 0, 0, NULL, NULL }, /* 652 */
- { 0, 0, NULL, NULL }, /* 653 */
- { 0, 0, NULL, NULL }, /* 654 */
- { 0, 0, NULL, NULL }, /* 655 */
- { 0, 0, NULL, NULL }, /* 656 */
- { 0, 0, NULL, NULL }, /* 657 */
- { 0, 0, NULL, NULL }, /* 658 */
- { 0, 0, NULL, NULL }, /* 659 */
- { 0, 0, NULL, NULL }, /* 660 */
- { 0, 0, NULL, NULL }, /* 661 */
- { 0, 0, NULL, NULL }, /* 662 */
- { 0, 0, NULL, NULL }, /* 663 */
- { 0, 0, NULL, NULL }, /* 664 */
- { 0, 0, NULL, NULL }, /* 665 */
- { 0, 0, NULL, NULL }, /* 666 */
- { 0, 0, NULL, NULL }, /* 667 */
- { 0, 0, NULL, NULL }, /* 668 */
- { 0, 0, NULL, NULL }, /* 669 */
- { 0, 0, NULL, NULL }, /* 670 */
- { 0, 0, NULL, NULL }, /* 671 */
- { 0, 0, NULL, NULL }, /* 672 */
- { 0, 0, NULL, NULL }, /* 673 */
- { 0, 0, NULL, NULL }, /* 674 */
- { 0, 0, NULL, NULL }, /* 675 */
- { 0, 0, NULL, NULL }, /* 676 */
- { 0, 0, NULL, NULL }, /* 677 */
- { 0, 0, NULL, NULL }, /* 678 */
- { 0, 0, NULL, NULL }, /* 679 */
- { 0, 0, NULL, NULL }, /* 680 */
- { 0, 0, NULL, NULL }, /* 681 */
- { 0, 0, NULL, NULL }, /* 682 */
- { 0, 0, NULL, NULL }, /* 683 */
- { 0, 0, NULL, NULL }, /* 684 */
- { 0, 0, NULL, NULL }, /* 685 */
- { 0, 0, NULL, NULL }, /* 686 */
- { 0, 0, NULL, NULL }, /* 687 */
- { 0, 0, NULL, NULL }, /* 688 */
- { 0, 0, NULL, NULL }, /* 689 */
- { 0, 0, NULL, NULL }, /* 690 */
- { 0, 0, NULL, NULL }, /* 691 */
- { 0, 0, NULL, NULL }, /* 692 */
- { 0, 0, NULL, NULL }, /* 693 */
- { 0, 0, NULL, NULL }, /* 694 */
- { 0, 0, NULL, NULL }, /* 695 */
- { 0, 0, NULL, NULL }, /* 696 */
- { 0, 0, NULL, NULL }, /* 697 */
- { 0, 0, NULL, NULL }, /* 698 */
- { 0, 0, NULL, NULL }, /* 699 */
- { 0, 0, NULL, NULL }, /* 700 */
- { 0, 0, NULL, NULL }, /* 701 */
- { 0, 0, NULL, NULL }, /* 702 */
- { 0, 0, NULL, NULL }, /* 703 */
- { 0, 0, NULL, NULL }, /* 704 */
- { 0, 0, NULL, NULL }, /* 705 */
- { 0, 0, NULL, NULL }, /* 706 */
- { 0, 0, NULL, NULL }, /* 707 */
- { 0, 0, NULL, NULL }, /* 708 */
- { 0, 0, NULL, NULL }, /* 709 */
- { 0, 0, NULL, NULL }, /* 710 */
- { 0, 0, NULL, NULL }, /* 711 */
- { 0, 0, NULL, NULL }, /* 712 */
- { 0, 0, NULL, NULL }, /* 713 */
- { 0, 0, NULL, NULL }, /* 714 */
- { 0, 0, NULL, NULL }, /* 715 */
- { 0, 0, NULL, NULL }, /* 716 */
- { 0, 0, NULL, NULL }, /* 717 */
- { 0, 0, NULL, NULL }, /* 718 */
- { 0, 0, NULL, NULL }, /* 719 */
- { 0, 0, NULL, NULL }, /* 720 */
- { 0, 0, NULL, NULL }, /* 721 */
- { 0, 0, NULL, NULL }, /* 722 */
- { 0, 0, NULL, NULL }, /* 723 */
- { 0, 0, NULL, NULL }, /* 724 */
- { 0, 0, NULL, NULL }, /* 725 */
- { 0, 0, NULL, NULL }, /* 726 */
- { 0, 0, NULL, NULL }, /* 727 */
- { 0, 0, NULL, NULL }, /* 728 */
- { 0, 0, NULL, NULL }, /* 729 */
- { 0, 0, NULL, NULL }, /* 730 */
- { 0, 0, NULL, NULL }, /* 731 */
- { 0, 0, NULL, NULL }, /* 732 */
- { 0, 0, NULL, NULL }, /* 733 */
- { 0, 0, NULL, NULL }, /* 734 */
- { 0, 0, NULL, NULL }, /* 735 */
- { 0, 0, NULL, NULL }, /* 736 */
- { 0, 0, NULL, NULL }, /* 737 */
- { 0, 0, NULL, NULL }, /* 738 */
- { 0, 0, NULL, NULL }, /* 739 */
- { 0, 0, NULL, NULL }, /* 740 */
- { 0, 0, NULL, NULL }, /* 741 */
- { 0, 0, NULL, NULL }, /* 742 */
- { 0, 0, NULL, NULL }, /* 743 */
- { 0, 0, NULL, NULL }, /* 744 */
- { 0, 0, NULL, NULL }, /* 745 */
- { 0, 0, NULL, NULL }, /* 746 */
- { 0, 0, NULL, NULL }, /* 747 */
- { 0, 0, NULL, NULL }, /* 748 */
- { 0, 0, NULL, NULL }, /* 749 */
- { 0, 0, NULL, NULL }, /* 750 */
- { 0, 0, NULL, NULL }, /* 751 */
- { 0, 0, NULL, NULL }, /* 752 */
- { 0, 0, NULL, NULL }, /* 753 */
- { 0, 0, NULL, NULL }, /* 754 */
- { 0, 0, NULL, NULL }, /* 755 */
- { 0, 0, NULL, NULL }, /* 756 */
- { 0, 0, NULL, NULL }, /* 757 */
- { 0, 0, NULL, NULL }, /* 758 */
- { 0, 0, NULL, NULL }, /* 759 */
- { 0, 0, NULL, NULL }, /* 760 */
- { 0, 0, NULL, NULL }, /* 761 */
- { 0, 0, NULL, NULL }, /* 762 */
- { 0, 0, NULL, NULL }, /* 763 */
- { 0, 0, NULL, NULL }, /* 764 */
- { 0, 0, NULL, NULL }, /* 765 */
- { 0, 0, NULL, NULL }, /* 766 */
- { 0, 0, NULL, NULL }, /* 767 */
- { 0, 0, NULL, NULL }, /* 768 */
- { 0, 0, NULL, NULL }, /* 769 */
- { 0, 0, NULL, NULL }, /* 770 */
- { 0, 0, NULL, NULL }, /* 771 */
- { 0, 0, NULL, NULL }, /* 772 */
- { 0, 0, NULL, NULL }, /* 773 */
- { 0, 0, NULL, NULL }, /* 774 */
- { 0, 0, NULL, NULL }, /* 775 */
- { 0, 0, NULL, NULL }, /* 776 */
- { 0, 0, NULL, NULL }, /* 777 */
- { 0, 0, NULL, NULL }, /* 778 */
- { 0, 0, NULL, NULL }, /* 779 */
- { 0, 0, NULL, NULL }, /* 780 */
- { 0, 0, NULL, NULL }, /* 781 */
- { 0, 0, NULL, NULL }, /* 782 */
- { 0, 0, NULL, NULL }, /* 783 */
- { 0, 0, NULL, NULL }, /* 784 */
- { 0, 0, NULL, NULL }, /* 785 */
- { 0, 0, NULL, NULL }, /* 786 */
- { 0, 0, NULL, NULL }, /* 787 */
- { 0, 0, NULL, NULL }, /* 788 */
- { 0, 0, NULL, NULL }, /* 789 */
- { 0, 0, NULL, NULL }, /* 790 */
- { 0, 0, NULL, NULL }, /* 791 */
- { 0, 0, NULL, NULL }, /* 792 */
- { 0, 0, NULL, NULL }, /* 793 */
- { 0, 0, NULL, NULL }, /* 794 */
- { 0, 0, NULL, NULL }, /* 795 */
- { 0, 0, NULL, NULL }, /* 796 */
- { 0, 0, NULL, NULL }, /* 797 */
- { 0, 0, NULL, NULL }, /* 798 */
- { 0, 0, NULL, NULL }, /* 799 */
- { 0, 0, NULL, NULL }, /* 800 */
- { 0, 0, NULL, NULL }, /* 801 */
- { 0, 0, NULL, NULL }, /* 802 */
- { 0, 0, NULL, NULL }, /* 803 */
- { 0, 0, NULL, NULL }, /* 804 */
- { 0, 0, NULL, NULL }, /* 805 */
- { 0, 0, NULL, NULL }, /* 806 */
- { 0, 0, NULL, NULL }, /* 807 */
- { 0, 0, NULL, NULL }, /* 808 */
- { 0, 0, NULL, NULL }, /* 809 */
- { 0, 0, NULL, NULL }, /* 810 */
- { 0, 0, NULL, NULL }, /* 811 */
- { 0, 0, NULL, NULL }, /* 812 */
- { 0, 0, NULL, NULL }, /* 813 */
- { 0, 0, NULL, NULL }, /* 814 */
- { 0, 0, NULL, NULL }, /* 815 */
- { 0, 0, NULL, NULL }, /* 816 */
- { 0, 0, NULL, NULL }, /* 817 */
- { 0, 0, NULL, NULL }, /* 818 */
- { 0, 0, NULL, NULL }, /* 819 */
- { 0, 0, NULL, NULL }, /* 820 */
- { 0, 0, NULL, NULL }, /* 821 */
- { 0, 0, NULL, NULL }, /* 822 */
- { 0, 0, NULL, NULL }, /* 823 */
- { 0, 0, NULL, NULL }, /* 824 */
- { 0, 0, NULL, NULL }, /* 825 */
- { 0, 0, NULL, NULL }, /* 826 */
- { 0, 0, NULL, NULL }, /* 827 */
- { 0, 0, NULL, NULL }, /* 828 */
- { 0, 0, NULL, NULL }, /* 829 */
- { 0, 0, NULL, NULL }, /* 830 */
- { 0, 0, NULL, NULL }, /* 831 */
- { 0, 0, NULL, NULL }, /* 832 */
- { 0, 0, NULL, NULL }, /* 833 */
- { 0, 0, NULL, NULL }, /* 834 */
- { 0, 0, NULL, NULL }, /* 835 */
- { 0, 0, NULL, NULL }, /* 836 */
- { 0, 0, NULL, NULL }, /* 837 */
- { 0, 0, NULL, NULL }, /* 838 */
- { 0, 0, NULL, NULL }, /* 839 */
- { 0, 0, NULL, NULL }, /* 840 */
- { 0, 0, NULL, NULL }, /* 841 */
- { 0, 0, NULL, NULL }, /* 842 */
- { 0, 0, NULL, NULL }, /* 843 */
- { 0, 0, NULL, NULL }, /* 844 */
- { 0, 0, NULL, NULL }, /* 845 */
- { 0, 0, NULL, NULL }, /* 846 */
- { 0, 0, NULL, NULL }, /* 847 */
- { 0, 0, NULL, NULL }, /* 848 */
- { 0, 0, NULL, NULL }, /* 849 */
- { 0, 0, NULL, NULL }, /* 850 */
- { 0, 0, NULL, NULL }, /* 851 */
- { 0, 0, NULL, NULL }, /* 852 */
- { 0, 0, NULL, NULL }, /* 853 */
- { 0, 0, NULL, NULL }, /* 854 */
- { 0, 0, NULL, NULL }, /* 855 */
- { 0, 0, NULL, NULL }, /* 856 */
- { 0, 0, NULL, NULL }, /* 857 */
- { 0, 0, NULL, NULL }, /* 858 */
- { 0, 0, NULL, NULL }, /* 859 */
- { 0, 0, NULL, NULL }, /* 860 */
- { 0, 0, NULL, NULL }, /* 861 */
- { 0, 0, NULL, NULL }, /* 862 */
- { 0, 0, NULL, NULL }, /* 863 */
- { 0, 0, NULL, NULL }, /* 864 */
- { 0, 0, NULL, NULL }, /* 865 */
- { 0, 0, NULL, NULL }, /* 866 */
- { 0, 0, NULL, NULL }, /* 867 */
- { 0, 0, NULL, NULL }, /* 868 */
- { 0, 0, NULL, NULL }, /* 869 */
- { 0, 0, NULL, NULL }, /* 870 */
- { 0, 0, NULL, NULL }, /* 871 */
- { 0, 0, NULL, NULL }, /* 872 */
- { 0, 0, NULL, NULL }, /* 873 */
- { 0, 0, NULL, NULL }, /* 874 */
- { 0, 0, NULL, NULL }, /* 875 */
- { 0, 0, NULL, NULL }, /* 876 */
- { 0, 0, NULL, NULL }, /* 877 */
- { 0, 0, NULL, NULL }, /* 878 */
- { 0, 0, NULL, NULL }, /* 879 */
- { 0, 0, NULL, NULL }, /* 880 */
- { 0, 0, NULL, NULL }, /* 881 */
- { 0, 0, NULL, NULL }, /* 882 */
- { 0, 0, NULL, NULL }, /* 883 */
- { 0, 0, NULL, NULL }, /* 884 */
- { 0, 0, NULL, NULL }, /* 885 */
- { 0, 0, NULL, NULL }, /* 886 */
- { 0, 0, NULL, NULL }, /* 887 */
- { 0, 0, NULL, NULL }, /* 888 */
- { 0, 0, NULL, NULL }, /* 889 */
- { 0, 0, NULL, NULL }, /* 890 */
- { 0, 0, NULL, NULL }, /* 891 */
- { 0, 0, NULL, NULL }, /* 892 */
- { 0, 0, NULL, NULL }, /* 893 */
- { 0, 0, NULL, NULL }, /* 894 */
- { 0, 0, NULL, NULL }, /* 895 */
- { 0, 0, NULL, NULL }, /* 896 */
- { 0, 0, NULL, NULL }, /* 897 */
- { 0, 0, NULL, NULL }, /* 898 */
- { 0, 0, NULL, NULL }, /* 899 */
- { 0, 0, NULL, NULL }, /* 900 */
- { 0, 0, NULL, NULL }, /* 901 */
- { 0, 0, NULL, NULL }, /* 902 */
- { 0, 0, NULL, NULL }, /* 903 */
- { 0, 0, NULL, NULL }, /* 904 */
- { 0, 0, NULL, NULL }, /* 905 */
- { 0, 0, NULL, NULL }, /* 906 */
- { 0, 0, NULL, NULL }, /* 907 */
- { 0, 0, NULL, NULL }, /* 908 */
- { 0, 0, NULL, NULL }, /* 909 */
- { 0, 0, NULL, NULL }, /* 910 */
- { 0, 0, NULL, NULL }, /* 911 */
- { 0, 0, NULL, NULL }, /* 912 */
- { 0, 0, NULL, NULL }, /* 913 */
- { 0, 0, NULL, NULL }, /* 914 */
- { 0, 0, NULL, NULL }, /* 915 */
- { 0, 0, NULL, NULL }, /* 916 */
- { 0, 0, NULL, NULL }, /* 917 */
- { 0, 0, NULL, NULL }, /* 918 */
- { 0, 0, NULL, NULL }, /* 919 */
- { 0, 0, NULL, NULL }, /* 920 */
- { 0, 0, NULL, NULL }, /* 921 */
- { 0, 0, NULL, NULL }, /* 922 */
- { 0, 0, NULL, NULL }, /* 923 */
- { 0, 0, NULL, NULL }, /* 924 */
- { 0, 0, NULL, NULL }, /* 925 */
- { 0, 0, NULL, NULL }, /* 926 */
- { 0, 0, NULL, NULL }, /* 927 */
- { 0, 0, NULL, NULL }, /* 928 */
- { 0, 0, NULL, NULL }, /* 929 */
- { 0, 0, NULL, NULL }, /* 930 */
- { 0, 0, NULL, NULL }, /* 931 */
- { 0, 0, NULL, NULL }, /* 932 */
- { 0, 0, NULL, NULL }, /* 933 */
- { 0, 0, NULL, NULL }, /* 934 */
- { 0, 0, NULL, NULL }, /* 935 */
- { 0, 0, NULL, NULL }, /* 936 */
- { 0, 0, NULL, NULL }, /* 937 */
- { 0, 0, NULL, NULL }, /* 938 */
- { 0, 0, NULL, NULL }, /* 939 */
- { 0, 0, NULL, NULL }, /* 940 */
- { 0, 0, NULL, NULL }, /* 941 */
- { 0, 0, NULL, NULL }, /* 942 */
- { 0, 0, NULL, NULL }, /* 943 */
- { 0, 0, NULL, NULL }, /* 944 */
- { 0, 0, NULL, NULL }, /* 945 */
- { 0, 0, NULL, NULL }, /* 946 */
- { 0, 0, NULL, NULL }, /* 947 */
- { 0, 0, NULL, NULL }, /* 948 */
- { 0, 0, NULL, NULL }, /* 949 */
- { 0, 0, NULL, NULL }, /* 950 */
- { 0, 0, NULL, NULL }, /* 951 */
- { 0, 0, NULL, NULL }, /* 952 */
- { 0, 0, NULL, NULL }, /* 953 */
- { 0, 0, NULL, NULL }, /* 954 */
- { 0, 0, NULL, NULL }, /* 955 */
- { 0, 0, NULL, NULL }, /* 956 */
- { 0, 0, NULL, NULL }, /* 957 */
- { 0, 0, NULL, NULL }, /* 958 */
- { 0, 0, NULL, NULL }, /* 959 */
- { 0, 0, NULL, NULL }, /* 960 */
- { 0, 0, NULL, NULL }, /* 961 */
- { 0, 0, NULL, NULL }, /* 962 */
- { 0, 0, NULL, NULL }, /* 963 */
- { 0, 0, NULL, NULL }, /* 964 */
- { 0, 0, NULL, NULL }, /* 965 */
- { 0, 0, NULL, NULL }, /* 966 */
- { 0, 0, NULL, NULL }, /* 967 */
- { 0, 0, NULL, NULL }, /* 968 */
- { 0, 0, NULL, NULL }, /* 969 */
- { 0, 0, NULL, NULL }, /* 970 */
- { 0, 0, NULL, NULL }, /* 971 */
- { 0, 0, NULL, NULL }, /* 972 */
- { 0, 0, NULL, NULL }, /* 973 */
- { 0, 0, NULL, NULL }, /* 974 */
- { 0, 0, NULL, NULL }, /* 975 */
- { 0, 0, NULL, NULL }, /* 976 */
- { 0, 0, NULL, NULL }, /* 977 */
- { 0, 0, NULL, NULL }, /* 978 */
- { 0, 0, NULL, NULL }, /* 979 */
- { 0, 0, NULL, NULL }, /* 980 */
- { 0, 0, NULL, NULL }, /* 981 */
- { 0, 0, NULL, NULL }, /* 982 */
- { 0, 0, NULL, NULL }, /* 983 */
- { 0, 0, NULL, NULL }, /* 984 */
- { 0, 0, NULL, NULL }, /* 985 */
- { 0, 0, NULL, NULL }, /* 986 */
- { 0, 0, NULL, NULL }, /* 987 */
- { 0, 0, NULL, NULL }, /* 988 */
- { 0, 0, NULL, NULL }, /* 989 */
- { 0, 0, NULL, NULL }, /* 990 */
- { 0, 0, NULL, NULL }, /* 991 */
- { 0, 0, NULL, NULL }, /* 992 */
- { 0, 0, NULL, NULL }, /* 993 */
- { 0, 0, NULL, NULL }, /* 994 */
- { 0, 0, NULL, NULL }, /* 995 */
- { 0, 0, NULL, NULL }, /* 996 */
- { 0, 0, NULL, NULL }, /* 997 */
- { 0, 0, NULL, NULL }, /* 998 */
- { 0, 0, NULL, NULL }, /* 999 */ /* end of SVR4 */
- { 0, 0, printargs, "sysv_syscall" }, /* 1000 */ /* start of SYSV */
- { 0, 0, printargs, "sysv_exit" }, /* 1001 */
- { 0, 0, printargs, "sysv_fork" }, /* 1002 */
- { 0, 0, printargs, "sysv_read" }, /* 1003 */
- { 0, 0, printargs, "sysv_write" }, /* 1004 */
- { 0, 0, printargs, "sysv_open" }, /* 1005 */
- { 0, 0, printargs, "sysv_close" }, /* 1006 */
- { 0, 0, printargs, "sysv_wait" }, /* 1007 */
- { 0, 0, printargs, "sysv_creat" }, /* 1008 */
- { 0, 0, printargs, "sysv_link" }, /* 1009 */
- { 0, 0, printargs, "sysv_unlink" }, /* 1010 */
- { 0, 0, printargs, "sysv_execv" }, /* 1011 */
- { 0, 0, printargs, "sysv_chdir" }, /* 1012 */
- { 0, 0, printargs, "sysv_time" }, /* 1013 */
- { 0, 0, printargs, "sysv_mknod" }, /* 1014 */
- { 0, 0, printargs, "sysv_chmod" }, /* 1015 */
- { 0, 0, printargs, "sysv_chown" }, /* 1016 */
- { 0, 0, printargs, "sysv_brk" }, /* 1017 */
- { 0, 0, printargs, "sysv_stat" }, /* 1018 */
- { 0, 0, printargs, "sysv_lseek" }, /* 1019 */
- { 0, 0, printargs, "sysv_getpid" }, /* 1020 */
- { 0, 0, printargs, "sysv_mount" }, /* 1021 */
- { 0, 0, printargs, "sysv_umount" }, /* 1022 */
- { 0, 0, printargs, "sysv_setuid" }, /* 1023 */
- { 0, 0, printargs, "sysv_getuid" }, /* 1024 */
- { 0, 0, printargs, "sysv_stime" }, /* 1025 */
- { 0, 0, printargs, "sysv_ptrace" }, /* 1026 */
- { 0, 0, printargs, "sysv_alarm" }, /* 1027 */
- { 0, 0, printargs, "sysv_fstat" }, /* 1028 */
- { 0, 0, printargs, "sysv_pause" }, /* 1029 */
- { 0, 0, printargs, "sysv_utime" }, /* 1030 */
- { 0, 0, printargs, "sysv_stty" }, /* 1031 */
- { 0, 0, printargs, "sysv_gtty" }, /* 1032 */
- { 0, 0, printargs, "sysv_access" }, /* 1033 */
- { 0, 0, printargs, "sysv_nice" }, /* 1034 */
- { 0, 0, printargs, "sysv_statfs" }, /* 1035 */
- { 0, 0, printargs, "sysv_sync" }, /* 1036 */
- { 0, 0, printargs, "sysv_kill" }, /* 1037 */
- { 0, 0, printargs, "sysv_fstatfs" }, /* 1038 */
- { 0, 0, printargs, "sysv_setpgrp" }, /* 1039 */
- { 0, 0, printargs, "sysv_syssgi" }, /* 1040 */
- { 0, 0, printargs, "sysv_dup" }, /* 1041 */
- { 0, 0, printargs, "sysv_pipe" }, /* 1042 */
- { 0, 0, printargs, "sysv_times" }, /* 1043 */
- { 0, 0, printargs, "sysv_profil" }, /* 1044 */
- { 0, 0, printargs, "sysv_plock" }, /* 1045 */
- { 0, 0, printargs, "sysv_setgid" }, /* 1046 */
- { 0, 0, printargs, "sysv_getgid" }, /* 1047 */
- { 0, 0, printargs, "sysv_sig" }, /* 1048 */
- { 0, 0, printargs, "sysv_msgsys" }, /* 1049 */
- { 0, 0, printargs, "sysv_sysmips" }, /* 1050 */
- { 0, 0, printargs, "sysv_acct" }, /* 1051 */
- { 0, 0, printargs, "sysv_shmsys" }, /* 1052 */
- { 0, 0, printargs, "sysv_semsys" }, /* 1053 */
- { 0, 0, printargs, "sysv_ioctl" }, /* 1054 */
- { 0, 0, printargs, "sysv_uadmin" }, /* 1055 */
- { 0, 0, printargs, "sysv_sysmp" }, /* 1056 */
- { 0, 0, printargs, "sysv_utssys" }, /* 1057 */
- { 0, 0, NULL, NULL , }, /* 1058 */
- { 0, 0, printargs, "sysv_execve" }, /* 1059 */
- { 0, 0, printargs, "sysv_umask" }, /* 1060 */
- { 0, 0, printargs, "sysv_chroot" }, /* 1061 */
- { 0, 0, printargs, "sysv_fcntl" }, /* 1062 */
- { 0, 0, printargs, "sysv_ulimit" }, /* 1063 */
- { 0, 0, NULL, NULL , }, /* 1064 */
- { 0, 0, NULL, NULL , }, /* 1065 */
- { 0, 0, NULL, NULL , }, /* 1066 */
- { 0, 0, NULL, NULL , }, /* 1067 */
- { 0, 0, NULL, NULL , }, /* 1068 */
- { 0, 0, NULL, NULL , }, /* 1069 */
- { 0, 0, printargs, "sysv_advfs" }, /* 1070 */
- { 0, 0, printargs, "sysv_unadvfs" }, /* 1071 */
- { 0, 0, printargs, "sysv_rmount" }, /* 1072 */
- { 0, 0, printargs, "sysv_rumount" }, /* 1073 */
- { 0, 0, printargs, "sysv_rfstart" }, /* 1074 */
- { 0, 0, printargs, "sysv_getrlimit64" }, /* 1075 */
- { 0, 0, printargs, "sysv_setrlimit64" }, /* 1076 */
- { 0, 0, printargs, "sysv_nanosleep" }, /* 1077 */
- { 0, 0, printargs, "sysv_lseek64" }, /* 1078 */
- { 0, 0, printargs, "sysv_rmdir" }, /* 1079 */
- { 0, 0, printargs, "sysv_mkdir" }, /* 1080 */
- { 0, 0, printargs, "sysv_getdents" }, /* 1081 */
- { 0, 0, printargs, "sysv_sginap" }, /* 1082 */
- { 0, 0, printargs, "sysv_sgikopt" }, /* 1083 */
- { 0, 0, printargs, "sysv_sysfs" }, /* 1084 */
- { 0, 0, printargs, "sysv_getmsg" }, /* 1085 */
- { 0, 0, printargs, "sysv_putmsg" }, /* 1086 */
- { 0, 0, printargs, "sysv_poll" }, /* 1087 */
- { 0, 0, printargs, "sysv_sigreturn" }, /* 1088 */
- { 0, 0, printargs, "sysv_accept" }, /* 1089 */
- { 0, 0, printargs, "sysv_bind" }, /* 1090 */
- { 0, 0, printargs, "sysv_connect" }, /* 1091 */
- { 0, 0, printargs, "sysv_gethostid" }, /* 1092 */
- { 0, 0, printargs, "sysv_getpeername" }, /* 1093 */
- { 0, 0, printargs, "sysv_getsockname" }, /* 1094 */
- { 0, 0, printargs, "sysv_getsockopt" }, /* 1095 */
- { 0, 0, printargs, "sysv_listen" }, /* 1096 */
- { 0, 0, printargs, "sysv_recv" }, /* 1097 */
- { 0, 0, printargs, "sysv_recvfrom" }, /* 1098 */
- { 0, 0, printargs, "sysv_recvmsg" }, /* 1099 */
- { 0, 0, printargs, "sysv_select" }, /* 1100 */
- { 0, 0, printargs, "sysv_send" }, /* 1101 */
- { 0, 0, printargs, "sysv_sendmsg" }, /* 1102 */
- { 0, 0, printargs, "sysv_sendto" }, /* 1103 */
- { 0, 0, printargs, "sysv_sethostid" }, /* 1104 */
- { 0, 0, printargs, "sysv_setsockopt" }, /* 1105 */
- { 0, 0, printargs, "sysv_shutdown" }, /* 1106 */
- { 0, 0, printargs, "sysv_socket" }, /* 1107 */
- { 0, 0, printargs, "sysv_gethostname" }, /* 1108 */
- { 0, 0, printargs, "sysv_sethostname" }, /* 1109 */
- { 0, 0, printargs, "sysv_getdomainname" }, /* 1110 */
- { 0, 0, printargs, "sysv_setdomainname" }, /* 1111 */
- { 0, 0, printargs, "sysv_truncate" }, /* 1112 */
- { 0, 0, printargs, "sysv_ftruncate" }, /* 1113 */
- { 0, 0, printargs, "sysv_rename" }, /* 1114 */
- { 0, 0, printargs, "sysv_symlink" }, /* 1115 */
- { 0, 0, printargs, "sysv_readlink" }, /* 1116 */
- { 0, 0, printargs, "sysv_lstat" }, /* 1117 */
- { 0, 0, printargs, "sysv_nfsmount" }, /* 1118 */
- { 0, 0, printargs, "sysv_nfssvc" }, /* 1119 */
- { 0, 0, printargs, "sysv_getfh" }, /* 1120 */
- { 0, 0, printargs, "sysv_async_daemon" }, /* 1121 */
- { 0, 0, printargs, "sysv_exportfs" }, /* 1122 */
- { 0, 0, printargs, "sysv_setregid" }, /* 1123 */
- { 0, 0, printargs, "sysv_setreuid" }, /* 1124 */
- { 0, 0, printargs, "sysv_getitimer" }, /* 1125 */
- { 0, 0, printargs, "sysv_setitimer" }, /* 1126 */
- { 0, 0, printargs, "sysv_adjtime" }, /* 1127 */
- { 0, 0, printargs, "sysv_BSD_getime" }, /* 1128 */
- { 0, 0, printargs, "sysv_sproc" }, /* 1129 */
- { 0, 0, printargs, "sysv_prctl" }, /* 1130 */
- { 0, 0, printargs, "sysv_procblk" }, /* 1131 */
- { 0, 0, printargs, "sysv_sprocsp" }, /* 1132 */
- { 0, 0, printargs, "sysv_sgigsc" }, /* 1133 */
- { 0, 0, printargs, "sysv_mmap" }, /* 1134 */
- { 0, 0, printargs, "sysv_munmap" }, /* 1135 */
- { 0, 0, printargs, "sysv_mprotect" }, /* 1136 */
- { 0, 0, printargs, "sysv_msync" }, /* 1137 */
- { 0, 0, printargs, "sysv_madvise" }, /* 1138 */
- { 0, 0, printargs, "sysv_pagelock" }, /* 1139 */
- { 0, 0, printargs, "sysv_getpagesize" }, /* 1140 */
- { 0, 0, printargs, "sysv_quotactl" }, /* 1141 */
- { 0, 0, printargs, "sysv_libdetach" }, /* 1142 */
- { 0, 0, printargs, "sysv_BSDgetpgrp" }, /* 1143 */
- { 0, 0, printargs, "sysv_BSDsetpgrp" }, /* 1144 */
- { 0, 0, printargs, "sysv_vhangup" }, /* 1145 */
- { 0, 0, printargs, "sysv_fsync" }, /* 1146 */
- { 0, 0, printargs, "sysv_fchdir" }, /* 1147 */
- { 0, 0, printargs, "sysv_getrlimit" }, /* 1148 */
- { 0, 0, printargs, "sysv_setrlimit" }, /* 1149 */
- { 0, 0, printargs, "sysv_cacheflush" }, /* 1150 */
- { 0, 0, printargs, "sysv_cachectl" }, /* 1151 */
- { 0, 0, printargs, "sysv_fchown" }, /* 1152 */
- { 0, 0, printargs, "sysv_fchmod" }, /* 1153 */
- { 0, 0, printargs, "sysv_wait3" }, /* 1154 */
- { 0, 0, printargs, "sysv_socketpair" }, /* 1155 */
- { 0, 0, printargs, "sysv_sysinfo" }, /* 1156 */
- { 0, 0, printargs, "sysv_nuname" }, /* 1157 */
- { 0, 0, printargs, "sysv_xstat" }, /* 1158 */
- { 0, 0, printargs, "sysv_lxstat" }, /* 1159 */
- { 0, 0, printargs, "sysv_fxstat" }, /* 1160 */
- { 0, 0, printargs, "sysv_xmknod" }, /* 1161 */
- { 0, 0, printargs, "sysv_ksigaction" }, /* 1162 */
- { 0, 0, printargs, "sysv_sigpending" }, /* 1163 */
- { 0, 0, printargs, "sysv_sigprocmask" }, /* 1164 */
- { 0, 0, printargs, "sysv_sigsuspend" }, /* 1165 */
- { 0, 0, printargs, "sysv_sigpoll" }, /* 1166 */
- { 0, 0, printargs, "sysv_swapctl" }, /* 1167 */
- { 0, 0, printargs, "sysv_getcontext" }, /* 1168 */
- { 0, 0, printargs, "sysv_setcontext" }, /* 1169 */
- { 0, 0, printargs, "sysv_waitsys" }, /* 1170 */
- { 0, 0, printargs, "sysv_sigstack" }, /* 1171 */
- { 0, 0, printargs, "sysv_sigaltstack" }, /* 1172 */
- { 0, 0, printargs, "sysv_sigsendset" }, /* 1173 */
- { 0, 0, printargs, "sysv_statvfs" }, /* 1174 */
- { 0, 0, printargs, "sysv_fstatvfs" }, /* 1175 */
- { 0, 0, printargs, "sysv_getpmsg" }, /* 1176 */
- { 0, 0, printargs, "sysv_putpmsg" }, /* 1177 */
- { 0, 0, printargs, "sysv_lchown" }, /* 1178 */
- { 0, 0, printargs, "sysv_priocntl" }, /* 1179 */
- { 0, 0, printargs, "sysv_ksigqueue" }, /* 1180 */
- { 0, 0, printargs, "sysv_readv" }, /* 1181 */
- { 0, 0, printargs, "sysv_writev" }, /* 1182 */
- { 0, 0, printargs, "sysv_truncate64" }, /* 1183 */
- { 0, 0, printargs, "sysv_ftruncate64" }, /* 1184 */
- { 0, 0, printargs, "sysv_mmap64" }, /* 1185 */
- { 0, 0, printargs, "sysv_dmi" }, /* 1186 */
- { 0, 0, printargs, "sysv_pread" }, /* 1187 */
- { 0, 0, printargs, "sysv_pwrite" }, /* 1188 */
- { 0, 0, NULL, NULL }, /* 1189 */
- { 0, 0, NULL, NULL }, /* 1190 */
- { 0, 0, NULL, NULL }, /* 1191 */
- { 0, 0, NULL, NULL }, /* 1192 */
- { 0, 0, NULL, NULL }, /* 1193 */
- { 0, 0, NULL, NULL }, /* 1194 */
- { 0, 0, NULL, NULL }, /* 1195 */
- { 0, 0, NULL, NULL }, /* 1196 */
- { 0, 0, NULL, NULL }, /* 1197 */
- { 0, 0, NULL, NULL }, /* 1198 */
- { 0, 0, NULL, NULL }, /* 1199 */
- { 0, 0, NULL, NULL }, /* 1200 */
- { 0, 0, NULL, NULL }, /* 1201 */
- { 0, 0, NULL, NULL }, /* 1202 */
- { 0, 0, NULL, NULL }, /* 1203 */
- { 0, 0, NULL, NULL }, /* 1204 */
- { 0, 0, NULL, NULL }, /* 1205 */
- { 0, 0, NULL, NULL }, /* 1206 */
- { 0, 0, NULL, NULL }, /* 1207 */
- { 0, 0, NULL, NULL }, /* 1208 */
- { 0, 0, NULL, NULL }, /* 1209 */
- { 0, 0, NULL, NULL }, /* 1210 */
- { 0, 0, NULL, NULL }, /* 1211 */
- { 0, 0, NULL, NULL }, /* 1212 */
- { 0, 0, NULL, NULL }, /* 1213 */
- { 0, 0, NULL, NULL }, /* 1214 */
- { 0, 0, NULL, NULL }, /* 1215 */
- { 0, 0, NULL, NULL }, /* 1216 */
- { 0, 0, NULL, NULL }, /* 1217 */
- { 0, 0, NULL, NULL }, /* 1218 */
- { 0, 0, NULL, NULL }, /* 1219 */
- { 0, 0, NULL, NULL }, /* 1220 */
- { 0, 0, NULL, NULL }, /* 1221 */
- { 0, 0, NULL, NULL }, /* 1222 */
- { 0, 0, NULL, NULL }, /* 1223 */
- { 0, 0, NULL, NULL }, /* 1224 */
- { 0, 0, NULL, NULL }, /* 1225 */
- { 0, 0, NULL, NULL }, /* 1226 */
- { 0, 0, NULL, NULL }, /* 1227 */
- { 0, 0, NULL, NULL }, /* 1228 */
- { 0, 0, NULL, NULL }, /* 1229 */
- { 0, 0, NULL, NULL }, /* 1230 */
- { 0, 0, NULL, NULL }, /* 1231 */
- { 0, 0, NULL, NULL }, /* 1232 */
- { 0, 0, NULL, NULL }, /* 1233 */
- { 0, 0, NULL, NULL }, /* 1234 */
- { 0, 0, NULL, NULL }, /* 1235 */
- { 0, 0, NULL, NULL }, /* 1236 */
- { 0, 0, NULL, NULL }, /* 1237 */
- { 0, 0, NULL, NULL }, /* 1238 */
- { 0, 0, NULL, NULL }, /* 1239 */
- { 0, 0, NULL, NULL }, /* 1240 */
- { 0, 0, NULL, NULL }, /* 1241 */
- { 0, 0, NULL, NULL }, /* 1242 */
- { 0, 0, NULL, NULL }, /* 1243 */
- { 0, 0, NULL, NULL }, /* 1244 */
- { 0, 0, NULL, NULL }, /* 1245 */
- { 0, 0, NULL, NULL }, /* 1246 */
- { 0, 0, NULL, NULL }, /* 1247 */
- { 0, 0, NULL, NULL }, /* 1248 */
- { 0, 0, NULL, NULL }, /* 1249 */
- { 0, 0, NULL, NULL }, /* 1250 */
- { 0, 0, NULL, NULL }, /* 1251 */
- { 0, 0, NULL, NULL }, /* 1252 */
- { 0, 0, NULL, NULL }, /* 1253 */
- { 0, 0, NULL, NULL }, /* 1254 */
- { 0, 0, NULL, NULL }, /* 1255 */
- { 0, 0, NULL, NULL }, /* 1256 */
- { 0, 0, NULL, NULL }, /* 1257 */
- { 0, 0, NULL, NULL }, /* 1258 */
- { 0, 0, NULL, NULL }, /* 1259 */
- { 0, 0, NULL, NULL }, /* 1260 */
- { 0, 0, NULL, NULL }, /* 1261 */
- { 0, 0, NULL, NULL }, /* 1262 */
- { 0, 0, NULL, NULL }, /* 1263 */
- { 0, 0, NULL, NULL }, /* 1264 */
- { 0, 0, NULL, NULL }, /* 1265 */
- { 0, 0, NULL, NULL }, /* 1266 */
- { 0, 0, NULL, NULL }, /* 1267 */
- { 0, 0, NULL, NULL }, /* 1268 */
- { 0, 0, NULL, NULL }, /* 1269 */
- { 0, 0, NULL, NULL }, /* 1270 */
- { 0, 0, NULL, NULL }, /* 1271 */
- { 0, 0, NULL, NULL }, /* 1272 */
- { 0, 0, NULL, NULL }, /* 1273 */
- { 0, 0, NULL, NULL }, /* 1274 */
- { 0, 0, NULL, NULL }, /* 1275 */
- { 0, 0, NULL, NULL }, /* 1276 */
- { 0, 0, NULL, NULL }, /* 1277 */
- { 0, 0, NULL, NULL }, /* 1278 */
- { 0, 0, NULL, NULL }, /* 1279 */
- { 0, 0, NULL, NULL }, /* 1280 */
- { 0, 0, NULL, NULL }, /* 1281 */
- { 0, 0, NULL, NULL }, /* 1282 */
- { 0, 0, NULL, NULL }, /* 1283 */
- { 0, 0, NULL, NULL }, /* 1284 */
- { 0, 0, NULL, NULL }, /* 1285 */
- { 0, 0, NULL, NULL }, /* 1286 */
- { 0, 0, NULL, NULL }, /* 1287 */
- { 0, 0, NULL, NULL }, /* 1288 */
- { 0, 0, NULL, NULL }, /* 1289 */
- { 0, 0, NULL, NULL }, /* 1290 */
- { 0, 0, NULL, NULL }, /* 1291 */
- { 0, 0, NULL, NULL }, /* 1292 */
- { 0, 0, NULL, NULL }, /* 1293 */
- { 0, 0, NULL, NULL }, /* 1294 */
- { 0, 0, NULL, NULL }, /* 1295 */
- { 0, 0, NULL, NULL }, /* 1296 */
- { 0, 0, NULL, NULL }, /* 1297 */
- { 0, 0, NULL, NULL }, /* 1298 */
- { 0, 0, NULL, NULL }, /* 1299 */
- { 0, 0, NULL, NULL }, /* 1300 */
- { 0, 0, NULL, NULL }, /* 1301 */
- { 0, 0, NULL, NULL }, /* 1302 */
- { 0, 0, NULL, NULL }, /* 1303 */
- { 0, 0, NULL, NULL }, /* 1304 */
- { 0, 0, NULL, NULL }, /* 1305 */
- { 0, 0, NULL, NULL }, /* 1306 */
- { 0, 0, NULL, NULL }, /* 1307 */
- { 0, 0, NULL, NULL }, /* 1308 */
- { 0, 0, NULL, NULL }, /* 1309 */
- { 0, 0, NULL, NULL }, /* 1310 */
- { 0, 0, NULL, NULL }, /* 1311 */
- { 0, 0, NULL, NULL }, /* 1312 */
- { 0, 0, NULL, NULL }, /* 1313 */
- { 0, 0, NULL, NULL }, /* 1314 */
- { 0, 0, NULL, NULL }, /* 1315 */
- { 0, 0, NULL, NULL }, /* 1316 */
- { 0, 0, NULL, NULL }, /* 1317 */
- { 0, 0, NULL, NULL }, /* 1318 */
- { 0, 0, NULL, NULL }, /* 1319 */
- { 0, 0, NULL, NULL }, /* 1320 */
- { 0, 0, NULL, NULL }, /* 1321 */
- { 0, 0, NULL, NULL }, /* 1322 */
- { 0, 0, NULL, NULL }, /* 1323 */
- { 0, 0, NULL, NULL }, /* 1324 */
- { 0, 0, NULL, NULL }, /* 1325 */
- { 0, 0, NULL, NULL }, /* 1326 */
- { 0, 0, NULL, NULL }, /* 1327 */
- { 0, 0, NULL, NULL }, /* 1328 */
- { 0, 0, NULL, NULL }, /* 1329 */
- { 0, 0, NULL, NULL }, /* 1330 */
- { 0, 0, NULL, NULL }, /* 1331 */
- { 0, 0, NULL, NULL }, /* 1332 */
- { 0, 0, NULL, NULL }, /* 1333 */
- { 0, 0, NULL, NULL }, /* 1334 */
- { 0, 0, NULL, NULL }, /* 1335 */
- { 0, 0, NULL, NULL }, /* 1336 */
- { 0, 0, NULL, NULL }, /* 1337 */
- { 0, 0, NULL, NULL }, /* 1338 */
- { 0, 0, NULL, NULL }, /* 1339 */
- { 0, 0, NULL, NULL }, /* 1340 */
- { 0, 0, NULL, NULL }, /* 1341 */
- { 0, 0, NULL, NULL }, /* 1342 */
- { 0, 0, NULL, NULL }, /* 1343 */
- { 0, 0, NULL, NULL }, /* 1344 */
- { 0, 0, NULL, NULL }, /* 1345 */
- { 0, 0, NULL, NULL }, /* 1346 */
- { 0, 0, NULL, NULL }, /* 1347 */
- { 0, 0, NULL, NULL }, /* 1348 */
- { 0, 0, NULL, NULL }, /* 1349 */
- { 0, 0, NULL, NULL }, /* 1350 */
- { 0, 0, NULL, NULL }, /* 1351 */
- { 0, 0, NULL, NULL }, /* 1352 */
- { 0, 0, NULL, NULL }, /* 1353 */
- { 0, 0, NULL, NULL }, /* 1354 */
- { 0, 0, NULL, NULL }, /* 1355 */
- { 0, 0, NULL, NULL }, /* 1356 */
- { 0, 0, NULL, NULL }, /* 1357 */
- { 0, 0, NULL, NULL }, /* 1358 */
- { 0, 0, NULL, NULL }, /* 1359 */
- { 0, 0, NULL, NULL }, /* 1360 */
- { 0, 0, NULL, NULL }, /* 1361 */
- { 0, 0, NULL, NULL }, /* 1362 */
- { 0, 0, NULL, NULL }, /* 1363 */
- { 0, 0, NULL, NULL }, /* 1364 */
- { 0, 0, NULL, NULL }, /* 1365 */
- { 0, 0, NULL, NULL }, /* 1366 */
- { 0, 0, NULL, NULL }, /* 1367 */
- { 0, 0, NULL, NULL }, /* 1368 */
- { 0, 0, NULL, NULL }, /* 1369 */
- { 0, 0, NULL, NULL }, /* 1370 */
- { 0, 0, NULL, NULL }, /* 1371 */
- { 0, 0, NULL, NULL }, /* 1372 */
- { 0, 0, NULL, NULL }, /* 1373 */
- { 0, 0, NULL, NULL }, /* 1374 */
- { 0, 0, NULL, NULL }, /* 1375 */
- { 0, 0, NULL, NULL }, /* 1376 */
- { 0, 0, NULL, NULL }, /* 1377 */
- { 0, 0, NULL, NULL }, /* 1378 */
- { 0, 0, NULL, NULL }, /* 1379 */
- { 0, 0, NULL, NULL }, /* 1380 */
- { 0, 0, NULL, NULL }, /* 1381 */
- { 0, 0, NULL, NULL }, /* 1382 */
- { 0, 0, NULL, NULL }, /* 1383 */
- { 0, 0, NULL, NULL }, /* 1384 */
- { 0, 0, NULL, NULL }, /* 1385 */
- { 0, 0, NULL, NULL }, /* 1386 */
- { 0, 0, NULL, NULL }, /* 1387 */
- { 0, 0, NULL, NULL }, /* 1388 */
- { 0, 0, NULL, NULL }, /* 1389 */
- { 0, 0, NULL, NULL }, /* 1390 */
- { 0, 0, NULL, NULL }, /* 1391 */
- { 0, 0, NULL, NULL }, /* 1392 */
- { 0, 0, NULL, NULL }, /* 1393 */
- { 0, 0, NULL, NULL }, /* 1394 */
- { 0, 0, NULL, NULL }, /* 1395 */
- { 0, 0, NULL, NULL }, /* 1396 */
- { 0, 0, NULL, NULL }, /* 1397 */
- { 0, 0, NULL, NULL }, /* 1398 */
- { 0, 0, NULL, NULL }, /* 1399 */
- { 0, 0, NULL, NULL }, /* 1400 */
- { 0, 0, NULL, NULL }, /* 1401 */
- { 0, 0, NULL, NULL }, /* 1402 */
- { 0, 0, NULL, NULL }, /* 1403 */
- { 0, 0, NULL, NULL }, /* 1404 */
- { 0, 0, NULL, NULL }, /* 1405 */
- { 0, 0, NULL, NULL }, /* 1406 */
- { 0, 0, NULL, NULL }, /* 1407 */
- { 0, 0, NULL, NULL }, /* 1408 */
- { 0, 0, NULL, NULL }, /* 1409 */
- { 0, 0, NULL, NULL }, /* 1410 */
- { 0, 0, NULL, NULL }, /* 1411 */
- { 0, 0, NULL, NULL }, /* 1412 */
- { 0, 0, NULL, NULL }, /* 1413 */
- { 0, 0, NULL, NULL }, /* 1414 */
- { 0, 0, NULL, NULL }, /* 1415 */
- { 0, 0, NULL, NULL }, /* 1416 */
- { 0, 0, NULL, NULL }, /* 1417 */
- { 0, 0, NULL, NULL }, /* 1418 */
- { 0, 0, NULL, NULL }, /* 1419 */
- { 0, 0, NULL, NULL }, /* 1420 */
- { 0, 0, NULL, NULL }, /* 1421 */
- { 0, 0, NULL, NULL }, /* 1422 */
- { 0, 0, NULL, NULL }, /* 1423 */
- { 0, 0, NULL, NULL }, /* 1424 */
- { 0, 0, NULL, NULL }, /* 1425 */
- { 0, 0, NULL, NULL }, /* 1426 */
- { 0, 0, NULL, NULL }, /* 1427 */
- { 0, 0, NULL, NULL }, /* 1428 */
- { 0, 0, NULL, NULL }, /* 1429 */
- { 0, 0, NULL, NULL }, /* 1430 */
- { 0, 0, NULL, NULL }, /* 1431 */
- { 0, 0, NULL, NULL }, /* 1432 */
- { 0, 0, NULL, NULL }, /* 1433 */
- { 0, 0, NULL, NULL }, /* 1434 */
- { 0, 0, NULL, NULL }, /* 1435 */
- { 0, 0, NULL, NULL }, /* 1436 */
- { 0, 0, NULL, NULL }, /* 1437 */
- { 0, 0, NULL, NULL }, /* 1438 */
- { 0, 0, NULL, NULL }, /* 1439 */
- { 0, 0, NULL, NULL }, /* 1440 */
- { 0, 0, NULL, NULL }, /* 1441 */
- { 0, 0, NULL, NULL }, /* 1442 */
- { 0, 0, NULL, NULL }, /* 1443 */
- { 0, 0, NULL, NULL }, /* 1444 */
- { 0, 0, NULL, NULL }, /* 1445 */
- { 0, 0, NULL, NULL }, /* 1446 */
- { 0, 0, NULL, NULL }, /* 1447 */
- { 0, 0, NULL, NULL }, /* 1448 */
- { 0, 0, NULL, NULL }, /* 1449 */
- { 0, 0, NULL, NULL }, /* 1450 */
- { 0, 0, NULL, NULL }, /* 1451 */
- { 0, 0, NULL, NULL }, /* 1452 */
- { 0, 0, NULL, NULL }, /* 1453 */
- { 0, 0, NULL, NULL }, /* 1454 */
- { 0, 0, NULL, NULL }, /* 1455 */
- { 0, 0, NULL, NULL }, /* 1456 */
- { 0, 0, NULL, NULL }, /* 1457 */
- { 0, 0, NULL, NULL }, /* 1458 */
- { 0, 0, NULL, NULL }, /* 1459 */
- { 0, 0, NULL, NULL }, /* 1460 */
- { 0, 0, NULL, NULL }, /* 1461 */
- { 0, 0, NULL, NULL }, /* 1462 */
- { 0, 0, NULL, NULL }, /* 1463 */
- { 0, 0, NULL, NULL }, /* 1464 */
- { 0, 0, NULL, NULL }, /* 1465 */
- { 0, 0, NULL, NULL }, /* 1466 */
- { 0, 0, NULL, NULL }, /* 1467 */
- { 0, 0, NULL, NULL }, /* 1468 */
- { 0, 0, NULL, NULL }, /* 1469 */
- { 0, 0, NULL, NULL }, /* 1470 */
- { 0, 0, NULL, NULL }, /* 1471 */
- { 0, 0, NULL, NULL }, /* 1472 */
- { 0, 0, NULL, NULL }, /* 1473 */
- { 0, 0, NULL, NULL }, /* 1474 */
- { 0, 0, NULL, NULL }, /* 1475 */
- { 0, 0, NULL, NULL }, /* 1476 */
- { 0, 0, NULL, NULL }, /* 1477 */
- { 0, 0, NULL, NULL }, /* 1478 */
- { 0, 0, NULL, NULL }, /* 1479 */
- { 0, 0, NULL, NULL }, /* 1480 */
- { 0, 0, NULL, NULL }, /* 1481 */
- { 0, 0, NULL, NULL }, /* 1482 */
- { 0, 0, NULL, NULL }, /* 1483 */
- { 0, 0, NULL, NULL }, /* 1484 */
- { 0, 0, NULL, NULL }, /* 1485 */
- { 0, 0, NULL, NULL }, /* 1486 */
- { 0, 0, NULL, NULL }, /* 1487 */
- { 0, 0, NULL, NULL }, /* 1488 */
- { 0, 0, NULL, NULL }, /* 1489 */
- { 0, 0, NULL, NULL }, /* 1490 */
- { 0, 0, NULL, NULL }, /* 1491 */
- { 0, 0, NULL, NULL }, /* 1492 */
- { 0, 0, NULL, NULL }, /* 1493 */
- { 0, 0, NULL, NULL }, /* 1494 */
- { 0, 0, NULL, NULL }, /* 1495 */
- { 0, 0, NULL, NULL }, /* 1496 */
- { 0, 0, NULL, NULL }, /* 1497 */
- { 0, 0, NULL, NULL }, /* 1498 */
- { 0, 0, NULL, NULL }, /* 1499 */
- { 0, 0, NULL, NULL }, /* 1500 */
- { 0, 0, NULL, NULL }, /* 1501 */
- { 0, 0, NULL, NULL }, /* 1502 */
- { 0, 0, NULL, NULL }, /* 1503 */
- { 0, 0, NULL, NULL }, /* 1504 */
- { 0, 0, NULL, NULL }, /* 1505 */
- { 0, 0, NULL, NULL }, /* 1506 */
- { 0, 0, NULL, NULL }, /* 1507 */
- { 0, 0, NULL, NULL }, /* 1508 */
- { 0, 0, NULL, NULL }, /* 1509 */
- { 0, 0, NULL, NULL }, /* 1510 */
- { 0, 0, NULL, NULL }, /* 1511 */
- { 0, 0, NULL, NULL }, /* 1512 */
- { 0, 0, NULL, NULL }, /* 1513 */
- { 0, 0, NULL, NULL }, /* 1514 */
- { 0, 0, NULL, NULL }, /* 1515 */
- { 0, 0, NULL, NULL }, /* 1516 */
- { 0, 0, NULL, NULL }, /* 1517 */
- { 0, 0, NULL, NULL }, /* 1518 */
- { 0, 0, NULL, NULL }, /* 1519 */
- { 0, 0, NULL, NULL }, /* 1520 */
- { 0, 0, NULL, NULL }, /* 1521 */
- { 0, 0, NULL, NULL }, /* 1522 */
- { 0, 0, NULL, NULL }, /* 1523 */
- { 0, 0, NULL, NULL }, /* 1524 */
- { 0, 0, NULL, NULL }, /* 1525 */
- { 0, 0, NULL, NULL }, /* 1526 */
- { 0, 0, NULL, NULL }, /* 1527 */
- { 0, 0, NULL, NULL }, /* 1528 */
- { 0, 0, NULL, NULL }, /* 1529 */
- { 0, 0, NULL, NULL }, /* 1530 */
- { 0, 0, NULL, NULL }, /* 1531 */
- { 0, 0, NULL, NULL }, /* 1532 */
- { 0, 0, NULL, NULL }, /* 1533 */
- { 0, 0, NULL, NULL }, /* 1534 */
- { 0, 0, NULL, NULL }, /* 1535 */
- { 0, 0, NULL, NULL }, /* 1536 */
- { 0, 0, NULL, NULL }, /* 1537 */
- { 0, 0, NULL, NULL }, /* 1538 */
- { 0, 0, NULL, NULL }, /* 1539 */
- { 0, 0, NULL, NULL }, /* 1540 */
- { 0, 0, NULL, NULL }, /* 1541 */
- { 0, 0, NULL, NULL }, /* 1542 */
- { 0, 0, NULL, NULL }, /* 1543 */
- { 0, 0, NULL, NULL }, /* 1544 */
- { 0, 0, NULL, NULL }, /* 1545 */
- { 0, 0, NULL, NULL }, /* 1546 */
- { 0, 0, NULL, NULL }, /* 1547 */
- { 0, 0, NULL, NULL }, /* 1548 */
- { 0, 0, NULL, NULL }, /* 1549 */
- { 0, 0, NULL, NULL }, /* 1550 */
- { 0, 0, NULL, NULL }, /* 1551 */
- { 0, 0, NULL, NULL }, /* 1552 */
- { 0, 0, NULL, NULL }, /* 1553 */
- { 0, 0, NULL, NULL }, /* 1554 */
- { 0, 0, NULL, NULL }, /* 1555 */
- { 0, 0, NULL, NULL }, /* 1556 */
- { 0, 0, NULL, NULL }, /* 1557 */
- { 0, 0, NULL, NULL }, /* 1558 */
- { 0, 0, NULL, NULL }, /* 1559 */
- { 0, 0, NULL, NULL }, /* 1560 */
- { 0, 0, NULL, NULL }, /* 1561 */
- { 0, 0, NULL, NULL }, /* 1562 */
- { 0, 0, NULL, NULL }, /* 1563 */
- { 0, 0, NULL, NULL }, /* 1564 */
- { 0, 0, NULL, NULL }, /* 1565 */
- { 0, 0, NULL, NULL }, /* 1566 */
- { 0, 0, NULL, NULL }, /* 1567 */
- { 0, 0, NULL, NULL }, /* 1568 */
- { 0, 0, NULL, NULL }, /* 1569 */
- { 0, 0, NULL, NULL }, /* 1570 */
- { 0, 0, NULL, NULL }, /* 1571 */
- { 0, 0, NULL, NULL }, /* 1572 */
- { 0, 0, NULL, NULL }, /* 1573 */
- { 0, 0, NULL, NULL }, /* 1574 */
- { 0, 0, NULL, NULL }, /* 1575 */
- { 0, 0, NULL, NULL }, /* 1576 */
- { 0, 0, NULL, NULL }, /* 1577 */
- { 0, 0, NULL, NULL }, /* 1578 */
- { 0, 0, NULL, NULL }, /* 1579 */
- { 0, 0, NULL, NULL }, /* 1580 */
- { 0, 0, NULL, NULL }, /* 1581 */
- { 0, 0, NULL, NULL }, /* 1582 */
- { 0, 0, NULL, NULL }, /* 1583 */
- { 0, 0, NULL, NULL }, /* 1584 */
- { 0, 0, NULL, NULL }, /* 1585 */
- { 0, 0, NULL, NULL }, /* 1586 */
- { 0, 0, NULL, NULL }, /* 1587 */
- { 0, 0, NULL, NULL }, /* 1588 */
- { 0, 0, NULL, NULL }, /* 1589 */
- { 0, 0, NULL, NULL }, /* 1590 */
- { 0, 0, NULL, NULL }, /* 1591 */
- { 0, 0, NULL, NULL }, /* 1592 */
- { 0, 0, NULL, NULL }, /* 1593 */
- { 0, 0, NULL, NULL }, /* 1594 */
- { 0, 0, NULL, NULL }, /* 1595 */
- { 0, 0, NULL, NULL }, /* 1596 */
- { 0, 0, NULL, NULL }, /* 1597 */
- { 0, 0, NULL, NULL }, /* 1598 */
- { 0, 0, NULL, NULL }, /* 1599 */
- { 0, 0, NULL, NULL }, /* 1600 */
- { 0, 0, NULL, NULL }, /* 1601 */
- { 0, 0, NULL, NULL }, /* 1602 */
- { 0, 0, NULL, NULL }, /* 1603 */
- { 0, 0, NULL, NULL }, /* 1604 */
- { 0, 0, NULL, NULL }, /* 1605 */
- { 0, 0, NULL, NULL }, /* 1606 */
- { 0, 0, NULL, NULL }, /* 1607 */
- { 0, 0, NULL, NULL }, /* 1608 */
- { 0, 0, NULL, NULL }, /* 1609 */
- { 0, 0, NULL, NULL }, /* 1610 */
- { 0, 0, NULL, NULL }, /* 1611 */
- { 0, 0, NULL, NULL }, /* 1612 */
- { 0, 0, NULL, NULL }, /* 1613 */
- { 0, 0, NULL, NULL }, /* 1614 */
- { 0, 0, NULL, NULL }, /* 1615 */
- { 0, 0, NULL, NULL }, /* 1616 */
- { 0, 0, NULL, NULL }, /* 1617 */
- { 0, 0, NULL, NULL }, /* 1618 */
- { 0, 0, NULL, NULL }, /* 1619 */
- { 0, 0, NULL, NULL }, /* 1620 */
- { 0, 0, NULL, NULL }, /* 1621 */
- { 0, 0, NULL, NULL }, /* 1622 */
- { 0, 0, NULL, NULL }, /* 1623 */
- { 0, 0, NULL, NULL }, /* 1624 */
- { 0, 0, NULL, NULL }, /* 1625 */
- { 0, 0, NULL, NULL }, /* 1626 */
- { 0, 0, NULL, NULL }, /* 1627 */
- { 0, 0, NULL, NULL }, /* 1628 */
- { 0, 0, NULL, NULL }, /* 1629 */
- { 0, 0, NULL, NULL }, /* 1630 */
- { 0, 0, NULL, NULL }, /* 1631 */
- { 0, 0, NULL, NULL }, /* 1632 */
- { 0, 0, NULL, NULL }, /* 1633 */
- { 0, 0, NULL, NULL }, /* 1634 */
- { 0, 0, NULL, NULL }, /* 1635 */
- { 0, 0, NULL, NULL }, /* 1636 */
- { 0, 0, NULL, NULL }, /* 1637 */
- { 0, 0, NULL, NULL }, /* 1638 */
- { 0, 0, NULL, NULL }, /* 1639 */
- { 0, 0, NULL, NULL }, /* 1640 */
- { 0, 0, NULL, NULL }, /* 1641 */
- { 0, 0, NULL, NULL }, /* 1642 */
- { 0, 0, NULL, NULL }, /* 1643 */
- { 0, 0, NULL, NULL }, /* 1644 */
- { 0, 0, NULL, NULL }, /* 1645 */
- { 0, 0, NULL, NULL }, /* 1646 */
- { 0, 0, NULL, NULL }, /* 1647 */
- { 0, 0, NULL, NULL }, /* 1648 */
- { 0, 0, NULL, NULL }, /* 1649 */
- { 0, 0, NULL, NULL }, /* 1650 */
- { 0, 0, NULL, NULL }, /* 1651 */
- { 0, 0, NULL, NULL }, /* 1652 */
- { 0, 0, NULL, NULL }, /* 1653 */
- { 0, 0, NULL, NULL }, /* 1654 */
- { 0, 0, NULL, NULL }, /* 1655 */
- { 0, 0, NULL, NULL }, /* 1656 */
- { 0, 0, NULL, NULL }, /* 1657 */
- { 0, 0, NULL, NULL }, /* 1658 */
- { 0, 0, NULL, NULL }, /* 1659 */
- { 0, 0, NULL, NULL }, /* 1660 */
- { 0, 0, NULL, NULL }, /* 1661 */
- { 0, 0, NULL, NULL }, /* 1662 */
- { 0, 0, NULL, NULL }, /* 1663 */
- { 0, 0, NULL, NULL }, /* 1664 */
- { 0, 0, NULL, NULL }, /* 1665 */
- { 0, 0, NULL, NULL }, /* 1666 */
- { 0, 0, NULL, NULL }, /* 1667 */
- { 0, 0, NULL, NULL }, /* 1668 */
- { 0, 0, NULL, NULL }, /* 1669 */
- { 0, 0, NULL, NULL }, /* 1670 */
- { 0, 0, NULL, NULL }, /* 1671 */
- { 0, 0, NULL, NULL }, /* 1672 */
- { 0, 0, NULL, NULL }, /* 1673 */
- { 0, 0, NULL, NULL }, /* 1674 */
- { 0, 0, NULL, NULL }, /* 1675 */
- { 0, 0, NULL, NULL }, /* 1676 */
- { 0, 0, NULL, NULL }, /* 1677 */
- { 0, 0, NULL, NULL }, /* 1678 */
- { 0, 0, NULL, NULL }, /* 1679 */
- { 0, 0, NULL, NULL }, /* 1680 */
- { 0, 0, NULL, NULL }, /* 1681 */
- { 0, 0, NULL, NULL }, /* 1682 */
- { 0, 0, NULL, NULL }, /* 1683 */
- { 0, 0, NULL, NULL }, /* 1684 */
- { 0, 0, NULL, NULL }, /* 1685 */
- { 0, 0, NULL, NULL }, /* 1686 */
- { 0, 0, NULL, NULL }, /* 1687 */
- { 0, 0, NULL, NULL }, /* 1688 */
- { 0, 0, NULL, NULL }, /* 1689 */
- { 0, 0, NULL, NULL }, /* 1690 */
- { 0, 0, NULL, NULL }, /* 1691 */
- { 0, 0, NULL, NULL }, /* 1692 */
- { 0, 0, NULL, NULL }, /* 1693 */
- { 0, 0, NULL, NULL }, /* 1694 */
- { 0, 0, NULL, NULL }, /* 1695 */
- { 0, 0, NULL, NULL }, /* 1696 */
- { 0, 0, NULL, NULL }, /* 1697 */
- { 0, 0, NULL, NULL }, /* 1698 */
- { 0, 0, NULL, NULL }, /* 1699 */
- { 0, 0, NULL, NULL }, /* 1700 */
- { 0, 0, NULL, NULL }, /* 1701 */
- { 0, 0, NULL, NULL }, /* 1702 */
- { 0, 0, NULL, NULL }, /* 1703 */
- { 0, 0, NULL, NULL }, /* 1704 */
- { 0, 0, NULL, NULL }, /* 1705 */
- { 0, 0, NULL, NULL }, /* 1706 */
- { 0, 0, NULL, NULL }, /* 1707 */
- { 0, 0, NULL, NULL }, /* 1708 */
- { 0, 0, NULL, NULL }, /* 1709 */
- { 0, 0, NULL, NULL }, /* 1710 */
- { 0, 0, NULL, NULL }, /* 1711 */
- { 0, 0, NULL, NULL }, /* 1712 */
- { 0, 0, NULL, NULL }, /* 1713 */
- { 0, 0, NULL, NULL }, /* 1714 */
- { 0, 0, NULL, NULL }, /* 1715 */
- { 0, 0, NULL, NULL }, /* 1716 */
- { 0, 0, NULL, NULL }, /* 1717 */
- { 0, 0, NULL, NULL }, /* 1718 */
- { 0, 0, NULL, NULL }, /* 1719 */
- { 0, 0, NULL, NULL }, /* 1720 */
- { 0, 0, NULL, NULL }, /* 1721 */
- { 0, 0, NULL, NULL }, /* 1722 */
- { 0, 0, NULL, NULL }, /* 1723 */
- { 0, 0, NULL, NULL }, /* 1724 */
- { 0, 0, NULL, NULL }, /* 1725 */
- { 0, 0, NULL, NULL }, /* 1726 */
- { 0, 0, NULL, NULL }, /* 1727 */
- { 0, 0, NULL, NULL }, /* 1728 */
- { 0, 0, NULL, NULL }, /* 1729 */
- { 0, 0, NULL, NULL }, /* 1730 */
- { 0, 0, NULL, NULL }, /* 1731 */
- { 0, 0, NULL, NULL }, /* 1732 */
- { 0, 0, NULL, NULL }, /* 1733 */
- { 0, 0, NULL, NULL }, /* 1734 */
- { 0, 0, NULL, NULL }, /* 1735 */
- { 0, 0, NULL, NULL }, /* 1736 */
- { 0, 0, NULL, NULL }, /* 1737 */
- { 0, 0, NULL, NULL }, /* 1738 */
- { 0, 0, NULL, NULL }, /* 1739 */
- { 0, 0, NULL, NULL }, /* 1740 */
- { 0, 0, NULL, NULL }, /* 1741 */
- { 0, 0, NULL, NULL }, /* 1742 */
- { 0, 0, NULL, NULL }, /* 1743 */
- { 0, 0, NULL, NULL }, /* 1744 */
- { 0, 0, NULL, NULL }, /* 1745 */
- { 0, 0, NULL, NULL }, /* 1746 */
- { 0, 0, NULL, NULL }, /* 1747 */
- { 0, 0, NULL, NULL }, /* 1748 */
- { 0, 0, NULL, NULL }, /* 1749 */
- { 0, 0, NULL, NULL }, /* 1750 */
- { 0, 0, NULL, NULL }, /* 1751 */
- { 0, 0, NULL, NULL }, /* 1752 */
- { 0, 0, NULL, NULL }, /* 1753 */
- { 0, 0, NULL, NULL }, /* 1754 */
- { 0, 0, NULL, NULL }, /* 1755 */
- { 0, 0, NULL, NULL }, /* 1756 */
- { 0, 0, NULL, NULL }, /* 1757 */
- { 0, 0, NULL, NULL }, /* 1758 */
- { 0, 0, NULL, NULL }, /* 1759 */
- { 0, 0, NULL, NULL }, /* 1760 */
- { 0, 0, NULL, NULL }, /* 1761 */
- { 0, 0, NULL, NULL }, /* 1762 */
- { 0, 0, NULL, NULL }, /* 1763 */
- { 0, 0, NULL, NULL }, /* 1764 */
- { 0, 0, NULL, NULL }, /* 1765 */
- { 0, 0, NULL, NULL }, /* 1766 */
- { 0, 0, NULL, NULL }, /* 1767 */
- { 0, 0, NULL, NULL }, /* 1768 */
- { 0, 0, NULL, NULL }, /* 1769 */
- { 0, 0, NULL, NULL }, /* 1770 */
- { 0, 0, NULL, NULL }, /* 1771 */
- { 0, 0, NULL, NULL }, /* 1772 */
- { 0, 0, NULL, NULL }, /* 1773 */
- { 0, 0, NULL, NULL }, /* 1774 */
- { 0, 0, NULL, NULL }, /* 1775 */
- { 0, 0, NULL, NULL }, /* 1776 */
- { 0, 0, NULL, NULL }, /* 1777 */
- { 0, 0, NULL, NULL }, /* 1778 */
- { 0, 0, NULL, NULL }, /* 1779 */
- { 0, 0, NULL, NULL }, /* 1780 */
- { 0, 0, NULL, NULL }, /* 1781 */
- { 0, 0, NULL, NULL }, /* 1782 */
- { 0, 0, NULL, NULL }, /* 1783 */
- { 0, 0, NULL, NULL }, /* 1784 */
- { 0, 0, NULL, NULL }, /* 1785 */
- { 0, 0, NULL, NULL }, /* 1786 */
- { 0, 0, NULL, NULL }, /* 1787 */
- { 0, 0, NULL, NULL }, /* 1788 */
- { 0, 0, NULL, NULL }, /* 1789 */
- { 0, 0, NULL, NULL }, /* 1790 */
- { 0, 0, NULL, NULL }, /* 1791 */
- { 0, 0, NULL, NULL }, /* 1792 */
- { 0, 0, NULL, NULL }, /* 1793 */
- { 0, 0, NULL, NULL }, /* 1794 */
- { 0, 0, NULL, NULL }, /* 1795 */
- { 0, 0, NULL, NULL }, /* 1796 */
- { 0, 0, NULL, NULL }, /* 1797 */
- { 0, 0, NULL, NULL }, /* 1798 */
- { 0, 0, NULL, NULL }, /* 1799 */
- { 0, 0, NULL, NULL }, /* 1800 */
- { 0, 0, NULL, NULL }, /* 1801 */
- { 0, 0, NULL, NULL }, /* 1802 */
- { 0, 0, NULL, NULL }, /* 1803 */
- { 0, 0, NULL, NULL }, /* 1804 */
- { 0, 0, NULL, NULL }, /* 1805 */
- { 0, 0, NULL, NULL }, /* 1806 */
- { 0, 0, NULL, NULL }, /* 1807 */
- { 0, 0, NULL, NULL }, /* 1808 */
- { 0, 0, NULL, NULL }, /* 1809 */
- { 0, 0, NULL, NULL }, /* 1810 */
- { 0, 0, NULL, NULL }, /* 1811 */
- { 0, 0, NULL, NULL }, /* 1812 */
- { 0, 0, NULL, NULL }, /* 1813 */
- { 0, 0, NULL, NULL }, /* 1814 */
- { 0, 0, NULL, NULL }, /* 1815 */
- { 0, 0, NULL, NULL }, /* 1816 */
- { 0, 0, NULL, NULL }, /* 1817 */
- { 0, 0, NULL, NULL }, /* 1818 */
- { 0, 0, NULL, NULL }, /* 1819 */
- { 0, 0, NULL, NULL }, /* 1820 */
- { 0, 0, NULL, NULL }, /* 1821 */
- { 0, 0, NULL, NULL }, /* 1822 */
- { 0, 0, NULL, NULL }, /* 1823 */
- { 0, 0, NULL, NULL }, /* 1824 */
- { 0, 0, NULL, NULL }, /* 1825 */
- { 0, 0, NULL, NULL }, /* 1826 */
- { 0, 0, NULL, NULL }, /* 1827 */
- { 0, 0, NULL, NULL }, /* 1828 */
- { 0, 0, NULL, NULL }, /* 1829 */
- { 0, 0, NULL, NULL }, /* 1830 */
- { 0, 0, NULL, NULL }, /* 1831 */
- { 0, 0, NULL, NULL }, /* 1832 */
- { 0, 0, NULL, NULL }, /* 1833 */
- { 0, 0, NULL, NULL }, /* 1834 */
- { 0, 0, NULL, NULL }, /* 1835 */
- { 0, 0, NULL, NULL }, /* 1836 */
- { 0, 0, NULL, NULL }, /* 1837 */
- { 0, 0, NULL, NULL }, /* 1838 */
- { 0, 0, NULL, NULL }, /* 1839 */
- { 0, 0, NULL, NULL }, /* 1840 */
- { 0, 0, NULL, NULL }, /* 1841 */
- { 0, 0, NULL, NULL }, /* 1842 */
- { 0, 0, NULL, NULL }, /* 1843 */
- { 0, 0, NULL, NULL }, /* 1844 */
- { 0, 0, NULL, NULL }, /* 1845 */
- { 0, 0, NULL, NULL }, /* 1846 */
- { 0, 0, NULL, NULL }, /* 1847 */
- { 0, 0, NULL, NULL }, /* 1848 */
- { 0, 0, NULL, NULL }, /* 1849 */
- { 0, 0, NULL, NULL }, /* 1850 */
- { 0, 0, NULL, NULL }, /* 1851 */
- { 0, 0, NULL, NULL }, /* 1852 */
- { 0, 0, NULL, NULL }, /* 1853 */
- { 0, 0, NULL, NULL }, /* 1854 */
- { 0, 0, NULL, NULL }, /* 1855 */
- { 0, 0, NULL, NULL }, /* 1856 */
- { 0, 0, NULL, NULL }, /* 1857 */
- { 0, 0, NULL, NULL }, /* 1858 */
- { 0, 0, NULL, NULL }, /* 1859 */
- { 0, 0, NULL, NULL }, /* 1860 */
- { 0, 0, NULL, NULL }, /* 1861 */
- { 0, 0, NULL, NULL }, /* 1862 */
- { 0, 0, NULL, NULL }, /* 1863 */
- { 0, 0, NULL, NULL }, /* 1864 */
- { 0, 0, NULL, NULL }, /* 1865 */
- { 0, 0, NULL, NULL }, /* 1866 */
- { 0, 0, NULL, NULL }, /* 1867 */
- { 0, 0, NULL, NULL }, /* 1868 */
- { 0, 0, NULL, NULL }, /* 1869 */
- { 0, 0, NULL, NULL }, /* 1870 */
- { 0, 0, NULL, NULL }, /* 1871 */
- { 0, 0, NULL, NULL }, /* 1872 */
- { 0, 0, NULL, NULL }, /* 1873 */
- { 0, 0, NULL, NULL }, /* 1874 */
- { 0, 0, NULL, NULL }, /* 1875 */
- { 0, 0, NULL, NULL }, /* 1876 */
- { 0, 0, NULL, NULL }, /* 1877 */
- { 0, 0, NULL, NULL }, /* 1878 */
- { 0, 0, NULL, NULL }, /* 1879 */
- { 0, 0, NULL, NULL }, /* 1880 */
- { 0, 0, NULL, NULL }, /* 1881 */
- { 0, 0, NULL, NULL }, /* 1882 */
- { 0, 0, NULL, NULL }, /* 1883 */
- { 0, 0, NULL, NULL }, /* 1884 */
- { 0, 0, NULL, NULL }, /* 1885 */
- { 0, 0, NULL, NULL }, /* 1886 */
- { 0, 0, NULL, NULL }, /* 1887 */
- { 0, 0, NULL, NULL }, /* 1888 */
- { 0, 0, NULL, NULL }, /* 1889 */
- { 0, 0, NULL, NULL }, /* 1890 */
- { 0, 0, NULL, NULL }, /* 1891 */
- { 0, 0, NULL, NULL }, /* 1892 */
- { 0, 0, NULL, NULL }, /* 1893 */
- { 0, 0, NULL, NULL }, /* 1894 */
- { 0, 0, NULL, NULL }, /* 1895 */
- { 0, 0, NULL, NULL }, /* 1896 */
- { 0, 0, NULL, NULL }, /* 1897 */
- { 0, 0, NULL, NULL }, /* 1898 */
- { 0, 0, NULL, NULL }, /* 1899 */
- { 0, 0, NULL, NULL }, /* 1900 */
- { 0, 0, NULL, NULL }, /* 1901 */
- { 0, 0, NULL, NULL }, /* 1902 */
- { 0, 0, NULL, NULL }, /* 1903 */
- { 0, 0, NULL, NULL }, /* 1904 */
- { 0, 0, NULL, NULL }, /* 1905 */
- { 0, 0, NULL, NULL }, /* 1906 */
- { 0, 0, NULL, NULL }, /* 1907 */
- { 0, 0, NULL, NULL }, /* 1908 */
- { 0, 0, NULL, NULL }, /* 1909 */
- { 0, 0, NULL, NULL }, /* 1910 */
- { 0, 0, NULL, NULL }, /* 1911 */
- { 0, 0, NULL, NULL }, /* 1912 */
- { 0, 0, NULL, NULL }, /* 1913 */
- { 0, 0, NULL, NULL }, /* 1914 */
- { 0, 0, NULL, NULL }, /* 1915 */
- { 0, 0, NULL, NULL }, /* 1916 */
- { 0, 0, NULL, NULL }, /* 1917 */
- { 0, 0, NULL, NULL }, /* 1918 */
- { 0, 0, NULL, NULL }, /* 1919 */
- { 0, 0, NULL, NULL }, /* 1920 */
- { 0, 0, NULL, NULL }, /* 1921 */
- { 0, 0, NULL, NULL }, /* 1922 */
- { 0, 0, NULL, NULL }, /* 1923 */
- { 0, 0, NULL, NULL }, /* 1924 */
- { 0, 0, NULL, NULL }, /* 1925 */
- { 0, 0, NULL, NULL }, /* 1926 */
- { 0, 0, NULL, NULL }, /* 1927 */
- { 0, 0, NULL, NULL }, /* 1928 */
- { 0, 0, NULL, NULL }, /* 1929 */
- { 0, 0, NULL, NULL }, /* 1930 */
- { 0, 0, NULL, NULL }, /* 1931 */
- { 0, 0, NULL, NULL }, /* 1932 */
- { 0, 0, NULL, NULL }, /* 1933 */
- { 0, 0, NULL, NULL }, /* 1934 */
- { 0, 0, NULL, NULL }, /* 1935 */
- { 0, 0, NULL, NULL }, /* 1936 */
- { 0, 0, NULL, NULL }, /* 1937 */
- { 0, 0, NULL, NULL }, /* 1938 */
- { 0, 0, NULL, NULL }, /* 1939 */
- { 0, 0, NULL, NULL }, /* 1940 */
- { 0, 0, NULL, NULL }, /* 1941 */
- { 0, 0, NULL, NULL }, /* 1942 */
- { 0, 0, NULL, NULL }, /* 1943 */
- { 0, 0, NULL, NULL }, /* 1944 */
- { 0, 0, NULL, NULL }, /* 1945 */
- { 0, 0, NULL, NULL }, /* 1946 */
- { 0, 0, NULL, NULL }, /* 1947 */
- { 0, 0, NULL, NULL }, /* 1948 */
- { 0, 0, NULL, NULL }, /* 1949 */
- { 0, 0, NULL, NULL }, /* 1950 */
- { 0, 0, NULL, NULL }, /* 1951 */
- { 0, 0, NULL, NULL }, /* 1952 */
- { 0, 0, NULL, NULL }, /* 1953 */
- { 0, 0, NULL, NULL }, /* 1954 */
- { 0, 0, NULL, NULL }, /* 1955 */
- { 0, 0, NULL, NULL }, /* 1956 */
- { 0, 0, NULL, NULL }, /* 1957 */
- { 0, 0, NULL, NULL }, /* 1958 */
- { 0, 0, NULL, NULL }, /* 1959 */
- { 0, 0, NULL, NULL }, /* 1960 */
- { 0, 0, NULL, NULL }, /* 1961 */
- { 0, 0, NULL, NULL }, /* 1962 */
- { 0, 0, NULL, NULL }, /* 1963 */
- { 0, 0, NULL, NULL }, /* 1964 */
- { 0, 0, NULL, NULL }, /* 1965 */
- { 0, 0, NULL, NULL }, /* 1966 */
- { 0, 0, NULL, NULL }, /* 1967 */
- { 0, 0, NULL, NULL }, /* 1968 */
- { 0, 0, NULL, NULL }, /* 1969 */
- { 0, 0, NULL, NULL }, /* 1970 */
- { 0, 0, NULL, NULL }, /* 1971 */
- { 0, 0, NULL, NULL }, /* 1972 */
- { 0, 0, NULL, NULL }, /* 1973 */
- { 0, 0, NULL, NULL }, /* 1974 */
- { 0, 0, NULL, NULL }, /* 1975 */
- { 0, 0, NULL, NULL }, /* 1976 */
- { 0, 0, NULL, NULL }, /* 1977 */
- { 0, 0, NULL, NULL }, /* 1978 */
- { 0, 0, NULL, NULL }, /* 1979 */
- { 0, 0, NULL, NULL }, /* 1980 */
- { 0, 0, NULL, NULL }, /* 1981 */
- { 0, 0, NULL, NULL }, /* 1982 */
- { 0, 0, NULL, NULL }, /* 1983 */
- { 0, 0, NULL, NULL }, /* 1984 */
- { 0, 0, NULL, NULL }, /* 1985 */
- { 0, 0, NULL, NULL }, /* 1986 */
- { 0, 0, NULL, NULL }, /* 1987 */
- { 0, 0, NULL, NULL }, /* 1988 */
- { 0, 0, NULL, NULL }, /* 1989 */
- { 0, 0, NULL, NULL }, /* 1990 */
- { 0, 0, NULL, NULL }, /* 1991 */
- { 0, 0, NULL, NULL }, /* 1992 */
- { 0, 0, NULL, NULL }, /* 1993 */
- { 0, 0, NULL, NULL }, /* 1994 */
- { 0, 0, NULL, NULL }, /* 1995 */
- { 0, 0, NULL, NULL }, /* 1996 */
- { 0, 0, NULL, NULL }, /* 1997 */
- { 0, 0, NULL, NULL }, /* 1998 */
- { 0, 0, NULL, NULL }, /* 1999 */ /* end of SYSV */
- { 0, 0, printargs, "bsd43_syscall" }, /* 2000 */ /* start of BSD 4.3 */
- { 0, 0, printargs, "bsd43_exit" }, /* 2001 */
- { 0, 0, printargs, "bsd43_fork" }, /* 2002 */
- { 0, 0, printargs, "bsd43_read" }, /* 2003 */
- { 0, 0, printargs, "bsd43_write" }, /* 2004 */
- { 0, 0, printargs, "bsd43_open" }, /* 2005 */
- { 0, 0, printargs, "bsd43_close" }, /* 2006 */
- { 0, 0, printargs, "bsd43_wait" }, /* 2007 */
- { 0, 0, printargs, "bsd43_creat" }, /* 2008 */
- { 0, 0, printargs, "bsd43_link" }, /* 2009 */
- { 0, 0, printargs, "bsd43_unlink" }, /* 2010 */
- { 0, 0, printargs, "bsd43_exec" }, /* 2011 */
- { 0, 0, printargs, "bsd43_chdir" }, /* 2012 */
- { 0, 0, printargs, "bsd43_time" }, /* 2013 */
- { 0, 0, printargs, "bsd43_mknod" }, /* 2014 */
- { 0, 0, printargs, "bsd43_chmod" }, /* 2015 */
- { 0, 0, printargs, "bsd43_chown" }, /* 2016 */
- { 0, 0, printargs, "bsd43_sbreak" }, /* 2017 */
- { 0, 0, printargs, "bsd43_oldstat" }, /* 2018 */
- { 0, 0, printargs, "bsd43_lseek" }, /* 2019 */
- { 0, 0, printargs, "bsd43_getpid" }, /* 2020 */
- { 0, 0, printargs, "bsd43_oldmount" }, /* 2021 */
- { 0, 0, printargs, "bsd43_umount" }, /* 2022 */
- { 0, 0, printargs, "bsd43_setuid" }, /* 2023 */
- { 0, 0, printargs, "bsd43_getuid" }, /* 2024 */
- { 0, 0, printargs, "bsd43_stime" }, /* 2025 */
- { 0, 0, printargs, "bsd43_ptrace" }, /* 2026 */
- { 0, 0, printargs, "bsd43_alarm" }, /* 2027 */
- { 0, 0, printargs, "bsd43_oldfstat" }, /* 2028 */
- { 0, 0, printargs, "bsd43_pause" }, /* 2029 */
- { 0, 0, printargs, "bsd43_utime" }, /* 2030 */
- { 0, 0, printargs, "bsd43_stty" }, /* 2031 */
- { 0, 0, printargs, "bsd43_gtty" }, /* 2032 */
- { 0, 0, printargs, "bsd43_access" }, /* 2033 */
- { 0, 0, printargs, "bsd43_nice" }, /* 2034 */
- { 0, 0, printargs, "bsd43_ftime" }, /* 2035 */
- { 0, 0, printargs, "bsd43_sync" }, /* 2036 */
- { 0, 0, printargs, "bsd43_kill" }, /* 2037 */
- { 0, 0, printargs, "bsd43_stat" }, /* 2038 */
- { 0, 0, printargs, "bsd43_oldsetpgrp" }, /* 2039 */
- { 0, 0, printargs, "bsd43_lstat" }, /* 2040 */
- { 0, 0, printargs, "bsd43_dup" }, /* 2041 */
- { 0, 0, printargs, "bsd43_pipe" }, /* 2042 */
- { 0, 0, printargs, "bsd43_times" }, /* 2043 */
- { 0, 0, printargs, "bsd43_profil" }, /* 2044 */
- { 0, 0, printargs, "bsd43_msgsys" }, /* 2045 */
- { 0, 0, printargs, "bsd43_setgid" }, /* 2046 */
- { 0, 0, printargs, "bsd43_getgid" }, /* 2047 */
- { 0, 0, printargs, "bsd43_ssig" }, /* 2048 */
- { 0, 0, NULL, NULL }, /* 2049 */
- { 0, 0, NULL, NULL }, /* 2050 */
- { 0, 0, printargs, "bsd43_sysacct" }, /* 2051 */
- { 0, 0, printargs, "bsd43_phys" }, /* 2052 */
- { 0, 0, printargs, "bsd43_lock" }, /* 2053 */
- { 0, 0, printargs, "bsd43_ioctl" }, /* 2054 */
- { 0, 0, printargs, "bsd43_reboot" }, /* 2055 */
- { 0, 0, printargs, "bsd43_mpxchan" }, /* 2056 */
- { 0, 0, printargs, "bsd43_symlink" }, /* 2057 */
- { 0, 0, printargs, "bsd43_readlink" }, /* 2058 */
- { 0, 0, printargs, "bsd43_execve" }, /* 2059 */
- { 0, 0, printargs, "bsd43_umask" }, /* 2060 */
- { 0, 0, printargs, "bsd43_chroot" }, /* 2061 */
- { 0, 0, printargs, "bsd43_fstat" }, /* 2062 */
- { 0, 0, NULL, NULL }, /* 2063 */
- { 0, 0, printargs, "bsd43_getpagesize" }, /* 2064 */
- { 0, 0, printargs, "bsd43_mremap" }, /* 2065 */
- { 0, 0, printargs, "bsd43_vfork" }, /* 2066 */
- { 0, 0, printargs, "bsd43_vread" }, /* 2067 */
- { 0, 0, printargs, "bsd43_vwrite" }, /* 2068 */
- { 0, 0, printargs, "bsd43_sbrk" }, /* 2069 */
- { 0, 0, printargs, "bsd43_sstk" }, /* 2070 */
- { 0, 0, printargs, "bsd43_mmap" }, /* 2071 */
- { 0, 0, printargs, "bsd43_vadvise" }, /* 2072 */
- { 0, 0, printargs, "bsd43_munmap" }, /* 2073 */
- { 0, 0, printargs, "bsd43_mprotect" }, /* 2074 */
- { 0, 0, printargs, "bsd43_madvise" }, /* 2075 */
- { 0, 0, printargs, "bsd43_vhangup" }, /* 2076 */
- { 0, 0, printargs, "bsd43_vlimit" }, /* 2077 */
- { 0, 0, printargs, "bsd43_mincore" }, /* 2078 */
- { 0, 0, printargs, "bsd43_getgroups" }, /* 2079 */
- { 0, 0, printargs, "bsd43_setgroups" }, /* 2080 */
- { 0, 0, printargs, "bsd43_getpgrp" }, /* 2081 */
- { 0, 0, printargs, "bsd43_setpgrp" }, /* 2082 */
- { 0, 0, printargs, "bsd43_setitimer" }, /* 2083 */
- { 0, 0, printargs, "bsd43_wait3" }, /* 2084 */
- { 0, 0, printargs, "bsd43_swapon" }, /* 2085 */
- { 0, 0, printargs, "bsd43_getitimer" }, /* 2086 */
- { 0, 0, printargs, "bsd43_gethostname" }, /* 2087 */
- { 0, 0, printargs, "bsd43_sethostname" }, /* 2088 */
- { 0, 0, printargs, "bsd43_getdtablesize" }, /* 2089 */
- { 0, 0, printargs, "bsd43_dup2" }, /* 2090 */
- { 0, 0, printargs, "bsd43_getdopt" }, /* 2091 */
- { 0, 0, printargs, "bsd43_fcntl" }, /* 2092 */
- { 0, 0, printargs, "bsd43_select" }, /* 2093 */
- { 0, 0, printargs, "bsd43_setdopt" }, /* 2094 */
- { 0, 0, printargs, "bsd43_fsync" }, /* 2095 */
- { 0, 0, printargs, "bsd43_setpriority" }, /* 2096 */
- { 0, 0, printargs, "bsd43_socket" }, /* 2097 */
- { 0, 0, printargs, "bsd43_connect" }, /* 2098 */
- { 0, 0, printargs, "bsd43_oldaccept" }, /* 2099 */
- { 0, 0, printargs, "bsd43_getpriority" }, /* 2100 */
- { 0, 0, printargs, "bsd43_send" }, /* 2101 */
- { 0, 0, printargs, "bsd43_recv" }, /* 2102 */
- { 0, 0, printargs, "bsd43_sigreturn" }, /* 2103 */
- { 0, 0, printargs, "bsd43_bind" }, /* 2104 */
- { 0, 0, printargs, "bsd43_setsockopt" }, /* 2105 */
- { 0, 0, printargs, "bsd43_listen" }, /* 2106 */
- { 0, 0, printargs, "bsd43_vtimes" }, /* 2107 */
- { 0, 0, printargs, "bsd43_sigvec" }, /* 2108 */
- { 0, 0, printargs, "bsd43_sigblock" }, /* 2109 */
- { 0, 0, printargs, "bsd43_sigsetmask" }, /* 2110 */
- { 0, 0, printargs, "bsd43_sigpause" }, /* 2111 */
- { 0, 0, printargs, "bsd43_sigstack" }, /* 2112 */
- { 0, 0, printargs, "bsd43_oldrecvmsg" }, /* 2113 */
- { 0, 0, printargs, "bsd43_oldsendmsg" }, /* 2114 */
- { 0, 0, printargs, "bsd43_vtrace" }, /* 2115 */
- { 0, 0, printargs, "bsd43_gettimeofday" }, /* 2116 */
- { 0, 0, printargs, "bsd43_getrusage" }, /* 2117 */
- { 0, 0, printargs, "bsd43_getsockopt" }, /* 2118 */
- { 0, 0, NULL, NULL }, /* 2119 */
- { 0, 0, printargs, "bsd43_readv" }, /* 2120 */
- { 0, 0, printargs, "bsd43_writev" }, /* 2121 */
- { 0, 0, printargs, "bsd43_settimeofday" }, /* 2122 */
- { 0, 0, printargs, "bsd43_fchown" }, /* 2123 */
- { 0, 0, printargs, "bsd43_fchmod" }, /* 2124 */
- { 0, 0, printargs, "bsd43_oldrecvfrom" }, /* 2125 */
- { 0, 0, printargs, "bsd43_setreuid" }, /* 2126 */
- { 0, 0, printargs, "bsd43_setregid" }, /* 2127 */
- { 0, 0, printargs, "bsd43_rename" }, /* 2128 */
- { 0, 0, printargs, "bsd43_truncate" }, /* 2129 */
- { 0, 0, printargs, "bsd43_ftruncate" }, /* 2130 */
- { 0, 0, printargs, "bsd43_flock" }, /* 2131 */
- { 0, 0, printargs, "bsd43_semsys" }, /* 2132 */
- { 0, 0, printargs, "bsd43_sendto" }, /* 2133 */
- { 0, 0, printargs, "bsd43_shutdown" }, /* 2134 */
- { 0, 0, printargs, "bsd43_socketpair" }, /* 2135 */
- { 0, 0, printargs, "bsd43_mkdir" }, /* 2136 */
- { 0, 0, printargs, "bsd43_rmdir" }, /* 2137 */
- { 0, 0, printargs, "bsd43_utimes" }, /* 2138 */
- { 0, 0, printargs, "bsd43_sigcleanup" }, /* 2139 */
- { 0, 0, printargs, "bsd43_adjtime" }, /* 2140 */
- { 0, 0, printargs, "bsd43_oldgetpeername" }, /* 2141 */
- { 0, 0, printargs, "bsd43_gethostid" }, /* 2142 */
- { 0, 0, printargs, "bsd43_sethostid" }, /* 2143 */
- { 0, 0, printargs, "bsd43_getrlimit" }, /* 2144 */
- { 0, 0, printargs, "bsd43_setrlimit" }, /* 2145 */
- { 0, 0, printargs, "bsd43_killpg" }, /* 2146 */
- { 0, 0, printargs, "bsd43_shmsys" }, /* 2147 */
- { 0, 0, printargs, "bsd43_quota" }, /* 2148 */
- { 0, 0, printargs, "bsd43_qquota" }, /* 2149 */
- { 0, 0, printargs, "bsd43_oldgetsockname" }, /* 2150 */
- { 0, 0, printargs, "bsd43_sysmips" }, /* 2151 */
- { 0, 0, printargs, "bsd43_cacheflush" }, /* 2152 */
- { 0, 0, printargs, "bsd43_cachectl" }, /* 2153 */
- { 0, 0, printargs, "bsd43_debug" }, /* 2154 */
- { 0, 0, NULL, NULL }, /* 2155 */
- { 0, 0, NULL, NULL }, /* 2156 */
- { 0, 0, printargs, "bsd43_nfs_mount" }, /* 2157 */
- { 0, 0, printargs, "bsd43_nfs_svc" }, /* 2158 */
- { 0, 0, printargs, "bsd43_getdirentries" }, /* 2159 */
- { 0, 0, printargs, "bsd43_statfs" }, /* 2160 */
- { 0, 0, printargs, "bsd43_fstatfs" }, /* 2161 */
- { 0, 0, printargs, "bsd43_unmount" }, /* 2162 */
- { 0, 0, printargs, "bsd43_async_daemon" }, /* 2163 */
- { 0, 0, printargs, "bsd43_nfs_getfh" }, /* 2164 */
- { 0, 0, printargs, "bsd43_getdomainname" }, /* 2165 */
- { 0, 0, printargs, "bsd43_setdomainname" }, /* 2166 */
- { 0, 0, printargs, "bsd43_pcfs_mount" }, /* 2167 */
- { 0, 0, printargs, "bsd43_quotactl" }, /* 2168 */
- { 0, 0, printargs, "bsd43_oldexportfs" }, /* 2169 */
- { 0, 0, printargs, "bsd43_smount" }, /* 2170 */
- { 0, 0, printargs, "bsd43_mipshwconf" }, /* 2171 */
- { 0, 0, printargs, "bsd43_exportfs" }, /* 2172 */
- { 0, 0, printargs, "bsd43_nfsfh_open" }, /* 2173 */
- { 0, 0, printargs, "bsd43_libattach" }, /* 2174 */
- { 0, 0, printargs, "bsd43_libdetach" }, /* 2175 */
- { 0, 0, printargs, "bsd43_accept" }, /* 2176 */
- { 0, 0, NULL, NULL }, /* 2177 */
- { 0, 0, NULL, NULL }, /* 2178 */
- { 0, 0, printargs, "bsd43_recvmsg" }, /* 2179 */
- { 0, 0, printargs, "bsd43_recvfrom" }, /* 2180 */
- { 0, 0, printargs, "bsd43_sendmsg" }, /* 2181 */
- { 0, 0, printargs, "bsd43_getpeername" }, /* 2182 */
- { 0, 0, printargs, "bsd43_getsockname" }, /* 2183 */
- { 0, 0, printargs, "bsd43_aread" }, /* 2184 */
- { 0, 0, printargs, "bsd43_awrite" }, /* 2185 */
- { 0, 0, printargs, "bsd43_listio" }, /* 2186 */
- { 0, 0, printargs, "bsd43_acancel" }, /* 2187 */
- { 0, 0, printargs, "bsd43_astatus" }, /* 2188 */
- { 0, 0, printargs, "bsd43_await" }, /* 2189 */
- { 0, 0, printargs, "bsd43_areadv" }, /* 2190 */
- { 0, 0, printargs, "bsd43_awritev" }, /* 2191 */
- { 0, 0, NULL, NULL }, /* 2192 */
- { 0, 0, NULL, NULL }, /* 2193 */
- { 0, 0, NULL, NULL }, /* 2194 */
- { 0, 0, NULL, NULL }, /* 2195 */
- { 0, 0, NULL, NULL }, /* 2196 */
- { 0, 0, NULL, NULL }, /* 2197 */
- { 0, 0, NULL, NULL }, /* 2198 */
- { 0, 0, NULL, NULL }, /* 2199 */
- { 0, 0, NULL, NULL }, /* 2200 */
- { 0, 0, NULL, NULL }, /* 2201 */
- { 0, 0, NULL, NULL }, /* 2202 */
- { 0, 0, NULL, NULL }, /* 2203 */
- { 0, 0, NULL, NULL }, /* 2204 */
- { 0, 0, NULL, NULL }, /* 2205 */
- { 0, 0, NULL, NULL }, /* 2206 */
- { 0, 0, NULL, NULL }, /* 2207 */
- { 0, 0, NULL, NULL }, /* 2208 */
- { 0, 0, NULL, NULL }, /* 2209 */
- { 0, 0, NULL, NULL }, /* 2210 */
- { 0, 0, NULL, NULL }, /* 2211 */
- { 0, 0, NULL, NULL }, /* 2212 */
- { 0, 0, NULL, NULL }, /* 2213 */
- { 0, 0, NULL, NULL }, /* 2214 */
- { 0, 0, NULL, NULL }, /* 2215 */
- { 0, 0, NULL, NULL }, /* 2216 */
- { 0, 0, NULL, NULL }, /* 2217 */
- { 0, 0, NULL, NULL }, /* 2218 */
- { 0, 0, NULL, NULL }, /* 2219 */
- { 0, 0, NULL, NULL }, /* 2220 */
- { 0, 0, NULL, NULL }, /* 2221 */
- { 0, 0, NULL, NULL }, /* 2222 */
- { 0, 0, NULL, NULL }, /* 2223 */
- { 0, 0, NULL, NULL }, /* 2224 */
- { 0, 0, NULL, NULL }, /* 2225 */
- { 0, 0, NULL, NULL }, /* 2226 */
- { 0, 0, NULL, NULL }, /* 2227 */
- { 0, 0, NULL, NULL }, /* 2228 */
- { 0, 0, NULL, NULL }, /* 2229 */
- { 0, 0, NULL, NULL }, /* 2230 */
- { 0, 0, NULL, NULL }, /* 2231 */
- { 0, 0, NULL, NULL }, /* 2232 */
- { 0, 0, NULL, NULL }, /* 2233 */
- { 0, 0, NULL, NULL }, /* 2234 */
- { 0, 0, NULL, NULL }, /* 2235 */
- { 0, 0, NULL, NULL }, /* 2236 */
- { 0, 0, NULL, NULL }, /* 2237 */
- { 0, 0, NULL, NULL }, /* 2238 */
- { 0, 0, NULL, NULL }, /* 2239 */
- { 0, 0, NULL, NULL }, /* 2240 */
- { 0, 0, NULL, NULL }, /* 2241 */
- { 0, 0, NULL, NULL }, /* 2242 */
- { 0, 0, NULL, NULL }, /* 2243 */
- { 0, 0, NULL, NULL }, /* 2244 */
- { 0, 0, NULL, NULL }, /* 2245 */
- { 0, 0, NULL, NULL }, /* 2246 */
- { 0, 0, NULL, NULL }, /* 2247 */
- { 0, 0, NULL, NULL }, /* 2248 */
- { 0, 0, NULL, NULL }, /* 2249 */
- { 0, 0, NULL, NULL }, /* 2250 */
- { 0, 0, NULL, NULL }, /* 2251 */
- { 0, 0, NULL, NULL }, /* 2252 */
- { 0, 0, NULL, NULL }, /* 2253 */
- { 0, 0, NULL, NULL }, /* 2254 */
- { 0, 0, NULL, NULL }, /* 2255 */
- { 0, 0, NULL, NULL }, /* 2256 */
- { 0, 0, NULL, NULL }, /* 2257 */
- { 0, 0, NULL, NULL }, /* 2258 */
- { 0, 0, NULL, NULL }, /* 2259 */
- { 0, 0, NULL, NULL }, /* 2260 */
- { 0, 0, NULL, NULL }, /* 2261 */
- { 0, 0, NULL, NULL }, /* 2262 */
- { 0, 0, NULL, NULL }, /* 2263 */
- { 0, 0, NULL, NULL }, /* 2264 */
- { 0, 0, NULL, NULL }, /* 2265 */
- { 0, 0, NULL, NULL }, /* 2266 */
- { 0, 0, NULL, NULL }, /* 2267 */
- { 0, 0, NULL, NULL }, /* 2268 */
- { 0, 0, NULL, NULL }, /* 2269 */
- { 0, 0, NULL, NULL }, /* 2270 */
- { 0, 0, NULL, NULL }, /* 2271 */
- { 0, 0, NULL, NULL }, /* 2272 */
- { 0, 0, NULL, NULL }, /* 2273 */
- { 0, 0, NULL, NULL }, /* 2274 */
- { 0, 0, NULL, NULL }, /* 2275 */
- { 0, 0, NULL, NULL }, /* 2276 */
- { 0, 0, NULL, NULL }, /* 2277 */
- { 0, 0, NULL, NULL }, /* 2278 */
- { 0, 0, NULL, NULL }, /* 2279 */
- { 0, 0, NULL, NULL }, /* 2280 */
- { 0, 0, NULL, NULL }, /* 2281 */
- { 0, 0, NULL, NULL }, /* 2282 */
- { 0, 0, NULL, NULL }, /* 2283 */
- { 0, 0, NULL, NULL }, /* 2284 */
- { 0, 0, NULL, NULL }, /* 2285 */
- { 0, 0, NULL, NULL }, /* 2286 */
- { 0, 0, NULL, NULL }, /* 2287 */
- { 0, 0, NULL, NULL }, /* 2288 */
- { 0, 0, NULL, NULL }, /* 2289 */
- { 0, 0, NULL, NULL }, /* 2290 */
- { 0, 0, NULL, NULL }, /* 2291 */
- { 0, 0, NULL, NULL }, /* 2292 */
- { 0, 0, NULL, NULL }, /* 2293 */
- { 0, 0, NULL, NULL }, /* 2294 */
- { 0, 0, NULL, NULL }, /* 2295 */
- { 0, 0, NULL, NULL }, /* 2296 */
- { 0, 0, NULL, NULL }, /* 2297 */
- { 0, 0, NULL, NULL }, /* 2298 */
- { 0, 0, NULL, NULL }, /* 2299 */
- { 0, 0, NULL, NULL }, /* 2300 */
- { 0, 0, NULL, NULL }, /* 2301 */
- { 0, 0, NULL, NULL }, /* 2302 */
- { 0, 0, NULL, NULL }, /* 2303 */
- { 0, 0, NULL, NULL }, /* 2304 */
- { 0, 0, NULL, NULL }, /* 2305 */
- { 0, 0, NULL, NULL }, /* 2306 */
- { 0, 0, NULL, NULL }, /* 2307 */
- { 0, 0, NULL, NULL }, /* 2308 */
- { 0, 0, NULL, NULL }, /* 2309 */
- { 0, 0, NULL, NULL }, /* 2310 */
- { 0, 0, NULL, NULL }, /* 2311 */
- { 0, 0, NULL, NULL }, /* 2312 */
- { 0, 0, NULL, NULL }, /* 2313 */
- { 0, 0, NULL, NULL }, /* 2314 */
- { 0, 0, NULL, NULL }, /* 2315 */
- { 0, 0, NULL, NULL }, /* 2316 */
- { 0, 0, NULL, NULL }, /* 2317 */
- { 0, 0, NULL, NULL }, /* 2318 */
- { 0, 0, NULL, NULL }, /* 2319 */
- { 0, 0, NULL, NULL }, /* 2320 */
- { 0, 0, NULL, NULL }, /* 2321 */
- { 0, 0, NULL, NULL }, /* 2322 */
- { 0, 0, NULL, NULL }, /* 2323 */
- { 0, 0, NULL, NULL }, /* 2324 */
- { 0, 0, NULL, NULL }, /* 2325 */
- { 0, 0, NULL, NULL }, /* 2326 */
- { 0, 0, NULL, NULL }, /* 2327 */
- { 0, 0, NULL, NULL }, /* 2328 */
- { 0, 0, NULL, NULL }, /* 2329 */
- { 0, 0, NULL, NULL }, /* 2330 */
- { 0, 0, NULL, NULL }, /* 2331 */
- { 0, 0, NULL, NULL }, /* 2332 */
- { 0, 0, NULL, NULL }, /* 2333 */
- { 0, 0, NULL, NULL }, /* 2334 */
- { 0, 0, NULL, NULL }, /* 2335 */
- { 0, 0, NULL, NULL }, /* 2336 */
- { 0, 0, NULL, NULL }, /* 2337 */
- { 0, 0, NULL, NULL }, /* 2338 */
- { 0, 0, NULL, NULL }, /* 2339 */
- { 0, 0, NULL, NULL }, /* 2340 */
- { 0, 0, NULL, NULL }, /* 2341 */
- { 0, 0, NULL, NULL }, /* 2342 */
- { 0, 0, NULL, NULL }, /* 2343 */
- { 0, 0, NULL, NULL }, /* 2344 */
- { 0, 0, NULL, NULL }, /* 2345 */
- { 0, 0, NULL, NULL }, /* 2346 */
- { 0, 0, NULL, NULL }, /* 2347 */
- { 0, 0, NULL, NULL }, /* 2348 */
- { 0, 0, NULL, NULL }, /* 2349 */
- { 0, 0, NULL, NULL }, /* 2350 */
- { 0, 0, NULL, NULL }, /* 2351 */
- { 0, 0, NULL, NULL }, /* 2352 */
- { 0, 0, NULL, NULL }, /* 2353 */
- { 0, 0, NULL, NULL }, /* 2354 */
- { 0, 0, NULL, NULL }, /* 2355 */
- { 0, 0, NULL, NULL }, /* 2356 */
- { 0, 0, NULL, NULL }, /* 2357 */
- { 0, 0, NULL, NULL }, /* 2358 */
- { 0, 0, NULL, NULL }, /* 2359 */
- { 0, 0, NULL, NULL }, /* 2360 */
- { 0, 0, NULL, NULL }, /* 2361 */
- { 0, 0, NULL, NULL }, /* 2362 */
- { 0, 0, NULL, NULL }, /* 2363 */
- { 0, 0, NULL, NULL }, /* 2364 */
- { 0, 0, NULL, NULL }, /* 2365 */
- { 0, 0, NULL, NULL }, /* 2366 */
- { 0, 0, NULL, NULL }, /* 2367 */
- { 0, 0, NULL, NULL }, /* 2368 */
- { 0, 0, NULL, NULL }, /* 2369 */
- { 0, 0, NULL, NULL }, /* 2370 */
- { 0, 0, NULL, NULL }, /* 2371 */
- { 0, 0, NULL, NULL }, /* 2372 */
- { 0, 0, NULL, NULL }, /* 2373 */
- { 0, 0, NULL, NULL }, /* 2374 */
- { 0, 0, NULL, NULL }, /* 2375 */
- { 0, 0, NULL, NULL }, /* 2376 */
- { 0, 0, NULL, NULL }, /* 2377 */
- { 0, 0, NULL, NULL }, /* 2378 */
- { 0, 0, NULL, NULL }, /* 2379 */
- { 0, 0, NULL, NULL }, /* 2380 */
- { 0, 0, NULL, NULL }, /* 2381 */
- { 0, 0, NULL, NULL }, /* 2382 */
- { 0, 0, NULL, NULL }, /* 2383 */
- { 0, 0, NULL, NULL }, /* 2384 */
- { 0, 0, NULL, NULL }, /* 2385 */
- { 0, 0, NULL, NULL }, /* 2386 */
- { 0, 0, NULL, NULL }, /* 2387 */
- { 0, 0, NULL, NULL }, /* 2388 */
- { 0, 0, NULL, NULL }, /* 2389 */
- { 0, 0, NULL, NULL }, /* 2390 */
- { 0, 0, NULL, NULL }, /* 2391 */
- { 0, 0, NULL, NULL }, /* 2392 */
- { 0, 0, NULL, NULL }, /* 2393 */
- { 0, 0, NULL, NULL }, /* 2394 */
- { 0, 0, NULL, NULL }, /* 2395 */
- { 0, 0, NULL, NULL }, /* 2396 */
- { 0, 0, NULL, NULL }, /* 2397 */
- { 0, 0, NULL, NULL }, /* 2398 */
- { 0, 0, NULL, NULL }, /* 2399 */
- { 0, 0, NULL, NULL }, /* 2400 */
- { 0, 0, NULL, NULL }, /* 2401 */
- { 0, 0, NULL, NULL }, /* 2402 */
- { 0, 0, NULL, NULL }, /* 2403 */
- { 0, 0, NULL, NULL }, /* 2404 */
- { 0, 0, NULL, NULL }, /* 2405 */
- { 0, 0, NULL, NULL }, /* 2406 */
- { 0, 0, NULL, NULL }, /* 2407 */
- { 0, 0, NULL, NULL }, /* 2408 */
- { 0, 0, NULL, NULL }, /* 2409 */
- { 0, 0, NULL, NULL }, /* 2410 */
- { 0, 0, NULL, NULL }, /* 2411 */
- { 0, 0, NULL, NULL }, /* 2412 */
- { 0, 0, NULL, NULL }, /* 2413 */
- { 0, 0, NULL, NULL }, /* 2414 */
- { 0, 0, NULL, NULL }, /* 2415 */
- { 0, 0, NULL, NULL }, /* 2416 */
- { 0, 0, NULL, NULL }, /* 2417 */
- { 0, 0, NULL, NULL }, /* 2418 */
- { 0, 0, NULL, NULL }, /* 2419 */
- { 0, 0, NULL, NULL }, /* 2420 */
- { 0, 0, NULL, NULL }, /* 2421 */
- { 0, 0, NULL, NULL }, /* 2422 */
- { 0, 0, NULL, NULL }, /* 2423 */
- { 0, 0, NULL, NULL }, /* 2424 */
- { 0, 0, NULL, NULL }, /* 2425 */
- { 0, 0, NULL, NULL }, /* 2426 */
- { 0, 0, NULL, NULL }, /* 2427 */
- { 0, 0, NULL, NULL }, /* 2428 */
- { 0, 0, NULL, NULL }, /* 2429 */
- { 0, 0, NULL, NULL }, /* 2430 */
- { 0, 0, NULL, NULL }, /* 2431 */
- { 0, 0, NULL, NULL }, /* 2432 */
- { 0, 0, NULL, NULL }, /* 2433 */
- { 0, 0, NULL, NULL }, /* 2434 */
- { 0, 0, NULL, NULL }, /* 2435 */
- { 0, 0, NULL, NULL }, /* 2436 */
- { 0, 0, NULL, NULL }, /* 2437 */
- { 0, 0, NULL, NULL }, /* 2438 */
- { 0, 0, NULL, NULL }, /* 2439 */
- { 0, 0, NULL, NULL }, /* 2440 */
- { 0, 0, NULL, NULL }, /* 2441 */
- { 0, 0, NULL, NULL }, /* 2442 */
- { 0, 0, NULL, NULL }, /* 2443 */
- { 0, 0, NULL, NULL }, /* 2444 */
- { 0, 0, NULL, NULL }, /* 2445 */
- { 0, 0, NULL, NULL }, /* 2446 */
- { 0, 0, NULL, NULL }, /* 2447 */
- { 0, 0, NULL, NULL }, /* 2448 */
- { 0, 0, NULL, NULL }, /* 2449 */
- { 0, 0, NULL, NULL }, /* 2450 */
- { 0, 0, NULL, NULL }, /* 2451 */
- { 0, 0, NULL, NULL }, /* 2452 */
- { 0, 0, NULL, NULL }, /* 2453 */
- { 0, 0, NULL, NULL }, /* 2454 */
- { 0, 0, NULL, NULL }, /* 2455 */
- { 0, 0, NULL, NULL }, /* 2456 */
- { 0, 0, NULL, NULL }, /* 2457 */
- { 0, 0, NULL, NULL }, /* 2458 */
- { 0, 0, NULL, NULL }, /* 2459 */
- { 0, 0, NULL, NULL }, /* 2460 */
- { 0, 0, NULL, NULL }, /* 2461 */
- { 0, 0, NULL, NULL }, /* 2462 */
- { 0, 0, NULL, NULL }, /* 2463 */
- { 0, 0, NULL, NULL }, /* 2464 */
- { 0, 0, NULL, NULL }, /* 2465 */
- { 0, 0, NULL, NULL }, /* 2466 */
- { 0, 0, NULL, NULL }, /* 2467 */
- { 0, 0, NULL, NULL }, /* 2468 */
- { 0, 0, NULL, NULL }, /* 2469 */
- { 0, 0, NULL, NULL }, /* 2470 */
- { 0, 0, NULL, NULL }, /* 2471 */
- { 0, 0, NULL, NULL }, /* 2472 */
- { 0, 0, NULL, NULL }, /* 2473 */
- { 0, 0, NULL, NULL }, /* 2474 */
- { 0, 0, NULL, NULL }, /* 2475 */
- { 0, 0, NULL, NULL }, /* 2476 */
- { 0, 0, NULL, NULL }, /* 2477 */
- { 0, 0, NULL, NULL }, /* 2478 */
- { 0, 0, NULL, NULL }, /* 2479 */
- { 0, 0, NULL, NULL }, /* 2480 */
- { 0, 0, NULL, NULL }, /* 2481 */
- { 0, 0, NULL, NULL }, /* 2482 */
- { 0, 0, NULL, NULL }, /* 2483 */
- { 0, 0, NULL, NULL }, /* 2484 */
- { 0, 0, NULL, NULL }, /* 2485 */
- { 0, 0, NULL, NULL }, /* 2486 */
- { 0, 0, NULL, NULL }, /* 2487 */
- { 0, 0, NULL, NULL }, /* 2488 */
- { 0, 0, NULL, NULL }, /* 2489 */
- { 0, 0, NULL, NULL }, /* 2490 */
- { 0, 0, NULL, NULL }, /* 2491 */
- { 0, 0, NULL, NULL }, /* 2492 */
- { 0, 0, NULL, NULL }, /* 2493 */
- { 0, 0, NULL, NULL }, /* 2494 */
- { 0, 0, NULL, NULL }, /* 2495 */
- { 0, 0, NULL, NULL }, /* 2496 */
- { 0, 0, NULL, NULL }, /* 2497 */
- { 0, 0, NULL, NULL }, /* 2498 */
- { 0, 0, NULL, NULL }, /* 2499 */
- { 0, 0, NULL, NULL }, /* 2500 */
- { 0, 0, NULL, NULL }, /* 2501 */
- { 0, 0, NULL, NULL }, /* 2502 */
- { 0, 0, NULL, NULL }, /* 2503 */
- { 0, 0, NULL, NULL }, /* 2504 */
- { 0, 0, NULL, NULL }, /* 2505 */
- { 0, 0, NULL, NULL }, /* 2506 */
- { 0, 0, NULL, NULL }, /* 2507 */
- { 0, 0, NULL, NULL }, /* 2508 */
- { 0, 0, NULL, NULL }, /* 2509 */
- { 0, 0, NULL, NULL }, /* 2510 */
- { 0, 0, NULL, NULL }, /* 2511 */
- { 0, 0, NULL, NULL }, /* 2512 */
- { 0, 0, NULL, NULL }, /* 2513 */
- { 0, 0, NULL, NULL }, /* 2514 */
- { 0, 0, NULL, NULL }, /* 2515 */
- { 0, 0, NULL, NULL }, /* 2516 */
- { 0, 0, NULL, NULL }, /* 2517 */
- { 0, 0, NULL, NULL }, /* 2518 */
- { 0, 0, NULL, NULL }, /* 2519 */
- { 0, 0, NULL, NULL }, /* 2520 */
- { 0, 0, NULL, NULL }, /* 2521 */
- { 0, 0, NULL, NULL }, /* 2522 */
- { 0, 0, NULL, NULL }, /* 2523 */
- { 0, 0, NULL, NULL }, /* 2524 */
- { 0, 0, NULL, NULL }, /* 2525 */
- { 0, 0, NULL, NULL }, /* 2526 */
- { 0, 0, NULL, NULL }, /* 2527 */
- { 0, 0, NULL, NULL }, /* 2528 */
- { 0, 0, NULL, NULL }, /* 2529 */
- { 0, 0, NULL, NULL }, /* 2530 */
- { 0, 0, NULL, NULL }, /* 2531 */
- { 0, 0, NULL, NULL }, /* 2532 */
- { 0, 0, NULL, NULL }, /* 2533 */
- { 0, 0, NULL, NULL }, /* 2534 */
- { 0, 0, NULL, NULL }, /* 2535 */
- { 0, 0, NULL, NULL }, /* 2536 */
- { 0, 0, NULL, NULL }, /* 2537 */
- { 0, 0, NULL, NULL }, /* 2538 */
- { 0, 0, NULL, NULL }, /* 2539 */
- { 0, 0, NULL, NULL }, /* 2540 */
- { 0, 0, NULL, NULL }, /* 2541 */
- { 0, 0, NULL, NULL }, /* 2542 */
- { 0, 0, NULL, NULL }, /* 2543 */
- { 0, 0, NULL, NULL }, /* 2544 */
- { 0, 0, NULL, NULL }, /* 2545 */
- { 0, 0, NULL, NULL }, /* 2546 */
- { 0, 0, NULL, NULL }, /* 2547 */
- { 0, 0, NULL, NULL }, /* 2548 */
- { 0, 0, NULL, NULL }, /* 2549 */
- { 0, 0, NULL, NULL }, /* 2550 */
- { 0, 0, NULL, NULL }, /* 2551 */
- { 0, 0, NULL, NULL }, /* 2552 */
- { 0, 0, NULL, NULL }, /* 2553 */
- { 0, 0, NULL, NULL }, /* 2554 */
- { 0, 0, NULL, NULL }, /* 2555 */
- { 0, 0, NULL, NULL }, /* 2556 */
- { 0, 0, NULL, NULL }, /* 2557 */
- { 0, 0, NULL, NULL }, /* 2558 */
- { 0, 0, NULL, NULL }, /* 2559 */
- { 0, 0, NULL, NULL }, /* 2560 */
- { 0, 0, NULL, NULL }, /* 2561 */
- { 0, 0, NULL, NULL }, /* 2562 */
- { 0, 0, NULL, NULL }, /* 2563 */
- { 0, 0, NULL, NULL }, /* 2564 */
- { 0, 0, NULL, NULL }, /* 2565 */
- { 0, 0, NULL, NULL }, /* 2566 */
- { 0, 0, NULL, NULL }, /* 2567 */
- { 0, 0, NULL, NULL }, /* 2568 */
- { 0, 0, NULL, NULL }, /* 2569 */
- { 0, 0, NULL, NULL }, /* 2570 */
- { 0, 0, NULL, NULL }, /* 2571 */
- { 0, 0, NULL, NULL }, /* 2572 */
- { 0, 0, NULL, NULL }, /* 2573 */
- { 0, 0, NULL, NULL }, /* 2574 */
- { 0, 0, NULL, NULL }, /* 2575 */
- { 0, 0, NULL, NULL }, /* 2576 */
- { 0, 0, NULL, NULL }, /* 2577 */
- { 0, 0, NULL, NULL }, /* 2578 */
- { 0, 0, NULL, NULL }, /* 2579 */
- { 0, 0, NULL, NULL }, /* 2580 */
- { 0, 0, NULL, NULL }, /* 2581 */
- { 0, 0, NULL, NULL }, /* 2582 */
- { 0, 0, NULL, NULL }, /* 2583 */
- { 0, 0, NULL, NULL }, /* 2584 */
- { 0, 0, NULL, NULL }, /* 2585 */
- { 0, 0, NULL, NULL }, /* 2586 */
- { 0, 0, NULL, NULL }, /* 2587 */
- { 0, 0, NULL, NULL }, /* 2588 */
- { 0, 0, NULL, NULL }, /* 2589 */
- { 0, 0, NULL, NULL }, /* 2590 */
- { 0, 0, NULL, NULL }, /* 2591 */
- { 0, 0, NULL, NULL }, /* 2592 */
- { 0, 0, NULL, NULL }, /* 2593 */
- { 0, 0, NULL, NULL }, /* 2594 */
- { 0, 0, NULL, NULL }, /* 2595 */
- { 0, 0, NULL, NULL }, /* 2596 */
- { 0, 0, NULL, NULL }, /* 2597 */
- { 0, 0, NULL, NULL }, /* 2598 */
- { 0, 0, NULL, NULL }, /* 2599 */
- { 0, 0, NULL, NULL }, /* 2600 */
- { 0, 0, NULL, NULL }, /* 2601 */
- { 0, 0, NULL, NULL }, /* 2602 */
- { 0, 0, NULL, NULL }, /* 2603 */
- { 0, 0, NULL, NULL }, /* 2604 */
- { 0, 0, NULL, NULL }, /* 2605 */
- { 0, 0, NULL, NULL }, /* 2606 */
- { 0, 0, NULL, NULL }, /* 2607 */
- { 0, 0, NULL, NULL }, /* 2608 */
- { 0, 0, NULL, NULL }, /* 2609 */
- { 0, 0, NULL, NULL }, /* 2610 */
- { 0, 0, NULL, NULL }, /* 2611 */
- { 0, 0, NULL, NULL }, /* 2612 */
- { 0, 0, NULL, NULL }, /* 2613 */
- { 0, 0, NULL, NULL }, /* 2614 */
- { 0, 0, NULL, NULL }, /* 2615 */
- { 0, 0, NULL, NULL }, /* 2616 */
- { 0, 0, NULL, NULL }, /* 2617 */
- { 0, 0, NULL, NULL }, /* 2618 */
- { 0, 0, NULL, NULL }, /* 2619 */
- { 0, 0, NULL, NULL }, /* 2620 */
- { 0, 0, NULL, NULL }, /* 2621 */
- { 0, 0, NULL, NULL }, /* 2622 */
- { 0, 0, NULL, NULL }, /* 2623 */
- { 0, 0, NULL, NULL }, /* 2624 */
- { 0, 0, NULL, NULL }, /* 2625 */
- { 0, 0, NULL, NULL }, /* 2626 */
- { 0, 0, NULL, NULL }, /* 2627 */
- { 0, 0, NULL, NULL }, /* 2628 */
- { 0, 0, NULL, NULL }, /* 2629 */
- { 0, 0, NULL, NULL }, /* 2630 */
- { 0, 0, NULL, NULL }, /* 2631 */
- { 0, 0, NULL, NULL }, /* 2632 */
- { 0, 0, NULL, NULL }, /* 2633 */
- { 0, 0, NULL, NULL }, /* 2634 */
- { 0, 0, NULL, NULL }, /* 2635 */
- { 0, 0, NULL, NULL }, /* 2636 */
- { 0, 0, NULL, NULL }, /* 2637 */
- { 0, 0, NULL, NULL }, /* 2638 */
- { 0, 0, NULL, NULL }, /* 2639 */
- { 0, 0, NULL, NULL }, /* 2640 */
- { 0, 0, NULL, NULL }, /* 2641 */
- { 0, 0, NULL, NULL }, /* 2642 */
- { 0, 0, NULL, NULL }, /* 2643 */
- { 0, 0, NULL, NULL }, /* 2644 */
- { 0, 0, NULL, NULL }, /* 2645 */
- { 0, 0, NULL, NULL }, /* 2646 */
- { 0, 0, NULL, NULL }, /* 2647 */
- { 0, 0, NULL, NULL }, /* 2648 */
- { 0, 0, NULL, NULL }, /* 2649 */
- { 0, 0, NULL, NULL }, /* 2650 */
- { 0, 0, NULL, NULL }, /* 2651 */
- { 0, 0, NULL, NULL }, /* 2652 */
- { 0, 0, NULL, NULL }, /* 2653 */
- { 0, 0, NULL, NULL }, /* 2654 */
- { 0, 0, NULL, NULL }, /* 2655 */
- { 0, 0, NULL, NULL }, /* 2656 */
- { 0, 0, NULL, NULL }, /* 2657 */
- { 0, 0, NULL, NULL }, /* 2658 */
- { 0, 0, NULL, NULL }, /* 2659 */
- { 0, 0, NULL, NULL }, /* 2660 */
- { 0, 0, NULL, NULL }, /* 2661 */
- { 0, 0, NULL, NULL }, /* 2662 */
- { 0, 0, NULL, NULL }, /* 2663 */
- { 0, 0, NULL, NULL }, /* 2664 */
- { 0, 0, NULL, NULL }, /* 2665 */
- { 0, 0, NULL, NULL }, /* 2666 */
- { 0, 0, NULL, NULL }, /* 2667 */
- { 0, 0, NULL, NULL }, /* 2668 */
- { 0, 0, NULL, NULL }, /* 2669 */
- { 0, 0, NULL, NULL }, /* 2670 */
- { 0, 0, NULL, NULL }, /* 2671 */
- { 0, 0, NULL, NULL }, /* 2672 */
- { 0, 0, NULL, NULL }, /* 2673 */
- { 0, 0, NULL, NULL }, /* 2674 */
- { 0, 0, NULL, NULL }, /* 2675 */
- { 0, 0, NULL, NULL }, /* 2676 */
- { 0, 0, NULL, NULL }, /* 2677 */
- { 0, 0, NULL, NULL }, /* 2678 */
- { 0, 0, NULL, NULL }, /* 2679 */
- { 0, 0, NULL, NULL }, /* 2680 */
- { 0, 0, NULL, NULL }, /* 2681 */
- { 0, 0, NULL, NULL }, /* 2682 */
- { 0, 0, NULL, NULL }, /* 2683 */
- { 0, 0, NULL, NULL }, /* 2684 */
- { 0, 0, NULL, NULL }, /* 2685 */
- { 0, 0, NULL, NULL }, /* 2686 */
- { 0, 0, NULL, NULL }, /* 2687 */
- { 0, 0, NULL, NULL }, /* 2688 */
- { 0, 0, NULL, NULL }, /* 2689 */
- { 0, 0, NULL, NULL }, /* 2690 */
- { 0, 0, NULL, NULL }, /* 2691 */
- { 0, 0, NULL, NULL }, /* 2692 */
- { 0, 0, NULL, NULL }, /* 2693 */
- { 0, 0, NULL, NULL }, /* 2694 */
- { 0, 0, NULL, NULL }, /* 2695 */
- { 0, 0, NULL, NULL }, /* 2696 */
- { 0, 0, NULL, NULL }, /* 2697 */
- { 0, 0, NULL, NULL }, /* 2698 */
- { 0, 0, NULL, NULL }, /* 2699 */
- { 0, 0, NULL, NULL }, /* 2700 */
- { 0, 0, NULL, NULL }, /* 2701 */
- { 0, 0, NULL, NULL }, /* 2702 */
- { 0, 0, NULL, NULL }, /* 2703 */
- { 0, 0, NULL, NULL }, /* 2704 */
- { 0, 0, NULL, NULL }, /* 2705 */
- { 0, 0, NULL, NULL }, /* 2706 */
- { 0, 0, NULL, NULL }, /* 2707 */
- { 0, 0, NULL, NULL }, /* 2708 */
- { 0, 0, NULL, NULL }, /* 2709 */
- { 0, 0, NULL, NULL }, /* 2710 */
- { 0, 0, NULL, NULL }, /* 2711 */
- { 0, 0, NULL, NULL }, /* 2712 */
- { 0, 0, NULL, NULL }, /* 2713 */
- { 0, 0, NULL, NULL }, /* 2714 */
- { 0, 0, NULL, NULL }, /* 2715 */
- { 0, 0, NULL, NULL }, /* 2716 */
- { 0, 0, NULL, NULL }, /* 2717 */
- { 0, 0, NULL, NULL }, /* 2718 */
- { 0, 0, NULL, NULL }, /* 2719 */
- { 0, 0, NULL, NULL }, /* 2720 */
- { 0, 0, NULL, NULL }, /* 2721 */
- { 0, 0, NULL, NULL }, /* 2722 */
- { 0, 0, NULL, NULL }, /* 2723 */
- { 0, 0, NULL, NULL }, /* 2724 */
- { 0, 0, NULL, NULL }, /* 2725 */
- { 0, 0, NULL, NULL }, /* 2726 */
- { 0, 0, NULL, NULL }, /* 2727 */
- { 0, 0, NULL, NULL }, /* 2728 */
- { 0, 0, NULL, NULL }, /* 2729 */
- { 0, 0, NULL, NULL }, /* 2730 */
- { 0, 0, NULL, NULL }, /* 2731 */
- { 0, 0, NULL, NULL }, /* 2732 */
- { 0, 0, NULL, NULL }, /* 2733 */
- { 0, 0, NULL, NULL }, /* 2734 */
- { 0, 0, NULL, NULL }, /* 2735 */
- { 0, 0, NULL, NULL }, /* 2736 */
- { 0, 0, NULL, NULL }, /* 2737 */
- { 0, 0, NULL, NULL }, /* 2738 */
- { 0, 0, NULL, NULL }, /* 2739 */
- { 0, 0, NULL, NULL }, /* 2740 */
- { 0, 0, NULL, NULL }, /* 2741 */
- { 0, 0, NULL, NULL }, /* 2742 */
- { 0, 0, NULL, NULL }, /* 2743 */
- { 0, 0, NULL, NULL }, /* 2744 */
- { 0, 0, NULL, NULL }, /* 2745 */
- { 0, 0, NULL, NULL }, /* 2746 */
- { 0, 0, NULL, NULL }, /* 2747 */
- { 0, 0, NULL, NULL }, /* 2748 */
- { 0, 0, NULL, NULL }, /* 2749 */
- { 0, 0, NULL, NULL }, /* 2750 */
- { 0, 0, NULL, NULL }, /* 2751 */
- { 0, 0, NULL, NULL }, /* 2752 */
- { 0, 0, NULL, NULL }, /* 2753 */
- { 0, 0, NULL, NULL }, /* 2754 */
- { 0, 0, NULL, NULL }, /* 2755 */
- { 0, 0, NULL, NULL }, /* 2756 */
- { 0, 0, NULL, NULL }, /* 2757 */
- { 0, 0, NULL, NULL }, /* 2758 */
- { 0, 0, NULL, NULL }, /* 2759 */
- { 0, 0, NULL, NULL }, /* 2760 */
- { 0, 0, NULL, NULL }, /* 2761 */
- { 0, 0, NULL, NULL }, /* 2762 */
- { 0, 0, NULL, NULL }, /* 2763 */
- { 0, 0, NULL, NULL }, /* 2764 */
- { 0, 0, NULL, NULL }, /* 2765 */
- { 0, 0, NULL, NULL }, /* 2766 */
- { 0, 0, NULL, NULL }, /* 2767 */
- { 0, 0, NULL, NULL }, /* 2768 */
- { 0, 0, NULL, NULL }, /* 2769 */
- { 0, 0, NULL, NULL }, /* 2770 */
- { 0, 0, NULL, NULL }, /* 2771 */
- { 0, 0, NULL, NULL }, /* 2772 */
- { 0, 0, NULL, NULL }, /* 2773 */
- { 0, 0, NULL, NULL }, /* 2774 */
- { 0, 0, NULL, NULL }, /* 2775 */
- { 0, 0, NULL, NULL }, /* 2776 */
- { 0, 0, NULL, NULL }, /* 2777 */
- { 0, 0, NULL, NULL }, /* 2778 */
- { 0, 0, NULL, NULL }, /* 2779 */
- { 0, 0, NULL, NULL }, /* 2780 */
- { 0, 0, NULL, NULL }, /* 2781 */
- { 0, 0, NULL, NULL }, /* 2782 */
- { 0, 0, NULL, NULL }, /* 2783 */
- { 0, 0, NULL, NULL }, /* 2784 */
- { 0, 0, NULL, NULL }, /* 2785 */
- { 0, 0, NULL, NULL }, /* 2786 */
- { 0, 0, NULL, NULL }, /* 2787 */
- { 0, 0, NULL, NULL }, /* 2788 */
- { 0, 0, NULL, NULL }, /* 2789 */
- { 0, 0, NULL, NULL }, /* 2790 */
- { 0, 0, NULL, NULL }, /* 2791 */
- { 0, 0, NULL, NULL }, /* 2792 */
- { 0, 0, NULL, NULL }, /* 2793 */
- { 0, 0, NULL, NULL }, /* 2794 */
- { 0, 0, NULL, NULL }, /* 2795 */
- { 0, 0, NULL, NULL }, /* 2796 */
- { 0, 0, NULL, NULL }, /* 2797 */
- { 0, 0, NULL, NULL }, /* 2798 */
- { 0, 0, NULL, NULL }, /* 2799 */
- { 0, 0, NULL, NULL }, /* 2800 */
- { 0, 0, NULL, NULL }, /* 2801 */
- { 0, 0, NULL, NULL }, /* 2802 */
- { 0, 0, NULL, NULL }, /* 2803 */
- { 0, 0, NULL, NULL }, /* 2804 */
- { 0, 0, NULL, NULL }, /* 2805 */
- { 0, 0, NULL, NULL }, /* 2806 */
- { 0, 0, NULL, NULL }, /* 2807 */
- { 0, 0, NULL, NULL }, /* 2808 */
- { 0, 0, NULL, NULL }, /* 2809 */
- { 0, 0, NULL, NULL }, /* 2810 */
- { 0, 0, NULL, NULL }, /* 2811 */
- { 0, 0, NULL, NULL }, /* 2812 */
- { 0, 0, NULL, NULL }, /* 2813 */
- { 0, 0, NULL, NULL }, /* 2814 */
- { 0, 0, NULL, NULL }, /* 2815 */
- { 0, 0, NULL, NULL }, /* 2816 */
- { 0, 0, NULL, NULL }, /* 2817 */
- { 0, 0, NULL, NULL }, /* 2818 */
- { 0, 0, NULL, NULL }, /* 2819 */
- { 0, 0, NULL, NULL }, /* 2820 */
- { 0, 0, NULL, NULL }, /* 2821 */
- { 0, 0, NULL, NULL }, /* 2822 */
- { 0, 0, NULL, NULL }, /* 2823 */
- { 0, 0, NULL, NULL }, /* 2824 */
- { 0, 0, NULL, NULL }, /* 2825 */
- { 0, 0, NULL, NULL }, /* 2826 */
- { 0, 0, NULL, NULL }, /* 2827 */
- { 0, 0, NULL, NULL }, /* 2828 */
- { 0, 0, NULL, NULL }, /* 2829 */
- { 0, 0, NULL, NULL }, /* 2830 */
- { 0, 0, NULL, NULL }, /* 2831 */
- { 0, 0, NULL, NULL }, /* 2832 */
- { 0, 0, NULL, NULL }, /* 2833 */
- { 0, 0, NULL, NULL }, /* 2834 */
- { 0, 0, NULL, NULL }, /* 2835 */
- { 0, 0, NULL, NULL }, /* 2836 */
- { 0, 0, NULL, NULL }, /* 2837 */
- { 0, 0, NULL, NULL }, /* 2838 */
- { 0, 0, NULL, NULL }, /* 2839 */
- { 0, 0, NULL, NULL }, /* 2840 */
- { 0, 0, NULL, NULL }, /* 2841 */
- { 0, 0, NULL, NULL }, /* 2842 */
- { 0, 0, NULL, NULL }, /* 2843 */
- { 0, 0, NULL, NULL }, /* 2844 */
- { 0, 0, NULL, NULL }, /* 2845 */
- { 0, 0, NULL, NULL }, /* 2846 */
- { 0, 0, NULL, NULL }, /* 2847 */
- { 0, 0, NULL, NULL }, /* 2848 */
- { 0, 0, NULL, NULL }, /* 2849 */
- { 0, 0, NULL, NULL }, /* 2850 */
- { 0, 0, NULL, NULL }, /* 2851 */
- { 0, 0, NULL, NULL }, /* 2852 */
- { 0, 0, NULL, NULL }, /* 2853 */
- { 0, 0, NULL, NULL }, /* 2854 */
- { 0, 0, NULL, NULL }, /* 2855 */
- { 0, 0, NULL, NULL }, /* 2856 */
- { 0, 0, NULL, NULL }, /* 2857 */
- { 0, 0, NULL, NULL }, /* 2858 */
- { 0, 0, NULL, NULL }, /* 2859 */
- { 0, 0, NULL, NULL }, /* 2860 */
- { 0, 0, NULL, NULL }, /* 2861 */
- { 0, 0, NULL, NULL }, /* 2862 */
- { 0, 0, NULL, NULL }, /* 2863 */
- { 0, 0, NULL, NULL }, /* 2864 */
- { 0, 0, NULL, NULL }, /* 2865 */
- { 0, 0, NULL, NULL }, /* 2866 */
- { 0, 0, NULL, NULL }, /* 2867 */
- { 0, 0, NULL, NULL }, /* 2868 */
- { 0, 0, NULL, NULL }, /* 2869 */
- { 0, 0, NULL, NULL }, /* 2870 */
- { 0, 0, NULL, NULL }, /* 2871 */
- { 0, 0, NULL, NULL }, /* 2872 */
- { 0, 0, NULL, NULL }, /* 2873 */
- { 0, 0, NULL, NULL }, /* 2874 */
- { 0, 0, NULL, NULL }, /* 2875 */
- { 0, 0, NULL, NULL }, /* 2876 */
- { 0, 0, NULL, NULL }, /* 2877 */
- { 0, 0, NULL, NULL }, /* 2878 */
- { 0, 0, NULL, NULL }, /* 2879 */
- { 0, 0, NULL, NULL }, /* 2880 */
- { 0, 0, NULL, NULL }, /* 2881 */
- { 0, 0, NULL, NULL }, /* 2882 */
- { 0, 0, NULL, NULL }, /* 2883 */
- { 0, 0, NULL, NULL }, /* 2884 */
- { 0, 0, NULL, NULL }, /* 2885 */
- { 0, 0, NULL, NULL }, /* 2886 */
- { 0, 0, NULL, NULL }, /* 2887 */
- { 0, 0, NULL, NULL }, /* 2888 */
- { 0, 0, NULL, NULL }, /* 2889 */
- { 0, 0, NULL, NULL }, /* 2890 */
- { 0, 0, NULL, NULL }, /* 2891 */
- { 0, 0, NULL, NULL }, /* 2892 */
- { 0, 0, NULL, NULL }, /* 2893 */
- { 0, 0, NULL, NULL }, /* 2894 */
- { 0, 0, NULL, NULL }, /* 2895 */
- { 0, 0, NULL, NULL }, /* 2896 */
- { 0, 0, NULL, NULL }, /* 2897 */
- { 0, 0, NULL, NULL }, /* 2898 */
- { 0, 0, NULL, NULL }, /* 2899 */
- { 0, 0, NULL, NULL }, /* 2900 */
- { 0, 0, NULL, NULL }, /* 2901 */
- { 0, 0, NULL, NULL }, /* 2902 */
- { 0, 0, NULL, NULL }, /* 2903 */
- { 0, 0, NULL, NULL }, /* 2904 */
- { 0, 0, NULL, NULL }, /* 2905 */
- { 0, 0, NULL, NULL }, /* 2906 */
- { 0, 0, NULL, NULL }, /* 2907 */
- { 0, 0, NULL, NULL }, /* 2908 */
- { 0, 0, NULL, NULL }, /* 2909 */
- { 0, 0, NULL, NULL }, /* 2910 */
- { 0, 0, NULL, NULL }, /* 2911 */
- { 0, 0, NULL, NULL }, /* 2912 */
- { 0, 0, NULL, NULL }, /* 2913 */
- { 0, 0, NULL, NULL }, /* 2914 */
- { 0, 0, NULL, NULL }, /* 2915 */
- { 0, 0, NULL, NULL }, /* 2916 */
- { 0, 0, NULL, NULL }, /* 2917 */
- { 0, 0, NULL, NULL }, /* 2918 */
- { 0, 0, NULL, NULL }, /* 2919 */
- { 0, 0, NULL, NULL }, /* 2920 */
- { 0, 0, NULL, NULL }, /* 2921 */
- { 0, 0, NULL, NULL }, /* 2922 */
- { 0, 0, NULL, NULL }, /* 2923 */
- { 0, 0, NULL, NULL }, /* 2924 */
- { 0, 0, NULL, NULL }, /* 2925 */
- { 0, 0, NULL, NULL }, /* 2926 */
- { 0, 0, NULL, NULL }, /* 2927 */
- { 0, 0, NULL, NULL }, /* 2928 */
- { 0, 0, NULL, NULL }, /* 2929 */
- { 0, 0, NULL, NULL }, /* 2930 */
- { 0, 0, NULL, NULL }, /* 2931 */
- { 0, 0, NULL, NULL }, /* 2932 */
- { 0, 0, NULL, NULL }, /* 2933 */
- { 0, 0, NULL, NULL }, /* 2934 */
- { 0, 0, NULL, NULL }, /* 2935 */
- { 0, 0, NULL, NULL }, /* 2936 */
- { 0, 0, NULL, NULL }, /* 2937 */
- { 0, 0, NULL, NULL }, /* 2938 */
- { 0, 0, NULL, NULL }, /* 2939 */
- { 0, 0, NULL, NULL }, /* 2940 */
- { 0, 0, NULL, NULL }, /* 2941 */
- { 0, 0, NULL, NULL }, /* 2942 */
- { 0, 0, NULL, NULL }, /* 2943 */
- { 0, 0, NULL, NULL }, /* 2944 */
- { 0, 0, NULL, NULL }, /* 2945 */
- { 0, 0, NULL, NULL }, /* 2946 */
- { 0, 0, NULL, NULL }, /* 2947 */
- { 0, 0, NULL, NULL }, /* 2948 */
- { 0, 0, NULL, NULL }, /* 2949 */
- { 0, 0, NULL, NULL }, /* 2950 */
- { 0, 0, NULL, NULL }, /* 2951 */
- { 0, 0, NULL, NULL }, /* 2952 */
- { 0, 0, NULL, NULL }, /* 2953 */
- { 0, 0, NULL, NULL }, /* 2954 */
- { 0, 0, NULL, NULL }, /* 2955 */
- { 0, 0, NULL, NULL }, /* 2956 */
- { 0, 0, NULL, NULL }, /* 2957 */
- { 0, 0, NULL, NULL }, /* 2958 */
- { 0, 0, NULL, NULL }, /* 2959 */
- { 0, 0, NULL, NULL }, /* 2960 */
- { 0, 0, NULL, NULL }, /* 2961 */
- { 0, 0, NULL, NULL }, /* 2962 */
- { 0, 0, NULL, NULL }, /* 2963 */
- { 0, 0, NULL, NULL }, /* 2964 */
- { 0, 0, NULL, NULL }, /* 2965 */
- { 0, 0, NULL, NULL }, /* 2966 */
- { 0, 0, NULL, NULL }, /* 2967 */
- { 0, 0, NULL, NULL }, /* 2968 */
- { 0, 0, NULL, NULL }, /* 2969 */
- { 0, 0, NULL, NULL }, /* 2970 */
- { 0, 0, NULL, NULL }, /* 2971 */
- { 0, 0, NULL, NULL }, /* 2972 */
- { 0, 0, NULL, NULL }, /* 2973 */
- { 0, 0, NULL, NULL }, /* 2974 */
- { 0, 0, NULL, NULL }, /* 2975 */
- { 0, 0, NULL, NULL }, /* 2976 */
- { 0, 0, NULL, NULL }, /* 2977 */
- { 0, 0, NULL, NULL }, /* 2978 */
- { 0, 0, NULL, NULL }, /* 2979 */
- { 0, 0, NULL, NULL }, /* 2980 */
- { 0, 0, NULL, NULL }, /* 2981 */
- { 0, 0, NULL, NULL }, /* 2982 */
- { 0, 0, NULL, NULL }, /* 2983 */
- { 0, 0, NULL, NULL }, /* 2984 */
- { 0, 0, NULL, NULL }, /* 2985 */
- { 0, 0, NULL, NULL }, /* 2986 */
- { 0, 0, NULL, NULL }, /* 2987 */
- { 0, 0, NULL, NULL }, /* 2988 */
- { 0, 0, NULL, NULL }, /* 2989 */
- { 0, 0, NULL, NULL }, /* 2990 */
- { 0, 0, NULL, NULL }, /* 2991 */
- { 0, 0, NULL, NULL }, /* 2992 */
- { 0, 0, NULL, NULL }, /* 2993 */
- { 0, 0, NULL, NULL }, /* 2994 */
- { 0, 0, NULL, NULL }, /* 2995 */
- { 0, 0, NULL, NULL }, /* 2996 */
- { 0, 0, NULL, NULL }, /* 2997 */
- { 0, 0, NULL, NULL }, /* 2998 */
- { 0, 0, NULL, NULL }, /* 2999 */ /* end of BSD 4.3 */
- { 0, 0, printargs, "posix_syscall" }, /* 3000 */ /* start of POSIX */
- { 0, 0, printargs, "posix_exit" }, /* 3001 */
- { 0, 0, printargs, "posix_fork" }, /* 3002 */
- { 0, 0, printargs, "posix_read" }, /* 3003 */
- { 0, 0, printargs, "posix_write" }, /* 3004 */
- { 0, 0, printargs, "posix_open" }, /* 3005 */
- { 0, 0, printargs, "posix_close" }, /* 3006 */
- { 0, 0, printargs, "posix_wait" }, /* 3007 */
- { 0, 0, printargs, "posix_creat" }, /* 3008 */
- { 0, 0, printargs, "posix_link" }, /* 3009 */
- { 0, 0, printargs, "posix_unlink" }, /* 3010 */
- { 0, 0, printargs, "posix_exec" }, /* 3011 */
- { 0, 0, printargs, "posix_chdir" }, /* 3012 */
- { 0, 0, printargs, "posix_gtime" }, /* 3013 */
- { 0, 0, printargs, "posix_mknod" }, /* 3014 */
- { 0, 0, printargs, "posix_chmod" }, /* 3015 */
- { 0, 0, printargs, "posix_chown" }, /* 3016 */
- { 0, 0, printargs, "posix_sbreak" }, /* 3017 */
- { 0, 0, printargs, "posix_stat" }, /* 3018 */
- { 0, 0, printargs, "posix_lseek" }, /* 3019 */
- { 0, 0, printargs, "posix_getpid" }, /* 3020 */
- { 0, 0, printargs, "posix_mount" }, /* 3021 */
- { 0, 0, printargs, "posix_umount" }, /* 3022 */
- { 0, 0, printargs, "posix_setuid" }, /* 3023 */
- { 0, 0, printargs, "posix_getuid" }, /* 3024 */
- { 0, 0, printargs, "posix_stime" }, /* 3025 */
- { 0, 0, printargs, "posix_ptrace" }, /* 3026 */
- { 0, 0, printargs, "posix_alarm" }, /* 3027 */
- { 0, 0, printargs, "posix_fstat" }, /* 3028 */
- { 0, 0, printargs, "posix_pause" }, /* 3029 */
- { 0, 0, printargs, "posix_utime" }, /* 3030 */
- { 0, 0, printargs, "posix_stty" }, /* 3031 */
- { 0, 0, printargs, "posix_gtty" }, /* 3032 */
- { 0, 0, printargs, "posix_access" }, /* 3033 */
- { 0, 0, printargs, "posix_nice" }, /* 3034 */
- { 0, 0, printargs, "posix_statfs" }, /* 3035 */
- { 0, 0, printargs, "posix_sync" }, /* 3036 */
- { 0, 0, printargs, "posix_kill" }, /* 3037 */
- { 0, 0, printargs, "posix_fstatfs" }, /* 3038 */
- { 0, 0, printargs, "posix_getpgrp" }, /* 3039 */
- { 0, 0, printargs, "posix_syssgi" }, /* 3040 */
- { 0, 0, printargs, "posix_dup" }, /* 3041 */
- { 0, 0, printargs, "posix_pipe" }, /* 3042 */
- { 0, 0, printargs, "posix_times" }, /* 3043 */
- { 0, 0, printargs, "posix_profil" }, /* 3044 */
- { 0, 0, printargs, "posix_lock" }, /* 3045 */
- { 0, 0, printargs, "posix_setgid" }, /* 3046 */
- { 0, 0, printargs, "posix_getgid" }, /* 3047 */
- { 0, 0, printargs, "posix_sig" }, /* 3048 */
- { 0, 0, printargs, "posix_msgsys" }, /* 3049 */
- { 0, 0, printargs, "posix_sysmips" }, /* 3050 */
- { 0, 0, printargs, "posix_sysacct" }, /* 3051 */
- { 0, 0, printargs, "posix_shmsys" }, /* 3052 */
- { 0, 0, printargs, "posix_semsys" }, /* 3053 */
- { 0, 0, printargs, "posix_ioctl" }, /* 3054 */
- { 0, 0, printargs, "posix_uadmin" }, /* 3055 */
- { 0, 0, printargs, "posix_exch" }, /* 3056 */
- { 0, 0, printargs, "posix_utssys" }, /* 3057 */
- { 0, 0, NULL, NULL , }, /* 3058 */
- { 0, 0, printargs, "posix_exece" }, /* 3059 */
- { 0, 0, printargs, "posix_umask" }, /* 3060 */
- { 0, 0, printargs, "posix_chroot" }, /* 3061 */
- { 0, 0, printargs, "posix_fcntl" }, /* 3062 */
- { 0, 0, printargs, "posix_ulimit" }, /* 3063 */
- { 0, 0, NULL, NULL , }, /* 3064 */
- { 0, 0, NULL, NULL , }, /* 3065 */
- { 0, 0, NULL, NULL , }, /* 3066 */
- { 0, 0, NULL, NULL , }, /* 3067 */
- { 0, 0, NULL, NULL , }, /* 3068 */
- { 0, 0, NULL, NULL , }, /* 3069 */
- { 0, 0, printargs, "posix_advfs" }, /* 3070 */
- { 0, 0, printargs, "posix_unadvfs" }, /* 3071 */
- { 0, 0, printargs, "posix_rmount" }, /* 3072 */
- { 0, 0, printargs, "posix_rumount" }, /* 3073 */
- { 0, 0, printargs, "posix_rfstart" }, /* 3074 */
- { 0, 0, NULL, NULL , }, /* 3075 */
- { 0, 0, printargs, "posix_rdebug" }, /* 3076 */
- { 0, 0, printargs, "posix_rfstop" }, /* 3077 */
- { 0, 0, printargs, "posix_rfsys" }, /* 3078 */
- { 0, 0, printargs, "posix_rmdir" }, /* 3079 */
- { 0, 0, printargs, "posix_mkdir" }, /* 3080 */
- { 0, 0, printargs, "posix_getdents" }, /* 3081 */
- { 0, 0, printargs, "posix_sginap" }, /* 3082 */
- { 0, 0, printargs, "posix_sgikopt" }, /* 3083 */
- { 0, 0, printargs, "posix_sysfs" }, /* 3084 */
- { 0, 0, printargs, "posix_getmsg" }, /* 3085 */
- { 0, 0, printargs, "posix_putmsg" }, /* 3086 */
- { 0, 0, printargs, "posix_poll" }, /* 3087 */
- { 0, 0, printargs, "posix_sigreturn" }, /* 3088 */
- { 0, 0, printargs, "posix_accept" }, /* 3089 */
- { 0, 0, printargs, "posix_bind" }, /* 3090 */
- { 0, 0, printargs, "posix_connect" }, /* 3091 */
- { 0, 0, printargs, "posix_gethostid" }, /* 3092 */
- { 0, 0, printargs, "posix_getpeername" }, /* 3093 */
- { 0, 0, printargs, "posix_getsockname" }, /* 3094 */
- { 0, 0, printargs, "posix_getsockopt" }, /* 3095 */
- { 0, 0, printargs, "posix_listen" }, /* 3096 */
- { 0, 0, printargs, "posix_recv" }, /* 3097 */
- { 0, 0, printargs, "posix_recvfrom" }, /* 3098 */
- { 0, 0, printargs, "posix_recvmsg" }, /* 3099 */
- { 0, 0, printargs, "posix_select" }, /* 3100 */
- { 0, 0, printargs, "posix_send" }, /* 3101 */
- { 0, 0, printargs, "posix_sendmsg" }, /* 3102 */
- { 0, 0, printargs, "posix_sendto" }, /* 3103 */
- { 0, 0, printargs, "posix_sethostid" }, /* 3104 */
- { 0, 0, printargs, "posix_setsockopt" }, /* 3105 */
- { 0, 0, printargs, "posix_shutdown" }, /* 3106 */
- { 0, 0, printargs, "posix_socket" }, /* 3107 */
- { 0, 0, printargs, "posix_gethostname" }, /* 3108 */
- { 0, 0, printargs, "posix_sethostname" }, /* 3109 */
- { 0, 0, printargs, "posix_getdomainname" }, /* 3110 */
- { 0, 0, printargs, "posix_setdomainname" }, /* 3111 */
- { 0, 0, printargs, "posix_truncate" }, /* 3112 */
- { 0, 0, printargs, "posix_ftruncate" }, /* 3113 */
- { 0, 0, printargs, "posix_rename" }, /* 3114 */
- { 0, 0, printargs, "posix_symlink" }, /* 3115 */
- { 0, 0, printargs, "posix_readlink" }, /* 3116 */
- { 0, 0, printargs, "posix_lstat" }, /* 3117 */
- { 0, 0, printargs, "posix_nfs_mount" }, /* 3118 */
- { 0, 0, printargs, "posix_nfs_svc" }, /* 3119 */
- { 0, 0, printargs, "posix_nfs_getfh" }, /* 3120 */
- { 0, 0, printargs, "posix_async_daemon" }, /* 3121 */
- { 0, 0, printargs, "posix_exportfs" }, /* 3122 */
- { 0, 0, printargs, "posix_SGI_setregid" }, /* 3123 */
- { 0, 0, printargs, "posix_SGI_setreuid" }, /* 3124 */
- { 0, 0, printargs, "posix_getitimer" }, /* 3125 */
- { 0, 0, printargs, "posix_setitimer" }, /* 3126 */
- { 0, 0, printargs, "posix_adjtime" }, /* 3127 */
- { 0, 0, printargs, "posix_SGI_bsdgettime" }, /* 3128 */
- { 0, 0, printargs, "posix_SGI_sproc" }, /* 3129 */
- { 0, 0, printargs, "posix_SGI_prctl" }, /* 3130 */
- { 0, 0, printargs, "posix_SGI_blkproc" }, /* 3131 */
- { 0, 0, NULL, NULL , }, /* 3132 */
- { 0, 0, printargs, "posix_SGI_sgigsc" }, /* 3133 */
- { 0, 0, printargs, "posix_SGI_mmap" }, /* 3134 */
- { 0, 0, printargs, "posix_SGI_munmap" }, /* 3135 */
- { 0, 0, printargs, "posix_SGI_mprotect" }, /* 3136 */
- { 0, 0, printargs, "posix_SGI_msync" }, /* 3137 */
- { 0, 0, printargs, "posix_SGI_madvise" }, /* 3138 */
- { 0, 0, printargs, "posix_SGI_mpin" }, /* 3139 */
- { 0, 0, printargs, "posix_SGI_getpagesize" }, /* 3140 */
- { 0, 0, printargs, "posix_SGI_libattach" }, /* 3141 */
- { 0, 0, printargs, "posix_SGI_libdetach" }, /* 3142 */
- { 0, 0, printargs, "posix_SGI_getpgrp" }, /* 3143 */
- { 0, 0, printargs, "posix_SGI_setpgrp" }, /* 3144 */
- { 0, 0, NULL, NULL , }, /* 3145 */
- { 0, 0, NULL, NULL , }, /* 3146 */
- { 0, 0, NULL, NULL , }, /* 3147 */
- { 0, 0, NULL, NULL , }, /* 3148 */
- { 0, 0, NULL, NULL , }, /* 3149 */
- { 0, 0, printargs, "posix_cacheflush" }, /* 3150 */
- { 0, 0, printargs, "posix_cachectl" }, /* 3151 */
- { 0, 0, printargs, "posix_fchown" }, /* 3152 */
- { 0, 0, printargs, "posix_fchmod" }, /* 3153 */
- { 0, 0, printargs, "posix_wait3" }, /* 3154 */
- { 0, 0, printargs, "posix_mmap" }, /* 3155 */
- { 0, 0, printargs, "posix_munmap" }, /* 3156 */
- { 0, 0, printargs, "posix_madvise" }, /* 3157 */
- { 0, 0, printargs, "posix_BSD_getpagesize" }, /* 3158 */
- { 0, 0, printargs, "posix_setreuid" }, /* 3159 */
- { 0, 0, printargs, "posix_setregid" }, /* 3160 */
- { 0, 0, printargs, "posix_setpgid" }, /* 3161 */
- { 0, 0, printargs, "posix_getgroups" }, /* 3162 */
- { 0, 0, printargs, "posix_setgroups" }, /* 3163 */
- { 0, 0, printargs, "posix_gettimeofday" }, /* 3164 */
- { 0, 0, printargs, "posix_getrusage" }, /* 3165 */
- { 0, 0, printargs, "posix_getrlimit" }, /* 3166 */
- { 0, 0, printargs, "posix_setrlimit" }, /* 3167 */
- { 0, 0, printargs, "posix_waitpid" }, /* 3168 */
- { 0, 0, printargs, "posix_dup2" }, /* 3169 */
- { 0, 0, NULL, NULL , }, /* 3170 */
- { 0, 0, NULL, NULL , }, /* 3171 */
- { 0, 0, NULL, NULL , }, /* 3172 */
- { 0, 0, NULL, NULL , }, /* 3173 */
- { 0, 0, NULL, NULL , }, /* 3174 */
- { 0, 0, NULL, NULL , }, /* 3175 */
- { 0, 0, NULL, NULL , }, /* 3176 */
- { 0, 0, NULL, NULL , }, /* 3177 */
- { 0, 0, NULL, NULL , }, /* 3178 */
- { 0, 0, NULL, NULL , }, /* 3179 */
- { 0, 0, NULL, NULL , }, /* 3180 */
- { 0, 0, NULL, NULL , }, /* 3181 */
- { 0, 0, NULL, NULL , }, /* 3182 */
- { 0, 0, NULL, NULL , }, /* 3183 */
- { 0, 0, NULL, NULL , }, /* 3184 */
- { 0, 0, NULL, NULL , }, /* 3185 */
- { 0, 0, NULL, NULL , }, /* 3186 */
- { 0, 0, NULL, NULL , }, /* 3187 */
- { 0, 0, NULL, NULL , }, /* 3188 */
- { 0, 0, NULL, NULL , }, /* 3189 */
- { 0, 0, NULL, NULL , }, /* 3190 */
- { 0, 0, NULL, NULL , }, /* 3191 */
- { 0, 0, NULL, NULL , }, /* 3192 */
- { 0, 0, NULL, NULL , }, /* 3193 */
- { 0, 0, NULL, NULL , }, /* 3194 */
- { 0, 0, NULL, NULL , }, /* 3195 */
- { 0, 0, NULL, NULL , }, /* 3196 */
- { 0, 0, NULL, NULL , }, /* 3197 */
- { 0, 0, NULL, NULL , }, /* 3198 */
- { 0, 0, NULL, NULL , }, /* 3199 */
- { 0, 0, NULL, NULL , }, /* 3200 */
- { 0, 0, NULL, NULL , }, /* 3201 */
- { 0, 0, NULL, NULL , }, /* 3202 */
- { 0, 0, NULL, NULL , }, /* 3203 */
- { 0, 0, NULL, NULL , }, /* 3204 */
- { 0, 0, NULL, NULL , }, /* 3205 */
- { 0, 0, NULL, NULL , }, /* 3206 */
- { 0, 0, NULL, NULL , }, /* 3207 */
- { 0, 0, NULL, NULL , }, /* 3208 */
- { 0, 0, NULL, NULL , }, /* 3209 */
- { 0, 0, NULL, NULL , }, /* 3210 */
- { 0, 0, NULL, NULL , }, /* 3211 */
- { 0, 0, NULL, NULL , }, /* 3212 */
- { 0, 0, NULL, NULL , }, /* 3213 */
- { 0, 0, NULL, NULL , }, /* 3214 */
- { 0, 0, NULL, NULL , }, /* 3215 */
- { 0, 0, NULL, NULL , }, /* 3216 */
- { 0, 0, NULL, NULL , }, /* 3217 */
- { 0, 0, NULL, NULL , }, /* 3218 */
- { 0, 0, NULL, NULL , }, /* 3219 */
- { 0, 0, NULL, NULL , }, /* 3220 */
- { 0, 0, NULL, NULL , }, /* 3221 */
- { 0, 0, NULL, NULL , }, /* 3222 */
- { 0, 0, NULL, NULL , }, /* 3223 */
- { 0, 0, NULL, NULL , }, /* 3224 */
- { 0, 0, NULL, NULL , }, /* 3225 */
- { 0, 0, NULL, NULL , }, /* 3226 */
- { 0, 0, NULL, NULL , }, /* 3227 */
- { 0, 0, NULL, NULL , }, /* 3228 */
- { 0, 0, NULL, NULL , }, /* 3229 */
- { 0, 0, NULL, NULL , }, /* 3230 */
- { 0, 0, NULL, NULL , }, /* 3231 */
- { 0, 0, NULL, NULL , }, /* 3232 */
- { 0, 0, NULL, NULL , }, /* 3233 */
- { 0, 0, NULL, NULL , }, /* 3234 */
- { 0, 0, NULL, NULL , }, /* 3235 */
- { 0, 0, NULL, NULL , }, /* 3236 */
- { 0, 0, NULL, NULL , }, /* 3237 */
- { 0, 0, NULL, NULL , }, /* 3238 */
- { 0, 0, NULL, NULL , }, /* 3239 */
- { 0, 0, NULL, NULL , }, /* 3240 */
- { 0, 0, NULL, NULL , }, /* 3241 */
- { 0, 0, NULL, NULL , }, /* 3242 */
- { 0, 0, NULL, NULL , }, /* 3243 */
- { 0, 0, NULL, NULL , }, /* 3244 */
- { 0, 0, NULL, NULL , }, /* 3245 */
- { 0, 0, NULL, NULL , }, /* 3246 */
- { 0, 0, NULL, NULL , }, /* 3247 */
- { 0, 0, NULL, NULL , }, /* 3248 */
- { 0, 0, NULL, NULL , }, /* 3249 */
- { 0, 0, NULL, NULL , }, /* 3250 */
- { 0, 0, NULL, NULL , }, /* 3251 */
- { 0, 0, NULL, NULL , }, /* 3252 */
- { 0, 0, NULL, NULL , }, /* 3253 */
- { 0, 0, NULL, NULL , }, /* 3254 */
- { 0, 0, NULL, NULL , }, /* 3255 */
- { 0, 0, NULL, NULL , }, /* 3256 */
- { 0, 0, NULL, NULL , }, /* 3257 */
- { 0, 0, NULL, NULL , }, /* 3258 */
- { 0, 0, NULL, NULL , }, /* 3259 */
- { 0, 0, printargs, "posix_netboot" }, /* 3260 */
- { 0, 0, printargs, "posix_netunboot" }, /* 3261 */
- { 0, 0, printargs, "posix_rdump" }, /* 3262 */
- { 0, 0, printargs, "posix_setsid" }, /* 3263 */
- { 0, 0, printargs, "posix_getmaxsig" }, /* 3264 */
- { 0, 0, printargs, "posix_sigpending" }, /* 3265 */
- { 0, 0, printargs, "posix_sigprocmask" }, /* 3266 */
- { 0, 0, printargs, "posix_sigsuspend" }, /* 3267 */
- { 0, 0, printargs, "posix_sigaction" }, /* 3268 */
- { 0, 0, NULL, NULL , }, /* 3269 */
- { 0, 0, NULL, NULL , }, /* 3270 */
- { 0, 0, NULL, NULL , }, /* 3271 */
- { 0, 0, NULL, NULL , }, /* 3272 */
- { 0, 0, NULL, NULL , }, /* 3273 */
- { 0, 0, NULL, NULL , }, /* 3274 */
- { 0, 0, NULL, NULL , }, /* 3275 */
- { 0, 0, NULL, NULL , }, /* 3276 */
- { 0, 0, NULL, NULL , }, /* 3277 */
- { 0, 0, NULL, NULL , }, /* 3278 */
- { 0, 0, NULL, NULL , }, /* 3279 */
- { 0, 0, NULL, NULL , }, /* 3280 */
- { 0, 0, NULL, NULL , }, /* 3281 */
- { 0, 0, NULL, NULL , }, /* 3282 */
- { 0, 0, NULL, NULL , }, /* 3283 */
- { 0, 0, NULL, NULL , }, /* 3284 */
- { 0, 0, NULL, NULL , }, /* 3285 */
- { 0, 0, NULL, NULL , }, /* 3286 */
- { 0, 0, NULL, NULL , }, /* 3287 */
- { 0, 0, NULL, NULL , }, /* 3288 */
- { 0, 0, NULL, NULL , }, /* 3289 */
- { 0, 0, NULL, NULL , }, /* 3290 */
- { 0, 0, NULL, NULL , }, /* 3291 */
- { 0, 0, NULL, NULL , }, /* 3292 */
- { 0, 0, NULL, NULL , }, /* 3293 */
- { 0, 0, NULL, NULL , }, /* 3294 */
- { 0, 0, NULL, NULL , }, /* 3295 */
- { 0, 0, NULL, NULL , }, /* 3296 */
- { 0, 0, NULL, NULL , }, /* 3297 */
- { 0, 0, NULL, NULL , }, /* 3298 */
- { 0, 0, NULL, NULL , }, /* 3299 */
- { 0, 0, NULL, NULL , }, /* 3300 */
- { 0, 0, NULL, NULL , }, /* 3301 */
- { 0, 0, NULL, NULL , }, /* 3302 */
- { 0, 0, NULL, NULL , }, /* 3303 */
- { 0, 0, NULL, NULL , }, /* 3304 */
- { 0, 0, NULL, NULL , }, /* 3305 */
- { 0, 0, NULL, NULL , }, /* 3306 */
- { 0, 0, NULL, NULL , }, /* 3307 */
- { 0, 0, NULL, NULL , }, /* 3308 */
- { 0, 0, NULL, NULL , }, /* 3309 */
- { 0, 0, NULL, NULL , }, /* 3310 */
- { 0, 0, NULL, NULL , }, /* 3311 */
- { 0, 0, NULL, NULL , }, /* 3312 */
- { 0, 0, NULL, NULL , }, /* 3313 */
- { 0, 0, NULL, NULL , }, /* 3314 */
- { 0, 0, NULL, NULL , }, /* 3315 */
- { 0, 0, NULL, NULL , }, /* 3316 */
- { 0, 0, NULL, NULL , }, /* 3317 */
- { 0, 0, NULL, NULL , }, /* 3318 */
- { 0, 0, NULL, NULL , }, /* 3319 */
- { 0, 0, NULL, NULL }, /* 3320 */
- { 0, 0, NULL, NULL }, /* 3321 */
- { 0, 0, NULL, NULL }, /* 3322 */
- { 0, 0, NULL, NULL }, /* 3323 */
- { 0, 0, NULL, NULL }, /* 3324 */
- { 0, 0, NULL, NULL }, /* 3325 */
- { 0, 0, NULL, NULL }, /* 3326 */
- { 0, 0, NULL, NULL }, /* 3327 */
- { 0, 0, NULL, NULL }, /* 3328 */
- { 0, 0, NULL, NULL }, /* 3329 */
- { 0, 0, NULL, NULL }, /* 3330 */
- { 0, 0, NULL, NULL }, /* 3331 */
- { 0, 0, NULL, NULL }, /* 3332 */
- { 0, 0, NULL, NULL }, /* 3333 */
- { 0, 0, NULL, NULL }, /* 3334 */
- { 0, 0, NULL, NULL }, /* 3335 */
- { 0, 0, NULL, NULL }, /* 3336 */
- { 0, 0, NULL, NULL }, /* 3337 */
- { 0, 0, NULL, NULL }, /* 3338 */
- { 0, 0, NULL, NULL }, /* 3339 */
- { 0, 0, NULL, NULL }, /* 3340 */
- { 0, 0, NULL, NULL }, /* 3341 */
- { 0, 0, NULL, NULL }, /* 3342 */
- { 0, 0, NULL, NULL }, /* 3343 */
- { 0, 0, NULL, NULL }, /* 3344 */
- { 0, 0, NULL, NULL }, /* 3345 */
- { 0, 0, NULL, NULL }, /* 3346 */
- { 0, 0, NULL, NULL }, /* 3347 */
- { 0, 0, NULL, NULL }, /* 3348 */
- { 0, 0, NULL, NULL }, /* 3349 */
- { 0, 0, NULL, NULL }, /* 3350 */
- { 0, 0, NULL, NULL }, /* 3351 */
- { 0, 0, NULL, NULL }, /* 3352 */
- { 0, 0, NULL, NULL }, /* 3353 */
- { 0, 0, NULL, NULL }, /* 3354 */
- { 0, 0, NULL, NULL }, /* 3355 */
- { 0, 0, NULL, NULL }, /* 3356 */
- { 0, 0, NULL, NULL }, /* 3357 */
- { 0, 0, NULL, NULL }, /* 3358 */
- { 0, 0, NULL, NULL }, /* 3359 */
- { 0, 0, NULL, NULL }, /* 3360 */
- { 0, 0, NULL, NULL }, /* 3361 */
- { 0, 0, NULL, NULL }, /* 3362 */
- { 0, 0, NULL, NULL }, /* 3363 */
- { 0, 0, NULL, NULL }, /* 3364 */
- { 0, 0, NULL, NULL }, /* 3365 */
- { 0, 0, NULL, NULL }, /* 3366 */
- { 0, 0, NULL, NULL }, /* 3367 */
- { 0, 0, NULL, NULL }, /* 3368 */
- { 0, 0, NULL, NULL }, /* 3369 */
- { 0, 0, NULL, NULL }, /* 3370 */
- { 0, 0, NULL, NULL }, /* 3371 */
- { 0, 0, NULL, NULL }, /* 3372 */
- { 0, 0, NULL, NULL }, /* 3373 */
- { 0, 0, NULL, NULL }, /* 3374 */
- { 0, 0, NULL, NULL }, /* 3375 */
- { 0, 0, NULL, NULL }, /* 3376 */
- { 0, 0, NULL, NULL }, /* 3377 */
- { 0, 0, NULL, NULL }, /* 3378 */
- { 0, 0, NULL, NULL }, /* 3379 */
- { 0, 0, NULL, NULL }, /* 3380 */
- { 0, 0, NULL, NULL }, /* 3381 */
- { 0, 0, NULL, NULL }, /* 3382 */
- { 0, 0, NULL, NULL }, /* 3383 */
- { 0, 0, NULL, NULL }, /* 3384 */
- { 0, 0, NULL, NULL }, /* 3385 */
- { 0, 0, NULL, NULL }, /* 3386 */
- { 0, 0, NULL, NULL }, /* 3387 */
- { 0, 0, NULL, NULL }, /* 3388 */
- { 0, 0, NULL, NULL }, /* 3389 */
- { 0, 0, NULL, NULL }, /* 3390 */
- { 0, 0, NULL, NULL }, /* 3391 */
- { 0, 0, NULL, NULL }, /* 3392 */
- { 0, 0, NULL, NULL }, /* 3393 */
- { 0, 0, NULL, NULL }, /* 3394 */
- { 0, 0, NULL, NULL }, /* 3395 */
- { 0, 0, NULL, NULL }, /* 3396 */
- { 0, 0, NULL, NULL }, /* 3397 */
- { 0, 0, NULL, NULL }, /* 3398 */
- { 0, 0, NULL, NULL }, /* 3399 */
- { 0, 0, NULL, NULL }, /* 3400 */
- { 0, 0, NULL, NULL }, /* 3401 */
- { 0, 0, NULL, NULL }, /* 3402 */
- { 0, 0, NULL, NULL }, /* 3403 */
- { 0, 0, NULL, NULL }, /* 3404 */
- { 0, 0, NULL, NULL }, /* 3405 */
- { 0, 0, NULL, NULL }, /* 3406 */
- { 0, 0, NULL, NULL }, /* 3407 */
- { 0, 0, NULL, NULL }, /* 3408 */
- { 0, 0, NULL, NULL }, /* 3409 */
- { 0, 0, NULL, NULL }, /* 3410 */
- { 0, 0, NULL, NULL }, /* 3411 */
- { 0, 0, NULL, NULL }, /* 3412 */
- { 0, 0, NULL, NULL }, /* 3413 */
- { 0, 0, NULL, NULL }, /* 3414 */
- { 0, 0, NULL, NULL }, /* 3415 */
- { 0, 0, NULL, NULL }, /* 3416 */
- { 0, 0, NULL, NULL }, /* 3417 */
- { 0, 0, NULL, NULL }, /* 3418 */
- { 0, 0, NULL, NULL }, /* 3419 */
- { 0, 0, NULL, NULL }, /* 3420 */
- { 0, 0, NULL, NULL }, /* 3421 */
- { 0, 0, NULL, NULL }, /* 3422 */
- { 0, 0, NULL, NULL }, /* 3423 */
- { 0, 0, NULL, NULL }, /* 3424 */
- { 0, 0, NULL, NULL }, /* 3425 */
- { 0, 0, NULL, NULL }, /* 3426 */
- { 0, 0, NULL, NULL }, /* 3427 */
- { 0, 0, NULL, NULL }, /* 3428 */
- { 0, 0, NULL, NULL }, /* 3429 */
- { 0, 0, NULL, NULL }, /* 3430 */
- { 0, 0, NULL, NULL }, /* 3431 */
- { 0, 0, NULL, NULL }, /* 3432 */
- { 0, 0, NULL, NULL }, /* 3433 */
- { 0, 0, NULL, NULL }, /* 3434 */
- { 0, 0, NULL, NULL }, /* 3435 */
- { 0, 0, NULL, NULL }, /* 3436 */
- { 0, 0, NULL, NULL }, /* 3437 */
- { 0, 0, NULL, NULL }, /* 3438 */
- { 0, 0, NULL, NULL }, /* 3439 */
- { 0, 0, NULL, NULL }, /* 3440 */
- { 0, 0, NULL, NULL }, /* 3441 */
- { 0, 0, NULL, NULL }, /* 3442 */
- { 0, 0, NULL, NULL }, /* 3443 */
- { 0, 0, NULL, NULL }, /* 3444 */
- { 0, 0, NULL, NULL }, /* 3445 */
- { 0, 0, NULL, NULL }, /* 3446 */
- { 0, 0, NULL, NULL }, /* 3447 */
- { 0, 0, NULL, NULL }, /* 3448 */
- { 0, 0, NULL, NULL }, /* 3449 */
- { 0, 0, NULL, NULL }, /* 3450 */
- { 0, 0, NULL, NULL }, /* 3451 */
- { 0, 0, NULL, NULL }, /* 3452 */
- { 0, 0, NULL, NULL }, /* 3453 */
- { 0, 0, NULL, NULL }, /* 3454 */
- { 0, 0, NULL, NULL }, /* 3455 */
- { 0, 0, NULL, NULL }, /* 3456 */
- { 0, 0, NULL, NULL }, /* 3457 */
- { 0, 0, NULL, NULL }, /* 3458 */
- { 0, 0, NULL, NULL }, /* 3459 */
- { 0, 0, NULL, NULL }, /* 3460 */
- { 0, 0, NULL, NULL }, /* 3461 */
- { 0, 0, NULL, NULL }, /* 3462 */
- { 0, 0, NULL, NULL }, /* 3463 */
- { 0, 0, NULL, NULL }, /* 3464 */
- { 0, 0, NULL, NULL }, /* 3465 */
- { 0, 0, NULL, NULL }, /* 3466 */
- { 0, 0, NULL, NULL }, /* 3467 */
- { 0, 0, NULL, NULL }, /* 3468 */
- { 0, 0, NULL, NULL }, /* 3469 */
- { 0, 0, NULL, NULL }, /* 3470 */
- { 0, 0, NULL, NULL }, /* 3471 */
- { 0, 0, NULL, NULL }, /* 3472 */
- { 0, 0, NULL, NULL }, /* 3473 */
- { 0, 0, NULL, NULL }, /* 3474 */
- { 0, 0, NULL, NULL }, /* 3475 */
- { 0, 0, NULL, NULL }, /* 3476 */
- { 0, 0, NULL, NULL }, /* 3477 */
- { 0, 0, NULL, NULL }, /* 3478 */
- { 0, 0, NULL, NULL }, /* 3479 */
- { 0, 0, NULL, NULL }, /* 3480 */
- { 0, 0, NULL, NULL }, /* 3481 */
- { 0, 0, NULL, NULL }, /* 3482 */
- { 0, 0, NULL, NULL }, /* 3483 */
- { 0, 0, NULL, NULL }, /* 3484 */
- { 0, 0, NULL, NULL }, /* 3485 */
- { 0, 0, NULL, NULL }, /* 3486 */
- { 0, 0, NULL, NULL }, /* 3487 */
- { 0, 0, NULL, NULL }, /* 3488 */
- { 0, 0, NULL, NULL }, /* 3489 */
- { 0, 0, NULL, NULL }, /* 3490 */
- { 0, 0, NULL, NULL }, /* 3491 */
- { 0, 0, NULL, NULL }, /* 3492 */
- { 0, 0, NULL, NULL }, /* 3493 */
- { 0, 0, NULL, NULL }, /* 3494 */
- { 0, 0, NULL, NULL }, /* 3495 */
- { 0, 0, NULL, NULL }, /* 3496 */
- { 0, 0, NULL, NULL }, /* 3497 */
- { 0, 0, NULL, NULL }, /* 3498 */
- { 0, 0, NULL, NULL }, /* 3499 */
- { 0, 0, NULL, NULL }, /* 3500 */
- { 0, 0, NULL, NULL }, /* 3501 */
- { 0, 0, NULL, NULL }, /* 3502 */
- { 0, 0, NULL, NULL }, /* 3503 */
- { 0, 0, NULL, NULL }, /* 3504 */
- { 0, 0, NULL, NULL }, /* 3505 */
- { 0, 0, NULL, NULL }, /* 3506 */
- { 0, 0, NULL, NULL }, /* 3507 */
- { 0, 0, NULL, NULL }, /* 3508 */
- { 0, 0, NULL, NULL }, /* 3509 */
- { 0, 0, NULL, NULL }, /* 3510 */
- { 0, 0, NULL, NULL }, /* 3511 */
- { 0, 0, NULL, NULL }, /* 3512 */
- { 0, 0, NULL, NULL }, /* 3513 */
- { 0, 0, NULL, NULL }, /* 3514 */
- { 0, 0, NULL, NULL }, /* 3515 */
- { 0, 0, NULL, NULL }, /* 3516 */
- { 0, 0, NULL, NULL }, /* 3517 */
- { 0, 0, NULL, NULL }, /* 3518 */
- { 0, 0, NULL, NULL }, /* 3519 */
- { 0, 0, NULL, NULL }, /* 3520 */
- { 0, 0, NULL, NULL }, /* 3521 */
- { 0, 0, NULL, NULL }, /* 3522 */
- { 0, 0, NULL, NULL }, /* 3523 */
- { 0, 0, NULL, NULL }, /* 3524 */
- { 0, 0, NULL, NULL }, /* 3525 */
- { 0, 0, NULL, NULL }, /* 3526 */
- { 0, 0, NULL, NULL }, /* 3527 */
- { 0, 0, NULL, NULL }, /* 3528 */
- { 0, 0, NULL, NULL }, /* 3529 */
- { 0, 0, NULL, NULL }, /* 3530 */
- { 0, 0, NULL, NULL }, /* 3531 */
- { 0, 0, NULL, NULL }, /* 3532 */
- { 0, 0, NULL, NULL }, /* 3533 */
- { 0, 0, NULL, NULL }, /* 3534 */
- { 0, 0, NULL, NULL }, /* 3535 */
- { 0, 0, NULL, NULL }, /* 3536 */
- { 0, 0, NULL, NULL }, /* 3537 */
- { 0, 0, NULL, NULL }, /* 3538 */
- { 0, 0, NULL, NULL }, /* 3539 */
- { 0, 0, NULL, NULL }, /* 3540 */
- { 0, 0, NULL, NULL }, /* 3541 */
- { 0, 0, NULL, NULL }, /* 3542 */
- { 0, 0, NULL, NULL }, /* 3543 */
- { 0, 0, NULL, NULL }, /* 3544 */
- { 0, 0, NULL, NULL }, /* 3545 */
- { 0, 0, NULL, NULL }, /* 3546 */
- { 0, 0, NULL, NULL }, /* 3547 */
- { 0, 0, NULL, NULL }, /* 3548 */
- { 0, 0, NULL, NULL }, /* 3549 */
- { 0, 0, NULL, NULL }, /* 3550 */
- { 0, 0, NULL, NULL }, /* 3551 */
- { 0, 0, NULL, NULL }, /* 3552 */
- { 0, 0, NULL, NULL }, /* 3553 */
- { 0, 0, NULL, NULL }, /* 3554 */
- { 0, 0, NULL, NULL }, /* 3555 */
- { 0, 0, NULL, NULL }, /* 3556 */
- { 0, 0, NULL, NULL }, /* 3557 */
- { 0, 0, NULL, NULL }, /* 3558 */
- { 0, 0, NULL, NULL }, /* 3559 */
- { 0, 0, NULL, NULL }, /* 3560 */
- { 0, 0, NULL, NULL }, /* 3561 */
- { 0, 0, NULL, NULL }, /* 3562 */
- { 0, 0, NULL, NULL }, /* 3563 */
- { 0, 0, NULL, NULL }, /* 3564 */
- { 0, 0, NULL, NULL }, /* 3565 */
- { 0, 0, NULL, NULL }, /* 3566 */
- { 0, 0, NULL, NULL }, /* 3567 */
- { 0, 0, NULL, NULL }, /* 3568 */
- { 0, 0, NULL, NULL }, /* 3569 */
- { 0, 0, NULL, NULL }, /* 3570 */
- { 0, 0, NULL, NULL }, /* 3571 */
- { 0, 0, NULL, NULL }, /* 3572 */
- { 0, 0, NULL, NULL }, /* 3573 */
- { 0, 0, NULL, NULL }, /* 3574 */
- { 0, 0, NULL, NULL }, /* 3575 */
- { 0, 0, NULL, NULL }, /* 3576 */
- { 0, 0, NULL, NULL }, /* 3577 */
- { 0, 0, NULL, NULL }, /* 3578 */
- { 0, 0, NULL, NULL }, /* 3579 */
- { 0, 0, NULL, NULL }, /* 3580 */
- { 0, 0, NULL, NULL }, /* 3581 */
- { 0, 0, NULL, NULL }, /* 3582 */
- { 0, 0, NULL, NULL }, /* 3583 */
- { 0, 0, NULL, NULL }, /* 3584 */
- { 0, 0, NULL, NULL }, /* 3585 */
- { 0, 0, NULL, NULL }, /* 3586 */
- { 0, 0, NULL, NULL }, /* 3587 */
- { 0, 0, NULL, NULL }, /* 3588 */
- { 0, 0, NULL, NULL }, /* 3589 */
- { 0, 0, NULL, NULL }, /* 3590 */
- { 0, 0, NULL, NULL }, /* 3591 */
- { 0, 0, NULL, NULL }, /* 3592 */
- { 0, 0, NULL, NULL }, /* 3593 */
- { 0, 0, NULL, NULL }, /* 3594 */
- { 0, 0, NULL, NULL }, /* 3595 */
- { 0, 0, NULL, NULL }, /* 3596 */
- { 0, 0, NULL, NULL }, /* 3597 */
- { 0, 0, NULL, NULL }, /* 3598 */
- { 0, 0, NULL, NULL }, /* 3599 */
- { 0, 0, NULL, NULL }, /* 3600 */
- { 0, 0, NULL, NULL }, /* 3601 */
- { 0, 0, NULL, NULL }, /* 3602 */
- { 0, 0, NULL, NULL }, /* 3603 */
- { 0, 0, NULL, NULL }, /* 3604 */
- { 0, 0, NULL, NULL }, /* 3605 */
- { 0, 0, NULL, NULL }, /* 3606 */
- { 0, 0, NULL, NULL }, /* 3607 */
- { 0, 0, NULL, NULL }, /* 3608 */
- { 0, 0, NULL, NULL }, /* 3609 */
- { 0, 0, NULL, NULL }, /* 3610 */
- { 0, 0, NULL, NULL }, /* 3611 */
- { 0, 0, NULL, NULL }, /* 3612 */
- { 0, 0, NULL, NULL }, /* 3613 */
- { 0, 0, NULL, NULL }, /* 3614 */
- { 0, 0, NULL, NULL }, /* 3615 */
- { 0, 0, NULL, NULL }, /* 3616 */
- { 0, 0, NULL, NULL }, /* 3617 */
- { 0, 0, NULL, NULL }, /* 3618 */
- { 0, 0, NULL, NULL }, /* 3619 */
- { 0, 0, NULL, NULL }, /* 3620 */
- { 0, 0, NULL, NULL }, /* 3621 */
- { 0, 0, NULL, NULL }, /* 3622 */
- { 0, 0, NULL, NULL }, /* 3623 */
- { 0, 0, NULL, NULL }, /* 3624 */
- { 0, 0, NULL, NULL }, /* 3625 */
- { 0, 0, NULL, NULL }, /* 3626 */
- { 0, 0, NULL, NULL }, /* 3627 */
- { 0, 0, NULL, NULL }, /* 3628 */
- { 0, 0, NULL, NULL }, /* 3629 */
- { 0, 0, NULL, NULL }, /* 3630 */
- { 0, 0, NULL, NULL }, /* 3631 */
- { 0, 0, NULL, NULL }, /* 3632 */
- { 0, 0, NULL, NULL }, /* 3633 */
- { 0, 0, NULL, NULL }, /* 3634 */
- { 0, 0, NULL, NULL }, /* 3635 */
- { 0, 0, NULL, NULL }, /* 3636 */
- { 0, 0, NULL, NULL }, /* 3637 */
- { 0, 0, NULL, NULL }, /* 3638 */
- { 0, 0, NULL, NULL }, /* 3639 */
- { 0, 0, NULL, NULL }, /* 3640 */
- { 0, 0, NULL, NULL }, /* 3641 */
- { 0, 0, NULL, NULL }, /* 3642 */
- { 0, 0, NULL, NULL }, /* 3643 */
- { 0, 0, NULL, NULL }, /* 3644 */
- { 0, 0, NULL, NULL }, /* 3645 */
- { 0, 0, NULL, NULL }, /* 3646 */
- { 0, 0, NULL, NULL }, /* 3647 */
- { 0, 0, NULL, NULL }, /* 3648 */
- { 0, 0, NULL, NULL }, /* 3649 */
- { 0, 0, NULL, NULL }, /* 3650 */
- { 0, 0, NULL, NULL }, /* 3651 */
- { 0, 0, NULL, NULL }, /* 3652 */
- { 0, 0, NULL, NULL }, /* 3653 */
- { 0, 0, NULL, NULL }, /* 3654 */
- { 0, 0, NULL, NULL }, /* 3655 */
- { 0, 0, NULL, NULL }, /* 3656 */
- { 0, 0, NULL, NULL }, /* 3657 */
- { 0, 0, NULL, NULL }, /* 3658 */
- { 0, 0, NULL, NULL }, /* 3659 */
- { 0, 0, NULL, NULL }, /* 3660 */
- { 0, 0, NULL, NULL }, /* 3661 */
- { 0, 0, NULL, NULL }, /* 3662 */
- { 0, 0, NULL, NULL }, /* 3663 */
- { 0, 0, NULL, NULL }, /* 3664 */
- { 0, 0, NULL, NULL }, /* 3665 */
- { 0, 0, NULL, NULL }, /* 3666 */
- { 0, 0, NULL, NULL }, /* 3667 */
- { 0, 0, NULL, NULL }, /* 3668 */
- { 0, 0, NULL, NULL }, /* 3669 */
- { 0, 0, NULL, NULL }, /* 3670 */
- { 0, 0, NULL, NULL }, /* 3671 */
- { 0, 0, NULL, NULL }, /* 3672 */
- { 0, 0, NULL, NULL }, /* 3673 */
- { 0, 0, NULL, NULL }, /* 3674 */
- { 0, 0, NULL, NULL }, /* 3675 */
- { 0, 0, NULL, NULL }, /* 3676 */
- { 0, 0, NULL, NULL }, /* 3677 */
- { 0, 0, NULL, NULL }, /* 3678 */
- { 0, 0, NULL, NULL }, /* 3679 */
- { 0, 0, NULL, NULL }, /* 3680 */
- { 0, 0, NULL, NULL }, /* 3681 */
- { 0, 0, NULL, NULL }, /* 3682 */
- { 0, 0, NULL, NULL }, /* 3683 */
- { 0, 0, NULL, NULL }, /* 3684 */
- { 0, 0, NULL, NULL }, /* 3685 */
- { 0, 0, NULL, NULL }, /* 3686 */
- { 0, 0, NULL, NULL }, /* 3687 */
- { 0, 0, NULL, NULL }, /* 3688 */
- { 0, 0, NULL, NULL }, /* 3689 */
- { 0, 0, NULL, NULL }, /* 3690 */
- { 0, 0, NULL, NULL }, /* 3691 */
- { 0, 0, NULL, NULL }, /* 3692 */
- { 0, 0, NULL, NULL }, /* 3693 */
- { 0, 0, NULL, NULL }, /* 3694 */
- { 0, 0, NULL, NULL }, /* 3695 */
- { 0, 0, NULL, NULL }, /* 3696 */
- { 0, 0, NULL, NULL }, /* 3697 */
- { 0, 0, NULL, NULL }, /* 3698 */
- { 0, 0, NULL, NULL }, /* 3699 */
- { 0, 0, NULL, NULL }, /* 3700 */
- { 0, 0, NULL, NULL }, /* 3701 */
- { 0, 0, NULL, NULL }, /* 3702 */
- { 0, 0, NULL, NULL }, /* 3703 */
- { 0, 0, NULL, NULL }, /* 3704 */
- { 0, 0, NULL, NULL }, /* 3705 */
- { 0, 0, NULL, NULL }, /* 3706 */
- { 0, 0, NULL, NULL }, /* 3707 */
- { 0, 0, NULL, NULL }, /* 3708 */
- { 0, 0, NULL, NULL }, /* 3709 */
- { 0, 0, NULL, NULL }, /* 3710 */
- { 0, 0, NULL, NULL }, /* 3711 */
- { 0, 0, NULL, NULL }, /* 3712 */
- { 0, 0, NULL, NULL }, /* 3713 */
- { 0, 0, NULL, NULL }, /* 3714 */
- { 0, 0, NULL, NULL }, /* 3715 */
- { 0, 0, NULL, NULL }, /* 3716 */
- { 0, 0, NULL, NULL }, /* 3717 */
- { 0, 0, NULL, NULL }, /* 3718 */
- { 0, 0, NULL, NULL }, /* 3719 */
- { 0, 0, NULL, NULL }, /* 3720 */
- { 0, 0, NULL, NULL }, /* 3721 */
- { 0, 0, NULL, NULL }, /* 3722 */
- { 0, 0, NULL, NULL }, /* 3723 */
- { 0, 0, NULL, NULL }, /* 3724 */
- { 0, 0, NULL, NULL }, /* 3725 */
- { 0, 0, NULL, NULL }, /* 3726 */
- { 0, 0, NULL, NULL }, /* 3727 */
- { 0, 0, NULL, NULL }, /* 3728 */
- { 0, 0, NULL, NULL }, /* 3729 */
- { 0, 0, NULL, NULL }, /* 3730 */
- { 0, 0, NULL, NULL }, /* 3731 */
- { 0, 0, NULL, NULL }, /* 3732 */
- { 0, 0, NULL, NULL }, /* 3733 */
- { 0, 0, NULL, NULL }, /* 3734 */
- { 0, 0, NULL, NULL }, /* 3735 */
- { 0, 0, NULL, NULL }, /* 3736 */
- { 0, 0, NULL, NULL }, /* 3737 */
- { 0, 0, NULL, NULL }, /* 3738 */
- { 0, 0, NULL, NULL }, /* 3739 */
- { 0, 0, NULL, NULL }, /* 3740 */
- { 0, 0, NULL, NULL }, /* 3741 */
- { 0, 0, NULL, NULL }, /* 3742 */
- { 0, 0, NULL, NULL }, /* 3743 */
- { 0, 0, NULL, NULL }, /* 3744 */
- { 0, 0, NULL, NULL }, /* 3745 */
- { 0, 0, NULL, NULL }, /* 3746 */
- { 0, 0, NULL, NULL }, /* 3747 */
- { 0, 0, NULL, NULL }, /* 3748 */
- { 0, 0, NULL, NULL }, /* 3749 */
- { 0, 0, NULL, NULL }, /* 3750 */
- { 0, 0, NULL, NULL }, /* 3751 */
- { 0, 0, NULL, NULL }, /* 3752 */
- { 0, 0, NULL, NULL }, /* 3753 */
- { 0, 0, NULL, NULL }, /* 3754 */
- { 0, 0, NULL, NULL }, /* 3755 */
- { 0, 0, NULL, NULL }, /* 3756 */
- { 0, 0, NULL, NULL }, /* 3757 */
- { 0, 0, NULL, NULL }, /* 3758 */
- { 0, 0, NULL, NULL }, /* 3759 */
- { 0, 0, NULL, NULL }, /* 3760 */
- { 0, 0, NULL, NULL }, /* 3761 */
- { 0, 0, NULL, NULL }, /* 3762 */
- { 0, 0, NULL, NULL }, /* 3763 */
- { 0, 0, NULL, NULL }, /* 3764 */
- { 0, 0, NULL, NULL }, /* 3765 */
- { 0, 0, NULL, NULL }, /* 3766 */
- { 0, 0, NULL, NULL }, /* 3767 */
- { 0, 0, NULL, NULL }, /* 3768 */
- { 0, 0, NULL, NULL }, /* 3769 */
- { 0, 0, NULL, NULL }, /* 3770 */
- { 0, 0, NULL, NULL }, /* 3771 */
- { 0, 0, NULL, NULL }, /* 3772 */
- { 0, 0, NULL, NULL }, /* 3773 */
- { 0, 0, NULL, NULL }, /* 3774 */
- { 0, 0, NULL, NULL }, /* 3775 */
- { 0, 0, NULL, NULL }, /* 3776 */
- { 0, 0, NULL, NULL }, /* 3777 */
- { 0, 0, NULL, NULL }, /* 3778 */
- { 0, 0, NULL, NULL }, /* 3779 */
- { 0, 0, NULL, NULL }, /* 3780 */
- { 0, 0, NULL, NULL }, /* 3781 */
- { 0, 0, NULL, NULL }, /* 3782 */
- { 0, 0, NULL, NULL }, /* 3783 */
- { 0, 0, NULL, NULL }, /* 3784 */
- { 0, 0, NULL, NULL }, /* 3785 */
- { 0, 0, NULL, NULL }, /* 3786 */
- { 0, 0, NULL, NULL }, /* 3787 */
- { 0, 0, NULL, NULL }, /* 3788 */
- { 0, 0, NULL, NULL }, /* 3789 */
- { 0, 0, NULL, NULL }, /* 3790 */
- { 0, 0, NULL, NULL }, /* 3791 */
- { 0, 0, NULL, NULL }, /* 3792 */
- { 0, 0, NULL, NULL }, /* 3793 */
- { 0, 0, NULL, NULL }, /* 3794 */
- { 0, 0, NULL, NULL }, /* 3795 */
- { 0, 0, NULL, NULL }, /* 3796 */
- { 0, 0, NULL, NULL }, /* 3797 */
- { 0, 0, NULL, NULL }, /* 3798 */
- { 0, 0, NULL, NULL }, /* 3799 */
- { 0, 0, NULL, NULL }, /* 3800 */
- { 0, 0, NULL, NULL }, /* 3801 */
- { 0, 0, NULL, NULL }, /* 3802 */
- { 0, 0, NULL, NULL }, /* 3803 */
- { 0, 0, NULL, NULL }, /* 3804 */
- { 0, 0, NULL, NULL }, /* 3805 */
- { 0, 0, NULL, NULL }, /* 3806 */
- { 0, 0, NULL, NULL }, /* 3807 */
- { 0, 0, NULL, NULL }, /* 3808 */
- { 0, 0, NULL, NULL }, /* 3809 */
- { 0, 0, NULL, NULL }, /* 3810 */
- { 0, 0, NULL, NULL }, /* 3811 */
- { 0, 0, NULL, NULL }, /* 3812 */
- { 0, 0, NULL, NULL }, /* 3813 */
- { 0, 0, NULL, NULL }, /* 3814 */
- { 0, 0, NULL, NULL }, /* 3815 */
- { 0, 0, NULL, NULL }, /* 3816 */
- { 0, 0, NULL, NULL }, /* 3817 */
- { 0, 0, NULL, NULL }, /* 3818 */
- { 0, 0, NULL, NULL }, /* 3819 */
- { 0, 0, NULL, NULL }, /* 3820 */
- { 0, 0, NULL, NULL }, /* 3821 */
- { 0, 0, NULL, NULL }, /* 3822 */
- { 0, 0, NULL, NULL }, /* 3823 */
- { 0, 0, NULL, NULL }, /* 3824 */
- { 0, 0, NULL, NULL }, /* 3825 */
- { 0, 0, NULL, NULL }, /* 3826 */
- { 0, 0, NULL, NULL }, /* 3827 */
- { 0, 0, NULL, NULL }, /* 3828 */
- { 0, 0, NULL, NULL }, /* 3829 */
- { 0, 0, NULL, NULL }, /* 3830 */
- { 0, 0, NULL, NULL }, /* 3831 */
- { 0, 0, NULL, NULL }, /* 3832 */
- { 0, 0, NULL, NULL }, /* 3833 */
- { 0, 0, NULL, NULL }, /* 3834 */
- { 0, 0, NULL, NULL }, /* 3835 */
- { 0, 0, NULL, NULL }, /* 3836 */
- { 0, 0, NULL, NULL }, /* 3837 */
- { 0, 0, NULL, NULL }, /* 3838 */
- { 0, 0, NULL, NULL }, /* 3839 */
- { 0, 0, NULL, NULL }, /* 3840 */
- { 0, 0, NULL, NULL }, /* 3841 */
- { 0, 0, NULL, NULL }, /* 3842 */
- { 0, 0, NULL, NULL }, /* 3843 */
- { 0, 0, NULL, NULL }, /* 3844 */
- { 0, 0, NULL, NULL }, /* 3845 */
- { 0, 0, NULL, NULL }, /* 3846 */
- { 0, 0, NULL, NULL }, /* 3847 */
- { 0, 0, NULL, NULL }, /* 3848 */
- { 0, 0, NULL, NULL }, /* 3849 */
- { 0, 0, NULL, NULL }, /* 3850 */
- { 0, 0, NULL, NULL }, /* 3851 */
- { 0, 0, NULL, NULL }, /* 3852 */
- { 0, 0, NULL, NULL }, /* 3853 */
- { 0, 0, NULL, NULL }, /* 3854 */
- { 0, 0, NULL, NULL }, /* 3855 */
- { 0, 0, NULL, NULL }, /* 3856 */
- { 0, 0, NULL, NULL }, /* 3857 */
- { 0, 0, NULL, NULL }, /* 3858 */
- { 0, 0, NULL, NULL }, /* 3859 */
- { 0, 0, NULL, NULL }, /* 3860 */
- { 0, 0, NULL, NULL }, /* 3861 */
- { 0, 0, NULL, NULL }, /* 3862 */
- { 0, 0, NULL, NULL }, /* 3863 */
- { 0, 0, NULL, NULL }, /* 3864 */
- { 0, 0, NULL, NULL }, /* 3865 */
- { 0, 0, NULL, NULL }, /* 3866 */
- { 0, 0, NULL, NULL }, /* 3867 */
- { 0, 0, NULL, NULL }, /* 3868 */
- { 0, 0, NULL, NULL }, /* 3869 */
- { 0, 0, NULL, NULL }, /* 3870 */
- { 0, 0, NULL, NULL }, /* 3871 */
- { 0, 0, NULL, NULL }, /* 3872 */
- { 0, 0, NULL, NULL }, /* 3873 */
- { 0, 0, NULL, NULL }, /* 3874 */
- { 0, 0, NULL, NULL }, /* 3875 */
- { 0, 0, NULL, NULL }, /* 3876 */
- { 0, 0, NULL, NULL }, /* 3877 */
- { 0, 0, NULL, NULL }, /* 3878 */
- { 0, 0, NULL, NULL }, /* 3879 */
- { 0, 0, NULL, NULL }, /* 3880 */
- { 0, 0, NULL, NULL }, /* 3881 */
- { 0, 0, NULL, NULL }, /* 3882 */
- { 0, 0, NULL, NULL }, /* 3883 */
- { 0, 0, NULL, NULL }, /* 3884 */
- { 0, 0, NULL, NULL }, /* 3885 */
- { 0, 0, NULL, NULL }, /* 3886 */
- { 0, 0, NULL, NULL }, /* 3887 */
- { 0, 0, NULL, NULL }, /* 3888 */
- { 0, 0, NULL, NULL }, /* 3889 */
- { 0, 0, NULL, NULL }, /* 3890 */
- { 0, 0, NULL, NULL }, /* 3891 */
- { 0, 0, NULL, NULL }, /* 3892 */
- { 0, 0, NULL, NULL }, /* 3893 */
- { 0, 0, NULL, NULL }, /* 3894 */
- { 0, 0, NULL, NULL }, /* 3895 */
- { 0, 0, NULL, NULL }, /* 3896 */
- { 0, 0, NULL, NULL }, /* 3897 */
- { 0, 0, NULL, NULL }, /* 3898 */
- { 0, 0, NULL, NULL }, /* 3899 */
- { 0, 0, NULL, NULL }, /* 3900 */
- { 0, 0, NULL, NULL }, /* 3901 */
- { 0, 0, NULL, NULL }, /* 3902 */
- { 0, 0, NULL, NULL }, /* 3903 */
- { 0, 0, NULL, NULL }, /* 3904 */
- { 0, 0, NULL, NULL }, /* 3905 */
- { 0, 0, NULL, NULL }, /* 3906 */
- { 0, 0, NULL, NULL }, /* 3907 */
- { 0, 0, NULL, NULL }, /* 3908 */
- { 0, 0, NULL, NULL }, /* 3909 */
- { 0, 0, NULL, NULL }, /* 3910 */
- { 0, 0, NULL, NULL }, /* 3911 */
- { 0, 0, NULL, NULL }, /* 3912 */
- { 0, 0, NULL, NULL }, /* 3913 */
- { 0, 0, NULL, NULL }, /* 3914 */
- { 0, 0, NULL, NULL }, /* 3915 */
- { 0, 0, NULL, NULL }, /* 3916 */
- { 0, 0, NULL, NULL }, /* 3917 */
- { 0, 0, NULL, NULL }, /* 3918 */
- { 0, 0, NULL, NULL }, /* 3919 */
- { 0, 0, NULL, NULL }, /* 3920 */
- { 0, 0, NULL, NULL }, /* 3921 */
- { 0, 0, NULL, NULL }, /* 3922 */
- { 0, 0, NULL, NULL }, /* 3923 */
- { 0, 0, NULL, NULL }, /* 3924 */
- { 0, 0, NULL, NULL }, /* 3925 */
- { 0, 0, NULL, NULL }, /* 3926 */
- { 0, 0, NULL, NULL }, /* 3927 */
- { 0, 0, NULL, NULL }, /* 3928 */
- { 0, 0, NULL, NULL }, /* 3929 */
- { 0, 0, NULL, NULL }, /* 3930 */
- { 0, 0, NULL, NULL }, /* 3931 */
- { 0, 0, NULL, NULL }, /* 3932 */
- { 0, 0, NULL, NULL }, /* 3933 */
- { 0, 0, NULL, NULL }, /* 3934 */
- { 0, 0, NULL, NULL }, /* 3935 */
- { 0, 0, NULL, NULL }, /* 3936 */
- { 0, 0, NULL, NULL }, /* 3937 */
- { 0, 0, NULL, NULL }, /* 3938 */
- { 0, 0, NULL, NULL }, /* 3939 */
- { 0, 0, NULL, NULL }, /* 3940 */
- { 0, 0, NULL, NULL }, /* 3941 */
- { 0, 0, NULL, NULL }, /* 3942 */
- { 0, 0, NULL, NULL }, /* 3943 */
- { 0, 0, NULL, NULL }, /* 3944 */
- { 0, 0, NULL, NULL }, /* 3945 */
- { 0, 0, NULL, NULL }, /* 3946 */
- { 0, 0, NULL, NULL }, /* 3947 */
- { 0, 0, NULL, NULL }, /* 3948 */
- { 0, 0, NULL, NULL }, /* 3949 */
- { 0, 0, NULL, NULL }, /* 3950 */
- { 0, 0, NULL, NULL }, /* 3951 */
- { 0, 0, NULL, NULL }, /* 3952 */
- { 0, 0, NULL, NULL }, /* 3953 */
- { 0, 0, NULL, NULL }, /* 3954 */
- { 0, 0, NULL, NULL }, /* 3955 */
- { 0, 0, NULL, NULL }, /* 3956 */
- { 0, 0, NULL, NULL }, /* 3957 */
- { 0, 0, NULL, NULL }, /* 3958 */
- { 0, 0, NULL, NULL }, /* 3959 */
- { 0, 0, NULL, NULL }, /* 3960 */
- { 0, 0, NULL, NULL }, /* 3961 */
- { 0, 0, NULL, NULL }, /* 3962 */
- { 0, 0, NULL, NULL }, /* 3963 */
- { 0, 0, NULL, NULL }, /* 3964 */
- { 0, 0, NULL, NULL }, /* 3965 */
- { 0, 0, NULL, NULL }, /* 3966 */
- { 0, 0, NULL, NULL }, /* 3967 */
- { 0, 0, NULL, NULL }, /* 3968 */
- { 0, 0, NULL, NULL }, /* 3969 */
- { 0, 0, NULL, NULL }, /* 3970 */
- { 0, 0, NULL, NULL }, /* 3971 */
- { 0, 0, NULL, NULL }, /* 3972 */
- { 0, 0, NULL, NULL }, /* 3973 */
- { 0, 0, NULL, NULL }, /* 3974 */
- { 0, 0, NULL, NULL }, /* 3975 */
- { 0, 0, NULL, NULL }, /* 3976 */
- { 0, 0, NULL, NULL }, /* 3977 */
- { 0, 0, NULL, NULL }, /* 3978 */
- { 0, 0, NULL, NULL }, /* 3979 */
- { 0, 0, NULL, NULL }, /* 3980 */
- { 0, 0, NULL, NULL }, /* 3981 */
- { 0, 0, NULL, NULL }, /* 3982 */
- { 0, 0, NULL, NULL }, /* 3983 */
- { 0, 0, NULL, NULL }, /* 3984 */
- { 0, 0, NULL, NULL }, /* 3985 */
- { 0, 0, NULL, NULL }, /* 3986 */
- { 0, 0, NULL, NULL }, /* 3987 */
- { 0, 0, NULL, NULL }, /* 3988 */
- { 0, 0, NULL, NULL }, /* 3989 */
- { 0, 0, NULL, NULL }, /* 3990 */
- { 0, 0, NULL, NULL }, /* 3991 */
- { 0, 0, NULL, NULL }, /* 3992 */
- { 0, 0, NULL, NULL }, /* 3993 */
- { 0, 0, NULL, NULL }, /* 3994 */
- { 0, 0, NULL, NULL }, /* 3995 */
- { 0, 0, NULL, NULL }, /* 3996 */
- { 0, 0, NULL, NULL }, /* 3997 */
- { 0, 0, NULL, NULL }, /* 3998 */
- { 0, 0, NULL, NULL }, /* 3999 */ /* end of POSIX */
-#if !defined(LINUX_MIPSN32) && !defined(LINUX_MIPSN64)
- /* For an O32 strace, decode the o32 syscalls. */
- { MA, 0, printargs, "syscall" }, /* 4000 */ /* start of Linux o32 */
- { 1, TP, sys_exit, "exit" }, /* 4001 */
- { 0, TP, sys_fork, "fork" }, /* 4002 */
- { 3, TD, sys_read, "read" }, /* 4003 */
- { 3, TD, sys_write, "write" }, /* 4004 */
- { 3, TD|TF, sys_open, "open" }, /* 4005 */
- { 1, TD, sys_close, "close" }, /* 4006 */
- { 3, TP, sys_waitpid, "waitpid" }, /* 4007 */
- { 2, TD|TF, sys_creat, "creat" }, /* 4008 */
- { 2, TF, sys_link, "link" }, /* 4009 */
- { 1, TF, sys_unlink, "unlink" }, /* 4010 */
- { 3, TF|TP, sys_execve, "execve" }, /* 4011 */
- { 1, TF, sys_chdir, "chdir" }, /* 4012 */
- { 1, 0, sys_time, "time" }, /* 4013 */
- { 3, TF, sys_mknod, "mknod" }, /* 4014 */
- { 2, TF, sys_chmod, "chmod" }, /* 4015 */
- { 3, TF, sys_chown, "lchown" }, /* 4016 */
- { 0, 0, sys_break, "break" }, /* 4017 */
- { 2, TF, sys_oldstat, "oldstat" }, /* 4018 */
- { 3, TD, sys_lseek, "lseek" }, /* 4019 */
- { 0, 0, sys_getpid, "getpid" }, /* 4020 */
- { 5, TF, sys_mount, "mount" }, /* 4021 */
- { 1, TF, sys_umount, "oldumount" }, /* 4022 */
- { 1, 0, sys_setuid, "setuid" }, /* 4023 */
- { 0, NF, sys_getuid, "getuid" }, /* 4024 */
- { 1, 0, sys_stime, "stime" }, /* 4025 */
- { 4, 0, sys_ptrace, "ptrace" }, /* 4026 */
- { 1, 0, sys_alarm, "alarm" }, /* 4027 */
- { 2, TF, sys_oldfstat, "oldfstat" }, /* 4028 */
- { 0, TS, sys_pause, "pause" }, /* 4029 */
- { 2, TF, sys_utime, "utime" }, /* 4030 */
- { 0, 0, sys_stty, "stty" }, /* 4031 */
- { 0, 0, sys_gtty, "gtty" }, /* 4032 */
- { 2, TF, sys_access, "access" }, /* 4033 */
- { 1, 0, sys_nice, "nice" }, /* 4034 */
- { 1, 0, sys_ftime, "ftime" }, /* 4035 */
- { 0, 0, sys_sync, "sync" }, /* 4036 */
- { 2, TS, sys_kill, "kill" }, /* 4037 */
- { 2, TF, sys_rename, "rename" }, /* 4038 */
- { 2, TF, sys_mkdir, "mkdir" }, /* 4039 */
- { 1, TF, sys_rmdir, "rmdir" }, /* 4040 */
- { 1, TD, sys_dup, "dup" }, /* 4041 */
- { 1, TD, sys_pipe, "pipe" }, /* 4042 */
- { 1, 0, sys_times, "times" }, /* 4043 */
- { 0, 0, sys_prof, "prof" }, /* 4044 */
- { 1, 0, sys_brk, "brk" }, /* 4045 */
- { 1, 0, sys_setgid, "setgid" }, /* 4046 */
- { 0, NF, sys_getgid, "getgid" }, /* 4047 */
- { 1, TS, sys_signal, "signal" }, /* 4048 */
- { 0, NF, sys_geteuid, "geteuid" }, /* 4049 */
- { 0, NF, sys_getegid, "getegid" }, /* 4050 */
- { 1, TF, sys_acct, "acct" }, /* 4051 */
- { 2, TF, sys_umount2, "umount" }, /* 4052 */
- { 0, 0, sys_lock, "lock" }, /* 4053 */
- { 3, TD, sys_ioctl, "ioctl" }, /* 4054 */
- { 3, TD, sys_fcntl, "fcntl" }, /* 4055 */
- { 0, 0, sys_mpx, "mpx" }, /* 4056 */
- { 2, 0, sys_setpgid, "setpgid" }, /* 4057 */
- { 0, 0, sys_ulimit, "ulimit" }, /* 4058 */
- { 1, 0, sys_oldolduname, "oldolduname" }, /* 4059 */
- { 1, 0, sys_umask, "umask" }, /* 4060 */
- { 1, TF, sys_chroot, "chroot" }, /* 4061 */
- { 2, 0, sys_ustat, "ustat" }, /* 4062 */
- { 2, TD, sys_dup2, "dup2" }, /* 4063 */
- { 0, 0, sys_getppid, "getppid" }, /* 4064 */
- { 0, 0, sys_getpgrp, "getpgrp" }, /* 4065 */
- { 0, 0, sys_setsid, "setsid" }, /* 4066 */
- { 3, TS, sys_sigaction, "sigaction" }, /* 4067 */
- { 0, TS, sys_siggetmask, "sgetmask" }, /* 4068 */
- { 1, TS, sys_sigsetmask, "ssetmask" }, /* 4069 */
- { 2, 0, sys_setreuid, "setreuid" }, /* 4070 */
- { 2, 0, sys_setregid, "setregid" }, /* 4071 */
- { 3, TS, sys_sigsuspend, "sigsuspend" }, /* 4072 */
- { 1, TS, sys_sigpending, "sigpending" }, /* 4073 */
- { 2, 0, sys_sethostname, "sethostname" }, /* 4074 */
- { 2, 0, sys_setrlimit, "setrlimit" }, /* 4075 */
- { 2, 0, sys_getrlimit, "getrlimit" }, /* 4076 */
- { 2, 0, sys_getrusage, "getrusage" }, /* 4077 */
- { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 4078 */
- { 2, 0, sys_settimeofday, "settimeofday" }, /* 4079 */
- { 2, 0, sys_getgroups, "getgroups" }, /* 4080 */
- { 2, 0, sys_setgroups, "setgroups" }, /* 4081 */
- { 0, 0, printargs, "reserved82" }, /* 4082 */
- { 2, TF, sys_symlink, "symlink" }, /* 4083 */
- { 2, TF, sys_oldlstat, "oldlstat" }, /* 4084 */
- { 3, TF, sys_readlink, "readlink" }, /* 4085 */
- { 1, TF, sys_uselib, "uselib" }, /* 4086 */
- { 2, TF, sys_swapon, "swapon" }, /* 4087 */
- { 4, 0, sys_reboot, "reboot" }, /* 4088 */
- { 3, TD, sys_readdir, "readdir" }, /* 4089 */
- { 6, TD, sys_mmap, "old_mmap" }, /* 4090 */
- { 2, 0, sys_munmap, "munmap" }, /* 4091 */
- { 2, TF, sys_truncate, "truncate" }, /* 4092 */
- { 2, TD, sys_ftruncate, "ftruncate" }, /* 4093 */
- { 2, TD, sys_fchmod, "fchmod" }, /* 4094 */
- { 3, TD, sys_fchown, "fchown" }, /* 4095 */
- { 2, 0, sys_getpriority, "getpriority" }, /* 4096 */
- { 3, 0, sys_setpriority, "setpriority" }, /* 4097 */
- { 0, 0, sys_profil, "profil" }, /* 4098 */
- { 3, TF, sys_statfs, "statfs" }, /* 4099 */
- { 3, TD, sys_fstatfs, "fstatfs" }, /* 4100 */
- { 0, 0, sys_ioperm, "ioperm" }, /* 4101 */
- { 2, TD, sys_socketcall, "socketcall" }, /* 4102 */
- { 3, 0, sys_syslog, "syslog" }, /* 4103 */
- { 3, 0, sys_setitimer, "setitimer" }, /* 4104 */
- { 2, 0, sys_getitimer, "getitimer" }, /* 4105 */
- { 2, TF, sys_stat, "stat" }, /* 4106 */
- { 2, TF, sys_lstat, "lstat" }, /* 4107 */
- { 2, TD, sys_fstat, "fstat" }, /* 4108 */
- { 1, 0, sys_olduname, "olduname" }, /* 4109 */
- { 0, 0, sys_iopl, "iopl" }, /* 4110 */
- { 0, 0, sys_vhangup, "vhangup" }, /* 4111 */
- { 0, 0, sys_idle, "idle" }, /* 4112 */
- { 5, 0, sys_vm86old, "vm86" }, /* 4113 */
- { 4, TP, sys_wait4, "wait4" }, /* 4114 */
- { 1, TF, sys_swapoff, "swapoff" }, /* 4115 */
- { 1, 0, sys_sysinfo, "sysinfo" }, /* 4116 */
- { 6, TI, sys_ipc, "ipc" }, /* 4117 */
- { 1, TD, sys_fsync, "fsync" }, /* 4118 */
- { 0, TS, sys_sigreturn, "sigreturn" }, /* 4119 */
- { 5, TP, sys_clone, "clone" }, /* 4120 */
- { 2, 0, sys_setdomainname, "setdomainname" }, /* 4121 */
- { 1, 0, sys_uname, "uname" }, /* 4122 */
- { 0, 0, sys_modify_ldt, "modify_ldt" }, /* 4123 */
- { 1, 0, sys_adjtimex, "adjtimex" }, /* 4124 */
- { 3, 0, sys_mprotect, "mprotect" }, /* 4125 */
- { 3, TS, sys_sigprocmask, "sigprocmask" }, /* 4126 */
- { 2, 0, sys_create_module, "create_module" }, /* 4127 */
- { 3, 0, sys_init_module, "init_module" }, /* 4128 */
- { 2, 0, sys_delete_module, "delete_module" }, /* 4129 */
- { 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 4130 */
- { 4, 0, sys_quotactl, "quotactl" }, /* 4131 */
- { 1, 0, sys_getpgid, "getpgid" }, /* 4132 */
- { 1, TF, sys_fchdir, "fchdir" }, /* 4133 */
- { 2, 0, sys_bdflush, "bdflush" }, /* 4134 */
- { 3, 0, sys_sysfs, "sysfs" }, /* 4135 */
- { 1, 0, sys_personality, "personality" }, /* 4136 */
- { 0, 0, sys_afs_syscall, "afs_syscall" }, /* 4137 */
- { 1, NF, sys_setfsuid, "setfsuid" }, /* 4138 */
- { 1, NF, sys_setfsgid, "setfsgid" }, /* 4139 */
- { 5, TF, sys_llseek, "_llseek" }, /* 4140 */
- { 3, TD, sys_getdents, "getdents" }, /* 4141 */
- { 5, TD, sys_select, "_newselect" }, /* 4142 */
- { 2, TD, sys_flock, "flock" }, /* 4143 */
- { 3, 0, sys_msync, "msync" }, /* 4144 */
- { 3, TD, sys_readv, "readv" }, /* 4145 */
- { 3, TD, sys_writev, "writev" }, /* 4146 */
- { 3, 0, printargs, "cacheflush" }, /* 4147 */
- { 3, 0, printargs, "cachectl" }, /* 4148 */
- { 4, 0, sys_sysmips, "sysmips" }, /* 4149 */
- { 0, 0, sys_setup, "setup" }, /* 4150 */
- { 1, 0, sys_getsid, "getsid" }, /* 4151 */
- { 1, TD, sys_fdatasync, "fdatasync" }, /* 4152 */
- { 1, 0, sys_sysctl, "_sysctl" }, /* 4153 */
- { 2, 0, sys_mlock, "mlock" }, /* 4154 */
- { 2, 0, sys_munlock, "munlock" }, /* 4155 */
- { 1, 0, sys_mlockall, "mlockall" }, /* 4156 */
- { 0, 0, sys_munlockall, "munlockall" }, /* 4157 */
- { 2, 0, sys_sched_setparam, "sched_setparam"}, /* 4158 */
- { 2, 0, sys_sched_getparam, "sched_getparam"}, /* 4159 */
- { 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 4160 */
- { 1, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 4161 */
- { 0, 0, sys_sched_yield, "sched_yield" }, /* 4162 */
- { 1, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 4163 */
- { 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 4164 */
- { 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 4165 */
- { 2, 0, sys_nanosleep, "nanosleep" }, /* 4166 */
- { 5, 0, sys_mremap, "mremap" }, /* 4167 */
- { 3, TN, sys_accept, "accept" }, /* 4168 */
- { 3, TN, sys_bind, "bind" }, /* 4169 */
- { 3, TN, sys_connect, "connect" }, /* 4170 */
- { 3, TN, sys_getpeername, "getpeername" }, /* 4171 */
- { 3, TN, sys_getsockname, "getsockname" }, /* 4172 */
- { 5, TN, sys_getsockopt, "getsockopt" }, /* 4173 */
- { 2, TN, sys_listen, "listen" }, /* 4174 */
- { 4, TN, sys_recv, "recv" }, /* 4175 */
- { 6, TN, sys_recvfrom, "recvfrom" }, /* 4176 */
- { 3, TN, sys_recvmsg, "recvmsg" }, /* 4177 */
- { 4, TN, sys_send, "send" }, /* 4178 */
- { 3, TN, sys_sendmsg, "sendmsg" }, /* 4179 */
- { 6, TN, sys_sendto, "sendto" }, /* 4180 */
- { 5, TN, sys_setsockopt, "setsockopt" }, /* 4181 */
- { 2, TN, sys_shutdown, "shutdown" }, /* 4182 */
- { 3, TN, sys_socket, "socket" }, /* 4183 */
- { 4, TN, sys_socketpair, "socketpair" }, /* 4184 */
- { 3, 0, sys_setresuid, "setresuid" }, /* 4185 */
- { 3, 0, sys_getresuid, "getresuid" }, /* 4186 */
- { 5, 0, sys_query_module, "query_module" }, /* 4187 */
- { 3, TD, sys_poll, "poll" }, /* 4188 */
- { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 4189 */
- { 3, 0, sys_setresgid, "setresgid" }, /* 4190 */
- { 3, 0, sys_getresgid, "getresgid" }, /* 4191 */
- { 5, 0, sys_prctl, "prctl" }, /* 4192 */
- { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 4193 */
- { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 4194 */
- { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 4195 */
- { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 4196 */
- { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait"},/* 4197 */
- { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"},/* 4198 */
- { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 4199 */
- { 6, TD, sys_pread, "pread" }, /* 4200 */
- { 6, TD, sys_pwrite, "pwrite" }, /* 4201 */
- { 3, TF, sys_chown, "chown" }, /* 4202 */
- { 2, TF, sys_getcwd, "getcwd" }, /* 4203 */
- { 2, 0, sys_capget, "capget" }, /* 4204 */
- { 2, 0, sys_capset, "capset" }, /* 4205 */
- { 2, TS, sys_sigaltstack, "sigaltstatck" }, /* 4206 */
- { 4, TD|TN, sys_sendfile, "sendfile" }, /* 4207 */
- { 0, 0, NULL, NULL }, /* 4208 */
- { 0, 0, NULL, NULL }, /* 4209 */
- { 6, TD, sys_mmap, "mmap" }, /* 4210 */
- { 4, TF, sys_truncate64, "truncate64" }, /* 4211 */
- { 4, TD, sys_ftruncate64, "ftruncate64" }, /* 4212 */
- { 2, TF, sys_stat64, "stat64" }, /* 4213 */
- { 2, TF, sys_lstat64, "lstat64" }, /* 4214 */
- { 2, TD, sys_fstat64, "fstat64" }, /* 4215 */
- { 2, TF, sys_pivotroot, "pivot_root" }, /* 4216 */
- { 3, 0, sys_mincore, "mincore" }, /* 4217 */
- { 3, 0, sys_madvise, "madvise" }, /* 4218 */
- { 3, TF, sys_getdents64, "getdents64" }, /* 4219 */
- { 3, TD, sys_fcntl, "fcntl64" }, /* 4220 */
- { 0, 0, NULL, NULL }, /* 4221 */
- { 0, 0, sys_gettid, "gettid" }, /* 4222 */
- { 5, TD, sys_readahead, "readahead" }, /* 4223 */
- { 5, TF, sys_setxattr, "setxattr" }, /* 4224 */
- { 5, TF, sys_setxattr, "lsetxattr" }, /* 4225 */
- { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 4226 */
- { 4, TF, sys_getxattr, "getxattr" }, /* 4227 */
- { 4, TF, sys_getxattr, "lgetxattr" }, /* 4228 */
- { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 4229 */
- { 3, TF, sys_listxattr, "listxattr" }, /* 4230 */
- { 3, TF, sys_listxattr, "llistxattr" }, /* 4231 */
- { 3, TD, sys_flistxattr, "flistxattr" }, /* 4232 */
- { 2, TF, sys_removexattr, "removexattr" }, /* 4233 */
- { 2, TF, sys_removexattr, "lremovexattr" }, /* 4234 */
- { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 4235 */
- { 2, TS, sys_kill, "tkill" }, /* 4236 */
- { 4, TD|TN, sys_sendfile64, "sendfile64" }, /* 4237 */
- { 6, 0, sys_futex, "futex" }, /* 4238 */
- { 3, 0, sys_sched_setaffinity, "sched_setaffinity"}, /* 4239 */
- { 3, 0, sys_sched_getaffinity, "sched_getaffinity"}, /* 4240 */
- { 2, 0, sys_io_setup, "io_setup" }, /* 4241 */
- { 1, 0, sys_io_destroy, "io_destroy" }, /* 4242 */
- { 5, 0, sys_io_getevents, "io_getevents" }, /* 4243 */
- { 3, 0, sys_io_submit, "io_submit" }, /* 4244 */
- { 3, 0, sys_io_cancel, "io_cancel" }, /* 4245 */
- { 1, TP, sys_exit, "exit_group" }, /* 4246 */
- { 4, 0, sys_lookup_dcookie, "lookup_dcookie"}, /* 4247 */
- { 1, TD, sys_epoll_create, "epoll_create" }, /* 4248 */
- { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 4249 */
- { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 4250 */
- { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 4251 */
- { 1, 0, sys_set_tid_address, "set_tid_address"}, /* 4252 */
- { 0, 0, sys_restart_syscall, "restart_syscall"}, /* 4253 */
- { 6, TD, sys_fadvise64_64, "fadvise64_64" }, /* 4254 */
- { 3, TF, sys_statfs64, "statfs64" }, /* 4255 */
- { 2, TD, sys_fstatfs64, "fstatfs64" }, /* 4256 */
- { 3, 0, sys_timer_create, "timer_create" }, /* 4257 */
- { 4, 0, sys_timer_settime, "timer_settime" }, /* 4258 */
- { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 4259 */
- { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 4260 */
- { 1, 0, sys_timer_delete, "timer_delete" }, /* 4261 */
- { 2, 0, sys_clock_settime, "clock_settime" }, /* 4262 */
- { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 4263 */
- { 2, 0, sys_clock_getres, "clock_getres" }, /* 4264 */
- { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 4265 */
- { 3, TS, sys_tgkill, "tgkill" }, /* 4266 */
- { 2, TF, sys_utimes, "utimes" }, /* 4267 */
- { 4, 0, sys_mbind, "mbind" }, /* 4268 */
- { 0, 0, NULL, NULL }, /* 4269 */
- { 0, 0, NULL, NULL }, /* 4270 */
- { 4, 0, sys_mq_open, "mq_open" }, /* 4271 */
- { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 4272 */
- { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 4273 */
- { 5, 0, sys_mq_timedreceive, "mq_timedreceive"}, /* 4274 */
- { 2, 0, sys_mq_notify, "mq_notify" }, /* 4275 */
- { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 4276 */
- { 0, 0, NULL, NULL }, /* 4277 */
- { 5, TP, sys_waitid, "waitid" }, /* 4278 */
- { 0, 0, NULL, NULL }, /* 4279 */
- { 5, 0, sys_add_key, "add_key" }, /* 4280 */
- { 4, 0, sys_request_key, "request_key" }, /* 4281 */
- { 5, 0, sys_keyctl, "keyctl" }, /* 4282 */
- { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 4283 */
- { 0, TD, sys_inotify_init, "inotify_init" }, /* 4284 */
- { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 4285 */
- { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 4286 */
- { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 4287 */
- { 4, TD|TF, sys_openat, "openat" }, /* 4288 */
- { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 4289 */
- { 4, TD|TF, sys_mknodat, "mknodat" }, /* 4290 */
- { 5, TD|TF, sys_fchownat, "fchownat" }, /* 4291 */
- { 3, TD|TF, sys_futimesat, "futimesat" }, /* 4292 */
- { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 4293 */
- { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 4294 */
- { 4, TD|TF, sys_renameat, "renameat" }, /* 4295 */
- { 5, TD|TF, sys_linkat, "linkat" }, /* 4296 */
- { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 4297 */
- { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 4298 */
- { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 4299 */
- { 3, TD|TF, sys_faccessat, "faccessat" }, /* 4300 */
- { 6, TD, sys_pselect6, "pselect6" }, /* 4301 */
- { 5, TD, sys_ppoll, "ppoll" }, /* 4302 */
- { 1, TP, sys_unshare, "unshare" }, /* 4303 */
- { 6, TD, sys_splice, "splice" }, /* 4304 */
- { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 4305 */
- { 4, TD, sys_tee, "tee" }, /* 4306 */
- { 4, TD, sys_vmsplice, "vmsplice" }, /* 4307 */
- { 6, 0, sys_move_pages, "move_pages" }, /* 4308 */
- { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 4309 */
- { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 4310 */
- { 4, 0, sys_kexec_load, "kexec_load" }, /* 4311 */
- { 3, 0, sys_getcpu, "getcpu" }, /* 4312 */
- { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 4313 */
- { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 4314 */
- { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 4315 */
- { 4, 0, printargs, "utimensat" }, /* 4316 */
- { 3, TD|TS, sys_signalfd, "signalfd" }, /* 4317 */
- { 4, TD, sys_timerfd, "timerfd" }, /* 4318 */
- { 1, TD, sys_eventfd, "eventfd" }, /* 4319 */
- { 6, TD, sys_fallocate, "fallocate" }, /* 4320 */
- { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 4321 */
- { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 4322 */
- { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 4323 */
- { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 4324 */
- { 2, TD, sys_eventfd2, "eventfd2" }, /* 4325 */
- { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 4326 */
- { 3, TD, sys_dup3, "dup3" }, /* 4327 */
- { 2, TD, sys_pipe2, "pipe2" }, /* 4328 */
- { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 4329 */
- { 6, TD, sys_preadv, "preadv" }, /* 4330 */
- { 6, TD, sys_pwritev, "pwritev" }, /* 4331 */
- { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 4332 */
- { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 4333 */
- { 4, TN, sys_accept4, "accept4" }, /* 4334 */
- { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 4335 */
- { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 4336 */
- { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 4337 */
- { 4, 0, sys_prlimit64, "prlimit64" }, /* 4338 */
- { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at"}, /* 4339 */
- { 3, TD, sys_open_by_handle_at, "open_by_handle_at"}, /* 4340 */
- { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 4341 */
- { 1, TD, sys_syncfs, "syncfs" }, /* 4342 */
- { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 4343 */
- { 2, TD, sys_setns, "setns" }, /* 4344 */
- { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 4345 */
- { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 4346 */
-#else
- { 0, 0, printargs, "o32_syscall" }, /* 4000 */
- { 0, 0, printargs, "o32_exit" }, /* 4001 */
- { 0, 0, printargs, "o32_fork" }, /* 4002 */
- { 0, 0, printargs, "o32_read" }, /* 4003 */
- { 0, 0, printargs, "o32_write" }, /* 4004 */
- { 0, 0, printargs, "o32_open" }, /* 4005 */
- { 0, 0, printargs, "o32_close" }, /* 4006 */
- { 0, 0, printargs, "o32_waitpid" }, /* 4007 */
- { 0, 0, printargs, "o32_creat" }, /* 4008 */
- { 0, 0, printargs, "o32_link" }, /* 4009 */
- { 0, 0, printargs, "o32_unlink" }, /* 4010 */
- { 0, 0, printargs, "o32_execve" }, /* 4011 */
- { 0, 0, printargs, "o32_chdir" }, /* 4012 */
- { 0, 0, printargs, "o32_time" }, /* 4013 */
- { 0, 0, printargs, "o32_mknod" }, /* 4014 */
- { 0, 0, printargs, "o32_chmod" }, /* 4015 */
- { 0, 0, printargs, "o32_lchown" }, /* 4016 */
- { 0, 0, printargs, "o32_break" }, /* 4017 */
- { 0, 0, printargs, "o32_oldstat" }, /* 4018 */
- { 0, 0, printargs, "o32_lseek" }, /* 4019 */
- { 0, 0, printargs, "o32_getpid" }, /* 4020 */
- { 0, 0, printargs, "o32_mount" }, /* 4021 */
- { 0, 0, printargs, "o32_oldumount" }, /* 4022 */
- { 0, 0, printargs, "o32_setuid" }, /* 4023 */
- { 0, 0, printargs, "o32_getuid" }, /* 4024 */
- { 0, 0, printargs, "o32_stime" }, /* 4025 */
- { 0, 0, printargs, "o32_ptrace" }, /* 4026 */
- { 0, 0, printargs, "o32_alarm" }, /* 4027 */
- { 0, 0, printargs, "o32_oldfstat" }, /* 4028 */
- { 0, 0, printargs, "o32_pause" }, /* 4029 */
- { 0, 0, printargs, "o32_utime" }, /* 4030 */
- { 0, 0, printargs, "o32_stty" }, /* 4031 */
- { 0, 0, printargs, "o32_gtty" }, /* 4032 */
- { 0, 0, printargs, "o32_access" }, /* 4033 */
- { 0, 0, printargs, "o32_nice" }, /* 4034 */
- { 0, 0, printargs, "o32_ftime" }, /* 4035 */
- { 0, 0, printargs, "o32_sync" }, /* 4036 */
- { 0, 0, printargs, "o32_kill" }, /* 4037 */
- { 0, 0, printargs, "o32_rename" }, /* 4038 */
- { 0, 0, printargs, "o32_mkdir" }, /* 4039 */
- { 0, 0, printargs, "o32_rmdir" }, /* 4040 */
- { 0, 0, printargs, "o32_dup" }, /* 4041 */
- { 0, 0, printargs, "o32_pipe" }, /* 4042 */
- { 0, 0, printargs, "o32_times" }, /* 4043 */
- { 0, 0, printargs, "o32_prof" }, /* 4044 */
- { 0, 0, printargs, "o32_brk" }, /* 4045 */
- { 0, 0, printargs, "o32_setgid" }, /* 4046 */
- { 0, 0, printargs, "o32_getgid" }, /* 4047 */
- { 0, 0, printargs, "o32_signal" }, /* 4048 */
- { 0, 0, printargs, "o32_geteuid" }, /* 4049 */
- { 0, 0, printargs, "o32_getegid" }, /* 4050 */
- { 0, 0, printargs, "o32_acct" }, /* 4051 */
- { 0, 0, printargs, "o32_umount" }, /* 4052 */
- { 0, 0, printargs, "o32_lock" }, /* 4053 */
- { 0, 0, printargs, "o32_ioctl" }, /* 4054 */
- { 0, 0, printargs, "o32_fcntl" }, /* 4055 */
- { 0, 0, printargs, "o32_mpx" }, /* 4056 */
- { 0, 0, printargs, "o32_setpgid" }, /* 4057 */
- { 0, 0, printargs, "o32_ulimit" }, /* 4058 */
- { 0, 0, printargs, "o32_oldolduname" }, /* 4059 */
- { 0, 0, printargs, "o32_umask" }, /* 4060 */
- { 0, 0, printargs, "o32_chroot" }, /* 4061 */
- { 0, 0, printargs, "o32_ustat" }, /* 4062 */
- { 0, 0, printargs, "o32_dup2" }, /* 4063 */
- { 0, 0, printargs, "o32_getppid" }, /* 4064 */
- { 0, 0, printargs, "o32_getpgrp" }, /* 4065 */
- { 0, 0, printargs, "o32_setsid" }, /* 4066 */
- { 0, 0, printargs, "o32_sigaction" }, /* 4067 */
- { 0, 0, printargs, "o32_siggetmask" }, /* 4068 */
- { 0, 0, printargs, "o32_sigsetmask" }, /* 4069 */
- { 0, 0, printargs, "o32_setreuid" }, /* 4070 */
- { 0, 0, printargs, "o32_setregid" }, /* 4071 */
- { 0, 0, printargs, "o32_sigsuspend" }, /* 4072 */
- { 0, 0, printargs, "o32_sigpending" }, /* 4073 */
- { 0, 0, printargs, "o32_sethostname" }, /* 4074 */
- { 0, 0, printargs, "o32_setrlimit" }, /* 4075 */
- { 0, 0, printargs, "o32_getrlimit" }, /* 4076 */
- { 0, 0, printargs, "o32_getrusage" }, /* 4077 */
- { 0, 0, printargs, "o32_gettimeofday" }, /* 4078 */
- { 0, 0, printargs, "o32_settimeofday" }, /* 4079 */
- { 0, 0, printargs, "o32_getgroups" }, /* 4080 */
- { 0, 0, printargs, "o32_setgroups" }, /* 4081 */
- { 0, 0, printargs, "o32_reserved82" }, /* 4082 */
- { 0, 0, printargs, "o32_symlink" }, /* 4083 */
- { 0, 0, printargs, "o32_oldlstat" }, /* 4084 */
- { 0, 0, printargs, "o32_readlink" }, /* 4085 */
- { 0, 0, printargs, "o32_uselib" }, /* 4086 */
- { 0, 0, printargs, "o32_swapon" }, /* 4087 */
- { 0, 0, printargs, "o32_reboot" }, /* 4088 */
- { 0, 0, printargs, "o32_readdir" }, /* 4089 */
- { 0, 0, printargs, "o32_old_mmap" }, /* 4090 */
- { 0, 0, printargs, "o32_munmap" }, /* 4091 */
- { 0, 0, printargs, "o32_truncate" }, /* 4092 */
- { 0, 0, printargs, "o32_ftruncate" }, /* 4093 */
- { 0, 0, printargs, "o32_fchmod" }, /* 4094 */
- { 0, 0, printargs, "o32_fchown" }, /* 4095 */
- { 0, 0, printargs, "o32_getpriority" }, /* 4096 */
- { 0, 0, printargs, "o32_setpriority" }, /* 4097 */
- { 0, 0, printargs, "o32_profil" }, /* 4098 */
- { 0, 0, printargs, "o32_statfs" }, /* 4099 */
- { 0, 0, printargs, "o32_fstatfs" }, /* 4100 */
- { 0, 0, printargs, "o32_ioperm" }, /* 4101 */
- { 0, 0, printargs, "o32_socketcall" }, /* 4102 */
- { 0, 0, printargs, "o32_syslog" }, /* 4103 */
- { 0, 0, printargs, "o32_setitimer" }, /* 4104 */
- { 0, 0, printargs, "o32_getitimer" }, /* 4105 */
- { 0, 0, printargs, "o32_stat" }, /* 4106 */
- { 0, 0, printargs, "o32_lstat" }, /* 4107 */
- { 0, 0, printargs, "o32_fstat" }, /* 4108 */
- { 0, 0, printargs, "o32_olduname" }, /* 4109 */
- { 0, 0, printargs, "o32_iopl" }, /* 4110 */
- { 0, 0, printargs, "o32_vhangup" }, /* 4111 */
- { 0, 0, printargs, "o32_idle" }, /* 4112 */
- { 0, 0, printargs, "o32_vm86" }, /* 4113 */
- { 0, 0, printargs, "o32_wait4" }, /* 4114 */
- { 0, 0, printargs, "o32_swapoff" }, /* 4115 */
- { 0, 0, printargs, "o32_sysinfo" }, /* 4116 */
- { 0, 0, printargs, "o32_ipc" }, /* 4117 */
- { 0, 0, printargs, "o32_fsync" }, /* 4118 */
- { 0, 0, printargs, "o32_sigreturn" }, /* 4119 */
- { 0, 0, printargs, "o32_clone" }, /* 4120 */
- { 0, 0, printargs, "o32_setdomainname" }, /* 4121 */
- { 0, 0, printargs, "o32_uname" }, /* 4122 */
- { 0, 0, printargs, "o32_modify_ldt" }, /* 4123 */
- { 0, 0, printargs, "o32_adjtimex" }, /* 4124 */
- { 0, 0, printargs, "o32_mprotect" }, /* 4125 */
- { 0, 0, printargs, "o32_sigprocmask" }, /* 4126 */
- { 0, 0, printargs, "o32_create_module" }, /* 4127 */
- { 0, 0, printargs, "o32_init_module" }, /* 4128 */
- { 0, 0, printargs, "o32_delete_module" }, /* 4129 */
- { 0, 0, printargs, "o32_get_kernel_syms"}, /* 4130 */
- { 0, 0, printargs, "o32_quotactl" }, /* 4131 */
- { 0, 0, printargs, "o32_getpgid" }, /* 4132 */
- { 0, 0, printargs, "o32_fchdir" }, /* 4133 */
- { 0, 0, printargs, "o32_bdflush" }, /* 4134 */
- { 0, 0, printargs, "o32_sysfs" }, /* 4135 */
- { 0, 0, printargs, "o32_personality" }, /* 4136 */
- { 0, 0, printargs, "o32_afs_syscall" }, /* 4137 */
- { 0, 0, printargs, "o32_setfsuid" }, /* 4138 */
- { 0, 0, printargs, "o32_setfsgid" }, /* 4139 */
- { 0, 0, printargs, "o32__llseek" }, /* 4140 */
- { 0, 0, printargs, "o32_getdents" }, /* 4141 */
- { 0, 0, printargs, "o32__newselect" }, /* 4142 */
- { 0, 0, printargs, "o32_flock" }, /* 4143 */
- { 0, 0, printargs, "o32_msync" }, /* 4144 */
- { 0, 0, printargs, "o32_readv" }, /* 4145 */
- { 0, 0, printargs, "o32_writev" }, /* 4146 */
- { 0, 0, printargs, "o32_cacheflush" }, /* 4147 */
- { 0, 0, printargs, "o32_cachectl" }, /* 4148 */
- { 0, 0, printargs, "o32_sysmips" }, /* 4149 */
- { 0, 0, printargs, "o32_setup" }, /* 4150 */
- { 0, 0, printargs, "o32_getsid" }, /* 4151 */
- { 0, 0, printargs, "o32_fdatasync" }, /* 4152 */
- { 0, 0, printargs, "o32__sysctl" }, /* 4153 */
- { 0, 0, printargs, "o32_mlock" }, /* 4154 */
- { 0, 0, printargs, "o32_munlock" }, /* 4155 */
- { 0, 0, printargs, "o32_mlockall" }, /* 4156 */
- { 0, 0, printargs, "o32_munlockall" }, /* 4157 */
- { 0, 0, printargs, "o32_sched_setparam"}, /* 4158 */
- { 0, 0, printargs, "o32_sched_getparam"}, /* 4159 */
- { 0, 0, printargs, "o32_sched_setscheduler"}, /* 4160 */
- { 0, 0, printargs, "o32_sched_getscheduler"}, /* 4161 */
- { 0, 0, printargs, "o32_sched_yield" }, /* 4162 */
- { 0, 0, printargs, "o32_sched_get_priority_max"}, /* 4163 */
- { 0, 0, printargs, "o32_sched_get_priority_min"},/* 4164 */
- { 0, 0, printargs, "o32_sched_rr_get_interval"}, /* 4165 */
- { 0, 0, printargs, "o32_nanosleep" }, /* 4166 */
- { 0, 0, printargs, "o32_mremap" }, /* 4167 */
- { 0, 0, printargs, "o32_accept" }, /* 4168 */
- { 0, 0, printargs, "o32_bind" }, /* 4169 */
- { 0, 0, printargs, "o32_connect" }, /* 4170 */
- { 0, 0, printargs, "o32_getpeername" }, /* 4171 */
- { 0, 0, printargs, "o32_getsockname" }, /* 4172 */
- { 0, 0, printargs, "o32_getsockopt" }, /* 4173 */
- { 0, 0, printargs, "o32_listen" }, /* 4174 */
- { 0, 0, printargs, "o32_recv" }, /* 4175 */
- { 0, 0, printargs, "o32_recvfrom" }, /* 4176 */
- { 0, 0, printargs, "o32_recvmsg" }, /* 4177 */
- { 0, 0, printargs, "o32_send" }, /* 4178 */
- { 0, 0, printargs, "o32_sendmsg" }, /* 4179 */
- { 0, 0, printargs, "o32_sendto" }, /* 4180 */
- { 0, 0, printargs, "o32_setsockopt" }, /* 4181 */
- { 0, 0, printargs, "o32_shutdown" }, /* 4182 */
- { 0, 0, printargs, "o32_socket" }, /* 4183 */
- { 0, 0, printargs, "o32_socketpair" }, /* 4184 */
- { 0, 0, printargs, "o32_setresuid" }, /* 4185 */
- { 0, 0, printargs, "o32_getresuid" }, /* 4186 */
- { 0, 0, printargs, "o32_query_module" }, /* 4187 */
- { 0, 0, printargs, "o32_poll" }, /* 4188 */
- { 0, 0, printargs, "o32_nfsservctl" }, /* 4189 */
- { 0, 0, printargs, "o32_setresgid" }, /* 4190 */
- { 0, 0, printargs, "o32_getresgid" }, /* 4191 */
- { 0, 0, printargs, "o32_prctl" }, /* 4192 */
- { 0, 0, printargs, "o32_rt_sigreturn" }, /* 4193 */
- { 0, 0, printargs, "o32_rt_sigaction" }, /* 4194 */
- { 0, 0, printargs, "o32_rt_sigprocmask"}, /* 4195 */
- { 0, 0, printargs, "o32_rt_sigpending" }, /* 4196 */
- { 0, 0, printargs, "o32_rt_sigtimedwait"},/* 4197 */
- { 0, 0, printargs, "o32_rt_sigqueueinfo"},/* 4198 */
- { 0, 0, printargs, "o32_rt_siguspend" }, /* 4199 */
- { 0, 0, printargs, "o32_pread" }, /* 4200 */
- { 0, 0, printargs, "o32_pwrite" }, /* 4201 */
- { 0, 0, printargs, "o32_chown" }, /* 4202 */
- { 0, 0, printargs, "o32_getcwd" }, /* 4203 */
- { 0, 0, printargs, "o32_capget" }, /* 4204 */
- { 0, 0, printargs, "o32_capset" }, /* 4205 */
- { 0, 0, printargs, "o32_sigaltstatck" }, /* 4206 */
- { 0, 0, printargs, "o32_sendfile" }, /* 4207 */
- { 0, 0, NULL, NULL }, /* 4208 */
- { 0, 0, NULL, NULL }, /* 4209 */
- { 0, 0, printargs, "o32_mmap" }, /* 4210 */
- { 0, 0, printargs, "o32_truncate64" }, /* 4211 */
- { 0, 0, printargs, "o32_ftruncate64" }, /* 4212 */
- { 0, 0, printargs, "o32_stat64" }, /* 4213 */
- { 0, 0, printargs, "o32_lstat64" }, /* 4214 */
- { 0, 0, printargs, "o32_fstat64" }, /* 4215 */
- { 0, 0, printargs, "o32_pivot_root" }, /* 4216 */
- { 0, 0, printargs, "o32_mincore" }, /* 4217 */
- { 0, 0, printargs, "o32_madvise" }, /* 4218 */
- { 0, 0, printargs, "o32_getdents64" }, /* 4219 */
- { 0, 0, printargs, "o32_fcntl64" }, /* 4220 */
- { 0, 0, NULL, NULL }, /* 4221 */
- { 0, 0, printargs, "o32_gettid" }, /* 4222 */
- { 5, TD, printargs, "o32_readahead" }, /* 4223 */
- { 5, TF, printargs, "o32_setxattr" }, /* 4224 */
- { 5, TF, printargs, "o32_lsetxattr" }, /* 4225 */
- { 5, TD, printargs, "o32_fsetxattr" }, /* 4226 */
- { 4, TF, printargs, "o32_getxattr" }, /* 4227 */
- { 4, TF, printargs, "o32_lgetxattr" }, /* 4228 */
- { 4, TD, printargs, "o32_fgetxattr" }, /* 4229 */
- { 3, TF, printargs, "o32_listxattr" }, /* 4230 */
- { 3, TF, printargs, "o32_llistxattr" }, /* 4231 */
- { 3, TD, printargs, "o32_flistxattr" }, /* 4232 */
- { 2, TF, printargs, "o32_removexattr" }, /* 4233 */
- { 2, TF, printargs, "o32_lremovexattr" }, /* 4234 */
- { 2, TD, printargs, "o32_fremovexattr" }, /* 4235 */
- { 2, TS, printargs, "o32_tkill" }, /* 4236 */
- { 5, TD|TN, printargs, "o32_sendfile64" }, /* 4237 */
- { 6, 0, printargs, "o32_futex" }, /* 4238 */
- { 3, 0, printargs, "o32_sched_setaffinity"}, /* 4239 */
- { 3, 0, printargs, "o32_sched_getaffinity"}, /* 4240 */
- { 2, 0, printargs, "o32_io_setup" }, /* 4241 */
- { 1, 0, printargs, "o32_io_destroy" }, /* 4242 */
- { 5, 0, printargs, "o32_io_getevents" }, /* 4243 */
- { 3, 0, printargs, "o32_io_submit" }, /* 4244 */
- { 3, 0, printargs, "o32_io_cancel" }, /* 4245 */
- { 1, TP, printargs, "o32_exit_group" }, /* 4246 */
- { 3, 0, printargs, "o32_lookup_dcookie"}, /* 4247 */
- { 1, TD, printargs, "o32_epoll_create" }, /* 4248 */
- { 4, TD, printargs, "o32_epoll_ctl" }, /* 4249 */
- { 4, TD, printargs, "o32_epoll_wait" }, /* 4250 */
- { 5, 0, printargs, "o32_remap_file_pages"}, /* 4251 */
- { 1, 0, printargs, "o32_set_tid_address"}, /* 4252 */
- { 0, 0, printargs, "o32_restart_syscall"}, /* 4253 */
- { MA, 0, printargs, "o32_fadvise64_64" }, /* 4254 */
- { 3, TF, printargs, "o32_statfs64" }, /* 4255 */
- { 2, TD, printargs, "o32_fstatfs64" }, /* 4256 */
- { 3, 0, printargs, "o32_timer_create" }, /* 4257 */
- { 4, 0, printargs, "o32_timer_settime" }, /* 4258 */
- { 2, 0, printargs, "o32_timer_gettime" }, /* 4259 */
- { 1, 0, printargs, "o32_timer_getoverrun"}, /* 4260 */
- { 1, 0, printargs, "o32_timer_delete" }, /* 4261 */
- { 2, 0, printargs, "o32_clock_settime" }, /* 4262 */
- { 2, 0, printargs, "o32_clock_gettime" }, /* 4263 */
- { 2, 0, printargs, "o32_clock_getres" }, /* 4264 */
- { 4, 0, printargs, "o32_clock_nanosleep"}, /* 4265 */
- { 3, TS, printargs, "o32_tgkill" }, /* 4266 */
- { 2, TF, printargs, "o32_utimes" }, /* 4267 */
- { 4, 0, printargs, "o32_mbind" }, /* 4268 */
- { 0, 0, printargs, "o32_SYS_4269" }, /* 4269 */
- { 0, 0, printargs, "o32_SYS_4270" }, /* 4270 */
- { 4, 0, printargs, "o32_mq_open" }, /* 4271 */
- { 1, 0, printargs, "o32_mq_unlink" }, /* 4272 */
- { 5, 0, printargs, "o32_mq_timedsend" }, /* 4273 */
- { 5, 0, printargs, "o32_mq_timedreceive"}, /* 4274 */
- { 2, 0, printargs, "o32_mq_notify" }, /* 4275 */
- { 3, 0, printargs, "o32_mq_getsetattr" }, /* 4276 */
- { 0, 0, printargs, "o32_SYS_4277" }, /* 4277 */
- { 5, TP, printargs, "o32_waitid" }, /* 4278 */
- { 0, 0, printargs, "o32_SYS_4279" }, /* 4279 */
- { 5, 0, printargs, "o32_add_key" }, /* 4280 */
- { 4, 0, printargs, "o32_request_key" }, /* 4281 */
- { 5, 0, printargs, "o32_keyctl" }, /* 4282 */
- { 1, 0, printargs, "o32_set_thread_area" }, /* 4283 */
- { 0, TD, printargs, "o32_inotify_init" }, /* 4284 */
- { 3, TD, printargs, "o32_inotify_add_watch" }, /* 4285 */
- { 2, TD, printargs, "o32_inotify_rm_watch" }, /* 4286 */
- { 4, 0, printargs, "o32_migrate_pages" }, /* 4287 */
- { 4, TD|TF, printargs, "o32_openat" }, /* 4288 */
- { 3, TD|TF, printargs, "o32_mkdirat" }, /* 4289 */
- { 4, TD|TF, printargs, "o32_mknodat" }, /* 4290 */
- { 5, TD|TF, printargs, "o32_fchownat" }, /* 4291 */
- { 3, TD|TF, printargs, "o32_futimesat" }, /* 4292 */
- { 4, TD|TF, printargs, "o32_newfstatat" }, /* 4293 */
- { 3, TD|TF, printargs, "o32_unlinkat" }, /* 4294 */
- { 4, TD|TF, printargs, "o32_renameat" }, /* 4295 */
- { 5, TD|TF, printargs, "o32_linkat" }, /* 4296 */
- { 3, TD|TF, printargs, "o32_symlinkat" }, /* 4297 */
- { 4, TD|TF, printargs, "o32_readlinkat" }, /* 4298 */
- { 3, TD|TF, printargs, "o32_fchmodat" }, /* 4299 */
- { 3, TD|TF, printargs, "o32_faccessat" }, /* 4300 */
- { 6, TD, printargs, "o32_pselect6" }, /* 4301 */
- { 5, TD, printargs, "o32_ppoll" }, /* 4302 */
- { 1, TP, printargs, "o32_unshare" }, /* 4303 */
- { 6, TD, printargs, "o32_splice" }, /* 4304 */
- { 4, TD, printargs, "o32_sync_file_range" }, /* 4305 */
- { 4, TD, printargs, "o32_tee" }, /* 4306 */
- { 4, TD, printargs, "o32_vmsplice" }, /* 4307 */
- { 6, 0, printargs, "o32_move_pages" }, /* 4308 */
- { 2, 0, printargs, "o32_set_robust_list" }, /* 4309 */
- { 3, 0, printargs, "o32_get_robust_list" }, /* 4310 */
- { 4, 0, printargs, "o32_kexec_load" }, /* 4311 */
- { 3, 0, printargs, "o32_getcpu" }, /* 4312 */
- { 5, TD, printargs, "o32_epoll_pwait" }, /* 4313 */
- { 3, 0, printargs, "o32_ioprio_set" }, /* 4314 */
- { 2, 0, printargs, "o32_ioprio_get" }, /* 4315 */
- { 4, 0, printargs, "o32_utimensat" }, /* 4316 */
- { 3, TD|TS, printargs, "o32_signalfd" }, /* 4317 */
- { 4, TD, printargs, "o32_timerfd" }, /* 4318 */
- { 1, TD, printargs, "o32_eventfd" }, /* 4319 */
- { 6, TD, printargs, "o32_fallocate" }, /* 4320 */
- { 2, TD, printargs, "o32_timerfd_create" }, /* 4321 */
- { 2, TD, printargs, "o32_timerfd_gettime" }, /* 4322 */
- { 4, TD, printargs, "o32_timerfd_settime" }, /* 4323 */
- { 4, TD|TS, printargs, "o32_signalfd4" }, /* 4324 */
- { 2, TD, printargs, "o32_eventfd2" }, /* 4325 */
- { 1, TD, printargs, "o32_epoll_create1" }, /* 4326 */
- { 3, TD, printargs, "o32_dup3" }, /* 4327 */
- { 2, TD, printargs, "o32_pipe2" }, /* 4328 */
- { 1, TD, printargs, "o32_inotify_init1" }, /* 4329 */
- { 6, TD, printargs, "o32_preadv" }, /* 4330 */
- { 6, TD, printargs, "o32_pwritev" }, /* 4331 */
- { 4, TP|TS, printargs, "o32_rt_tgsigqueueinfo" }, /* 4332 */
- { 5, TD, printargs, "o32_perf_event_open" }, /* 4333 */
- { 4, TN, printargs, "o32_accept4" }, /* 4334 */
- { 5, TN, printargs, "o32_recvmmsg" }, /* 4335 */
- { 2, TD, printargs, "o32_fanotify_init" }, /* 4336 */
- { 5, TD|TF, printargs, "o32_fanotify_mark" }, /* 4337 */
- { 4, 0, printargs, "o32_prlimit64" }, /* 4338 */
- { 5, TD|TF, printargs, "o32_name_to_handle_at"}, /* 4339 */
- { 3, TD, printargs, "o32_open_by_handle_at"}, /* 4340 */
- { 2, 0, printargs, "o32_clock_adjtime" }, /* 4341 */
- { 1, TD, printargs, "o32_syncfs" }, /* 4342 */
- { 4, TN, printargs, "o32_sendmmsg" }, /* 4343 */
- { 2, TD, printargs, "o32_setns" }, /* 4344 */
- { 6, 0, printargs, "o32_process_vm_readv" }, /* 4345 */
- { 6, 0, printargs, "o32_process_vm_writev" }, /* 4346 */
-#endif
- { 0, 0, NULL, NULL }, /* 4347 */
- { 0, 0, NULL, NULL }, /* 4348 */
- { 0, 0, NULL, NULL }, /* 4349 */
- { 0, 0, NULL, NULL }, /* 4350 */
- { 0, 0, NULL, NULL }, /* 4351 */
- { 0, 0, NULL, NULL }, /* 4352 */
- { 0, 0, NULL, NULL }, /* 4353 */
- { 0, 0, NULL, NULL }, /* 4354 */
- { 0, 0, NULL, NULL }, /* 4355 */
- { 0, 0, NULL, NULL }, /* 4356 */
- { 0, 0, NULL, NULL }, /* 4357 */
- { 0, 0, NULL, NULL }, /* 4358 */
- { 0, 0, NULL, NULL }, /* 4359 */
- { 0, 0, NULL, NULL }, /* 4360 */
- { 0, 0, NULL, NULL }, /* 4361 */
- { 0, 0, NULL, NULL }, /* 4362 */
- { 0, 0, NULL, NULL }, /* 4363 */
- { 0, 0, NULL, NULL }, /* 4364 */
- { 0, 0, NULL, NULL }, /* 4365 */
- { 0, 0, NULL, NULL }, /* 4366 */
- { 0, 0, NULL, NULL }, /* 4367 */
- { 0, 0, NULL, NULL }, /* 4368 */
- { 0, 0, NULL, NULL }, /* 4369 */
- { 0, 0, NULL, NULL }, /* 4370 */
- { 0, 0, NULL, NULL }, /* 4371 */
- { 0, 0, NULL, NULL }, /* 4372 */
- { 0, 0, NULL, NULL }, /* 4373 */
- { 0, 0, NULL, NULL }, /* 4374 */
- { 0, 0, NULL, NULL }, /* 4375 */
- { 0, 0, NULL, NULL }, /* 4376 */
- { 0, 0, NULL, NULL }, /* 4377 */
- { 0, 0, NULL, NULL }, /* 4378 */
- { 0, 0, NULL, NULL }, /* 4379 */
- { 0, 0, NULL, NULL }, /* 4380 */
- { 0, 0, NULL, NULL }, /* 4381 */
- { 0, 0, NULL, NULL }, /* 4382 */
- { 0, 0, NULL, NULL }, /* 4383 */
- { 0, 0, NULL, NULL }, /* 4384 */
- { 0, 0, NULL, NULL }, /* 4385 */
- { 0, 0, NULL, NULL }, /* 4386 */
- { 0, 0, NULL, NULL }, /* 4387 */
- { 0, 0, NULL, NULL }, /* 4388 */
- { 0, 0, NULL, NULL }, /* 4389 */
- { 0, 0, NULL, NULL }, /* 4390 */
- { 0, 0, NULL, NULL }, /* 4391 */
- { 0, 0, NULL, NULL }, /* 4392 */
- { 0, 0, NULL, NULL }, /* 4393 */
- { 0, 0, NULL, NULL }, /* 4394 */
- { 0, 0, NULL, NULL }, /* 4395 */
- { 0, 0, NULL, NULL }, /* 4396 */
- { 0, 0, NULL, NULL }, /* 4397 */
- { 0, 0, NULL, NULL }, /* 4398 */
- { 0, 0, NULL, NULL }, /* 4399 */
- { 0, 0, NULL, NULL }, /* 4400 */
- { 0, 0, NULL, NULL }, /* 4401 */
- { 0, 0, NULL, NULL }, /* 4402 */
- { 0, 0, NULL, NULL }, /* 4403 */
- { 0, 0, NULL, NULL }, /* 4404 */
- { 0, 0, NULL, NULL }, /* 4405 */
- { 0, 0, NULL, NULL }, /* 4406 */
- { 0, 0, NULL, NULL }, /* 4407 */
- { 0, 0, NULL, NULL }, /* 4408 */
- { 0, 0, NULL, NULL }, /* 4409 */
- { 0, 0, NULL, NULL }, /* 4410 */
- { 0, 0, NULL, NULL }, /* 4411 */
- { 0, 0, NULL, NULL }, /* 4412 */
- { 0, 0, NULL, NULL }, /* 4413 */
- { 0, 0, NULL, NULL }, /* 4414 */
- { 0, 0, NULL, NULL }, /* 4415 */
- { 0, 0, NULL, NULL }, /* 4416 */
- { 0, 0, NULL, NULL }, /* 4417 */
- { 0, 0, NULL, NULL }, /* 4418 */
- { 0, 0, NULL, NULL }, /* 4419 */
- { 0, 0, NULL, NULL }, /* 4420 */
- { 0, 0, NULL, NULL }, /* 4421 */
- { 0, 0, NULL, NULL }, /* 4422 */
- { 0, 0, NULL, NULL }, /* 4423 */
- { 0, 0, NULL, NULL }, /* 4424 */
- { 0, 0, NULL, NULL }, /* 4425 */
- { 0, 0, NULL, NULL }, /* 4426 */
- { 0, 0, NULL, NULL }, /* 4427 */
- { 0, 0, NULL, NULL }, /* 4428 */
- { 0, 0, NULL, NULL }, /* 4429 */
- { 0, 0, NULL, NULL }, /* 4430 */
- { 0, 0, NULL, NULL }, /* 4431 */
- { 0, 0, NULL, NULL }, /* 4432 */
- { 0, 0, NULL, NULL }, /* 4433 */
- { 0, 0, NULL, NULL }, /* 4434 */
- { 0, 0, NULL, NULL }, /* 4435 */
- { 0, 0, NULL, NULL }, /* 4436 */
- { 0, 0, NULL, NULL }, /* 4437 */
- { 0, 0, NULL, NULL }, /* 4438 */
- { 0, 0, NULL, NULL }, /* 4439 */
- { 0, 0, NULL, NULL }, /* 4440 */
- { 0, 0, NULL, NULL }, /* 4441 */
- { 0, 0, NULL, NULL }, /* 4442 */
- { 0, 0, NULL, NULL }, /* 4443 */
- { 0, 0, NULL, NULL }, /* 4444 */
- { 0, 0, NULL, NULL }, /* 4445 */
- { 0, 0, NULL, NULL }, /* 4446 */
- { 0, 0, NULL, NULL }, /* 4447 */
- { 0, 0, NULL, NULL }, /* 4448 */
- { 0, 0, NULL, NULL }, /* 4449 */
- { 0, 0, NULL, NULL }, /* 4450 */
- { 0, 0, NULL, NULL }, /* 4451 */
- { 0, 0, NULL, NULL }, /* 4452 */
- { 0, 0, NULL, NULL }, /* 4453 */
- { 0, 0, NULL, NULL }, /* 4454 */
- { 0, 0, NULL, NULL }, /* 4455 */
- { 0, 0, NULL, NULL }, /* 4456 */
- { 0, 0, NULL, NULL }, /* 4457 */
- { 0, 0, NULL, NULL }, /* 4458 */
- { 0, 0, NULL, NULL }, /* 4459 */
- { 0, 0, NULL, NULL }, /* 4460 */
- { 0, 0, NULL, NULL }, /* 4461 */
- { 0, 0, NULL, NULL }, /* 4462 */
- { 0, 0, NULL, NULL }, /* 4463 */
- { 0, 0, NULL, NULL }, /* 4464 */
- { 0, 0, NULL, NULL }, /* 4465 */
- { 0, 0, NULL, NULL }, /* 4466 */
- { 0, 0, NULL, NULL }, /* 4467 */
- { 0, 0, NULL, NULL }, /* 4468 */
- { 0, 0, NULL, NULL }, /* 4469 */
- { 0, 0, NULL, NULL }, /* 4470 */
- { 0, 0, NULL, NULL }, /* 4471 */
- { 0, 0, NULL, NULL }, /* 4472 */
- { 0, 0, NULL, NULL }, /* 4473 */
- { 0, 0, NULL, NULL }, /* 4474 */
- { 0, 0, NULL, NULL }, /* 4475 */
- { 0, 0, NULL, NULL }, /* 4476 */
- { 0, 0, NULL, NULL }, /* 4477 */
- { 0, 0, NULL, NULL }, /* 4478 */
- { 0, 0, NULL, NULL }, /* 4479 */
- { 0, 0, NULL, NULL }, /* 4480 */
- { 0, 0, NULL, NULL }, /* 4481 */
- { 0, 0, NULL, NULL }, /* 4482 */
- { 0, 0, NULL, NULL }, /* 4483 */
- { 0, 0, NULL, NULL }, /* 4484 */
- { 0, 0, NULL, NULL }, /* 4485 */
- { 0, 0, NULL, NULL }, /* 4486 */
- { 0, 0, NULL, NULL }, /* 4487 */
- { 0, 0, NULL, NULL }, /* 4488 */
- { 0, 0, NULL, NULL }, /* 4489 */
- { 0, 0, NULL, NULL }, /* 4490 */
- { 0, 0, NULL, NULL }, /* 4491 */
- { 0, 0, NULL, NULL }, /* 4492 */
- { 0, 0, NULL, NULL }, /* 4493 */
- { 0, 0, NULL, NULL }, /* 4494 */
- { 0, 0, NULL, NULL }, /* 4495 */
- { 0, 0, NULL, NULL }, /* 4496 */
- { 0, 0, NULL, NULL }, /* 4497 */
- { 0, 0, NULL, NULL }, /* 4498 */
- { 0, 0, NULL, NULL }, /* 4499 */
- { 0, 0, NULL, NULL }, /* 4500 */
- { 0, 0, NULL, NULL }, /* 4501 */
- { 0, 0, NULL, NULL }, /* 4502 */
- { 0, 0, NULL, NULL }, /* 4503 */
- { 0, 0, NULL, NULL }, /* 4504 */
- { 0, 0, NULL, NULL }, /* 4505 */
- { 0, 0, NULL, NULL }, /* 4506 */
- { 0, 0, NULL, NULL }, /* 4507 */
- { 0, 0, NULL, NULL }, /* 4508 */
- { 0, 0, NULL, NULL }, /* 4509 */
- { 0, 0, NULL, NULL }, /* 4510 */
- { 0, 0, NULL, NULL }, /* 4511 */
- { 0, 0, NULL, NULL }, /* 4512 */
- { 0, 0, NULL, NULL }, /* 4513 */
- { 0, 0, NULL, NULL }, /* 4514 */
- { 0, 0, NULL, NULL }, /* 4515 */
- { 0, 0, NULL, NULL }, /* 4516 */
- { 0, 0, NULL, NULL }, /* 4517 */
- { 0, 0, NULL, NULL }, /* 4518 */
- { 0, 0, NULL, NULL }, /* 4519 */
- { 0, 0, NULL, NULL }, /* 4520 */
- { 0, 0, NULL, NULL }, /* 4521 */
- { 0, 0, NULL, NULL }, /* 4522 */
- { 0, 0, NULL, NULL }, /* 4523 */
- { 0, 0, NULL, NULL }, /* 4524 */
- { 0, 0, NULL, NULL }, /* 4525 */
- { 0, 0, NULL, NULL }, /* 4526 */
- { 0, 0, NULL, NULL }, /* 4527 */
- { 0, 0, NULL, NULL }, /* 4528 */
- { 0, 0, NULL, NULL }, /* 4529 */
- { 0, 0, NULL, NULL }, /* 4530 */
- { 0, 0, NULL, NULL }, /* 4531 */
- { 0, 0, NULL, NULL }, /* 4532 */
- { 0, 0, NULL, NULL }, /* 4533 */
- { 0, 0, NULL, NULL }, /* 4534 */
- { 0, 0, NULL, NULL }, /* 4535 */
- { 0, 0, NULL, NULL }, /* 4536 */
- { 0, 0, NULL, NULL }, /* 4537 */
- { 0, 0, NULL, NULL }, /* 4538 */
- { 0, 0, NULL, NULL }, /* 4539 */
- { 0, 0, NULL, NULL }, /* 4540 */
- { 0, 0, NULL, NULL }, /* 4541 */
- { 0, 0, NULL, NULL }, /* 4542 */
- { 0, 0, NULL, NULL }, /* 4543 */
- { 0, 0, NULL, NULL }, /* 4544 */
- { 0, 0, NULL, NULL }, /* 4545 */
- { 0, 0, NULL, NULL }, /* 4546 */
- { 0, 0, NULL, NULL }, /* 4547 */
- { 0, 0, NULL, NULL }, /* 4548 */
- { 0, 0, NULL, NULL }, /* 4549 */
- { 0, 0, NULL, NULL }, /* 4550 */
- { 0, 0, NULL, NULL }, /* 4551 */
- { 0, 0, NULL, NULL }, /* 4552 */
- { 0, 0, NULL, NULL }, /* 4553 */
- { 0, 0, NULL, NULL }, /* 4554 */
- { 0, 0, NULL, NULL }, /* 4555 */
- { 0, 0, NULL, NULL }, /* 4556 */
- { 0, 0, NULL, NULL }, /* 4557 */
- { 0, 0, NULL, NULL }, /* 4558 */
- { 0, 0, NULL, NULL }, /* 4559 */
- { 0, 0, NULL, NULL }, /* 4560 */
- { 0, 0, NULL, NULL }, /* 4561 */
- { 0, 0, NULL, NULL }, /* 4562 */
- { 0, 0, NULL, NULL }, /* 4563 */
- { 0, 0, NULL, NULL }, /* 4564 */
- { 0, 0, NULL, NULL }, /* 4565 */
- { 0, 0, NULL, NULL }, /* 4566 */
- { 0, 0, NULL, NULL }, /* 4567 */
- { 0, 0, NULL, NULL }, /* 4568 */
- { 0, 0, NULL, NULL }, /* 4569 */
- { 0, 0, NULL, NULL }, /* 4570 */
- { 0, 0, NULL, NULL }, /* 4571 */
- { 0, 0, NULL, NULL }, /* 4572 */
- { 0, 0, NULL, NULL }, /* 4573 */
- { 0, 0, NULL, NULL }, /* 4574 */
- { 0, 0, NULL, NULL }, /* 4575 */
- { 0, 0, NULL, NULL }, /* 4576 */
- { 0, 0, NULL, NULL }, /* 4577 */
- { 0, 0, NULL, NULL }, /* 4578 */
- { 0, 0, NULL, NULL }, /* 4579 */
- { 0, 0, NULL, NULL }, /* 4580 */
- { 0, 0, NULL, NULL }, /* 4581 */
- { 0, 0, NULL, NULL }, /* 4582 */
- { 0, 0, NULL, NULL }, /* 4583 */
- { 0, 0, NULL, NULL }, /* 4584 */
- { 0, 0, NULL, NULL }, /* 4585 */
- { 0, 0, NULL, NULL }, /* 4586 */
- { 0, 0, NULL, NULL }, /* 4587 */
- { 0, 0, NULL, NULL }, /* 4588 */
- { 0, 0, NULL, NULL }, /* 4589 */
- { 0, 0, NULL, NULL }, /* 4590 */
- { 0, 0, NULL, NULL }, /* 4591 */
- { 0, 0, NULL, NULL }, /* 4592 */
- { 0, 0, NULL, NULL }, /* 4593 */
- { 0, 0, NULL, NULL }, /* 4594 */
- { 0, 0, NULL, NULL }, /* 4595 */
- { 0, 0, NULL, NULL }, /* 4596 */
- { 0, 0, NULL, NULL }, /* 4597 */
- { 0, 0, NULL, NULL }, /* 4598 */
- { 0, 0, NULL, NULL }, /* 4599 */
- { 0, 0, NULL, NULL }, /* 4600 */
- { 0, 0, NULL, NULL }, /* 4601 */
- { 0, 0, NULL, NULL }, /* 4602 */
- { 0, 0, NULL, NULL }, /* 4603 */
- { 0, 0, NULL, NULL }, /* 4604 */
- { 0, 0, NULL, NULL }, /* 4605 */
- { 0, 0, NULL, NULL }, /* 4606 */
- { 0, 0, NULL, NULL }, /* 4607 */
- { 0, 0, NULL, NULL }, /* 4608 */
- { 0, 0, NULL, NULL }, /* 4609 */
- { 0, 0, NULL, NULL }, /* 4610 */
- { 0, 0, NULL, NULL }, /* 4611 */
- { 0, 0, NULL, NULL }, /* 4612 */
- { 0, 0, NULL, NULL }, /* 4613 */
- { 0, 0, NULL, NULL }, /* 4614 */
- { 0, 0, NULL, NULL }, /* 4615 */
- { 0, 0, NULL, NULL }, /* 4616 */
- { 0, 0, NULL, NULL }, /* 4617 */
- { 0, 0, NULL, NULL }, /* 4618 */
- { 0, 0, NULL, NULL }, /* 4619 */
- { 0, 0, NULL, NULL }, /* 4620 */
- { 0, 0, NULL, NULL }, /* 4621 */
- { 0, 0, NULL, NULL }, /* 4622 */
- { 0, 0, NULL, NULL }, /* 4623 */
- { 0, 0, NULL, NULL }, /* 4624 */
- { 0, 0, NULL, NULL }, /* 4625 */
- { 0, 0, NULL, NULL }, /* 4626 */
- { 0, 0, NULL, NULL }, /* 4627 */
- { 0, 0, NULL, NULL }, /* 4628 */
- { 0, 0, NULL, NULL }, /* 4629 */
- { 0, 0, NULL, NULL }, /* 4630 */
- { 0, 0, NULL, NULL }, /* 4631 */
- { 0, 0, NULL, NULL }, /* 4632 */
- { 0, 0, NULL, NULL }, /* 4633 */
- { 0, 0, NULL, NULL }, /* 4634 */
- { 0, 0, NULL, NULL }, /* 4635 */
- { 0, 0, NULL, NULL }, /* 4636 */
- { 0, 0, NULL, NULL }, /* 4637 */
- { 0, 0, NULL, NULL }, /* 4638 */
- { 0, 0, NULL, NULL }, /* 4639 */
- { 0, 0, NULL, NULL }, /* 4640 */
- { 0, 0, NULL, NULL }, /* 4641 */
- { 0, 0, NULL, NULL }, /* 4642 */
- { 0, 0, NULL, NULL }, /* 4643 */
- { 0, 0, NULL, NULL }, /* 4644 */
- { 0, 0, NULL, NULL }, /* 4645 */
- { 0, 0, NULL, NULL }, /* 4646 */
- { 0, 0, NULL, NULL }, /* 4647 */
- { 0, 0, NULL, NULL }, /* 4648 */
- { 0, 0, NULL, NULL }, /* 4649 */
- { 0, 0, NULL, NULL }, /* 4650 */
- { 0, 0, NULL, NULL }, /* 4651 */
- { 0, 0, NULL, NULL }, /* 4652 */
- { 0, 0, NULL, NULL }, /* 4653 */
- { 0, 0, NULL, NULL }, /* 4654 */
- { 0, 0, NULL, NULL }, /* 4655 */
- { 0, 0, NULL, NULL }, /* 4656 */
- { 0, 0, NULL, NULL }, /* 4657 */
- { 0, 0, NULL, NULL }, /* 4658 */
- { 0, 0, NULL, NULL }, /* 4659 */
- { 0, 0, NULL, NULL }, /* 4660 */
- { 0, 0, NULL, NULL }, /* 4661 */
- { 0, 0, NULL, NULL }, /* 4662 */
- { 0, 0, NULL, NULL }, /* 4663 */
- { 0, 0, NULL, NULL }, /* 4664 */
- { 0, 0, NULL, NULL }, /* 4665 */
- { 0, 0, NULL, NULL }, /* 4666 */
- { 0, 0, NULL, NULL }, /* 4667 */
- { 0, 0, NULL, NULL }, /* 4668 */
- { 0, 0, NULL, NULL }, /* 4669 */
- { 0, 0, NULL, NULL }, /* 4670 */
- { 0, 0, NULL, NULL }, /* 4671 */
- { 0, 0, NULL, NULL }, /* 4672 */
- { 0, 0, NULL, NULL }, /* 4673 */
- { 0, 0, NULL, NULL }, /* 4674 */
- { 0, 0, NULL, NULL }, /* 4675 */
- { 0, 0, NULL, NULL }, /* 4676 */
- { 0, 0, NULL, NULL }, /* 4677 */
- { 0, 0, NULL, NULL }, /* 4678 */
- { 0, 0, NULL, NULL }, /* 4679 */
- { 0, 0, NULL, NULL }, /* 4680 */
- { 0, 0, NULL, NULL }, /* 4681 */
- { 0, 0, NULL, NULL }, /* 4682 */
- { 0, 0, NULL, NULL }, /* 4683 */
- { 0, 0, NULL, NULL }, /* 4684 */
- { 0, 0, NULL, NULL }, /* 4685 */
- { 0, 0, NULL, NULL }, /* 4686 */
- { 0, 0, NULL, NULL }, /* 4687 */
- { 0, 0, NULL, NULL }, /* 4688 */
- { 0, 0, NULL, NULL }, /* 4689 */
- { 0, 0, NULL, NULL }, /* 4690 */
- { 0, 0, NULL, NULL }, /* 4691 */
- { 0, 0, NULL, NULL }, /* 4692 */
- { 0, 0, NULL, NULL }, /* 4693 */
- { 0, 0, NULL, NULL }, /* 4694 */
- { 0, 0, NULL, NULL }, /* 4695 */
- { 0, 0, NULL, NULL }, /* 4696 */
- { 0, 0, NULL, NULL }, /* 4697 */
- { 0, 0, NULL, NULL }, /* 4698 */
- { 0, 0, NULL, NULL }, /* 4699 */
- { 0, 0, NULL, NULL }, /* 4700 */
- { 0, 0, NULL, NULL }, /* 4701 */
- { 0, 0, NULL, NULL }, /* 4702 */
- { 0, 0, NULL, NULL }, /* 4703 */
- { 0, 0, NULL, NULL }, /* 4704 */
- { 0, 0, NULL, NULL }, /* 4705 */
- { 0, 0, NULL, NULL }, /* 4706 */
- { 0, 0, NULL, NULL }, /* 4707 */
- { 0, 0, NULL, NULL }, /* 4708 */
- { 0, 0, NULL, NULL }, /* 4709 */
- { 0, 0, NULL, NULL }, /* 4710 */
- { 0, 0, NULL, NULL }, /* 4711 */
- { 0, 0, NULL, NULL }, /* 4712 */
- { 0, 0, NULL, NULL }, /* 4713 */
- { 0, 0, NULL, NULL }, /* 4714 */
- { 0, 0, NULL, NULL }, /* 4715 */
- { 0, 0, NULL, NULL }, /* 4716 */
- { 0, 0, NULL, NULL }, /* 4717 */
- { 0, 0, NULL, NULL }, /* 4718 */
- { 0, 0, NULL, NULL }, /* 4719 */
- { 0, 0, NULL, NULL }, /* 4720 */
- { 0, 0, NULL, NULL }, /* 4721 */
- { 0, 0, NULL, NULL }, /* 4722 */
- { 0, 0, NULL, NULL }, /* 4723 */
- { 0, 0, NULL, NULL }, /* 4724 */
- { 0, 0, NULL, NULL }, /* 4725 */
- { 0, 0, NULL, NULL }, /* 4726 */
- { 0, 0, NULL, NULL }, /* 4727 */
- { 0, 0, NULL, NULL }, /* 4728 */
- { 0, 0, NULL, NULL }, /* 4729 */
- { 0, 0, NULL, NULL }, /* 4730 */
- { 0, 0, NULL, NULL }, /* 4731 */
- { 0, 0, NULL, NULL }, /* 4732 */
- { 0, 0, NULL, NULL }, /* 4733 */
- { 0, 0, NULL, NULL }, /* 4734 */
- { 0, 0, NULL, NULL }, /* 4735 */
- { 0, 0, NULL, NULL }, /* 4736 */
- { 0, 0, NULL, NULL }, /* 4737 */
- { 0, 0, NULL, NULL }, /* 4738 */
- { 0, 0, NULL, NULL }, /* 4739 */
- { 0, 0, NULL, NULL }, /* 4740 */
- { 0, 0, NULL, NULL }, /* 4741 */
- { 0, 0, NULL, NULL }, /* 4742 */
- { 0, 0, NULL, NULL }, /* 4743 */
- { 0, 0, NULL, NULL }, /* 4744 */
- { 0, 0, NULL, NULL }, /* 4745 */
- { 0, 0, NULL, NULL }, /* 4746 */
- { 0, 0, NULL, NULL }, /* 4747 */
- { 0, 0, NULL, NULL }, /* 4748 */
- { 0, 0, NULL, NULL }, /* 4749 */
- { 0, 0, NULL, NULL }, /* 4750 */
- { 0, 0, NULL, NULL }, /* 4751 */
- { 0, 0, NULL, NULL }, /* 4752 */
- { 0, 0, NULL, NULL }, /* 4753 */
- { 0, 0, NULL, NULL }, /* 4754 */
- { 0, 0, NULL, NULL }, /* 4755 */
- { 0, 0, NULL, NULL }, /* 4756 */
- { 0, 0, NULL, NULL }, /* 4757 */
- { 0, 0, NULL, NULL }, /* 4758 */
- { 0, 0, NULL, NULL }, /* 4759 */
- { 0, 0, NULL, NULL }, /* 4760 */
- { 0, 0, NULL, NULL }, /* 4761 */
- { 0, 0, NULL, NULL }, /* 4762 */
- { 0, 0, NULL, NULL }, /* 4763 */
- { 0, 0, NULL, NULL }, /* 4764 */
- { 0, 0, NULL, NULL }, /* 4765 */
- { 0, 0, NULL, NULL }, /* 4766 */
- { 0, 0, NULL, NULL }, /* 4767 */
- { 0, 0, NULL, NULL }, /* 4768 */
- { 0, 0, NULL, NULL }, /* 4769 */
- { 0, 0, NULL, NULL }, /* 4770 */
- { 0, 0, NULL, NULL }, /* 4771 */
- { 0, 0, NULL, NULL }, /* 4772 */
- { 0, 0, NULL, NULL }, /* 4773 */
- { 0, 0, NULL, NULL }, /* 4774 */
- { 0, 0, NULL, NULL }, /* 4775 */
- { 0, 0, NULL, NULL }, /* 4776 */
- { 0, 0, NULL, NULL }, /* 4777 */
- { 0, 0, NULL, NULL }, /* 4778 */
- { 0, 0, NULL, NULL }, /* 4779 */
- { 0, 0, NULL, NULL }, /* 4780 */
- { 0, 0, NULL, NULL }, /* 4781 */
- { 0, 0, NULL, NULL }, /* 4782 */
- { 0, 0, NULL, NULL }, /* 4783 */
- { 0, 0, NULL, NULL }, /* 4784 */
- { 0, 0, NULL, NULL }, /* 4785 */
- { 0, 0, NULL, NULL }, /* 4786 */
- { 0, 0, NULL, NULL }, /* 4787 */
- { 0, 0, NULL, NULL }, /* 4788 */
- { 0, 0, NULL, NULL }, /* 4789 */
- { 0, 0, NULL, NULL }, /* 4790 */
- { 0, 0, NULL, NULL }, /* 4791 */
- { 0, 0, NULL, NULL }, /* 4792 */
- { 0, 0, NULL, NULL }, /* 4793 */
- { 0, 0, NULL, NULL }, /* 4794 */
- { 0, 0, NULL, NULL }, /* 4795 */
- { 0, 0, NULL, NULL }, /* 4796 */
- { 0, 0, NULL, NULL }, /* 4797 */
- { 0, 0, NULL, NULL }, /* 4798 */
- { 0, 0, NULL, NULL }, /* 4799 */
- { 0, 0, NULL, NULL }, /* 4800 */
- { 0, 0, NULL, NULL }, /* 4801 */
- { 0, 0, NULL, NULL }, /* 4802 */
- { 0, 0, NULL, NULL }, /* 4803 */
- { 0, 0, NULL, NULL }, /* 4804 */
- { 0, 0, NULL, NULL }, /* 4805 */
- { 0, 0, NULL, NULL }, /* 4806 */
- { 0, 0, NULL, NULL }, /* 4807 */
- { 0, 0, NULL, NULL }, /* 4808 */
- { 0, 0, NULL, NULL }, /* 4809 */
- { 0, 0, NULL, NULL }, /* 4810 */
- { 0, 0, NULL, NULL }, /* 4811 */
- { 0, 0, NULL, NULL }, /* 4812 */
- { 0, 0, NULL, NULL }, /* 4813 */
- { 0, 0, NULL, NULL }, /* 4814 */
- { 0, 0, NULL, NULL }, /* 4815 */
- { 0, 0, NULL, NULL }, /* 4816 */
- { 0, 0, NULL, NULL }, /* 4817 */
- { 0, 0, NULL, NULL }, /* 4818 */
- { 0, 0, NULL, NULL }, /* 4819 */
- { 0, 0, NULL, NULL }, /* 4820 */
- { 0, 0, NULL, NULL }, /* 4821 */
- { 0, 0, NULL, NULL }, /* 4822 */
- { 0, 0, NULL, NULL }, /* 4823 */
- { 0, 0, NULL, NULL }, /* 4824 */
- { 0, 0, NULL, NULL }, /* 4825 */
- { 0, 0, NULL, NULL }, /* 4826 */
- { 0, 0, NULL, NULL }, /* 4827 */
- { 0, 0, NULL, NULL }, /* 4828 */
- { 0, 0, NULL, NULL }, /* 4829 */
- { 0, 0, NULL, NULL }, /* 4830 */
- { 0, 0, NULL, NULL }, /* 4831 */
- { 0, 0, NULL, NULL }, /* 4832 */
- { 0, 0, NULL, NULL }, /* 4833 */
- { 0, 0, NULL, NULL }, /* 4834 */
- { 0, 0, NULL, NULL }, /* 4835 */
- { 0, 0, NULL, NULL }, /* 4836 */
- { 0, 0, NULL, NULL }, /* 4837 */
- { 0, 0, NULL, NULL }, /* 4838 */
- { 0, 0, NULL, NULL }, /* 4839 */
- { 0, 0, NULL, NULL }, /* 4840 */
- { 0, 0, NULL, NULL }, /* 4841 */
- { 0, 0, NULL, NULL }, /* 4842 */
- { 0, 0, NULL, NULL }, /* 4843 */
- { 0, 0, NULL, NULL }, /* 4844 */
- { 0, 0, NULL, NULL }, /* 4845 */
- { 0, 0, NULL, NULL }, /* 4846 */
- { 0, 0, NULL, NULL }, /* 4847 */
- { 0, 0, NULL, NULL }, /* 4848 */
- { 0, 0, NULL, NULL }, /* 4849 */
- { 0, 0, NULL, NULL }, /* 4850 */
- { 0, 0, NULL, NULL }, /* 4851 */
- { 0, 0, NULL, NULL }, /* 4852 */
- { 0, 0, NULL, NULL }, /* 4853 */
- { 0, 0, NULL, NULL }, /* 4854 */
- { 0, 0, NULL, NULL }, /* 4855 */
- { 0, 0, NULL, NULL }, /* 4856 */
- { 0, 0, NULL, NULL }, /* 4857 */
- { 0, 0, NULL, NULL }, /* 4858 */
- { 0, 0, NULL, NULL }, /* 4859 */
- { 0, 0, NULL, NULL }, /* 4860 */
- { 0, 0, NULL, NULL }, /* 4861 */
- { 0, 0, NULL, NULL }, /* 4862 */
- { 0, 0, NULL, NULL }, /* 4863 */
- { 0, 0, NULL, NULL }, /* 4864 */
- { 0, 0, NULL, NULL }, /* 4865 */
- { 0, 0, NULL, NULL }, /* 4866 */
- { 0, 0, NULL, NULL }, /* 4867 */
- { 0, 0, NULL, NULL }, /* 4868 */
- { 0, 0, NULL, NULL }, /* 4869 */
- { 0, 0, NULL, NULL }, /* 4870 */
- { 0, 0, NULL, NULL }, /* 4871 */
- { 0, 0, NULL, NULL }, /* 4872 */
- { 0, 0, NULL, NULL }, /* 4873 */
- { 0, 0, NULL, NULL }, /* 4874 */
- { 0, 0, NULL, NULL }, /* 4875 */
- { 0, 0, NULL, NULL }, /* 4876 */
- { 0, 0, NULL, NULL }, /* 4877 */
- { 0, 0, NULL, NULL }, /* 4878 */
- { 0, 0, NULL, NULL }, /* 4879 */
- { 0, 0, NULL, NULL }, /* 4880 */
- { 0, 0, NULL, NULL }, /* 4881 */
- { 0, 0, NULL, NULL }, /* 4882 */
- { 0, 0, NULL, NULL }, /* 4883 */
- { 0, 0, NULL, NULL }, /* 4884 */
- { 0, 0, NULL, NULL }, /* 4885 */
- { 0, 0, NULL, NULL }, /* 4886 */
- { 0, 0, NULL, NULL }, /* 4887 */
- { 0, 0, NULL, NULL }, /* 4888 */
- { 0, 0, NULL, NULL }, /* 4889 */
- { 0, 0, NULL, NULL }, /* 4890 */
- { 0, 0, NULL, NULL }, /* 4891 */
- { 0, 0, NULL, NULL }, /* 4892 */
- { 0, 0, NULL, NULL }, /* 4893 */
- { 0, 0, NULL, NULL }, /* 4894 */
- { 0, 0, NULL, NULL }, /* 4895 */
- { 0, 0, NULL, NULL }, /* 4896 */
- { 0, 0, NULL, NULL }, /* 4897 */
- { 0, 0, NULL, NULL }, /* 4898 */
- { 0, 0, NULL, NULL }, /* 4899 */
- { 0, 0, NULL, NULL }, /* 4900 */
- { 0, 0, NULL, NULL }, /* 4901 */
- { 0, 0, NULL, NULL }, /* 4902 */
- { 0, 0, NULL, NULL }, /* 4903 */
- { 0, 0, NULL, NULL }, /* 4904 */
- { 0, 0, NULL, NULL }, /* 4905 */
- { 0, 0, NULL, NULL }, /* 4906 */
- { 0, 0, NULL, NULL }, /* 4907 */
- { 0, 0, NULL, NULL }, /* 4908 */
- { 0, 0, NULL, NULL }, /* 4909 */
- { 0, 0, NULL, NULL }, /* 4910 */
- { 0, 0, NULL, NULL }, /* 4911 */
- { 0, 0, NULL, NULL }, /* 4912 */
- { 0, 0, NULL, NULL }, /* 4913 */
- { 0, 0, NULL, NULL }, /* 4914 */
- { 0, 0, NULL, NULL }, /* 4915 */
- { 0, 0, NULL, NULL }, /* 4916 */
- { 0, 0, NULL, NULL }, /* 4917 */
- { 0, 0, NULL, NULL }, /* 4918 */
- { 0, 0, NULL, NULL }, /* 4919 */
- { 0, 0, NULL, NULL }, /* 4920 */
- { 0, 0, NULL, NULL }, /* 4921 */
- { 0, 0, NULL, NULL }, /* 4922 */
- { 0, 0, NULL, NULL }, /* 4923 */
- { 0, 0, NULL, NULL }, /* 4924 */
- { 0, 0, NULL, NULL }, /* 4925 */
- { 0, 0, NULL, NULL }, /* 4926 */
- { 0, 0, NULL, NULL }, /* 4927 */
- { 0, 0, NULL, NULL }, /* 4928 */
- { 0, 0, NULL, NULL }, /* 4929 */
- { 0, 0, NULL, NULL }, /* 4930 */
- { 0, 0, NULL, NULL }, /* 4931 */
- { 0, 0, NULL, NULL }, /* 4932 */
- { 0, 0, NULL, NULL }, /* 4933 */
- { 0, 0, NULL, NULL }, /* 4934 */
- { 0, 0, NULL, NULL }, /* 4935 */
- { 0, 0, NULL, NULL }, /* 4936 */
- { 0, 0, NULL, NULL }, /* 4937 */
- { 0, 0, NULL, NULL }, /* 4938 */
- { 0, 0, NULL, NULL }, /* 4939 */
- { 0, 0, NULL, NULL }, /* 4940 */
- { 0, 0, NULL, NULL }, /* 4941 */
- { 0, 0, NULL, NULL }, /* 4942 */
- { 0, 0, NULL, NULL }, /* 4943 */
- { 0, 0, NULL, NULL }, /* 4944 */
- { 0, 0, NULL, NULL }, /* 4945 */
- { 0, 0, NULL, NULL }, /* 4946 */
- { 0, 0, NULL, NULL }, /* 4947 */
- { 0, 0, NULL, NULL }, /* 4948 */
- { 0, 0, NULL, NULL }, /* 4949 */
- { 0, 0, NULL, NULL }, /* 4950 */
- { 0, 0, NULL, NULL }, /* 4951 */
- { 0, 0, NULL, NULL }, /* 4952 */
- { 0, 0, NULL, NULL }, /* 4953 */
- { 0, 0, NULL, NULL }, /* 4954 */
- { 0, 0, NULL, NULL }, /* 4955 */
- { 0, 0, NULL, NULL }, /* 4956 */
- { 0, 0, NULL, NULL }, /* 4957 */
- { 0, 0, NULL, NULL }, /* 4958 */
- { 0, 0, NULL, NULL }, /* 4959 */
- { 0, 0, NULL, NULL }, /* 4960 */
- { 0, 0, NULL, NULL }, /* 4961 */
- { 0, 0, NULL, NULL }, /* 4962 */
- { 0, 0, NULL, NULL }, /* 4963 */
- { 0, 0, NULL, NULL }, /* 4964 */
- { 0, 0, NULL, NULL }, /* 4965 */
- { 0, 0, NULL, NULL }, /* 4966 */
- { 0, 0, NULL, NULL }, /* 4967 */
- { 0, 0, NULL, NULL }, /* 4968 */
- { 0, 0, NULL, NULL }, /* 4969 */
- { 0, 0, NULL, NULL }, /* 4970 */
- { 0, 0, NULL, NULL }, /* 4971 */
- { 0, 0, NULL, NULL }, /* 4972 */
- { 0, 0, NULL, NULL }, /* 4973 */
- { 0, 0, NULL, NULL }, /* 4974 */
- { 0, 0, NULL, NULL }, /* 4975 */
- { 0, 0, NULL, NULL }, /* 4976 */
- { 0, 0, NULL, NULL }, /* 4977 */
- { 0, 0, NULL, NULL }, /* 4978 */
- { 0, 0, NULL, NULL }, /* 4979 */
- { 0, 0, NULL, NULL }, /* 4980 */
- { 0, 0, NULL, NULL }, /* 4981 */
- { 0, 0, NULL, NULL }, /* 4982 */
- { 0, 0, NULL, NULL }, /* 4983 */
- { 0, 0, NULL, NULL }, /* 4984 */
- { 0, 0, NULL, NULL }, /* 4985 */
- { 0, 0, NULL, NULL }, /* 4986 */
- { 0, 0, NULL, NULL }, /* 4987 */
- { 0, 0, NULL, NULL }, /* 4988 */
- { 0, 0, NULL, NULL }, /* 4989 */
- { 0, 0, NULL, NULL }, /* 4990 */
- { 0, 0, NULL, NULL }, /* 4991 */
- { 0, 0, NULL, NULL }, /* 4992 */
- { 0, 0, NULL, NULL }, /* 4993 */
- { 0, 0, NULL, NULL }, /* 4994 */
- { 0, 0, NULL, NULL }, /* 4995 */
- { 0, 0, NULL, NULL }, /* 4996 */
- { 0, 0, NULL, NULL }, /* 4997 */
- { 0, 0, NULL, NULL }, /* 4998 */
- { 0, 0, NULL, NULL }, /* 4999 */ /* end of Linux o32 */
-#if defined(LINUX_MIPSN64)
- /* For an N64 strace decode the N64 64-bit syscalls. */
- { 3, TF, sys_read, "read" }, /* 5000 */ /* start of Linux N64 */
- { 3, TF, sys_write, "write" }, /* 5001 */
- { 3, TF, sys_open, "open" }, /* 5002 */
- { 1, 0, sys_close, "close" }, /* 5003 */
- { 2, TF, sys_stat, "stat" }, /* 5004 */
- { 2, 0, sys_fstat, "fstat" }, /* 5005 */
- { 2, TF, sys_lstat, "lstat" }, /* 5006 */
- { 3, 0, sys_poll, "poll" }, /* 5007 */
- { 3, 0, sys_lseek, "lseek" }, /* 5008 */
- { 6, TD, sys_mmap, "mmap" }, /* 5009 */
- { 3, 0, sys_mprotect, "mprotect" }, /* 5010 */
- { 2, 0, sys_munmap, "munmap" }, /* 5011 */
- { 1, 0, sys_brk, "brk" }, /* 5012 */
- { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 5013 */
- { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 5014 */
- { 3, 0, sys_ioctl, "ioctl" }, /* 5015 */
- { 6, TF, sys_pread, "pread" }, /* 5016 */
- { 6, TF, sys_pwrite, "pwrite" }, /* 5017 */
- { 3, 0, sys_readv, "readv" }, /* 5018 */
- { 3, 0, sys_writev, "writev" }, /* 5019 */
- { 2, TF, sys_access, "access" }, /* 5020 */
- { 1, 0, sys_pipe, "pipe" }, /* 5021 */
- { 5, 0, sys_select, "_newselect" }, /* 5022 */
- { 0, 0, sys_sched_yield, "sched_yield" }, /* 5023 */
- { 5, 0, sys_mremap, "mremap" }, /* 5024 */
- { 3, 0, sys_msync, "msync" }, /* 5025 */
- { 3, 0, sys_mincore, "mincore" }, /* 5026 */
- { 3, 0, sys_madvise, "madvise" }, /* 5027 */
- { 3, TI, sys_shmget, "shmget" }, /* 5028 */
- { 3, TI, sys_shmat, "shmgat" }, /* 5029 */
- { 3, TI, sys_shmctl, "shmctl" }, /* 5030 */
- { 1, 0, sys_dup, "dup" }, /* 5031 */
- { 2, 0, sys_dup2, "dup2" }, /* 5032 */
- { 0, TS, sys_pause, "pause" }, /* 5033 */
- { 2, 0, sys_nanosleep, "nanosleep" }, /* 5034 */
- { 2, 0, sys_getitimer, "getitimer" }, /* 5035 */
- { 3, 0, sys_setitimer, "setitimer" }, /* 5036 */
- { 1, 0, sys_alarm, "alarm" }, /* 5037 */
- { 0, 0, sys_getpid, "getpid" }, /* 5038 */
- { 4, TD|TN, sys_sendfile, "sendfile" }, /* 5039 */
- { 2, 0, sys_socketcall, "socketcall" }, /* 5040 */
- { 3, TN, sys_connect, "connect" }, /* 5041 */
- { 3, TN, sys_accept, "accept" }, /* 5042 */
- { 6, TN, sys_sendto, "sendto" }, /* 5043 */
- { 6, TN, sys_recvfrom, "recvfrom" }, /* 5044 */
- { 3, TN, sys_sendmsg, "sendmsg" }, /* 5045 */
- { 3, TN, sys_recvmsg, "recvmsg" }, /* 5046 */
- { 2, TN, sys_shutdown, "shutdown" }, /* 5047 */
- { 3, TN, sys_bind, "bind" }, /* 5048 */
- { 2, TN, sys_listen, "listen" }, /* 5049 */
- { 3, TN, sys_getsockname, "getsockname" }, /* 5050 */
- { 3, TN, sys_getpeername, "getpeername" }, /* 5051 */
- { 4, TN, sys_socketpair, "socketpair" }, /* 5052 */
- { 5, TN, sys_setsockopt, "setsockopt" }, /* 5053 */
- { 5, TN, sys_getsockopt, "getsockopt" }, /* 5054 */
- { 2, TP, sys_clone, "clone" }, /* 5055 */
- { 0, TP, sys_fork, "fork" }, /* 5056 */
- { 3, TF|TP, sys_execve, "execve" }, /* 5057 */
- { 1, TP, sys_exit, "exit" }, /* 5058 */
- { 4, TP, sys_wait4, "wait4" }, /* 5059 */
- { 2, TS, sys_kill, "kill" }, /* 5060 */
- { 1, 0, sys_uname, "uname" }, /* 5061 */
- { 3, TI, sys_semget, "semget" }, /* 5062 */
- { 3, TI, printargs, "semop" }, /* 5063 */
- { 4, TI, sys_semctl, "semctl" }, /* 5064 */
- { 1, TI, sys_shmdt, "shmdt" }, /* 5065 */
- { 2, TI, sys_msgget, "msgget" }, /* 5066 */
- { 4, TI, sys_msgsnd, "msgsnd" }, /* 5067 */
- { 5, TI, sys_msgrcv, "msgrcv" }, /* 5068 */
- { 3, TI, sys_msgctl, "msgctl" }, /* 5069 */
- { 3, 0, sys_fcntl, "fcntl" }, /* 5070 */
- { 2, 0, sys_flock, "flock" }, /* 5071 */
- { 1, TD, sys_fsync, "fsync" }, /* 5072 */
- { 1, 0, sys_fdatasync, "fdatasync" }, /* 5073 */
- { 2, TF, sys_truncate, "truncate" }, /* 5074 */
- { 2, 0, sys_ftruncate, "ftruncate" }, /* 5075 */
- { 3, 0, sys_getdents, "getdents" }, /* 5076 */
- { 2, TF, sys_getcwd, "getcwd" }, /* 5077 */
- { 1, TF, sys_chdir, "chdir" }, /* 5078 */
- { 1, TF, sys_fchdir, "fchdir" }, /* 5079 */
- { 2, TF, sys_rename, "rename" }, /* 5080 */
- { 2, TF, sys_mkdir, "mkdir" }, /* 5081 */
- { 1, TF, sys_rmdir, "rmdir" }, /* 5082 */
- { 2, TF, sys_creat, "creat" }, /* 5083 */
- { 2, TF, sys_link, "link" }, /* 5084 */
- { 1, TF, sys_unlink, "unlink" }, /* 5085 */
- { 2, TF, sys_symlink, "symlink" }, /* 5086 */
- { 3, TF, sys_readlink, "readlink" }, /* 5087 */
- { 2, TF, sys_chmod, "chmod" }, /* 5088 */
- { 2, 0, sys_fchmod, "fchmod" }, /* 5089 */
- { 3, TF, sys_chown, "chown" }, /* 5090 */
- { 3, 0, sys_fchown, "fchown" }, /* 5091 */
- { 3, TF, sys_chown, "lchown" }, /* 5092 */
- { 1, 0, sys_umask, "umask" }, /* 5093 */
- { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 5094 */
- { 2, 0, sys_getrlimit, "getrlimit" }, /* 5095 */
- { 2, 0, sys_getrusage, "getrusage" }, /* 5096 */
- { 1, 0, sys_sysinfo, "sysinfo" }, /* 5097 */
- { 1, 0, sys_times, "times" }, /* 5098 */
- { 4, 0, sys_ptrace, "ptrace" }, /* 5099 */
- { 0, NF, sys_getuid, "getuid" }, /* 5100 */
- { 3, 0, sys_syslog, "syslog" }, /* 5101 */
- { 0, NF, sys_getgid, "getgid" }, /* 5102 */
- { 1, 0, sys_setuid, "setuid" }, /* 5103 */
- { 1, 0, sys_setgid, "setgid" }, /* 5104 */
- { 0, NF, sys_geteuid, "geteuid" }, /* 5105 */
- { 0, NF, sys_getegid, "getegid" }, /* 5106 */
- { 2, 0, sys_setpgid, "setpgid" }, /* 5107 */
- { 0, 0, sys_getppid, "getppid" }, /* 5108 */
- { 0, 0, sys_getpgrp, "getpgrp" }, /* 5109 */
- { 0, 0, sys_setsid, "setsid" }, /* 5110 */
- { 2, 0, sys_setreuid, "setreuid" }, /* 5111 */
- { 2, 0, sys_setregid, "setregid" }, /* 5112 */
- { 2, 0, sys_getgroups, "getgroups" }, /* 5113 */
- { 2, 0, sys_setgroups, "setgroups" }, /* 5114 */
- { 3, 0, sys_setresuid, "setresuid" }, /* 5115 */
- { 3, 0, sys_getresuid, "getresuid" }, /* 5116 */
- { 3, 0, sys_setresgid, "setresgid" }, /* 5117 */
- { 3, 0, sys_getresgid, "getresgid" }, /* 5118 */
- { 0, 0, sys_getpgid, "getpgid" }, /* 5119 */
- { 1, NF, sys_setfsuid, "setfsuid" }, /* 5120 */
- { 1, NF, sys_setfsgid, "setfsgid" }, /* 5121 */
- { 1, 0, sys_getsid, "getsid" }, /* 5122 */
- { 2, 0, sys_capget, "capget" }, /* 5123 */
- { 2, 0, sys_capset, "capset" }, /* 5124 */
- { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 5125 */
- { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait"},/* 5126 */
- { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"},/* 5127 */
- { 2, TS, sys_rt_sigsuspend, "rt_siguspend" }, /* 5128 */
- { 2, TS, sys_sigaltstack, "sigaltstatck" }, /* 5129 */
- { 2, TF, sys_utime, "utime" }, /* 5130 */
- { 3, TF, sys_mknod, "mknod" }, /* 5131 */
- { 1, 0, sys_personality, "personality" }, /* 5132 */
- { 2, 0, sys_ustat, "ustat" }, /* 5133 */
- { 3, 0, sys_statfs, "statfs" }, /* 5134 */
- { 3, 0, sys_fstatfs, "fstatfs" }, /* 5135 */
- { 5, 0, sys_sysfs, "sysfs" }, /* 5136 */
- { 2, 0, sys_getpriority, "getpriority" }, /* 5137 */
- { 3, 0, sys_setpriority, "setpriority" }, /* 5138 */
- { 2, 0, sys_sched_setparam, "sched_setparam"}, /* 5139 */
- { 2, 0, sys_sched_getparam, "sched_getparam"}, /* 5140 */
- { 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 5141 */
- { 1, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 5142 */
- { 1, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 5143 */
- { 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 5144 */
- { 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 5145 */
- { 2, 0, sys_mlock, "mlock" }, /* 5146 */
- { 2, 0, sys_munlock, "munlock" }, /* 5147 */
- { 1, 0, sys_mlockall, "mlockall" }, /* 5148 */
- { 0, 0, sys_munlockall, "munlockall" }, /* 5149 */
- { 0, 0, sys_vhangup, "vhangup" }, /* 5150 */
- { 2, 0, sys_pivotroot, "pivot_root" }, /* 5151 */
- { 1, 0, sys_sysctl, "_sysctl" }, /* 5152 */
- { 5, 0, sys_prctl, "prctl" }, /* 5153 */
- { 1, 0, sys_adjtimex, "adjtimex" }, /* 5154 */
- { 2, 0, sys_setrlimit, "setrlimit" }, /* 5155 */
- { 1, TF, sys_chroot, "chroot" }, /* 5156 */
- { 0, 0, sys_sync, "sync" }, /* 5157 */
- { 1, TF, sys_acct, "acct" }, /* 5158 */
- { 2, 0, sys_settimeofday, "settimeofday" }, /* 5159 */
- { 5, TF, sys_mount, "mount" }, /* 5160 */
- { 2, TF, sys_umount2, "umount" }, /* 5161 */
- { 2, TF, sys_swapon, "swapon" }, /* 5162 */
- { 1, TF, sys_swapoff, "swapoff" }, /* 5163 */
- { 4, 0, sys_reboot, "reboot" }, /* 5164 */
- { 2, 0, sys_sethostname, "sethostname" }, /* 5165 */
- { 2, 0, sys_setdomainname, "setdomainname" }, /* 5166 */
- { 2, 0, sys_create_module, "create_module" }, /* 5167 */
- { 4, 0, sys_init_module, "init_module" }, /* 5168 */
- { 1, 0, sys_delete_module, "delete_module" }, /* 5169 */
- { 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 5170 */
- { 5, 0, sys_query_module, "query_module" }, /* 5171 */
- { 4, 0, sys_quotactl, "quotactl" }, /* 5172 */
- { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 5173 */
- { 5, TN, printargs, "getpmsg" }, /* 5174 */
- { 5, TN, printargs, "putpmsg" }, /* 5175 */
- { 0, 0, sys_afs_syscall, "afs_syscall" }, /* 5176 */
- { 0, 0, printargs, "reserved177" }, /* 5177 */
- { 0, 0, sys_gettid, "gettid" }, /* 5178 */
- { 3, 0, sys_readahead, "readahead" }, /* 5179 */
- { 5, 0, sys_setxattr, "setxattr" }, /* 5180 */
- { 5, 0, sys_setxattr, "lsetxattr" }, /* 5181 */
- { 5, 0, sys_fsetxattr, "fsetxattr" }, /* 5182 */
- { 4, 0, sys_getxattr, "getxattr" }, /* 5183 */
- { 4, 0, sys_getxattr, "lgetxattr" }, /* 5184 */
- { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 5185 */
- { 3, 0, sys_listxattr, "listxattr" }, /* 5186 */
- { 3, 0, sys_listxattr, "llistxattr" }, /* 5187 */
- { 3, TD, sys_flistxattr, "flistxattr" }, /* 5188 */
- { 2, 0, sys_removexattr, "removexattr" }, /* 5189 */
- { 2, 0, sys_removexattr, "lremovexattr" }, /* 5190 */
- { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 5191 */
- { 2, TS, sys_kill, "tkill" }, /* 5192 */
- { 1, 0, sys_time, "time" }, /* 5193 */
- { 6, 0, sys_futex, "futex" }, /* 5194 */
- { 3, 0, sys_sched_setaffinity, "sched_setaffinity"}, /* 5195 */
- { 3, 0, sys_sched_getaffinity, "sched_getaffinity"}, /* 5196 */
- { 3, 0, printargs, "cacheflush" }, /* 5197 */
- { 3, 0, printargs, "cachectl" }, /* 5198 */
- { 4, 0, sys_sysmips, "sysmips" }, /* 5199 */
- { 2, 0, sys_io_setup, "io_setup" }, /* 5200 */
- { 1, 0, sys_io_destroy, "io_destroy" }, /* 5201 */
- { 5, 0, sys_io_getevents, "io_getevents" }, /* 5202 */
- { 3, 0, sys_io_submit, "io_submit" }, /* 5203 */
- { 3, 0, sys_io_cancel, "io_cancel" }, /* 5204 */
- { 1, TP, sys_exit, "exit_group" }, /* 5205 */
- { 3, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 5206 */
- { 1, TD, sys_epoll_create, "epoll_create" }, /* 5207 */
- { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 5208 */
- { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 5209 */
- { 5, 0, sys_remap_file_pages, "remap_file_pages" }, /* 5210 */
- { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 5211 */
- { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 5212 */
- { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 5213 */
- { 5, TI, sys_semtimedop, "semtimedop" }, /* 5214 */
- { 4, TD, sys_fadvise64_64, "fadvise64_64" }, /* 5215 */
- { 3, 0, sys_timer_create, "timer_create" }, /* 5216 */
- { 4, 0, sys_timer_settime, "timer_settime" }, /* 5217 */
- { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 5218 */
- { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 5219 */
- { 1, 0, sys_timer_delete, "timer_delete" }, /* 5220 */
- { 2, 0, sys_clock_settime, "clock_settime" }, /* 5221 */
- { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 5222 */
- { 2, 0, sys_clock_getres, "clock_getres" }, /* 5223 */
- { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 5224 */
- { 3, TS, sys_tgkill, "tgkill" }, /* 5225 */
- { 2, TF, sys_utimes, "utimes" }, /* 5226 */
- { 6, 0, sys_mbind, "mbind" }, /* 5227 */
- { 0, 0, NULL, NULL }, /* 5228 */
- { 0, 0, NULL, NULL }, /* 5229 */
- { 4, 0, sys_mq_open, "mq_open" }, /* 5230 */
- { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 5231 */
- { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 5232 */
- { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 5233 */
- { 2, 0, sys_mq_notify, "mq_notify" }, /* 5234 */
- { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 5235 */
- { 0, 0, NULL, NULL }, /* 5236 */
- { 5, TP, sys_waitid, "waitid" }, /* 5237 */
- { 0, 0, NULL, NULL }, /* 5238 */
- { 5, 0, sys_add_key, "add_key" }, /* 5239 */
- { 4, 0, sys_request_key, "request_key" }, /* 5230 */
- { 5, 0, sys_keyctl, "keyctl" }, /* 5241 */
- { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 5242 */
- { 0, TD, sys_inotify_init, "inotify_init" }, /* 5243 */
- { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 5244 */
- { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 5245 */
- { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 5246 */
- { 4, TD|TF, sys_openat, "openat" }, /* 5247 */
- { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 5248 */
- { 4, TD|TF, sys_mknodat, "mknodat" }, /* 5249 */
- { 5, TD|TF, sys_fchownat, "fchownat" }, /* 5250 */
- { 3, TD|TF, sys_futimesat, "futimesat" }, /* 5251 */
- { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 5252 */
- { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 5253 */
- { 4, TD|TF, sys_renameat, "renameat" }, /* 5254 */
- { 5, TD|TF, sys_linkat, "linkat" }, /* 5255 */
- { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 5256 */
- { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 5257 */
- { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 5258 */
- { 3, TD|TF, sys_faccessat, "faccessat" }, /* 5259 */
- { 6, TD, sys_pselect6, "pselect6" }, /* 5260 */
- { 5, TD, sys_ppoll, "ppoll" }, /* 5261 */
- { 1, TP, sys_unshare, "unshare" }, /* 5262 */
- { 6, TD, sys_splice, "splice" }, /* 5263 */
- { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 5264 */
- { 4, TD, sys_tee, "tee" }, /* 5265 */
- { 4, TD, sys_vmsplice, "vmsplice" }, /* 5266 */
- { 6, 0, printargs, "move_pages" }, /* 5267 */
- { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 5268 */
- { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 5269 */
- { 4, 0, sys_kexec_load, "kexec_load" }, /* 5270 */
- { 3, 0, sys_getcpu, "getcpu" }, /* 5271 */
- { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 5272 */
- { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 5273 */
- { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 5274 */
- { 4, TD|TF, sys_utimensat, "utimensat" }, /* 5275 */
- { 3, TD|TS, sys_signalfd, "signalfd" }, /* 5276 */
- { 0, 0, NULL, NULL }, /* 5277 */
- { 1, TD, sys_eventfd, "eventfd" }, /* 5278 */
- { 6, TD, sys_fallocate, "fallocate" }, /* 5279 */
- { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 5280 */
- { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 5281 */
- { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 5282 */
- { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 5283 */
- { 2, TD, sys_eventfd2, "eventfd2" }, /* 5284 */
- { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 5285 */
- { 3, TD, sys_dup3, "dup3" }, /* 5286 */
- { 2, TD, sys_pipe2, "pipe2" }, /* 5287 */
- { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 5288 */
- { 5, TD, sys_preadv, "preadv" }, /* 5289 */
- { 5, TD, sys_pwritev, "pwritev" }, /* 5290 */
- { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 5291 */
- { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 5292 */
- { 4, TN, sys_accept4, "accept4" }, /* 5293 */
- { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 5294 */
- { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 5295 */
- { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 5296 */
- { 4, 0, sys_prlimit64, "prlimit64" }, /* 5297 */
- { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at"}, /* 5298 */
- { 3, TD, sys_open_by_handle_at, "open_by_handle_at"}, /* 5299 */
- { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 5300 */
- { 1, TD, sys_syncfs, "syncfs" }, /* 5301 */
- { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 5302 */
- { 2, TD, sys_setns, "setns" }, /* 5303 */
- { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 5304 */
- { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 5305 */
-#else
- { 0, 0, printargs, "n64_read" }, /* 5000 */
- { 0, 0, printargs, "n64_write" }, /* 5001 */
- { 0, 0, printargs, "n64_open" }, /* 5002 */
- { 0, 0, printargs, "n64_close" }, /* 5003 */
- { 0, 0, printargs, "n64_stat" }, /* 5004 */
- { 0, 0, printargs, "n64_fstat" }, /* 5005 */
- { 0, 0, printargs, "n64_lstat" }, /* 5006 */
- { 0, 0, printargs, "n64_poll" }, /* 5007 */
- { 0, 0, printargs, "n64_lseek" }, /* 5008 */
- { 0, 0, printargs, "n64_mmap" }, /* 5009 */
- { 0, 0, printargs, "n64_mprotect" }, /* 5010 */
- { 0, 0, printargs, "n64_munmap" }, /* 5011 */
- { 0, 0, printargs, "n64_brk" }, /* 5012 */
- { 0, 0, printargs, "n64_rt_sigaction" }, /* 5013 */
- { 0, 0, printargs, "n64_rt_sigprocmask" }, /* 5014 */
- { 0, 0, printargs, "n64_ioctl" }, /* 5015 */
- { 0, 0, printargs, "n64_pread" }, /* 5016 */
- { 0, 0, printargs, "n64_pwrite" }, /* 5017 */
- { 0, 0, printargs, "n64_readv" }, /* 5018 */
- { 0, 0, printargs, "n64_writev" }, /* 5019 */
- { 0, 0, printargs, "n64_access" }, /* 5020 */
- { 0, 0, printargs, "n64_pipe" }, /* 5021 */
- { 0, 0, printargs, "n64__newselect" }, /* 5022 */
- { 0, 0, printargs, "n64_sched_yield" }, /* 5023 */
- { 0, 0, printargs, "n64_mremap" }, /* 5024 */
- { 0, 0, printargs, "n64_msync" }, /* 5025 */
- { 0, 0, printargs, "n64_mincore" }, /* 5026 */
- { 0, 0, printargs, "n64_madvise" }, /* 5027 */
- { 0, 0, printargs, "n64_shmget" }, /* 5028 */
- { 0, 0, printargs, "n64_shmgat" }, /* 5029 */
- { 0, 0, printargs, "n64_shmctl" }, /* 5030 */
- { 0, 0, printargs, "n64_dup" }, /* 5031 */
- { 0, 0, printargs, "n64_dup2" }, /* 5032 */
- { 0, 0, printargs, "n64_pause" }, /* 5033 */
- { 0, 0, printargs, "n64_nanosleep" }, /* 5034 */
- { 0, 0, printargs, "n64_getitimer" }, /* 5035 */
- { 0, 0, printargs, "n64_setitimer" }, /* 5036 */
- { 0, 0, printargs, "n64_alarm" }, /* 5037 */
- { 0, 0, printargs, "n64_getpid" }, /* 5038 */
- { 0, 0, printargs, "n64_sendfile" }, /* 5039 */
- { 0, 0, printargs, "n64_socketcall" }, /* 5040 */
- { 0, 0, printargs, "n64_connect" }, /* 5041 */
- { 0, 0, printargs, "n64_accept" }, /* 5042 */
- { 0, 0, printargs, "n64_sendto" }, /* 5043 */
- { 0, 0, printargs, "n64_recvfrom" }, /* 5044 */
- { 0, 0, printargs, "n64_sendmsg" }, /* 5045 */
- { 0, 0, printargs, "n64_recvmsg" }, /* 5046 */
- { 0, 0, printargs, "n64_shutdown" }, /* 5047 */
- { 0, 0, printargs, "n64_bind" }, /* 5048 */
- { 0, 0, printargs, "n64_listen" }, /* 5049 */
- { 0, 0, printargs, "n64_getsockname" }, /* 5050 */
- { 0, 0, printargs, "n64_getpeername" }, /* 5051 */
- { 0, 0, printargs, "n64_socketpair" }, /* 5052 */
- { 0, 0, printargs, "n64_setsockopt" }, /* 5053 */
- { 0, 0, printargs, "n64_getsockopt" }, /* 5054 */
- { 0, 0, printargs, "n64_clone" }, /* 5055 */
- { 0, 0, printargs, "n64_fork" }, /* 5056 */
- { 0, 0, printargs, "n64_execve" }, /* 5057 */
- { 0, 0, printargs, "n64_exit" }, /* 5058 */
- { 0, 0, printargs, "n64_wait4" }, /* 5059 */
- { 0, 0, printargs, "n64_kill" }, /* 5060 */
- { 0, 0, printargs, "n64_uname" }, /* 5061 */
- { 0, 0, printargs, "n64_semget" }, /* 5062 */
- { 0, 0, printargs, "n64_semop" }, /* 5063 */
- { 0, 0, printargs, "n64_semctl" }, /* 5064 */
- { 0, 0, printargs, "n64_shmdt" }, /* 5065 */
- { 0, 0, printargs, "n64_msgget" }, /* 5066 */
- { 0, 0, printargs, "n64_msgsnd" }, /* 5067 */
- { 0, 0, printargs, "n64_msgrcv" }, /* 5068 */
- { 0, 0, printargs, "n64_msgctl" }, /* 5069 */
- { 0, 0, printargs, "n64_fcntl" }, /* 5070 */
- { 0, 0, printargs, "n64_flock" }, /* 5071 */
- { 0, 0, printargs, "n64_fsync" }, /* 5072 */
- { 0, 0, printargs, "n64_fdatasync" }, /* 5073 */
- { 0, 0, printargs, "n64_truncate" }, /* 5074 */
- { 0, 0, printargs, "n64_ftruncate" }, /* 5075 */
- { 0, 0, printargs, "n64_getdents" }, /* 5076 */
- { 0, 0, printargs, "n64_getcwd" }, /* 5077 */
- { 0, 0, printargs, "n64_chdir" }, /* 5078 */
- { 0, 0, printargs, "n64_fchdir" }, /* 5079 */
- { 0, 0, printargs, "n64_rename" }, /* 5080 */
- { 0, 0, printargs, "n64_mkdir" }, /* 5081 */
- { 0, 0, printargs, "n64_rmdir" }, /* 5082 */
- { 0, 0, printargs, "n64_creat" }, /* 5083 */
- { 0, 0, printargs, "n64_link" }, /* 5084 */
- { 0, 0, printargs, "n64_unlink" }, /* 5085 */
- { 0, 0, printargs, "n64_symlink" }, /* 5086 */
- { 0, 0, printargs, "n64_readlink" }, /* 5087 */
- { 0, 0, printargs, "n64_chmod" }, /* 5088 */
- { 0, 0, printargs, "n64_fchmod" }, /* 5089 */
- { 0, 0, printargs, "n64_chown" }, /* 5090 */
- { 0, 0, printargs, "n64_fchown" }, /* 5091 */
- { 0, 0, printargs, "n64_lchown" }, /* 5092 */
- { 0, 0, printargs, "n64_umask" }, /* 5093 */
- { 0, 0, printargs, "n64_gettimeofday" }, /* 5094 */
- { 0, 0, printargs, "n64_getrlimit" }, /* 5095 */
- { 0, 0, printargs, "n64_getrusage" }, /* 5096 */
- { 0, 0, printargs, "n64_sysinfo" }, /* 5097 */
- { 0, 0, printargs, "n64_times" }, /* 5098 */
- { 0, 0, printargs, "n64_ptrace" }, /* 5099 */
- { 0, 0, printargs, "n64_getuid" }, /* 5100 */
- { 0, 0, printargs, "n64_syslog" }, /* 5101 */
- { 0, 0, printargs, "n64_getgid" }, /* 5102 */
- { 0, 0, printargs, "n64_setuid" }, /* 5103 */
- { 0, 0, printargs, "n64_setgid" }, /* 5104 */
- { 0, 0, printargs, "n64_geteuid" }, /* 5105 */
- { 0, 0, printargs, "n64_getegid" }, /* 5106 */
- { 0, 0, printargs, "n64_setpgid" }, /* 5107 */
- { 0, 0, printargs, "n64_getppid" }, /* 5108 */
- { 0, 0, printargs, "n64_getpgrp" }, /* 5109 */
- { 0, 0, printargs, "n64_setsid" }, /* 5110 */
- { 0, 0, printargs, "n64_setreuid" }, /* 5111 */
- { 0, 0, printargs, "n64_setregid" }, /* 5112 */
- { 0, 0, printargs, "n64_getgroups" }, /* 5113 */
- { 0, 0, printargs, "n64_setgroups" }, /* 5114 */
- { 0, 0, printargs, "n64_setresuid" }, /* 5115 */
- { 0, 0, printargs, "n64_getresuid" }, /* 5116 */
- { 0, 0, printargs, "n64_setresgid" }, /* 5117 */
- { 0, 0, printargs, "n64_getresgid" }, /* 5118 */
- { 0, 0, printargs, "n64_getpgid" }, /* 5119 */
- { 0, 0, printargs, "n64_setfsuid" }, /* 5120 */
- { 0, 0, printargs, "n64_setfsgid" }, /* 5121 */
- { 0, 0, printargs, "n64_getsid" }, /* 5122 */
- { 0, 0, printargs, "n64_capget" }, /* 5123 */
- { 0, 0, printargs, "n64_capset" }, /* 5124 */
- { 0, 0, printargs, "n64_rt_sigpending" }, /* 5125 */
- { 0, 0, printargs, "n64_rt_sigtimedwait" }, /* 5126 */
- { 0, 0, printargs, "n64_rt_sigqueueinfo" }, /* 5127 */
- { 0, 0, printargs, "n64_rt_siguspend" }, /* 5128 */
- { 0, 0, printargs, "n64_sigaltstatck" }, /* 5129 */
- { 0, 0, printargs, "n64_utime" }, /* 5130 */
- { 0, 0, printargs, "n64_mknod" }, /* 5131 */
- { 0, 0, printargs, "n64_personality" }, /* 5132 */
- { 0, 0, printargs, "n64_ustat" }, /* 5133 */
- { 0, 0, printargs, "n64_statfs" }, /* 5134 */
- { 0, 0, printargs, "n64_fstatfs" }, /* 5135 */
- { 0, 0, printargs, "n64_sysfs" }, /* 5136 */
- { 0, 0, printargs, "n64_getpriority" }, /* 5137 */
- { 0, 0, printargs, "n64_setpriority" }, /* 5138 */
- { 0, 0, printargs, "n64_sched_setparam" }, /* 5139 */
- { 0, 0, printargs, "n64_sched_getparam" }, /* 5140 */
- { 0, 0, printargs, "n64_sched_setscheduler"}, /* 5141 */
- { 0, 0, printargs, "n64_sched_getscheduler"}, /* 5142 */
- { 0, 0, printargs, "n64_sched_get_priority_max"}, /* 5143 */
- { 0, 0, printargs, "n64_sched_get_priority_min"}, /* 5144 */
- { 0, 0, printargs, "n64_sched_rr_get_interval"}, /* 5145 */
- { 0, 0, printargs, "n64_mlock" }, /* 5146 */
- { 0, 0, printargs, "n64_munlock" }, /* 5147 */
- { 0, 0, printargs, "n64_mlockall" }, /* 5148 */
- { 0, 0, printargs, "n64_munlockall" }, /* 5149 */
- { 0, 0, printargs, "n64_vhangup" }, /* 5150 */
- { 0, 0, printargs, "n64_pivot_root" }, /* 5151 */
- { 0, 0, printargs, "n64__sysctl" }, /* 5152 */
- { 0, 0, printargs, "n64_prctl" }, /* 5153 */
- { 0, 0, printargs, "n64_adjtimex" }, /* 5154 */
- { 0, 0, printargs, "n64_setrlimit" }, /* 5155 */
- { 0, 0, printargs, "n64_chroot" }, /* 5156 */
- { 0, 0, printargs, "n64_sync" }, /* 5157 */
- { 0, 0, printargs, "n64_acct" }, /* 5158 */
- { 0, 0, printargs, "n64_settimeofday" }, /* 5159 */
- { 0, 0, printargs, "n64_mount" }, /* 5160 */
- { 0, 0, printargs, "n64_umount" }, /* 5161 */
- { 0, 0, printargs, "n64_swapon" }, /* 5162 */
- { 0, 0, printargs, "n64_swapoff" }, /* 5163 */
- { 0, 0, printargs, "n64_reboot" }, /* 5164 */
- { 0, 0, printargs, "n64_sethostname" }, /* 5165 */
- { 0, 0, printargs, "n64_setdomainname" }, /* 5166 */
- { 0, 0, printargs, "n64_create_module" }, /* 5167 */
- { 0, 0, printargs, "n64_init_module" }, /* 5168 */
- { 0, 0, printargs, "n64_delete_module" }, /* 5169 */
- { 0, 0, printargs, "n64_get_kernel_syms" }, /* 5170 */
- { 0, 0, printargs, "n64_query_module" }, /* 5171 */
- { 0, 0, printargs, "n64_quotactl" }, /* 5172 */
- { 0, 0, printargs, "n64_nfsservctl" }, /* 5173 */
- { 0, 0, printargs, "n64_getpmsg" }, /* 5174 */
- { 0, 0, printargs, "n64_putpmsg" }, /* 5175 */
- { 0, 0, printargs, "n64_afs_syscall" }, /* 5176 */
- { 0, 0, printargs, "n64_reserved177" }, /* 5177 */
- { 0, 0, printargs, "n64_gettid" }, /* 5178 */
- { 0, 0, printargs, "n64_readahead" }, /* 5179 */
- { 0, 0, printargs, "n64_setxattr" }, /* 5180 */
- { 0, 0, printargs, "n64_lsetxattr" }, /* 5181 */
- { 0, 0, printargs, "n64_fsetxattr" }, /* 5182 */
- { 0, 0, printargs, "n64_getxattr" }, /* 5183 */
- { 0, 0, printargs, "n64_lgetxattr" }, /* 5184 */
- { 0, 0, printargs, "n64_fgetxattr" }, /* 5185 */
- { 0, 0, printargs, "n64_listxattr" }, /* 5186 */
- { 0, 0, printargs, "n64_llistxattr" }, /* 5187 */
- { 0, 0, printargs, "n64_flistxattr" }, /* 5188 */
- { 0, 0, printargs, "n64_removexattr" }, /* 5189 */
- { 0, 0, printargs, "n64_lremovexattr" }, /* 5190 */
- { 0, 0, printargs, "n64_fremovexattr" }, /* 5191 */
- { 0, 0, printargs, "n64_tkill" }, /* 5192 */
- { 0, 0, printargs, "n64_time" }, /* 5193 */
- { 0, 0, printargs, "n64_futex" }, /* 5194 */
- { 0, 0, printargs, "n64_sched_setaffinity" }, /* 5195 */
- { 0, 0, printargs, "n64_sched_getaffinity" }, /* 5196 */
- { 0, 0, printargs, "n64_cacheflush" }, /* 5197 */
- { 0, 0, printargs, "n64_cachectl" }, /* 5198 */
- { 0, 0, printargs, "n64_sysmips" }, /* 5199 */
- { 0, 0, printargs, "n64_io_setup" }, /* 5200 */
- { 0, 0, printargs, "n64_io_destroy" }, /* 5201 */
- { 0, 0, printargs, "n64_io_getevents" }, /* 5202 */
- { 0, 0, printargs, "n64_io_submit" }, /* 5203 */
- { 0, 0, printargs, "n64_io_cancel" }, /* 5204 */
- { 1, TP, printargs, "n64_exit_group" }, /* 5205 */
- { 0, 0, printargs, "n64_lookup_dcookie" }, /* 5206 */
- { 0, 0, printargs, "n64_epoll_create" }, /* 5207 */
- { 0, 0, printargs, "n64_epoll_ctl" }, /* 5208 */
- { 0, 0, printargs, "n64_epoll_wait" }, /* 5209 */
- { 0, 0, printargs, "n64_remap_file_pages" }, /* 5210 */
- { 0, 0, printargs, "n64_rt_sigreturn" }, /* 5211 */
- { 1, 0, printargs, "n64_set_tid_address" }, /* 5212 */
- { 0, 0, printargs, "n64_restart_syscall" }, /* 5213 */
- { 5, TI, printargs, "n64_semtimedop" }, /* 5214 */
- { 0, 0, printargs, "n64_fadvise64_64" }, /* 5215 */
- { 0, 0, printargs, "n64_timer_create" }, /* 5216 */
- { 0, 0, printargs, "n64_timer_settime" }, /* 5217 */
- { 0, 0, printargs, "n64_timer_gettime" }, /* 5218 */
- { 0, 0, printargs, "n64_timer_getoverrun" }, /* 5219 */
- { 0, 0, printargs, "n64_timer_delete" }, /* 5220 */
- { 0, 0, printargs, "n64_clock_settime" }, /* 5221 */
- { 0, 0, printargs, "n64_clock_gettime" }, /* 5222 */
- { 0, 0, printargs, "n64_clock_getres" }, /* 5223 */
- { 0, 0, printargs, "n64_clock_nanosleep" }, /* 5224 */
- { 0, 0, printargs, "n64_tgkill" }, /* 5225 */
- { 0, 0, printargs, "n64_utimes" }, /* 5226 */
- { 0, 0, printargs, "n64_mbind" }, /* 5227 */
- { 0, 0, printargs, "n64_SYS_5228" }, /* 5228 */
- { 0, 0, printargs, "n64_SYS_5228" }, /* 5229 */
- { 0, 0, printargs, "n64_mq_open" }, /* 5230 */
- { 0, 0, printargs, "n64_mq_unlink" }, /* 5231 */
- { 0, 0, printargs, "n64_mq_timedsend" }, /* 5232 */
- { 0, 0, printargs, "n64_mq_timedreceive" }, /* 5233 */
- { 0, 0, printargs, "n64_mq_notify" }, /* 5234 */
- { 0, 0, printargs, "n64_mq_getsetattr" }, /* 5235 */
- { 0, 0, printargs, "n64_SYS_5236" }, /* 5236 */
- { 0, 0, printargs, "n64_waitid" }, /* 5237 */
- { 0, 0, printargs, "n64_SYS_5238" }, /* 5238 */
- { 0, 0, printargs, "n64_add_key" }, /* 5239 */
- { 0, 0, printargs, "n64_request_key" }, /* 5230 */
- { 0, 0, printargs, "n64_keyctl" }, /* 5241 */
- { 0, 0, printargs, "n64_set_thread_area" }, /* 5242 */
- { 0, 0, printargs, "n64_inotify_init" }, /* 5243 */
- { 0, 0, printargs, "n64_inotify_add_watch" }, /* 5244 */
- { 0, 0, printargs, "n64_inotify_rm_watch" }, /* 5245 */
- { 0, 0, printargs, "n64_migrate_pages" }, /* 5246 */
- { 0, 0, printargs, "n64_openat" }, /* 5247 */
- { 0, 0, printargs, "n64_mkdirat" }, /* 5248 */
- { 0, 0, printargs, "n64_mknodat" }, /* 5249 */
- { 0, 0, printargs, "n64_fchownat" }, /* 5250 */
- { 0, 0, printargs, "n64_futimesat" }, /* 5251 */
- { 0, 0, printargs, "n64_newfstatat" }, /* 5252 */
- { 0, 0, printargs, "n64_unlinkat" }, /* 5253 */
- { 0, 0, printargs, "n64_renameat" }, /* 5254 */
- { 0, 0, printargs, "n64_linkat" }, /* 5255 */
- { 0, 0, printargs, "n64_symlinkat" }, /* 5256 */
- { 0, 0, printargs, "n64_readlinkat" }, /* 5257 */
- { 0, 0, printargs, "n64_fchmodat" }, /* 5258 */
- { 0, 0, printargs, "n64_faccessat" }, /* 5259 */
- { 0, 0, printargs, "n64_pselect6" }, /* 5260 */
- { 0, 0, printargs, "n64_ppoll" }, /* 5261 */
- { 0, 0, printargs, "n64_unshare" }, /* 5262 */
- { 0, 0, printargs, "n64_splice" }, /* 5263 */
- { 0, 0, printargs, "n64_sync_file_range" }, /* 5264 */
- { 0, 0, printargs, "n64_tee" }, /* 5265 */
- { 0, 0, printargs, "n64_vmsplice" }, /* 5266 */
- { 0, 0, printargs, "n64_move_pages" }, /* 5267 */
- { 0, 0, printargs, "n64_set_robust_list" }, /* 5268 */
- { 0, 0, printargs, "n64_get_robust_list" }, /* 5269 */
- { 0, 0, printargs, "n64_kexec_load" }, /* 5270 */
- { 0, 0, printargs, "n64_getcpu" }, /* 5271 */
- { 0, 0, printargs, "n64_epoll_pwait" }, /* 5272 */
- { 0, 0, printargs, "n64_ioprio_set" }, /* 5273 */
- { 0, 0, printargs, "n64_ioprio_get" }, /* 5274 */
- { 0, 0, printargs, "n64_utimensat" }, /* 5275 */
- { 0, 0, printargs, "n64_signalfd" }, /* 5276 */
- { 0, 0, printargs, "n64_SYS_5277" }, /* 5277 */
- { 0, 0, printargs, "n64_eventfd" }, /* 5278 */
- { 0, 0, printargs, "n64_fallocate" }, /* 5279 */
- { 0, 0, printargs, "n64_timerfd_create" }, /* 5280 */
- { 0, 0, printargs, "n64_timerfd_gettime" }, /* 5281 */
- { 0, 0, printargs, "n64_timerfd_settime" }, /* 5282 */
- { 0, 0, printargs, "n64_signalfd4" }, /* 5283 */
- { 0, 0, printargs, "n64_eventfd2" }, /* 5284 */
- { 0, 0, printargs, "n64_epoll_create1" }, /* 5285 */
- { 0, 0, printargs, "n64_dup3" }, /* 5286 */
- { 0, 0, printargs, "n64_pipe2" }, /* 5287 */
- { 0, 0, printargs, "n64_inotify_init1" }, /* 5288 */
- { 0, 0, printargs, "n64_preadv" }, /* 5289 */
- { 0, 0, printargs, "n64_pwritev" }, /* 5290 */
- { 0, 0, printargs, "n64_rt_tgsigqueueinfo" }, /* 5291 */
- { 0, 0, printargs, "n64_perf_event_open" }, /* 5292 */
- { 0, 0, printargs, "n64_accept4" }, /* 5293 */
- { 0, 0, printargs, "n64_recvmmsg" }, /* 5294 */
- { 2, 0, printargs, "n64_fanotify_init" }, /* 5295 */
- { 5, 0, printargs, "n64_fanotify_mark" }, /* 5296 */
- { 4, 0, printargs, "n64_prlimit64" }, /* 5297 */
- { 5, TD|TF, printargs, "n64_name_to_handle_at" }, /* 5298 */
- { 3, TD, printargs, "n64_open_by_handle_at" }, /* 5299 */
- { 2, 0, printargs, "n64_clock_adjtime" }, /* 5300 */
- { 1, TD, printargs, "n64_syncfs" }, /* 5301 */
- { 4, TN, printargs, "n64_sendmmsg" }, /* 5302 */
- { 2, TD, printargs, "n64_setns" }, /* 5303 */
- { 6, 0, printargs, "n64_process_vm_readv" }, /* 5304 */
- { 6, 0, printargs, "n64_process_vm_writev" }, /* 5305 */
-#endif
- { 0, 0, NULL, NULL }, /* 5306 */
- { 0, 0, NULL, NULL }, /* 5307 */
- { 0, 0, NULL, NULL }, /* 5308 */
- { 0, 0, NULL, NULL }, /* 5309 */
- { 0, 0, NULL, NULL }, /* 5310 */
- { 0, 0, NULL, NULL }, /* 5311 */
- { 0, 0, NULL, NULL }, /* 5312 */
- { 0, 0, NULL, NULL }, /* 5313 */
- { 0, 0, NULL, NULL }, /* 5314 */
- { 0, 0, NULL, NULL }, /* 5315 */
- { 0, 0, NULL, NULL }, /* 5316 */
- { 0, 0, NULL, NULL }, /* 5317 */
- { 0, 0, NULL, NULL }, /* 5318 */
- { 0, 0, NULL, NULL }, /* 5319 */
- { 0, 0, NULL, NULL }, /* 5320 */
- { 0, 0, NULL, NULL }, /* 5321 */
- { 0, 0, NULL, NULL }, /* 5322 */
- { 0, 0, NULL, NULL }, /* 5323 */
- { 0, 0, NULL, NULL }, /* 5324 */
- { 0, 0, NULL, NULL }, /* 5325 */
- { 0, 0, NULL, NULL }, /* 5326 */
- { 0, 0, NULL, NULL }, /* 5327 */
- { 0, 0, NULL, NULL }, /* 5328 */
- { 0, 0, NULL, NULL }, /* 5329 */
- { 0, 0, NULL, NULL }, /* 5330 */
- { 0, 0, NULL, NULL }, /* 5331 */
- { 0, 0, NULL, NULL }, /* 5332 */
- { 0, 0, NULL, NULL }, /* 5333 */
- { 0, 0, NULL, NULL }, /* 5334 */
- { 0, 0, NULL, NULL }, /* 5335 */
- { 0, 0, NULL, NULL }, /* 5336 */
- { 0, 0, NULL, NULL }, /* 5337 */
- { 0, 0, NULL, NULL }, /* 5338 */
- { 0, 0, NULL, NULL }, /* 5339 */
- { 0, 0, NULL, NULL }, /* 5340 */
- { 0, 0, NULL, NULL }, /* 5341 */
- { 0, 0, NULL, NULL }, /* 5342 */
- { 0, 0, NULL, NULL }, /* 5343 */
- { 0, 0, NULL, NULL }, /* 5344 */
- { 0, 0, NULL, NULL }, /* 5345 */
- { 0, 0, NULL, NULL }, /* 5346 */
- { 0, 0, NULL, NULL }, /* 5347 */
- { 0, 0, NULL, NULL }, /* 5348 */
- { 0, 0, NULL, NULL }, /* 5349 */
- { 0, 0, NULL, NULL }, /* 5350 */
- { 0, 0, NULL, NULL }, /* 5351 */
- { 0, 0, NULL, NULL }, /* 5352 */
- { 0, 0, NULL, NULL }, /* 5353 */
- { 0, 0, NULL, NULL }, /* 5354 */
- { 0, 0, NULL, NULL }, /* 5355 */
- { 0, 0, NULL, NULL }, /* 5356 */
- { 0, 0, NULL, NULL }, /* 5357 */
- { 0, 0, NULL, NULL }, /* 5358 */
- { 0, 0, NULL, NULL }, /* 5359 */
- { 0, 0, NULL, NULL }, /* 5360 */
- { 0, 0, NULL, NULL }, /* 5361 */
- { 0, 0, NULL, NULL }, /* 5362 */
- { 0, 0, NULL, NULL }, /* 5363 */
- { 0, 0, NULL, NULL }, /* 5364 */
- { 0, 0, NULL, NULL }, /* 5365 */
- { 0, 0, NULL, NULL }, /* 5366 */
- { 0, 0, NULL, NULL }, /* 5367 */
- { 0, 0, NULL, NULL }, /* 5368 */
- { 0, 0, NULL, NULL }, /* 5369 */
- { 0, 0, NULL, NULL }, /* 5370 */
- { 0, 0, NULL, NULL }, /* 5371 */
- { 0, 0, NULL, NULL }, /* 5372 */
- { 0, 0, NULL, NULL }, /* 5373 */
- { 0, 0, NULL, NULL }, /* 5374 */
- { 0, 0, NULL, NULL }, /* 5375 */
- { 0, 0, NULL, NULL }, /* 5376 */
- { 0, 0, NULL, NULL }, /* 5377 */
- { 0, 0, NULL, NULL }, /* 5378 */
- { 0, 0, NULL, NULL }, /* 5379 */
- { 0, 0, NULL, NULL }, /* 5380 */
- { 0, 0, NULL, NULL }, /* 5381 */
- { 0, 0, NULL, NULL }, /* 5382 */
- { 0, 0, NULL, NULL }, /* 5383 */
- { 0, 0, NULL, NULL }, /* 5384 */
- { 0, 0, NULL, NULL }, /* 5385 */
- { 0, 0, NULL, NULL }, /* 5386 */
- { 0, 0, NULL, NULL }, /* 5387 */
- { 0, 0, NULL, NULL }, /* 5388 */
- { 0, 0, NULL, NULL }, /* 5389 */
- { 0, 0, NULL, NULL }, /* 5390 */
- { 0, 0, NULL, NULL }, /* 5391 */
- { 0, 0, NULL, NULL }, /* 5392 */
- { 0, 0, NULL, NULL }, /* 5393 */
- { 0, 0, NULL, NULL }, /* 5394 */
- { 0, 0, NULL, NULL }, /* 5395 */
- { 0, 0, NULL, NULL }, /* 5396 */
- { 0, 0, NULL, NULL }, /* 5397 */
- { 0, 0, NULL, NULL }, /* 5398 */
- { 0, 0, NULL, NULL }, /* 5399 */
- { 0, 0, NULL, NULL }, /* 5400 */
- { 0, 0, NULL, NULL }, /* 5401 */
- { 0, 0, NULL, NULL }, /* 5402 */
- { 0, 0, NULL, NULL }, /* 5403 */
- { 0, 0, NULL, NULL }, /* 5404 */
- { 0, 0, NULL, NULL }, /* 5405 */
- { 0, 0, NULL, NULL }, /* 5406 */
- { 0, 0, NULL, NULL }, /* 5407 */
- { 0, 0, NULL, NULL }, /* 5408 */
- { 0, 0, NULL, NULL }, /* 5409 */
- { 0, 0, NULL, NULL }, /* 5410 */
- { 0, 0, NULL, NULL }, /* 5411 */
- { 0, 0, NULL, NULL }, /* 5412 */
- { 0, 0, NULL, NULL }, /* 5413 */
- { 0, 0, NULL, NULL }, /* 5414 */
- { 0, 0, NULL, NULL }, /* 5415 */
- { 0, 0, NULL, NULL }, /* 5416 */
- { 0, 0, NULL, NULL }, /* 5417 */
- { 0, 0, NULL, NULL }, /* 5418 */
- { 0, 0, NULL, NULL }, /* 5419 */
- { 0, 0, NULL, NULL }, /* 5420 */
- { 0, 0, NULL, NULL }, /* 5421 */
- { 0, 0, NULL, NULL }, /* 5422 */
- { 0, 0, NULL, NULL }, /* 5423 */
- { 0, 0, NULL, NULL }, /* 5424 */
- { 0, 0, NULL, NULL }, /* 5425 */
- { 0, 0, NULL, NULL }, /* 5426 */
- { 0, 0, NULL, NULL }, /* 5427 */
- { 0, 0, NULL, NULL }, /* 5428 */
- { 0, 0, NULL, NULL }, /* 5429 */
- { 0, 0, NULL, NULL }, /* 5430 */
- { 0, 0, NULL, NULL }, /* 5431 */
- { 0, 0, NULL, NULL }, /* 5432 */
- { 0, 0, NULL, NULL }, /* 5433 */
- { 0, 0, NULL, NULL }, /* 5434 */
- { 0, 0, NULL, NULL }, /* 5435 */
- { 0, 0, NULL, NULL }, /* 5436 */
- { 0, 0, NULL, NULL }, /* 5437 */
- { 0, 0, NULL, NULL }, /* 5438 */
- { 0, 0, NULL, NULL }, /* 5439 */
- { 0, 0, NULL, NULL }, /* 5440 */
- { 0, 0, NULL, NULL }, /* 5441 */
- { 0, 0, NULL, NULL }, /* 5442 */
- { 0, 0, NULL, NULL }, /* 5443 */
- { 0, 0, NULL, NULL }, /* 5444 */
- { 0, 0, NULL, NULL }, /* 5445 */
- { 0, 0, NULL, NULL }, /* 5446 */
- { 0, 0, NULL, NULL }, /* 5447 */
- { 0, 0, NULL, NULL }, /* 5448 */
- { 0, 0, NULL, NULL }, /* 5449 */
- { 0, 0, NULL, NULL }, /* 5450 */
- { 0, 0, NULL, NULL }, /* 5451 */
- { 0, 0, NULL, NULL }, /* 5452 */
- { 0, 0, NULL, NULL }, /* 5453 */
- { 0, 0, NULL, NULL }, /* 5454 */
- { 0, 0, NULL, NULL }, /* 5455 */
- { 0, 0, NULL, NULL }, /* 5456 */
- { 0, 0, NULL, NULL }, /* 5457 */
- { 0, 0, NULL, NULL }, /* 5458 */
- { 0, 0, NULL, NULL }, /* 5459 */
- { 0, 0, NULL, NULL }, /* 5460 */
- { 0, 0, NULL, NULL }, /* 5461 */
- { 0, 0, NULL, NULL }, /* 5462 */
- { 0, 0, NULL, NULL }, /* 5463 */
- { 0, 0, NULL, NULL }, /* 5464 */
- { 0, 0, NULL, NULL }, /* 5465 */
- { 0, 0, NULL, NULL }, /* 5466 */
- { 0, 0, NULL, NULL }, /* 5467 */
- { 0, 0, NULL, NULL }, /* 5468 */
- { 0, 0, NULL, NULL }, /* 5469 */
- { 0, 0, NULL, NULL }, /* 5470 */
- { 0, 0, NULL, NULL }, /* 5471 */
- { 0, 0, NULL, NULL }, /* 5472 */
- { 0, 0, NULL, NULL }, /* 5473 */
- { 0, 0, NULL, NULL }, /* 5474 */
- { 0, 0, NULL, NULL }, /* 5475 */
- { 0, 0, NULL, NULL }, /* 5476 */
- { 0, 0, NULL, NULL }, /* 5477 */
- { 0, 0, NULL, NULL }, /* 5478 */
- { 0, 0, NULL, NULL }, /* 5479 */
- { 0, 0, NULL, NULL }, /* 5480 */
- { 0, 0, NULL, NULL }, /* 5481 */
- { 0, 0, NULL, NULL }, /* 5482 */
- { 0, 0, NULL, NULL }, /* 5483 */
- { 0, 0, NULL, NULL }, /* 5484 */
- { 0, 0, NULL, NULL }, /* 5485 */
- { 0, 0, NULL, NULL }, /* 5486 */
- { 0, 0, NULL, NULL }, /* 5487 */
- { 0, 0, NULL, NULL }, /* 5488 */
- { 0, 0, NULL, NULL }, /* 5489 */
- { 0, 0, NULL, NULL }, /* 5490 */
- { 0, 0, NULL, NULL }, /* 5491 */
- { 0, 0, NULL, NULL }, /* 5492 */
- { 0, 0, NULL, NULL }, /* 5493 */
- { 0, 0, NULL, NULL }, /* 5494 */
- { 0, 0, NULL, NULL }, /* 5495 */
- { 0, 0, NULL, NULL }, /* 5496 */
- { 0, 0, NULL, NULL }, /* 5497 */
- { 0, 0, NULL, NULL }, /* 5498 */
- { 0, 0, NULL, NULL }, /* 5499 */
- { 0, 0, NULL, NULL }, /* 5500 */
- { 0, 0, NULL, NULL }, /* 5501 */
- { 0, 0, NULL, NULL }, /* 5502 */
- { 0, 0, NULL, NULL }, /* 5503 */
- { 0, 0, NULL, NULL }, /* 5504 */
- { 0, 0, NULL, NULL }, /* 5505 */
- { 0, 0, NULL, NULL }, /* 5506 */
- { 0, 0, NULL, NULL }, /* 5507 */
- { 0, 0, NULL, NULL }, /* 5508 */
- { 0, 0, NULL, NULL }, /* 5509 */
- { 0, 0, NULL, NULL }, /* 5510 */
- { 0, 0, NULL, NULL }, /* 5511 */
- { 0, 0, NULL, NULL }, /* 5512 */
- { 0, 0, NULL, NULL }, /* 5513 */
- { 0, 0, NULL, NULL }, /* 5514 */
- { 0, 0, NULL, NULL }, /* 5515 */
- { 0, 0, NULL, NULL }, /* 5516 */
- { 0, 0, NULL, NULL }, /* 5517 */
- { 0, 0, NULL, NULL }, /* 5518 */
- { 0, 0, NULL, NULL }, /* 5519 */
- { 0, 0, NULL, NULL }, /* 5520 */
- { 0, 0, NULL, NULL }, /* 5521 */
- { 0, 0, NULL, NULL }, /* 5522 */
- { 0, 0, NULL, NULL }, /* 5523 */
- { 0, 0, NULL, NULL }, /* 5524 */
- { 0, 0, NULL, NULL }, /* 5525 */
- { 0, 0, NULL, NULL }, /* 5526 */
- { 0, 0, NULL, NULL }, /* 5527 */
- { 0, 0, NULL, NULL }, /* 5528 */
- { 0, 0, NULL, NULL }, /* 5529 */
- { 0, 0, NULL, NULL }, /* 5530 */
- { 0, 0, NULL, NULL }, /* 5531 */
- { 0, 0, NULL, NULL }, /* 5532 */
- { 0, 0, NULL, NULL }, /* 5533 */
- { 0, 0, NULL, NULL }, /* 5534 */
- { 0, 0, NULL, NULL }, /* 5535 */
- { 0, 0, NULL, NULL }, /* 5536 */
- { 0, 0, NULL, NULL }, /* 5537 */
- { 0, 0, NULL, NULL }, /* 5538 */
- { 0, 0, NULL, NULL }, /* 5539 */
- { 0, 0, NULL, NULL }, /* 5540 */
- { 0, 0, NULL, NULL }, /* 5541 */
- { 0, 0, NULL, NULL }, /* 5542 */
- { 0, 0, NULL, NULL }, /* 5543 */
- { 0, 0, NULL, NULL }, /* 5544 */
- { 0, 0, NULL, NULL }, /* 5545 */
- { 0, 0, NULL, NULL }, /* 5546 */
- { 0, 0, NULL, NULL }, /* 5547 */
- { 0, 0, NULL, NULL }, /* 5548 */
- { 0, 0, NULL, NULL }, /* 5549 */
- { 0, 0, NULL, NULL }, /* 5550 */
- { 0, 0, NULL, NULL }, /* 5551 */
- { 0, 0, NULL, NULL }, /* 5552 */
- { 0, 0, NULL, NULL }, /* 5553 */
- { 0, 0, NULL, NULL }, /* 5554 */
- { 0, 0, NULL, NULL }, /* 5555 */
- { 0, 0, NULL, NULL }, /* 5556 */
- { 0, 0, NULL, NULL }, /* 5557 */
- { 0, 0, NULL, NULL }, /* 5558 */
- { 0, 0, NULL, NULL }, /* 5559 */
- { 0, 0, NULL, NULL }, /* 5560 */
- { 0, 0, NULL, NULL }, /* 5561 */
- { 0, 0, NULL, NULL }, /* 5562 */
- { 0, 0, NULL, NULL }, /* 5563 */
- { 0, 0, NULL, NULL }, /* 5564 */
- { 0, 0, NULL, NULL }, /* 5565 */
- { 0, 0, NULL, NULL }, /* 5566 */
- { 0, 0, NULL, NULL }, /* 5567 */
- { 0, 0, NULL, NULL }, /* 5568 */
- { 0, 0, NULL, NULL }, /* 5569 */
- { 0, 0, NULL, NULL }, /* 5570 */
- { 0, 0, NULL, NULL }, /* 5571 */
- { 0, 0, NULL, NULL }, /* 5572 */
- { 0, 0, NULL, NULL }, /* 5573 */
- { 0, 0, NULL, NULL }, /* 5574 */
- { 0, 0, NULL, NULL }, /* 5575 */
- { 0, 0, NULL, NULL }, /* 5576 */
- { 0, 0, NULL, NULL }, /* 5577 */
- { 0, 0, NULL, NULL }, /* 5578 */
- { 0, 0, NULL, NULL }, /* 5579 */
- { 0, 0, NULL, NULL }, /* 5580 */
- { 0, 0, NULL, NULL }, /* 5581 */
- { 0, 0, NULL, NULL }, /* 5582 */
- { 0, 0, NULL, NULL }, /* 5583 */
- { 0, 0, NULL, NULL }, /* 5584 */
- { 0, 0, NULL, NULL }, /* 5585 */
- { 0, 0, NULL, NULL }, /* 5586 */
- { 0, 0, NULL, NULL }, /* 5587 */
- { 0, 0, NULL, NULL }, /* 5588 */
- { 0, 0, NULL, NULL }, /* 5589 */
- { 0, 0, NULL, NULL }, /* 5590 */
- { 0, 0, NULL, NULL }, /* 5591 */
- { 0, 0, NULL, NULL }, /* 5592 */
- { 0, 0, NULL, NULL }, /* 5593 */
- { 0, 0, NULL, NULL }, /* 5594 */
- { 0, 0, NULL, NULL }, /* 5595 */
- { 0, 0, NULL, NULL }, /* 5596 */
- { 0, 0, NULL, NULL }, /* 5597 */
- { 0, 0, NULL, NULL }, /* 5598 */
- { 0, 0, NULL, NULL }, /* 5599 */
- { 0, 0, NULL, NULL }, /* 5600 */
- { 0, 0, NULL, NULL }, /* 5601 */
- { 0, 0, NULL, NULL }, /* 5602 */
- { 0, 0, NULL, NULL }, /* 5603 */
- { 0, 0, NULL, NULL }, /* 5604 */
- { 0, 0, NULL, NULL }, /* 5605 */
- { 0, 0, NULL, NULL }, /* 5606 */
- { 0, 0, NULL, NULL }, /* 5607 */
- { 0, 0, NULL, NULL }, /* 5608 */
- { 0, 0, NULL, NULL }, /* 5609 */
- { 0, 0, NULL, NULL }, /* 5610 */
- { 0, 0, NULL, NULL }, /* 5611 */
- { 0, 0, NULL, NULL }, /* 5612 */
- { 0, 0, NULL, NULL }, /* 5613 */
- { 0, 0, NULL, NULL }, /* 5614 */
- { 0, 0, NULL, NULL }, /* 5615 */
- { 0, 0, NULL, NULL }, /* 5616 */
- { 0, 0, NULL, NULL }, /* 5617 */
- { 0, 0, NULL, NULL }, /* 5618 */
- { 0, 0, NULL, NULL }, /* 5619 */
- { 0, 0, NULL, NULL }, /* 5620 */
- { 0, 0, NULL, NULL }, /* 5621 */
- { 0, 0, NULL, NULL }, /* 5622 */
- { 0, 0, NULL, NULL }, /* 5623 */
- { 0, 0, NULL, NULL }, /* 5624 */
- { 0, 0, NULL, NULL }, /* 5625 */
- { 0, 0, NULL, NULL }, /* 5626 */
- { 0, 0, NULL, NULL }, /* 5627 */
- { 0, 0, NULL, NULL }, /* 5628 */
- { 0, 0, NULL, NULL }, /* 5629 */
- { 0, 0, NULL, NULL }, /* 5630 */
- { 0, 0, NULL, NULL }, /* 5631 */
- { 0, 0, NULL, NULL }, /* 5632 */
- { 0, 0, NULL, NULL }, /* 5633 */
- { 0, 0, NULL, NULL }, /* 5634 */
- { 0, 0, NULL, NULL }, /* 5635 */
- { 0, 0, NULL, NULL }, /* 5636 */
- { 0, 0, NULL, NULL }, /* 5637 */
- { 0, 0, NULL, NULL }, /* 5638 */
- { 0, 0, NULL, NULL }, /* 5639 */
- { 0, 0, NULL, NULL }, /* 5640 */
- { 0, 0, NULL, NULL }, /* 5641 */
- { 0, 0, NULL, NULL }, /* 5642 */
- { 0, 0, NULL, NULL }, /* 5643 */
- { 0, 0, NULL, NULL }, /* 5644 */
- { 0, 0, NULL, NULL }, /* 5645 */
- { 0, 0, NULL, NULL }, /* 5646 */
- { 0, 0, NULL, NULL }, /* 5647 */
- { 0, 0, NULL, NULL }, /* 5648 */
- { 0, 0, NULL, NULL }, /* 5649 */
- { 0, 0, NULL, NULL }, /* 5650 */
- { 0, 0, NULL, NULL }, /* 5651 */
- { 0, 0, NULL, NULL }, /* 5652 */
- { 0, 0, NULL, NULL }, /* 5653 */
- { 0, 0, NULL, NULL }, /* 5654 */
- { 0, 0, NULL, NULL }, /* 5655 */
- { 0, 0, NULL, NULL }, /* 5656 */
- { 0, 0, NULL, NULL }, /* 5657 */
- { 0, 0, NULL, NULL }, /* 5658 */
- { 0, 0, NULL, NULL }, /* 5659 */
- { 0, 0, NULL, NULL }, /* 5660 */
- { 0, 0, NULL, NULL }, /* 5661 */
- { 0, 0, NULL, NULL }, /* 5662 */
- { 0, 0, NULL, NULL }, /* 5663 */
- { 0, 0, NULL, NULL }, /* 5664 */
- { 0, 0, NULL, NULL }, /* 5665 */
- { 0, 0, NULL, NULL }, /* 5666 */
- { 0, 0, NULL, NULL }, /* 5667 */
- { 0, 0, NULL, NULL }, /* 5668 */
- { 0, 0, NULL, NULL }, /* 5669 */
- { 0, 0, NULL, NULL }, /* 5670 */
- { 0, 0, NULL, NULL }, /* 5671 */
- { 0, 0, NULL, NULL }, /* 5672 */
- { 0, 0, NULL, NULL }, /* 5673 */
- { 0, 0, NULL, NULL }, /* 5674 */
- { 0, 0, NULL, NULL }, /* 5675 */
- { 0, 0, NULL, NULL }, /* 5676 */
- { 0, 0, NULL, NULL }, /* 5677 */
- { 0, 0, NULL, NULL }, /* 5678 */
- { 0, 0, NULL, NULL }, /* 5679 */
- { 0, 0, NULL, NULL }, /* 5680 */
- { 0, 0, NULL, NULL }, /* 5681 */
- { 0, 0, NULL, NULL }, /* 5682 */
- { 0, 0, NULL, NULL }, /* 5683 */
- { 0, 0, NULL, NULL }, /* 5684 */
- { 0, 0, NULL, NULL }, /* 5685 */
- { 0, 0, NULL, NULL }, /* 5686 */
- { 0, 0, NULL, NULL }, /* 5687 */
- { 0, 0, NULL, NULL }, /* 5688 */
- { 0, 0, NULL, NULL }, /* 5689 */
- { 0, 0, NULL, NULL }, /* 5690 */
- { 0, 0, NULL, NULL }, /* 5691 */
- { 0, 0, NULL, NULL }, /* 5692 */
- { 0, 0, NULL, NULL }, /* 5693 */
- { 0, 0, NULL, NULL }, /* 5694 */
- { 0, 0, NULL, NULL }, /* 5695 */
- { 0, 0, NULL, NULL }, /* 5696 */
- { 0, 0, NULL, NULL }, /* 5697 */
- { 0, 0, NULL, NULL }, /* 5698 */
- { 0, 0, NULL, NULL }, /* 5699 */
- { 0, 0, NULL, NULL }, /* 5700 */
- { 0, 0, NULL, NULL }, /* 5701 */
- { 0, 0, NULL, NULL }, /* 5702 */
- { 0, 0, NULL, NULL }, /* 5703 */
- { 0, 0, NULL, NULL }, /* 5704 */
- { 0, 0, NULL, NULL }, /* 5705 */
- { 0, 0, NULL, NULL }, /* 5706 */
- { 0, 0, NULL, NULL }, /* 5707 */
- { 0, 0, NULL, NULL }, /* 5708 */
- { 0, 0, NULL, NULL }, /* 5709 */
- { 0, 0, NULL, NULL }, /* 5710 */
- { 0, 0, NULL, NULL }, /* 5711 */
- { 0, 0, NULL, NULL }, /* 5712 */
- { 0, 0, NULL, NULL }, /* 5713 */
- { 0, 0, NULL, NULL }, /* 5714 */
- { 0, 0, NULL, NULL }, /* 5715 */
- { 0, 0, NULL, NULL }, /* 5716 */
- { 0, 0, NULL, NULL }, /* 5717 */
- { 0, 0, NULL, NULL }, /* 5718 */
- { 0, 0, NULL, NULL }, /* 5719 */
- { 0, 0, NULL, NULL }, /* 5720 */
- { 0, 0, NULL, NULL }, /* 5721 */
- { 0, 0, NULL, NULL }, /* 5722 */
- { 0, 0, NULL, NULL }, /* 5723 */
- { 0, 0, NULL, NULL }, /* 5724 */
- { 0, 0, NULL, NULL }, /* 5725 */
- { 0, 0, NULL, NULL }, /* 5726 */
- { 0, 0, NULL, NULL }, /* 5727 */
- { 0, 0, NULL, NULL }, /* 5728 */
- { 0, 0, NULL, NULL }, /* 5729 */
- { 0, 0, NULL, NULL }, /* 5730 */
- { 0, 0, NULL, NULL }, /* 5731 */
- { 0, 0, NULL, NULL }, /* 5732 */
- { 0, 0, NULL, NULL }, /* 5733 */
- { 0, 0, NULL, NULL }, /* 5734 */
- { 0, 0, NULL, NULL }, /* 5735 */
- { 0, 0, NULL, NULL }, /* 5736 */
- { 0, 0, NULL, NULL }, /* 5737 */
- { 0, 0, NULL, NULL }, /* 5738 */
- { 0, 0, NULL, NULL }, /* 5739 */
- { 0, 0, NULL, NULL }, /* 5740 */
- { 0, 0, NULL, NULL }, /* 5741 */
- { 0, 0, NULL, NULL }, /* 5742 */
- { 0, 0, NULL, NULL }, /* 5743 */
- { 0, 0, NULL, NULL }, /* 5744 */
- { 0, 0, NULL, NULL }, /* 5745 */
- { 0, 0, NULL, NULL }, /* 5746 */
- { 0, 0, NULL, NULL }, /* 5747 */
- { 0, 0, NULL, NULL }, /* 5748 */
- { 0, 0, NULL, NULL }, /* 5749 */
- { 0, 0, NULL, NULL }, /* 5750 */
- { 0, 0, NULL, NULL }, /* 5751 */
- { 0, 0, NULL, NULL }, /* 5752 */
- { 0, 0, NULL, NULL }, /* 5753 */
- { 0, 0, NULL, NULL }, /* 5754 */
- { 0, 0, NULL, NULL }, /* 5755 */
- { 0, 0, NULL, NULL }, /* 5756 */
- { 0, 0, NULL, NULL }, /* 5757 */
- { 0, 0, NULL, NULL }, /* 5758 */
- { 0, 0, NULL, NULL }, /* 5759 */
- { 0, 0, NULL, NULL }, /* 5760 */
- { 0, 0, NULL, NULL }, /* 5761 */
- { 0, 0, NULL, NULL }, /* 5762 */
- { 0, 0, NULL, NULL }, /* 5763 */
- { 0, 0, NULL, NULL }, /* 5764 */
- { 0, 0, NULL, NULL }, /* 5765 */
- { 0, 0, NULL, NULL }, /* 5766 */
- { 0, 0, NULL, NULL }, /* 5767 */
- { 0, 0, NULL, NULL }, /* 5768 */
- { 0, 0, NULL, NULL }, /* 5769 */
- { 0, 0, NULL, NULL }, /* 5770 */
- { 0, 0, NULL, NULL }, /* 5771 */
- { 0, 0, NULL, NULL }, /* 5772 */
- { 0, 0, NULL, NULL }, /* 5773 */
- { 0, 0, NULL, NULL }, /* 5774 */
- { 0, 0, NULL, NULL }, /* 5775 */
- { 0, 0, NULL, NULL }, /* 5776 */
- { 0, 0, NULL, NULL }, /* 5777 */
- { 0, 0, NULL, NULL }, /* 5778 */
- { 0, 0, NULL, NULL }, /* 5779 */
- { 0, 0, NULL, NULL }, /* 5780 */
- { 0, 0, NULL, NULL }, /* 5781 */
- { 0, 0, NULL, NULL }, /* 5782 */
- { 0, 0, NULL, NULL }, /* 5783 */
- { 0, 0, NULL, NULL }, /* 5784 */
- { 0, 0, NULL, NULL }, /* 5785 */
- { 0, 0, NULL, NULL }, /* 5786 */
- { 0, 0, NULL, NULL }, /* 5787 */
- { 0, 0, NULL, NULL }, /* 5788 */
- { 0, 0, NULL, NULL }, /* 5789 */
- { 0, 0, NULL, NULL }, /* 5790 */
- { 0, 0, NULL, NULL }, /* 5791 */
- { 0, 0, NULL, NULL }, /* 5792 */
- { 0, 0, NULL, NULL }, /* 5793 */
- { 0, 0, NULL, NULL }, /* 5794 */
- { 0, 0, NULL, NULL }, /* 5795 */
- { 0, 0, NULL, NULL }, /* 5796 */
- { 0, 0, NULL, NULL }, /* 5797 */
- { 0, 0, NULL, NULL }, /* 5798 */
- { 0, 0, NULL, NULL }, /* 5799 */
- { 0, 0, NULL, NULL }, /* 5800 */
- { 0, 0, NULL, NULL }, /* 5801 */
- { 0, 0, NULL, NULL }, /* 5802 */
- { 0, 0, NULL, NULL }, /* 5803 */
- { 0, 0, NULL, NULL }, /* 5804 */
- { 0, 0, NULL, NULL }, /* 5805 */
- { 0, 0, NULL, NULL }, /* 5806 */
- { 0, 0, NULL, NULL }, /* 5807 */
- { 0, 0, NULL, NULL }, /* 5808 */
- { 0, 0, NULL, NULL }, /* 5809 */
- { 0, 0, NULL, NULL }, /* 5810 */
- { 0, 0, NULL, NULL }, /* 5811 */
- { 0, 0, NULL, NULL }, /* 5812 */
- { 0, 0, NULL, NULL }, /* 5813 */
- { 0, 0, NULL, NULL }, /* 5814 */
- { 0, 0, NULL, NULL }, /* 5815 */
- { 0, 0, NULL, NULL }, /* 5816 */
- { 0, 0, NULL, NULL }, /* 5817 */
- { 0, 0, NULL, NULL }, /* 5818 */
- { 0, 0, NULL, NULL }, /* 5819 */
- { 0, 0, NULL, NULL }, /* 5820 */
- { 0, 0, NULL, NULL }, /* 5821 */
- { 0, 0, NULL, NULL }, /* 5822 */
- { 0, 0, NULL, NULL }, /* 5823 */
- { 0, 0, NULL, NULL }, /* 5824 */
- { 0, 0, NULL, NULL }, /* 5825 */
- { 0, 0, NULL, NULL }, /* 5826 */
- { 0, 0, NULL, NULL }, /* 5827 */
- { 0, 0, NULL, NULL }, /* 5828 */
- { 0, 0, NULL, NULL }, /* 5829 */
- { 0, 0, NULL, NULL }, /* 5830 */
- { 0, 0, NULL, NULL }, /* 5831 */
- { 0, 0, NULL, NULL }, /* 5832 */
- { 0, 0, NULL, NULL }, /* 5833 */
- { 0, 0, NULL, NULL }, /* 5834 */
- { 0, 0, NULL, NULL }, /* 5835 */
- { 0, 0, NULL, NULL }, /* 5836 */
- { 0, 0, NULL, NULL }, /* 5837 */
- { 0, 0, NULL, NULL }, /* 5838 */
- { 0, 0, NULL, NULL }, /* 5839 */
- { 0, 0, NULL, NULL }, /* 5840 */
- { 0, 0, NULL, NULL }, /* 5841 */
- { 0, 0, NULL, NULL }, /* 5842 */
- { 0, 0, NULL, NULL }, /* 5843 */
- { 0, 0, NULL, NULL }, /* 5844 */
- { 0, 0, NULL, NULL }, /* 5845 */
- { 0, 0, NULL, NULL }, /* 5846 */
- { 0, 0, NULL, NULL }, /* 5847 */
- { 0, 0, NULL, NULL }, /* 5848 */
- { 0, 0, NULL, NULL }, /* 5849 */
- { 0, 0, NULL, NULL }, /* 5850 */
- { 0, 0, NULL, NULL }, /* 5851 */
- { 0, 0, NULL, NULL }, /* 5852 */
- { 0, 0, NULL, NULL }, /* 5853 */
- { 0, 0, NULL, NULL }, /* 5854 */
- { 0, 0, NULL, NULL }, /* 5855 */
- { 0, 0, NULL, NULL }, /* 5856 */
- { 0, 0, NULL, NULL }, /* 5857 */
- { 0, 0, NULL, NULL }, /* 5858 */
- { 0, 0, NULL, NULL }, /* 5859 */
- { 0, 0, NULL, NULL }, /* 5860 */
- { 0, 0, NULL, NULL }, /* 5861 */
- { 0, 0, NULL, NULL }, /* 5862 */
- { 0, 0, NULL, NULL }, /* 5863 */
- { 0, 0, NULL, NULL }, /* 5864 */
- { 0, 0, NULL, NULL }, /* 5865 */
- { 0, 0, NULL, NULL }, /* 5866 */
- { 0, 0, NULL, NULL }, /* 5867 */
- { 0, 0, NULL, NULL }, /* 5868 */
- { 0, 0, NULL, NULL }, /* 5869 */
- { 0, 0, NULL, NULL }, /* 5870 */
- { 0, 0, NULL, NULL }, /* 5871 */
- { 0, 0, NULL, NULL }, /* 5872 */
- { 0, 0, NULL, NULL }, /* 5873 */
- { 0, 0, NULL, NULL }, /* 5874 */
- { 0, 0, NULL, NULL }, /* 5875 */
- { 0, 0, NULL, NULL }, /* 5876 */
- { 0, 0, NULL, NULL }, /* 5877 */
- { 0, 0, NULL, NULL }, /* 5878 */
- { 0, 0, NULL, NULL }, /* 5879 */
- { 0, 0, NULL, NULL }, /* 5880 */
- { 0, 0, NULL, NULL }, /* 5881 */
- { 0, 0, NULL, NULL }, /* 5882 */
- { 0, 0, NULL, NULL }, /* 5883 */
- { 0, 0, NULL, NULL }, /* 5884 */
- { 0, 0, NULL, NULL }, /* 5885 */
- { 0, 0, NULL, NULL }, /* 5886 */
- { 0, 0, NULL, NULL }, /* 5887 */
- { 0, 0, NULL, NULL }, /* 5888 */
- { 0, 0, NULL, NULL }, /* 5889 */
- { 0, 0, NULL, NULL }, /* 5890 */
- { 0, 0, NULL, NULL }, /* 5891 */
- { 0, 0, NULL, NULL }, /* 5892 */
- { 0, 0, NULL, NULL }, /* 5893 */
- { 0, 0, NULL, NULL }, /* 5894 */
- { 0, 0, NULL, NULL }, /* 5895 */
- { 0, 0, NULL, NULL }, /* 5896 */
- { 0, 0, NULL, NULL }, /* 5897 */
- { 0, 0, NULL, NULL }, /* 5898 */
- { 0, 0, NULL, NULL }, /* 5899 */
- { 0, 0, NULL, NULL }, /* 5900 */
- { 0, 0, NULL, NULL }, /* 5901 */
- { 0, 0, NULL, NULL }, /* 5902 */
- { 0, 0, NULL, NULL }, /* 5903 */
- { 0, 0, NULL, NULL }, /* 5904 */
- { 0, 0, NULL, NULL }, /* 5905 */
- { 0, 0, NULL, NULL }, /* 5906 */
- { 0, 0, NULL, NULL }, /* 5907 */
- { 0, 0, NULL, NULL }, /* 5908 */
- { 0, 0, NULL, NULL }, /* 5909 */
- { 0, 0, NULL, NULL }, /* 5910 */
- { 0, 0, NULL, NULL }, /* 5911 */
- { 0, 0, NULL, NULL }, /* 5912 */
- { 0, 0, NULL, NULL }, /* 5913 */
- { 0, 0, NULL, NULL }, /* 5914 */
- { 0, 0, NULL, NULL }, /* 5915 */
- { 0, 0, NULL, NULL }, /* 5916 */
- { 0, 0, NULL, NULL }, /* 5917 */
- { 0, 0, NULL, NULL }, /* 5918 */
- { 0, 0, NULL, NULL }, /* 5919 */
- { 0, 0, NULL, NULL }, /* 5920 */
- { 0, 0, NULL, NULL }, /* 5921 */
- { 0, 0, NULL, NULL }, /* 5922 */
- { 0, 0, NULL, NULL }, /* 5923 */
- { 0, 0, NULL, NULL }, /* 5924 */
- { 0, 0, NULL, NULL }, /* 5925 */
- { 0, 0, NULL, NULL }, /* 5926 */
- { 0, 0, NULL, NULL }, /* 5927 */
- { 0, 0, NULL, NULL }, /* 5928 */
- { 0, 0, NULL, NULL }, /* 5929 */
- { 0, 0, NULL, NULL }, /* 5930 */
- { 0, 0, NULL, NULL }, /* 5931 */
- { 0, 0, NULL, NULL }, /* 5932 */
- { 0, 0, NULL, NULL }, /* 5933 */
- { 0, 0, NULL, NULL }, /* 5934 */
- { 0, 0, NULL, NULL }, /* 5935 */
- { 0, 0, NULL, NULL }, /* 5936 */
- { 0, 0, NULL, NULL }, /* 5937 */
- { 0, 0, NULL, NULL }, /* 5938 */
- { 0, 0, NULL, NULL }, /* 5939 */
- { 0, 0, NULL, NULL }, /* 5940 */
- { 0, 0, NULL, NULL }, /* 5941 */
- { 0, 0, NULL, NULL }, /* 5942 */
- { 0, 0, NULL, NULL }, /* 5943 */
- { 0, 0, NULL, NULL }, /* 5944 */
- { 0, 0, NULL, NULL }, /* 5945 */
- { 0, 0, NULL, NULL }, /* 5946 */
- { 0, 0, NULL, NULL }, /* 5947 */
- { 0, 0, NULL, NULL }, /* 5948 */
- { 0, 0, NULL, NULL }, /* 5949 */
- { 0, 0, NULL, NULL }, /* 5950 */
- { 0, 0, NULL, NULL }, /* 5951 */
- { 0, 0, NULL, NULL }, /* 5952 */
- { 0, 0, NULL, NULL }, /* 5953 */
- { 0, 0, NULL, NULL }, /* 5954 */
- { 0, 0, NULL, NULL }, /* 5955 */
- { 0, 0, NULL, NULL }, /* 5956 */
- { 0, 0, NULL, NULL }, /* 5957 */
- { 0, 0, NULL, NULL }, /* 5958 */
- { 0, 0, NULL, NULL }, /* 5959 */
- { 0, 0, NULL, NULL }, /* 5960 */
- { 0, 0, NULL, NULL }, /* 5961 */
- { 0, 0, NULL, NULL }, /* 5962 */
- { 0, 0, NULL, NULL }, /* 5963 */
- { 0, 0, NULL, NULL }, /* 5964 */
- { 0, 0, NULL, NULL }, /* 5965 */
- { 0, 0, NULL, NULL }, /* 5966 */
- { 0, 0, NULL, NULL }, /* 5967 */
- { 0, 0, NULL, NULL }, /* 5968 */
- { 0, 0, NULL, NULL }, /* 5969 */
- { 0, 0, NULL, NULL }, /* 5970 */
- { 0, 0, NULL, NULL }, /* 5971 */
- { 0, 0, NULL, NULL }, /* 5972 */
- { 0, 0, NULL, NULL }, /* 5973 */
- { 0, 0, NULL, NULL }, /* 5974 */
- { 0, 0, NULL, NULL }, /* 5975 */
- { 0, 0, NULL, NULL }, /* 5976 */
- { 0, 0, NULL, NULL }, /* 5977 */
- { 0, 0, NULL, NULL }, /* 5978 */
- { 0, 0, NULL, NULL }, /* 5979 */
- { 0, 0, NULL, NULL }, /* 5980 */
- { 0, 0, NULL, NULL }, /* 5981 */
- { 0, 0, NULL, NULL }, /* 5982 */
- { 0, 0, NULL, NULL }, /* 5983 */
- { 0, 0, NULL, NULL }, /* 5984 */
- { 0, 0, NULL, NULL }, /* 5985 */
- { 0, 0, NULL, NULL }, /* 5986 */
- { 0, 0, NULL, NULL }, /* 5987 */
- { 0, 0, NULL, NULL }, /* 5988 */
- { 0, 0, NULL, NULL }, /* 5989 */
- { 0, 0, NULL, NULL }, /* 5990 */
- { 0, 0, NULL, NULL }, /* 5991 */
- { 0, 0, NULL, NULL }, /* 5992 */
- { 0, 0, NULL, NULL }, /* 5993 */
- { 0, 0, NULL, NULL }, /* 5994 */
- { 0, 0, NULL, NULL }, /* 5995 */
- { 0, 0, NULL, NULL }, /* 5996 */
- { 0, 0, NULL, NULL }, /* 5997 */
- { 0, 0, NULL, NULL }, /* 5998 */
- { 0, 0, NULL, NULL }, /* 5999 */ /* end of Linux N64 */
-
-#if defined(LINUX_MIPSN32)
- /* For an N32 strace decode the N32 64-bit syscalls. */
- { 3, TF, sys_read, "read" }, /* 6000 */ /* start of Linux N32 */
- { 3, TF, sys_write, "write" }, /* 6001 */
- { 3, TF, sys_open, "open" }, /* 6002 */
- { 1, 0, sys_close, "close" }, /* 6003 */
- { 2, TF, sys_stat64, "stat" }, /* 6004 */
- { 2, 0, sys_fstat64, "fstat" }, /* 6005 */
- { 2, TF, sys_lstat64, "lstat" }, /* 6006 */
- { 3, 0, sys_poll, "poll" }, /* 6007 */
- { 3, 0, sys_lseek, "lseek" }, /* 6008 */
- { 6, TD, sys_mmap, "mmap" }, /* 6009 */
- { 3, 0, sys_mprotect, "mprotect" }, /* 6010 */
- { 2, 0, sys_munmap, "munmap" }, /* 6011 */
- { 1, 0, sys_brk, "brk" }, /* 6012 */
- { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 6013 */
- { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 6014 */
- { 3, 0, sys_ioctl, "ioctl" }, /* 6015 */
- { 6, TD, sys_pread, "pread" }, /* 6016 */
- { 6, TD, sys_pwrite, "pwrite" }, /* 6017 */
- { 3, 0, sys_readv, "readv" }, /* 6018 */
- { 3, 0, sys_writev, "writev" }, /* 6019 */
- { 2, TF, sys_access, "access" }, /* 6020 */
- { 1, 0, sys_pipe, "pipe" }, /* 6021 */
- { 5, 0, sys_select, "_newselect" }, /* 6022 */
- { 0, 0, sys_sched_yield, "sched_yield" }, /* 6023 */
- { 5, 0, sys_mremap, "mremap" }, /* 6024 */
- { 3, 0, sys_msync, "msync" }, /* 6025 */
- { 3, 0, sys_mincore, "mincore" }, /* 6026 */
- { 3, 0, sys_madvise, "madvise" }, /* 6027 */
- { 3, TI, sys_shmget, "shmget" }, /* 6028 */
- { 3, TI, sys_shmat, "shmgat" }, /* 6029 */
- { 3, TI, sys_shmctl, "shmctl" }, /* 6030 */
- { 1, 0, sys_dup, "dup" }, /* 6031 */
- { 2, 0, sys_dup2, "dup2" }, /* 6032 */
- { 0, TS, sys_pause, "pause" }, /* 6033 */
- { 2, 0, sys_nanosleep, "nanosleep" }, /* 6034 */
- { 2, 0, sys_getitimer, "getitimer" }, /* 6035 */
- { 3, 0, sys_setitimer, "setitimer" }, /* 6036 */
- { 1, 0, sys_alarm, "alarm" }, /* 6037 */
- { 0, 0, sys_getpid, "getpid" }, /* 6038 */
- { 4, TD|TN, sys_sendfile, "sendfile" }, /* 6039 */
- { 2, 0, sys_socketcall, "socketcall" }, /* 6040 */
- { 3, TN, sys_connect, "connect" }, /* 6041 */
- { 3, TN, sys_accept, "accept" }, /* 6042 */
- { 6, TN, sys_sendto, "sendto" }, /* 6043 */
- { 6, TN, sys_recvfrom, "recvfrom" }, /* 6044 */
- { 3, TN, sys_sendmsg, "sendmsg" }, /* 6045 */
- { 3, TN, sys_recvmsg, "recvmsg" }, /* 6046 */
- { 2, TN, sys_shutdown, "shutdown" }, /* 6047 */
- { 3, TN, sys_bind, "bind" }, /* 6048 */
- { 2, TN, sys_listen, "listen" }, /* 6049 */
- { 3, TN, sys_getsockname, "getsockname" }, /* 6050 */
- { 3, TN, sys_getpeername, "getpeername" }, /* 6051 */
- { 4, TN, sys_socketpair, "socketpair" }, /* 6052 */
- { 5, TN, sys_setsockopt, "setsockopt" }, /* 6053 */
- { 5, TN, sys_getsockopt, "getsockopt" }, /* 6054 */
- { 2, TP, sys_clone, "clone" }, /* 6055 */
- { 0, TP, sys_fork, "fork" }, /* 6056 */
- { 3, TF|TP, sys_execve, "execve" }, /* 6057 */
- { 1, TP, sys_exit, "exit" }, /* 6058 */
- { 4, TP, sys_wait4, "wait4" }, /* 6059 */
- { 2, TS, sys_kill, "kill" }, /* 6060 */
- { 1, 0, sys_uname, "uname" }, /* 6061 */
- { 3, TI, sys_semget, "semget" }, /* 6062 */
- { 3, TI, printargs, "semop" }, /* 6063 */
- { 4, TI, sys_semctl, "semctl" }, /* 6064 */
- { 1, TI, sys_shmdt, "shmdt" }, /* 6065 */
- { 2, TI, sys_msgget, "msgget" }, /* 6066 */
- { 4, TI, sys_msgsnd, "msgsnd" }, /* 6067 */
- { 5, TI, sys_msgrcv, "msgrcv" }, /* 6068 */
- { 3, TI, sys_msgctl, "msgctl" }, /* 6069 */
- { 3, 0, sys_fcntl, "fcntl" }, /* 6070 */
- { 2, 0, sys_flock, "flock" }, /* 6071 */
- { 1, TD, sys_fsync, "fsync" }, /* 6072 */
- { 1, 0, sys_fdatasync, "fdatasync" }, /* 6073 */
- { 2, TF, sys_truncate, "truncate" }, /* 6074 */
- { 2, 0, sys_ftruncate, "ftruncate" }, /* 6075 */
- { 3, 0, sys_getdents, "getdents" }, /* 6076 */
- { 2, TF, sys_getcwd, "getcwd" }, /* 6077 */
- { 1, TF, sys_chdir, "chdir" }, /* 6078 */
- { 1, TF, sys_fchdir, "fchdir" }, /* 6079 */
- { 2, TF, sys_rename, "rename" }, /* 6080 */
- { 2, TF, sys_mkdir, "mkdir" }, /* 6081 */
- { 1, TF, sys_rmdir, "rmdir" }, /* 6082 */
- { 2, TF, sys_creat, "creat" }, /* 6083 */
- { 2, TF, sys_link, "link" }, /* 6084 */
- { 1, TF, sys_unlink, "unlink" }, /* 6085 */
- { 2, TF, sys_symlink, "symlink" }, /* 6086 */
- { 3, TF, sys_readlink, "readlink" }, /* 6087 */
- { 2, TF, sys_chmod, "chmod" }, /* 6088 */
- { 2, 0, sys_fchmod, "fchmod" }, /* 6089 */
- { 3, TF, sys_chown, "chown" }, /* 6090 */
- { 3, 0, sys_fchown, "fchown" }, /* 6091 */
- { 3, TF, sys_chown, "lchown" }, /* 6092 */
- { 1, 0, sys_umask, "umask" }, /* 6093 */
- { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 6094 */
- { 2, 0, sys_getrlimit, "getrlimit" }, /* 6095 */
- { 2, 0, sys_getrusage, "getrusage" }, /* 6096 */
- { 1, 0, sys_sysinfo, "sysinfo" }, /* 6097 */
- { 1, 0, sys_times, "times" }, /* 6098 */
- { 4, 0, sys_ptrace, "ptrace" }, /* 6099 */
- { 0, NF, sys_getuid, "getuid" }, /* 6100 */
- { 3, 0, sys_syslog, "syslog" }, /* 6101 */
- { 0, NF, sys_getgid, "getgid" }, /* 6102 */
- { 1, 0, sys_setuid, "setuid" }, /* 6103 */
- { 1, 0, sys_setgid, "setgid" }, /* 6104 */
- { 0, NF, sys_geteuid, "geteuid" }, /* 6105 */
- { 0, NF, sys_getegid, "getegid" }, /* 6106 */
- { 2, 0, sys_setpgid, "setpgid" }, /* 6107 */
- { 0, 0, sys_getppid, "getppid" }, /* 6108 */
- { 0, 0, sys_getpgrp, "getpgrp" }, /* 6109 */
- { 0, 0, sys_setsid, "setsid" }, /* 6110 */
- { 2, 0, sys_setreuid, "setreuid" }, /* 6111 */
- { 2, 0, sys_setregid, "setregid" }, /* 6112 */
- { 2, 0, sys_getgroups, "getgroups" }, /* 6113 */
- { 2, 0, sys_setgroups, "setgroups" }, /* 6114 */
- { 3, 0, sys_setresuid, "setresuid" }, /* 6115 */
- { 3, 0, sys_getresuid, "getresuid" }, /* 6116 */
- { 3, 0, sys_setresgid, "setresgid" }, /* 6117 */
- { 3, 0, sys_getresgid, "getresgid" }, /* 6118 */
- { 0, 0, sys_getpgid, "getpgid" }, /* 6119 */
- { 1, NF, sys_setfsuid, "setfsuid" }, /* 6120 */
- { 1, NF, sys_setfsgid, "setfsgid" }, /* 6121 */
- { 1, 0, sys_getsid, "getsid" }, /* 6122 */
- { 2, 0, sys_capget, "capget" }, /* 6123 */
- { 2, 0, sys_capset, "capset" }, /* 6124 */
- { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 6125 */
- { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait"},/* 6126 */
- { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"},/* 6127 */
- { 2, TS, sys_rt_sigsuspend, "rt_siguspend" }, /* 6128 */
- { 2, TS, sys_sigaltstack, "sigaltstatck" }, /* 6129 */
- { 2, TF, sys_utime, "utime" }, /* 6130 */
- { 3, TF, sys_mknod, "mknod" }, /* 6131 */
- { 1, 0, sys_personality, "personality" }, /* 6132 */
- { 2, 0, sys_ustat, "ustat" }, /* 6133 */
- { 3, 0, sys_statfs, "statfs" }, /* 6134 */
- { 3, 0, sys_fstatfs, "fstatfs" }, /* 6135 */
- { 5, 0, sys_sysfs, "sysfs" }, /* 6136 */
- { 2, 0, sys_getpriority, "getpriority" }, /* 6137 */
- { 3, 0, sys_setpriority, "setpriority" }, /* 6138 */
- { 2, 0, sys_sched_setparam, "sched_setparam"}, /* 6139 */
- { 2, 0, sys_sched_getparam, "sched_getparam"}, /* 6140 */
- { 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 6141 */
- { 1, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 6142 */
- { 1, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 6143 */
- { 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 6144 */
- { 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 6145 */
- { 2, 0, sys_mlock, "mlock" }, /* 6146 */
- { 2, 0, sys_munlock, "munlock" }, /* 6147 */
- { 1, 0, sys_mlockall, "mlockall" }, /* 6148 */
- { 0, 0, sys_munlockall, "munlockall" }, /* 6149 */
- { 0, 0, sys_vhangup, "vhangup" }, /* 6150 */
- { 2, 0, sys_pivotroot, "pivot_root" }, /* 6151 */
- { 1, 0, sys_sysctl, "_sysctl" }, /* 6152 */
- { 5, 0, sys_prctl, "prctl" }, /* 6153 */
- { 1, 0, sys_adjtimex, "adjtimex" }, /* 6154 */
- { 2, 0, sys_setrlimit, "setrlimit" }, /* 6155 */
- { 1, TF, sys_chroot, "chroot" }, /* 6156 */
- { 0, 0, sys_sync, "sync" }, /* 6157 */
- { 1, TF, sys_acct, "acct" }, /* 6158 */
- { 2, 0, sys_settimeofday, "settimeofday" }, /* 6159 */
- { 5, TF, sys_mount, "mount" }, /* 6160 */
- { 2, TF, sys_umount2, "umount" }, /* 6161 */
- { 2, TF, sys_swapon, "swapon" }, /* 6162 */
- { 1, TF, sys_swapoff, "swapoff" }, /* 6163 */
- { 4, 0, sys_reboot, "reboot" }, /* 6164 */
- { 2, 0, sys_sethostname, "sethostname" }, /* 6165 */
- { 2, 0, sys_setdomainname, "setdomainname" }, /* 6166 */
- { 2, 0, sys_create_module, "create_module" }, /* 6167 */
- { 4, 0, sys_init_module, "init_module" }, /* 6168 */
- { 1, 0, sys_delete_module, "delete_module" }, /* 6169 */
- { 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 6170 */
- { 5, 0, sys_query_module, "query_module" }, /* 6171 */
- { 4, 0, sys_quotactl, "quotactl" }, /* 6172 */
- { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 6173 */
- { 5, TN, printargs, "getpmsg" }, /* 6174 */
- { 5, TN, printargs, "putpmsg" }, /* 6175 */
- { 0, 0, sys_afs_syscall, "afs_syscall" }, /* 6176 */
- { 0, 0, printargs, "reserved177" }, /* 6177 */
- { 0, 0, sys_gettid, "gettid" }, /* 6178 */
- { 3, 0, sys_readahead, "readahead" }, /* 6179 */
- { 5, 0, sys_setxattr, "setxattr" }, /* 6180 */
- { 5, 0, sys_setxattr, "lsetxattr" }, /* 6181 */
- { 5, 0, sys_fsetxattr, "fsetxattr" }, /* 6182 */
- { 4, 0, sys_getxattr, "getxattr" }, /* 6183 */
- { 4, 0, sys_getxattr, "lgetxattr" }, /* 6184 */
- { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 6185 */
- { 3, 0, sys_listxattr, "listxattr" }, /* 6186 */
- { 3, 0, sys_listxattr, "llistxattr" }, /* 6187 */
- { 3, TD, sys_flistxattr, "flistxattr" }, /* 6188 */
- { 2, 0, sys_removexattr, "removexattr" }, /* 6189 */
- { 2, 0, sys_removexattr, "lremovexattr" }, /* 6190 */
- { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 6191 */
- { 2, TS, sys_kill, "tkill" }, /* 6192 */
- { 1, 0, sys_time, "time" }, /* 6193 */
- { 6, 0, sys_futex, "futex" }, /* 6194 */
- { 3, 0, sys_sched_setaffinity, "sched_setaffinity"}, /* 6195 */
- { 3, 0, sys_sched_getaffinity, "sched_getaffinity"}, /* 6196 */
- { 3, 0, printargs, "cacheflush" }, /* 6197 */
- { 3, 0, printargs, "cachectl" }, /* 6198 */
- { 4, 0, sys_sysmips, "sysmips" }, /* 6199 */
- { 2, 0, sys_io_setup, "io_setup" }, /* 6200 */
- { 1, 0, sys_io_destroy, "io_destroy" }, /* 6201 */
- { 5, 0, sys_io_getevents, "io_getevents" }, /* 6202 */
- { 3, 0, sys_io_submit, "io_submit" }, /* 6203 */
- { 3, 0, sys_io_cancel, "io_cancel" }, /* 6204 */
- { 1, TP, sys_exit, "exit_group"}, /* 6205 */
- { 3, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 6206 */
- { 1, TD, sys_epoll_create, "epoll_create" }, /* 6207 */
- { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 6208 */
- { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 6209 */
- { 5, 0, sys_remap_file_pages, "remap_file_pages" }, /* 6210 */
- { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 6211 */
- { 3, 0, sys_fcntl, "fcntl64" }, /* 6212 */
- { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 6213 */
- { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 6214 */
- { 5, TI, sys_semtimedop, "semtimedop" }, /* 6215 */
- { 5, TD, sys_fadvise64, "fadvise64" }, /* 6216 */
- { 3, TF, sys_statfs64, "statfs64" }, /* 6217 */
- { 3, TD, sys_fstatfs64, "fstatfs64" }, /* 6218 */
- { 4, TD|TN, sys_sendfile64, "sendfile64" }, /* 6219 */
- { 3, 0, sys_timer_create, "timer_create" }, /* 6220 */
- { 4, 0, sys_timer_settime, "timer_settime" }, /* 6221 */
- { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 6222 */
- { 1, 0, sys_timer_getoverrun, "timer_getoverrun" }, /* 6223 */
- { 1, 0, sys_timer_delete, "timer_delete" }, /* 6224 */
- { 2, 0, sys_clock_settime, "clock_settime" }, /* 6225 */
- { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 6226 */
- { 2, 0, sys_clock_getres, "clock_getres" }, /* 6227 */
- { 4, 0, sys_clock_nanosleep, "clock_nanosleep" }, /* 6228 */
- { 3, TS, sys_tgkill, "tgkill" }, /* 6229 */
- { 2, TF, sys_utimes, "utimes" }, /* 6230 */
- { 0, 0, NULL, NULL }, /* 6231 */
- { 0, 0, NULL, NULL }, /* 6232 */
- { 0, 0, NULL, NULL }, /* 6233 */
- { 4, 0, sys_mq_open, "mq_open" }, /* 6234 */
- { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 6235 */
- { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 6236 */
- { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 6237 */
- { 2, 0, sys_mq_notify, "mq_notify" }, /* 6238 */
- { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 6239 */
- { 0, 0, NULL, NULL }, /* 6240 */
- { 5, TP, sys_waitid, "waitid" }, /* 6241 */
- { 0, 0, NULL, NULL }, /* 6242 */
- { 5, 0, sys_add_key, "add_key" }, /* 6243 */
- { 4, 0, sys_request_key, "request_key" }, /* 6244 */
- { 5, 0, sys_keyctl, "keyctl" }, /* 6245 */
- { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 6246 */
- { 0, TD, sys_inotify_init, "inotify_init" }, /* 6247 */
- { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 6248 */
- { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 6249 */
- { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 6250 */
- { 4, TD|TF, sys_openat, "openat" }, /* 6251 */
- { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 6252 */
- { 4, TD|TF, sys_mknodat, "mknodat" }, /* 6253 */
- { 5, TD|TF, sys_fchownat, "fchownat" }, /* 6254 */
- { 3, TD|TF, sys_futimesat, "futimesat" }, /* 6255 */
- { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 6256 */
- { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 6257 */
- { 4, TD|TF, sys_renameat, "renameat" }, /* 6258 */
- { 5, TD|TF, sys_linkat, "linkat" }, /* 6259 */
- { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 6260 */
- { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 6261 */
- { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 6262 */
- { 3, TD|TF, sys_faccessat, "faccessat" }, /* 6263 */
- { 6, TD, sys_pselect6, "pselect6" }, /* 6264 */
- { 5, TD, sys_ppoll, "ppoll" }, /* 6265 */
- { 1, TP, sys_unshare, "unshare" }, /* 6266 */
- { 6, TD, sys_splice, "splice" }, /* 6267 */
- { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 6268 */
- { 4, TD, sys_tee, "tee" }, /* 6269 */
- { 4, TD, sys_vmsplice, "vmsplice" }, /* 6270 */
- { 6, 0, printargs, "move_pages" }, /* 6271 */
- { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 6272 */
- { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 6273 */
- { 4, 0, sys_kexec_load, "kexec_load" }, /* 6274 */
- { 3, 0, sys_getcpu, "getcpu" }, /* 6275 */
- { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 6276 */
- { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 6277 */
- { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 6278 */
- { 4, TD|TF, sys_utimensat, "utimensat" }, /* 6279 */
- { 3, TD|TS, sys_signalfd, "signalfd" }, /* 6280 */
- { 0, 0, NULL, NULL }, /* 6281 */
- { 1, TD, sys_eventfd, "eventfd" }, /* 6282 */
- { 6, TD, sys_fallocate, "fallocate" }, /* 6283 */
- { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 6284 */
- { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 6285 */
- { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 6286 */
- { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 6287 */
- { 2, TD, sys_eventfd2, "eventfd2" }, /* 6288 */
- { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 6289 */
- { 3, TD, sys_dup3, "dup3" }, /* 6290 */
- { 2, TD, sys_pipe2, "pipe2" }, /* 6291 */
- { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 6292 */
- { 5, TD, sys_preadv, "preadv" }, /* 6293 */
- { 5, TD, sys_pwritev, "pwritev" }, /* 6294 */
- { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 6295 */
- { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 6296 */
- { 4, TN, sys_accept4, "accept4" }, /* 6297 */
- { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 6298 */
- { 3, TD, sys_getdents, "getdents" }, /* 6299 */
- { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 6300 */
- { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 6301 */
- { 4, 0, sys_prlimit64, "prlimit64" }, /* 6302 */
- { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at"}, /* 6303 */
- { 3, TD, sys_open_by_handle_at, "open_by_handle_at"}, /* 6304 */
- { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 6305 */
- { 1, TD, sys_syncfs, "syncfs" }, /* 6306 */
- { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 6307 */
- { 2, TD, sys_setns, "setns" }, /* 6308 */
- { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 6309 */
- { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 6310 */
-
-#else
- { 0, 0, printargs, "n32_read" }, /* 6000 */
- { 0, 0, printargs, "n32_write" }, /* 6001 */
- { 0, 0, printargs, "n32_open" }, /* 6002 */
- { 0, 0, printargs, "n32_close" }, /* 6003 */
- { 0, 0, printargs, "n32_stat" }, /* 6004 */
- { 0, 0, printargs, "n32_fstat" }, /* 6005 */
- { 0, 0, printargs, "n32_lstat" }, /* 6006 */
- { 0, 0, printargs, "n32_poll" }, /* 6007 */
- { 0, 0, printargs, "n32_lseek" }, /* 6008 */
- { 0, 0, printargs, "n32_mmap" }, /* 6009 */
- { 0, 0, printargs, "n32_mprotect" }, /* 6010 */
- { 0, 0, printargs, "n32_munmap" }, /* 6011 */
- { 0, 0, printargs, "n32_brk" }, /* 6012 */
- { 0, 0, printargs, "n32_rt_sigaction" }, /* 6013 */
- { 0, 0, printargs, "n32_rt_sigprocmask" }, /* 6014 */
- { 0, 0, printargs, "n32_ioctl" }, /* 6015 */
- { 0, 0, printargs, "n32_pread" }, /* 6016 */
- { 0, 0, printargs, "n32_pwrite" }, /* 6017 */
- { 0, 0, printargs, "n32_readv" }, /* 6018 */
- { 0, 0, printargs, "n32_writev" }, /* 6019 */
- { 0, 0, printargs, "n32_access" }, /* 6020 */
- { 0, 0, printargs, "n32_pipe" }, /* 6021 */
- { 0, 0, printargs, "n32__newselect" }, /* 6022 */
- { 0, 0, printargs, "n32_sched_yield" }, /* 6023 */
- { 0, 0, printargs, "n32_mremap" }, /* 6024 */
- { 0, 0, printargs, "n32_msync" }, /* 6025 */
- { 0, 0, printargs, "n32_mincore" }, /* 6026 */
- { 0, 0, printargs, "n32_madvise" }, /* 6027 */
- { 0, 0, printargs, "n32_shmget" }, /* 6028 */
- { 0, 0, printargs, "n32_shmgat" }, /* 6029 */
- { 0, 0, printargs, "n32_shmctl" }, /* 6030 */
- { 0, 0, printargs, "n32_dup" }, /* 6031 */
- { 0, 0, printargs, "n32_dup2" }, /* 6032 */
- { 0, 0, printargs, "n32_pause" }, /* 6033 */
- { 0, 0, printargs, "n32_nanosleep" }, /* 6034 */
- { 0, 0, printargs, "n32_getitimer" }, /* 6035 */
- { 0, 0, printargs, "n32_setitimer" }, /* 6036 */
- { 0, 0, printargs, "n32_alarm" }, /* 6037 */
- { 0, 0, printargs, "n32_getpid" }, /* 6038 */
- { 0, 0, printargs, "n32_sendfile" }, /* 6039 */
- { 0, 0, printargs, "n32_socketcall" }, /* 6040 */
- { 0, 0, printargs, "n32_connect" }, /* 6041 */
- { 0, 0, printargs, "n32_accept" }, /* 6042 */
- { 0, 0, printargs, "n32_sendto" }, /* 6043 */
- { 0, 0, printargs, "n32_recvfrom" }, /* 6044 */
- { 0, 0, printargs, "n32_sendmsg" }, /* 6045 */
- { 0, 0, printargs, "n32_recvmsg" }, /* 6046 */
- { 0, 0, printargs, "n32_shutdown" }, /* 6047 */
- { 0, 0, printargs, "n32_bind" }, /* 6048 */
- { 0, 0, printargs, "n32_listen" }, /* 6049 */
- { 0, 0, printargs, "n32_getsockname" }, /* 6050 */
- { 0, 0, printargs, "n32_getpeername" }, /* 6051 */
- { 0, 0, printargs, "n32_socketpair" }, /* 6052 */
- { 0, 0, printargs, "n32_setsockopt" }, /* 6053 */
- { 0, 0, printargs, "n32_getsockopt" }, /* 6054 */
- { 0, 0, printargs, "n32_clone" }, /* 6055 */
- { 0, 0, printargs, "n32_fork" }, /* 6056 */
- { 0, 0, printargs, "n32_execve" }, /* 6057 */
- { 0, 0, printargs, "n32_exit" }, /* 6058 */
- { 0, 0, printargs, "n32_wait4" }, /* 6059 */
- { 0, 0, printargs, "n32_kill" }, /* 6060 */
- { 0, 0, printargs, "n32_uname" }, /* 6061 */
- { 0, 0, printargs, "n32_semget" }, /* 6062 */
- { 0, 0, printargs, "n32_semop" }, /* 6063 */
- { 0, 0, printargs, "n32_semctl" }, /* 6064 */
- { 0, 0, printargs, "n32_shmdt" }, /* 6065 */
- { 0, 0, printargs, "n32_msgget" }, /* 6066 */
- { 0, 0, printargs, "n32_msgsnd" }, /* 6067 */
- { 0, 0, printargs, "n32_msgrcv" }, /* 6068 */
- { 0, 0, printargs, "n32_msgctl" }, /* 6069 */
- { 0, 0, printargs, "n32_fcntl" }, /* 6070 */
- { 0, 0, printargs, "n32_flock" }, /* 6071 */
- { 0, 0, printargs, "n32_fsync" }, /* 6072 */
- { 0, 0, printargs, "n32_fdatasync" }, /* 6073 */
- { 0, 0, printargs, "n32_truncate" }, /* 6074 */
- { 0, 0, printargs, "n32_ftruncate" }, /* 6075 */
- { 0, 0, printargs, "n32_getdents" }, /* 6076 */
- { 0, 0, printargs, "n32_getcwd" }, /* 6077 */
- { 0, 0, printargs, "n32_chdir" }, /* 6078 */
- { 0, 0, printargs, "n32_fchdir" }, /* 6079 */
- { 0, 0, printargs, "n32_rename" }, /* 6080 */
- { 0, 0, printargs, "n32_mkdir" }, /* 6081 */
- { 0, 0, printargs, "n32_rmdir" }, /* 6082 */
- { 0, 0, printargs, "n32_creat" }, /* 6083 */
- { 0, 0, printargs, "n32_link" }, /* 6084 */
- { 0, 0, printargs, "n32_unlink" }, /* 6085 */
- { 0, 0, printargs, "n32_symlink" }, /* 6086 */
- { 0, 0, printargs, "n32_readlink" }, /* 6087 */
- { 0, 0, printargs, "n32_chmod" }, /* 6088 */
- { 0, 0, printargs, "n32_fchmod" }, /* 6089 */
- { 0, 0, printargs, "n32_chown" }, /* 6090 */
- { 0, 0, printargs, "n32_fchown" }, /* 6091 */
- { 0, 0, printargs, "n32_lchown" }, /* 6092 */
- { 0, 0, printargs, "n32_umask" }, /* 6093 */
- { 0, 0, printargs, "n32_gettimeofday" }, /* 6094 */
- { 0, 0, printargs, "n32_getrlimit" }, /* 6095 */
- { 0, 0, printargs, "n32_getrusage" }, /* 6096 */
- { 0, 0, printargs, "n32_sysinfo" }, /* 6097 */
- { 0, 0, printargs, "n32_times" }, /* 6098 */
- { 0, 0, printargs, "n32_ptrace" }, /* 6099 */
- { 0, 0, printargs, "n32_getuid" }, /* 6100 */
- { 0, 0, printargs, "n32_syslog" }, /* 6101 */
- { 0, 0, printargs, "n32_getgid" }, /* 6102 */
- { 0, 0, printargs, "n32_setuid" }, /* 6103 */
- { 0, 0, printargs, "n32_setgid" }, /* 6104 */
- { 0, 0, printargs, "n32_geteuid" }, /* 6105 */
- { 0, 0, printargs, "n32_getegid" }, /* 6106 */
- { 0, 0, printargs, "n32_setpgid" }, /* 6107 */
- { 0, 0, printargs, "n32_getppid" }, /* 6108 */
- { 0, 0, printargs, "n32_getpgrp" }, /* 6109 */
- { 0, 0, printargs, "n32_setsid" }, /* 6110 */
- { 0, 0, printargs, "n32_setreuid" }, /* 6111 */
- { 0, 0, printargs, "n32_setregid" }, /* 6112 */
- { 0, 0, printargs, "n32_getgroups" }, /* 6113 */
- { 0, 0, printargs, "n32_setgroups" }, /* 6114 */
- { 0, 0, printargs, "n32_setresuid" }, /* 6115 */
- { 0, 0, printargs, "n32_getresuid" }, /* 6116 */
- { 0, 0, printargs, "n32_setresgid" }, /* 6117 */
- { 0, 0, printargs, "n32_getresgid" }, /* 6118 */
- { 0, 0, printargs, "n32_getpgid" }, /* 6119 */
- { 0, 0, printargs, "n32_setfsuid" }, /* 6120 */
- { 0, 0, printargs, "n32_setfsgid" }, /* 6121 */
- { 0, 0, printargs, "n32_getsid" }, /* 6122 */
- { 0, 0, printargs, "n32_capget" }, /* 6123 */
- { 0, 0, printargs, "n32_capset" }, /* 6124 */
- { 0, 0, printargs, "n32_rt_sigpending" }, /* 6125 */
- { 0, 0, printargs, "n32_rt_sigtimedwait" }, /* 6126 */
- { 0, 0, printargs, "n32_rt_sigqueueinfo" }, /* 6127 */
- { 0, 0, printargs, "n32_rt_siguspend" }, /* 6128 */
- { 0, 0, printargs, "n32_sigaltstatck" }, /* 6129 */
- { 0, 0, printargs, "n32_utime" }, /* 6130 */
- { 0, 0, printargs, "n32_mknod" }, /* 6131 */
- { 0, 0, printargs, "n32_personality" }, /* 6132 */
- { 0, 0, printargs, "n32_ustat" }, /* 6133 */
- { 0, 0, printargs, "n32_statfs" }, /* 6134 */
- { 0, 0, printargs, "n32_fstatfs" }, /* 6135 */
- { 0, 0, printargs, "n32_sysfs" }, /* 6136 */
- { 0, 0, printargs, "n32_getpriority" }, /* 6137 */
- { 0, 0, printargs, "n32_setpriority" }, /* 6138 */
- { 0, 0, printargs, "n32_sched_setparam" }, /* 6139 */
- { 0, 0, printargs, "n32_sched_getparam" }, /* 6140 */
- { 0, 0, printargs, "n32_sched_setscheduler"}, /* 6141 */
- { 0, 0, printargs, "n32_sched_getscheduler"}, /* 6142 */
- { 0, 0, printargs, "n32_sched_get_priority_max"}, /* 6143 */
- { 0, 0, printargs, "n32_sched_get_priority_min"}, /* 6144 */
- { 0, 0, printargs, "n32_sched_rr_get_interval"}, /* 6145 */
- { 0, 0, printargs, "n32_mlock" }, /* 6146 */
- { 0, 0, printargs, "n32_munlock" }, /* 6147 */
- { 0, 0, printargs, "n32_mlockall" }, /* 6148 */
- { 0, 0, printargs, "n32_munlockall" }, /* 6149 */
- { 0, 0, printargs, "n32_vhangup" }, /* 6150 */
- { 0, 0, printargs, "n32_pivot_root" }, /* 6151 */
- { 0, 0, printargs, "n32__sysctl" }, /* 6152 */
- { 0, 0, printargs, "n32_prctl" }, /* 6153 */
- { 0, 0, printargs, "n32_adjtimex" }, /* 6154 */
- { 0, 0, printargs, "n32_setrlimit" }, /* 6155 */
- { 0, 0, printargs, "n32_chroot" }, /* 6156 */
- { 0, 0, printargs, "n32_sync" }, /* 6157 */
- { 0, 0, printargs, "n32_acct" }, /* 6158 */
- { 0, 0, printargs, "n32_settimeofday" }, /* 6159 */
- { 0, 0, printargs, "n32_mount" }, /* 6160 */
- { 0, 0, printargs, "n32_umount" }, /* 6161 */
- { 0, 0, printargs, "n32_swapon" }, /* 6162 */
- { 0, 0, printargs, "n32_swapoff" }, /* 6163 */
- { 0, 0, printargs, "n32_reboot" }, /* 6164 */
- { 0, 0, printargs, "n32_sethostname" }, /* 6165 */
- { 0, 0, printargs, "n32_setdomainname" }, /* 6166 */
- { 0, 0, printargs, "n32_create_module" }, /* 6167 */
- { 0, 0, printargs, "n32_init_module" }, /* 6168 */
- { 0, 0, printargs, "n32_delete_module" }, /* 6169 */
- { 0, 0, printargs, "n32_get_kernel_syms" }, /* 6170 */
- { 0, 0, printargs, "n32_query_module" }, /* 6171 */
- { 0, 0, printargs, "n32_quotactl" }, /* 6172 */
- { 0, 0, printargs, "n32_nfsservctl" }, /* 6173 */
- { 0, 0, printargs, "n32_getpmsg" }, /* 6174 */
- { 0, 0, printargs, "n32_putpmsg" }, /* 6175 */
- { 0, 0, printargs, "n32_afs_syscall" }, /* 6176 */
- { 0, 0, printargs, "n32_reserved177" }, /* 6177 */
- { 0, 0, printargs, "n32_gettid" }, /* 6178 */
- { 0, 0, printargs, "n32_readahead" }, /* 6179 */
- { 0, 0, printargs, "n32_setxattr" }, /* 6180 */
- { 0, 0, printargs, "n32_lsetxattr" }, /* 6181 */
- { 0, 0, printargs, "n32_fsetxattr" }, /* 6182 */
- { 0, 0, printargs, "n32_getxattr" }, /* 6183 */
- { 0, 0, printargs, "n32_lgetxattr" }, /* 6184 */
- { 0, 0, printargs, "n32_fgetxattr" }, /* 6185 */
- { 0, 0, printargs, "n32_listxattr" }, /* 6186 */
- { 0, 0, printargs, "n32_llistxattr" }, /* 6187 */
- { 0, 0, printargs, "n32_flistxattr" }, /* 6188 */
- { 0, 0, printargs, "n32_removexattr" }, /* 6189 */
- { 0, 0, printargs, "n32_lremovexattr" }, /* 6190 */
- { 0, 0, printargs, "n32_fremovexattr" }, /* 6191 */
- { 0, 0, printargs, "n32_tkill" }, /* 6192 */
- { 0, 0, printargs, "n32_time" }, /* 6193 */
- { 0, 0, printargs, "n32_futex" }, /* 6194 */
- { 0, 0, printargs, "n32_sched_setaffinity" }, /* 6195 */
- { 0, 0, printargs, "n32_sched_getaffinity" }, /* 6196 */
- { 0, 0, printargs, "n32_cacheflush" }, /* 6197 */
- { 0, 0, printargs, "n32_cachectl" }, /* 6198 */
- { 0, 0, printargs, "n32_sysmips" }, /* 6199 */
- { 0, 0, printargs, "n32_io_setup" }, /* 6200 */
- { 0, 0, printargs, "n32_io_destroy" }, /* 6201 */
- { 0, 0, printargs, "n32_io_getevents" }, /* 6202 */
- { 0, 0, printargs, "n32_io_submit" }, /* 6203 */
- { 0, 0, printargs, "n32_io_cancel" }, /* 6204 */
- { 1, TP, printargs, "n32_exit_group" }, /* 6205 */
- { 0, 0, printargs, "n32_lookup_dcookie" }, /* 6206 */
- { 0, 0, printargs, "n32_epoll_create" }, /* 6207 */
- { 0, 0, printargs, "n32_epoll_ctl" }, /* 6208 */
- { 0, 0, printargs, "n32_epoll_wait" }, /* 6209 */
- { 0, 0, printargs, "n32_remap_file_pages" }, /* 6210 */
- { 0, 0, printargs, "n32_rt_sigreturn" }, /* 6211 */
- { 0, 0, printargs, "n32_fcntl64" }, /* 6212 */
- { 0, 0, printargs, "n32_set_tid_address" }, /* 6213 */
- { 0, 0, printargs, "n32_restart_syscall" }, /* 6214 */
- { 0, 0, printargs, "n32_semtimedop" }, /* 6215 */
- { 0, 0, printargs, "n32_fadvise64" }, /* 6216 */
- { 0, 0, printargs, "n32_statfs64" }, /* 6217 */
- { 0, 0, printargs, "n32_fstatfs64" }, /* 6218 */
- { 0, 0, printargs, "n32_sendfile64" }, /* 6219 */
- { 3, 0, printargs, "n32_timer_create" }, /* 6220 */
- { 4, 0, printargs, "n32_timer_settime" }, /* 6221 */
- { 2, 0, printargs, "n32_timer_gettime" }, /* 6222 */
- { 1, 0, printargs, "n32_timer_getoverrun" }, /* 6223 */
- { 1, 0, printargs, "n32_timer_delete" }, /* 6224 */
- { 2, 0, printargs, "n32_clock_settime" }, /* 6225 */
- { 2, 0, printargs, "n32_clock_gettime" }, /* 6226 */
- { 2, 0, printargs, "n32_clock_getres" }, /* 6227 */
- { 4, 0, printargs, "n32_clock_nanosleep" }, /* 6228 */
- { 3, 0, printargs, "n32_tgkill" }, /* 6229 */
- { 2, 0, printargs, "n32_utimes" }, /* 6230 */
- { 0, 0, printargs, "n32_SYS_6231" }, /* 6231 */
- { 0, 0, printargs, "n32_SYS_6232" }, /* 6232 */
- { 0, 0, printargs, "n32_SYS_6233" }, /* 6233 */
- { 4, 0, printargs, "n32_mq_open" }, /* 6234 */
- { 1, 0, printargs, "n32_mq_unlink" }, /* 6235 */
- { 5, 0, printargs, "n32_mq_timedsend" }, /* 6236 */
- { 5, 0, printargs, "n32_mq_timedreceive" }, /* 6237 */
- { 2, 0, printargs, "n32_mq_notify" }, /* 6238 */
- { 3, 0, printargs, "n32_mq_getsetattr" }, /* 6239 */
- { 0, 0, printargs, "n32_SYS_6240" }, /* 6240 */
- { 5, TP, printargs, "n32_waitid" }, /* 6241 */
- { 0, 0, printargs, "n32_SYS_6242" }, /* 6242 */
- { 5, 0, printargs, "n32_add_key" }, /* 6243 */
- { 4, 0, printargs, "n32_request_key" }, /* 6244 */
- { 5, 0, printargs, "n32_keyctl" }, /* 6245 */
- { 1, 0, printargs, "n32_set_thread_area" }, /* 6246 */
- { 0, TD, printargs, "n32_inotify_init" }, /* 6247 */
- { 3, TD, printargs, "n32_inotify_add_watch" }, /* 6248 */
- { 2, TD, printargs, "n32_inotify_rm_watch" }, /* 6249 */
- { 4, 0, printargs, "n32_migrate_pages" }, /* 6250 */
- { 4, TD|TF, printargs, "n32_openat" }, /* 6251 */
- { 3, TD|TF, printargs, "n32_mkdirat" }, /* 6252 */
- { 4, TD|TF, printargs, "n32_mknodat" }, /* 6253 */
- { 5, TD|TF, printargs, "n32_fchownat" }, /* 6254 */
- { 3, TD|TF, printargs, "n32_futimesat" }, /* 6255 */
- { 4, TD|TF, printargs, "n32_newfstatat" }, /* 6256 */
- { 3, TD|TF, printargs, "n32_unlinkat" }, /* 6257 */
- { 4, TD|TF, printargs, "n32_renameat" }, /* 6258 */
- { 5, TD|TF, printargs, "n32_linkat" }, /* 6259 */
- { 3, TD|TF, printargs, "n32_symlinkat" }, /* 6260 */
- { 4, TD|TF, printargs, "n32_readlinkat" }, /* 6261 */
- { 3, TD|TF, printargs, "n32_fchmodat" }, /* 6262 */
- { 3, TD|TF, printargs, "n32_faccessat" }, /* 6263 */
- { 6, TD, printargs, "n32_pselect6" }, /* 6264 */
- { 5, TD, printargs, "n32_ppoll" }, /* 6265 */
- { 1, TP, printargs, "n32_unshare" }, /* 6266 */
- { 6, TD, printargs, "n32_splice" }, /* 6267 */
- { 4, TD, printargs, "n32_sync_file_range" }, /* 6268 */
- { 4, TD, printargs, "n32_tee" }, /* 6269 */
- { 4, TD, printargs, "n32_vmsplice" }, /* 6270 */
- { 6, 0, printargs, "n32_move_pages" }, /* 6271 */
- { 2, 0, printargs, "n32_set_robust_list" }, /* 6272 */
- { 3, 0, printargs, "n32_get_robust_list" }, /* 6273 */
- { 5, 0, printargs, "n32_kexec_load" }, /* 6274 */
- { 3, 0, printargs, "n32_getcpu" }, /* 6275 */
- { 5, TD, printargs, "n32_epoll_pwait" }, /* 6276 */
- { 3, 0, printargs, "n32_ioprio_set" }, /* 6277 */
- { 2, 0, printargs, "n32_ioprio_get" }, /* 6278 */
- { 4, TD|TF, printargs, "n32_utimensat" }, /* 6279 */
- { 3, TD|TS, printargs, "n32_signalfd" }, /* 6280 */
- { 0, 0, printargs, "n32_SYS_6281" }, /* 6281 */
- { 1, TD, printargs, "n32_eventfd" }, /* 6282 */
- { 6, TD, printargs, "n32_fallocate" }, /* 6283 */
- { 2, TD, printargs, "n32_timerfd_create" }, /* 6284 */
- { 2, TD, printargs, "n32_timerfd_gettime" }, /* 6285 */
- { 4, TD, printargs, "n32_timerfd_settime" }, /* 6286 */
- { 4, TD|TS, printargs, "n32_signalfd4" }, /* 6287 */
- { 2, TD, printargs, "n32_eventfd2" }, /* 6288 */
- { 1, TD, printargs, "n32_epoll_create1" }, /* 6289 */
- { 3, TD, printargs, "n32_dup3" }, /* 6290 */
- { 2, TD, printargs, "n32_pipe2" }, /* 6291 */
- { 1, TD, printargs, "n32_inotify_init1" }, /* 6292 */
- { 5, TD, printargs, "n32_preadv" }, /* 6293 */
- { 5, TD, printargs, "n32_pwritev" }, /* 6294 */
- { 4, TP|TS, printargs, "n32_rt_tgsigqueueinfo" }, /* 6295 */
- { 5, TD, printargs, "n32_perf_event_open" }, /* 6296 */
- { 4, TN, printargs, "n32_accept4" }, /* 6297 */
- { 5, TN, printargs, "n32_recvmmsg" }, /* 6298 */
- { 3, TD, printargs, "n32_getdents" }, /* 6299 */
- { 2, 0, printargs, "n32_fanotify_init" }, /* 6300 */
- { 5, 0, printargs, "n32_fanotify_mark" }, /* 6301 */
- { 4, 0, printargs, "n32_prlimit64" }, /* 6302 */
- { 5, TD|TF, printargs, "n32_name_to_handle_at" }, /* 6303 */
- { 3, TD, printargs, "n32_open_by_handle_at" }, /* 6304 */
- { 2, 0, printargs, "n32_clock_adjtime" }, /* 6305 */
- { 1, TD, printargs, "n32_syncfs" }, /* 6306 */
- { 4, TN, printargs, "n32_sendmmsg" }, /* 6307 */
- { 2, TD, printargs, "n32_setns" }, /* 6308 */
- { 6, 0, printargs, "n32_process_vm_readv" }, /* 6309 */
- { 6, 0, printargs, "n32_process_vm_writev" }, /* 6310 */
-#endif
- { 0, 0, NULL, NULL }, /* 6311 */
- { 0, 0, NULL, NULL }, /* 6312 */
- { 0, 0, NULL, NULL }, /* 6313 */
- { 0, 0, NULL, NULL }, /* 6314 */
- { 0, 0, NULL, NULL }, /* 6315 */
- { 0, 0, NULL, NULL }, /* 6316 */
- { 0, 0, NULL, NULL }, /* 6317 */
- { 0, 0, NULL, NULL }, /* 6318 */
- { 0, 0, NULL, NULL }, /* 6319 */
- { 0, 0, NULL, NULL }, /* 6320 */
- { 0, 0, NULL, NULL }, /* 6321 */
- { 0, 0, NULL, NULL }, /* 6322 */
- { 0, 0, NULL, NULL }, /* 6323 */
- { 0, 0, NULL, NULL }, /* 6324 */
- { 0, 0, NULL, NULL }, /* 6325 */
- { 0, 0, NULL, NULL }, /* 6326 */
- { 0, 0, NULL, NULL }, /* 6327 */
- { 0, 0, NULL, NULL }, /* 6328 */
- { 0, 0, NULL, NULL }, /* 6329 */
- { 0, 0, NULL, NULL }, /* 6330 */
- { 0, 0, NULL, NULL }, /* 6331 */
- { 0, 0, NULL, NULL }, /* 6332 */
- { 0, 0, NULL, NULL }, /* 6333 */
- { 0, 0, NULL, NULL }, /* 6334 */
- { 0, 0, NULL, NULL }, /* 6335 */
- { 0, 0, NULL, NULL }, /* 6336 */
- { 0, 0, NULL, NULL }, /* 6337 */
- { 0, 0, NULL, NULL }, /* 6338 */
- { 0, 0, NULL, NULL }, /* 6339 */
- { 0, 0, NULL, NULL }, /* 6340 */
- { 0, 0, NULL, NULL }, /* 6341 */
- { 0, 0, NULL, NULL }, /* 6342 */
- { 0, 0, NULL, NULL }, /* 6343 */
- { 0, 0, NULL, NULL }, /* 6344 */
- { 0, 0, NULL, NULL }, /* 6345 */
- { 0, 0, NULL, NULL }, /* 6346 */
- { 0, 0, NULL, NULL }, /* 6347 */
- { 0, 0, NULL, NULL }, /* 6348 */
- { 0, 0, NULL, NULL }, /* 6349 */
- { 0, 0, NULL, NULL }, /* 6350 */
- { 0, 0, NULL, NULL }, /* 6351 */
- { 0, 0, NULL, NULL }, /* 6352 */
- { 0, 0, NULL, NULL }, /* 6353 */
- { 0, 0, NULL, NULL }, /* 6354 */
- { 0, 0, NULL, NULL }, /* 6355 */
- { 0, 0, NULL, NULL }, /* 6356 */
- { 0, 0, NULL, NULL }, /* 6357 */
- { 0, 0, NULL, NULL }, /* 6358 */
- { 0, 0, NULL, NULL }, /* 6359 */
- { 0, 0, NULL, NULL }, /* 6360 */
- { 0, 0, NULL, NULL }, /* 6361 */
- { 0, 0, NULL, NULL }, /* 6362 */
- { 0, 0, NULL, NULL }, /* 6363 */
- { 0, 0, NULL, NULL }, /* 6364 */
- { 0, 0, NULL, NULL }, /* 6365 */
- { 0, 0, NULL, NULL }, /* 6366 */
- { 0, 0, NULL, NULL }, /* 6367 */
- { 0, 0, NULL, NULL }, /* 6368 */
- { 0, 0, NULL, NULL }, /* 6369 */
- { 0, 0, NULL, NULL }, /* 6370 */
- { 0, 0, NULL, NULL }, /* 6371 */
- { 0, 0, NULL, NULL }, /* 6372 */
- { 0, 0, NULL, NULL }, /* 6373 */
- { 0, 0, NULL, NULL }, /* 6374 */
- { 0, 0, NULL, NULL }, /* 6375 */
- { 0, 0, NULL, NULL }, /* 6376 */
- { 0, 0, NULL, NULL }, /* 6377 */
- { 0, 0, NULL, NULL }, /* 6378 */
- { 0, 0, NULL, NULL }, /* 6379 */
- { 0, 0, NULL, NULL }, /* 6380 */
- { 0, 0, NULL, NULL }, /* 6381 */
- { 0, 0, NULL, NULL }, /* 6382 */
- { 0, 0, NULL, NULL }, /* 6383 */
- { 0, 0, NULL, NULL }, /* 6384 */
- { 0, 0, NULL, NULL }, /* 6385 */
- { 0, 0, NULL, NULL }, /* 6386 */
- { 0, 0, NULL, NULL }, /* 6387 */
- { 0, 0, NULL, NULL }, /* 6388 */
- { 0, 0, NULL, NULL }, /* 6389 */
- { 0, 0, NULL, NULL }, /* 6390 */
- { 0, 0, NULL, NULL }, /* 6391 */
- { 0, 0, NULL, NULL }, /* 6392 */
- { 0, 0, NULL, NULL }, /* 6393 */
- { 0, 0, NULL, NULL }, /* 6394 */
- { 0, 0, NULL, NULL }, /* 6395 */
- { 0, 0, NULL, NULL }, /* 6396 */
- { 0, 0, NULL, NULL }, /* 6397 */
- { 0, 0, NULL, NULL }, /* 6398 */
- { 0, 0, NULL, NULL }, /* 6399 */
- { 0, 0, NULL, NULL }, /* 6400 */
- { 0, 0, NULL, NULL }, /* 6401 */
- { 0, 0, NULL, NULL }, /* 6402 */
- { 0, 0, NULL, NULL }, /* 6403 */
- { 0, 0, NULL, NULL }, /* 6404 */
- { 0, 0, NULL, NULL }, /* 6405 */
- { 0, 0, NULL, NULL }, /* 6406 */
- { 0, 0, NULL, NULL }, /* 6407 */
- { 0, 0, NULL, NULL }, /* 6408 */
- { 0, 0, NULL, NULL }, /* 6409 */
- { 0, 0, NULL, NULL }, /* 6410 */
- { 0, 0, NULL, NULL }, /* 6411 */
- { 0, 0, NULL, NULL }, /* 6412 */
- { 0, 0, NULL, NULL }, /* 6413 */
- { 0, 0, NULL, NULL }, /* 6414 */
- { 0, 0, NULL, NULL }, /* 6415 */
- { 0, 0, NULL, NULL }, /* 6416 */
- { 0, 0, NULL, NULL }, /* 6417 */
- { 0, 0, NULL, NULL }, /* 6418 */
- { 0, 0, NULL, NULL }, /* 6419 */
- { 0, 0, NULL, NULL }, /* 6420 */
- { 0, 0, NULL, NULL }, /* 6421 */
- { 0, 0, NULL, NULL }, /* 6422 */
- { 0, 0, NULL, NULL }, /* 6423 */
- { 0, 0, NULL, NULL }, /* 6424 */
- { 0, 0, NULL, NULL }, /* 6425 */
- { 0, 0, NULL, NULL }, /* 6426 */
- { 0, 0, NULL, NULL }, /* 6427 */
- { 0, 0, NULL, NULL }, /* 6428 */
- { 0, 0, NULL, NULL }, /* 6429 */
- { 0, 0, NULL, NULL }, /* 6430 */
- { 0, 0, NULL, NULL }, /* 6431 */
- { 0, 0, NULL, NULL }, /* 6432 */
- { 0, 0, NULL, NULL }, /* 6433 */
- { 0, 0, NULL, NULL }, /* 6434 */
- { 0, 0, NULL, NULL }, /* 6435 */
- { 0, 0, NULL, NULL }, /* 6436 */
- { 0, 0, NULL, NULL }, /* 6437 */
- { 0, 0, NULL, NULL }, /* 6438 */
- { 0, 0, NULL, NULL }, /* 6439 */
- { 0, 0, NULL, NULL }, /* 6440 */
- { 0, 0, NULL, NULL }, /* 6441 */
- { 0, 0, NULL, NULL }, /* 6442 */
- { 0, 0, NULL, NULL }, /* 6443 */
- { 0, 0, NULL, NULL }, /* 6444 */
- { 0, 0, NULL, NULL }, /* 6445 */
- { 0, 0, NULL, NULL }, /* 6446 */
- { 0, 0, NULL, NULL }, /* 6447 */
- { 0, 0, NULL, NULL }, /* 6448 */
- { 0, 0, NULL, NULL }, /* 6449 */
- { 0, 0, NULL, NULL }, /* 6450 */
- { 0, 0, NULL, NULL }, /* 6451 */
- { 0, 0, NULL, NULL }, /* 6452 */
- { 0, 0, NULL, NULL }, /* 6453 */
- { 0, 0, NULL, NULL }, /* 6454 */
- { 0, 0, NULL, NULL }, /* 6455 */
- { 0, 0, NULL, NULL }, /* 6456 */
- { 0, 0, NULL, NULL }, /* 6457 */
- { 0, 0, NULL, NULL }, /* 6458 */
- { 0, 0, NULL, NULL }, /* 6459 */
- { 0, 0, NULL, NULL }, /* 6460 */
- { 0, 0, NULL, NULL }, /* 6461 */
- { 0, 0, NULL, NULL }, /* 6462 */
- { 0, 0, NULL, NULL }, /* 6463 */
- { 0, 0, NULL, NULL }, /* 6464 */
- { 0, 0, NULL, NULL }, /* 6465 */
- { 0, 0, NULL, NULL }, /* 6466 */
- { 0, 0, NULL, NULL }, /* 6467 */
- { 0, 0, NULL, NULL }, /* 6468 */
- { 0, 0, NULL, NULL }, /* 6469 */
- { 0, 0, NULL, NULL }, /* 6470 */
- { 0, 0, NULL, NULL }, /* 6471 */
- { 0, 0, NULL, NULL }, /* 6472 */
- { 0, 0, NULL, NULL }, /* 6473 */
- { 0, 0, NULL, NULL }, /* 6474 */
- { 0, 0, NULL, NULL }, /* 6475 */
- { 0, 0, NULL, NULL }, /* 6476 */
- { 0, 0, NULL, NULL }, /* 6477 */
- { 0, 0, NULL, NULL }, /* 6478 */
- { 0, 0, NULL, NULL }, /* 6479 */
- { 0, 0, NULL, NULL }, /* 6480 */
- { 0, 0, NULL, NULL }, /* 6481 */
- { 0, 0, NULL, NULL }, /* 6482 */
- { 0, 0, NULL, NULL }, /* 6483 */
- { 0, 0, NULL, NULL }, /* 6484 */
- { 0, 0, NULL, NULL }, /* 6485 */
- { 0, 0, NULL, NULL }, /* 6486 */
- { 0, 0, NULL, NULL }, /* 6487 */
- { 0, 0, NULL, NULL }, /* 6488 */
- { 0, 0, NULL, NULL }, /* 6489 */
- { 0, 0, NULL, NULL }, /* 6490 */
- { 0, 0, NULL, NULL }, /* 6491 */
- { 0, 0, NULL, NULL }, /* 6492 */
- { 0, 0, NULL, NULL }, /* 6493 */
- { 0, 0, NULL, NULL }, /* 6494 */
- { 0, 0, NULL, NULL }, /* 6495 */
- { 0, 0, NULL, NULL }, /* 6496 */
- { 0, 0, NULL, NULL }, /* 6497 */
- { 0, 0, NULL, NULL }, /* 6498 */
- { 0, 0, NULL, NULL }, /* 6499 */
- { 0, 0, NULL, NULL }, /* 6500 */
- { 0, 0, NULL, NULL }, /* 6501 */
- { 0, 0, NULL, NULL }, /* 6502 */
- { 0, 0, NULL, NULL }, /* 6503 */
- { 0, 0, NULL, NULL }, /* 6504 */
- { 0, 0, NULL, NULL }, /* 6505 */
- { 0, 0, NULL, NULL }, /* 6506 */
- { 0, 0, NULL, NULL }, /* 6507 */
- { 0, 0, NULL, NULL }, /* 6508 */
- { 0, 0, NULL, NULL }, /* 6509 */
- { 0, 0, NULL, NULL }, /* 6510 */
- { 0, 0, NULL, NULL }, /* 6511 */
- { 0, 0, NULL, NULL }, /* 6512 */
- { 0, 0, NULL, NULL }, /* 6513 */
- { 0, 0, NULL, NULL }, /* 6514 */
- { 0, 0, NULL, NULL }, /* 6515 */
- { 0, 0, NULL, NULL }, /* 6516 */
- { 0, 0, NULL, NULL }, /* 6517 */
- { 0, 0, NULL, NULL }, /* 6518 */
- { 0, 0, NULL, NULL }, /* 6519 */
- { 0, 0, NULL, NULL }, /* 6520 */
- { 0, 0, NULL, NULL }, /* 6521 */
- { 0, 0, NULL, NULL }, /* 6522 */
- { 0, 0, NULL, NULL }, /* 6523 */
- { 0, 0, NULL, NULL }, /* 6524 */
- { 0, 0, NULL, NULL }, /* 6525 */
- { 0, 0, NULL, NULL }, /* 6526 */
- { 0, 0, NULL, NULL }, /* 6527 */
- { 0, 0, NULL, NULL }, /* 6528 */
- { 0, 0, NULL, NULL }, /* 6529 */
- { 0, 0, NULL, NULL }, /* 6530 */
- { 0, 0, NULL, NULL }, /* 6531 */
- { 0, 0, NULL, NULL }, /* 6532 */
- { 0, 0, NULL, NULL }, /* 6533 */
- { 0, 0, NULL, NULL }, /* 6534 */
- { 0, 0, NULL, NULL }, /* 6535 */
- { 0, 0, NULL, NULL }, /* 6536 */
- { 0, 0, NULL, NULL }, /* 6537 */
- { 0, 0, NULL, NULL }, /* 6538 */
- { 0, 0, NULL, NULL }, /* 6539 */
- { 0, 0, NULL, NULL }, /* 6540 */
- { 0, 0, NULL, NULL }, /* 6541 */
- { 0, 0, NULL, NULL }, /* 6542 */
- { 0, 0, NULL, NULL }, /* 6543 */
- { 0, 0, NULL, NULL }, /* 6544 */
- { 0, 0, NULL, NULL }, /* 6545 */
- { 0, 0, NULL, NULL }, /* 6546 */
- { 0, 0, NULL, NULL }, /* 6547 */
- { 0, 0, NULL, NULL }, /* 6548 */
- { 0, 0, NULL, NULL }, /* 6549 */
- { 0, 0, NULL, NULL }, /* 6550 */
- { 0, 0, NULL, NULL }, /* 6551 */
- { 0, 0, NULL, NULL }, /* 6552 */
- { 0, 0, NULL, NULL }, /* 6553 */
- { 0, 0, NULL, NULL }, /* 6554 */
- { 0, 0, NULL, NULL }, /* 6555 */
- { 0, 0, NULL, NULL }, /* 6556 */
- { 0, 0, NULL, NULL }, /* 6557 */
- { 0, 0, NULL, NULL }, /* 6558 */
- { 0, 0, NULL, NULL }, /* 6559 */
- { 0, 0, NULL, NULL }, /* 6560 */
- { 0, 0, NULL, NULL }, /* 6561 */
- { 0, 0, NULL, NULL }, /* 6562 */
- { 0, 0, NULL, NULL }, /* 6563 */
- { 0, 0, NULL, NULL }, /* 6564 */
- { 0, 0, NULL, NULL }, /* 6565 */
- { 0, 0, NULL, NULL }, /* 6566 */
- { 0, 0, NULL, NULL }, /* 6567 */
- { 0, 0, NULL, NULL }, /* 6568 */
- { 0, 0, NULL, NULL }, /* 6569 */
- { 0, 0, NULL, NULL }, /* 6570 */
- { 0, 0, NULL, NULL }, /* 6571 */
- { 0, 0, NULL, NULL }, /* 6572 */
- { 0, 0, NULL, NULL }, /* 6573 */
- { 0, 0, NULL, NULL }, /* 6574 */
- { 0, 0, NULL, NULL }, /* 6575 */
- { 0, 0, NULL, NULL }, /* 6576 */
- { 0, 0, NULL, NULL }, /* 6577 */
- { 0, 0, NULL, NULL }, /* 6578 */
- { 0, 0, NULL, NULL }, /* 6579 */
- { 0, 0, NULL, NULL }, /* 6580 */
- { 0, 0, NULL, NULL }, /* 6581 */
- { 0, 0, NULL, NULL }, /* 6582 */
- { 0, 0, NULL, NULL }, /* 6583 */
- { 0, 0, NULL, NULL }, /* 6584 */
- { 0, 0, NULL, NULL }, /* 6585 */
- { 0, 0, NULL, NULL }, /* 6586 */
- { 0, 0, NULL, NULL }, /* 6587 */
- { 0, 0, NULL, NULL }, /* 6588 */
- { 0, 0, NULL, NULL }, /* 6589 */
- { 0, 0, NULL, NULL }, /* 6590 */
- { 0, 0, NULL, NULL }, /* 6591 */
- { 0, 0, NULL, NULL }, /* 6592 */
- { 0, 0, NULL, NULL }, /* 6593 */
- { 0, 0, NULL, NULL }, /* 6594 */
- { 0, 0, NULL, NULL }, /* 6595 */
- { 0, 0, NULL, NULL }, /* 6596 */
- { 0, 0, NULL, NULL }, /* 6597 */
- { 0, 0, NULL, NULL }, /* 6598 */
- { 0, 0, NULL, NULL }, /* 6599 */
- { 0, 0, NULL, NULL }, /* 6600 */
- { 0, 0, NULL, NULL }, /* 6601 */
- { 0, 0, NULL, NULL }, /* 6602 */
- { 0, 0, NULL, NULL }, /* 6603 */
- { 0, 0, NULL, NULL }, /* 6604 */
- { 0, 0, NULL, NULL }, /* 6605 */
- { 0, 0, NULL, NULL }, /* 6606 */
- { 0, 0, NULL, NULL }, /* 6607 */
- { 0, 0, NULL, NULL }, /* 6608 */
- { 0, 0, NULL, NULL }, /* 6609 */
- { 0, 0, NULL, NULL }, /* 6610 */
- { 0, 0, NULL, NULL }, /* 6611 */
- { 0, 0, NULL, NULL }, /* 6612 */
- { 0, 0, NULL, NULL }, /* 6613 */
- { 0, 0, NULL, NULL }, /* 6614 */
- { 0, 0, NULL, NULL }, /* 6615 */
- { 0, 0, NULL, NULL }, /* 6616 */
- { 0, 0, NULL, NULL }, /* 6617 */
- { 0, 0, NULL, NULL }, /* 6618 */
- { 0, 0, NULL, NULL }, /* 6619 */
- { 0, 0, NULL, NULL }, /* 6620 */
- { 0, 0, NULL, NULL }, /* 6621 */
- { 0, 0, NULL, NULL }, /* 6622 */
- { 0, 0, NULL, NULL }, /* 6623 */
- { 0, 0, NULL, NULL }, /* 6624 */
- { 0, 0, NULL, NULL }, /* 6625 */
- { 0, 0, NULL, NULL }, /* 6626 */
- { 0, 0, NULL, NULL }, /* 6627 */
- { 0, 0, NULL, NULL }, /* 6628 */
- { 0, 0, NULL, NULL }, /* 6629 */
- { 0, 0, NULL, NULL }, /* 6630 */
- { 0, 0, NULL, NULL }, /* 6631 */
- { 0, 0, NULL, NULL }, /* 6632 */
- { 0, 0, NULL, NULL }, /* 6633 */
- { 0, 0, NULL, NULL }, /* 6634 */
- { 0, 0, NULL, NULL }, /* 6635 */
- { 0, 0, NULL, NULL }, /* 6636 */
- { 0, 0, NULL, NULL }, /* 6637 */
- { 0, 0, NULL, NULL }, /* 6638 */
- { 0, 0, NULL, NULL }, /* 6639 */
- { 0, 0, NULL, NULL }, /* 6640 */
- { 0, 0, NULL, NULL }, /* 6641 */
- { 0, 0, NULL, NULL }, /* 6642 */
- { 0, 0, NULL, NULL }, /* 6643 */
- { 0, 0, NULL, NULL }, /* 6644 */
- { 0, 0, NULL, NULL }, /* 6645 */
- { 0, 0, NULL, NULL }, /* 6646 */
- { 0, 0, NULL, NULL }, /* 6647 */
- { 0, 0, NULL, NULL }, /* 6648 */
- { 0, 0, NULL, NULL }, /* 6649 */
- { 0, 0, NULL, NULL }, /* 6650 */
- { 0, 0, NULL, NULL }, /* 6651 */
- { 0, 0, NULL, NULL }, /* 6652 */
- { 0, 0, NULL, NULL }, /* 6653 */
- { 0, 0, NULL, NULL }, /* 6654 */
- { 0, 0, NULL, NULL }, /* 6655 */
- { 0, 0, NULL, NULL }, /* 6656 */
- { 0, 0, NULL, NULL }, /* 6657 */
- { 0, 0, NULL, NULL }, /* 6658 */
- { 0, 0, NULL, NULL }, /* 6659 */
- { 0, 0, NULL, NULL }, /* 6660 */
- { 0, 0, NULL, NULL }, /* 6661 */
- { 0, 0, NULL, NULL }, /* 6662 */
- { 0, 0, NULL, NULL }, /* 6663 */
- { 0, 0, NULL, NULL }, /* 6664 */
- { 0, 0, NULL, NULL }, /* 6665 */
- { 0, 0, NULL, NULL }, /* 6666 */
- { 0, 0, NULL, NULL }, /* 6667 */
- { 0, 0, NULL, NULL }, /* 6668 */
- { 0, 0, NULL, NULL }, /* 6669 */
- { 0, 0, NULL, NULL }, /* 6670 */
- { 0, 0, NULL, NULL }, /* 6671 */
- { 0, 0, NULL, NULL }, /* 6672 */
- { 0, 0, NULL, NULL }, /* 6673 */
- { 0, 0, NULL, NULL }, /* 6674 */
- { 0, 0, NULL, NULL }, /* 6675 */
- { 0, 0, NULL, NULL }, /* 6676 */
- { 0, 0, NULL, NULL }, /* 6677 */
- { 0, 0, NULL, NULL }, /* 6678 */
- { 0, 0, NULL, NULL }, /* 6679 */
- { 0, 0, NULL, NULL }, /* 6680 */
- { 0, 0, NULL, NULL }, /* 6681 */
- { 0, 0, NULL, NULL }, /* 6682 */
- { 0, 0, NULL, NULL }, /* 6683 */
- { 0, 0, NULL, NULL }, /* 6684 */
- { 0, 0, NULL, NULL }, /* 6685 */
- { 0, 0, NULL, NULL }, /* 6686 */
- { 0, 0, NULL, NULL }, /* 6687 */
- { 0, 0, NULL, NULL }, /* 6688 */
- { 0, 0, NULL, NULL }, /* 6689 */
- { 0, 0, NULL, NULL }, /* 6690 */
- { 0, 0, NULL, NULL }, /* 6691 */
- { 0, 0, NULL, NULL }, /* 6692 */
- { 0, 0, NULL, NULL }, /* 6693 */
- { 0, 0, NULL, NULL }, /* 6694 */
- { 0, 0, NULL, NULL }, /* 6695 */
- { 0, 0, NULL, NULL }, /* 6696 */
- { 0, 0, NULL, NULL }, /* 6697 */
- { 0, 0, NULL, NULL }, /* 6698 */
- { 0, 0, NULL, NULL }, /* 6699 */
- { 0, 0, NULL, NULL }, /* 6700 */
- { 0, 0, NULL, NULL }, /* 6701 */
- { 0, 0, NULL, NULL }, /* 6702 */
- { 0, 0, NULL, NULL }, /* 6703 */
- { 0, 0, NULL, NULL }, /* 6704 */
- { 0, 0, NULL, NULL }, /* 6705 */
- { 0, 0, NULL, NULL }, /* 6706 */
- { 0, 0, NULL, NULL }, /* 6707 */
- { 0, 0, NULL, NULL }, /* 6708 */
- { 0, 0, NULL, NULL }, /* 6709 */
- { 0, 0, NULL, NULL }, /* 6710 */
- { 0, 0, NULL, NULL }, /* 6711 */
- { 0, 0, NULL, NULL }, /* 6712 */
- { 0, 0, NULL, NULL }, /* 6713 */
- { 0, 0, NULL, NULL }, /* 6714 */
- { 0, 0, NULL, NULL }, /* 6715 */
- { 0, 0, NULL, NULL }, /* 6716 */
- { 0, 0, NULL, NULL }, /* 6717 */
- { 0, 0, NULL, NULL }, /* 6718 */
- { 0, 0, NULL, NULL }, /* 6719 */
- { 0, 0, NULL, NULL }, /* 6720 */
- { 0, 0, NULL, NULL }, /* 6721 */
- { 0, 0, NULL, NULL }, /* 6722 */
- { 0, 0, NULL, NULL }, /* 6723 */
- { 0, 0, NULL, NULL }, /* 6724 */
- { 0, 0, NULL, NULL }, /* 6725 */
- { 0, 0, NULL, NULL }, /* 6726 */
- { 0, 0, NULL, NULL }, /* 6727 */
- { 0, 0, NULL, NULL }, /* 6728 */
- { 0, 0, NULL, NULL }, /* 6729 */
- { 0, 0, NULL, NULL }, /* 6730 */
- { 0, 0, NULL, NULL }, /* 6731 */
- { 0, 0, NULL, NULL }, /* 6732 */
- { 0, 0, NULL, NULL }, /* 6733 */
- { 0, 0, NULL, NULL }, /* 6734 */
- { 0, 0, NULL, NULL }, /* 6735 */
- { 0, 0, NULL, NULL }, /* 6736 */
- { 0, 0, NULL, NULL }, /* 6737 */
- { 0, 0, NULL, NULL }, /* 6738 */
- { 0, 0, NULL, NULL }, /* 6739 */
- { 0, 0, NULL, NULL }, /* 6740 */
- { 0, 0, NULL, NULL }, /* 6741 */
- { 0, 0, NULL, NULL }, /* 6742 */
- { 0, 0, NULL, NULL }, /* 6743 */
- { 0, 0, NULL, NULL }, /* 6744 */
- { 0, 0, NULL, NULL }, /* 6745 */
- { 0, 0, NULL, NULL }, /* 6746 */
- { 0, 0, NULL, NULL }, /* 6747 */
- { 0, 0, NULL, NULL }, /* 6748 */
- { 0, 0, NULL, NULL }, /* 6749 */
- { 0, 0, NULL, NULL }, /* 6750 */
- { 0, 0, NULL, NULL }, /* 6751 */
- { 0, 0, NULL, NULL }, /* 6752 */
- { 0, 0, NULL, NULL }, /* 6753 */
- { 0, 0, NULL, NULL }, /* 6754 */
- { 0, 0, NULL, NULL }, /* 6755 */
- { 0, 0, NULL, NULL }, /* 6756 */
- { 0, 0, NULL, NULL }, /* 6757 */
- { 0, 0, NULL, NULL }, /* 6758 */
- { 0, 0, NULL, NULL }, /* 6759 */
- { 0, 0, NULL, NULL }, /* 6760 */
- { 0, 0, NULL, NULL }, /* 6761 */
- { 0, 0, NULL, NULL }, /* 6762 */
- { 0, 0, NULL, NULL }, /* 6763 */
- { 0, 0, NULL, NULL }, /* 6764 */
- { 0, 0, NULL, NULL }, /* 6765 */
- { 0, 0, NULL, NULL }, /* 6766 */
- { 0, 0, NULL, NULL }, /* 6767 */
- { 0, 0, NULL, NULL }, /* 6768 */
- { 0, 0, NULL, NULL }, /* 6769 */
- { 0, 0, NULL, NULL }, /* 6770 */
- { 0, 0, NULL, NULL }, /* 6771 */
- { 0, 0, NULL, NULL }, /* 6772 */
- { 0, 0, NULL, NULL }, /* 6773 */
- { 0, 0, NULL, NULL }, /* 6774 */
- { 0, 0, NULL, NULL }, /* 6775 */
- { 0, 0, NULL, NULL }, /* 6776 */
- { 0, 0, NULL, NULL }, /* 6777 */
- { 0, 0, NULL, NULL }, /* 6778 */
- { 0, 0, NULL, NULL }, /* 6779 */
- { 0, 0, NULL, NULL }, /* 6780 */
- { 0, 0, NULL, NULL }, /* 6781 */
- { 0, 0, NULL, NULL }, /* 6782 */
- { 0, 0, NULL, NULL }, /* 6783 */
- { 0, 0, NULL, NULL }, /* 6784 */
- { 0, 0, NULL, NULL }, /* 6785 */
- { 0, 0, NULL, NULL }, /* 6786 */
- { 0, 0, NULL, NULL }, /* 6787 */
- { 0, 0, NULL, NULL }, /* 6788 */
- { 0, 0, NULL, NULL }, /* 6789 */
- { 0, 0, NULL, NULL }, /* 6790 */
- { 0, 0, NULL, NULL }, /* 6791 */
- { 0, 0, NULL, NULL }, /* 6792 */
- { 0, 0, NULL, NULL }, /* 6793 */
- { 0, 0, NULL, NULL }, /* 6794 */
- { 0, 0, NULL, NULL }, /* 6795 */
- { 0, 0, NULL, NULL }, /* 6796 */
- { 0, 0, NULL, NULL }, /* 6797 */
- { 0, 0, NULL, NULL }, /* 6798 */
- { 0, 0, NULL, NULL }, /* 6799 */
- { 0, 0, NULL, NULL }, /* 6800 */
- { 0, 0, NULL, NULL }, /* 6801 */
- { 0, 0, NULL, NULL }, /* 6802 */
- { 0, 0, NULL, NULL }, /* 6803 */
- { 0, 0, NULL, NULL }, /* 6804 */
- { 0, 0, NULL, NULL }, /* 6805 */
- { 0, 0, NULL, NULL }, /* 6806 */
- { 0, 0, NULL, NULL }, /* 6807 */
- { 0, 0, NULL, NULL }, /* 6808 */
- { 0, 0, NULL, NULL }, /* 6809 */
- { 0, 0, NULL, NULL }, /* 6810 */
- { 0, 0, NULL, NULL }, /* 6811 */
- { 0, 0, NULL, NULL }, /* 6812 */
- { 0, 0, NULL, NULL }, /* 6813 */
- { 0, 0, NULL, NULL }, /* 6814 */
- { 0, 0, NULL, NULL }, /* 6815 */
- { 0, 0, NULL, NULL }, /* 6816 */
- { 0, 0, NULL, NULL }, /* 6817 */
- { 0, 0, NULL, NULL }, /* 6818 */
- { 0, 0, NULL, NULL }, /* 6819 */
- { 0, 0, NULL, NULL }, /* 6820 */
- { 0, 0, NULL, NULL }, /* 6821 */
- { 0, 0, NULL, NULL }, /* 6822 */
- { 0, 0, NULL, NULL }, /* 6823 */
- { 0, 0, NULL, NULL }, /* 6824 */
- { 0, 0, NULL, NULL }, /* 6825 */
- { 0, 0, NULL, NULL }, /* 6826 */
- { 0, 0, NULL, NULL }, /* 6827 */
- { 0, 0, NULL, NULL }, /* 6828 */
- { 0, 0, NULL, NULL }, /* 6829 */
- { 0, 0, NULL, NULL }, /* 6830 */
- { 0, 0, NULL, NULL }, /* 6831 */
- { 0, 0, NULL, NULL }, /* 6832 */
- { 0, 0, NULL, NULL }, /* 6833 */
- { 0, 0, NULL, NULL }, /* 6834 */
- { 0, 0, NULL, NULL }, /* 6835 */
- { 0, 0, NULL, NULL }, /* 6836 */
- { 0, 0, NULL, NULL }, /* 6837 */
- { 0, 0, NULL, NULL }, /* 6838 */
- { 0, 0, NULL, NULL }, /* 6839 */
- { 0, 0, NULL, NULL }, /* 6840 */
- { 0, 0, NULL, NULL }, /* 6841 */
- { 0, 0, NULL, NULL }, /* 6842 */
- { 0, 0, NULL, NULL }, /* 6843 */
- { 0, 0, NULL, NULL }, /* 6844 */
- { 0, 0, NULL, NULL }, /* 6845 */
- { 0, 0, NULL, NULL }, /* 6846 */
- { 0, 0, NULL, NULL }, /* 6847 */
- { 0, 0, NULL, NULL }, /* 6848 */
- { 0, 0, NULL, NULL }, /* 6849 */
- { 0, 0, NULL, NULL }, /* 6850 */
- { 0, 0, NULL, NULL }, /* 6851 */
- { 0, 0, NULL, NULL }, /* 6852 */
- { 0, 0, NULL, NULL }, /* 6853 */
- { 0, 0, NULL, NULL }, /* 6854 */
- { 0, 0, NULL, NULL }, /* 6855 */
- { 0, 0, NULL, NULL }, /* 6856 */
- { 0, 0, NULL, NULL }, /* 6857 */
- { 0, 0, NULL, NULL }, /* 6858 */
- { 0, 0, NULL, NULL }, /* 6859 */
- { 0, 0, NULL, NULL }, /* 6860 */
- { 0, 0, NULL, NULL }, /* 6861 */
- { 0, 0, NULL, NULL }, /* 6862 */
- { 0, 0, NULL, NULL }, /* 6863 */
- { 0, 0, NULL, NULL }, /* 6864 */
- { 0, 0, NULL, NULL }, /* 6865 */
- { 0, 0, NULL, NULL }, /* 6866 */
- { 0, 0, NULL, NULL }, /* 6867 */
- { 0, 0, NULL, NULL }, /* 6868 */
- { 0, 0, NULL, NULL }, /* 6869 */
- { 0, 0, NULL, NULL }, /* 6870 */
- { 0, 0, NULL, NULL }, /* 6871 */
- { 0, 0, NULL, NULL }, /* 6872 */
- { 0, 0, NULL, NULL }, /* 6873 */
- { 0, 0, NULL, NULL }, /* 6874 */
- { 0, 0, NULL, NULL }, /* 6875 */
- { 0, 0, NULL, NULL }, /* 6876 */
- { 0, 0, NULL, NULL }, /* 6877 */
- { 0, 0, NULL, NULL }, /* 6878 */
- { 0, 0, NULL, NULL }, /* 6879 */
- { 0, 0, NULL, NULL }, /* 6880 */
- { 0, 0, NULL, NULL }, /* 6881 */
- { 0, 0, NULL, NULL }, /* 6882 */
- { 0, 0, NULL, NULL }, /* 6883 */
- { 0, 0, NULL, NULL }, /* 6884 */
- { 0, 0, NULL, NULL }, /* 6885 */
- { 0, 0, NULL, NULL }, /* 6886 */
- { 0, 0, NULL, NULL }, /* 6887 */
- { 0, 0, NULL, NULL }, /* 6888 */
- { 0, 0, NULL, NULL }, /* 6889 */
- { 0, 0, NULL, NULL }, /* 6890 */
- { 0, 0, NULL, NULL }, /* 6891 */
- { 0, 0, NULL, NULL }, /* 6892 */
- { 0, 0, NULL, NULL }, /* 6893 */
- { 0, 0, NULL, NULL }, /* 6894 */
- { 0, 0, NULL, NULL }, /* 6895 */
- { 0, 0, NULL, NULL }, /* 6896 */
- { 0, 0, NULL, NULL }, /* 6897 */
- { 0, 0, NULL, NULL }, /* 6898 */
- { 0, 0, NULL, NULL }, /* 6899 */
- { 0, 0, NULL, NULL }, /* 6900 */
- { 0, 0, NULL, NULL }, /* 6901 */
- { 0, 0, NULL, NULL }, /* 6902 */
- { 0, 0, NULL, NULL }, /* 6903 */
- { 0, 0, NULL, NULL }, /* 6904 */
- { 0, 0, NULL, NULL }, /* 6905 */
- { 0, 0, NULL, NULL }, /* 6906 */
- { 0, 0, NULL, NULL }, /* 6907 */
- { 0, 0, NULL, NULL }, /* 6908 */
- { 0, 0, NULL, NULL }, /* 6909 */
- { 0, 0, NULL, NULL }, /* 6910 */
- { 0, 0, NULL, NULL }, /* 6911 */
- { 0, 0, NULL, NULL }, /* 6912 */
- { 0, 0, NULL, NULL }, /* 6913 */
- { 0, 0, NULL, NULL }, /* 6914 */
- { 0, 0, NULL, NULL }, /* 6915 */
- { 0, 0, NULL, NULL }, /* 6916 */
- { 0, 0, NULL, NULL }, /* 6917 */
- { 0, 0, NULL, NULL }, /* 6918 */
- { 0, 0, NULL, NULL }, /* 6919 */
- { 0, 0, NULL, NULL }, /* 6920 */
- { 0, 0, NULL, NULL }, /* 6921 */
- { 0, 0, NULL, NULL }, /* 6922 */
- { 0, 0, NULL, NULL }, /* 6923 */
- { 0, 0, NULL, NULL }, /* 6924 */
- { 0, 0, NULL, NULL }, /* 6925 */
- { 0, 0, NULL, NULL }, /* 6926 */
- { 0, 0, NULL, NULL }, /* 6927 */
- { 0, 0, NULL, NULL }, /* 6928 */
- { 0, 0, NULL, NULL }, /* 6929 */
- { 0, 0, NULL, NULL }, /* 6930 */
- { 0, 0, NULL, NULL }, /* 6931 */
- { 0, 0, NULL, NULL }, /* 6932 */
- { 0, 0, NULL, NULL }, /* 6933 */
- { 0, 0, NULL, NULL }, /* 6934 */
- { 0, 0, NULL, NULL }, /* 6935 */
- { 0, 0, NULL, NULL }, /* 6936 */
- { 0, 0, NULL, NULL }, /* 6937 */
- { 0, 0, NULL, NULL }, /* 6938 */
- { 0, 0, NULL, NULL }, /* 6939 */
- { 0, 0, NULL, NULL }, /* 6940 */
- { 0, 0, NULL, NULL }, /* 6941 */
- { 0, 0, NULL, NULL }, /* 6942 */
- { 0, 0, NULL, NULL }, /* 6943 */
- { 0, 0, NULL, NULL }, /* 6944 */
- { 0, 0, NULL, NULL }, /* 6945 */
- { 0, 0, NULL, NULL }, /* 6946 */
- { 0, 0, NULL, NULL }, /* 6947 */
- { 0, 0, NULL, NULL }, /* 6948 */
- { 0, 0, NULL, NULL }, /* 6949 */
- { 0, 0, NULL, NULL }, /* 6950 */
- { 0, 0, NULL, NULL }, /* 6951 */
- { 0, 0, NULL, NULL }, /* 6952 */
- { 0, 0, NULL, NULL }, /* 6953 */
- { 0, 0, NULL, NULL }, /* 6954 */
- { 0, 0, NULL, NULL }, /* 6955 */
- { 0, 0, NULL, NULL }, /* 6956 */
- { 0, 0, NULL, NULL }, /* 6957 */
- { 0, 0, NULL, NULL }, /* 6958 */
- { 0, 0, NULL, NULL }, /* 6959 */
- { 0, 0, NULL, NULL }, /* 6960 */
- { 0, 0, NULL, NULL }, /* 6961 */
- { 0, 0, NULL, NULL }, /* 6962 */
- { 0, 0, NULL, NULL }, /* 6963 */
- { 0, 0, NULL, NULL }, /* 6964 */
- { 0, 0, NULL, NULL }, /* 6965 */
- { 0, 0, NULL, NULL }, /* 6966 */
- { 0, 0, NULL, NULL }, /* 6967 */
- { 0, 0, NULL, NULL }, /* 6968 */
- { 0, 0, NULL, NULL }, /* 6969 */
- { 0, 0, NULL, NULL }, /* 6970 */
- { 0, 0, NULL, NULL }, /* 6971 */
- { 0, 0, NULL, NULL }, /* 6972 */
- { 0, 0, NULL, NULL }, /* 6973 */
- { 0, 0, NULL, NULL }, /* 6974 */
- { 0, 0, NULL, NULL }, /* 6975 */
- { 0, 0, NULL, NULL }, /* 6976 */
- { 0, 0, NULL, NULL }, /* 6977 */
- { 0, 0, NULL, NULL }, /* 6978 */
- { 0, 0, NULL, NULL }, /* 6979 */
- { 0, 0, NULL, NULL }, /* 6980 */
- { 0, 0, NULL, NULL }, /* 6981 */
- { 0, 0, NULL, NULL }, /* 6982 */
- { 0, 0, NULL, NULL }, /* 6983 */
- { 0, 0, NULL, NULL }, /* 6984 */
- { 0, 0, NULL, NULL }, /* 6985 */
- { 0, 0, NULL, NULL }, /* 6986 */
- { 0, 0, NULL, NULL }, /* 6987 */
- { 0, 0, NULL, NULL }, /* 6988 */
- { 0, 0, NULL, NULL }, /* 6989 */
- { 0, 0, NULL, NULL }, /* 6990 */
- { 0, 0, NULL, NULL }, /* 6991 */
- { 0, 0, NULL, NULL }, /* 6992 */
- { 0, 0, NULL, NULL }, /* 6993 */
- { 0, 0, NULL, NULL }, /* 6994 */
- { 0, 0, NULL, NULL }, /* 6995 */
- { 0, 0, NULL, NULL }, /* 6996 */
- { 0, 0, NULL, NULL }, /* 6997 */
- { 0, 0, NULL, NULL }, /* 6998 */
- { 0, 0, NULL, NULL }, /* 6999 */ /* end of Linux N32 */
+#include "syscallent-compat.h"
+#include "syscallent-o32.h"
+#include "syscallent-n64.h"
+#include "syscallent-n32.h"
diff --git a/linux/mtd-abi.h b/linux/mtd-abi.h
index 576e8c9..b197861 100644
--- a/linux/mtd-abi.h
+++ b/linux/mtd-abi.h
@@ -115,7 +115,7 @@
#define MTD_NANDECC_PLACE 1 // Use the given placement in the structure (YAFFS1 legacy mode)
#define MTD_NANDECC_AUTOPLACE 2 // Use the default placement scheme
#define MTD_NANDECC_PLACEONLY 3 // Use the given placement in the structure (Do not store ecc result on read)
-#define MTD_NANDECC_AUTOPL_USR 4 // Use the given autoplacement scheme rather than using the default
+#define MTD_NANDECC_AUTOPL_USR 4 // Use the given autoplacement scheme rather than using the default
/* OTP mode selection */
#define MTD_OTP_OFF 0
diff --git a/linux/subcall.h b/linux/subcall.h
new file mode 100644
index 0000000..54f7fca
--- /dev/null
+++ b/linux/subcall.h
@@ -0,0 +1,6 @@
+#ifndef SYS_socket_subcall
+# error SYS_socket_subcall is not defined
+#endif
+#define SYS_socket_nsubcalls 20
+#define SYS_ipc_subcall ((SYS_socket_subcall)+(SYS_socket_nsubcalls))
+#define SYS_ipc_nsubcalls 25
diff --git a/linux/syscall.h b/linux/syscall.h
index 7e0155e..f6afcac 100644
--- a/linux/syscall.h
+++ b/linux/syscall.h
@@ -98,7 +98,7 @@
int sys_gethostname();
int sys_getitimer();
int sys_getpeername();
-int sys_getpmsg();
+int sys_getpmsg(); /* TODO: non-Linux, remove? */
int sys_getpriority();
int sys_getresuid();
int sys_getrlimit();
@@ -126,8 +126,6 @@
int sys_listxattr();
int sys_llseek();
int sys_lseek();
-int sys_lstat();
-int sys_lstat64();
int sys_madvise();
int sys_mbind();
int sys_migrate_pages();
@@ -138,6 +136,8 @@
int sys_mknodat();
int sys_mlockall();
int sys_mmap();
+int sys_mmap_pgoff();
+int sys_mmap_4koff();
int sys_modify_ldt();
int sys_mount();
int sys_move_pages();
@@ -157,12 +157,13 @@
int sys_nanosleep();
int sys_newfstatat();
int sys_old_mmap();
+int sys_old_mmap_pgoff();
int sys_oldfstat();
-int sys_oldlstat();
int sys_oldselect();
int sys_oldstat();
int sys_open();
int sys_openat();
+int sys_perf_event_open();
int sys_personality();
int sys_pipe();
int sys_pipe2();
@@ -177,7 +178,7 @@
int sys_process_vm_writev();
int sys_pselect6();
int sys_ptrace();
-int sys_putpmsg();
+int sys_putpmsg(); /* TODO: non-Linux, remove? */
int sys_pwrite();
int sys_pwritev();
int sys_query_module();
@@ -312,33 +313,10 @@
int sys_osf_wait4();
#endif
-#if !defined(ALPHA) && !defined(MIPS) && !defined(HPPA) && \
- !defined(__ARM_EABI__)
-# if defined(SPARC) || defined(SPARC64)
-# define SYS_socket_subcall 353
-# else
-# define SYS_socket_subcall 400
-# endif
-
-#define SYS_socket_nsubcalls 20
-#endif /* !(ALPHA || MIPS || HPPA) */
-
-#if !defined(ALPHA) && !defined(MIPS) && !defined(HPPA) && \
- !defined(__ARM_EABI__)
-#define SYS_ipc_subcall ((SYS_socket_subcall)+(SYS_socket_nsubcalls))
-#define SYS_ipc_nsubcalls 25
-#endif /* !(ALPHA || MIPS || HPPA) */
-
#if defined(ALPHA) || defined(IA64) || defined(SPARC) || defined(SPARC64)
int sys_getpagesize();
#endif
-#ifdef IA64
-/* STREAMS stuff */
-int sys_getpmsg();
-int sys_putpmsg();
-#endif
-
#ifdef MIPS
int sys_sysmips();
#endif
@@ -347,6 +325,10 @@
int sys_cacheflush();
#endif
+#if defined OR1K
+int sys_or1k_atomic();
+#endif
+
#ifdef POWERPC
int sys_subpage_prot();
#endif
@@ -360,18 +342,5 @@
#include "sparc/syscall1.h"
int sys_execv();
int sys_getmsg();
-int sys_msgsys();
int sys_putmsg();
-int sys_semsys();
-int sys_shmsys();
-#define SYS_semsys_subcall 200
-#define SYS_semsys_nsubcalls 3
-#define SYS_msgsys_subcall 203
-#define SYS_msgsys_nsubcalls 4
-#define SYS_shmsys_subcall 207
-#define SYS_shmsys_nsubcalls 4
-#endif
-
-#ifdef X32
-int sys_lseek32();
#endif
diff --git a/linux/ubi-user.h b/linux/ubi-user.h
new file mode 100644
index 0000000..a12c884
--- /dev/null
+++ b/linux/ubi-user.h
@@ -0,0 +1,420 @@
+/*
+ * Copyright © International Business Machines Corp., 2006
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Artem Bityutskiy (Битюцкий Артём)
+ */
+
+#ifndef __UBI_USER_H__
+#define __UBI_USER_H__
+
+#include <linux/types.h>
+
+/*
+ * UBI device creation (the same as MTD device attachment)
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * MTD devices may be attached using %UBI_IOCATT ioctl command of the UBI
+ * control device. The caller has to properly fill and pass
+ * &struct ubi_attach_req object - UBI will attach the MTD device specified in
+ * the request and return the newly created UBI device number as the ioctl
+ * return value.
+ *
+ * UBI device deletion (the same as MTD device detachment)
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * An UBI device maybe deleted with %UBI_IOCDET ioctl command of the UBI
+ * control device.
+ *
+ * UBI volume creation
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * UBI volumes are created via the %UBI_IOCMKVOL ioctl command of UBI character
+ * device. A &struct ubi_mkvol_req object has to be properly filled and a
+ * pointer to it has to be passed to the ioctl.
+ *
+ * UBI volume deletion
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * To delete a volume, the %UBI_IOCRMVOL ioctl command of the UBI character
+ * device should be used. A pointer to the 32-bit volume ID hast to be passed
+ * to the ioctl.
+ *
+ * UBI volume re-size
+ * ~~~~~~~~~~~~~~~~~~
+ *
+ * To re-size a volume, the %UBI_IOCRSVOL ioctl command of the UBI character
+ * device should be used. A &struct ubi_rsvol_req object has to be properly
+ * filled and a pointer to it has to be passed to the ioctl.
+ *
+ * UBI volumes re-name
+ * ~~~~~~~~~~~~~~~~~~~
+ *
+ * To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command
+ * of the UBI character device should be used. A &struct ubi_rnvol_req object
+ * has to be properly filled and a pointer to it has to be passed to the ioctl.
+ *
+ * UBI volume update
+ * ~~~~~~~~~~~~~~~~~
+ *
+ * Volume update should be done via the %UBI_IOCVOLUP ioctl command of the
+ * corresponding UBI volume character device. A pointer to a 64-bit update
+ * size should be passed to the ioctl. After this, UBI expects user to write
+ * this number of bytes to the volume character device. The update is finished
+ * when the claimed number of bytes is passed. So, the volume update sequence
+ * is something like:
+ *
+ * fd = open("/dev/my_volume");
+ * ioctl(fd, UBI_IOCVOLUP, &image_size);
+ * write(fd, buf, image_size);
+ * close(fd);
+ *
+ * Logical eraseblock erase
+ * ~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To erase a logical eraseblock, the %UBI_IOCEBER ioctl command of the
+ * corresponding UBI volume character device should be used. This command
+ * unmaps the requested logical eraseblock, makes sure the corresponding
+ * physical eraseblock is successfully erased, and returns.
+ *
+ * Atomic logical eraseblock change
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * Atomic logical eraseblock change operation is called using the %UBI_IOCEBCH
+ * ioctl command of the corresponding UBI volume character device. A pointer to
+ * a &struct ubi_leb_change_req object has to be passed to the ioctl. Then the
+ * user is expected to write the requested amount of bytes (similarly to what
+ * should be done in case of the "volume update" ioctl).
+ *
+ * Logical eraseblock map
+ * ~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To map a logical eraseblock to a physical eraseblock, the %UBI_IOCEBMAP
+ * ioctl command should be used. A pointer to a &struct ubi_map_req object is
+ * expected to be passed. The ioctl maps the requested logical eraseblock to
+ * a physical eraseblock and returns. Only non-mapped logical eraseblocks can
+ * be mapped. If the logical eraseblock specified in the request is already
+ * mapped to a physical eraseblock, the ioctl fails and returns error.
+ *
+ * Logical eraseblock unmap
+ * ~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To unmap a logical eraseblock to a physical eraseblock, the %UBI_IOCEBUNMAP
+ * ioctl command should be used. The ioctl unmaps the logical eraseblocks,
+ * schedules corresponding physical eraseblock for erasure, and returns. Unlike
+ * the "LEB erase" command, it does not wait for the physical eraseblock being
+ * erased. Note, the side effect of this is that if an unclean reboot happens
+ * after the unmap ioctl returns, you may find the LEB mapped again to the same
+ * physical eraseblock after the UBI is run again.
+ *
+ * Check if logical eraseblock is mapped
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To check if a logical eraseblock is mapped to a physical eraseblock, the
+ * %UBI_IOCEBISMAP ioctl command should be used. It returns %0 if the LEB is
+ * not mapped, and %1 if it is mapped.
+ *
+ * Set an UBI volume property
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * To set an UBI volume property the %UBI_IOCSETPROP ioctl command should be
+ * used. A pointer to a &struct ubi_set_vol_prop_req object is expected to be
+ * passed. The object describes which property should be set, and to which value
+ * it should be set.
+ */
+
+/*
+ * When a new UBI volume or UBI device is created, users may either specify the
+ * volume/device number they want to create or to let UBI automatically assign
+ * the number using these constants.
+ */
+#define UBI_VOL_NUM_AUTO (-1)
+#define UBI_DEV_NUM_AUTO (-1)
+
+/* Maximum volume name length */
+#define UBI_MAX_VOLUME_NAME 127
+
+/* ioctl commands of UBI character devices */
+
+#define UBI_IOC_MAGIC 'o'
+
+/* Create an UBI volume */
+#define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req)
+/* Remove an UBI volume */
+#define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, __s32)
+/* Re-size an UBI volume */
+#define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req)
+/* Re-name volumes */
+#define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req)
+
+/* ioctl commands of the UBI control character device */
+
+#define UBI_CTRL_IOC_MAGIC 'o'
+
+/* Attach an MTD device */
+#define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req)
+/* Detach an MTD device */
+#define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, __s32)
+
+/* ioctl commands of UBI volume character devices */
+
+#define UBI_VOL_IOC_MAGIC 'O'
+
+/* Start UBI volume update */
+#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, __s64)
+/* LEB erasure command, used for debugging, disabled by default */
+#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, __s32)
+/* Atomic LEB change command */
+#define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, __s32)
+/* Map LEB command */
+#define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req)
+/* Unmap LEB command */
+#define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, __s32)
+/* Check if LEB is mapped command */
+#define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, __s32)
+/* Set an UBI volume property */
+#define UBI_IOCSETVOLPROP _IOW(UBI_VOL_IOC_MAGIC, 6, \
+ struct ubi_set_vol_prop_req)
+
+/* Maximum MTD device name length supported by UBI */
+#define MAX_UBI_MTD_NAME_LEN 127
+
+/* Maximum amount of UBI volumes that can be re-named at one go */
+#define UBI_MAX_RNVOL 32
+
+/*
+ * UBI volume type constants.
+ *
+ * @UBI_DYNAMIC_VOLUME: dynamic volume
+ * @UBI_STATIC_VOLUME: static volume
+ */
+enum {
+ UBI_DYNAMIC_VOLUME = 3,
+ UBI_STATIC_VOLUME = 4,
+};
+
+/*
+ * UBI set volume property ioctl constants.
+ *
+ * @UBI_VOL_PROP_DIRECT_WRITE: allow (any non-zero value) or disallow (value 0)
+ * user to directly write and erase individual
+ * eraseblocks on dynamic volumes
+ */
+enum {
+ UBI_VOL_PROP_DIRECT_WRITE = 1,
+};
+
+/**
+ * struct ubi_attach_req - attach MTD device request.
+ * @ubi_num: UBI device number to create
+ * @mtd_num: MTD device number to attach
+ * @vid_hdr_offset: VID header offset (use defaults if %0)
+ * @max_beb_per1024: maximum expected number of bad PEB per 1024 PEBs
+ * @padding: reserved for future, not used, has to be zeroed
+ *
+ * This data structure is used to specify MTD device UBI has to attach and the
+ * parameters it has to use. The number which should be assigned to the new UBI
+ * device is passed in @ubi_num. UBI may automatically assign the number if
+ * @UBI_DEV_NUM_AUTO is passed. In this case, the device number is returned in
+ * @ubi_num.
+ *
+ * Most applications should pass %0 in @vid_hdr_offset to make UBI use default
+ * offset of the VID header within physical eraseblocks. The default offset is
+ * the next min. I/O unit after the EC header. For example, it will be offset
+ * 512 in case of a 512 bytes page NAND flash with no sub-page support. Or
+ * it will be 512 in case of a 2KiB page NAND flash with 4 512-byte sub-pages.
+ *
+ * But in rare cases, if this optimizes things, the VID header may be placed to
+ * a different offset. For example, the boot-loader might do things faster if
+ * the VID header sits at the end of the first 2KiB NAND page with 4 sub-pages.
+ * As the boot-loader would not normally need to read EC headers (unless it
+ * needs UBI in RW mode), it might be faster to calculate ECC. This is weird
+ * example, but it real-life example. So, in this example, @vid_hdr_offer would
+ * be 2KiB-64 bytes = 1984. Note, that this position is not even 512-bytes
+ * aligned, which is OK, as UBI is clever enough to realize this is 4th
+ * sub-page of the first page and add needed padding.
+ *
+ * The @max_beb_per1024 is the maximum amount of bad PEBs UBI expects on the
+ * UBI device per 1024 eraseblocks. This value is often given in an other form
+ * in the NAND datasheet (min NVB i.e. minimal number of valid blocks). The
+ * maximum expected bad eraseblocks per 1024 is then:
+ * 1024 * (1 - MinNVB / MaxNVB)
+ * Which gives 20 for most NAND devices. This limit is used in order to derive
+ * amount of eraseblock UBI reserves for handling new bad blocks. If the device
+ * has more bad eraseblocks than this limit, UBI does not reserve any physical
+ * eraseblocks for new bad eraseblocks, but attempts to use available
+ * eraseblocks (if any). The accepted range is 0-768. If 0 is given, the
+ * default kernel value of %CONFIG_MTD_UBI_BEB_LIMIT will be used.
+ */
+struct ubi_attach_req {
+ __s32 ubi_num;
+ __s32 mtd_num;
+ __s32 vid_hdr_offset;
+ __s16 max_beb_per1024;
+ __s8 padding[10];
+};
+
+/**
+ * struct ubi_mkvol_req - volume description data structure used in
+ * volume creation requests.
+ * @vol_id: volume number
+ * @alignment: volume alignment
+ * @bytes: volume size in bytes
+ * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME)
+ * @padding1: reserved for future, not used, has to be zeroed
+ * @name_len: volume name length
+ * @padding2: reserved for future, not used, has to be zeroed
+ * @name: volume name
+ *
+ * This structure is used by user-space programs when creating new volumes. The
+ * @used_bytes field is only necessary when creating static volumes.
+ *
+ * The @alignment field specifies the required alignment of the volume logical
+ * eraseblock. This means, that the size of logical eraseblocks will be aligned
+ * to this number, i.e.,
+ * (UBI device logical eraseblock size) mod (@alignment) = 0.
+ *
+ * To put it differently, the logical eraseblock of this volume may be slightly
+ * shortened in order to make it properly aligned. The alignment has to be
+ * multiple of the flash minimal input/output unit, or %1 to utilize the entire
+ * available space of logical eraseblocks.
+ *
+ * The @alignment field may be useful, for example, when one wants to maintain
+ * a block device on top of an UBI volume. In this case, it is desirable to fit
+ * an integer number of blocks in logical eraseblocks of this UBI volume. With
+ * alignment it is possible to update this volume using plane UBI volume image
+ * BLOBs, without caring about how to properly align them.
+ */
+struct ubi_mkvol_req {
+ __s32 vol_id;
+ __s32 alignment;
+ __s64 bytes;
+ __s8 vol_type;
+ __s8 padding1;
+ __s16 name_len;
+ __s8 padding2[4];
+ char name[UBI_MAX_VOLUME_NAME + 1];
+} __attribute__((packed));
+
+/**
+ * struct ubi_rsvol_req - a data structure used in volume re-size requests.
+ * @vol_id: ID of the volume to re-size
+ * @bytes: new size of the volume in bytes
+ *
+ * Re-sizing is possible for both dynamic and static volumes. But while dynamic
+ * volumes may be re-sized arbitrarily, static volumes cannot be made to be
+ * smaller than the number of bytes they bear. To arbitrarily shrink a static
+ * volume, it must be wiped out first (by means of volume update operation with
+ * zero number of bytes).
+ */
+struct ubi_rsvol_req {
+ __s64 bytes;
+ __s32 vol_id;
+} __attribute__((packed));
+
+/**
+ * struct ubi_rnvol_req - volumes re-name request.
+ * @count: count of volumes to re-name
+ * @padding1: reserved for future, not used, has to be zeroed
+ * @vol_id: ID of the volume to re-name
+ * @name_len: name length
+ * @padding2: reserved for future, not used, has to be zeroed
+ * @name: new volume name
+ *
+ * UBI allows to re-name up to %32 volumes at one go. The count of volumes to
+ * re-name is specified in the @count field. The ID of the volumes to re-name
+ * and the new names are specified in the @vol_id and @name fields.
+ *
+ * The UBI volume re-name operation is atomic, which means that should power cut
+ * happen, the volumes will have either old name or new name. So the possible
+ * use-cases of this command is atomic upgrade. Indeed, to upgrade, say, volumes
+ * A and B one may create temporary volumes %A1 and %B1 with the new contents,
+ * then atomically re-name A1->A and B1->B, in which case old %A and %B will
+ * be removed.
+ *
+ * If it is not desirable to remove old A and B, the re-name request has to
+ * contain 4 entries: A1->A, A->A1, B1->B, B->B1, in which case old A1 and B1
+ * become A and B, and old A and B will become A1 and B1.
+ *
+ * It is also OK to request: A1->A, A1->X, B1->B, B->Y, in which case old A1
+ * and B1 become A and B, and old A and B become X and Y.
+ *
+ * In other words, in case of re-naming into an existing volume name, the
+ * existing volume is removed, unless it is re-named as well at the same
+ * re-name request.
+ */
+struct ubi_rnvol_req {
+ __s32 count;
+ __s8 padding1[12];
+ struct {
+ __s32 vol_id;
+ __s16 name_len;
+ __s8 padding2[2];
+ char name[UBI_MAX_VOLUME_NAME + 1];
+ } ents[UBI_MAX_RNVOL];
+} __attribute__((packed));
+
+/**
+ * struct ubi_leb_change_req - a data structure used in atomic LEB change
+ * requests.
+ * @lnum: logical eraseblock number to change
+ * @bytes: how many bytes will be written to the logical eraseblock
+ * @dtype: pass "3" for better compatibility with old kernels
+ * @padding: reserved for future, not used, has to be zeroed
+ *
+ * The @dtype field used to inform UBI about what kind of data will be written
+ * to the LEB: long term (value 1), short term (value 2), unknown (value 3).
+ * UBI tried to pick a PEB with lower erase counter for short term data and a
+ * PEB with higher erase counter for long term data. But this was not really
+ * used because users usually do not know this and could easily mislead UBI. We
+ * removed this feature in May 2012. UBI currently just ignores the @dtype
+ * field. But for better compatibility with older kernels it is recommended to
+ * set @dtype to 3 (unknown).
+ */
+struct ubi_leb_change_req {
+ __s32 lnum;
+ __s32 bytes;
+ __s8 dtype; /* obsolete, do not use! */
+ __s8 padding[7];
+} __attribute__((packed));
+
+/**
+ * struct ubi_map_req - a data structure used in map LEB requests.
+ * @dtype: pass "3" for better compatibility with old kernels
+ * @lnum: logical eraseblock number to unmap
+ * @padding: reserved for future, not used, has to be zeroed
+ */
+struct ubi_map_req {
+ __s32 lnum;
+ __s8 dtype; /* obsolete, do not use! */
+ __s8 padding[3];
+} __attribute__((packed));
+
+
+/**
+ * struct ubi_set_vol_prop_req - a data structure used to set an UBI volume
+ * property.
+ * @property: property to set (%UBI_VOL_PROP_DIRECT_WRITE)
+ * @padding: reserved for future, not used, has to be zeroed
+ * @value: value to set
+ */
+struct ubi_set_vol_prop_req {
+ __u8 property;
+ __u8 padding[7];
+ __u64 value;
+} __attribute__((packed));
+
+#endif /* __UBI_USER_H__ */
diff --git a/linux/x32/errnoent1.h b/linux/x32/errnoent1.h
index a894827..de1136c 100644
--- a/linux/x32/errnoent1.h
+++ b/linux/x32/errnoent1.h
@@ -1,2 +1,2 @@
-/* Our second set comes from the i386 files. */
+/* i386 personality */
#include "../errnoent.h"
diff --git a/linux/x32/ioctlent.h.in b/linux/x32/ioctlent.h.in
deleted file mode 100644
index 52ac99b..0000000
--- a/linux/x32/ioctlent.h.in
+++ /dev/null
@@ -1 +0,0 @@
-#include "../i386/ioctlent.h.in"
diff --git a/linux/x32/ioctlent1.h b/linux/x32/ioctlent1.h
index 1f92feb..4750671 100644
--- a/linux/x32/ioctlent1.h
+++ b/linux/x32/ioctlent1.h
@@ -1,2 +1,2 @@
-/* Our second set comes from the i386 files. */
-#include "linux/ioctlent.h"
+/* i386 personality */
+#include "ioctlent.h"
diff --git a/linux/x32/signalent1.h b/linux/x32/signalent1.h
index 5c18d98..c927d72 100644
--- a/linux/x32/signalent1.h
+++ b/linux/x32/signalent1.h
@@ -1,2 +1,2 @@
-/* Our second set comes from the i386 files. */
+/* i386 personality */
#include "../signalent.h"
diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h
index fcb6a23..65df127 100644
--- a/linux/x32/syscallent.h
+++ b/linux/x32/syscallent.h
@@ -7,26 +7,26 @@
{ 2, TF, sys_lstat, "lstat" }, /* 6 */
{ 3, TD, sys_poll, "poll" }, /* 7 */
{ 3, TD, sys_lseek, "lseek" }, /* 8 */
- { 6, TD, sys_mmap, "mmap" }, /* 9 */
- { 3, 0, sys_mprotect, "mprotect" }, /* 10 */
- { 2, 0, sys_munmap, "munmap" }, /* 11 */
- { 1, 0, sys_brk, "brk" }, /* 12 */
- { }, /* 13 */
+ { 6, TD|TM, sys_mmap, "mmap" }, /* 9 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 10 */
+ { 2, TM, sys_munmap, "munmap" }, /* 11 */
+ { 1, TM, sys_brk, "brk" }, /* 12 */
+ { 4, TS, printargs, "64:rt_sigaction" }, /* 13 */
{ 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 14 */
- { }, /* 15 */
- { }, /* 16 */
- { 5, TD, sys_pread, "pread" }, /* 17 */
- { 5, TD, sys_pwrite, "pwrite" }, /* 18 */
- { }, /* 19 */
- { }, /* 20 */
+ { 0, TS, printargs, "64:rt_sigreturn" }, /* 15 */
+ { 3, TD, printargs, "64:ioctl" }, /* 16 */
+ { 4, TD, sys_pread, "pread" }, /* 17 */
+ { 4, TD, sys_pwrite, "pwrite" }, /* 18 */
+ { 3, TD, printargs, "64:readv" }, /* 19 */
+ { 3, TD, printargs, "64:writev" }, /* 20 */
{ 2, TF, sys_access, "access" }, /* 21 */
{ 1, TD, sys_pipe, "pipe" }, /* 22 */
{ 5, TD, sys_select, "select" }, /* 23 */
{ 0, 0, sys_sched_yield, "sched_yield" }, /* 24 */
- { 5, 0, sys_mremap, "mremap" }, /* 25 */
- { 3, 0, sys_msync, "msync" }, /* 26 */
- { 3, 0, sys_mincore, "mincore" }, /* 27 */
- { 3, 0, sys_madvise, "madvise" }, /* 28 */
+ { 5, TM, sys_mremap, "mremap" }, /* 25 */
+ { 3, TM, sys_msync, "msync" }, /* 26 */
+ { 3, TM, sys_mincore, "mincore" }, /* 27 */
+ { 3, TM, sys_madvise, "madvise" }, /* 28 */
{ 4, TI, sys_shmget, "shmget" }, /* 29 */
{ 4, TI, sys_shmat, "shmat" }, /* 30 */
{ 4, TI, sys_shmctl, "shmctl" }, /* 31 */
@@ -38,26 +38,26 @@
{ 1, 0, sys_alarm, "alarm" }, /* 37 */
{ 3, 0, sys_setitimer, "setitimer" }, /* 38 */
{ 0, 0, sys_getpid, "getpid" }, /* 39 */
- { 4, TD|TN, sys_sendfile, "sendfile" }, /* 40 */
+ { 4, TD|TN, sys_sendfile64, "sendfile" }, /* 40 */
{ 3, TN, sys_socket, "socket" }, /* 41 */
{ 3, TN, sys_connect, "connect" }, /* 42 */
{ 3, TN, sys_accept, "accept" }, /* 43 */
{ 6, TN, sys_sendto, "sendto" }, /* 44 */
- { }, /* 45 */
- { }, /* 46 */
- { }, /* 47 */
+ { 6, TN, printargs, "64:recvfrom" }, /* 45 */
+ { 3, TN, printargs, "64:sendmsg" }, /* 46 */
+ { 5, TN, printargs, "64:recvmsg" }, /* 47 */
{ 2, TN, sys_shutdown, "shutdown" }, /* 48 */
{ 3, TN, sys_bind, "bind" }, /* 49 */
{ 2, TN, sys_listen, "listen" }, /* 50 */
{ 3, TN, sys_getsockname, "getsockname" }, /* 51 */
{ 3, TN, sys_getpeername, "getpeername" }, /* 52 */
{ 4, TN, sys_socketpair, "socketpair" }, /* 53 */
- { 5, TN, sys_setsockopt, "setsockopt" }, /* 54 */
- { 5, TN, sys_getsockopt, "getsockopt" }, /* 55 */
+ { 5, TN, printargs, "64:setsockopt" }, /* 54 */
+ { 5, TN, printargs, "64:getsockopt" }, /* 55 */
{ 5, TP, sys_clone, "clone" }, /* 56 */
{ 0, TP, sys_fork, "fork" }, /* 57 */
{ 0, TP, sys_vfork, "vfork" }, /* 58 */
- { }, /* 47 */
+ { 3, TF|TP, printargs, "64:execve" }, /* 59 */
{ 1, TP, sys_exit, "_exit" }, /* 60 */
{ 4, TP, sys_wait4, "wait4" }, /* 61 */
{ 2, TS, sys_kill, "kill" }, /* 62 */
@@ -74,9 +74,9 @@
{ 2, TD, sys_flock, "flock" }, /* 73 */
{ 1, TD, sys_fsync, "fsync" }, /* 74 */
{ 1, TD, sys_fdatasync, "fdatasync" }, /* 75 */
- { 2, TF, sys_truncate, "truncate" }, /* 76 */
- { 2, TD, sys_ftruncate, "ftruncate" }, /* 77 */
- { }, /* 78 */
+ { 2, TF, sys_truncate64, "truncate" }, /* 76 */
+ { 2, TD, sys_ftruncate64, "ftruncate" }, /* 77 */
+ { 3, TD, sys_getdents, "getdents" }, /* 78 */
{ 2, TF, sys_getcwd, "getcwd" }, /* 79 */
{ 1, TF, sys_chdir, "chdir" }, /* 80 */
{ 1, TD, sys_fchdir, "fchdir" }, /* 81 */
@@ -99,7 +99,7 @@
{ 2, 0, sys_getrusage, "getrusage" }, /* 98 */
{ 1, 0, sys_sysinfo, "sysinfo" }, /* 99 */
{ 1, 0, sys_times, "times" }, /* 100 */
- { }, /* 101 */
+ { 4, 0, printargs, "64:ptrace" }, /* 101 */
{ 0, NF, sys_getuid, "getuid" }, /* 102 */
{ 3, 0, sys_syslog, "syslog" }, /* 103 */
{ 0, NF, sys_getgid, "getgid" }, /* 104 */
@@ -125,14 +125,14 @@
{ 1, 0, sys_getsid, "getsid" }, /* 124 */
{ 2, 0, sys_capget, "capget" }, /* 125 */
{ 2, 0, sys_capset, "capset" }, /* 126 */
- { }, /* 127 */
- { }, /* 128 */
- { }, /* 129 */
+ { 2, TS, printargs, "64:rt_sigpending" }, /* 127 */
+ { 4, TS, printargs, "64:rt_sigtimedwait" }, /* 128 */
+ { 3, TS, printargs, "64:rt_sigqueueinfo" }, /* 129 */
{ 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 130 */
- { }, /* 131 */
+ { 2, TS, printargs, "64:sigaltstack"}, /* 131 */
{ 2, TF, sys_utime, "utime" }, /* 132 */
{ 3, TF, sys_mknod, "mknod" }, /* 133 */
- { }, /* 134 */
+ { 1, TF, printargs, "64:uselib" }, /* 134 */
{ 1, 0, sys_personality, "personality" }, /* 135 */
{ 2, 0, sys_ustat, "ustat" }, /* 136 */
{ 2, TF, sys_statfs, "statfs" }, /* 137 */
@@ -147,14 +147,14 @@
{ 1, 0, sys_sched_get_priority_max, "sched_get_priority_max" }, /* 146 */
{ 1, 0, sys_sched_get_priority_min, "sched_get_priority_min" }, /* 147 */
{ 2, 0, sys_sched_rr_get_interval, "sched_rr_get_interval" }, /* 148 */
- { 2, 0, sys_mlock, "mlock" }, /* 149 */
- { 2, 0, sys_munlock, "munlock" }, /* 150 */
- { 1, 0, sys_mlockall, "mlockall" }, /* 151 */
- { 0, 0, sys_munlockall, "munlockall" }, /* 152 */
+ { 2, TM, sys_mlock, "mlock" }, /* 149 */
+ { 2, TM, sys_munlock, "munlock" }, /* 150 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 151 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 152 */
{ 0, 0, sys_vhangup, "vhangup" }, /* 153 */
{ 3, 0, sys_modify_ldt, "modify_ldt" }, /* 154 */
{ 2, TF, sys_pivotroot, "pivot_root" }, /* 155 */
- { }, /* 156 */
+ { 1, 0, printargs, "64:_sysctl" }, /* 156 */
{ 5, 0, sys_prctl, "prctl" }, /* 157 */
{ 2, TP, sys_arch_prctl, "arch_prctl" }, /* 158 */
{ 1, 0, sys_adjtimex, "adjtimex" }, /* 159 */
@@ -172,20 +172,20 @@
{ 2, 0, sys_setdomainname, "setdomainname" }, /* 171 */
{ 1, 0, sys_iopl, "iopl" }, /* 172 */
{ 3, 0, sys_ioperm, "ioperm" }, /* 173 */
- { 2, 0, sys_create_module, "create_module" }, /* 174 */
+ { 2, 0, printargs, "64:create_module" }, /* 174 */
{ 3, 0, sys_init_module, "init_module" }, /* 175 */
{ 2, 0, sys_delete_module, "delete_module" }, /* 176 */
- { }, /* 177 */
- { }, /* 178 */
- { 4, 0, sys_quotactl, "quotactl" }, /* 179 */
- { }, /* 180 */
- { }, /* 181 */
- { }, /* 182 */
- { }, /* 183 */
- { }, /* 184 */
- { }, /* 185 */
+ { 1, 0, printargs, "64:get_kernel_syms" }, /* 177 */
+ { 5, 0, printargs, "64:query_module" }, /* 178 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 179 */
+ { 3, 0, printargs, "64:nfsservctl" }, /* 180 */
+ { 5, 0, sys_getpmsg, "getpmsg" }, /* 181 */
+ { 5, 0, sys_putpmsg, "putpmsg" }, /* 182 */
+ { 5, 0, sys_afs_syscall, "afs_syscall" }, /* 183 */
+ { 3, 0, sys_tuxcall, "tuxcall" }, /* 184 */
+ { 3, 0, sys_security, "security" }, /* 185 */
{ 0, 0, sys_gettid, "gettid" }, /* 186 */
- { 4, TD, sys_readahead, "readahead" }, /* 187 */
+ { 3, TD, sys_readahead, "readahead" }, /* 187 */
{ 5, TF, sys_setxattr, "setxattr" }, /* 188 */
{ 5, TF, sys_setxattr, "lsetxattr" }, /* 189 */
{ 5, TD, sys_fsetxattr, "fsetxattr" }, /* 190 */
@@ -203,24 +203,24 @@
{ 6, 0, sys_futex, "futex" }, /* 202 */
{ 3, 0, sys_sched_setaffinity, "sched_setaffinity" },/* 203 */
{ 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 204 */
- { }, /* 205 */
+ { 1, 0, printargs, "64:set_thread_area" }, /* 205 */
{ 2, 0, sys_io_setup, "io_setup" }, /* 206 */
{ 1, 0, sys_io_destroy, "io_destroy" }, /* 207 */
{ 5, 0, sys_io_getevents, "io_getevents" }, /* 208 */
{ 3, 0, sys_io_submit, "io_submit" }, /* 209 */
{ 3, 0, sys_io_cancel, "io_cancel" }, /* 210 */
- { }, /* 211 */
+ { 1, 0, printargs, "64:get_thread_area" }, /* 211 */
{ 4, 0, sys_lookup_dcookie, "lookup_dcookie"}, /* 212 */
{ 1, TD, sys_epoll_create, "epoll_create" }, /* 213 */
- { }, /* 214 */
- { }, /* 215 */
- { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 216 */
+ { 4, 0, printargs, "64:epoll_ctl_old" }, /* 214 */
+ { 4, 0, printargs, "64:epoll_wait_old" }, /* 215 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages"}, /* 216 */
{ 3, TD, sys_getdents64, "getdents64" }, /* 217 */
{ 1, 0, sys_set_tid_address, "set_tid_address"}, /* 218 */
{ 0, 0, sys_restart_syscall, "restart_syscall"}, /* 219 */
{ 5, TI, sys_semtimedop, "semtimedop" }, /* 220 */
{ 4, TD, sys_fadvise64_64, "fadvise64" }, /* 221 */
- { }, /* 222 */
+ { 3, 0, printargs, "64:timer_create"}, /* 222 */
{ 4, 0, sys_timer_settime, "timer_settime" }, /* 223 */
{ 2, 0, sys_timer_gettime, "timer_gettime" }, /* 224 */
{ 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 225 */
@@ -234,18 +234,18 @@
{ 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 233 */
{ 3, TS, sys_tgkill, "tgkill" }, /* 234 */
{ 2, TF, sys_utimes, "utimes" }, /* 235 */
- { }, /* 236 */
- { 6, 0, sys_mbind, "mbind" }, /* 237 */
- { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 238 */
- { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 239 */
+ { 5, 0, printargs, "64:vserver" }, /* 236 */
+ { 6, TM, sys_mbind, "mbind" }, /* 237 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 238 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 239 */
{ 4, 0, sys_mq_open, "mq_open" }, /* 240 */
{ 1, 0, sys_mq_unlink, "mq_unlink" }, /* 241 */
{ 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 242 */
{ 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 243 */
- { }, /* 244 */
+ { 2, 0, printargs, "64:mq_notify" }, /* 244 */
{ 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 245 */
- { }, /* 246 */
- { }, /* 247 */
+ { 4, 0, printargs, "64:kexec_load" }, /* 246 */
+ { 5, TP, printargs, "64:waitid" }, /* 247 */
{ 5, 0, sys_add_key, "add_key" }, /* 248 */
{ 4, 0, sys_request_key, "request_key" }, /* 249 */
{ 5, 0, sys_keyctl, "keyctl" }, /* 250 */
@@ -254,7 +254,7 @@
{ 0, TD, sys_inotify_init, "inotify_init" }, /* 253 */
{ 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 254 */
{ 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 255 */
- { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 256 */
+ { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 256 */
{ 4, TD|TF, sys_openat, "openat" }, /* 257 */
{ 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 258 */
{ 4, TD|TF, sys_mknodat, "mknodat" }, /* 259 */
@@ -271,19 +271,19 @@
{ 6, TD, sys_pselect6, "pselect6" }, /* 270 */
{ 5, TD, sys_ppoll, "ppoll" }, /* 271 */
{ 1, TP, sys_unshare, "unshare" }, /* 272 */
- { }, /* 273 */
- { }, /* 274 */
+ { 2, 0, printargs, "64:set_robust_list" }, /* 273 */
+ { 3, 0, printargs, "64:get_robust_list" }, /* 274 */
{ 6, TD, sys_splice, "splice" }, /* 275 */
{ 4, TD, sys_tee, "tee" }, /* 276 */
{ 4, TD, sys_sync_file_range, "sync_file_range" }, /* 277 */
- { }, /* 278 */
- { }, /* 279 */
+ { 4, TD, printargs, "64:vmsplice" }, /* 278 */
+ { 6, TM, printargs, "64:move_pages" }, /* 279 */
{ 4, TD|TF, sys_utimensat, "utimensat" }, /* 280 */
{ 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 281 */
{ 3, TD|TS, sys_signalfd, "signalfd" }, /* 282 */
{ 2, TD, sys_timerfd_create, "timerfd_create"}, /* 283 */
{ 1, TD, sys_eventfd, "eventfd" }, /* 284 */
- { 6, TD, sys_fallocate, "fallocate" }, /* 285 */
+ { 4, TD, sys_fallocate, "fallocate" }, /* 285 */
{ 4, TD, sys_timerfd_settime, "timerfd_settime"}, /* 286 */
{ 2, TD, sys_timerfd_gettime, "timerfd_gettime"}, /* 287 */
{ 4, TN, sys_accept4, "accept4" }, /* 288 */
@@ -293,11 +293,11 @@
{ 3, TD, sys_dup3, "dup3" }, /* 292 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 293 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 294 */
- { }, /* 295 */
- { }, /* 296 */
- { }, /* 297 */
+ { 4, TD, printargs, "64:preadv" }, /* 295 */
+ { 4, TD, printargs, "64:pwritev" }, /* 296 */
+ { 4, TP|TS, printargs, "64:rt_tgsigqueueinfo"}, /* 297 */
{ 5, TD, sys_perf_event_open, "perf_event_open"}, /* 298 */
- { }, /* 299 */
+ { 5, TN, printargs, "64:recvmmsg" }, /* 299 */
{ 2, TD, sys_fanotify_init, "fanotify_init" }, /* 300 */
{ 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 301 */
{ 4, 0, sys_prlimit64, "prlimit64" }, /* 302 */
@@ -305,13 +305,15 @@
{ 3, TD, sys_open_by_handle_at, "open_by_handle_at"}, /* 304 */
{ 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 305 */
{ 1, TD, sys_syncfs, "syncfs" }, /* 306 */
- { }, /* 307 */
+ { 4, TN, printargs, "64:sendmmsg" }, /* 307 */
{ 2, TD, sys_setns, "setns" }, /* 308 */
{ 3, 0, sys_getcpu, "getcpu" }, /* 309 */
- { }, /* 310 */
- { }, /* 311 */
+ { 6, 0, printargs, "64:process_vm_readv" }, /* 310 */
+ { 6, 0, printargs, "64:process_vm_writev" }, /* 311 */
+ { 5, 0, sys_kcmp, "kcmp" }, /* 312 */
+ { 3, TD, sys_finit_module, "finit_module" }, /* 313 */
- [312 ... 511] = {},
+ [314 ... 511] = {},
{ 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 512 */
{ 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 513 */
@@ -320,12 +322,12 @@
{ 3, TD, sys_writev, "writev" }, /* 516 */
{ 6, TN, sys_recvfrom, "recvfrom" }, /* 517 */
{ 3, TN, sys_sendmsg, "sendmsg" }, /* 518 */
- { 5, TN, sys_recvmsg, "recvmsg" }, /* 519 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 519 */
{ 3, TF|TP, sys_execve, "execve" }, /* 520 */
{ 4, 0, sys_ptrace, "ptrace" }, /* 521 */
{ 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 522 */
{ 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait" }, /* 523 */
- { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo" }, /* 524 */
+ { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo" }, /* 524 */
{ 2, TS, sys_sigaltstack, "sigaltstack" }, /* 525 */
{ 3, 0, sys_timer_create, "timer_create" }, /* 526 */
{ 2, 0, sys_mq_notify, "mq_notify" }, /* 527 */
@@ -334,11 +336,13 @@
{ 2, 0, sys_set_robust_list, "set_robust_list" }, /* 530 */
{ 3, 0, sys_get_robust_list, "get_robust_list" }, /* 531 */
{ 4, TD, sys_vmsplice, "vmsplice" }, /* 532 */
- { 6, 0, sys_move_pages, "move_pages" }, /* 533 */
- { 5, TD, sys_preadv, "preadv" }, /* 534 */
- { 5, TD, sys_pwritev, "pwritev" }, /* 535 */
- { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo"}, /* 536 */
+ { 6, TM, sys_move_pages, "move_pages" }, /* 533 */
+ { 4, TD, sys_preadv, "preadv" }, /* 534 */
+ { 4, TD, sys_pwritev, "pwritev" }, /* 535 */
+ { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 536 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 537 */
{ 4, TN, sys_sendmmsg, "sendmmsg" }, /* 538 */
- { 6, 0, sys_process_vm_readv, "process_vm_readv"}, /* 539 */
- { 6, 0, sys_process_vm_writev, "process_vm_writev"}, /* 540 */
+ { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 539 */
+ { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 540 */
+ { 5, TN, sys_setsockopt, "setsockopt" }, /* 541 */
+ { 5, TN, sys_getsockopt, "getsockopt" }, /* 542 */
diff --git a/linux/x32/syscallent1.h b/linux/x32/syscallent1.h
index 20c6529..c9100de 100644
--- a/linux/x32/syscallent1.h
+++ b/linux/x32/syscallent1.h
@@ -1,11 +1,3 @@
-/* Our second set comes from the i386 files.
- Only a couple of calls we cannot support without the i386 headers. */
+/* Our second set comes from the i386 files. */
-#define sys_oldstat printargs
-#define sys_oldfstat printargs
-#define sys_oldlstat printargs
-#define sys_lseek sys_lseek32
-#define sys_lstat64 sys_stat64
-#define sys_truncate64 sys_truncate
-#define sys_ftruncate64 sys_ftruncate
-#include "i386/syscallent.h"
+#include "../i386/syscallent.h"
diff --git a/linux/x86_64/errnoent1.h b/linux/x86_64/errnoent1.h
index a894827..de1136c 100644
--- a/linux/x86_64/errnoent1.h
+++ b/linux/x86_64/errnoent1.h
@@ -1,2 +1,2 @@
-/* Our second set comes from the i386 files. */
+/* i386 personality */
#include "../errnoent.h"
diff --git a/linux/x86_64/errnoent2.h b/linux/x86_64/errnoent2.h
index 00de57b..0630919 100644
--- a/linux/x86_64/errnoent2.h
+++ b/linux/x86_64/errnoent2.h
@@ -1,2 +1,2 @@
-/* Our third set is for x32. */
+/* x32 personality */
#include "../errnoent.h"
diff --git a/linux/x86_64/ioctlent1.h b/linux/x86_64/ioctlent1.h
index 1f92feb..4750671 100644
--- a/linux/x86_64/ioctlent1.h
+++ b/linux/x86_64/ioctlent1.h
@@ -1,2 +1,2 @@
-/* Our second set comes from the i386 files. */
-#include "linux/ioctlent.h"
+/* i386 personality */
+#include "ioctlent.h"
diff --git a/linux/x86_64/ioctlent2.h b/linux/x86_64/ioctlent2.h
index 060003b..fd4b94d 100644
--- a/linux/x86_64/ioctlent2.h
+++ b/linux/x86_64/ioctlent2.h
@@ -1,2 +1,2 @@
-/* Our third set is for x32. */
-#include "linux/ioctlent.h"
+/* x32 personality */
+#include "ioctlent.h"
diff --git a/linux/x86_64/signalent1.h b/linux/x86_64/signalent1.h
index 5c18d98..c927d72 100644
--- a/linux/x86_64/signalent1.h
+++ b/linux/x86_64/signalent1.h
@@ -1,2 +1,2 @@
-/* Our second set comes from the i386 files. */
+/* i386 personality */
#include "../signalent.h"
diff --git a/linux/x86_64/signalent2.h b/linux/x86_64/signalent2.h
index 6fbcab1..c8f6824 100644
--- a/linux/x86_64/signalent2.h
+++ b/linux/x86_64/signalent2.h
@@ -1,2 +1,2 @@
-/* Our third set is for x32. */
+/* x32 personality */
#include "../signalent.h"
diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h
index 34ebc53..8e3a200 100644
--- a/linux/x86_64/syscallent.h
+++ b/linux/x86_64/syscallent.h
@@ -7,26 +7,26 @@
{ 2, TF, sys_lstat, "lstat" }, /* 6 */
{ 3, TD, sys_poll, "poll" }, /* 7 */
{ 3, TD, sys_lseek, "lseek" }, /* 8 */
- { 6, TD, sys_mmap, "mmap" }, /* 9 */
- { 3, 0, sys_mprotect, "mprotect" }, /* 10 */
- { 2, 0, sys_munmap, "munmap" }, /* 11 */
- { 1, 0, sys_brk, "brk" }, /* 12 */
+ { 6, TD|TM, sys_mmap, "mmap" }, /* 9 */
+ { 3, TM, sys_mprotect, "mprotect" }, /* 10 */
+ { 2, TM, sys_munmap, "munmap" }, /* 11 */
+ { 1, TM, sys_brk, "brk" }, /* 12 */
{ 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 13 */
{ 4, TS, sys_rt_sigprocmask, "rt_sigprocmask"}, /* 14 */
{ 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 15 */
{ 3, TD, sys_ioctl, "ioctl" }, /* 16 */
- { 5, TD, sys_pread, "pread" }, /* 17 */
- { 5, TD, sys_pwrite, "pwrite" }, /* 18 */
+ { 4, TD, sys_pread, "pread" }, /* 17 */
+ { 4, TD, sys_pwrite, "pwrite" }, /* 18 */
{ 3, TD, sys_readv, "readv" }, /* 19 */
{ 3, TD, sys_writev, "writev" }, /* 20 */
{ 2, TF, sys_access, "access" }, /* 21 */
{ 1, TD, sys_pipe, "pipe" }, /* 22 */
{ 5, TD, sys_select, "select" }, /* 23 */
{ 0, 0, sys_sched_yield, "sched_yield" }, /* 24 */
- { 5, 0, sys_mremap, "mremap" }, /* 25 */
- { 3, 0, sys_msync, "msync" }, /* 26 */
- { 3, 0, sys_mincore, "mincore" }, /* 27 */
- { 3, 0, sys_madvise, "madvise" }, /* 28 */
+ { 5, TM, sys_mremap, "mremap" }, /* 25 */
+ { 3, TM, sys_msync, "msync" }, /* 26 */
+ { 3, TM, sys_mincore, "mincore" }, /* 27 */
+ { 3, TM, sys_madvise, "madvise" }, /* 28 */
{ 4, TI, sys_shmget, "shmget" }, /* 29 */
{ 4, TI, sys_shmat, "shmat" }, /* 30 */
{ 4, TI, sys_shmctl, "shmctl" }, /* 31 */
@@ -38,14 +38,14 @@
{ 1, 0, sys_alarm, "alarm" }, /* 37 */
{ 3, 0, sys_setitimer, "setitimer" }, /* 38 */
{ 0, 0, sys_getpid, "getpid" }, /* 39 */
- { 4, TD|TN, sys_sendfile, "sendfile" }, /* 40 */
+ { 4, TD|TN, sys_sendfile64, "sendfile" }, /* 40 */
{ 3, TN, sys_socket, "socket" }, /* 41 */
{ 3, TN, sys_connect, "connect" }, /* 42 */
{ 3, TN, sys_accept, "accept" }, /* 43 */
{ 6, TN, sys_sendto, "sendto" }, /* 44 */
{ 6, TN, sys_recvfrom, "recvfrom" }, /* 45 */
{ 3, TN, sys_sendmsg, "sendmsg" }, /* 46 */
- { 5, TN, sys_recvmsg, "recvmsg" }, /* 47 */
+ { 3, TN, sys_recvmsg, "recvmsg" }, /* 47 */
{ 2, TN, sys_shutdown, "shutdown" }, /* 48 */
{ 3, TN, sys_bind, "bind" }, /* 49 */
{ 2, TN, sys_listen, "listen" }, /* 50 */
@@ -147,10 +147,10 @@
{ 1, 0, sys_sched_get_priority_max, "sched_get_priority_max" }, /* 146 */
{ 1, 0, sys_sched_get_priority_min, "sched_get_priority_min" }, /* 147 */
{ 2, 0, sys_sched_rr_get_interval, "sched_rr_get_interval" }, /* 148 */
- { 2, 0, sys_mlock, "mlock" }, /* 149 */
- { 2, 0, sys_munlock, "munlock" }, /* 150 */
- { 1, 0, sys_mlockall, "mlockall" }, /* 151 */
- { 0, 0, sys_munlockall, "munlockall" }, /* 152 */
+ { 2, TM, sys_mlock, "mlock" }, /* 149 */
+ { 2, TM, sys_munlock, "munlock" }, /* 150 */
+ { 1, TM, sys_mlockall, "mlockall" }, /* 151 */
+ { 0, TM, sys_munlockall, "munlockall" }, /* 152 */
{ 0, 0, sys_vhangup, "vhangup" }, /* 153 */
{ 3, 0, sys_modify_ldt, "modify_ldt" }, /* 154 */
{ 2, TF, sys_pivotroot, "pivot_root" }, /* 155 */
@@ -177,7 +177,7 @@
{ 2, 0, sys_delete_module, "delete_module" }, /* 176 */
{ 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 177 */
{ 5, 0, sys_query_module, "query_module" }, /* 178 */
- { 4, 0, sys_quotactl, "quotactl" }, /* 179 */
+ { 4, TF, sys_quotactl, "quotactl" }, /* 179 */
{ 3, 0, sys_nfsservctl, "nfsservctl" }, /* 180 */
{ 5, 0, sys_getpmsg, "getpmsg" }, /* 181 */
{ 5, 0, sys_putpmsg, "putpmsg" }, /* 182 */
@@ -185,7 +185,7 @@
{ 3, 0, sys_tuxcall, "tuxcall" }, /* 184 */
{ 3, 0, sys_security, "security" }, /* 185 */
{ 0, 0, sys_gettid, "gettid" }, /* 186 */
- { 4, TD, sys_readahead, "readahead" }, /* 187 */
+ { 3, TD, sys_readahead, "readahead" }, /* 187 */
{ 5, TF, sys_setxattr, "setxattr" }, /* 188 */
{ 5, TF, sys_setxattr, "lsetxattr" }, /* 189 */
{ 5, TD, sys_fsetxattr, "fsetxattr" }, /* 190 */
@@ -210,16 +210,16 @@
{ 3, 0, sys_io_submit, "io_submit" }, /* 209 */
{ 3, 0, sys_io_cancel, "io_cancel" }, /* 210 */
{ 1, 0, sys_get_thread_area, "get_thread_area" }, /* 211 */
- { 4, 0, sys_lookup_dcookie, "lookup_dcookie"}, /* 212 */
+ { 3, 0, sys_lookup_dcookie, "lookup_dcookie"}, /* 212 */
{ 1, TD, sys_epoll_create, "epoll_create" }, /* 213 */
{ 4, 0, printargs, "epoll_ctl_old" }, /* 214 */
{ 4, 0, printargs, "epoll_wait_old"}, /* 215 */
- { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 216 */
+ { 5, TM, sys_remap_file_pages, "remap_file_pages"}, /* 216 */
{ 3, TD, sys_getdents64, "getdents64" }, /* 217 */
{ 1, 0, sys_set_tid_address, "set_tid_address"}, /* 218 */
{ 0, 0, sys_restart_syscall, "restart_syscall"}, /* 219 */
{ 5, TI, sys_semtimedop, "semtimedop" }, /* 220 */
- { 4, TD, sys_fadvise64_64, "fadvise64" }, /* 221 */
+ { 4, TD, sys_fadvise64, "fadvise64" }, /* 221 */
{ 3, 0, sys_timer_create, "timer_create" }, /* 222 */
{ 4, 0, sys_timer_settime, "timer_settime" }, /* 223 */
{ 2, 0, sys_timer_gettime, "timer_gettime" }, /* 224 */
@@ -235,9 +235,9 @@
{ 3, TS, sys_tgkill, "tgkill" }, /* 234 */
{ 2, TF, sys_utimes, "utimes" }, /* 235 */
{ 5, 0, sys_vserver, "vserver" }, /* 236 */
- { 6, 0, sys_mbind, "mbind" }, /* 237 */
- { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 238 */
- { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 239 */
+ { 6, TM, sys_mbind, "mbind" }, /* 237 */
+ { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 238 */
+ { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 239 */
{ 4, 0, sys_mq_open, "mq_open" }, /* 240 */
{ 1, 0, sys_mq_unlink, "mq_unlink" }, /* 241 */
{ 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 242 */
@@ -254,7 +254,7 @@
{ 0, TD, sys_inotify_init, "inotify_init" }, /* 253 */
{ 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 254 */
{ 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 255 */
- { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 256 */
+ { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 256 */
{ 4, TD|TF, sys_openat, "openat" }, /* 257 */
{ 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 258 */
{ 4, TD|TF, sys_mknodat, "mknodat" }, /* 259 */
@@ -277,13 +277,13 @@
{ 4, TD, sys_tee, "tee" }, /* 276 */
{ 4, TD, sys_sync_file_range, "sync_file_range" }, /* 277 */
{ 4, TD, sys_vmsplice, "vmsplice" }, /* 278 */
- { 6, 0, sys_move_pages, "move_pages" }, /* 279 */
+ { 6, TM, sys_move_pages, "move_pages" }, /* 279 */
{ 4, TD|TF, sys_utimensat, "utimensat" }, /* 280 */
{ 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 281 */
{ 3, TD|TS, sys_signalfd, "signalfd" }, /* 282 */
{ 2, TD, sys_timerfd_create, "timerfd_create"}, /* 283 */
{ 1, TD, sys_eventfd, "eventfd" }, /* 284 */
- { 6, TD, sys_fallocate, "fallocate" }, /* 285 */
+ { 4, TD, sys_fallocate, "fallocate" }, /* 285 */
{ 4, TD, sys_timerfd_settime, "timerfd_settime"}, /* 286 */
{ 2, TD, sys_timerfd_gettime, "timerfd_gettime"}, /* 287 */
{ 4, TN, sys_accept4, "accept4" }, /* 288 */
@@ -293,8 +293,8 @@
{ 3, TD, sys_dup3, "dup3" }, /* 292 */
{ 2, TD, sys_pipe2, "pipe2" }, /* 293 */
{ 1, TD, sys_inotify_init1, "inotify_init1" }, /* 294 */
- { 5, TD, sys_preadv, "preadv" }, /* 295 */
- { 5, TD, sys_pwritev, "pwritev" }, /* 296 */
+ { 4, TD, sys_preadv, "preadv" }, /* 295 */
+ { 4, TD, sys_pwritev, "pwritev" }, /* 296 */
{ 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo"}, /* 297 */
{ 5, TD, sys_perf_event_open, "perf_event_open"}, /* 298 */
{ 5, TN, sys_recvmmsg, "recvmmsg" }, /* 299 */
@@ -310,3 +310,5 @@
{ 3, 0, sys_getcpu, "getcpu" }, /* 309 */
{ 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 310 */
{ 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 311 */
+ { 5, 0, sys_kcmp, "kcmp" }, /* 312 */
+ { 3, TD, sys_finit_module, "finit_module" }, /* 313 */
diff --git a/linux/x86_64/syscallent1.h b/linux/x86_64/syscallent1.h
index 9097785..c9100de 100644
--- a/linux/x86_64/syscallent1.h
+++ b/linux/x86_64/syscallent1.h
@@ -1,7 +1,3 @@
-/* Our second set comes from the i386 files.
- Only a couple of calls we cannot support without the i386 headers. */
+/* Our second set comes from the i386 files. */
-#define sys_oldstat printargs
-#define sys_oldfstat printargs
-#define sys_oldlstat printargs
-#include "i386/syscallent.h"
+#include "../i386/syscallent.h"
diff --git a/linux/x86_64/syscallent2.h b/linux/x86_64/syscallent2.h
index 1d35f53..5e0df53 100644
--- a/linux/x86_64/syscallent2.h
+++ b/linux/x86_64/syscallent2.h
@@ -1,2 +1,2 @@
-/* Our third set is for x32. */
-#include "x32/syscallent.h"
+/* x32 personality */
+#include "../x32/syscallent.h"
diff --git a/loop.c b/loop.c
index 83d9152..a3f89e0 100644
--- a/loop.c
+++ b/loop.c
@@ -72,7 +72,7 @@
if (!verbose(tcp) || umove(tcp, arg, &info) < 0)
return 0;
- tprintf(", {number=%i", info.lo_number);
+ tprintf(", {number=%d", info.lo_number);
if (!abbrev(tcp)) {
tprintf(", device=%#lx, inode=%lu, rdevice=%#lx",
@@ -87,7 +87,7 @@
tprints(", encrypt_type=");
printxval(loop_crypt_type_options, info.lo_encrypt_type,
"LO_CRYPT_???");
- tprintf(", encrypt_key_size=%i", info.lo_encrypt_key_size);
+ tprintf(", encrypt_key_size=%d", info.lo_encrypt_key_size);
}
tprints(", flags=");
diff --git a/mem.c b/mem.c
index 0279030..ef273c7 100644
--- a/mem.c
+++ b/mem.c
@@ -39,16 +39,16 @@
# define modify_ldt_ldt_s user_desc
# endif
#endif
-#if defined(SH64)
-# include <asm/page.h> /* for PAGE_SHIFT */
-#endif
-#ifdef HAVE_LONG_LONG_OFF_T
-/*
- * Ugly hacks for systems that have a long long off_t
- */
-# define sys_mmap64 sys_mmap
-#endif
+static unsigned long
+get_pagesize()
+{
+ static unsigned long pagesize;
+
+ if (!pagesize)
+ pagesize = sysconf(_SC_PAGESIZE);
+ return pagesize;
+}
int
sys_brk(struct tcb *tcp)
@@ -159,56 +159,20 @@
#ifdef MAP_STACK
{ MAP_STACK, "MAP_STACK" },
#endif
+#if defined MAP_UNINITIALIZED && MAP_UNINITIALIZED > 0
+ { MAP_UNINITIALIZED,"MAP_UNINITIALIZED"},
+#endif
#ifdef MAP_NOSYNC
{ MAP_NOSYNC, "MAP_NOSYNC" },
#endif
#ifdef MAP_NOCORE
{ MAP_NOCORE, "MAP_NOCORE" },
#endif
-#ifdef TILE
- { MAP_CACHE_NO_LOCAL, "MAP_CACHE_NO_LOCAL" },
- { MAP_CACHE_NO_L2, "MAP_CACHE_NO_L2" },
- { MAP_CACHE_NO_L1, "MAP_CACHE_NO_L1" },
-#endif
{ 0, NULL },
};
-#ifdef TILE
static int
-addtileflags(long flags)
-{
- long home = flags & _MAP_CACHE_MKHOME(_MAP_CACHE_HOME_MASK);
- flags &= ~_MAP_CACHE_MKHOME(_MAP_CACHE_HOME_MASK);
-
- if (flags & _MAP_CACHE_INCOHERENT) {
- flags &= ~_MAP_CACHE_INCOHERENT;
- if (home == MAP_CACHE_HOME_NONE) {
- tprints("|MAP_CACHE_INCOHERENT");
- return flags;
- }
- tprints("|_MAP_CACHE_INCOHERENT");
- }
-
- switch (home) {
- case 0: break;
- case MAP_CACHE_HOME_HERE: tprints("|MAP_CACHE_HOME_HERE"); break;
- case MAP_CACHE_HOME_NONE: tprints("|MAP_CACHE_HOME_NONE"); break;
- case MAP_CACHE_HOME_SINGLE: tprints("|MAP_CACHE_HOME_SINGLE"); break;
- case MAP_CACHE_HOME_TASK: tprints("|MAP_CACHE_HOME_TASK"); break;
- case MAP_CACHE_HOME_HASH: tprints("|MAP_CACHE_HOME_HASH"); break;
- default:
- tprintf("|MAP_CACHE_HOME(%d)",
- (home >> _MAP_CACHE_HOME_SHIFT) );
- break;
- }
-
- return flags;
-}
-#endif
-
-#if !HAVE_LONG_LONG_OFF_T
-static int
-print_mmap(struct tcb *tcp, long *u_arg, long long offset)
+print_mmap(struct tcb *tcp, long *u_arg, unsigned long long offset)
{
if (entering(tcp)) {
/* addr */
@@ -224,16 +188,12 @@
/* flags */
#ifdef MAP_TYPE
printxval(mmap_flags, u_arg[3] & MAP_TYPE, "MAP_???");
-#ifdef TILE
- addflags(mmap_flags, addtileflags(u_arg[3] & ~MAP_TYPE));
-#else
addflags(mmap_flags, u_arg[3] & ~MAP_TYPE);
-#endif
#else
printflags(mmap_flags, u_arg[3], "MAP_???");
#endif
- /* fd */
tprints(", ");
+ /* fd */
printfd(tcp, u_arg[4]);
/* offset */
tprintf(", %#llx", offset);
@@ -241,161 +201,101 @@
return RVAL_HEX;
}
-int sys_old_mmap(struct tcb *tcp)
+/* Syscall name<->function correspondence is messed up on many arches.
+ * For example:
+ * i386 has __NR_mmap == 90, and it is "old mmap", and
+ * also it has __NR_mmap2 == 192, which is a "new mmap with page offsets".
+ * But x86_64 has just one __NR_mmap == 9, a "new mmap with byte offsets".
+ * Confused? Me too!
+ */
+
+/* Params are pointed to by u_arg[0], offset is in bytes */
+int
+sys_old_mmap(struct tcb *tcp)
{
+ long u_arg[6];
#if defined(IA64)
/*
* IA64 processes never call this routine, they only use the
- * new `sys_mmap' interface.
- * For IA32 processes, this code converts the integer arguments
- * that they pushed onto the stack, into longs.
- *
- * Note that addresses with bit 31 set will be sign extended.
- * Fortunately, those addresses are not currently being generated
- * for IA32 processes so it's not a problem.
+ * new 'sys_mmap' interface. Only IA32 processes come here.
*/
int i;
- long u_arg[6];
- int narrow_arg[6];
+ unsigned narrow_arg[6];
if (umoven(tcp, tcp->u_arg[0], sizeof(narrow_arg), (char *) narrow_arg) == -1)
return 0;
for (i = 0; i < 6; i++)
- u_arg[i] = narrow_arg[i];
-#elif defined(SH) || defined(SH64)
- /* SH has always passed the args in registers */
- long *u_arg = tcp->u_arg;
+ u_arg[i] = (unsigned long) narrow_arg[i];
+#elif defined(X86_64)
+ /* We are here only in personality 1 (i386) */
+ int i;
+ unsigned narrow_arg[6];
+ if (umoven(tcp, tcp->u_arg[0], sizeof(narrow_arg), (char *) narrow_arg) == -1)
+ return 0;
+ for (i = 0; i < 6; ++i)
+ u_arg[i] = (unsigned long) narrow_arg[i];
#else
- long u_arg[6];
-# if defined(X86_64)
- if (current_personality == 1) {
- int i;
- unsigned narrow_arg[6];
- if (umoven(tcp, tcp->u_arg[0], sizeof(narrow_arg), (char *) narrow_arg) == -1)
- return 0;
- for (i = 0; i < 6; ++i)
- u_arg[i] = narrow_arg[i];
- }
- else
-# endif
if (umoven(tcp, tcp->u_arg[0], sizeof(u_arg), (char *) u_arg) == -1)
return 0;
-#endif /* other architectures */
-
- return print_mmap(tcp, u_arg, u_arg[5]);
+#endif
+ return print_mmap(tcp, u_arg, (unsigned long) u_arg[5]);
}
+#if defined(S390)
+/* Params are pointed to by u_arg[0], offset is in pages */
+int
+sys_old_mmap_pgoff(struct tcb *tcp)
+{
+ long u_arg[5];
+ int i;
+ unsigned narrow_arg[6];
+ unsigned long long offset;
+ if (umoven(tcp, tcp->u_arg[0], sizeof(narrow_arg), (char *) narrow_arg) == -1)
+ return 0;
+ for (i = 0; i < 5; i++)
+ u_arg[i] = (unsigned long) narrow_arg[i];
+ offset = narrow_arg[5];
+ offset *= get_pagesize();
+ return print_mmap(tcp, u_arg, offset);
+}
+#endif
+
+/* Params are passed directly, offset is in bytes */
int
sys_mmap(struct tcb *tcp)
{
- long long offset = tcp->u_arg[5];
-
- /* FIXME: why only SH64? i386 mmap2 syscall ends up
- * in this function, but does not convert offset
- * from pages to bytes. See test/mmap_offset_decode.c
- * Why SH64 and i386 are handled differently?
- */
-#if defined(SH64)
- /*
- * Old mmap differs from new mmap in specifying the
- * offset in units of bytes rather than pages. We
- * pretend it's in byte units so the user only ever
- * sees bytes in the printout.
- */
- offset <<= PAGE_SHIFT;
-#endif
-#if defined(LINUX_MIPSN32)
+ unsigned long long offset = (unsigned long) tcp->u_arg[5];
+#if defined(LINUX_MIPSN32) || defined(X32)
+ /* Try test/x32_mmap.c */
offset = tcp->ext_arg[5];
#endif
+ /* Example of kernel-side handling of this variety of mmap:
+ * arch/x86/kernel/sys_x86_64.c::SYSCALL_DEFINE6(mmap, ...) calls
+ * sys_mmap_pgoff(..., off >> PAGE_SHIFT); i.e. off is in bytes,
+ * since the above code converts off to pages.
+ */
return print_mmap(tcp, tcp->u_arg, offset);
}
-#endif /* !HAVE_LONG_LONG_OFF_T */
-#if _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T
-# if defined(X32)
-int sys_old_mmap(struct tcb *tcp)
-{
- long u_arg[6];
- if (umoven(tcp, tcp->u_arg[0], sizeof(u_arg), (char *) u_arg) == -1)
- return 0;
- if (entering(tcp)) {
- /* addr */
- if (!u_arg[0])
- tprints("NULL, ");
- else
- tprintf("%#lx, ", u_arg[0]);
- /* len */
- tprintf("%lu, ", u_arg[1]);
- /* prot */
- printflags(mmap_prot, u_arg[2], "PROT_???");
- tprints(", ");
- /* flags */
-# ifdef MAP_TYPE
- printxval(mmap_flags, u_arg[3] & MAP_TYPE, "MAP_???");
- addflags(mmap_flags, u_arg[3] & ~MAP_TYPE);
-# else
- printflags(mmap_flags, u_arg[3], "MAP_???");
-# endif
- /* fd */
- tprints(", ");
- printfd(tcp, u_arg[4]);
- /* offset */
- tprintf(", %#lx", u_arg[5]);
- }
- return RVAL_HEX;
-}
-# endif
-
-/* TODO: comment which arches use this routine.
- * For one, does ALPHA on Linux use this??
- * From code it seems that it might use 7 or 8 registers,
- * which is strange - Linux syscalls can pass maximum of 6 parameters!
- */
+/* Params are passed directly, offset is in pages */
int
-sys_mmap64(struct tcb *tcp)
+sys_mmap_pgoff(struct tcb *tcp)
{
- if (entering(tcp)) {
-#if defined(ALPHA) || defined(X32)
- long *u_arg = tcp->u_arg;
-#else
- long u_arg[7];
- if (umoven(tcp, tcp->u_arg[0], sizeof u_arg,
- (char *) u_arg) == -1)
- return 0;
-#endif
- /* addr */
- if (!u_arg[0])
- tprints("NULL, ");
- else
- tprintf("%#lx, ", u_arg[0]);
- /* len */
- tprintf("%lu, ", u_arg[1]);
- /* prot */
- printflags(mmap_prot, u_arg[2], "PROT_???");
- tprints(", ");
- /* flags */
-#ifdef MAP_TYPE
- printxval(mmap_flags, u_arg[3] & MAP_TYPE, "MAP_???");
- addflags(mmap_flags, u_arg[3] & ~MAP_TYPE);
-#else
- printflags(mmap_flags, u_arg[3], "MAP_???");
-#endif
- /* fd */
- tprints(", ");
- printfd(tcp, u_arg[4]);
- /* offset */
-#if defined(ALPHA) || defined(X32)
- printllval(tcp, ", %#llx", 5);
-#else
- /* NOTE: not verified that [5] and [6] should be used.
- * It's possible that long long is 64-bit aligned in memory
- * and we need to use [6] and [7] here instead:
- */
- tprintf(", %#llx", LONG_LONG(u_arg[5], u_arg[6]));
-#endif
- }
- return RVAL_HEX;
+ /* Try test/mmap_offset_decode.c */
+ unsigned long long offset;
+ offset = (unsigned long) tcp->u_arg[5];
+ offset *= get_pagesize();
+ return print_mmap(tcp, tcp->u_arg, offset);
}
-#endif /* _LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T */
+
+/* Params are passed directly, offset is in 4k units */
+int
+sys_mmap_4koff(struct tcb *tcp)
+{
+ unsigned long long offset;
+ offset = (unsigned long) tcp->u_arg[5];
+ offset <<= 12;
+ return print_mmap(tcp, tcp->u_arg, offset);
+}
int
sys_munmap(struct tcb *tcp)
@@ -458,6 +358,39 @@
#ifdef MADV_DONTNEED
{ MADV_DONTNEED, "MADV_DONTNEED" },
#endif
+#ifdef MADV_REMOVE
+ { MADV_REMOVE, "MADV_REMOVE" },
+#endif
+#ifdef MADV_DONTFORK
+ { MADV_DONTFORK, "MADV_DONTFORK" },
+#endif
+#ifdef MADV_DOFORK
+ { MADV_DOFORK, "MADV_DOFORK" },
+#endif
+#ifdef MADV_HWPOISON
+ { MADV_HWPOISON, "MADV_HWPOISON" },
+#endif
+#ifdef MADV_SOFT_OFFLINE
+ { MADV_SOFT_OFFLINE, "MADV_SOFT_OFFLINE" },
+#endif
+#ifdef MADV_MERGEABLE
+ { MADV_MERGEABLE, "MADV_MERGEABLE" },
+#endif
+#ifdef MADV_UNMERGEABLE
+ { MADV_UNMERGEABLE, "MADV_UNMERGEABLE" },
+#endif
+#ifdef MADV_HUGEPAGE
+ { MADV_HUGEPAGE, "MADV_HUGEPAGE" },
+#endif
+#ifdef MADV_NOHUGEPAGE
+ { MADV_NOHUGEPAGE, "MADV_NOHUGEPAGE" },
+#endif
+#ifdef MADV_DONTDUMP
+ { MADV_DONTDUMP, "MADV_DONTDUMP" },
+#endif
+#ifdef MADV_DODUMP
+ { MADV_DODUMP, "MADV_DODUMP" },
+#endif
{ 0, NULL },
};
diff --git a/mtd.c b/mtd.c
index 976024e..5385147 100644
--- a/mtd.c
+++ b/mtd.c
@@ -35,6 +35,11 @@
#else
# include <mtd/mtd-abi.h>
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0)
+# include "ubi-user.h"
+#else
+# include <mtd/ubi-user.h>
+#endif
static const struct xlat mtd_mode_options[] = {
{ MTD_OPS_PLACE_OOB, "MTD_OPS_PLACE_OOB" },
@@ -267,7 +272,7 @@
if (!verbose(tcp) || umove(tcp, arg, &i) < 0)
return 0;
- tprintf(", [%i]", i);
+ tprintf(", [%d]", i);
return 1;
case MTDFILEMODE:
@@ -280,3 +285,124 @@
return 0;
}
}
+
+static const struct xlat ubi_volume_types[] = {
+ { UBI_DYNAMIC_VOLUME, "UBI_DYNAMIC_VOLUME" },
+ { UBI_STATIC_VOLUME, "UBI_STATIC_VOLUME" },
+ { 0, NULL },
+};
+
+static const struct xlat ubi_volume_props[] = {
+ { UBI_VOL_PROP_DIRECT_WRITE, "UBI_VOL_PROP_DIRECT_WRITE" },
+ { 0, NULL },
+};
+
+int ubi_ioctl(struct tcb *tcp, long code, long arg)
+{
+ struct ubi_mkvol_req mkvol;
+ struct ubi_rsvol_req rsvol;
+ struct ubi_rnvol_req rnvol;
+ struct ubi_attach_req attach;
+ struct ubi_map_req map;
+ struct ubi_set_vol_prop_req prop;
+ /* 4*(n-1) + 3 for quotes and NUL */
+ char vol_name[(UBI_MAX_VOLUME_NAME + 1) * 4];
+ int ret;
+
+ if (entering(tcp))
+ return 0;
+
+ switch (code) {
+ case UBI_IOCMKVOL:
+ if (!verbose(tcp) || umove(tcp, arg, &mkvol) < 0)
+ return 0;
+
+ tprintf(", {vol_id=%" PRIi32 ", alignment=%" PRIi32
+ ", bytes=%" PRIi64 ", vol_type=", mkvol.vol_id,
+ mkvol.alignment, (int64_t)mkvol.bytes);
+ printxval(ubi_volume_types, mkvol.vol_type, "UBI_???_VOLUME");
+ ret = string_quote(mkvol.name, vol_name, -1,
+ CLAMP(mkvol.name_len, 0, UBI_MAX_VOLUME_NAME));
+ tprintf(", name_len=%" PRIi16 ", name=%s%s",
+ mkvol.name_len, vol_name, ret ? "..." : "");
+ tprints("}");
+ return 1;
+
+ case UBI_IOCRSVOL:
+ if (!verbose(tcp) || umove(tcp, arg, &rsvol) < 0)
+ return 0;
+
+ tprintf(", {vol_id=%" PRIi32 ", bytes=%" PRIi64 "}",
+ rsvol.vol_id, (int64_t)rsvol.bytes);
+ return 1;
+
+ case UBI_IOCRNVOL: {
+ __s32 c;
+
+ if (!verbose(tcp) || umove(tcp, arg, &rnvol) < 0)
+ return 0;
+
+ tprintf(", {count=%" PRIi32 ", ents=[", rnvol.count);
+ for (c = 0; c < CLAMP(rnvol.count, 0, UBI_MAX_RNVOL); ++c) {
+ if (c)
+ tprints(", ");
+ ret = string_quote(rnvol.ents[c].name, vol_name, -1,
+ CLAMP(rnvol.ents[c].name_len, 0, UBI_MAX_VOLUME_NAME));
+ tprintf("{vol_id=%" PRIi32 ", name_len=%" PRIi16
+ ", name=%s%s}", rnvol.ents[c].vol_id,
+ rnvol.ents[c].name_len, vol_name, ret ? "..." : "");
+ }
+ tprints("]}");
+ return 1;
+ }
+
+ case UBI_IOCVOLUP: {
+ __s64 bytes;
+
+ if (!verbose(tcp) || umove(tcp, arg, &bytes) < 0)
+ return 0;
+
+ tprintf(", %" PRIi64, (int64_t)bytes);
+ return 1;
+ }
+
+ case UBI_IOCATT:
+ if (!verbose(tcp) || umove(tcp, arg, &attach) < 0)
+ return 0;
+
+ tprintf(", {ubi_num=%" PRIi32 ", mtd_num=%" PRIi32
+ ", vid_hdr_offset=%" PRIi32
+ ", max_beb_per1024=%" PRIi16 "}",
+ attach.ubi_num, attach.mtd_num,
+ attach.vid_hdr_offset, attach.max_beb_per1024);
+ return 1;
+
+ case UBI_IOCEBMAP:
+ if (!verbose(tcp) || umove(tcp, arg, &map) < 0)
+ return 0;
+
+ tprintf(", {lnum=%" PRIi32 ", dtype=%" PRIi8 "}",
+ map.lnum, map.dtype);
+ return 1;
+
+ case UBI_IOCSETVOLPROP:
+ if (!verbose(tcp) || umove(tcp, arg, &prop) < 0)
+ return 0;
+
+ tprints(", {property=");
+ printxval(ubi_volume_props, prop.property, "UBI_VOL_PROP_???");
+ tprintf(", value=%#" PRIx64 "}", (uint64_t)prop.value);
+ return 1;
+
+ case UBI_IOCRMVOL:
+ case UBI_IOCDET:
+ case UBI_IOCEBER:
+ case UBI_IOCEBCH:
+ case UBI_IOCEBUNMAP:
+ case UBI_IOCEBISMAP:
+ /* These ones take simple args, so let default printer handle it */
+
+ default:
+ return 0;
+ }
+}
diff --git a/net.c b/net.c
index 2911c73..9ae783a 100644
--- a/net.c
+++ b/net.c
@@ -50,13 +50,13 @@
#include <arpa/inet.h>
#include <net/if.h>
#include <asm/types.h>
-#if defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC__ + __GLIBC_MINOR__ >= 3)
+#if defined(__GLIBC__)
# include <netipx/ipx.h>
#else
# include <linux/ipx.h>
#endif
-#if defined(__GLIBC__) && (((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1)) || defined(HAVE_SIN6_SCOPE_ID_LINUX))
+#if defined(__GLIBC__) && defined(HAVE_SIN6_SCOPE_ID_LINUX)
# if defined(HAVE_LINUX_IN6_H)
# if defined(HAVE_SIN6_SCOPE_ID_LINUX)
# undef in6_addr
@@ -103,200 +103,254 @@
#define IPPROTO_MAX IPPROTO_MAX
static const struct xlat domains[] = {
-#ifdef PF_AAL5
- { PF_AAL5, "PF_AAL5" },
-#endif
-#ifdef PF_APPLETALK
- { PF_APPLETALK, "PF_APPLETALK" },
-#endif
-#ifdef PF_ASH
- { PF_ASH, "PF_ASH" },
-#endif
-#ifdef PF_ATMPVC
- { PF_ATMPVC, "PF_ATMPVC" },
-#endif
-#ifdef PF_ATMSVC
- { PF_ATMSVC, "PF_ATMSVC" },
-#endif
-#ifdef PF_AX25
- { PF_AX25, "PF_AX25" },
-#endif
-#ifdef PF_BLUETOOTH
- { PF_BLUETOOTH, "PF_BLUETOOTH" },
-#endif
-#ifdef PF_BRIDGE
- { PF_BRIDGE, "PF_BRIDGE" },
-#endif
-#ifdef PF_DECnet
- { PF_DECnet, "PF_DECnet" },
-#endif
-#ifdef PF_DECNET
- { PF_DECNET, "PF_DECNET" },
-#endif
-#ifdef PF_ECONET
- { PF_ECONET, "PF_ECONET" },
-#endif
-#ifdef PF_FILE
- { PF_FILE, "PF_FILE" },
-#endif
-#ifdef PF_IMPLINK
- { PF_IMPLINK, "PF_IMPLINK" },
-#endif
-#ifdef PF_INET
- { PF_INET, "PF_INET" },
-#endif
-#ifdef PF_INET6
- { PF_INET6, "PF_INET6" },
-#endif
-#ifdef PF_IPX
- { PF_IPX, "PF_IPX" },
-#endif
-#ifdef PF_IRDA
- { PF_IRDA, "PF_IRDA" },
-#endif
-#ifdef PF_ISO
- { PF_ISO, "PF_ISO" },
-#endif
-#ifdef PF_KEY
- { PF_KEY, "PF_KEY" },
-#endif
-#ifdef PF_UNIX
- { PF_UNIX, "PF_UNIX" },
+#ifdef PF_UNSPEC
+ { PF_UNSPEC, "PF_UNSPEC" },
#endif
#ifdef PF_LOCAL
{ PF_LOCAL, "PF_LOCAL" },
#endif
-#ifdef PF_NETBEUI
- { PF_NETBEUI, "PF_NETBEUI" },
+#ifdef PF_UNIX
+ { PF_UNIX, "PF_UNIX" },
#endif
-#ifdef PF_NETLINK
- { PF_NETLINK, "PF_NETLINK" },
+#ifdef PF_INET
+ { PF_INET, "PF_INET" },
+#endif
+#ifdef PF_AX25
+ { PF_AX25, "PF_AX25" },
+#endif
+#ifdef PF_IPX
+ { PF_IPX, "PF_IPX" },
+#endif
+#ifdef PF_APPLETALK
+ { PF_APPLETALK, "PF_APPLETALK" },
#endif
#ifdef PF_NETROM
{ PF_NETROM, "PF_NETROM" },
#endif
-#ifdef PF_PACKET
- { PF_PACKET, "PF_PACKET" },
+#ifdef PF_BRIDGE
+ { PF_BRIDGE, "PF_BRIDGE" },
#endif
-#ifdef PF_PPPOX
- { PF_PPPOX, "PF_PPPOX" },
-#endif
-#ifdef PF_ROSE
- { PF_ROSE, "PF_ROSE" },
-#endif
-#ifdef PF_ROUTE
- { PF_ROUTE, "PF_ROUTE" },
-#endif
-#ifdef PF_SECURITY
- { PF_SECURITY, "PF_SECURITY" },
-#endif
-#ifdef PF_SNA
- { PF_SNA, "PF_SNA" },
-#endif
-#ifdef PF_UNSPEC
- { PF_UNSPEC, "PF_UNSPEC" },
-#endif
-#ifdef PF_WANPIPE
- { PF_WANPIPE, "PF_WANPIPE" },
+#ifdef PF_ATMPVC
+ { PF_ATMPVC, "PF_ATMPVC" },
#endif
#ifdef PF_X25
{ PF_X25, "PF_X25" },
#endif
+#ifdef PF_INET6
+ { PF_INET6, "PF_INET6" },
+#endif
+#ifdef PF_ROSE
+ { PF_ROSE, "PF_ROSE" },
+#endif
+#ifdef PF_DECnet
+ { PF_DECnet, "PF_DECnet" },
+#endif
+#ifdef PF_NETBEUI
+ { PF_NETBEUI, "PF_NETBEUI" },
+#endif
+#ifdef PF_SECURITY
+ { PF_SECURITY, "PF_SECURITY" },
+#endif
+#ifdef PF_KEY
+ { PF_KEY, "PF_KEY" },
+#endif
+#ifdef PF_NETLINK
+ { PF_NETLINK, "PF_NETLINK" },
+#endif
+#ifdef PF_ROUTE
+ { PF_ROUTE, "PF_ROUTE" },
+#endif
+#ifdef PF_PACKET
+ { PF_PACKET, "PF_PACKET" },
+#endif
+#ifdef PF_ASH
+ { PF_ASH, "PF_ASH" },
+#endif
+#ifdef PF_ECONET
+ { PF_ECONET, "PF_ECONET" },
+#endif
+#ifdef PF_ATMSVC
+ { PF_ATMSVC, "PF_ATMSVC" },
+#endif
+#ifdef PF_RDS
+ { PF_RDS, "PF_RDS" },
+#endif
+#ifdef PF_SNA
+ { PF_SNA, "PF_SNA" },
+#endif
+#ifdef PF_IRDA
+ { PF_IRDA, "PF_IRDA" },
+#endif
+#ifdef PF_PPPOX
+ { PF_PPPOX, "PF_PPPOX" },
+#endif
+#ifdef PF_WANPIPE
+ { PF_WANPIPE, "PF_WANPIPE" },
+#endif
+#ifdef PF_LLC
+ { PF_LLC, "PF_LLC" },
+#endif
+#ifdef PF_CAN
+ { PF_CAN, "PF_CAN" },
+#endif
+#ifdef PF_TIPC
+ { PF_TIPC, "PF_TIPC" },
+#endif
+#ifdef PF_BLUETOOTH
+ { PF_BLUETOOTH, "PF_BLUETOOTH" },
+#endif
+#ifdef PF_IUCV
+ { PF_IUCV, "PF_IUCV" },
+#endif
+#ifdef PF_RXRPC
+ { PF_RXRPC, "PF_RXRPC" },
+#endif
+#ifdef PF_ISDN
+ { PF_ISDN, "PF_ISDN" },
+#endif
+#ifdef PF_PHONET
+ { PF_PHONET, "PF_PHONET" },
+#endif
+#ifdef PF_IEEE802154
+ { PF_IEEE802154,"PF_IEEE802154" },
+#endif
+#ifdef PF_CAIF
+ { PF_CAIF, "PF_CAIF" },
+#endif
+#ifdef PF_ALG
+ { PF_ALG, "PF_ALG" },
+#endif
+#ifdef PF_NFC
+ { PF_NFC, "PF_NFC" },
+#endif
+#ifdef PF_VSOCK
+ { PF_VSOCK, "PF_VSOCK" },
+#endif
{ 0, NULL },
};
const struct xlat addrfams[] = {
-#ifdef AF_APPLETALK
- { AF_APPLETALK, "AF_APPLETALK" },
-#endif
-#ifdef AF_ASH
- { AF_ASH, "AF_ASH" },
-#endif
-#ifdef AF_ATMPVC
- { AF_ATMPVC, "AF_ATMPVC" },
-#endif
-#ifdef AF_ATMSVC
- { AF_ATMSVC, "AF_ATMSVC" },
-#endif
-#ifdef AF_AX25
- { AF_AX25, "AF_AX25" },
-#endif
-#ifdef AF_BLUETOOTH
- { AF_BLUETOOTH, "AF_BLUETOOTH" },
-#endif
-#ifdef AF_BRIDGE
- { AF_BRIDGE, "AF_BRIDGE" },
-#endif
-#ifdef AF_DECnet
- { AF_DECnet, "AF_DECnet" },
-#endif
-#ifdef AF_ECONET
- { AF_ECONET, "AF_ECONET" },
-#endif
-#ifdef AF_FILE
- { AF_FILE, "AF_FILE" },
-#endif
-#ifdef AF_IMPLINK
- { AF_IMPLINK, "AF_IMPLINK" },
-#endif
-#ifdef AF_INET
- { AF_INET, "AF_INET" },
-#endif
-#ifdef AF_INET6
- { AF_INET6, "AF_INET6" },
-#endif
-#ifdef AF_IPX
- { AF_IPX, "AF_IPX" },
-#endif
-#ifdef AF_IRDA
- { AF_IRDA, "AF_IRDA" },
-#endif
-#ifdef AF_ISO
- { AF_ISO, "AF_ISO" },
-#endif
-#ifdef AF_KEY
- { AF_KEY, "AF_KEY" },
-#endif
-#ifdef AF_UNIX
- { AF_UNIX, "AF_UNIX" },
+#ifdef AF_UNSPEC
+ { AF_UNSPEC, "AF_UNSPEC" },
#endif
#ifdef AF_LOCAL
{ AF_LOCAL, "AF_LOCAL" },
#endif
-#ifdef AF_NETBEUI
- { AF_NETBEUI, "AF_NETBEUI" },
+#ifdef AF_UNIX
+ { AF_UNIX, "AF_UNIX" },
#endif
-#ifdef AF_NETLINK
- { AF_NETLINK, "AF_NETLINK" },
+#ifdef AF_INET
+ { AF_INET, "AF_INET" },
+#endif
+#ifdef AF_AX25
+ { AF_AX25, "AF_AX25" },
+#endif
+#ifdef AF_IPX
+ { AF_IPX, "AF_IPX" },
+#endif
+#ifdef AF_APPLETALK
+ { AF_APPLETALK, "AF_APPLETALK" },
#endif
#ifdef AF_NETROM
{ AF_NETROM, "AF_NETROM" },
#endif
-#ifdef AF_PACKET
- { AF_PACKET, "AF_PACKET" },
+#ifdef AF_BRIDGE
+ { AF_BRIDGE, "AF_BRIDGE" },
#endif
-#ifdef AF_PPPOX
- { AF_PPPOX, "AF_PPPOX" },
+#ifdef AF_ATMPVC
+ { AF_ATMPVC, "AF_ATMPVC" },
+#endif
+#ifdef AF_X25
+ { AF_X25, "AF_X25" },
+#endif
+#ifdef AF_INET6
+ { AF_INET6, "AF_INET6" },
#endif
#ifdef AF_ROSE
{ AF_ROSE, "AF_ROSE" },
#endif
-#ifdef AF_ROUTE
- { AF_ROUTE, "AF_ROUTE" },
+#ifdef AF_DECnet
+ { AF_DECnet, "AF_DECnet" },
+#endif
+#ifdef AF_NETBEUI
+ { AF_NETBEUI, "AF_NETBEUI" },
#endif
#ifdef AF_SECURITY
{ AF_SECURITY, "AF_SECURITY" },
#endif
+#ifdef AF_KEY
+ { AF_KEY, "AF_KEY" },
+#endif
+#ifdef AF_NETLINK
+ { AF_NETLINK, "AF_NETLINK" },
+#endif
+#ifdef AF_ROUTE
+ { AF_ROUTE, "AF_ROUTE" },
+#endif
+#ifdef AF_PACKET
+ { AF_PACKET, "AF_PACKET" },
+#endif
+#ifdef AF_ASH
+ { AF_ASH, "AF_ASH" },
+#endif
+#ifdef AF_ECONET
+ { AF_ECONET, "AF_ECONET" },
+#endif
+#ifdef AF_ATMSVC
+ { AF_ATMSVC, "AF_ATMSVC" },
+#endif
+#ifdef AF_RDS
+ { AF_RDS, "AF_RDS" },
+#endif
#ifdef AF_SNA
{ AF_SNA, "AF_SNA" },
#endif
-#ifdef AF_UNSPEC
- { AF_UNSPEC, "AF_UNSPEC" },
+#ifdef AF_IRDA
+ { AF_IRDA, "AF_IRDA" },
+#endif
+#ifdef AF_PPPOX
+ { AF_PPPOX, "AF_PPPOX" },
#endif
#ifdef AF_WANPIPE
{ AF_WANPIPE, "AF_WANPIPE" },
#endif
-#ifdef AF_X25
- { AF_X25, "AF_X25" },
+#ifdef AF_LLC
+ { AF_LLC, "AF_LLC" },
+#endif
+#ifdef AF_CAN
+ { AF_CAN, "AF_CAN" },
+#endif
+#ifdef AF_TIPC
+ { AF_TIPC, "AF_TIPC" },
+#endif
+#ifdef AF_BLUETOOTH
+ { AF_BLUETOOTH, "AF_BLUETOOTH" },
+#endif
+#ifdef AF_IUCV
+ { AF_IUCV, "AF_IUCV" },
+#endif
+#ifdef AF_RXRPC
+ { AF_RXRPC, "AF_RXRPC" },
+#endif
+#ifdef AF_ISDN
+ { AF_ISDN, "AF_ISDN" },
+#endif
+#ifdef AF_PHONET
+ { AF_PHONET, "AF_PHONET" },
+#endif
+#ifdef AF_IEEE802154
+ { AF_IEEE802154,"AF_IEEE802154" },
+#endif
+#ifdef AF_CAIF
+ { AF_CAIF, "AF_CAIF" },
+#endif
+#ifdef AF_ALG
+ { AF_ALG, "AF_ALG" },
+#endif
+#ifdef AF_NFC
+ { AF_NFC, "AF_NFC" },
+#endif
+#ifdef AF_VSOCK
+ { AF_VSOCK, "AF_VSOCK" },
#endif
{ 0, NULL },
};
@@ -527,17 +581,23 @@
};
static const struct xlat msg_flags[] = {
{ MSG_OOB, "MSG_OOB" },
-#ifdef MSG_DONTROUTE
- { MSG_DONTROUTE, "MSG_DONTROUTE" },
-#endif
#ifdef MSG_PEEK
{ MSG_PEEK, "MSG_PEEK" },
#endif
+#ifdef MSG_DONTROUTE
+ { MSG_DONTROUTE, "MSG_DONTROUTE" },
+#endif
#ifdef MSG_CTRUNC
{ MSG_CTRUNC, "MSG_CTRUNC" },
#endif
-#ifdef MSG_PROXY
- { MSG_PROXY, "MSG_PROXY" },
+#ifdef MSG_PROBE
+ { MSG_PROBE, "MSG_PROBE" },
+#endif
+#ifdef MSG_TRUNC
+ { MSG_TRUNC, "MSG_TRUNC" },
+#endif
+#ifdef MSG_DONTWAIT
+ { MSG_DONTWAIT, "MSG_DONTWAIT" },
#endif
#ifdef MSG_EOR
{ MSG_EOR, "MSG_EOR" },
@@ -545,33 +605,21 @@
#ifdef MSG_WAITALL
{ MSG_WAITALL, "MSG_WAITALL" },
#endif
-#ifdef MSG_TRUNC
- { MSG_TRUNC, "MSG_TRUNC" },
-#endif
-#ifdef MSG_CTRUNC
- { MSG_CTRUNC, "MSG_CTRUNC" },
-#endif
-#ifdef MSG_ERRQUEUE
- { MSG_ERRQUEUE, "MSG_ERRQUEUE" },
-#endif
-#ifdef MSG_DONTWAIT
- { MSG_DONTWAIT, "MSG_DONTWAIT" },
-#endif
-#ifdef MSG_CONFIRM
- { MSG_CONFIRM, "MSG_CONFIRM" },
-#endif
-#ifdef MSG_PROBE
- { MSG_PROBE, "MSG_PROBE" },
-#endif
#ifdef MSG_FIN
{ MSG_FIN, "MSG_FIN" },
#endif
#ifdef MSG_SYN
{ MSG_SYN, "MSG_SYN" },
#endif
+#ifdef MSG_CONFIRM
+ { MSG_CONFIRM, "MSG_CONFIRM" },
+#endif
#ifdef MSG_RST
{ MSG_RST, "MSG_RST" },
#endif
+#ifdef MSG_ERRQUEUE
+ { MSG_ERRQUEUE, "MSG_ERRQUEUE" },
+#endif
#ifdef MSG_NOSIGNAL
{ MSG_NOSIGNAL, "MSG_NOSIGNAL" },
#endif
@@ -581,6 +629,12 @@
#ifdef MSG_WAITFORONE
{ MSG_WAITFORONE, "MSG_WAITFORONE" },
#endif
+#ifdef MSG_EOF
+ { MSG_EOF, "MSG_EOF" },
+#endif
+#ifdef MSG_FASTOPEN
+ { MSG_FASTOPEN, "MSG_FASTOPEN" },
+#endif
#ifdef MSG_CMSG_CLOEXEC
{ MSG_CMSG_CLOEXEC, "MSG_CMSG_CLOEXEC" },
#endif
@@ -1072,56 +1126,71 @@
static const struct xlat socktcpoptions[] = {
{ TCP_NODELAY, "TCP_NODELAY" },
{ TCP_MAXSEG, "TCP_MAXSEG" },
-#if defined(TCP_CORK)
+#ifdef TCP_CORK
{ TCP_CORK, "TCP_CORK" },
#endif
-#if defined(TCP_KEEPIDLE)
- { TCP_KEEPIDLE, "TCP_KEEPIDLE" },
+#ifdef TCP_KEEPIDLE
+ { TCP_KEEPIDLE, "TCP_KEEPIDLE" },
#endif
-#if defined(TCP_KEEPINTVL)
- { TCP_KEEPINTVL, "TCP_KEEPINTVL" },
+#ifdef TCP_KEEPINTVL
+ { TCP_KEEPINTVL, "TCP_KEEPINTVL" },
#endif
-#if defined(TCP_KEEPCNT)
- { TCP_KEEPCNT, "TCP_KEEPCNT" },
+#ifdef TCP_KEEPCNT
+ { TCP_KEEPCNT, "TCP_KEEPCNT" },
#endif
-#if defined(TCP_NKEEP)
- { TCP_NKEEP, "TCP_NKEEP" },
+#ifdef TCP_SYNCNT
+ { TCP_SYNCNT, "TCP_SYNCNT" },
#endif
-#if defined(TCP_SYNCNT)
- { TCP_SYNCNT, "TCP_SYNCNT" },
+#ifdef TCP_LINGER2
+ { TCP_LINGER2, "TCP_LINGER2" },
#endif
-#if defined(TCP_LINGER2)
- { TCP_LINGER2, "TCP_LINGER2" },
+#ifdef TCP_DEFER_ACCEPT
+ { TCP_DEFER_ACCEPT, "TCP_DEFER_ACCEPT" },
#endif
-#if defined(TCP_DEFER_ACCEPT)
- { TCP_DEFER_ACCEPT, "TCP_DEFER_ACCEPT" },
+#ifdef TCP_WINDOW_CLAMP
+ { TCP_WINDOW_CLAMP, "TCP_WINDOW_CLAMP" },
#endif
-#if defined(TCP_WINDOW_CLAMP)
- { TCP_WINDOW_CLAMP, "TCP_WINDOW_CLAMP" },
+#ifdef TCP_INFO
+ { TCP_INFO, "TCP_INFO" },
#endif
-#if defined(TCP_INFO)
- { TCP_INFO, "TCP_INFO" },
+#ifdef TCP_QUICKACK
+ { TCP_QUICKACK, "TCP_QUICKACK" },
#endif
-#if defined(TCP_QUICKACK)
- { TCP_QUICKACK, "TCP_QUICKACK" },
+#ifdef TCP_CONGESTION
+ { TCP_CONGESTION, "TCP_CONGESTION" },
#endif
-#if defined(TCP_CONGESTION)
- { TCP_CONGESTION, "TCP_CONGESTION" },
+#ifdef TCP_MD5SIG
+ { TCP_MD5SIG, "TCP_MD5SIG" },
#endif
-#if defined(TCP_MD5SIG)
- { TCP_MD5SIG, "TCP_MD5SIG" },
+#ifdef TCP_COOKIE_TRANSACTIONS
+ { TCP_COOKIE_TRANSACTIONS, "TCP_COOKIE_TRANSACTIONS" },
#endif
-#if defined(TCP_COOKIE_TRANSACTIONS)
- { TCP_COOKIE_TRANSACTIONS, "TCP_COOKIE_TRANSACTIONS" },
+#ifdef TCP_THIN_LINEAR_TIMEOUTS
+ { TCP_THIN_LINEAR_TIMEOUTS, "TCP_THIN_LINEAR_TIMEOUTS" },
#endif
-#if defined(TCP_THIN_LINEAR_TIMEOUTS)
- { TCP_THIN_LINEAR_TIMEOUTS, "TCP_THIN_LINEAR_TIMEOUTS" },
+#ifdef TCP_THIN_DUPACK
+ { TCP_THIN_DUPACK, "TCP_THIN_DUPACK" },
#endif
-#if defined(TCP_THIN_DUPACK)
- { TCP_THIN_DUPACK, "TCP_THIN_DUPACK" },
+#ifdef TCP_USER_TIMEOUT
+ { TCP_USER_TIMEOUT, "TCP_USER_TIMEOUT" },
#endif
-#if defined(TCP_USER_TIMEOUT)
- { TCP_USER_TIMEOUT, "TCP_USER_TIMEOUT" },
+#ifdef TCP_REPAIR
+ { TCP_REPAIR, "TCP_REPAIR" },
+#endif
+#ifdef TCP_REPAIR_QUEUE
+ { TCP_REPAIR_QUEUE, "TCP_REPAIR_QUEUE" },
+#endif
+#ifdef TCP_QUEUE_SEQ
+ { TCP_QUEUE_SEQ, "TCP_QUEUE_SEQ" },
+#endif
+#ifdef TCP_REPAIR_OPTIONS
+ { TCP_REPAIR_OPTIONS, "TCP_REPAIR_OPTIONS" },
+#endif
+#ifdef TCP_FASTOPEN
+ { TCP_FASTOPEN, "TCP_FASTOPEN" },
+#endif
+#ifdef TCP_TIMESTAMP
+ { TCP_TIMESTAMP, "TCP_TIMESTAMP" },
#endif
{ 0, NULL },
};
@@ -1428,11 +1497,42 @@
tprints("}");
}
+struct msghdr32 {
+ uint32_t /* void* */ msg_name;
+ uint32_t /* socklen_t */msg_namelen;
+ uint32_t /* iovec* */ msg_iov;
+ uint32_t /* size_t */ msg_iovlen;
+ uint32_t /* void* */ msg_control;
+ uint32_t /* size_t */ msg_controllen;
+ uint32_t /* int */ msg_flags;
+};
+struct mmsghdr32 {
+ struct msghdr32 msg_hdr;
+ uint32_t /* unsigned */ msg_len;
+};
+
static void
printmsghdr(struct tcb *tcp, long addr, unsigned long data_size)
{
struct msghdr msg;
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+ if (current_wordsize == 4) {
+ struct msghdr32 msg32;
+
+ if (umove(tcp, addr, &msg32) < 0) {
+ tprintf("%#lx", addr);
+ return;
+ }
+ msg.msg_name = (void*)(long)msg32.msg_name;
+ msg.msg_namelen = msg32.msg_namelen;
+ msg.msg_iov = (void*)(long)msg32.msg_iov;
+ msg.msg_iovlen = msg32.msg_iovlen;
+ msg.msg_control = (void*)(long)msg32.msg_control;
+ msg.msg_controllen = msg32.msg_controllen;
+ msg.msg_flags = msg32.msg_flags;
+ } else
+#endif
if (umove(tcp, addr, &msg) < 0) {
tprintf("%#lx", addr);
return;
@@ -1448,10 +1548,31 @@
unsigned msg_len;
} mmsg;
- addr += sizeof(mmsg) * idx;
- if (umove(tcp, addr, &mmsg) < 0) {
- tprintf("%#lx", addr);
- return;
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+ if (current_wordsize == 4) {
+ struct mmsghdr32 mmsg32;
+
+ addr += sizeof(mmsg32) * idx;
+ if (umove(tcp, addr, &mmsg32) < 0) {
+ tprintf("%#lx", addr);
+ return;
+ }
+ mmsg.msg_hdr.msg_name = (void*)(long)mmsg32.msg_hdr.msg_name;
+ mmsg.msg_hdr.msg_namelen = mmsg32.msg_hdr.msg_namelen;
+ mmsg.msg_hdr.msg_iov = (void*)(long)mmsg32.msg_hdr.msg_iov;
+ mmsg.msg_hdr.msg_iovlen = mmsg32.msg_hdr.msg_iovlen;
+ mmsg.msg_hdr.msg_control = (void*)(long)mmsg32.msg_hdr.msg_control;
+ mmsg.msg_hdr.msg_controllen = mmsg32.msg_hdr.msg_controllen;
+ mmsg.msg_hdr.msg_flags = mmsg32.msg_hdr.msg_flags;
+ mmsg.msg_len = mmsg32.msg_len;
+ } else
+#endif
+ {
+ addr += sizeof(mmsg) * idx;
+ if (umove(tcp, addr, &mmsg) < 0) {
+ tprintf("%#lx", addr);
+ return;
+ }
}
tprints("{");
do_msghdr(tcp, &mmsg.msg_hdr, msg_len ? msg_len : mmsg.msg_len);
diff --git a/pathtrace.c b/pathtrace.c
index c000c83..d4c2dc4 100644
--- a/pathtrace.c
+++ b/pathtrace.c
@@ -37,8 +37,8 @@
#include "syscall.h"
-#define MAXSELECTED 256 /* max number of "selected" paths */
-static const char *selected[MAXSELECTED]; /* paths selected for tracing */
+const char **paths_selected = NULL;
+static unsigned num_selected = 0;
/*
* Return true if specified path matches one that we're tracing.
@@ -46,12 +46,10 @@
static int
pathmatch(const char *path)
{
- unsigned int i;
+ unsigned i;
- for (i = 0; i < ARRAY_SIZE(selected); ++i) {
- if (selected[i] == NULL)
- return 0;
- if (strcmp(path, selected[i]) == 0)
+ for (i = 0; i < num_selected; ++i) {
+ if (strcmp(path, paths_selected[i]) == 0)
return 1;
}
return 0;
@@ -65,7 +63,7 @@
{
char path[PATH_MAX + 1];
- return umovestr(tcp, upath, sizeof path, path) >= 0 &&
+ return umovestr(tcp, upath, sizeof path, path) > 0 &&
pathmatch(path);
}
@@ -75,79 +73,79 @@
static int
fdmatch(struct tcb *tcp, int fd)
{
- const char *path = getfdpath(tcp, fd);
+ char path[PATH_MAX + 1];
+ int n = getfdpath(tcp, fd, path, sizeof(path));
- return path && pathmatch(path);
+ return n >= 0 && pathmatch(path);
}
/*
* Add a path to the set we're tracing.
* Secifying NULL will delete all paths.
*/
-static int
+static void
storepath(const char *path)
{
- unsigned int i;
+ unsigned i;
- for (i = 0; i < ARRAY_SIZE(selected); ++i) {
- if (!selected[i]) {
- selected[i] = path;
- return 0;
- }
- }
+ if (pathmatch(path))
+ return; /* already in table */
- fprintf(stderr, "Max trace paths exceeded, only using first %u\n",
- (unsigned int) ARRAY_SIZE(selected));
- return -1;
+ i = num_selected++;
+ paths_selected = realloc(paths_selected, num_selected * sizeof(paths_selected[0]));
+ if (!paths_selected)
+ die_out_of_memory();
+ paths_selected[i] = path;
}
/*
* Get path associated with fd.
*/
-const char *
-getfdpath(struct tcb *tcp, int fd)
+int
+getfdpath(struct tcb *tcp, int fd, char *buf, unsigned bufsize)
{
- static char path[PATH_MAX+1];
char linkpath[sizeof("/proc/%u/fd/%u") + 2 * sizeof(int)*3];
ssize_t n;
if (fd < 0)
- return NULL;
+ return -1;
sprintf(linkpath, "/proc/%u/fd/%u", tcp->pid, fd);
- n = readlink(linkpath, path, (sizeof path) - 1);
- if (n <= 0)
- return NULL;
- path[n] = '\0';
- return path;
+ n = readlink(linkpath, buf, bufsize - 1);
+ /*
+ * NB: if buf is too small, readlink doesn't fail,
+ * it returns truncated result (IOW: n == bufsize - 1).
+ */
+ if (n >= 0)
+ buf[n] = '\0';
+ return n;
}
/*
* Add a path to the set we're tracing. Also add the canonicalized
* version of the path. Secifying NULL will delete all paths.
*/
-int
+void
pathtrace_select(const char *path)
{
char *rpath;
- if (storepath(path))
- return -1;
+ storepath(path);
rpath = realpath(path, NULL);
if (rpath == NULL)
- return 0;
+ return;
/* if realpath and specified path are same, we're done */
if (strcmp(path, rpath) == 0) {
free(rpath);
- return 0;
+ return;
}
fprintf(stderr, "Requested path '%s' resolved into '%s'\n",
path, rpath);
- return storepath(rpath);
+ storepath(rpath);
}
/*
@@ -157,15 +155,9 @@
int
pathtrace_match(struct tcb *tcp)
{
- const struct sysent *s;
+ const struct_sysent *s;
- if (selected[0] == NULL)
- return 1;
-
- if (!SCNO_IN_RANGE(tcp->scno))
- return 0;
-
- s = &sysent[tcp->scno];
+ s = tcp->s_ent;
if (!(s->sys_flags & (TRACE_FILE | TRACE_DESC)))
return 0;
@@ -213,6 +205,12 @@
upathmatch(tcp, tcp->u_arg[1]);
}
+ if (s->sys_func == sys_quotactl)
+ {
+ /* x, path */
+ return upathmatch(tcp, tcp->u_arg[1]);
+ }
+
if (s->sys_func == sys_renameat ||
s->sys_func == sys_linkat)
{
@@ -225,7 +223,13 @@
if (
s->sys_func == sys_old_mmap ||
- s->sys_func == sys_mmap) {
+#if defined(S390)
+ s->sys_func == sys_old_mmap_pgoff ||
+#endif
+ s->sys_func == sys_mmap ||
+ s->sys_func == sys_mmap_pgoff ||
+ s->sys_func == sys_mmap_4koff
+ ) {
/* x, x, x, x, fd */
return fdmatch(tcp, tcp->u_arg[4]);
}
diff --git a/process.c b/process.c
index fa304e5..799a314 100644
--- a/process.c
+++ b/process.c
@@ -41,6 +41,9 @@
#include <sys/resource.h>
#include <sys/utsname.h>
#include <sys/user.h>
+#ifdef HAVE_ELF_H
+# include <elf.h>
+#endif
#ifdef HAVE_SYS_REG_H
# include <sys/reg.h>
@@ -156,6 +159,7 @@
#ifdef PR_PTHREADEXIT
{ PR_PTHREADEXIT, "PR_PTHREADEXIT" },
#endif
+
#ifdef PR_SET_PDEATHSIG
{ PR_SET_PDEATHSIG, "PR_SET_PDEATHSIG" },
#endif
@@ -216,6 +220,12 @@
#ifdef PR_SET_SECCOMP
{ PR_SET_SECCOMP, "PR_SET_SECCOMP" },
#endif
+#ifdef PR_CAPBSET_READ
+ { PR_CAPBSET_READ, "PR_CAPBSET_READ" },
+#endif
+#ifdef PR_CAPBSET_DROP
+ { PR_CAPBSET_DROP, "PR_CAPBSET_DROP" },
+#endif
#ifdef PR_GET_TSC
{ PR_GET_TSC, "PR_GET_TSC" },
#endif
@@ -228,6 +238,45 @@
#ifdef PR_SET_SECUREBITS
{ PR_SET_SECUREBITS, "PR_SET_SECUREBITS" },
#endif
+#ifdef PR_SET_TIMERSLACK
+ { PR_SET_TIMERSLACK, "PR_SET_TIMERSLACK" },
+#endif
+#ifdef PR_GET_TIMERSLACK
+ { PR_GET_TIMERSLACK, "PR_GET_TIMERSLACK" },
+#endif
+#ifdef PR_TASK_PERF_EVENTS_DISABLE
+ { PR_TASK_PERF_EVENTS_DISABLE, "PR_TASK_PERF_EVENTS_DISABLE" },
+#endif
+#ifdef PR_TASK_PERF_EVENTS_ENABLE
+ { PR_TASK_PERF_EVENTS_ENABLE, "PR_TASK_PERF_EVENTS_ENABLE" },
+#endif
+#ifdef PR_MCE_KILL
+ { PR_MCE_KILL, "PR_MCE_KILL" },
+#endif
+#ifdef PR_MCE_KILL_GET
+ { PR_MCE_KILL_GET, "PR_MCE_KILL_GET" },
+#endif
+#ifdef PR_SET_MM
+ { PR_SET_MM, "PR_SET_MM" },
+#endif
+#ifdef PR_SET_PTRACER
+ { PR_SET_PTRACER, "PR_SET_PTRACER" },
+#endif
+#ifdef PR_SET_CHILD_SUBREAPER
+ { PR_SET_CHILD_SUBREAPER, "PR_SET_CHILD_SUBREAPER" },
+#endif
+#ifdef PR_GET_CHILD_SUBREAPER
+ { PR_GET_CHILD_SUBREAPER, "PR_GET_CHILD_SUBREAPER" },
+#endif
+#ifdef PR_SET_NO_NEW_PRIVS
+ { PR_SET_NO_NEW_PRIVS, "PR_SET_NO_NEW_PRIVS" },
+#endif
+#ifdef PR_GET_NO_NEW_PRIVS
+ { PR_GET_NO_NEW_PRIVS, "PR_GET_NO_NEW_PRIVS" },
+#endif
+#ifdef PR_GET_TID_ADDRESS
+ { PR_GET_TID_ADDRESS, "PR_GET_TID_ADDRESS" },
+#endif
{ 0, NULL },
};
@@ -302,7 +351,7 @@
break;
#endif
default:
- for (i = 1; i < tcp->u_nargs; i++)
+ for (i = 1; i < tcp->s_ent->nargs; i++)
tprintf(", %#lx", tcp->u_arg[i]);
break;
}
@@ -465,7 +514,8 @@
# define ARG_PTID 2
# define ARG_CTID 3
# define ARG_TLS 4
-#elif defined X86_64 || defined X32 || defined ALPHA
+#elif defined X86_64 || defined X32 || defined ALPHA || defined TILE \
+ || defined OR1K
# define ARG_FLAGS 0
# define ARG_STACK 1
# define ARG_PTID 2
@@ -1126,26 +1176,17 @@
int
sys_waitid(struct tcb *tcp)
{
- siginfo_t si;
-
if (entering(tcp)) {
printxval(waitid_types, tcp->u_arg[0], "P_???");
tprintf(", %ld, ", tcp->u_arg[1]);
}
else {
/* siginfo */
- if (!tcp->u_arg[2])
- tprints("NULL");
- else if (syserror(tcp))
- tprintf("%#lx", tcp->u_arg[2]);
- else if (umove(tcp, tcp->u_arg[2], &si) < 0)
- tprints("{???}");
- else
- printsiginfo(&si, verbose(tcp));
+ printsiginfo_at(tcp, tcp->u_arg[2]);
/* options */
tprints(", ");
printflags(wait4_options, tcp->u_arg[3], "W???");
- if (tcp->u_nargs > 4) {
+ if (tcp->s_ent->nargs > 4) {
/* usage */
tprints(", ");
if (!tcp->u_arg[4])
@@ -1282,10 +1323,89 @@
# ifdef PTRACE_O_TRACEEXIT
{ PTRACE_O_TRACEEXIT, "PTRACE_O_TRACEEXIT" },
# endif
+# ifdef PTRACE_O_TRACESECCOMP
+ { PTRACE_O_TRACESECCOMP,"PTRACE_O_TRACESECCOMP" },
+# endif
+# ifdef PTRACE_O_EXITKILL
+ { PTRACE_O_EXITKILL, "PTRACE_O_EXITKILL" },
+# endif
{ 0, NULL },
};
#endif /* PTRACE_SETOPTIONS */
+static const struct xlat nt_descriptor_types[] = {
+#ifdef NT_PRSTATUS
+ { NT_PRSTATUS, "NT_PRSTATUS" },
+#endif
+#ifdef NT_FPREGSET
+ { NT_FPREGSET, "NT_FPREGSET" },
+#endif
+#ifdef NT_PRPSINFO
+ { NT_PRPSINFO, "NT_PRPSINFO" },
+#endif
+#ifdef NT_PRXREG
+ { NT_PRXREG, "NT_PRXREG" },
+#endif
+#ifdef NT_TASKSTRUCT
+ { NT_TASKSTRUCT, "NT_TASKSTRUCT" },
+#endif
+#ifdef NT_PLATFORM
+ { NT_PLATFORM, "NT_PLATFORM" },
+#endif
+#ifdef NT_AUXV
+ { NT_AUXV, "NT_AUXV" },
+#endif
+#ifdef NT_GWINDOWS
+ { NT_GWINDOWS, "NT_GWINDOWS" },
+#endif
+#ifdef NT_ASRS
+ { NT_ASRS, "NT_ASRS" },
+#endif
+#ifdef NT_PSTATUS
+ { NT_PSTATUS, "NT_PSTATUS" },
+#endif
+#ifdef NT_PSINFO
+ { NT_PSINFO, "NT_PSINFO" },
+#endif
+#ifdef NT_PRCRED
+ { NT_PRCRED, "NT_PRCRED" },
+#endif
+#ifdef NT_UTSNAME
+ { NT_UTSNAME, "NT_UTSNAME" },
+#endif
+#ifdef NT_LWPSTATUS
+ { NT_LWPSTATUS, "NT_LWPSTATUS" },
+#endif
+#ifdef NT_LWPSINFO
+ { NT_LWPSINFO, "NT_LWPSINFO" },
+#endif
+#ifdef NT_PRFPXREG
+ { NT_PRFPXREG, "NT_PRFPXREG" },
+#endif
+#ifdef NT_PRXFPREG
+ { NT_PRXFPREG, "NT_PRXFPREG" },
+#endif
+#ifdef NT_PPC_VMX
+ { NT_PPC_VMX, "NT_PPC_VMX" },
+#endif
+#ifdef NT_PPC_SPE
+ { NT_PPC_SPE, "NT_PPC_SPE" },
+#endif
+#ifdef NT_PPC_VSX
+ { NT_PPC_VSX, "NT_PPC_VSX" },
+#endif
+#ifdef NT_386_TLS
+ { NT_386_TLS, "NT_386_TLS" },
+#endif
+#ifdef NT_386_IOPERM
+ { NT_386_IOPERM, "NT_386_IOPERM" },
+#endif
+#ifdef NT_X86_XSTATE
+ { NT_X86_XSTATE, "NT_X86_XSTATE" },
+#endif
+ { 0, NULL },
+};
+
#define uoff(member) offsetof(struct user, member)
const struct xlat struct_user_offsets[] = {
@@ -2116,50 +2236,271 @@
{ PT_FSR, "rfsr", },
{ PT_KERNEL_MODE, "kernel_mode", },
#endif
+#ifdef OR1K
+ { 4*0, "r0" },
+ { 4*1, "r1" },
+ { 4*2, "r2" },
+ { 4*3, "r3" },
+ { 4*4, "r4" },
+ { 4*5, "r5" },
+ { 4*6, "r6" },
+ { 4*7, "r7" },
+ { 4*8, "r8" },
+ { 4*9, "r9" },
+ { 4*10, "r10" },
+ { 4*11, "r11" },
+ { 4*12, "r12" },
+ { 4*13, "r13" },
+ { 4*14, "r14" },
+ { 4*15, "r15" },
+ { 4*16, "r16" },
+ { 4*17, "r17" },
+ { 4*18, "r18" },
+ { 4*19, "r19" },
+ { 4*20, "r20" },
+ { 4*21, "r21" },
+ { 4*22, "r22" },
+ { 4*23, "r23" },
+ { 4*24, "r24" },
+ { 4*25, "r25" },
+ { 4*26, "r26" },
+ { 4*27, "r27" },
+ { 4*28, "r28" },
+ { 4*29, "r29" },
+ { 4*30, "r30" },
+ { 4*31, "r31" },
+ { 4*32, "pc" },
+ { 4*33, "sr" },
+#endif
+#ifdef XTENSA
+ { SYSCALL_NR, "syscall_nr" },
+ { REG_AR_BASE, "ar0" },
+ { REG_AR_BASE+1, "ar1" },
+ { REG_AR_BASE+2, "ar2" },
+ { REG_AR_BASE+3, "ar3" },
+ { REG_AR_BASE+4, "ar4" },
+ { REG_AR_BASE+5, "ar5" },
+ { REG_AR_BASE+6, "ar6" },
+ { REG_AR_BASE+7, "ar7" },
+ { REG_AR_BASE+8, "ar8" },
+ { REG_AR_BASE+9, "ar9" },
+ { REG_AR_BASE+10, "ar10" },
+ { REG_AR_BASE+11, "ar11" },
+ { REG_AR_BASE+12, "ar12" },
+ { REG_AR_BASE+13, "ar13" },
+ { REG_AR_BASE+14, "ar14" },
+ { REG_AR_BASE+15, "ar15" },
+ { REG_AR_BASE+16, "ar16" },
+ { REG_AR_BASE+17, "ar17" },
+ { REG_AR_BASE+18, "ar18" },
+ { REG_AR_BASE+19, "ar19" },
+ { REG_AR_BASE+20, "ar20" },
+ { REG_AR_BASE+21, "ar21" },
+ { REG_AR_BASE+22, "ar22" },
+ { REG_AR_BASE+23, "ar23" },
+ { REG_AR_BASE+24, "ar24" },
+ { REG_AR_BASE+25, "ar25" },
+ { REG_AR_BASE+26, "ar26" },
+ { REG_AR_BASE+27, "ar27" },
+ { REG_AR_BASE+28, "ar28" },
+ { REG_AR_BASE+29, "ar29" },
+ { REG_AR_BASE+30, "ar30" },
+ { REG_AR_BASE+31, "ar31" },
+ { REG_AR_BASE+32, "ar32" },
+ { REG_AR_BASE+33, "ar33" },
+ { REG_AR_BASE+34, "ar34" },
+ { REG_AR_BASE+35, "ar35" },
+ { REG_AR_BASE+36, "ar36" },
+ { REG_AR_BASE+37, "ar37" },
+ { REG_AR_BASE+38, "ar38" },
+ { REG_AR_BASE+39, "ar39" },
+ { REG_AR_BASE+40, "ar40" },
+ { REG_AR_BASE+41, "ar41" },
+ { REG_AR_BASE+42, "ar42" },
+ { REG_AR_BASE+43, "ar43" },
+ { REG_AR_BASE+44, "ar44" },
+ { REG_AR_BASE+45, "ar45" },
+ { REG_AR_BASE+46, "ar46" },
+ { REG_AR_BASE+47, "ar47" },
+ { REG_AR_BASE+48, "ar48" },
+ { REG_AR_BASE+49, "ar49" },
+ { REG_AR_BASE+50, "ar50" },
+ { REG_AR_BASE+51, "ar51" },
+ { REG_AR_BASE+52, "ar52" },
+ { REG_AR_BASE+53, "ar53" },
+ { REG_AR_BASE+54, "ar54" },
+ { REG_AR_BASE+55, "ar55" },
+ { REG_AR_BASE+56, "ar56" },
+ { REG_AR_BASE+57, "ar57" },
+ { REG_AR_BASE+58, "ar58" },
+ { REG_AR_BASE+59, "ar59" },
+ { REG_AR_BASE+60, "ar60" },
+ { REG_AR_BASE+61, "ar61" },
+ { REG_AR_BASE+62, "ar62" },
+ { REG_AR_BASE+63, "ar63" },
+ { REG_LBEG, "lbeg" },
+ { REG_LEND, "lend" },
+ { REG_LCOUNT, "lcount" },
+ { REG_SAR, "sar" },
+ { REG_WB, "wb" },
+ { REG_WS, "ws" },
+ { REG_PS, "ps" },
+ { REG_PC, "pc" },
+ { REG_A_BASE, "a0" },
+ { REG_A_BASE+1, "a1" },
+ { REG_A_BASE+2, "a2" },
+ { REG_A_BASE+3, "a3" },
+ { REG_A_BASE+4, "a4" },
+ { REG_A_BASE+5, "a5" },
+ { REG_A_BASE+6, "a6" },
+ { REG_A_BASE+7, "a7" },
+ { REG_A_BASE+8, "a8" },
+ { REG_A_BASE+9, "a9" },
+ { REG_A_BASE+10, "a10" },
+ { REG_A_BASE+11, "a11" },
+ { REG_A_BASE+12, "a12" },
+ { REG_A_BASE+13, "a13" },
+ { REG_A_BASE+14, "a14" },
+ { REG_A_BASE+15, "a15" },
+#endif
-#if !defined(SPARC) && !defined(HPPA) && !defined(POWERPC) \
- && !defined(ALPHA) && !defined(IA64) \
- && !defined(CRISV10) && !defined(CRISV32) && !defined(MICROBLAZE)
-# if !defined(S390) && !defined(S390X) && !defined(MIPS) && !defined(SPARC64) && !defined(AVR32) && !defined(BFIN) && !defined(TILE)
- { uoff(u_fpvalid), "offsetof(struct user, u_fpvalid)" },
-# endif
-# if defined(I386) || defined(X86_64) || defined(X32)
- { uoff(i387), "offsetof(struct user, i387)" },
-# endif
-# if defined(M68K)
- { uoff(m68kfp), "offsetof(struct user, m68kfp)" },
-# endif
+ /* Other fields in "struct user" */
+#if defined(S390) || defined(S390X)
{ uoff(u_tsize), "offsetof(struct user, u_tsize)" },
{ uoff(u_dsize), "offsetof(struct user, u_dsize)" },
{ uoff(u_ssize), "offsetof(struct user, u_ssize)" },
-# if !defined(SPARC64)
{ uoff(start_code), "offsetof(struct user, start_code)" },
-# endif
-# if defined(AVR32) || defined(SH64)
- { uoff(start_data), "offsetof(struct user, start_data)" },
-# endif
-# if !defined(SPARC64)
+ /* S390[X] has no start_data */
{ uoff(start_stack), "offsetof(struct user, start_stack)" },
-# endif
{ uoff(signal), "offsetof(struct user, signal)" },
-# if !defined(AVR32) && !defined(S390) && !defined(S390X) && !defined(MIPS) && !defined(SH) && !defined(SH64) && !defined(SPARC64) && !defined(TILE)
- { uoff(reserved), "offsetof(struct user, reserved)" },
-# endif
-# if !defined(SPARC64)
{ uoff(u_ar0), "offsetof(struct user, u_ar0)" },
-# endif
-# if !defined(ARM) && !defined(AVR32) && !defined(MIPS) && !defined(S390) && !defined(S390X) && !defined(SPARC64) && !defined(BFIN) && !defined(TILE)
- { uoff(u_fpstate), "offsetof(struct user, u_fpstate)" },
-# endif
{ uoff(magic), "offsetof(struct user, magic)" },
{ uoff(u_comm), "offsetof(struct user, u_comm)" },
-# if defined(I386) || defined(X86_64) || defined(X32)
- { uoff(u_debugreg), "offsetof(struct user, u_debugreg)" },
-# endif
-#endif /* !defined(many arches) */
-
-#ifndef HPPA
{ sizeof(struct user), "sizeof(struct user)" },
+#elif defined(POWERPC)
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(I386) || defined(X86_64) || defined(X32)
+ { uoff(u_fpvalid), "offsetof(struct user, u_fpvalid)" },
+ { uoff(i387), "offsetof(struct user, i387)" },
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(start_code), "offsetof(struct user, start_code)" },
+ { uoff(start_stack), "offsetof(struct user, start_stack)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(reserved), "offsetof(struct user, reserved)" },
+ { uoff(u_ar0), "offsetof(struct user, u_ar0)" },
+ { uoff(u_fpstate), "offsetof(struct user, u_fpstate)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { uoff(u_debugreg), "offsetof(struct user, u_debugreg)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(IA64)
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(ARM)
+ { uoff(u_fpvalid), "offsetof(struct user, u_fpvalid)" },
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(start_code), "offsetof(struct user, start_code)" },
+ { uoff(start_stack), "offsetof(struct user, start_stack)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(reserved), "offsetof(struct user, reserved)" },
+ { uoff(u_ar0), "offsetof(struct user, u_ar0)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(AARCH64)
+ /* nothing */
+#elif defined(M68K)
+ { uoff(u_fpvalid), "offsetof(struct user, u_fpvalid)" },
+ { uoff(m68kfp), "offsetof(struct user, m68kfp)" },
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(start_code), "offsetof(struct user, start_code)" },
+ { uoff(start_stack), "offsetof(struct user, start_stack)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(reserved), "offsetof(struct user, reserved)" },
+ { uoff(u_ar0), "offsetof(struct user, u_ar0)" },
+ { uoff(u_fpstate), "offsetof(struct user, u_fpstate)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(MIPS) || defined(LINUX_MIPSN32)
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(start_code), "offsetof(struct user, start_code)" },
+ { uoff(start_data), "offsetof(struct user, start_data)" },
+ { uoff(start_stack), "offsetof(struct user, start_stack)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(u_ar0), "offsetof(struct user, u_ar0)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(ALPHA)
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(SPARC)
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(SPARC64)
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(HPPA)
+ /* nothing */
+#elif defined(SH) || defined(SH64)
+ { uoff(u_fpvalid), "offsetof(struct user, u_fpvalid)" },
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(start_code), "offsetof(struct user, start_code)" },
+ { uoff(start_data), "offsetof(struct user, start_data)" },
+ { uoff(start_stack), "offsetof(struct user, start_stack)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(u_ar0), "offsetof(struct user, u_ar0)" },
+ { uoff(u_fpstate), "offsetof(struct user, u_fpstate)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(CRISV10) || defined(CRISV32)
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(TILE)
+ /* nothing */
+#elif defined(MICROBLAZE)
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(AVR32)
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(start_code), "offsetof(struct user, start_code)" },
+ { uoff(start_data), "offsetof(struct user, start_data)" },
+ { uoff(start_stack), "offsetof(struct user, start_stack)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(u_ar0), "offsetof(struct user, u_ar0)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(BFIN)
+ { uoff(u_tsize), "offsetof(struct user, u_tsize)" },
+ { uoff(u_dsize), "offsetof(struct user, u_dsize)" },
+ { uoff(u_ssize), "offsetof(struct user, u_ssize)" },
+ { uoff(start_code), "offsetof(struct user, start_code)" },
+ { uoff(signal), "offsetof(struct user, signal)" },
+ { uoff(u_ar0), "offsetof(struct user, u_ar0)" },
+ { uoff(magic), "offsetof(struct user, magic)" },
+ { uoff(u_comm), "offsetof(struct user, u_comm)" },
+ { sizeof(struct user), "sizeof(struct user)" },
+#elif defined(OR1K)
+ /* nothing */
+#elif defined(METAG)
+ /* nothing */
+#elif defined(XTENSA)
+ /* nothing */
#endif
{ 0, NULL },
};
@@ -2173,9 +2514,11 @@
if (entering(tcp)) {
printxval(ptrace_cmds, tcp->u_arg[0], "PTRACE_???");
tprintf(", %lu, ", tcp->u_arg[1]);
+
addr = tcp->u_arg[2];
if (tcp->u_arg[0] == PTRACE_PEEKUSER
- || tcp->u_arg[0] == PTRACE_POKEUSER) {
+ || tcp->u_arg[0] == PTRACE_POKEUSER
+ ) {
for (x = struct_user_offsets; x->str; x++) {
if (x->val >= addr)
break;
@@ -2188,9 +2531,18 @@
}
else
tprintf("%s, ", x->str);
- }
- else
- tprintf("%#lx, ", tcp->u_arg[2]);
+ } else
+#ifdef PTRACE_GETREGSET
+ if (tcp->u_arg[0] == PTRACE_GETREGSET
+ || tcp->u_arg[0] == PTRACE_SETREGSET
+ ) {
+ printxval(nt_descriptor_types, tcp->u_arg[2], "NT_???");
+ tprints(", ");
+ } else
+#endif
+ tprintf("%#lx, ", addr);
+
+
switch (tcp->u_arg[0]) {
#ifndef IA64
case PTRACE_PEEKDATA:
@@ -2211,15 +2563,7 @@
#endif
#ifdef PTRACE_SETSIGINFO
case PTRACE_SETSIGINFO: {
- siginfo_t si;
- if (!tcp->u_arg[3])
- tprints("NULL");
- else if (syserror(tcp))
- tprintf("%#lx", tcp->u_arg[3]);
- else if (umove(tcp, tcp->u_arg[3], &si) < 0)
- tprints("{???}");
- else
- printsiginfo(&si, verbose(tcp));
+ printsiginfo_at(tcp, tcp->u_arg[3]);
break;
}
#endif
@@ -2228,6 +2572,13 @@
/* Don't print anything, do it at syscall return. */
break;
#endif
+#ifdef PTRACE_GETREGSET
+ case PTRACE_GETREGSET:
+ break;
+ case PTRACE_SETREGSET:
+ tprint_iov(tcp, /*len:*/ 1, tcp->u_arg[3], /*as string:*/ 0);
+ break;
+#endif
default:
tprintf("%#lx", tcp->u_arg[3]);
break;
@@ -2245,18 +2596,15 @@
#endif
#ifdef PTRACE_GETSIGINFO
case PTRACE_GETSIGINFO: {
- siginfo_t si;
- if (!tcp->u_arg[3])
- tprints("NULL");
- else if (syserror(tcp))
- tprintf("%#lx", tcp->u_arg[3]);
- else if (umove(tcp, tcp->u_arg[3], &si) < 0)
- tprints("{???}");
- else
- printsiginfo(&si, verbose(tcp));
+ printsiginfo_at(tcp, tcp->u_arg[3]);
break;
}
#endif
+#ifdef PTRACE_GETREGSET
+ case PTRACE_GETREGSET:
+ tprint_iov(tcp, /*len:*/ 1, tcp->u_arg[3], /*as string:*/ 0);
+ break;
+#endif
}
}
return 0;
diff --git a/quota.c b/quota.c
index a1fd92d..780abf9 100644
--- a/quota.c
+++ b/quota.c
@@ -617,7 +617,7 @@
tprints("|");
printxval(quotatypes, type, "???QUOTA");
tprints(", ");
- printstr(tcp, tcp->u_arg[1], -1);
+ printpath(tcp, tcp->u_arg[1]);
tprints(", ");
switch (cmd) {
case Q_V1_QUOTAON:
diff --git a/resource.c b/resource.c
index 5a51d8c..657e63d 100644
--- a/resource.c
+++ b/resource.c
@@ -173,8 +173,7 @@
{
if (!addr)
tprints("NULL");
- else if (!verbose(tcp) ||
- (exiting(tcp) && syserror(tcp)))
+ else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)))
tprintf("%#lx", addr);
else {
# if SIZEOF_RLIM_T == 4
diff --git a/signal.c b/signal.c
index 8fcfc77..55815aa 100644
--- a/signal.c
+++ b/signal.c
@@ -60,13 +60,6 @@
# include <asm/ptrace_offsets.h>
#endif
-#if defined(SPARC64)
-# undef PTRACE_GETREGS
-# define PTRACE_GETREGS PTRACE_GETREGS64
-# undef PTRACE_SETREGS
-# define PTRACE_SETREGS PTRACE_SETREGS64
-#endif
-
#if defined(SPARC) || defined(SPARC64) || defined(MIPS)
typedef struct {
struct pt_regs si_regs;
@@ -419,88 +412,6 @@
# define SI_FROMUSER(sip) ((sip)->si_code <= 0)
#endif
-#if __GLIBC_MINOR__ < 1 && !defined(HAVE_ANDROID_OS)
-/* Type for data associated with a signal. */
-typedef union sigval
-{
- int sival_int;
- void *sival_ptr;
-} sigval_t;
-
-# define __SI_MAX_SIZE 128
-# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof(int)) - 3)
-
-typedef struct siginfo
-{
- int si_signo; /* Signal number. */
- int si_errno; /* If non-zero, an errno value associated with
- this signal, as defined in <errno.h>. */
- int si_code; /* Signal code. */
-
- union
- {
- int _pad[__SI_PAD_SIZE];
-
- /* kill(). */
- struct
- {
- __pid_t si_pid; /* Sending process ID. */
- __uid_t si_uid; /* Real user ID of sending process. */
- } _kill;
-
- /* POSIX.1b timers. */
- struct
- {
- unsigned int _timer1;
- unsigned int _timer2;
- } _timer;
-
- /* POSIX.1b signals. */
- struct
- {
- __pid_t si_pid; /* Sending process ID. */
- __uid_t si_uid; /* Real user ID of sending process. */
- sigval_t si_sigval; /* Signal value. */
- } _rt;
-
- /* SIGCHLD. */
- struct
- {
- __pid_t si_pid; /* Which child. */
- int si_status; /* Exit value or signal. */
- __clock_t si_utime;
- __clock_t si_stime;
- } _sigchld;
-
- /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */
- struct
- {
- void *si_addr; /* Faulting insn/memory ref. */
- } _sigfault;
-
- /* SIGPOLL. */
- struct
- {
- int si_band; /* Band event for SIGPOLL. */
- int si_fd;
- } _sigpoll;
- } _sifields;
-} siginfo_t;
-
-#define si_pid _sifields._kill.si_pid
-#define si_uid _sifields._kill.si_uid
-#define si_status _sifields._sigchld.si_status
-#define si_utime _sifields._sigchld.si_utime
-#define si_stime _sifields._sigchld.si_stime
-#define si_value _sifields._rt.si_sigval
-#define si_int _sifields._rt.si_sigval.sival_int
-#define si_ptr _sifields._rt.si_sigval.sival_ptr
-#define si_addr _sifields._sigfault.si_addr
-#define si_band _sifields._sigpoll.si_band
-#define si_fd _sifields._sigpoll.si_fd
-
-#endif
-
static const struct xlat siginfo_codes[] = {
#ifdef SI_KERNEL
{ SI_KERNEL, "SI_KERNEL" },
@@ -760,6 +671,25 @@
tprints("}");
}
+void
+printsiginfo_at(struct tcb *tcp, long addr)
+{
+ siginfo_t si;
+ if (!addr) {
+ tprints("NULL");
+ return;
+ }
+ if (syserror(tcp)) {
+ tprintf("%#lx", addr);
+ return;
+ }
+ if (umove(tcp, addr, &si) < 0) {
+ tprints("{???}");
+ return;
+ }
+ printsiginfo(&si, verbose(tcp));
+}
+
int
sys_sigsetmask(struct tcb *tcp)
{
@@ -781,16 +711,12 @@
#ifdef HAVE_SIGACTION
struct old_sigaction {
- __sighandler_t __sa_handler;
+ /* sa_handler may be a libc #define, need to use other name: */
+ void (*__sa_handler)(int);
unsigned long sa_mask;
unsigned long sa_flags;
void (*sa_restorer)(void);
};
-#define SA_HANDLER __sa_handler
-
-#ifndef SA_HANDLER
-#define SA_HANDLER sa_handler
-#endif
int
sys_sigaction(struct tcb *tcp)
@@ -815,19 +741,19 @@
/* Architectures using function pointers, like
* hppa, may need to manipulate the function pointer
* to compute the result of a comparison. However,
- * the SA_HANDLER function pointer exists only in
+ * the __sa_handler function pointer exists only in
* the address space of the traced process, and can't
* be manipulated by strace. In order to prevent the
* compiler from generating code to manipulate
- * SA_HANDLER we cast the function pointers to long. */
- if ((long)sa.SA_HANDLER == (long)SIG_ERR)
+ * __sa_handler we cast the function pointers to long. */
+ if ((long)sa.__sa_handler == (long)SIG_ERR)
tprints("{SIG_ERR, ");
- else if ((long)sa.SA_HANDLER == (long)SIG_DFL)
+ else if ((long)sa.__sa_handler == (long)SIG_DFL)
tprints("{SIG_DFL, ");
- else if ((long)sa.SA_HANDLER == (long)SIG_IGN)
+ else if ((long)sa.__sa_handler == (long)SIG_IGN)
tprints("{SIG_IGN, ");
else
- tprintf("{%#lx, ", (long) sa.SA_HANDLER);
+ tprintf("{%#lx, ", (long) sa.__sa_handler);
long_to_sigset(sa.sa_mask, &sigset);
printsigmask(&sigset, 0);
tprints(", ");
@@ -889,17 +815,13 @@
{
#if defined(ARM)
if (entering(tcp)) {
- struct pt_regs regs;
struct sigcontext_struct sc;
sigset_t sigm;
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1)
- return 0;
- if (umove(tcp, regs.ARM_sp, &sc) < 0)
+ if (umove(tcp, arm_regs.ARM_sp, &sc) < 0)
return 0;
long_to_sigset(sc.oldmask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(S390) || defined(S390X)
if (entering(tcp)) {
long usp;
@@ -910,7 +832,6 @@
return 0;
tprints(sprintsigmask(") (mask ", (sigset_t *)&sc.oldmask[0], 0));
}
- return 0;
#elif defined(I386)
if (entering(tcp)) {
struct sigcontext_struct sc;
@@ -925,7 +846,6 @@
long_to_sigset(sc.oldmask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(IA64)
if (entering(tcp)) {
struct sigcontext sc;
@@ -941,7 +861,6 @@
memcpy(&sigm, &sc.sc_mask, NSIG / 8);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(POWERPC)
if (entering(tcp)) {
long esp;
@@ -963,7 +882,6 @@
long_to_sigset(sc.oldmask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(M68K)
if (entering(tcp)) {
long usp;
@@ -976,7 +894,6 @@
long_to_sigset(sc.sc_mask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(ALPHA)
if (entering(tcp)) {
long fp;
@@ -989,26 +906,19 @@
long_to_sigset(sc.sc_mask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(SPARC) || defined(SPARC64)
if (entering(tcp)) {
long i1;
- struct pt_regs regs;
m_siginfo_t si;
sigset_t sigm;
- if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)®s, 0) < 0) {
- perror("sigreturn: PTRACE_GETREGS");
- return 0;
- }
- i1 = regs.u_regs[U_REG_O1];
+ i1 = sparc_regs.u_regs[U_REG_O1];
if (umove(tcp, i1, &si) < 0) {
- perror("sigreturn: umove");
+ perror_msg("sigreturn: umove");
return 0;
}
long_to_sigset(si.si_mask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(LINUX_MIPSN32) || defined(LINUX_MIPSN64)
/* This decodes rt_sigreturn. The 64-bit ABIs do not have
sigreturn. */
@@ -1025,7 +935,6 @@
long_to_sigset(*(long *) &uc.uc_sigmask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(MIPS)
if (entering(tcp)) {
long sp;
@@ -1033,7 +942,7 @@
m_siginfo_t si;
sigset_t sigm;
if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)®s, 0) < 0) {
- perror("sigreturn: PTRACE_GETREGS");
+ perror_msg("sigreturn: PTRACE_GETREGS");
return 0;
}
sp = regs.regs[29];
@@ -1042,14 +951,13 @@
long_to_sigset(si.si_mask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(CRISV10) || defined(CRISV32)
if (entering(tcp)) {
struct sigcontext sc;
long regs[PT_MAX+1];
sigset_t sigm;
if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long)regs) < 0) {
- perror("sigreturn: PTRACE_GETREGS");
+ perror_msg("sigreturn: PTRACE_GETREGS");
return 0;
}
if (umove(tcp, regs[PT_USP], &sc) < 0)
@@ -1057,24 +965,19 @@
long_to_sigset(sc.oldmask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(TILE)
if (entering(tcp)) {
struct ucontext uc;
- long sp;
sigset_t sigm;
/* offset of ucontext in the kernel's sigframe structure */
-# define SIGFRAME_UC_OFFSET C_ABI_SAVE_AREA_SIZE + sizeof(struct siginfo)
- if (upeek(tcp, PTREGS_OFFSET_SP, &sp) < 0)
- return 0;
- if (umove(tcp, sp + SIGFRAME_UC_OFFSET, &uc) < 0)
+# define SIGFRAME_UC_OFFSET C_ABI_SAVE_AREA_SIZE + sizeof(siginfo_t)
+ if (umove(tcp, tile_regs.sp + SIGFRAME_UC_OFFSET, &uc) < 0)
return 0;
sigemptyset(&sigm);
memcpy(&sigm, &uc.uc_sigmask, NSIG / 8);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
#elif defined(MICROBLAZE)
/* TODO: Verify that this is correct... */
if (entering(tcp)) {
@@ -1089,12 +992,15 @@
long_to_sigset(sc.oldmask, &sigm);
tprints(sprintsigmask(") (mask ", &sigm, 0));
}
- return 0;
+#elif defined(X86_64)
+ /* no need to remind */
+#elif defined(XTENSA)
+ /* Xtensa only has rt_sys_sigreturn */
#else
-#warning No sys_sigreturn() for this architecture
-#warning (no problem, just a reminder :-)
- return 0;
+# warning No sys_sigreturn() for this architecture
+# warning (no problem, just a reminder :-)
#endif
+ return 0;
}
int
@@ -1122,14 +1028,6 @@
#if !defined SS_ONSTACK
#define SS_ONSTACK 1
#define SS_DISABLE 2
-#if __GLIBC_MINOR__ == 0
-typedef struct
-{
- __ptr_t ss_sp;
- int ss_flags;
- size_t ss_size;
-} stack_t;
-#endif
#endif
static const struct xlat sigaltstack_flags[] = {
@@ -1138,33 +1036,31 @@
{ 0, NULL },
};
-static int
+static void
print_stack_t(struct tcb *tcp, unsigned long addr)
{
stack_t ss;
- if (umove(tcp, addr, &ss) < 0)
- return -1;
- tprintf("{ss_sp=%#lx, ss_flags=", (unsigned long) ss.ss_sp);
- printflags(sigaltstack_flags, ss.ss_flags, "SS_???");
- tprintf(", ss_size=%lu}", (unsigned long) ss.ss_size);
- return 0;
+
+ if (!addr) {
+ tprints("NULL");
+ } else if (umove(tcp, addr, &ss) < 0) {
+ tprintf("%#lx", addr);
+ } else {
+ tprintf("{ss_sp=%#lx, ss_flags=", (unsigned long) ss.ss_sp);
+ printflags(sigaltstack_flags, ss.ss_flags, "SS_???");
+ tprintf(", ss_size=%lu}", (unsigned long) ss.ss_size);
+ }
}
int
sys_sigaltstack(struct tcb *tcp)
{
if (entering(tcp)) {
- if (tcp->u_arg[0] == 0)
- tprints("NULL");
- else if (print_stack_t(tcp, tcp->u_arg[0]) < 0)
- return -1;
+ print_stack_t(tcp, tcp->u_arg[0]);
}
else {
tprints(", ");
- if (tcp->u_arg[1] == 0)
- tprints("NULL");
- else if (print_stack_t(tcp, tcp->u_arg[1]) < 0)
- return -1;
+ print_stack_t(tcp, tcp->u_arg[1]);
}
return 0;
}
@@ -1223,13 +1119,10 @@
sys_kill(struct tcb *tcp)
{
if (entering(tcp)) {
- long pid = tcp->u_arg[0];
-#if SUPPORTED_PERSONALITIES > 1
- /* Sign-extend a 32-bit value when that's what it is. */
- if (current_wordsize < sizeof pid)
- pid = (long) (int) pid;
-#endif
- tprintf("%ld, %s", pid, signame(tcp->u_arg[1]));
+ tprintf("%ld, %s",
+ widen_to_long(tcp->u_arg[0]),
+ signame(tcp->u_arg[1])
+ );
}
return 0;
}
@@ -1239,7 +1132,10 @@
{
if (entering(tcp)) {
tprintf("%ld, %ld, %s",
- tcp->u_arg[0], tcp->u_arg[1], signame(tcp->u_arg[2]));
+ widen_to_long(tcp->u_arg[0]),
+ widen_to_long(tcp->u_arg[1]),
+ signame(tcp->u_arg[2])
+ );
}
return 0;
}
@@ -1295,9 +1191,10 @@
/* Structure describing the action to be taken when a signal arrives. */
struct new_sigaction
{
- __sighandler_t __sa_handler;
+ /* sa_handler may be a libc #define, need to use other name: */
+ void (*__sa_handler)(int);
unsigned long sa_flags;
- void (*sa_restorer) (void);
+ void (*sa_restorer)(void);
/* Kernel treats sa_mask as an array of longs. */
unsigned long sa_mask[NSIG / sizeof(long) ? NSIG / sizeof(long) : 1];
};
@@ -1333,8 +1230,7 @@
tprintf("%#lx", addr);
goto after_sa;
}
-#if SUPPORTED_PERSONALITIES > 1
-#if SIZEOF_LONG > 4
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
if (current_wordsize != sizeof(sa.sa_flags) && current_wordsize == 4) {
struct new_sigaction32 sa32;
r = umove(tcp, addr, &sa32);
@@ -1355,7 +1251,6 @@
}
} else
#endif
-#endif
{
r = umove(tcp, addr, &sa);
}
@@ -1366,11 +1261,11 @@
/* Architectures using function pointers, like
* hppa, may need to manipulate the function pointer
* to compute the result of a comparison. However,
- * the SA_HANDLER function pointer exists only in
+ * the __sa_handler function pointer exists only in
* the address space of the traced process, and can't
* be manipulated by strace. In order to prevent the
* compiler from generating code to manipulate
- * SA_HANDLER we cast the function pointers to long. */
+ * __sa_handler we cast the function pointers to long. */
if ((long)sa.__sa_handler == (long)SIG_ERR)
tprints("{SIG_ERR, ");
else if ((long)sa.__sa_handler == (long)SIG_DFL)
@@ -1385,7 +1280,7 @@
* therefore tcp->u_arg[3(4)] _must_ be NSIG / 8 here,
* and we always use smaller memcpy. */
sigemptyset(&sigset);
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
if (tcp->u_arg[4] <= sizeof(sigset))
memcpy(&sigset, &sa.sa_mask, tcp->u_arg[4]);
#else
@@ -1407,7 +1302,7 @@
if (entering(tcp))
tprints(", ");
else
-#ifdef LINUXSPARC
+#if defined(SPARC) || defined(SPARC64)
tprintf(", %#lx, %lu", tcp->u_arg[3], tcp->u_arg[4]);
#elif defined(ALPHA)
tprintf(", %lu, %#lx", tcp->u_arg[3], tcp->u_arg[4]);
@@ -1450,14 +1345,9 @@
static void
print_sigqueueinfo(struct tcb *tcp, int sig, unsigned long uinfo)
{
- siginfo_t si;
-
printsignal(sig);
tprints(", ");
- if (umove(tcp, uinfo, &si) < 0)
- tprintf("%#lx", uinfo);
- else
- printsiginfo(&si, verbose(tcp));
+ printsiginfo_at(tcp, uinfo);
}
int
@@ -1499,17 +1389,8 @@
}
else if (tcp->u_arg[1] != 0) {
/* syscall exit, and u_arg[1] wasn't NULL */
- if (syserror(tcp))
- tprintf("%#lx, ", tcp->u_arg[1]);
- else {
- siginfo_t si;
- if (umove(tcp, tcp->u_arg[1], &si) < 0)
- tprintf("%#lx, ", tcp->u_arg[1]);
- else {
- printsiginfo(&si, verbose(tcp));
- tprints(", ");
- }
- }
+ printsiginfo_at(tcp, tcp->u_arg[1]);
+ tprints(", ");
}
else {
/* syscall exit, and u_arg[1] was NULL */
diff --git a/strace.1 b/strace.1
index faf4d45..5f287d7 100644
--- a/strace.1
+++ b/strace.1
@@ -41,7 +41,9 @@
.B strace
[\fB-CdffhiqrtttTvVxxy\fR]
[\fB-I\fIn\fR]
-[\fB-e\fIexpr\fR]... [\fB-a\fIcolumn\fR]
+[\fB-b\fIexecve\fR]
+[\fB-e\fIexpr\fR]...
+[\fB-a\fIcolumn\fR]
[\fB-o\fIfile\fR]
[\fB-s\fIstrsize\fR]
[\fB-P\fIpath\fR]... \fB-p\fIpid\fR... /
@@ -52,7 +54,9 @@
.B strace
\fB-c\fR[\fBdf\fR]
[\fB-I\fIn\fR]
-[\fB-e\fIexpr\fR]... [\fB-O\fIoverhead\fR]
+[\fB-b\fIexecve\fR]
+[\fB-e\fIexpr\fR]...
+[\fB-O\fIoverhead\fR]
[\fB-S\fIsortby\fR] \fB-p\fIpid\fR... /
[\fB-D\fR]
[\fB-E\fIvar\fR[=\fIval\fR]]... [\fB-u\fIusername\fR]
@@ -226,24 +230,16 @@
.B \-f
Trace child processes as they are created by currently traced
processes as a result of the
-.BR fork (2)
-system call.
-.IP
-On non-Linux platforms the new process is
-attached to as soon as its pid is known (through the return value of
-.BR fork (2)
-in the parent process). This means that such children may run
-uncontrolled for a while (especially in the case of a
-.BR vfork (2)),
-until the parent is scheduled again to complete its
-.RB ( v ) fork (2)
-call. On Linux the child is traced from its first instruction with no delay.
-If the parent process decides to
-.BR wait (2)
-for a child that is currently
-being traced, it is suspended until an appropriate child process either
-terminates or incurs a signal that would cause it to terminate (as
-determined from the child's current signal disposition).
+.BR fork (2),
+.BR vfork (2)
+and
+.BR clone (2)
+system calls. Note that
+.B \-p
+.I PID
+.B \-f
+will attach all threads of process PID if it is multi-threaded,
+not only thread with thread_id = PID.
.TP
.B \-ff
If the
@@ -271,6 +267,9 @@
automatically when output is redirected to a file and the command
is run directly instead of attaching.
.TP
+.B \-qq
+If given twice, suppress messages about process exit status.
+.TP
.B \-r
Print a relative timestamp upon entry to each system call. This
records the time difference between the beginning of successive
@@ -313,6 +312,14 @@
.BI "\-a " column
Align return values in a specific column (default column 40).
.TP
+.BI "\-b " syscall
+If specified syscall is reached, detach from traced process.
+Currently, only
+.I execve
+syscall is supported. This option is useful if you want to trace
+multi-threaded process and therefore require -f, but don't want
+to trace its (potentially very complex) children.
+.TP
.BI "\-e " expr
A qualifying expression which modifies which events to trace
or how to trace them. The format of the expression is:
@@ -395,6 +402,9 @@
.BR "\-e\ trace" = desc
Trace all file descriptor related system calls.
.TP
+.BR "\-e\ trace" = memory
+Trace all memory mapping related system calls.
+.TP
\fB\-e\ abbrev\fR=\fIset\fR
Abbreviate the output from printing each member of large structures.
The default is
@@ -510,7 +520,7 @@
.I path.
Multiple
.B \-P
-options can be used to specify up to 256 paths.
+options can be used to specify several paths.
.TP
.BI "\-s " strsize
Specify the maximum string size to print (the default is 32). Note
diff --git a/strace.c b/strace.c
index 857136d..6eab600 100644
--- a/strace.c
+++ b/strace.c
@@ -39,6 +39,9 @@
#include <grp.h>
#include <dirent.h>
#include <sys/utsname.h>
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
#if defined(IA64)
# include <asm/ptrace_offsets.h>
#endif
@@ -54,20 +57,27 @@
/* kill() may choose arbitrarily the target task of the process group
while we later wait on a that specific TID. PID process waits become
TID task specific waits for a process under ptrace(2). */
-# warning "Neither tkill(2) nor tgkill(2) available, risk of strace hangs!"
+# warning "tkill(2) not available, risk of strace hangs!"
# define my_tkill(tid, sig) kill((tid), (sig))
#endif
-#undef KERNEL_VERSION
-#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+/* Glue for systems without a MMU that cannot provide fork() */
+#if !defined(HAVE_FORK)
+# undef NOMMU_SYSTEM
+# define NOMMU_SYSTEM 1
+#endif
+#if NOMMU_SYSTEM
+# define fork() vfork()
+#endif
cflag_t cflag = CFLAG_NONE;
unsigned int followfork = 0;
unsigned int ptrace_setoptions = 0;
unsigned int xflag = 0;
+bool need_fork_exec_workarounds = 0;
bool debug_flag = 0;
bool Tflag = 0;
-bool qflag = 0;
+unsigned int qflag = 0;
/* Which WSTOPSIG(status) value marks syscall traps? */
static unsigned int syscall_trap_sig = SIGTRAP;
static unsigned int tflag = 0;
@@ -102,7 +112,7 @@
*/
static bool daemonized_tracer = 0;
-#ifdef USE_SEIZE
+#if USE_SEIZE
static int post_attach_sigstop = TCB_IGNORE_ONE_SIGSTOP;
# define use_seize (post_attach_sigstop == 0)
#else
@@ -116,11 +126,11 @@
/* Show path associated with fd arguments */
bool show_fd_path = 0;
-/* are we filtering traces based on paths? */
-bool tracing_paths = 0;
-
static bool detach_on_execve = 0;
-static bool skip_startup_execve = 0;
+/* Are we "strace PROG" and need to skip detach on first execve? */
+static bool skip_one_b_execve = 0;
+/* Are we "strace PROG" and need to hide everything until execve? */
+bool hide_log_until_execve = 0;
static int exit_code = 0;
static int strace_child = 0;
@@ -145,7 +155,7 @@
static unsigned int nprocs, tcbtabsize;
static const char *progname;
-static unsigned os_release; /* generated from uname()'s u.release */
+unsigned os_release; /* generated from uname()'s u.release */
static int detach(struct tcb *tcp);
static int trace(void);
@@ -194,7 +204,6 @@
-d -- enable debug output to stderr\n\
-D -- run tracer process as a detached grandchild, not as parent\n\
-f -- follow forks, -ff -- with output into separate files\n\
--F -- attempt to follow vforks (deprecated, use -f)\n\
-i -- print instruction pointer at time of syscall\n\
-q -- suppress messages about attaching, detaching, etc.\n\
-r -- print relative timestamp, -t -- absolute timestamp, -tt -- with usecs\n\
@@ -204,8 +213,9 @@
-y -- print paths associated with file descriptor arguments\n\
-h -- print help message, -V -- print version\n\
-a column -- alignment COLUMN for printing syscall results (default %d)\n\
+-b execve -- detach on this syscall\n\
-e expr -- a qualifying expression: option=[!]all or option=[!]val1[,val2]...\n\
- options: trace, abbrev, verbose, raw, signal, read, or write\n\
+ options: trace, abbrev, verbose, raw, signal, read, write\n\
-I interruptible --\n\
1: no signals are blocked\n\
2: fatal signals are blocked while decoding syscall (default)\n\
@@ -222,12 +232,12 @@
-E var -- remove var from the environment for command\n\
-P path -- trace accesses to path\n\
"
+/* ancient, no one should use it
+-F -- attempt to follow vforks (deprecated, use -f)\n\
+ */
/* this is broken, so don't document it
-z -- print only succeeding syscalls\n\
*/
-/* experimental, don't document it yet (option letter may change in the future!)
--b -- detach on successful execve\n\
- */
, DEFAULT_ACOLUMN, DEFAULT_STRLEN, DEFAULT_SORTBY);
exit(exitval);
}
@@ -320,22 +330,14 @@
error_msg_and_die("Invalid -%c argument: '%s'", opt, arg);
}
-/* Glue for systems without a MMU that cannot provide fork() */
-#ifdef HAVE_FORK
-# define strace_vforked 0
-#else
-# define strace_vforked 1
-# define fork() vfork()
-#endif
-
-#ifdef USE_SEIZE
+#if USE_SEIZE
static int
ptrace_attach_or_seize(int pid)
{
int r;
if (!use_seize)
return ptrace(PTRACE_ATTACH, pid, 0, 0);
- r = ptrace(PTRACE_SEIZE, pid, 0, PTRACE_SEIZE_DEVEL);
+ r = ptrace(PTRACE_SEIZE, pid, 0, 0);
if (r)
return r;
r = ptrace(PTRACE_INTERRUPT, pid, 0, 0);
@@ -439,8 +441,20 @@
#if _LFS64_LARGEFILE
# define fopen_for_output fopen64
+# define struct_stat struct stat64
+# define stat_file stat64
+# define struct_dirent struct dirent64
+# define read_dir readdir64
+# define struct_rlimit struct rlimit64
+# define set_rlimit setrlimit64
#else
# define fopen_for_output fopen
+# define struct_stat struct stat
+# define stat_file stat
+# define struct_dirent struct dirent
+# define read_dir readdir
+# define struct_rlimit struct rlimit
+# define set_rlimit setrlimit
#endif
static FILE *
@@ -515,8 +529,7 @@
int n = strace_vfprintf(current_tcp->outf, fmt, args);
if (n < 0) {
if (current_tcp->outf != stderr)
- perror(outfname == NULL
- ? "<writing to pipe>" : outfname);
+ perror_msg("%s", outfname);
} else
current_tcp->curcol += n;
}
@@ -533,7 +546,7 @@
return;
}
if (current_tcp->outf != stderr)
- perror(!outfname ? "<writing to pipe>" : outfname);
+ perror_msg("%s", outfname);
}
}
@@ -731,8 +744,8 @@
* to make a clean break of things.
*/
#if defined(SPARC)
-#undef PTRACE_DETACH
-#define PTRACE_DETACH PTRACE_SUNDETACH
+# undef PTRACE_DETACH
+# define PTRACE_DETACH PTRACE_SUNDETACH
#endif
error = 0;
@@ -750,15 +763,15 @@
}
else if (errno != ESRCH) {
/* Shouldn't happen. */
- perror("detach: ptrace(PTRACE_DETACH, ...)");
+ perror_msg("detach: ptrace(PTRACE_DETACH, ...)");
}
else if (my_tkill(tcp->pid, 0) < 0) {
if (errno != ESRCH)
- perror("detach: checking sanity");
+ perror_msg("detach: checking sanity");
}
else if (!sigstop_expected && my_tkill(tcp->pid, SIGSTOP) < 0) {
if (errno != ESRCH)
- perror("detach: stopping child");
+ perror_msg("detach: stopping child");
}
else
sigstop_expected = 1;
@@ -771,21 +784,21 @@
if (errno == ECHILD) /* Already gone. */
break;
if (errno != EINVAL) {
- perror("detach: waiting");
+ perror_msg("detach: waiting");
break;
}
#endif /* __WALL */
/* No __WALL here. */
if (waitpid(tcp->pid, &status, 0) < 0) {
if (errno != ECHILD) {
- perror("detach: waiting");
+ perror_msg("detach: waiting");
break;
}
#ifdef __WCLONE
/* If no processes, try clones. */
if (waitpid(tcp->pid, &status, __WCLONE) < 0) {
if (errno != ECHILD)
- perror("detach: waiting");
+ perror_msg("detach: waiting");
break;
}
#endif /* __WCLONE */
@@ -898,9 +911,9 @@
dir = opendir(procdir);
if (dir != NULL) {
unsigned int ntid = 0, nerr = 0;
- struct dirent *de;
+ struct_dirent *de;
- while ((de = readdir(dir)) != NULL) {
+ while ((de = read_dir(dir)) != NULL) {
struct tcb *cur_tcp;
int tid;
@@ -934,7 +947,7 @@
}
ntid -= nerr;
if (ntid == 0) {
- perror("attach: ptrace(PTRACE_ATTACH, ...)");
+ perror_msg("attach: ptrace(PTRACE_ATTACH, ...)");
droptcb(tcp);
continue;
}
@@ -955,7 +968,7 @@
} /* if (opendir worked) */
} /* if (-f) */
if (ptrace_attach_or_seize(tcp->pid) < 0) {
- perror("attach: ptrace(PTRACE_ATTACH, ...)");
+ perror_msg("attach: ptrace(PTRACE_ATTACH, ...)");
droptcb(tcp);
continue;
}
@@ -983,13 +996,79 @@
sigprocmask(SIG_SETMASK, &empty_set, NULL);
}
+/* Stack-o-phobic exec helper, in the hope to work around
+ * NOMMU + "daemonized tracer" difficulty.
+ */
+struct exec_params {
+ int fd_to_close;
+ uid_t run_euid;
+ gid_t run_egid;
+ char **argv;
+ char *pathname;
+};
+static struct exec_params params_for_tracee;
+static void __attribute__ ((noinline, noreturn))
+exec_or_die(void)
+{
+ struct exec_params *params = ¶ms_for_tracee;
+
+ if (params->fd_to_close >= 0)
+ close(params->fd_to_close);
+ if (!daemonized_tracer && !use_seize) {
+ if (ptrace(PTRACE_TRACEME, 0L, 0L, 0L) < 0) {
+ perror_msg_and_die("ptrace(PTRACE_TRACEME, ...)");
+ }
+ }
+
+ if (username != NULL) {
+ /*
+ * It is important to set groups before we
+ * lose privileges on setuid.
+ */
+ if (initgroups(username, run_gid) < 0) {
+ perror_msg_and_die("initgroups");
+ }
+ if (setregid(run_gid, params->run_egid) < 0) {
+ perror_msg_and_die("setregid");
+ }
+ if (setreuid(run_uid, params->run_euid) < 0) {
+ perror_msg_and_die("setreuid");
+ }
+ }
+ else if (geteuid() != 0)
+ if (setreuid(run_uid, run_uid) < 0) {
+ perror_msg_and_die("setreuid");
+ }
+
+ if (!daemonized_tracer) {
+ /*
+ * Induce a ptrace stop. Tracer (our parent)
+ * will resume us with PTRACE_SYSCALL and display
+ * the immediately following execve syscall.
+ * Can't do this on NOMMU systems, we are after
+ * vfork: parent is blocked, stopping would deadlock.
+ */
+ if (!NOMMU_SYSTEM)
+ kill(getpid(), SIGSTOP);
+ } else {
+ alarm(3);
+ /* we depend on SIGCHLD set to SIG_DFL by init code */
+ /* if it happens to be SIG_IGN'ed, wait won't block */
+ wait(NULL);
+ alarm(0);
+ }
+
+ execv(params->pathname, params->argv);
+ perror_msg_and_die("exec");
+}
+
static void
startup_child(char **argv)
{
- struct stat statbuf;
+ struct_stat statbuf;
const char *filename;
char pathname[MAXPATHLEN];
- int pid = 0;
+ int pid;
struct tcb *tcp;
filename = argv[0];
@@ -1006,7 +1085,7 @@
* first regardless of the path but doing that gives
* security geeks a panic attack.
*/
- else if (stat(filename, &statbuf) == 0)
+ else if (stat_file(filename, &statbuf) == 0)
strcpy(pathname, filename);
#endif /* USE_DEBUGGING_EXEC */
else {
@@ -1035,7 +1114,7 @@
if (len && pathname[len - 1] != '/')
pathname[len++] = '/';
strcpy(pathname + len, filename);
- if (stat(pathname, &statbuf) == 0 &&
+ if (stat_file(pathname, &statbuf) == 0 &&
/* Accept only regular files
with some execute bits set.
XXX not perfect, might still fail */
@@ -1044,70 +1123,37 @@
break;
}
}
- if (stat(pathname, &statbuf) < 0) {
+ if (stat_file(pathname, &statbuf) < 0) {
perror_msg_and_die("Can't stat '%s'", filename);
}
+
+ params_for_tracee.fd_to_close = (shared_log != stderr) ? fileno(shared_log) : -1;
+ params_for_tracee.run_euid = (statbuf.st_mode & S_ISUID) ? statbuf.st_uid : run_uid;
+ params_for_tracee.run_egid = (statbuf.st_mode & S_ISGID) ? statbuf.st_gid : run_gid;
+ params_for_tracee.argv = argv;
+ /*
+ * On NOMMU, can be safely freed only after execve in tracee.
+ * It's hard to know when that happens, so we just leak it.
+ */
+ params_for_tracee.pathname = NOMMU_SYSTEM ? strdup(pathname) : pathname;
+
+#if defined HAVE_PRCTL && defined PR_SET_PTRACER && defined PR_SET_PTRACER_ANY
+ if (daemonized_tracer)
+ prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY);
+#endif
+
strace_child = pid = fork();
if (pid < 0) {
perror_msg_and_die("fork");
}
- if ((pid != 0 && daemonized_tracer) /* -D: parent to become a traced process */
- || (pid == 0 && !daemonized_tracer) /* not -D: child to become a traced process */
+ if ((pid != 0 && daemonized_tracer)
+ || (pid == 0 && !daemonized_tracer)
) {
- pid = getpid();
- if (shared_log != stderr)
- close(fileno(shared_log));
- if (!daemonized_tracer && !use_seize) {
- if (ptrace(PTRACE_TRACEME, 0L, 0L, 0L) < 0) {
- perror_msg_and_die("ptrace(PTRACE_TRACEME, ...)");
- }
- }
-
- if (username != NULL) {
- uid_t run_euid = run_uid;
- gid_t run_egid = run_gid;
-
- if (statbuf.st_mode & S_ISUID)
- run_euid = statbuf.st_uid;
- if (statbuf.st_mode & S_ISGID)
- run_egid = statbuf.st_gid;
- /*
- * It is important to set groups before we
- * lose privileges on setuid.
- */
- if (initgroups(username, run_gid) < 0) {
- perror_msg_and_die("initgroups");
- }
- if (setregid(run_gid, run_egid) < 0) {
- perror_msg_and_die("setregid");
- }
- if (setreuid(run_uid, run_euid) < 0) {
- perror_msg_and_die("setreuid");
- }
- }
- else if (geteuid() != 0)
- setreuid(run_uid, run_uid);
-
- if (!daemonized_tracer) {
- /*
- * Induce a ptrace stop. Tracer (our parent)
- * will resume us with PTRACE_SYSCALL and display
- * the immediately following execve syscall.
- * Can't do this on NOMMU systems, we are after
- * vfork: parent is blocked, stopping would deadlock.
- */
- if (!strace_vforked)
- kill(pid, SIGSTOP);
- } else {
- alarm(3);
- /* we depend on SIGCHLD set to SIG_DFL by init code */
- /* if it happens to be SIG_IGN'ed, wait won't block */
- wait(NULL);
- alarm(0);
- }
-
- execv(pathname, argv);
- perror_msg_and_die("exec");
+ /* We are to become the tracee. Two cases:
+ * -D: we are parent
+ * not -D: we are child
+ */
+ exec_or_die();
}
/* We are the tracer */
@@ -1116,7 +1162,7 @@
if (!use_seize) {
/* child did PTRACE_TRACEME, nothing to do in parent */
} else {
- if (!strace_vforked) {
+ if (!NOMMU_SYSTEM) {
/* Wait until child stopped itself */
int status;
while (waitpid(pid, &status, WSTOPPED) < 0) {
@@ -1129,7 +1175,7 @@
perror_msg_and_die("Unexpected wait status %x", status);
}
}
- /* Else: vforked case, we have no way to sync.
+ /* Else: NOMMU case, we have no way to sync.
* Just attach to it as soon as possible.
* This means that we may miss a few first syscalls...
*/
@@ -1138,24 +1184,45 @@
kill_save_errno(pid, SIGKILL);
perror_msg_and_die("Can't attach to %d", pid);
}
- if (!strace_vforked)
+ if (!NOMMU_SYSTEM)
kill(pid, SIGCONT);
}
tcp = alloctcb(pid);
- if (!strace_vforked)
+ if (!NOMMU_SYSTEM)
tcp->flags |= TCB_ATTACHED | TCB_STRACE_CHILD | TCB_STARTUP | post_attach_sigstop;
else
tcp->flags |= TCB_ATTACHED | TCB_STRACE_CHILD | TCB_STARTUP;
newoutf(tcp);
}
else {
- /* With -D, *we* are child here, IOW: different pid. Fetch it: */
+ /* With -D, we are *child* here, IOW: different pid. Fetch it: */
strace_tracer_pid = getpid();
/* The tracee is our parent: */
pid = getppid();
alloctcb(pid);
/* attaching will be done later, by startup_attach */
/* note: we don't do newoutf(tcp) here either! */
+
+ /* NOMMU BUG! -D mode is active, we (child) return,
+ * and we will scribble over parent's stack!
+ * When parent later unpauses, it segfaults.
+ *
+ * We work around it
+ * (1) by declaring exec_or_die() NORETURN,
+ * hopefully compiler will just jump to it
+ * instead of call (won't push anything to stack),
+ * (2) by trying very hard in exec_or_die()
+ * to not use any stack,
+ * (3) having a really big (MAXPATHLEN) stack object
+ * in this function, which creates a "buffer" between
+ * child's and parent's stack pointers.
+ * This may save us if (1) and (2) failed
+ * and compiler decided to use stack in exec_or_die() anyway
+ * (happens on i386 because of stack parameter passing).
+ *
+ * A cleaner solution is to use makecontext + setcontext
+ * to create a genuine separate stack and execute on it.
+ */
}
}
@@ -1164,7 +1231,7 @@
* First fork a new child, call ptrace with PTRACE_SETOPTIONS on it,
* and then see which options are supported by the kernel.
*/
-static void
+static int
test_ptrace_setoptions_followfork(void)
{
int pid, expected_grandchild = 0, found_grandchild = 0;
@@ -1172,6 +1239,10 @@
PTRACE_O_TRACEFORK |
PTRACE_O_TRACEVFORK;
+ /* Need fork for test. NOMMU has no forks */
+ if (NOMMU_SYSTEM)
+ goto worked; /* be bold, and pretend that test succeeded */
+
pid = fork();
if (pid < 0)
perror_msg_and_die("fork");
@@ -1253,14 +1324,16 @@
}
}
if (expected_grandchild && expected_grandchild == found_grandchild) {
+ worked:
ptrace_setoptions |= test_options;
if (debug_flag)
fprintf(stderr, "ptrace_setoptions = %#x\n",
ptrace_setoptions);
- return;
+ return 0;
}
error_msg("Test for PTRACE_O_TRACECLONE failed, "
"giving up using this feature.");
+ return 1;
}
/*
@@ -1277,7 +1350,7 @@
* int $0x80
* (compile with: "gcc -nostartfiles -nostdlib -o int3 int3.S")
*/
-static void
+static int
test_ptrace_setoptions_for_all(void)
{
const unsigned int test_options = PTRACE_O_TRACESYSGOOD |
@@ -1285,9 +1358,9 @@
int pid;
int it_worked = 0;
- /* this fork test doesn't work on no-mmu systems */
- if (strace_vforked)
- return;
+ /* Need fork for test. NOMMU has no forks */
+ if (NOMMU_SYSTEM)
+ goto worked; /* be bold, and pretend that test succeeded */
pid = fork();
if (pid < 0)
@@ -1351,24 +1424,32 @@
}
if (it_worked) {
+ worked:
syscall_trap_sig = (SIGTRAP | 0x80);
ptrace_setoptions |= test_options;
if (debug_flag)
fprintf(stderr, "ptrace_setoptions = %#x\n",
ptrace_setoptions);
- return;
+ return 0;
}
error_msg("Test for PTRACE_O_TRACESYSGOOD failed, "
"giving up using this feature.");
+ return 1;
}
-# ifdef USE_SEIZE
+#if USE_SEIZE
static void
test_ptrace_seize(void)
{
int pid;
+ /* Need fork for test. NOMMU has no forks */
+ if (NOMMU_SYSTEM) {
+ post_attach_sigstop = 0; /* this sets use_seize to 1 */
+ return;
+ }
+
pid = fork();
if (pid < 0)
perror_msg_and_die("fork");
@@ -1382,7 +1463,7 @@
* attaching tracee continues to run unless a trap condition occurs.
* PTRACE_SEIZE doesn't affect signal or group stop state.
*/
- if (ptrace(PTRACE_SEIZE, pid, 0, PTRACE_SEIZE_DEVEL) == 0) {
+ if (ptrace(PTRACE_SEIZE, pid, 0, 0) == 0) {
post_attach_sigstop = 0; /* this sets use_seize to 1 */
} else if (debug_flag) {
fprintf(stderr, "PTRACE_SEIZE doesn't work\n");
@@ -1408,9 +1489,9 @@
__func__, status);
}
}
-# else /* !USE_SEIZE */
-# define test_ptrace_seize() ((void)0)
-# endif
+#else /* !USE_SEIZE */
+# define test_ptrace_seize() ((void)0)
+#endif
static unsigned
get_os_release(void)
@@ -1432,8 +1513,14 @@
break;
while (*p >= '0' && *p <= '9')
p++;
- if (*p != '.')
+ if (*p != '.') {
+ if (rel >= KERNEL_VERSION(0,1,0)) {
+ /* "X.Y-something" means "X.Y.0" */
+ rel <<= 8;
+ break;
+ }
error_msg_and_die("Bad OS release string: '%s'", u.release);
+ }
p++;
}
return rel;
@@ -1485,13 +1572,19 @@
qualify("trace=all");
qualify("abbrev=all");
qualify("verbose=all");
+#if DEFAULT_QUAL_FLAGS != (QUAL_TRACE | QUAL_ABBREV | QUAL_VERBOSE)
+# error Bug in DEFAULT_QUAL_FLAGS
+#endif
qualify("signal=all");
while ((c = getopt(argc, argv,
- "+bcCdfFhiqrtTvVxyz"
+ "+b:cCdfFhiqrtTvVxyz"
"D"
"a:e:o:O:p:s:S:u:E:P:I:")) != EOF) {
switch (c) {
case 'b':
+ if (strcmp(optarg, "execve") != 0)
+ error_msg_and_die("Syscall '%s' for -b isn't supported",
+ optarg);
detach_on_execve = 1;
break;
case 'c':
@@ -1525,7 +1618,7 @@
iflag = 1;
break;
case 'q':
- qflag = 1;
+ qflag++;
break;
case 'r':
rflag = 1;
@@ -1573,10 +1666,7 @@
process_opt_p_list(optarg);
break;
case 'P':
- tracing_paths = 1;
- if (pathtrace_select(optarg)) {
- error_msg_and_die("Failed to select path '%s'", optarg);
- }
+ pathtrace_select(optarg);
break;
case 's':
i = string_to_uint(optarg);
@@ -1647,9 +1737,14 @@
run_gid = getgid();
}
+ /*
+ * On any reasonably recent Linux kernel (circa about 2.5.46)
+ * need_fork_exec_workarounds should stay 0 after these tests:
+ */
+ /*need_fork_exec_workarounds = 0; - already is */
if (followfork)
- test_ptrace_setoptions_followfork();
- test_ptrace_setoptions_for_all();
+ need_fork_exec_workarounds = test_ptrace_setoptions_followfork();
+ need_fork_exec_workarounds |= test_ptrace_setoptions_for_all();
test_ptrace_seize();
/* Check if they want to redirect the output. */
@@ -1693,17 +1788,21 @@
* no 1 1 INTR_WHILE_WAIT
*/
- /* STARTUP_CHILD must be called before the signal handlers get
- installed below as they are inherited into the spawned process.
- Also we do not need to be protected by them as during interruption
- in the STARTUP_CHILD mode we kill the spawned process anyway. */
+ sigemptyset(&empty_set);
+ sigemptyset(&blocked_set);
+
+ /* startup_child() must be called before the signal handlers get
+ * installed below as they are inherited into the spawned process.
+ * Also we do not need to be protected by them as during interruption
+ * in the startup_child() mode we kill the spawned process anyway.
+ */
if (argv[0]) {
- skip_startup_execve = 1;
+ if (!NOMMU_SYSTEM || daemonized_tracer)
+ hide_log_until_execve = 1;
+ skip_one_b_execve = 1;
startup_child(argv);
}
- sigemptyset(&empty_set);
- sigemptyset(&blocked_set);
sa.sa_handler = SIG_IGN;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
@@ -1801,9 +1900,9 @@
{
struct rusage ru;
struct rusage *rup = cflag ? &ru : NULL;
-# ifdef __WALL
+#ifdef __WALL
static int wait4_options = __WALL;
-# endif
+#endif
while (nprocs != 0) {
int pid;
@@ -1817,7 +1916,7 @@
return 0;
if (interactive)
sigprocmask(SIG_SETMASK, &empty_set, NULL);
-# ifdef __WALL
+#ifdef __WALL
pid = wait4(-1, &status, wait4_options, rup);
if (pid < 0 && (wait4_options & __WALL) && errno == EINVAL) {
/* this kernel does not support __WALL */
@@ -1831,9 +1930,9 @@
perror_msg("wait4(__WCLONE) failed");
}
}
-# else
+#else
pid = wait4(-1, &status, 0, rup);
-# endif /* __WALL */
+#endif /* __WALL */
wait_errno = errno;
if (interactive)
sigprocmask(SIG_BLOCK, &blocked_set, NULL);
@@ -1911,15 +2010,6 @@
if (!tcp) {
if (followfork) {
- /* This is needed to go with the CLONE_PTRACE
- changes in process.c/util.c: we might see
- the child's initial trap before we see the
- parent return from the clone syscall.
- Leave the child suspended until the parent
- returns from its system call. Only then
- will we have the association of parent and
- child so that we know how to do clearbpt
- in the child. */
tcp = alloctcb(pid);
tcp->flags |= TCB_ATTACHED | TCB_STARTUP | post_attach_sigstop;
newoutf(tcp);
@@ -1935,6 +2025,10 @@
}
}
+ clear_regs();
+ if (WIFSTOPPED(status))
+ get_regs(pid);
+
/* Under Linux, execve changes pid to thread leader's pid,
* and we see this changed pid on EVENT_EXEC and later,
* execve sysexit. Leader "disappears" without exit
@@ -1992,11 +2086,10 @@
}
dont_switch_tcbs:
- if (event == PTRACE_EVENT_EXEC && detach_on_execve) {
- if (!skip_startup_execve)
- detach(tcp);
- /* This was initial execve for "strace PROG". Skip. */
- skip_startup_execve = 0;
+ if (event == PTRACE_EVENT_EXEC) {
+ if (detach_on_execve && !skip_one_b_execve)
+ detach(tcp); /* do "-b execve" thingy */
+ skip_one_b_execve = 0;
}
/* Set current output file */
@@ -2011,7 +2104,8 @@
if (pid == strace_child)
exit_code = 0x100 | WTERMSIG(status);
if (cflag != CFLAG_ONLY_STATS
- && (qual_flags[WTERMSIG(status)] & QUAL_SIGNAL)) {
+ && (qual_flags[WTERMSIG(status)] & QUAL_SIGNAL)
+ ) {
printleader(tcp);
#ifdef WCOREDUMP
tprintf("+++ killed by %s %s+++\n",
@@ -2029,7 +2123,8 @@
if (WIFEXITED(status)) {
if (pid == strace_child)
exit_code = WEXITSTATUS(status);
- if (cflag != CFLAG_ONLY_STATS) {
+ if (cflag != CFLAG_ONLY_STATS &&
+ qflag < 2) {
printleader(tcp);
tprintf("+++ exited with %d +++\n", WEXITSTATUS(status));
line_ended();
@@ -2076,8 +2171,8 @@
if (event != 0) {
/* Ptrace event */
-#ifdef USE_SEIZE
- if (event == PTRACE_EVENT_STOP || event == PTRACE_EVENT_STOP1) {
+#if USE_SEIZE
+ if (event == PTRACE_EVENT_STOP) {
/*
* PTRACE_INTERRUPT-stop or group-stop.
* PTRACE_INTERRUPT-stop has sig == SIGTRAP here.
@@ -2117,11 +2212,13 @@
* We can get ESRCH instead, you know...
*/
stopped = (ptrace(PTRACE_GETSIGINFO, pid, 0, (long) &si) < 0);
-#ifdef USE_SEIZE
+#if USE_SEIZE
show_stopsig:
#endif
if (cflag != CFLAG_ONLY_STATS
- && (qual_flags[sig] & QUAL_SIGNAL)) {
+ && !hide_log_until_execve
+ && (qual_flags[sig] & QUAL_SIGNAL)
+ ) {
#if defined(PT_CR_IPSR) && defined(PT_CR_IIP)
long pc = 0;
long psr = 0;
@@ -2155,7 +2252,7 @@
goto restart_tracee;
/* It's group-stop */
-#ifdef USE_SEIZE
+#if USE_SEIZE
if (use_seize) {
/*
* This ends ptrace-stop, but does *not* end group-stop.
@@ -2197,7 +2294,6 @@
restart_tracee_with_sig_0:
sig = 0;
restart_tracee:
- /* Remember current print column before continuing. */
if (ptrace_restart(PTRACE_SYSCALL, tcp, sig) < 0) {
cleanup();
return -1;
@@ -2217,10 +2313,16 @@
cleanup();
fflush(NULL);
+ if (shared_log != stderr)
+ fclose(shared_log);
+ if (popen_pid) {
+ while (waitpid(popen_pid, NULL, 0) < 0 && errno == EINTR)
+ ;
+ }
if (exit_code > 0xff) {
/* Avoid potential core file clobbering. */
- struct rlimit rlim = {0, 0};
- setrlimit(RLIMIT_CORE, &rlim);
+ struct_rlimit rlim = {0, 0};
+ set_rlimit(RLIMIT_CORE, &rlim);
/* Child was killed by a signal, mimic that. */
exit_code &= 0xff;
diff --git a/strace.spec b/strace.spec
index 1bb7d3b..817f1ae 100644
--- a/strace.spec
+++ b/strace.spec
@@ -1,6 +1,6 @@
Summary: Tracks and displays system calls associated with a running process
Name: strace
-Version: 4.7
+Version: 4.8
Release: 1%{?dist}
License: BSD
Group: Development/Debuggers
@@ -74,7 +74,7 @@
%files
%defattr(-,root,root)
-%doc CREDITS ChangeLog ChangeLog-CVS COPYRIGHT NEWS README
+%doc CREDITS ChangeLog ChangeLog-CVS COPYING NEWS README
%{_bindir}/strace
%{_bindir}/strace-log-merge
%{_mandir}/man1/*
@@ -86,6 +86,19 @@
%endif
%changelog
+* Mon Jun 03 2013 Dmitry V. Levin <ldv@altlinux.org> - 4.8-1
+- New upstream release:
+ + fixed ERESTARTNOINTR leaking to userspace on ancient kernels (#659382);
+ + fixed decoding of *xattr syscalls (#885233);
+ + fixed handling of files with 64-bit inode numbers by 32-bit strace (#912790);
+ + added aarch64 support (#969858).
+
+* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.7-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.7-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
* Wed May 02 2012 Dmitry V. Levin <ldv@altlinux.org> 4.7-1
- New upstream release.
+ implemented proper handling of real SIGTRAPs (#162774).
diff --git a/stream.c b/stream.c
index 8656fc0..8c90838 100644
--- a/stream.c
+++ b/stream.c
@@ -33,23 +33,28 @@
#ifdef HAVE_SYS_POLL_H
# include <sys/poll.h>
#endif
-#ifdef HAVE_STROPTS_H
-# include <stropts.h>
-#endif
#ifdef HAVE_SYS_CONF_H
# include <sys/conf.h>
#endif
-#ifndef HAVE_STROPTS_H
-#define RS_HIPRI 1
+/* Who has STREAMS syscalls?
+ * Linux hasn't. Solaris has (had?).
+ * Just in case I miss something, retain in for Sparc...
+ */
+#if defined(SPARC) || defined(SPARC64)
+
+# ifdef HAVE_STROPTS_H
+# include <stropts.h>
+# else
+# define RS_HIPRI 1
struct strbuf {
int maxlen; /* no. of bytes in buffer */
int len; /* no. of bytes returned */
const char *buf; /* pointer to data */
};
-#define MORECTL 1
-#define MOREDATA 2
-#endif /* !HAVE_STROPTS_H */
+# define MORECTL 1
+# define MOREDATA 2
+# endif
static const struct xlat msgflags[] = {
{ RS_HIPRI, "RS_HIPRI" },
@@ -72,7 +77,7 @@
}
static void
-printstrbufarg(struct tcb *tcp, int arg, int getting)
+printstrbufarg(struct tcb *tcp, long arg, int getting)
{
struct strbuf buf;
@@ -102,7 +107,6 @@
return 0;
}
-#if defined(SPARC) || defined(SPARC64)
int
sys_getmsg(struct tcb *tcp)
{
@@ -148,24 +152,21 @@
}
return RVAL_HEX | RVAL_STR;
}
-#endif
-#if defined SYS_putpmsg || defined SYS_getpmsg
+# if defined SYS_putpmsg || defined SYS_getpmsg
static const struct xlat pmsgflags[] = {
-#ifdef MSG_HIPRI
+# ifdef MSG_HIPRI
{ MSG_HIPRI, "MSG_HIPRI" },
-#endif
-#ifdef MSG_AND
+# endif
+# ifdef MSG_AND
{ MSG_ANY, "MSG_ANY" },
-#endif
-#ifdef MSG_BAND
+# endif
+# ifdef MSG_BAND
{ MSG_BAND, "MSG_BAND" },
-#endif
+# endif
{ 0, NULL },
};
-#endif
-
-#ifdef SYS_putpmsg
+# ifdef SYS_putpmsg
int
sys_putpmsg(struct tcb *tcp)
{
@@ -184,9 +185,8 @@
}
return 0;
}
-#endif /* SYS_putpmsg */
-
-#ifdef SYS_getpmsg
+# endif
+# ifdef SYS_getpmsg
int
sys_getpmsg(struct tcb *tcp)
{
@@ -235,31 +235,35 @@
}
return RVAL_HEX | RVAL_STR;
}
-#endif /* SYS_getpmsg */
+# endif
+# endif /* getpmsg/putpmsg */
+
+#endif /* STREAMS syscalls support */
+
#ifdef HAVE_SYS_POLL_H
static const struct xlat pollflags[] = {
-#ifdef POLLIN
+# ifdef POLLIN
{ POLLIN, "POLLIN" },
{ POLLPRI, "POLLPRI" },
{ POLLOUT, "POLLOUT" },
-#ifdef POLLRDNORM
+# ifdef POLLRDNORM
{ POLLRDNORM, "POLLRDNORM" },
-#endif
-#ifdef POLLWRNORM
+# endif
+# ifdef POLLWRNORM
{ POLLWRNORM, "POLLWRNORM" },
-#endif
-#ifdef POLLRDBAND
+# endif
+# ifdef POLLRDBAND
{ POLLRDBAND, "POLLRDBAND" },
-#endif
-#ifdef POLLWRBAND
+# endif
+# ifdef POLLWRBAND
{ POLLWRBAND, "POLLWRBAND" },
-#endif
+# endif
{ POLLERR, "POLLERR" },
{ POLLHUP, "POLLHUP" },
{ POLLNVAL, "POLLNVAL" },
-#endif
+# endif
{ 0, NULL },
};
@@ -401,11 +405,11 @@
{
int rc = decode_poll(tcp, 0);
if (entering(tcp)) {
-#ifdef INFTIM
+# ifdef INFTIM
if (tcp->u_arg[2] == INFTIM)
tprints("INFTIM");
else
-#endif
+# endif
tprintf("%ld", tcp->u_arg[2]);
}
return rc;
diff --git a/syscall.c b/syscall.c
index 52d742f..7efee0e 100644
--- a/syscall.c
+++ b/syscall.c
@@ -65,6 +65,21 @@
# include <asm/rse.h>
#endif
+/* for struct iovec */
+#include <sys/uio.h>
+/* for NT_PRSTATUS */
+#ifdef HAVE_ELF_H
+# include <elf.h>
+#endif
+
+#if defined(AARCH64)
+# include <asm/ptrace.h>
+#endif
+
+#if defined(XTENSA)
+# include <asm/ptrace.h>
+#endif
+
#ifndef ERESTARTSYS
# define ERESTARTSYS 512
#endif
@@ -97,21 +112,22 @@
#define TN TRACE_NETWORK
#define TP TRACE_PROCESS
#define TS TRACE_SIGNAL
+#define TM TRACE_MEMORY
#define NF SYSCALL_NEVER_FAILS
#define MA MAX_ARGS
-static const struct sysent sysent0[] = {
+const struct_sysent sysent0[] = {
#include "syscallent.h"
};
-#if SUPPORTED_PERSONALITIES >= 2
-static const struct sysent sysent1[] = {
+#if SUPPORTED_PERSONALITIES > 1
+static const struct_sysent sysent1[] = {
# include "syscallent1.h"
};
#endif
-#if SUPPORTED_PERSONALITIES >= 3
-static const struct sysent sysent2[] = {
+#if SUPPORTED_PERSONALITIES > 2
+static const struct_sysent sysent2[] = {
# include "syscallent2.h"
};
#endif
@@ -123,6 +139,7 @@
#undef TN
#undef TP
#undef TS
+#undef TM
#undef NF
#undef MA
@@ -134,120 +151,188 @@
* in "/usr/include".
*/
-static const char *const errnoent0[] = {
+const char *const errnoent0[] = {
#include "errnoent.h"
};
-static const char *const signalent0[] = {
+const char *const signalent0[] = {
#include "signalent.h"
};
-static const struct ioctlent ioctlent0[] = {
+const struct_ioctlent ioctlent0[] = {
#include "ioctlent.h"
};
-enum { nsyscalls0 = ARRAY_SIZE(sysent0) };
-enum { nerrnos0 = ARRAY_SIZE(errnoent0) };
-enum { nsignals0 = ARRAY_SIZE(signalent0) };
-enum { nioctlents0 = ARRAY_SIZE(ioctlent0) };
-int qual_flags0[MAX_QUALS];
-#if SUPPORTED_PERSONALITIES >= 2
+#if SUPPORTED_PERSONALITIES > 1
static const char *const errnoent1[] = {
# include "errnoent1.h"
};
static const char *const signalent1[] = {
# include "signalent1.h"
};
-static const struct ioctlent ioctlent1[] = {
+static const struct_ioctlent ioctlent1[] = {
# include "ioctlent1.h"
};
-enum { nsyscalls1 = ARRAY_SIZE(sysent1) };
-enum { nerrnos1 = ARRAY_SIZE(errnoent1) };
-enum { nsignals1 = ARRAY_SIZE(signalent1) };
-enum { nioctlents1 = ARRAY_SIZE(ioctlent1) };
-int qual_flags1[MAX_QUALS];
#endif
-#if SUPPORTED_PERSONALITIES >= 3
+#if SUPPORTED_PERSONALITIES > 2
static const char *const errnoent2[] = {
# include "errnoent2.h"
};
static const char *const signalent2[] = {
# include "signalent2.h"
};
-static const struct ioctlent ioctlent2[] = {
+static const struct_ioctlent ioctlent2[] = {
# include "ioctlent2.h"
};
-enum { nsyscalls2 = ARRAY_SIZE(sysent2) };
-enum { nerrnos2 = ARRAY_SIZE(errnoent2) };
-enum { nsignals2 = ARRAY_SIZE(signalent2) };
-enum { nioctlents2 = ARRAY_SIZE(ioctlent2) };
-int qual_flags2[MAX_QUALS];
#endif
-const struct sysent *sysent = sysent0;
+enum {
+ nsyscalls0 = ARRAY_SIZE(sysent0)
+#if SUPPORTED_PERSONALITIES > 1
+ , nsyscalls1 = ARRAY_SIZE(sysent1)
+# if SUPPORTED_PERSONALITIES > 2
+ , nsyscalls2 = ARRAY_SIZE(sysent2)
+# endif
+#endif
+};
+
+enum {
+ nerrnos0 = ARRAY_SIZE(errnoent0)
+#if SUPPORTED_PERSONALITIES > 1
+ , nerrnos1 = ARRAY_SIZE(errnoent1)
+# if SUPPORTED_PERSONALITIES > 2
+ , nerrnos2 = ARRAY_SIZE(errnoent2)
+# endif
+#endif
+};
+
+enum {
+ nsignals0 = ARRAY_SIZE(signalent0)
+#if SUPPORTED_PERSONALITIES > 1
+ , nsignals1 = ARRAY_SIZE(signalent1)
+# if SUPPORTED_PERSONALITIES > 2
+ , nsignals2 = ARRAY_SIZE(signalent2)
+# endif
+#endif
+};
+
+enum {
+ nioctlents0 = ARRAY_SIZE(ioctlent0)
+#if SUPPORTED_PERSONALITIES > 1
+ , nioctlents1 = ARRAY_SIZE(ioctlent1)
+# if SUPPORTED_PERSONALITIES > 2
+ , nioctlents2 = ARRAY_SIZE(ioctlent2)
+# endif
+#endif
+};
+
+#if SUPPORTED_PERSONALITIES > 1
+const struct_sysent *sysent = sysent0;
const char *const *errnoent = errnoent0;
const char *const *signalent = signalent0;
-const struct ioctlent *ioctlent = ioctlent0;
+const struct_ioctlent *ioctlent = ioctlent0;
+#endif
unsigned nsyscalls = nsyscalls0;
unsigned nerrnos = nerrnos0;
unsigned nsignals = nsignals0;
unsigned nioctlents = nioctlents0;
-int *qual_flags = qual_flags0;
+
+unsigned num_quals;
+qualbits_t *qual_vec[SUPPORTED_PERSONALITIES];
+
+static const unsigned nsyscall_vec[SUPPORTED_PERSONALITIES] = {
+ nsyscalls0,
+#if SUPPORTED_PERSONALITIES > 1
+ nsyscalls1,
+#endif
+#if SUPPORTED_PERSONALITIES > 2
+ nsyscalls2,
+#endif
+};
+static const struct_sysent *const sysent_vec[SUPPORTED_PERSONALITIES] = {
+ sysent0,
+#if SUPPORTED_PERSONALITIES > 1
+ sysent1,
+#endif
+#if SUPPORTED_PERSONALITIES > 2
+ sysent2,
+#endif
+};
+
+enum {
+ MAX_NSYSCALLS1 = (nsyscalls0
+#if SUPPORTED_PERSONALITIES > 1
+ > nsyscalls1 ? nsyscalls0 : nsyscalls1
+#endif
+ ),
+ MAX_NSYSCALLS2 = (MAX_NSYSCALLS1
+#if SUPPORTED_PERSONALITIES > 2
+ > nsyscalls2 ? MAX_NSYSCALLS1 : nsyscalls2
+#endif
+ ),
+ MAX_NSYSCALLS = MAX_NSYSCALLS2,
+ /* We are ready for arches with up to 255 signals,
+ * even though the largest known signo is on MIPS and it is 128.
+ * The number of existing syscalls on all arches is
+ * larger that 255 anyway, so it is just a pedantic matter.
+ */
+ MIN_QUALS = MAX_NSYSCALLS > 255 ? MAX_NSYSCALLS : 255
+};
#if SUPPORTED_PERSONALITIES > 1
-int current_personality;
+unsigned current_personality;
-const int personality_wordsize[SUPPORTED_PERSONALITIES] = {
+# ifndef current_wordsize
+unsigned current_wordsize;
+static const int personality_wordsize[SUPPORTED_PERSONALITIES] = {
PERSONALITY0_WORDSIZE,
PERSONALITY1_WORDSIZE,
# if SUPPORTED_PERSONALITIES > 2
PERSONALITY2_WORDSIZE,
# endif
};
+# endif
void
set_personality(int personality)
{
+ nsyscalls = nsyscall_vec[personality];
+ sysent = sysent_vec[personality];
+
switch (personality) {
case 0:
errnoent = errnoent0;
nerrnos = nerrnos0;
- sysent = sysent0;
- nsyscalls = nsyscalls0;
ioctlent = ioctlent0;
nioctlents = nioctlents0;
signalent = signalent0;
nsignals = nsignals0;
- qual_flags = qual_flags0;
break;
case 1:
errnoent = errnoent1;
nerrnos = nerrnos1;
- sysent = sysent1;
- nsyscalls = nsyscalls1;
ioctlent = ioctlent1;
nioctlents = nioctlents1;
signalent = signalent1;
nsignals = nsignals1;
- qual_flags = qual_flags1;
break;
-# if SUPPORTED_PERSONALITIES >= 3
+# if SUPPORTED_PERSONALITIES > 2
case 2:
errnoent = errnoent2;
nerrnos = nerrnos2;
- sysent = sysent2;
- nsyscalls = nsyscalls2;
ioctlent = ioctlent2;
nioctlents = nioctlents2;
signalent = signalent2;
nsignals = nsignals2;
- qual_flags = qual_flags2;
break;
# endif
}
current_personality = personality;
+# ifndef current_wordsize
+ current_wordsize = personality_wordsize[personality];
+# endif
}
static void
@@ -279,11 +364,23 @@
fprintf(stderr, "[ Process PID=%d runs in %s mode. ]\n",
tcp->pid, names[personality]);
}
+# elif defined(AARCH64)
+ if (!qflag) {
+ static const char *const names[] = {"32-bit", "AArch64"};
+ fprintf(stderr, "[ Process PID=%d runs in %s mode. ]\n",
+ tcp->pid, names[personality]);
+ }
+# elif defined(TILE)
+ if (!qflag) {
+ static const char *const names[] = {"64-bit", "32-bit"};
+ fprintf(stderr, "[ Process PID=%d runs in %s mode. ]\n",
+ tcp->pid, names[personality]);
+ }
# endif
}
#endif
-static int qual_syscall(), qual_signal(), qual_fault(), qual_desc();
+static int qual_syscall(), qual_signal(), qual_desc();
static const struct qual_options {
int bitflag;
@@ -302,9 +399,6 @@
{ QUAL_SIGNAL, "signal", qual_signal, "signal" },
{ QUAL_SIGNAL, "signals", qual_signal, "signal" },
{ QUAL_SIGNAL, "s", qual_signal, "signal" },
- { QUAL_FAULT, "fault", qual_fault, "fault" },
- { QUAL_FAULT, "faults", qual_fault, "fault" },
- { QUAL_FAULT, "m", qual_fault, "fault" },
{ QUAL_READ, "read", qual_desc, "descriptor" },
{ QUAL_READ, "reads", qual_desc, "descriptor" },
{ QUAL_READ, "r", qual_desc, "descriptor" },
@@ -315,71 +409,62 @@
};
static void
+reallocate_qual(int n)
+{
+ unsigned p;
+ qualbits_t *qp;
+ for (p = 0; p < SUPPORTED_PERSONALITIES; p++) {
+ qp = qual_vec[p] = realloc(qual_vec[p], n * sizeof(qualbits_t));
+ if (!qp)
+ die_out_of_memory();
+ memset(&qp[num_quals], 0, (n - num_quals) * sizeof(qualbits_t));
+ }
+ num_quals = n;
+}
+
+static void
qualify_one(int n, int bitflag, int not, int pers)
{
- if (pers == 0 || pers < 0) {
- if (not)
- qual_flags0[n] &= ~bitflag;
- else
- qual_flags0[n] |= bitflag;
- }
+ unsigned p;
-#if SUPPORTED_PERSONALITIES >= 2
- if (pers == 1 || pers < 0) {
- if (not)
- qual_flags1[n] &= ~bitflag;
- else
- qual_flags1[n] |= bitflag;
- }
-#endif
+ if (num_quals <= n)
+ reallocate_qual(n + 1);
-#if SUPPORTED_PERSONALITIES >= 3
- if (pers == 2 || pers < 0) {
- if (not)
- qual_flags2[n] &= ~bitflag;
- else
- qual_flags2[n] |= bitflag;
+ for (p = 0; p < SUPPORTED_PERSONALITIES; p++) {
+ if (pers == p || pers < 0) {
+ if (not)
+ qual_vec[p][n] &= ~bitflag;
+ else
+ qual_vec[p][n] |= bitflag;
+ }
}
-#endif
}
static int
qual_syscall(const char *s, int bitflag, int not)
{
- int i;
+ unsigned p;
+ unsigned i;
int rc = -1;
if (*s >= '0' && *s <= '9') {
- int i = string_to_uint(s);
- if (i < 0 || i >= MAX_QUALS)
+ i = string_to_uint(s);
+ if (i >= MAX_NSYSCALLS)
return -1;
qualify_one(i, bitflag, not, -1);
return 0;
}
- for (i = 0; i < nsyscalls0; i++)
- if (sysent0[i].sys_name &&
- strcmp(s, sysent0[i].sys_name) == 0) {
- qualify_one(i, bitflag, not, 0);
- rc = 0;
- }
-#if SUPPORTED_PERSONALITIES >= 2
- for (i = 0; i < nsyscalls1; i++)
- if (sysent1[i].sys_name &&
- strcmp(s, sysent1[i].sys_name) == 0) {
- qualify_one(i, bitflag, not, 1);
- rc = 0;
+ for (p = 0; p < SUPPORTED_PERSONALITIES; p++) {
+ for (i = 0; i < nsyscall_vec[p]; i++) {
+ if (sysent_vec[p][i].sys_name
+ && strcmp(s, sysent_vec[p][i].sys_name) == 0
+ ) {
+ qualify_one(i, bitflag, not, p);
+ rc = 0;
+ }
}
-#endif
-
-#if SUPPORTED_PERSONALITIES >= 3
- for (i = 0; i < nsyscalls2; i++)
- if (sysent2[i].sys_name &&
- strcmp(s, sysent2[i].sys_name) == 0) {
- qualify_one(i, bitflag, not, 2);
- rc = 0;
- }
-#endif
+ }
return rc;
}
@@ -391,7 +476,7 @@
if (*s >= '0' && *s <= '9') {
int signo = string_to_uint(s);
- if (signo < 0 || signo >= MAX_QUALS)
+ if (signo < 0 || signo > 255)
return -1;
qualify_one(signo, bitflag, not, -1);
return 0;
@@ -408,17 +493,11 @@
}
static int
-qual_fault(const char *s, int bitflag, int not)
-{
- return -1;
-}
-
-static int
qual_desc(const char *s, int bitflag, int not)
{
if (*s >= '0' && *s <= '9') {
int desc = string_to_uint(s);
- if (desc < 0 || desc >= MAX_QUALS)
+ if (desc < 0 || desc > 0x7fff) /* paranoia */
return -1;
qualify_one(desc, bitflag, not, -1);
return 0;
@@ -441,6 +520,8 @@
return TRACE_SIGNAL;
if (strcmp(s, "desc") == 0)
return TRACE_DESC;
+ if (strcmp(s, "memory") == 0)
+ return TRACE_MEMORY;
return -1;
}
@@ -453,6 +534,9 @@
const char *p;
int i, n;
+ if (num_quals == 0)
+ reallocate_qual(MIN_QUALS);
+
opt = &qual_options[0];
for (i = 0; (p = qual_options[i].option_name); i++) {
n = strlen(p);
@@ -472,12 +556,12 @@
s = "all";
}
if (strcmp(s, "all") == 0) {
- for (i = 0; i < MAX_QUALS; i++) {
+ for (i = 0; i < num_quals; i++) {
qualify_one(i, opt->bitflag, not, -1);
}
return;
}
- for (i = 0; i < MAX_QUALS; i++) {
+ for (i = 0; i < num_quals; i++) {
qualify_one(i, opt->bitflag, !not, -1);
}
copy = strdup(s);
@@ -485,22 +569,12 @@
die_out_of_memory();
for (p = strtok(copy, ","); p; p = strtok(NULL, ",")) {
if (opt->bitflag == QUAL_TRACE && (n = lookup_class(p)) > 0) {
- for (i = 0; i < nsyscalls0; i++)
- if (sysent0[i].sys_flags & n)
- qualify_one(i, opt->bitflag, not, 0);
-
-#if SUPPORTED_PERSONALITIES >= 2
- for (i = 0; i < nsyscalls1; i++)
- if (sysent1[i].sys_flags & n)
- qualify_one(i, opt->bitflag, not, 1);
-#endif
-
-#if SUPPORTED_PERSONALITIES >= 3
- for (i = 0; i < nsyscalls2; i++)
- if (sysent2[i].sys_flags & n)
- qualify_one(i, opt->bitflag, not, 2);
-#endif
-
+ unsigned pers;
+ for (pers = 0; pers < SUPPORTED_PERSONALITIES; pers++) {
+ for (i = 0; i < nsyscall_vec[pers]; i++)
+ if (sysent_vec[pers][i].sys_flags & n)
+ qualify_one(i, opt->bitflag, not, pers);
+ }
continue;
}
if (opt->qualify(p, opt->bitflag, not)) {
@@ -517,16 +591,18 @@
decode_socket_subcall(struct tcb *tcp)
{
unsigned long addr;
- unsigned int i, size;
+ unsigned int i, n, size;
if (tcp->u_arg[0] < 0 || tcp->u_arg[0] >= SYS_socket_nsubcalls)
return;
tcp->scno = SYS_socket_subcall + tcp->u_arg[0];
+ tcp->qual_flg = qual_flags[tcp->scno];
+ tcp->s_ent = &sysent[tcp->scno];
addr = tcp->u_arg[1];
- tcp->u_nargs = sysent[tcp->scno].nargs;
size = current_wordsize;
- for (i = 0; i < tcp->u_nargs; ++i) {
+ n = tcp->s_ent->nargs;
+ for (i = 0; i < n; ++i) {
if (size == sizeof(int)) {
unsigned int arg;
if (umove(tcp, addr, &arg) < 0)
@@ -548,14 +624,16 @@
static void
decode_ipc_subcall(struct tcb *tcp)
{
- unsigned int i;
+ unsigned int i, n;
if (tcp->u_arg[0] < 0 || tcp->u_arg[0] >= SYS_ipc_nsubcalls)
return;
tcp->scno = SYS_ipc_subcall + tcp->u_arg[0];
- tcp->u_nargs = sysent[tcp->scno].nargs;
- for (i = 0; i < tcp->u_nargs; i++)
+ tcp->qual_flg = qual_flags[tcp->scno];
+ tcp->s_ent = &sysent[tcp->scno];
+ n = tcp->s_ent->nargs;
+ for (i = 0; i < n; i++)
tcp->u_arg[i] = tcp->u_arg[i + 1];
}
#endif
@@ -565,8 +643,8 @@
{
if (entering(tcp)) {
int i;
-
- for (i = 0; i < tcp->u_nargs; i++)
+ int n = tcp->s_ent->nargs;
+ for (i = 0; i < n; i++)
tprintf("%s%#lx", i ? ", " : "", tcp->u_arg[i]);
}
return 0;
@@ -577,8 +655,8 @@
{
if (entering(tcp)) {
int i;
-
- for (i = 0; i < tcp->u_nargs; i++)
+ int n = tcp->s_ent->nargs;
+ for (i = 0; i < n; i++)
tprintf("%s%lu", i ? ", " : "", tcp->u_arg[i]);
}
return 0;
@@ -589,33 +667,32 @@
{
if (entering(tcp)) {
int i;
-
- for (i = 0; i < tcp->u_nargs; i++)
+ int n = tcp->s_ent->nargs;
+ for (i = 0; i < n; i++)
tprintf("%s%ld", i ? ", " : "", tcp->u_arg[i]);
}
return 0;
}
+#if defined(SPARC) || defined(SPARC64) || defined(IA64) || defined(SH)
long
getrval2(struct tcb *tcp)
{
- long val = -1;
+ long val;
-#if defined(SPARC) || defined(SPARC64)
- struct pt_regs regs;
- if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)®s, 0) < 0)
- return -1;
- val = regs.u_regs[U_REG_O1];
-#elif defined(SH)
+# if defined(SPARC) || defined(SPARC64)
+ val = sparc_regs.u_regs[U_REG_O1];
+# elif defined(SH)
if (upeek(tcp, 4*(REG_REG0+1), &val) < 0)
return -1;
-#elif defined(IA64)
+# elif defined(IA64)
if (upeek(tcp, PT_R9, &val) < 0)
return -1;
-#endif
+# endif
return val;
}
+#endif
int
is_restart_error(struct tcb *tcp)
@@ -633,56 +710,397 @@
}
#if defined(I386)
-struct pt_regs i386_regs;
+struct user_regs_struct i386_regs;
+# define ARCH_REGS_FOR_GETREGSET i386_regs
#elif defined(X86_64) || defined(X32)
/*
- * On 32 bits, pt_regs and user_regs_struct are the same,
- * but on 64 bits, user_regs_struct has six more fields:
+ * On i386, pt_regs and user_regs_struct are the same,
+ * but on 64 bit x86, user_regs_struct has six more fields:
* fs_base, gs_base, ds, es, fs, gs.
* PTRACE_GETREGS fills them too, so struct pt_regs would overflow.
*/
-static struct user_regs_struct x86_64_regs;
+struct i386_user_regs_struct {
+ uint32_t ebx;
+ uint32_t ecx;
+ uint32_t edx;
+ uint32_t esi;
+ uint32_t edi;
+ uint32_t ebp;
+ uint32_t eax;
+ uint32_t xds;
+ uint32_t xes;
+ uint32_t xfs;
+ uint32_t xgs;
+ uint32_t orig_eax;
+ uint32_t eip;
+ uint32_t xcs;
+ uint32_t eflags;
+ uint32_t esp;
+ uint32_t xss;
+};
+static union {
+ struct user_regs_struct x86_64_r;
+ struct i386_user_regs_struct i386_r;
+} x86_regs_union;
+# define x86_64_regs x86_regs_union.x86_64_r
+# define i386_regs x86_regs_union.i386_r
+static struct iovec x86_io = {
+ .iov_base = &x86_regs_union
+};
#elif defined(IA64)
-long r8, r10, psr; /* TODO: make static? */
long ia32 = 0; /* not static */
+static long ia64_r8, ia64_r10;
#elif defined(POWERPC)
static long ppc_result;
#elif defined(M68K)
-static long d0;
+static long m68k_d0;
#elif defined(BFIN)
-static long r0;
+static long bfin_r0;
#elif defined(ARM)
-static struct pt_regs regs;
+struct pt_regs arm_regs; /* not static */
+# define ARCH_REGS_FOR_GETREGSET arm_regs
+#elif defined(AARCH64)
+static union {
+ struct user_pt_regs aarch64_r;
+ struct arm_pt_regs arm_r;
+} arm_regs_union;
+# define aarch64_regs arm_regs_union.aarch64_r
+# define arm_regs arm_regs_union.arm_r
+static struct iovec aarch64_io = {
+ .iov_base = &arm_regs_union
+};
#elif defined(ALPHA)
-static long r0;
-static long a3;
+static long alpha_r0;
+static long alpha_a3;
#elif defined(AVR32)
-static struct pt_regs regs;
+static struct pt_regs avr32_regs;
#elif defined(SPARC) || defined(SPARC64)
-static struct pt_regs regs;
-static unsigned long trap;
+struct pt_regs sparc_regs; /* not static */
#elif defined(LINUX_MIPSN32)
-static long long a3;
-static long long r2;
+static long long mips_a3;
+static long long mips_r2;
#elif defined(MIPS)
-static long a3;
-static long r2;
+static long mips_a3;
+static long mips_r2;
#elif defined(S390) || defined(S390X)
static long gpr2;
-static long pc;
static long syscall_mode;
#elif defined(HPPA)
-static long r28;
+static long hppa_r28;
#elif defined(SH)
-static long r0;
+static long sh_r0;
#elif defined(SH64)
-static long r9;
+static long sh64_r9;
#elif defined(CRISV10) || defined(CRISV32)
-static long r10;
+static long cris_r10;
+#elif defined(TILE)
+struct pt_regs tile_regs;
#elif defined(MICROBLAZE)
-static long r3;
+static long microblaze_r3;
+#elif defined(OR1K)
+static struct user_regs_struct or1k_regs;
+# define ARCH_REGS_FOR_GETREGSET or1k_regs
+#elif defined(METAG)
+static struct user_gp_regs metag_regs;
+# define ARCH_REGS_FOR_GETREGSET metag_regs
+#elif defined(XTENSA)
+static long xtensa_a2;
#endif
+void
+printcall(struct tcb *tcp)
+{
+#define PRINTBADPC tprintf(sizeof(long) == 4 ? "[????????] " : \
+ sizeof(long) == 8 ? "[????????????????] " : \
+ NULL /* crash */)
+ if (get_regs_error) {
+ PRINTBADPC;
+ return;
+ }
+#if defined(I386)
+ tprintf("[%08lx] ", i386_regs.eip);
+#elif defined(S390) || defined(S390X)
+ long psw;
+ if (upeek(tcp, PT_PSWADDR, &psw) < 0) {
+ PRINTBADPC;
+ return;
+ }
+# ifdef S390
+ tprintf("[%08lx] ", psw);
+# elif S390X
+ tprintf("[%016lx] ", psw);
+# endif
+#elif defined(X86_64) || defined(X32)
+ if (x86_io.iov_len == sizeof(i386_regs)) {
+ tprintf("[%08x] ", (unsigned) i386_regs.eip);
+ } else {
+# if defined(X86_64)
+ tprintf("[%016lx] ", (unsigned long) x86_64_regs.rip);
+# elif defined(X32)
+ /* Note: this truncates 64-bit rip to 32 bits */
+ tprintf("[%08lx] ", (unsigned long) x86_64_regs.rip);
+# endif
+ }
+#elif defined(IA64)
+ long ip;
+ if (upeek(tcp, PT_B0, &ip) < 0) {
+ PRINTBADPC;
+ return;
+ }
+ tprintf("[%08lx] ", ip);
+#elif defined(POWERPC)
+ long pc;
+ if (upeek(tcp, sizeof(unsigned long)*PT_NIP, &pc) < 0) {
+ PRINTBADPC;
+ return;
+ }
+# ifdef POWERPC64
+ tprintf("[%016lx] ", pc);
+# else
+ tprintf("[%08lx] ", pc);
+# endif
+#elif defined(M68K)
+ long pc;
+ if (upeek(tcp, 4*PT_PC, &pc) < 0) {
+ tprints("[????????] ");
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(ALPHA)
+ long pc;
+ if (upeek(tcp, REG_PC, &pc) < 0) {
+ tprints("[????????????????] ");
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(SPARC)
+ tprintf("[%08lx] ", sparc_regs.pc);
+#elif defined(SPARC64)
+ tprintf("[%08lx] ", sparc_regs.tpc);
+#elif defined(HPPA)
+ long pc;
+ if (upeek(tcp, PT_IAOQ0, &pc) < 0) {
+ tprints("[????????] ");
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(MIPS)
+ long pc;
+ if (upeek(tcp, REG_EPC, &pc) < 0) {
+ tprints("[????????] ");
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(SH)
+ long pc;
+ if (upeek(tcp, 4*REG_PC, &pc) < 0) {
+ tprints("[????????] ");
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(SH64)
+ long pc;
+ if (upeek(tcp, REG_PC, &pc) < 0) {
+ tprints("[????????????????] ");
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(ARM)
+ tprintf("[%08lx] ", arm_regs.ARM_pc);
+#elif defined(AARCH64)
+ /* tprintf("[%016lx] ", aarch64_regs.regs[???]); */
+#elif defined(AVR32)
+ tprintf("[%08lx] ", avr32_regs.pc);
+#elif defined(BFIN)
+ long pc;
+ if (upeek(tcp, PT_PC, &pc) < 0) {
+ PRINTBADPC;
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(CRISV10)
+ long pc;
+ if (upeek(tcp, 4*PT_IRP, &pc) < 0) {
+ PRINTBADPC;
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(CRISV32)
+ long pc;
+ if (upeek(tcp, 4*PT_ERP, &pc) < 0) {
+ PRINTBADPC;
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#elif defined(TILE)
+# ifdef _LP64
+ tprintf("[%016lx] ", (unsigned long) tile_regs.pc);
+# else
+ tprintf("[%08lx] ", (unsigned long) tile_regs.pc);
+# endif
+#elif defined(OR1K)
+ tprintf("[%08lx] ", or1k_regs.pc);
+#elif defined(METAG)
+ tprintf("[%08lx] ", metag_regs.pc);
+#elif defined(XTENSA)
+ long pc;
+ if (upeek(tcp, REG_PC, &pc) < 0) {
+ PRINTBADPC;
+ return;
+ }
+ tprintf("[%08lx] ", pc);
+#endif /* architecture */
+}
+
+/* Shuffle syscall numbers so that we don't have huge gaps in syscall table.
+ * The shuffling should be reversible: shuffle_scno(shuffle_scno(n)) == n.
+ */
+#if defined(ARM) /* So far only ARM needs this */
+static long
+shuffle_scno(unsigned long scno)
+{
+ if (scno <= ARM_LAST_ORDINARY_SYSCALL)
+ return scno;
+
+ /* __ARM_NR_cmpxchg? Swap with LAST_ORDINARY+1 */
+ if (scno == 0x000ffff0)
+ return ARM_LAST_ORDINARY_SYSCALL+1;
+ if (scno == ARM_LAST_ORDINARY_SYSCALL+1)
+ return 0x000ffff0;
+
+ /* Is it ARM specific syscall?
+ * Swap with [LAST_ORDINARY+2, LAST_ORDINARY+2 + LAST_SPECIAL] range.
+ */
+ if (scno >= 0x000f0000
+ && scno <= 0x000f0000 + ARM_LAST_SPECIAL_SYSCALL
+ ) {
+ return scno - 0x000f0000 + (ARM_LAST_ORDINARY_SYSCALL+2);
+ }
+ if (/* scno >= ARM_LAST_ORDINARY_SYSCALL+2 - always true */ 1
+ && scno <= (ARM_LAST_ORDINARY_SYSCALL+2) + ARM_LAST_SPECIAL_SYSCALL
+ ) {
+ return scno + 0x000f0000 - (ARM_LAST_ORDINARY_SYSCALL+2);
+ }
+
+ return scno;
+}
+#else
+# define shuffle_scno(scno) ((long)(scno))
+#endif
+
+static char*
+undefined_scno_name(struct tcb *tcp)
+{
+ static char buf[sizeof("syscall_%lu") + sizeof(long)*3];
+
+ sprintf(buf, "syscall_%lu", shuffle_scno(tcp->scno));
+ return buf;
+}
+
+#ifndef get_regs
+long get_regs_error;
+
+#if defined(PTRACE_GETREGSET) && defined(NT_PRSTATUS)
+static void get_regset(pid_t pid)
+{
+/* constant iovec */
+# if defined(ARM) \
+ || defined(I386) \
+ || defined(METAG) \
+ || defined(OR1K)
+ static struct iovec io = {
+ .iov_base = &ARCH_REGS_FOR_GETREGSET,
+ .iov_len = sizeof(ARCH_REGS_FOR_GETREGSET)
+ };
+ get_regs_error = ptrace(PTRACE_GETREGSET, pid, NT_PRSTATUS, &io);
+
+/* variable iovec */
+# elif defined(X86_64) || defined(X32)
+ /* x86_io.iov_base = &x86_regs_union; - already is */
+ x86_io.iov_len = sizeof(x86_regs_union);
+ get_regs_error = ptrace(PTRACE_GETREGSET, pid, NT_PRSTATUS, &x86_io);
+# elif defined(AARCH64)
+ /* aarch64_io.iov_base = &arm_regs_union; - already is */
+ aarch64_io.iov_len = sizeof(arm_regs_union);
+ get_regs_error = ptrace(PTRACE_GETREGSET, pid, NT_PRSTATUS, &aarch64_io);
+# else
+# warning both PTRACE_GETREGSET and NT_PRSTATUS are available but not yet used
+# endif
+}
+#endif /* PTRACE_GETREGSET && NT_PRSTATUS */
+
+void
+get_regs(pid_t pid)
+{
+/* PTRACE_GETREGSET only */
+# if defined(METAG) || defined(OR1K) || defined(X32) || defined(AARCH64)
+ get_regset(pid);
+
+/* PTRACE_GETREGS only */
+# elif defined(AVR32)
+ get_regs_error = ptrace(PTRACE_GETREGS, pid, NULL, &avr32_regs);
+# elif defined(TILE)
+ get_regs_error = ptrace(PTRACE_GETREGS, pid, NULL, &tile_regs);
+# elif defined(SPARC) || defined(SPARC64)
+ get_regs_error = ptrace(PTRACE_GETREGS, pid, (char *)&sparc_regs, 0);
+
+/* try PTRACE_GETREGSET first, fallback to PTRACE_GETREGS */
+# else
+# if defined(PTRACE_GETREGSET) && defined(NT_PRSTATUS)
+ static int getregset_support;
+
+ if (getregset_support >= 0) {
+ get_regset(pid);
+ if (getregset_support > 0)
+ return;
+ if (get_regs_error >= 0) {
+ getregset_support = 1;
+ return;
+ }
+ if (errno == EPERM || errno == ESRCH)
+ return;
+ getregset_support = -1;
+ }
+# endif /* PTRACE_GETREGSET && NT_PRSTATUS */
+# if defined(ARM)
+ get_regs_error = ptrace(PTRACE_GETREGS, pid, NULL, &arm_regs);
+# elif defined(I386)
+ get_regs_error = ptrace(PTRACE_GETREGS, pid, NULL, &i386_regs);
+# elif defined(X86_64)
+ /* Use old method, with unreliable heuristical detection of 32-bitness. */
+ x86_io.iov_len = sizeof(x86_64_regs);
+ get_regs_error = ptrace(PTRACE_GETREGS, pid, NULL, &x86_64_regs);
+ if (!get_regs_error && x86_64_regs.cs == 0x23) {
+ x86_io.iov_len = sizeof(i386_regs);
+ /*
+ * The order is important: i386_regs and x86_64_regs
+ * are overlaid in memory!
+ */
+ i386_regs.ebx = x86_64_regs.rbx;
+ i386_regs.ecx = x86_64_regs.rcx;
+ i386_regs.edx = x86_64_regs.rdx;
+ i386_regs.esi = x86_64_regs.rsi;
+ i386_regs.edi = x86_64_regs.rdi;
+ i386_regs.ebp = x86_64_regs.rbp;
+ i386_regs.eax = x86_64_regs.rax;
+ /* i386_regs.xds = x86_64_regs.ds; unused by strace */
+ /* i386_regs.xes = x86_64_regs.es; ditto... */
+ /* i386_regs.xfs = x86_64_regs.fs; */
+ /* i386_regs.xgs = x86_64_regs.gs; */
+ i386_regs.orig_eax = x86_64_regs.orig_rax;
+ i386_regs.eip = x86_64_regs.rip;
+ /* i386_regs.xcs = x86_64_regs.cs; */
+ /* i386_regs.eflags = x86_64_regs.eflags; */
+ i386_regs.esp = x86_64_regs.rsp;
+ /* i386_regs.xss = x86_64_regs.ss; */
+ }
+# else
+# error unhandled architecture
+# endif /* ARM || I386 || X86_64 */
+# endif
+}
+#endif /* !get_regs */
+
/* Returns:
* 0: "ignore this ptrace stop", bail out of trace_syscall_entering() silently.
* 1: ok, continue in trace_syscall_entering().
@@ -707,6 +1125,7 @@
/*
* Old style of "passing" the scno via the SVC instruction.
*/
+ long psw;
long opcode, offset_reg, tmp;
void *svc_addr;
static const int gpr_offset[16] = {
@@ -716,12 +1135,12 @@
PT_GPR12, PT_GPR13, PT_GPR14, PT_GPR15
};
- if (upeek(tcp, PT_PSWADDR, &pc) < 0)
+ if (upeek(tcp, PT_PSWADDR, &psw) < 0)
return -1;
errno = 0;
- opcode = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)(pc-sizeof(long)), 0);
+ opcode = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)(psw - sizeof(long)), 0);
if (errno) {
- perror("peektext(pc-oneword)");
+ perror_msg("peektext(psw-oneword)");
return -1;
}
@@ -796,42 +1215,50 @@
update_personality(tcp, currpers);
# endif
#elif defined(AVR32)
- /* Read complete register set in one go. */
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, ®s) < 0)
- return -1;
- scno = regs.r8;
+ scno = avr32_regs.r8;
#elif defined(BFIN)
if (upeek(tcp, PT_ORIG_P0, &scno))
return -1;
#elif defined(I386)
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &i386_regs) < 0)
- return -1;
scno = i386_regs.orig_eax;
#elif defined(X86_64) || defined(X32)
# ifndef __X32_SYSCALL_BIT
# define __X32_SYSCALL_BIT 0x40000000
# endif
-# ifndef __X32_SYSCALL_MASK
-# define __X32_SYSCALL_MASK __X32_SYSCALL_BIT
-# endif
-
int currpers;
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &x86_64_regs) < 0)
- return -1;
- scno = x86_64_regs.orig_rax;
-
- /* Check CS register value. On x86-64 linux it is:
- * 0x33 for long mode (64 bit)
- * 0x23 for compatibility mode (32 bit)
- * Check DS register value. On x86-64 linux it is:
- * 0x2b for x32 mode (x86-64 in 32 bit)
+# if 1
+ /* GETREGSET of NT_PRSTATUS tells us regset size,
+ * which unambiguously detects i386.
+ *
+ * Linux kernel distinguishes x86-64 and x32 processes
+ * solely by looking at __X32_SYSCALL_BIT:
+ * arch/x86/include/asm/compat.h::is_x32_task():
+ * if (task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT)
+ * return true;
*/
+ if (x86_io.iov_len == sizeof(i386_regs)) {
+ scno = i386_regs.orig_eax;
+ currpers = 1;
+ } else {
+ scno = x86_64_regs.orig_rax;
+ currpers = 0;
+ if (scno & __X32_SYSCALL_BIT) {
+ scno -= __X32_SYSCALL_BIT;
+ currpers = 2;
+ }
+ }
+# elif 0
+ /* cs = 0x33 for long mode (native 64 bit and x32)
+ * cs = 0x23 for compatibility mode (32 bit)
+ * ds = 0x2b for x32 mode (x86-64 in 32 bit)
+ */
+ scno = x86_64_regs.orig_rax;
switch (x86_64_regs.cs) {
case 0x23: currpers = 1; break;
case 0x33:
if (x86_64_regs.ds == 0x2b) {
currpers = 2;
- scno &= ~__X32_SYSCALL_MASK;
+ scno &= ~__X32_SYSCALL_BIT;
} else
currpers = 0;
break;
@@ -842,19 +1269,15 @@
currpers = current_personality;
break;
}
-# if 0
+# elif 0
/* This version analyzes the opcode of a syscall instruction.
* (int 0x80 on i386 vs. syscall on x86-64)
- * It works, but is too complicated.
+ * It works, but is too complicated, and strictly speaking, unreliable.
*/
- unsigned long val, rip, i;
-
- rip = x86_64_regs.rip;
-
+ unsigned long call, rip = x86_64_regs.rip;
/* sizeof(syscall) == sizeof(int 0x80) == 2 */
rip -= 2;
errno = 0;
-
call = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)rip, (char *)0);
if (errno)
fprintf(stderr, "ptrace_peektext failed: %s\n",
@@ -873,28 +1296,24 @@
break;
}
# endif
+
# ifdef X32
- /* Value of currpers:
- * 0: 64 bit
- * 1: 32 bit
- * 2: X32
- * Value of current_personality:
- * 0: X32
- * 1: 32 bit
+ /* If we are built for a x32 system, then personality 0 is x32
+ * (not x86_64), and stracing of x86_64 apps is not supported.
+ * Stracing of i386 apps is still supported.
*/
- switch (currpers) {
- case 0:
- fprintf(stderr, "syscall_%lu (...) in unsupported "
- "64-bit mode of process PID=%d\n",
- scno, tcp->pid);
- return 0;
- case 2:
- currpers = 0;
+ if (currpers == 0) {
+ fprintf(stderr, "syscall_%lu(...) in unsupported "
+ "64-bit mode of process PID=%d\n",
+ scno, tcp->pid);
+ return 0;
}
+ currpers &= ~2; /* map 2,1 to 0,1 */
# endif
update_personality(tcp, currpers);
#elif defined(IA64)
# define IA64_PSR_IS ((long)1 << 34)
+ long psr;
if (upeek(tcp, PT_CR_IPSR, &psr) >= 0)
ia32 = (psr & IA64_PSR_IS) != 0;
if (ia32) {
@@ -904,65 +1323,53 @@
if (upeek(tcp, PT_R15, &scno) < 0)
return -1;
}
-#elif defined(ARM)
- /* Read complete register set in one go. */
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1)
- return -1;
-
- /*
- * We only need to grab the syscall number on syscall entry.
- */
- if (regs.ARM_ip == 0) {
- /*
- * Note: we only deal with only 32-bit CPUs here.
- */
- if (regs.ARM_cpsr & 0x20) {
- /*
- * Get the Thumb-mode system call number
- */
- scno = regs.ARM_r7;
- } else {
- /*
- * Get the ARM-mode system call number
- */
- errno = 0;
- scno = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *)(regs.ARM_pc - 4), NULL);
- if (errno)
- return -1;
-
- /* Handle the EABI syscall convention. We do not
- bother converting structures between the two
- ABIs, but basic functionality should work even
- if strace and the traced program have different
- ABIs. */
- if (scno == 0xef000000) {
- scno = regs.ARM_r7;
- } else {
- if ((scno & 0x0ff00000) != 0x0f900000) {
- fprintf(stderr, "syscall: unknown syscall trap 0x%08lx\n",
- scno);
- return -1;
- }
-
- /*
- * Fixup the syscall number
- */
- scno &= 0x000fffff;
- }
- }
- if (scno & 0x0f0000) {
- /*
- * Handle ARM specific syscall
- */
+#elif defined(AARCH64)
+ switch (aarch64_io.iov_len) {
+ case sizeof(aarch64_regs):
+ /* We are in 64-bit mode */
+ scno = aarch64_regs.regs[8];
update_personality(tcp, 1);
- scno &= 0x0000ffff;
- } else
+ break;
+ case sizeof(arm_regs):
+ /* We are in 32-bit mode */
+ scno = arm_regs.ARM_r7;
update_personality(tcp, 0);
-
- } else {
- fprintf(stderr, "pid %d stray syscall entry\n", tcp->pid);
- tcp->flags |= TCB_INSYSCALL;
+ break;
}
+#elif defined(ARM)
+ if (arm_regs.ARM_ip != 0) {
+ /* It is not a syscall entry */
+ fprintf(stderr, "pid %d stray syscall exit\n", tcp->pid);
+ tcp->flags |= TCB_INSYSCALL;
+ return 0;
+ }
+ /* Note: we support only 32-bit CPUs, not 26-bit */
+
+ if (arm_regs.ARM_cpsr & 0x20) {
+ /* Thumb mode */
+ scno = arm_regs.ARM_r7;
+ } else {
+ /* ARM mode */
+ errno = 0;
+ scno = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *)(arm_regs.ARM_pc - 4), NULL);
+ if (errno)
+ return -1;
+
+ /* EABI syscall convention? */
+ if (scno == 0xef000000) {
+ scno = arm_regs.ARM_r7; /* yes */
+ } else {
+ if ((scno & 0x0ff00000) != 0x0f900000) {
+ fprintf(stderr, "pid %d unknown syscall trap 0x%08lx\n",
+ tcp->pid, scno);
+ return -1;
+ }
+ /* Fixup the syscall number */
+ scno &= 0x000fffff;
+ }
+ }
+
+ scno = shuffle_scno(scno);
#elif defined(M68K)
if (upeek(tcp, 4*PT_ORIG_D0, &scno) < 0)
return -1;
@@ -971,32 +1378,32 @@
if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) ®s) < 0)
return -1;
- a3 = regs[REG_A3];
- r2 = regs[REG_V0];
+ mips_a3 = regs[REG_A3];
+ mips_r2 = regs[REG_V0];
- scno = r2;
+ scno = mips_r2;
if (!SCNO_IN_RANGE(scno)) {
- if (a3 == 0 || a3 == -1) {
+ if (mips_a3 == 0 || mips_a3 == -1) {
if (debug_flag)
fprintf(stderr, "stray syscall exit: v0 = %ld\n", scno);
return 0;
}
}
#elif defined(MIPS)
- if (upeek(tcp, REG_A3, &a3) < 0)
+ if (upeek(tcp, REG_A3, &mips_a3) < 0)
return -1;
if (upeek(tcp, REG_V0, &scno) < 0)
return -1;
if (!SCNO_IN_RANGE(scno)) {
- if (a3 == 0 || a3 == -1) {
+ if (mips_a3 == 0 || mips_a3 == -1) {
if (debug_flag)
fprintf(stderr, "stray syscall exit: v0 = %ld\n", scno);
return 0;
}
}
#elif defined(ALPHA)
- if (upeek(tcp, REG_A3, &a3) < 0)
+ if (upeek(tcp, REG_A3, &alpha_a3) < 0)
return -1;
if (upeek(tcp, REG_R0, &scno) < 0)
return -1;
@@ -1006,25 +1413,22 @@
* really a syscall entry
*/
if (!SCNO_IN_RANGE(scno)) {
- if (a3 == 0 || a3 == -1) {
+ if (alpha_a3 == 0 || alpha_a3 == -1) {
if (debug_flag)
fprintf(stderr, "stray syscall exit: r0 = %ld\n", scno);
return 0;
}
}
#elif defined(SPARC) || defined(SPARC64)
- /* Everything we need is in the current register set. */
- if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)®s, 0) < 0)
- return -1;
-
/* Disassemble the syscall trap. */
/* Retrieve the syscall trap instruction. */
+ unsigned long trap;
errno = 0;
# if defined(SPARC64)
- trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)regs.tpc, 0);
+ trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)sparc_regs.tpc, 0);
trap >>= 32;
# else
- trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)regs.pc, 0);
+ trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)sparc_regs.pc, 0);
# endif
if (errno)
return -1;
@@ -1057,9 +1461,9 @@
break;
default:
# if defined(SPARC64)
- fprintf(stderr, "syscall: unknown syscall trap %08lx %016lx\n", trap, regs.tpc);
+ fprintf(stderr, "syscall: unknown syscall trap %08lx %016lx\n", trap, sparc_regs.tpc);
# else
- fprintf(stderr, "syscall: unknown syscall trap %08lx %08lx\n", trap, regs.pc);
+ fprintf(stderr, "syscall: unknown syscall trap %08lx %08lx\n", trap, sparc_regs.pc);
# endif
return -1;
}
@@ -1068,10 +1472,10 @@
if (trap == 0x91d02027)
scno = 156;
else
- scno = regs.u_regs[U_REG_G1];
+ scno = sparc_regs.u_regs[U_REG_G1];
if (scno == 0) {
- scno = regs.u_regs[U_REG_O0];
- memmove(®s.u_regs[U_REG_O0], ®s.u_regs[U_REG_O1], 7*sizeof(regs.u_regs[0]));
+ scno = sparc_regs.u_regs[U_REG_O0];
+ memmove(&sparc_regs.u_regs[U_REG_O0], &sparc_regs.u_regs[U_REG_O1], 7*sizeof(sparc_regs.u_regs[0]));
}
#elif defined(HPPA)
if (upeek(tcp, PT_GR20, &scno) < 0)
@@ -1104,24 +1508,46 @@
if (upeek(tcp, 4*PT_R9, &scno) < 0)
return -1;
#elif defined(TILE)
- if (upeek(tcp, PTREGS_OFFSET_REG(10), &scno) < 0)
- return -1;
+ int currpers;
+ scno = tile_regs.regs[10];
+# ifdef __tilepro__
+ currpers = 1;
+# else
+# ifndef PT_FLAGS_COMPAT
+# define PT_FLAGS_COMPAT 0x10000 /* from Linux 3.8 on */
+# endif
+ if (tile_regs.flags & PT_FLAGS_COMPAT)
+ currpers = 1;
+ else
+ currpers = 0;
+# endif
+ update_personality(tcp, currpers);
#elif defined(MICROBLAZE)
if (upeek(tcp, 0, &scno) < 0)
return -1;
-#endif
-
-#if defined(SH)
- /* new syscall ABI returns result in R0 */
- if (upeek(tcp, 4*REG_REG0, (long *)&r0) < 0)
- return -1;
-#elif defined(SH64)
- /* ABI defines result returned in r9 */
- if (upeek(tcp, REG_GENERAL(9), (long *)&r9) < 0)
+#elif defined(OR1K)
+ scno = or1k_regs.gpr[11];
+#elif defined(METAG)
+ scno = metag_regs.dx[0][1]; /* syscall number in D1Re0 (D1.0) */
+#elif defined(XTENSA)
+ if (upeek(tcp, SYSCALL_NR, &scno) < 0)
return -1;
#endif
tcp->scno = scno;
+ if (SCNO_IS_VALID(tcp->scno)) {
+ tcp->s_ent = &sysent[scno];
+ tcp->qual_flg = qual_flags[scno];
+ } else {
+ static const struct_sysent unknown = {
+ .nargs = MAX_ARGS,
+ .sys_flags = 0,
+ .sys_func = printargs,
+ .sys_name = "unknown", /* not used */
+ };
+ tcp->s_ent = &unknown;
+ tcp->qual_flg = UNDEFINED_SCNO | QUAL_RAW | DEFAULT_QUAL_FLAGS;
+ }
return 1;
}
@@ -1144,9 +1570,14 @@
}
#elif defined(X86_64) || defined(X32)
{
- long rax = x86_64_regs.rax;
- if (current_personality == 1)
- rax = (int)rax; /* sign extend from 32 bits */
+ long rax;
+ if (x86_io.iov_len == sizeof(i386_regs)) {
+ /* Sign extend from 32 bits */
+ rax = (int32_t)i386_regs.eax;
+ } else {
+ /* Note: in X32 build, this truncates 64 to 32 bits */
+ rax = x86_64_regs.rax;
+ }
if (rax != -ENOSYS) {
if (debug_flag)
fprintf(stderr, "not a syscall entry (rax = %ld)\n", rax);
@@ -1169,37 +1600,37 @@
}
#elif defined(M68K)
/* TODO? Eliminate upeek's in arches below like we did in x86 */
- if (upeek(tcp, 4*PT_D0, &d0) < 0)
+ if (upeek(tcp, 4*PT_D0, &m68k_d0) < 0)
return -1;
- if (d0 != -ENOSYS) {
+ if (m68k_d0 != -ENOSYS) {
if (debug_flag)
- fprintf(stderr, "not a syscall entry (d0 = %ld)\n", d0);
+ fprintf(stderr, "not a syscall entry (d0 = %ld)\n", m68k_d0);
return 0;
}
#elif defined(IA64)
- if (upeek(tcp, PT_R10, &r10) < 0)
+ if (upeek(tcp, PT_R10, &ia64_r10) < 0)
return -1;
- if (upeek(tcp, PT_R8, &r8) < 0)
+ if (upeek(tcp, PT_R8, &ia64_r8) < 0)
return -1;
- if (ia32 && r8 != -ENOSYS) {
+ if (ia32 && ia64_r8 != -ENOSYS) {
if (debug_flag)
- fprintf(stderr, "not a syscall entry (r8 = %ld)\n", r8);
+ fprintf(stderr, "not a syscall entry (r8 = %ld)\n", ia64_r8);
return 0;
}
#elif defined(CRISV10) || defined(CRISV32)
- if (upeek(tcp, 4*PT_R10, &r10) < 0)
+ if (upeek(tcp, 4*PT_R10, &cris_r10) < 0)
return -1;
- if (r10 != -ENOSYS) {
+ if (cris_r10 != -ENOSYS) {
if (debug_flag)
- fprintf(stderr, "not a syscall entry (r10 = %ld)\n", r10);
+ fprintf(stderr, "not a syscall entry (r10 = %ld)\n", cris_r10);
return 0;
}
#elif defined(MICROBLAZE)
- if (upeek(tcp, 3 * 4, &r3) < 0)
+ if (upeek(tcp, 3 * 4, µblaze_r3) < 0)
return -1;
- if (r3 != -ENOSYS) {
+ if (microblaze_r3 != -ENOSYS) {
if (debug_flag)
- fprintf(stderr, "not a syscall entry (r3 = %ld)\n", r3);
+ fprintf(stderr, "not a syscall entry (r3 = %ld)\n", microblaze_r3);
return 0;
}
#endif
@@ -1231,8 +1662,9 @@
* CLONE_UNTRACED, so we keep the same logic with that option
* and don't trace it.
*/
- if ((sysent[tcp->scno].sys_func == sys_clone) &&
- (tcp->u_arg[ARG_FLAGS] & CLONE_UNTRACED))
+ if ((tcp->s_ent->sys_func == sys_clone)
+ && (tcp->u_arg[ARG_FLAGS] & CLONE_UNTRACED)
+ )
return;
setbpt(tcp);
} else {
@@ -1258,7 +1690,7 @@
#endif
static void
-internal_syscall(struct tcb *tcp)
+syscall_fixup_for_fork_exec(struct tcb *tcp)
{
/*
* We must always trace a few critical system calls in order to
@@ -1267,10 +1699,7 @@
*/
int (*func)();
- if (!SCNO_IN_RANGE(tcp->scno))
- return;
-
- func = sysent[tcp->scno].sys_func;
+ func = tcp->s_ent->sys_func;
if ( sys_fork == func
|| sys_vfork == func
@@ -1298,10 +1727,7 @@
{
int i, nargs;
- if (SCNO_IN_RANGE(tcp->scno))
- nargs = tcp->u_nargs = sysent[tcp->scno].nargs;
- else
- nargs = tcp->u_nargs = MAX_ARGS;
+ nargs = tcp->s_ent->nargs;
#if defined(S390) || defined(S390X)
for (i = 0; i < nargs; ++i)
@@ -1391,23 +1817,29 @@
}
#elif defined(SPARC) || defined(SPARC64)
for (i = 0; i < nargs; ++i)
- tcp->u_arg[i] = regs.u_regs[U_REG_O0 + i];
+ tcp->u_arg[i] = sparc_regs.u_regs[U_REG_O0 + i];
#elif defined(HPPA)
for (i = 0; i < nargs; ++i)
if (upeek(tcp, PT_GR26-4*i, &tcp->u_arg[i]) < 0)
return -1;
-#elif defined(ARM)
+#elif defined(ARM) || defined(AARCH64)
+# if defined(AARCH64)
+ if (tcp->currpers == 1)
+ for (i = 0; i < nargs; ++i)
+ tcp->u_arg[i] = aarch64_regs.regs[i];
+ else
+# endif
for (i = 0; i < nargs; ++i)
- tcp->u_arg[i] = regs.uregs[i];
+ tcp->u_arg[i] = arm_regs.uregs[i];
#elif defined(AVR32)
(void)i;
(void)nargs;
- tcp->u_arg[0] = regs.r12;
- tcp->u_arg[1] = regs.r11;
- tcp->u_arg[2] = regs.r10;
- tcp->u_arg[3] = regs.r9;
- tcp->u_arg[4] = regs.r5;
- tcp->u_arg[5] = regs.r3;
+ tcp->u_arg[0] = avr32_regs.r12;
+ tcp->u_arg[1] = avr32_regs.r11;
+ tcp->u_arg[2] = avr32_regs.r10;
+ tcp->u_arg[3] = avr32_regs.r9;
+ tcp->u_arg[4] = avr32_regs.r5;
+ tcp->u_arg[5] = avr32_regs.r3;
#elif defined(BFIN)
static const int argreg[MAX_ARGS] = { PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5 };
@@ -1431,10 +1863,20 @@
for (i = 0; i < nargs; ++i)
if (upeek(tcp, REG_GENERAL(syscall_regs[i]), &tcp->u_arg[i]) < 0)
return -1;
+#elif defined(I386)
+ (void)i;
+ (void)nargs;
+ tcp->u_arg[0] = i386_regs.ebx;
+ tcp->u_arg[1] = i386_regs.ecx;
+ tcp->u_arg[2] = i386_regs.edx;
+ tcp->u_arg[3] = i386_regs.esi;
+ tcp->u_arg[4] = i386_regs.edi;
+ tcp->u_arg[5] = i386_regs.ebp;
#elif defined(X86_64) || defined(X32)
(void)i;
(void)nargs;
- if (current_personality != 1) { /* x86-64 or x32 ABI */
+ if (x86_io.iov_len != sizeof(i386_regs)) {
+ /* x86-64 or x32 ABI */
tcp->u_arg[0] = x86_64_regs.rdi;
tcp->u_arg[1] = x86_64_regs.rsi;
tcp->u_arg[2] = x86_64_regs.rdx;
@@ -1449,14 +1891,18 @@
tcp->ext_arg[4] = x86_64_regs.r8;
tcp->ext_arg[5] = x86_64_regs.r9;
# endif
- } else { /* i386 ABI */
- /* Sign-extend lower 32 bits */
- tcp->u_arg[0] = (long)(int)x86_64_regs.rbx;
- tcp->u_arg[1] = (long)(int)x86_64_regs.rcx;
- tcp->u_arg[2] = (long)(int)x86_64_regs.rdx;
- tcp->u_arg[3] = (long)(int)x86_64_regs.rsi;
- tcp->u_arg[4] = (long)(int)x86_64_regs.rdi;
- tcp->u_arg[5] = (long)(int)x86_64_regs.rbp;
+ } else {
+ /* i386 ABI */
+ /* Zero-extend from 32 bits */
+ /* Use widen_to_long(tcp->u_arg[N]) in syscall handlers
+ * if you need to use *sign-extended* parameter.
+ */
+ tcp->u_arg[0] = (long)(uint32_t)i386_regs.ebx;
+ tcp->u_arg[1] = (long)(uint32_t)i386_regs.ecx;
+ tcp->u_arg[2] = (long)(uint32_t)i386_regs.edx;
+ tcp->u_arg[3] = (long)(uint32_t)i386_regs.esi;
+ tcp->u_arg[4] = (long)(uint32_t)i386_regs.edi;
+ tcp->u_arg[5] = (long)(uint32_t)i386_regs.ebp;
}
#elif defined(MICROBLAZE)
for (i = 0; i < nargs; ++i)
@@ -1473,21 +1919,25 @@
return -1;
#elif defined(TILE)
for (i = 0; i < nargs; ++i)
- if (upeek(tcp, PTREGS_OFFSET_REG(i), &tcp->u_arg[i]) < 0)
- return -1;
+ tcp->u_arg[i] = tile_regs.regs[i];
#elif defined(M68K)
for (i = 0; i < nargs; ++i)
if (upeek(tcp, (i < 5 ? i : i + 2)*4, &tcp->u_arg[i]) < 0)
return -1;
-#elif defined(I386)
- (void)i;
+#elif defined(OR1K)
(void)nargs;
- tcp->u_arg[0] = i386_regs.ebx;
- tcp->u_arg[1] = i386_regs.ecx;
- tcp->u_arg[2] = i386_regs.edx;
- tcp->u_arg[3] = i386_regs.esi;
- tcp->u_arg[4] = i386_regs.edi;
- tcp->u_arg[5] = i386_regs.ebp;
+ for (i = 0; i < 6; ++i)
+ tcp->u_arg[i] = or1k_regs.gpr[3 + i];
+#elif defined(METAG)
+ for (i = 0; i < nargs; i++)
+ /* arguments go backwards from D1Ar1 (D1.3) */
+ tcp->u_arg[i] = ((unsigned long *)&metag_regs.dx[3][1])[-i];
+#elif defined(XTENSA)
+ /* arg0: a6, arg1: a3, arg2: a4, arg3: a5, arg4: a8, arg5: a9 */
+ static const int xtensaregs[MAX_ARGS] = { 6, 3, 4, 5, 8, 9 };
+ for (i = 0; i < nargs; ++i)
+ if (upeek(tcp, REG_A_BASE + xtensaregs[i], &tcp->u_arg[i]) < 0)
+ return -1;
#else /* Other architecture (32bits specific) */
for (i = 0; i < nargs; ++i)
if (upeek(tcp, i*4, &tcp->u_arg[i]) < 0)
@@ -1509,7 +1959,7 @@
}
#endif
- scno_good = res = get_scno(tcp);
+ scno_good = res = (get_regs_error ? -1 : get_scno(tcp));
if (res == 0)
return res;
if (res == 1) {
@@ -1524,10 +1974,10 @@
printleader(tcp);
if (scno_good != 1)
tprints("????" /* anti-trigraph gap */ "(");
- else if (!SCNO_IN_RANGE(tcp->scno))
- tprintf("syscall_%lu(", tcp->scno);
+ else if (tcp->qual_flg & UNDEFINED_SCNO)
+ tprintf("%s(", undefined_scno_name(tcp));
else
- tprintf("%s(", sysent[tcp->scno].sys_name);
+ tprintf("%s(", tcp->s_ent->sys_name);
/*
* " <unavailable>" will be added later by the code which
* detects ptrace errors.
@@ -1535,54 +1985,60 @@
goto ret;
}
+ if ( sys_execve == tcp->s_ent->sys_func
+# if defined(SPARC) || defined(SPARC64)
+ || sys_execv == tcp->s_ent->sys_func
+# endif
+ ) {
+ hide_log_until_execve = 0;
+ }
+
#if defined(SYS_socket_subcall) || defined(SYS_ipc_subcall)
- while (SCNO_IN_RANGE(tcp->scno)) {
+ while (1) {
# ifdef SYS_socket_subcall
- if (sysent[tcp->scno].sys_func == sys_socketcall) {
+ if (tcp->s_ent->sys_func == sys_socketcall) {
decode_socket_subcall(tcp);
break;
}
# endif
# ifdef SYS_ipc_subcall
- if (sysent[tcp->scno].sys_func == sys_ipc) {
+ if (tcp->s_ent->sys_func == sys_ipc) {
decode_ipc_subcall(tcp);
break;
}
# endif
break;
}
-#endif /* SYS_socket_subcall || SYS_ipc_subcall */
+#endif
- internal_syscall(tcp);
+ if (need_fork_exec_workarounds)
+ syscall_fixup_for_fork_exec(tcp);
- if ((SCNO_IN_RANGE(tcp->scno) &&
- !(qual_flags[tcp->scno] & QUAL_TRACE)) ||
- (tracing_paths && !pathtrace_match(tcp))) {
+ if (!(tcp->qual_flg & QUAL_TRACE)
+ || (tracing_paths && !pathtrace_match(tcp))
+ ) {
tcp->flags |= TCB_INSYSCALL | TCB_FILTERED;
return 0;
}
tcp->flags &= ~TCB_FILTERED;
- if (cflag == CFLAG_ONLY_STATS) {
+ if (cflag == CFLAG_ONLY_STATS || hide_log_until_execve) {
res = 0;
goto ret;
}
printleader(tcp);
- if (!SCNO_IN_RANGE(tcp->scno))
- tprintf("syscall_%lu(", tcp->scno);
+ if (tcp->qual_flg & UNDEFINED_SCNO)
+ tprintf("%s(", undefined_scno_name(tcp));
else
- tprintf("%s(", sysent[tcp->scno].sys_name);
- if (!SCNO_IN_RANGE(tcp->scno) ||
- ((qual_flags[tcp->scno] & QUAL_RAW) &&
- sysent[tcp->scno].sys_func != sys_exit))
+ tprintf("%s(", tcp->s_ent->sys_name);
+ if ((tcp->qual_flg & QUAL_RAW) && tcp->s_ent->sys_func != sys_exit)
res = printargs(tcp);
else
- res = (*sysent[tcp->scno].sys_func)(tcp);
+ res = tcp->s_ent->sys_func(tcp);
- if (fflush(tcp->outf) == EOF)
- return -1;
+ fflush(tcp->outf);
ret:
tcp->flags |= TCB_INSYSCALL;
/* Measure the entrance time as late as possible to avoid errors. */
@@ -1614,78 +2070,82 @@
ppc_result = -ppc_result;
}
#elif defined(AVR32)
- /* Read complete register set in one go. */
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, ®s) < 0)
- return -1;
+ /* already done by get_regs */
#elif defined(BFIN)
- if (upeek(tcp, PT_R0, &r0) < 0)
+ if (upeek(tcp, PT_R0, &bfin_r0) < 0)
return -1;
#elif defined(I386)
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &i386_regs) < 0)
- return -1;
+ /* already done by get_regs */
#elif defined(X86_64) || defined(X32)
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &x86_64_regs) < 0)
- return -1;
+ /* already done by get_regs */
#elif defined(IA64)
# define IA64_PSR_IS ((long)1 << 34)
+ long psr;
if (upeek(tcp, PT_CR_IPSR, &psr) >= 0)
ia32 = (psr & IA64_PSR_IS) != 0;
- if (upeek(tcp, PT_R8, &r8) < 0)
+ if (upeek(tcp, PT_R8, &ia64_r8) < 0)
return -1;
- if (upeek(tcp, PT_R10, &r10) < 0)
+ if (upeek(tcp, PT_R10, &ia64_r10) < 0)
return -1;
#elif defined(ARM)
- /* Read complete register set in one go. */
- if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1)
- return -1;
+ /* already done by get_regs */
+#elif defined(AARCH64)
+ /* register reading already done by get_regs */
+
+ /* Used to do this, but we did it on syscall entry already: */
+ /* We are in 64-bit mode (personality 1) if register struct is aarch64_regs,
+ * else it's personality 0.
+ */
+ /*update_personality(tcp, aarch64_io.iov_len == sizeof(aarch64_regs));*/
#elif defined(M68K)
- if (upeek(tcp, 4*PT_D0, &d0) < 0)
+ if (upeek(tcp, 4*PT_D0, &m68k_d0) < 0)
return -1;
#elif defined(LINUX_MIPSN32)
unsigned long long regs[38];
if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) ®s) < 0)
return -1;
- a3 = regs[REG_A3];
- r2 = regs[REG_V0];
+ mips_a3 = regs[REG_A3];
+ mips_r2 = regs[REG_V0];
#elif defined(MIPS)
- if (upeek(tcp, REG_A3, &a3) < 0)
+ if (upeek(tcp, REG_A3, &mips_a3) < 0)
return -1;
- if (upeek(tcp, REG_V0, &r2) < 0)
+ if (upeek(tcp, REG_V0, &mips_r2) < 0)
return -1;
#elif defined(ALPHA)
- if (upeek(tcp, REG_A3, &a3) < 0)
+ if (upeek(tcp, REG_A3, &alpha_a3) < 0)
return -1;
- if (upeek(tcp, REG_R0, &r0) < 0)
+ if (upeek(tcp, REG_R0, &alpha_r0) < 0)
return -1;
#elif defined(SPARC) || defined(SPARC64)
- /* Everything we need is in the current register set. */
- if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)®s, 0) < 0)
- return -1;
+ /* already done by get_regs */
#elif defined(HPPA)
- if (upeek(tcp, PT_GR28, &r28) < 0)
+ if (upeek(tcp, PT_GR28, &hppa_r28) < 0)
return -1;
#elif defined(SH)
-#elif defined(SH64)
-#elif defined(CRISV10) || defined(CRISV32)
- if (upeek(tcp, 4*PT_R10, &r10) < 0)
- return -1;
-#elif defined(TILE)
-#elif defined(MICROBLAZE)
- if (upeek(tcp, 3 * 4, &r3) < 0)
- return -1;
-#endif
-
-#if defined(SH)
/* new syscall ABI returns result in R0 */
- if (upeek(tcp, 4*REG_REG0, (long *)&r0) < 0)
+ if (upeek(tcp, 4*REG_REG0, (long *)&sh_r0) < 0)
return -1;
#elif defined(SH64)
/* ABI defines result returned in r9 */
- if (upeek(tcp, REG_GENERAL(9), (long *)&r9) < 0)
+ if (upeek(tcp, REG_GENERAL(9), (long *)&sh64_r9) < 0)
+ return -1;
+#elif defined(CRISV10) || defined(CRISV32)
+ if (upeek(tcp, 4*PT_R10, &cris_r10) < 0)
+ return -1;
+#elif defined(TILE)
+ /* already done by get_regs */
+#elif defined(MICROBLAZE)
+ if (upeek(tcp, 3 * 4, µblaze_r3) < 0)
+ return -1;
+#elif defined(OR1K)
+ /* already done by get_regs */
+#elif defined(METAG)
+ /* already done by get_regs */
+#elif defined(XTENSA)
+ if (upeek(tcp, REG_A_BASE + 2, &xtensa_a2) < 0)
return -1;
#endif
-
return 1;
}
@@ -1716,7 +2176,7 @@
is_negated_errno(unsigned long int val)
{
unsigned long int max = -(long int) nerrnos;
-#if SUPPORTED_PERSONALITIES > 1
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
if (current_wordsize < sizeof(val)) {
val = (unsigned int) val;
max = (unsigned int) max;
@@ -1725,18 +2185,35 @@
return val > max;
}
+#if defined(X32)
+static inline int
+is_negated_errno_x32(unsigned long long val)
+{
+ unsigned long long max = -(long long) nerrnos;
+ /*
+ * current_wordsize is 4 even in personality 0 (native X32)
+ * but truncation _must not_ be done in it.
+ * can't check current_wordsize here!
+ */
+ if (current_personality != 0) {
+ val = (uint32_t) val;
+ max = (uint32_t) max;
+ }
+ return val > max;
+}
+#endif
+
/* Returns:
* 1: ok, continue in trace_syscall_exiting().
* -1: error, trace_syscall_exiting() should print error indicator
* ("????" etc) and bail out.
*/
-static int
+static void
get_error(struct tcb *tcp)
{
int u_error = 0;
int check_errno = 1;
- if (SCNO_IN_RANGE(tcp->scno) &&
- sysent[tcp->scno].sys_flags & SYSCALL_NEVER_FAILS) {
+ if (tcp->s_ent->sys_flags & SYSCALL_NEVER_FAILS) {
check_errno = 0;
}
#if defined(S390) || defined(S390X)
@@ -1755,22 +2232,46 @@
else {
tcp->u_rval = i386_regs.eax;
}
-#elif defined(X86_64) || defined(X32)
- if (check_errno && is_negated_errno(x86_64_regs.rax)) {
+#elif defined(X86_64)
+ long rax;
+ if (x86_io.iov_len == sizeof(i386_regs)) {
+ /* Sign extend from 32 bits */
+ rax = (int32_t)i386_regs.eax;
+ } else {
+ rax = x86_64_regs.rax;
+ }
+ if (check_errno && is_negated_errno(rax)) {
tcp->u_rval = -1;
- u_error = -x86_64_regs.rax;
+ u_error = -rax;
}
else {
- tcp->u_rval = x86_64_regs.rax;
-# if defined(X32)
- tcp->u_lrval = x86_64_regs.rax;
-# endif
+ tcp->u_rval = rax;
+ }
+#elif defined(X32)
+ /* In X32, return value is 64-bit (llseek uses one).
+ * Using merely "long rax" would not work.
+ */
+ long long rax;
+ if (x86_io.iov_len == sizeof(i386_regs)) {
+ /* Sign extend from 32 bits */
+ rax = (int32_t)i386_regs.eax;
+ } else {
+ rax = x86_64_regs.rax;
+ }
+ /* Careful: is_negated_errno() works only on longs */
+ if (check_errno && is_negated_errno_x32(rax)) {
+ tcp->u_rval = -1;
+ u_error = -rax;
+ }
+ else {
+ tcp->u_rval = rax; /* truncating */
+ tcp->u_lrval = rax;
}
#elif defined(IA64)
if (ia32) {
int err;
- err = (int)r8;
+ err = (int)ia64_r8;
if (check_errno && is_negated_errno(err)) {
tcp->u_rval = -1;
u_error = -err;
@@ -1779,21 +2280,21 @@
tcp->u_rval = err;
}
} else {
- if (check_errno && r10) {
+ if (check_errno && ia64_r10) {
tcp->u_rval = -1;
- u_error = r8;
+ u_error = ia64_r8;
} else {
- tcp->u_rval = r8;
+ tcp->u_rval = ia64_r8;
}
}
#elif defined(MIPS)
- if (check_errno && a3) {
+ if (check_errno && mips_a3) {
tcp->u_rval = -1;
- u_error = r2;
+ u_error = mips_r2;
} else {
- tcp->u_rval = r2;
+ tcp->u_rval = mips_r2;
# if defined(LINUX_MIPSN32)
- tcp->u_lrval = r2;
+ tcp->u_lrval = mips_r2;
# endif
}
#elif defined(POWERPC)
@@ -1805,144 +2306,185 @@
tcp->u_rval = ppc_result;
}
#elif defined(M68K)
- if (check_errno && is_negated_errno(d0)) {
+ if (check_errno && is_negated_errno(m68k_d0)) {
tcp->u_rval = -1;
- u_error = -d0;
+ u_error = -m68k_d0;
}
else {
- tcp->u_rval = d0;
+ tcp->u_rval = m68k_d0;
}
-#elif defined(ARM)
- if (check_errno && is_negated_errno(regs.ARM_r0)) {
- tcp->u_rval = -1;
- u_error = -regs.ARM_r0;
+#elif defined(ARM) || defined(AARCH64)
+# if defined(AARCH64)
+ if (tcp->currpers == 1) {
+ if (check_errno && is_negated_errno(aarch64_regs.regs[0])) {
+ tcp->u_rval = -1;
+ u_error = -aarch64_regs.regs[0];
+ }
+ else {
+ tcp->u_rval = aarch64_regs.regs[0];
+ }
}
- else {
- tcp->u_rval = regs.ARM_r0;
+ else
+# endif
+ {
+ if (check_errno && is_negated_errno(arm_regs.ARM_r0)) {
+ tcp->u_rval = -1;
+ u_error = -arm_regs.ARM_r0;
+ }
+ else {
+ tcp->u_rval = arm_regs.ARM_r0;
+ }
}
#elif defined(AVR32)
- if (check_errno && regs.r12 && (unsigned) -regs.r12 < nerrnos) {
+ if (check_errno && avr32_regs.r12 && (unsigned) -avr32_regs.r12 < nerrnos) {
tcp->u_rval = -1;
- u_error = -regs.r12;
+ u_error = -avr32_regs.r12;
}
else {
- tcp->u_rval = regs.r12;
+ tcp->u_rval = avr32_regs.r12;
}
#elif defined(BFIN)
- if (check_errno && is_negated_errno(r0)) {
+ if (check_errno && is_negated_errno(bfin_r0)) {
tcp->u_rval = -1;
- u_error = -r0;
+ u_error = -bfin_r0;
} else {
- tcp->u_rval = r0;
+ tcp->u_rval = bfin_r0;
}
#elif defined(ALPHA)
- if (check_errno && a3) {
+ if (check_errno && alpha_a3) {
tcp->u_rval = -1;
- u_error = r0;
+ u_error = alpha_r0;
}
else {
- tcp->u_rval = r0;
+ tcp->u_rval = alpha_r0;
}
#elif defined(SPARC)
- if (check_errno && regs.psr & PSR_C) {
+ if (check_errno && sparc_regs.psr & PSR_C) {
tcp->u_rval = -1;
- u_error = regs.u_regs[U_REG_O0];
+ u_error = sparc_regs.u_regs[U_REG_O0];
}
else {
- tcp->u_rval = regs.u_regs[U_REG_O0];
+ tcp->u_rval = sparc_regs.u_regs[U_REG_O0];
}
#elif defined(SPARC64)
- if (check_errno && regs.tstate & 0x1100000000UL) {
+ if (check_errno && sparc_regs.tstate & 0x1100000000UL) {
tcp->u_rval = -1;
- u_error = regs.u_regs[U_REG_O0];
+ u_error = sparc_regs.u_regs[U_REG_O0];
}
else {
- tcp->u_rval = regs.u_regs[U_REG_O0];
+ tcp->u_rval = sparc_regs.u_regs[U_REG_O0];
}
#elif defined(HPPA)
- if (check_errno && is_negated_errno(r28)) {
+ if (check_errno && is_negated_errno(hppa_r28)) {
tcp->u_rval = -1;
- u_error = -r28;
+ u_error = -hppa_r28;
}
else {
- tcp->u_rval = r28;
+ tcp->u_rval = hppa_r28;
}
#elif defined(SH)
- if (check_errno && is_negated_errno(r0)) {
+ if (check_errno && is_negated_errno(sh_r0)) {
tcp->u_rval = -1;
- u_error = -r0;
+ u_error = -sh_r0;
}
else {
- tcp->u_rval = r0;
+ tcp->u_rval = sh_r0;
}
#elif defined(SH64)
- if (check_errno && is_negated_errno(r9)) {
+ if (check_errno && is_negated_errno(sh64_r9)) {
tcp->u_rval = -1;
- u_error = -r9;
+ u_error = -sh64_r9;
}
else {
- tcp->u_rval = r9;
+ tcp->u_rval = sh64_r9;
+ }
+#elif defined(METAG)
+ /* result pointer in D0Re0 (D0.0) */
+ if (check_errno && is_negated_errno(metag_regs.dx[0][0])) {
+ tcp->u_rval = -1;
+ u_error = -metag_regs.dx[0][0];
+ }
+ else {
+ tcp->u_rval = metag_regs.dx[0][0];
}
#elif defined(CRISV10) || defined(CRISV32)
- if (check_errno && r10 && (unsigned) -r10 < nerrnos) {
+ if (check_errno && cris_r10 && (unsigned) -cris_r10 < nerrnos) {
tcp->u_rval = -1;
- u_error = -r10;
+ u_error = -cris_r10;
}
else {
- tcp->u_rval = r10;
+ tcp->u_rval = cris_r10;
}
#elif defined(TILE)
- long rval;
- if (upeek(tcp, PTREGS_OFFSET_REG(0), &rval) < 0)
- return -1;
- if (check_errno && rval < 0 && rval > -nerrnos) {
+ /*
+ * The standard tile calling convention returns the value (or negative
+ * errno) in r0, and zero (or positive errno) in r1.
+ * Until at least kernel 3.8, however, the r1 value is not reflected
+ * in ptregs at this point, so we use r0 here.
+ */
+ if (check_errno && is_negated_errno(tile_regs.regs[0])) {
tcp->u_rval = -1;
- u_error = -rval;
- }
- else {
- tcp->u_rval = rval;
+ u_error = -tile_regs.regs[0];
+ } else {
+ tcp->u_rval = tile_regs.regs[0];
}
#elif defined(MICROBLAZE)
- if (check_errno && is_negated_errno(r3)) {
+ if (check_errno && is_negated_errno(microblaze_r3)) {
tcp->u_rval = -1;
- u_error = -r3;
+ u_error = -microblaze_r3;
}
else {
- tcp->u_rval = r3;
+ tcp->u_rval = microblaze_r3;
+ }
+#elif defined(OR1K)
+ if (check_errno && is_negated_errno(or1k_regs.gpr[11])) {
+ tcp->u_rval = -1;
+ u_error = -or1k_regs.gpr[11];
+ }
+ else {
+ tcp->u_rval = or1k_regs.gpr[11];
+ }
+#elif defined(XTENSA)
+ if (check_errno && is_negated_errno(xtensa_a2)) {
+ tcp->u_rval = -1;
+ u_error = -xtensa_a2;
+ }
+ else {
+ tcp->u_rval = xtensa_a2;
}
#endif
tcp->u_error = u_error;
- return 1;
}
static void
dumpio(struct tcb *tcp)
{
+ int (*func)();
+
if (syserror(tcp))
return;
- if (tcp->u_arg[0] < 0 || tcp->u_arg[0] >= MAX_QUALS)
+ if ((unsigned long) tcp->u_arg[0] >= num_quals)
return;
- if (!SCNO_IN_RANGE(tcp->scno))
- return;
- if (sysent[tcp->scno].sys_func == printargs)
+ func = tcp->s_ent->sys_func;
+ if (func == printargs)
return;
if (qual_flags[tcp->u_arg[0]] & QUAL_READ) {
- if (sysent[tcp->scno].sys_func == sys_read ||
- sysent[tcp->scno].sys_func == sys_pread ||
- sysent[tcp->scno].sys_func == sys_recv ||
- sysent[tcp->scno].sys_func == sys_recvfrom)
+ if (func == sys_read ||
+ func == sys_pread ||
+ func == sys_recv ||
+ func == sys_recvfrom)
dumpstr(tcp, tcp->u_arg[1], tcp->u_rval);
- else if (sysent[tcp->scno].sys_func == sys_readv)
+ else if (func == sys_readv)
dumpiov(tcp, tcp->u_arg[2], tcp->u_arg[1]);
return;
}
if (qual_flags[tcp->u_arg[0]] & QUAL_WRITE) {
- if (sysent[tcp->scno].sys_func == sys_write ||
- sysent[tcp->scno].sys_func == sys_pwrite ||
- sysent[tcp->scno].sys_func == sys_send ||
- sysent[tcp->scno].sys_func == sys_sendto)
+ if (func == sys_write ||
+ func == sys_pwrite ||
+ func == sys_send ||
+ func == sys_sendto)
dumpstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
- else if (sysent[tcp->scno].sys_func == sys_writev)
+ else if (func == sys_writev)
dumpiov(tcp, tcp->u_arg[2], tcp->u_arg[1]);
return;
}
@@ -1963,16 +2505,14 @@
#if SUPPORTED_PERSONALITIES > 1
update_personality(tcp, tcp->currpers);
#endif
- res = get_syscall_result(tcp);
+ res = (get_regs_error ? -1 : get_syscall_result(tcp));
if (res == 1) {
syscall_fixup_on_sysexit(tcp); /* never fails */
- res = get_error(tcp); /* returns 1 or -1 */
- if (res == 1) {
- internal_syscall(tcp);
- if (filtered(tcp)) {
- goto ret;
- }
- }
+ get_error(tcp); /* never fails */
+ if (need_fork_exec_workarounds)
+ syscall_fixup_for_fork_exec(tcp);
+ if (filtered(tcp) || hide_log_until_execve)
+ goto ret;
}
if (cflag) {
@@ -1995,10 +2535,10 @@
if ((followfork < 2 && printing_tcp != tcp) || (tcp->flags & TCB_REPRINT)) {
tcp->flags &= ~TCB_REPRINT;
printleader(tcp);
- if (!SCNO_IN_RANGE(tcp->scno))
- tprintf("<... syscall_%lu resumed> ", tcp->scno);
+ if (tcp->qual_flg & UNDEFINED_SCNO)
+ tprintf("<... %s resumed> ", undefined_scno_name(tcp));
else
- tprintf("<... %s resumed> ", sysent[tcp->scno].sys_name);
+ tprintf("<... %s resumed> ", tcp->s_ent->sys_name);
}
printing_tcp = tcp;
@@ -2013,8 +2553,7 @@
}
sys_res = 0;
- if (!SCNO_IN_RANGE(tcp->scno)
- || (qual_flags[tcp->scno] & QUAL_RAW)) {
+ if (tcp->qual_flg & QUAL_RAW) {
/* sys_res = printargs(tcp); - but it's nop on sysexit */
} else {
/* FIXME: not_failing_only (IOW, option -z) is broken:
@@ -2027,14 +2566,13 @@
*/
if (not_failing_only && tcp->u_error)
goto ret; /* ignore failed syscalls */
- sys_res = (*sysent[tcp->scno].sys_func)(tcp);
+ sys_res = tcp->s_ent->sys_func(tcp);
}
tprints(") ");
tabto();
u_error = tcp->u_error;
- if (!SCNO_IN_RANGE(tcp->scno) ||
- qual_flags[tcp->scno] & QUAL_RAW) {
+ if (tcp->qual_flg & QUAL_RAW) {
if (u_error)
tprintf("= -1 (errno %ld)", u_error);
else
@@ -2075,10 +2613,11 @@
/* pause(), rt_sigsuspend() etc use this code.
* SA_RESTART is ignored (assumed not set):
* syscall won't restart (will return EINTR instead)
- * even after signal with SA_RESTART set.
- * However, after SIG_IGN or SIG_DFL signal it will.
+ * even after signal with SA_RESTART set. However,
+ * after SIG_IGN or SIG_DFL signal it will restart
+ * (thus the name "restart only if has no handler").
*/
- tprints("= ? ERESTARTNOHAND (Interrupted by signal)");
+ tprints("= ? ERESTARTNOHAND (To be restarted if no handler)");
break;
case ERESTART_RESTARTBLOCK:
/* Syscalls like nanosleep(), poll() which can't be
diff --git a/system.c b/system.c
index a776492..26d0d7f 100644
--- a/system.c
+++ b/system.c
@@ -56,6 +56,7 @@
#define MS_KERNMOUNT (1<<22)
#define MS_I_VERSION (1<<23)
#define MS_STRICTATIME (1<<24)
+#define MS_NOSEC (1<<28)
#define MS_BORN (1<<29)
#define MS_ACTIVE (1<<30)
#define MS_NOUSER (1<<31)
@@ -91,6 +92,7 @@
{ MS_KERNMOUNT, "MS_KERNMOUNT" },
{ MS_I_VERSION, "MS_I_VERSION" },
{ MS_STRICTATIME,"MS_STRICTATIME"},
+ { MS_NOSEC, "MS_NOSEC" },
{ MS_BORN, "MS_BORN" },
{ MS_MANDLOCK, "MS_MANDLOCK" },
{ MS_NOATIME, "MS_NOATIME" },
@@ -376,7 +378,7 @@
/* size */
tprintf("%lu, ", tcp->u_arg[0]);
/* flags */
- printxval(sram_alloc_flags, tcp->u_arg[1], "???_SRAM");
+ printflags(sram_alloc_flags, tcp->u_arg[1], "???_SRAM");
}
return 1;
}
@@ -845,9 +847,9 @@
umoven(tcp, (unsigned long) info.name, size, (char *) name) < 0) {
free(name);
if (entering(tcp))
- tprintf("{%p, %d, %p, %p, %p, %Zu}",
+ tprintf("{%p, %d, %p, %p, %p, %lu}",
info.name, info.nlen, info.oldval,
- info.oldlenp, info.newval, info.newlen);
+ info.oldlenp, info.newval, (unsigned long)info.newlen);
return 0;
}
@@ -951,33 +953,33 @@
tprints(", ...");
tprintf("}, %d, ", info.nlen);
} else {
- size_t oldlen;
- if (umove(tcp, (size_t)info.oldlenp, &oldlen) >= 0
- && info.nlen >= 2
- && ((name[0] == CTL_KERN
- && (name[1] == KERN_OSRELEASE
- || name[1] == KERN_OSTYPE
+ size_t oldlen = 0;
+ if (info.oldval == NULL) {
+ tprints("NULL");
+ } else if (umove(tcp, (long)info.oldlenp, &oldlen) >= 0
+ && info.nlen >= 2
+ && ((name[0] == CTL_KERN
+ && (name[1] == KERN_OSRELEASE
+ || name[1] == KERN_OSTYPE
#ifdef KERN_JAVA_INTERPRETER
- || name[1] == KERN_JAVA_INTERPRETER
+ || name[1] == KERN_JAVA_INTERPRETER
#endif
#ifdef KERN_JAVA_APPLETVIEWER
- || name[1] == KERN_JAVA_APPLETVIEWER
+ || name[1] == KERN_JAVA_APPLETVIEWER
#endif
- )))) {
+ )))) {
printpath(tcp, (size_t)info.oldval);
- tprintf(", %Zu, ", oldlen);
- if (info.newval == 0)
- tprints("NULL");
- else if (syserror(tcp))
- tprintf("%p", info.newval);
- else
- printpath(tcp, (size_t)info.newval);
- tprintf(", %Zd", info.newlen);
} else {
- tprintf("%p, %Zd, %p, %Zd", info.oldval, oldlen,
- info.newval, info.newlen);
+ tprintf("%p", info.oldval);
}
- tprints("}");
+ tprintf(", %lu, ", (unsigned long)oldlen);
+ if (info.newval == NULL)
+ tprints("NULL");
+ else if (syserror(tcp))
+ tprintf("%p", info.newval);
+ else
+ printpath(tcp, (size_t)info.newval);
+ tprintf(", %lu", (unsigned long)info.newlen);
}
free(name);
@@ -1024,3 +1026,63 @@
}
#endif /* MIPS */
+
+#ifdef OR1K
+#define OR1K_ATOMIC_SWAP 1
+#define OR1K_ATOMIC_CMPXCHG 2
+#define OR1K_ATOMIC_XCHG 3
+#define OR1K_ATOMIC_ADD 4
+#define OR1K_ATOMIC_DECPOS 5
+#define OR1K_ATOMIC_AND 6
+#define OR1K_ATOMIC_OR 7
+#define OR1K_ATOMIC_UMAX 8
+#define OR1K_ATOMIC_UMIN 9
+
+static const struct xlat atomic_ops[] = {
+ { OR1K_ATOMIC_SWAP, "SWAP" },
+ { OR1K_ATOMIC_CMPXCHG, "CMPXCHG" },
+ { OR1K_ATOMIC_XCHG, "XCHG" },
+ { OR1K_ATOMIC_ADD, "ADD" },
+ { OR1K_ATOMIC_DECPOS, "DECPOS" },
+ { OR1K_ATOMIC_AND, "AND" },
+ { OR1K_ATOMIC_OR, "OR" },
+ { OR1K_ATOMIC_UMAX, "UMAX" },
+ { OR1K_ATOMIC_UMIN, "UMIN" },
+ { 0, NULL }
+};
+
+int sys_or1k_atomic(struct tcb *tcp)
+{
+ if (entering(tcp)) {
+ printxval(atomic_ops, tcp->u_arg[0], "???");
+ switch(tcp->u_arg[0]) {
+ case OR1K_ATOMIC_SWAP:
+ tprintf(", 0x%lx, 0x%lx", tcp->u_arg[1], tcp->u_arg[2]);
+ break;
+ case OR1K_ATOMIC_CMPXCHG:
+ tprintf(", 0x%lx, %#lx, %#lx", tcp->u_arg[1], tcp->u_arg[2],
+ tcp->u_arg[3]);
+ break;
+
+ case OR1K_ATOMIC_XCHG:
+ case OR1K_ATOMIC_ADD:
+ case OR1K_ATOMIC_AND:
+ case OR1K_ATOMIC_OR:
+ case OR1K_ATOMIC_UMAX:
+ case OR1K_ATOMIC_UMIN:
+ tprintf(", 0x%lx, %#lx", tcp->u_arg[1], tcp->u_arg[2]);
+ break;
+
+ case OR1K_ATOMIC_DECPOS:
+ tprintf(", 0x%lx", tcp->u_arg[1]);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return RVAL_HEX;
+}
+
+#endif /* OR1K */
diff --git a/util.c b/util.c
index 876852e..919b348 100644
--- a/util.c
+++ b/util.c
@@ -39,10 +39,6 @@
# include <sys/uio.h>
#endif
-#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1)
-# include <linux/ptrace.h>
-#endif
-
#if defined(IA64)
# include <asm/ptrace_offsets.h>
# include <asm/rse.h>
@@ -66,21 +62,6 @@
# undef pt_all_user_regs
#endif
-#if defined(SPARC64)
-# undef PTRACE_GETREGS
-# define PTRACE_GETREGS PTRACE_GETREGS64
-# undef PTRACE_SETREGS
-# define PTRACE_SETREGS PTRACE_SETREGS64
-#endif
-
-/* macros */
-#ifndef MAX
-# define MAX(a,b) (((a) > (b)) ? (a) : (b))
-#endif
-#ifndef MIN
-# define MIN(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
int
string_to_uint(const char *str)
{
@@ -191,40 +172,57 @@
tprintf("%#x /* %s */", val, dflt);
}
-#if HAVE_LONG_LONG
/*
- * Print 64bit argument at position llarg and return the index of the next
+ * Print 64bit argument at position arg_no and return the index of the next
* argument.
*/
int
-printllval(struct tcb *tcp, const char *format, int llarg)
+printllval(struct tcb *tcp, const char *format, int arg_no)
{
-# if defined(X86_64) || defined(POWERPC64)
- if (current_personality == 0) {
- tprintf(format, tcp->u_arg[llarg]);
- llarg++;
- } else {
-# ifdef POWERPC64
- /* Align 64bit argument to 64bit boundary. */
- llarg = (llarg + 1) & 0x1e;
-# endif
- tprintf(format, LONG_LONG(tcp->u_arg[llarg], tcp->u_arg[llarg + 1]));
- llarg += 2;
- }
-# elif defined IA64 || defined ALPHA
- tprintf(format, tcp->u_arg[llarg]);
- llarg++;
-# elif defined LINUX_MIPSN32 || defined X32
- tprintf(format, tcp->ext_arg[llarg]);
- llarg++;
-# else
- tprintf(format, LONG_LONG(tcp->u_arg[llarg], tcp->u_arg[llarg + 1]));
- llarg += 2;
+#if SIZEOF_LONG > 4 && SIZEOF_LONG == SIZEOF_LONG_LONG
+# if SUPPORTED_PERSONALITIES > 1
+ if (current_wordsize > 4) {
# endif
- return llarg;
-}
+ tprintf(format, tcp->u_arg[arg_no]);
+ arg_no++;
+# if SUPPORTED_PERSONALITIES > 1
+ } else {
+# if defined(AARCH64) || defined(POWERPC64)
+ /* Align arg_no to the next even number. */
+ arg_no = (arg_no + 1) & 0xe;
+# endif
+ tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]));
+ arg_no += 2;
+ }
+# endif /* SUPPORTED_PERSONALITIES */
+#elif SIZEOF_LONG > 4
+# error Unsupported configuration: SIZEOF_LONG > 4 && SIZEOF_LONG_LONG > SIZEOF_LONG
+#elif defined LINUX_MIPSN32
+ tprintf(format, tcp->ext_arg[arg_no]);
+ arg_no++;
+#elif defined X32
+ if (current_personality == 0) {
+ tprintf(format, tcp->ext_arg[arg_no]);
+ arg_no++;
+ } else {
+ tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]));
+ arg_no += 2;
+ }
+#else
+# if defined __ARM_EABI__ || \
+ defined LINUX_MIPSO32 || \
+ defined POWERPC || \
+ defined XTENSA
+ /* Align arg_no to the next even number. */
+ arg_no = (arg_no + 1) & 0xe;
+# endif
+ tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]));
+ arg_no += 2;
#endif
+ return arg_no;
+}
+
/*
* Interpret `xlat' as an array of flags
* print the entries whose bits are on in `flags'
@@ -357,10 +355,10 @@
void
printfd(struct tcb *tcp, int fd)
{
- const char *p;
+ char path[PATH_MAX + 1];
- if (show_fd_path && (p = getfdpath(tcp, fd)))
- tprintf("%d<%s>", fd, p);
+ if (show_fd_path && getfdpath(tcp, fd, path, sizeof(path)) >= 0)
+ tprintf("%d<%s>", fd, path);
else
tprintf("%d", fd);
}
@@ -404,7 +402,16 @@
/* Check for NUL-terminated string. */
if (c == eol)
break;
- if (!isprint(c) && !isspace(c)) {
+
+ /* Force hex unless c is printable or whitespace */
+ if (c > 0x7e) {
+ usehex = 1;
+ break;
+ }
+ /* In ASCII isspace is only these chars: "\t\n\v\f\r".
+ * They happen to have ASCII codes 9,10,11,12,13.
+ */
+ if (c < ' ' && (unsigned)(c - 9) >= 5) {
usehex = 1;
break;
}
@@ -457,7 +464,7 @@
*s++ = 'v';
break;
default:
- if (isprint(c))
+ if (c >= ' ' && c <= 0x7e)
*s++ = c;
else {
/* Print \octal */
@@ -665,54 +672,70 @@
{
static int strsize = -1;
static unsigned char *str;
- char *s;
- int i, j;
- if (strsize < len) {
+ char outbuf[
+ (
+ (sizeof(
+ "xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx "
+ "1234567890123456") + /*in case I'm off by few:*/ 4)
+ /*align to 8 to make memset easier:*/ + 7) & -8
+ ];
+ const unsigned char *src;
+ int i;
+
+ memset(outbuf, ' ', sizeof(outbuf));
+
+ if (strsize < len + 16) {
free(str);
- str = malloc(len);
+ str = malloc(len + 16);
if (!str) {
strsize = -1;
fprintf(stderr, "Out of memory\n");
return;
}
- strsize = len;
+ strsize = len + 16;
}
if (umoven(tcp, addr, len, (char *) str) < 0)
return;
- for (i = 0; i < len; i += 16) {
- char outstr[80];
+ /* Space-pad to 16 bytes */
+ i = len;
+ while (i & 0xf)
+ str[i++] = ' ';
- s = outstr;
- sprintf(s, " | %05x ", i);
- s += 9;
- for (j = 0; j < 16; j++) {
- if (j == 8)
- *s++ = ' ';
- if (i + j < len) {
- sprintf(s, " %02x", str[i + j]);
- s += 3;
+ i = 0;
+ src = str;
+ while (i < len) {
+ char *dst = outbuf;
+ /* Hex dump */
+ do {
+ if (i < len) {
+ *dst++ = "0123456789abcdef"[*src >> 4];
+ *dst++ = "0123456789abcdef"[*src & 0xf];
}
else {
- *s++ = ' '; *s++ = ' '; *s++ = ' ';
+ *dst++ = ' ';
+ *dst++ = ' ';
}
- }
- *s++ = ' '; *s++ = ' ';
- for (j = 0; j < 16; j++) {
- if (j == 8)
- *s++ = ' ';
- if (i + j < len) {
- if (isprint(str[i + j]))
- *s++ = str[i + j];
- else
- *s++ = '.';
- }
+ dst++; /* space is there by memset */
+ i++;
+ if ((i & 7) == 0)
+ dst++; /* space is there by memset */
+ src++;
+ } while (i & 0xf);
+ /* ASCII dump */
+ i -= 16;
+ src -= 16;
+ do {
+ if (*src >= ' ' && *src < 0x7f)
+ *dst++ = *src;
else
- *s++ = ' ';
- }
- tprintf("%s |\n", outstr);
+ *dst++ = '.';
+ src++;
+ } while (++i & 0xf);
+ *dst = '\0';
+ tprintf(" | %05x %s |\n", i - 16, outbuf);
}
}
@@ -737,7 +760,8 @@
#if defined(__NR_process_vm_readv)
static bool process_vm_readv_not_supported = 0;
-static ssize_t process_vm_readv(pid_t pid,
+/* Have to avoid duplicating with the C library headers. */
+static ssize_t strace_process_vm_readv(pid_t pid,
const struct iovec *lvec,
unsigned long liovcnt,
const struct iovec *rvec,
@@ -746,6 +770,7 @@
{
return syscall(__NR_process_vm_readv, (long)pid, lvec, liovcnt, rvec, riovcnt, flags);
}
+#define process_vm_readv strace_process_vm_readv
#else
static bool process_vm_readv_not_supported = 1;
# define process_vm_readv(...) (errno = ENOSYS, -1)
@@ -762,14 +787,13 @@
umoven(struct tcb *tcp, long addr, int len, char *laddr)
{
int pid = tcp->pid;
- int n, m;
- int started;
+ int n, m, nread;
union {
long val;
char x[sizeof(long)];
} u;
-#if SUPPORTED_PERSONALITIES > 1
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
if (current_wordsize < sizeof(addr))
addr &= (1ul << 8 * current_wordsize) - 1;
#endif
@@ -781,57 +805,88 @@
local[0].iov_base = laddr;
remote[0].iov_base = (void*)addr;
local[0].iov_len = remote[0].iov_len = len;
- r = process_vm_readv(pid,
- local, 1,
- remote, 1,
- /*flags:*/ 0
- );
- if (r < 0) {
- if (errno == ENOSYS)
- process_vm_readv_not_supported = 1;
- else if (errno != EINVAL) /* EINVAL is seen if process is gone */
- /* strange... */
- perror("process_vm_readv");
- goto vm_readv_didnt_work;
+ r = process_vm_readv(pid, local, 1, remote, 1, 0);
+ if (r == len)
+ return 0;
+ if (r >= 0) {
+ error_msg("umoven: short read (%d < %d) @0x%lx",
+ r, len, addr);
+ return -1;
}
- return r;
+ switch (errno) {
+ case ENOSYS:
+ process_vm_readv_not_supported = 1;
+ break;
+ case ESRCH:
+ /* the process is gone */
+ return -1;
+ case EFAULT: case EIO: case EPERM:
+ /* address space is inaccessible */
+ return -1;
+ default:
+ /* all the rest is strange and should be reported */
+ perror_msg("process_vm_readv");
+ return -1;
+ }
}
- vm_readv_didnt_work:
- started = 0;
+ nread = 0;
if (addr & (sizeof(long) - 1)) {
/* addr not a multiple of sizeof(long) */
n = addr - (addr & -sizeof(long)); /* residue */
addr &= -sizeof(long); /* residue */
errno = 0;
u.val = ptrace(PTRACE_PEEKDATA, pid, (char *) addr, 0);
- if (errno) {
- /* But if not started, we had a bogus address. */
- if (addr != 0 && errno != EIO && errno != ESRCH)
- perror_msg("umoven: PTRACE_PEEKDATA pid:%d @0x%lx", pid, addr);
- return -1;
+ switch (errno) {
+ case 0:
+ break;
+ case ESRCH: case EINVAL:
+ /* these could be seen if the process is gone */
+ return -1;
+ case EFAULT: case EIO: case EPERM:
+ /* address space is inaccessible */
+ return -1;
+ default:
+ /* all the rest is strange and should be reported */
+ perror_msg("umoven: PTRACE_PEEKDATA pid:%d @0x%lx",
+ pid, addr);
+ return -1;
}
- started = 1;
m = MIN(sizeof(long) - n, len);
memcpy(laddr, &u.x[n], m);
- addr += sizeof(long), laddr += m, len -= m;
+ addr += sizeof(long);
+ laddr += m;
+ nread += m;
+ len -= m;
}
while (len) {
errno = 0;
u.val = ptrace(PTRACE_PEEKDATA, pid, (char *) addr, 0);
- if (errno) {
- if (started && (errno==EPERM || errno==EIO)) {
- /* Ran into 'end of memory' - stupid "printpath" */
- return 0;
- }
- if (addr != 0 && errno != EIO && errno != ESRCH)
- perror_msg("umoven: PTRACE_PEEKDATA pid:%d @0x%lx", pid, addr);
- return -1;
+ switch (errno) {
+ case 0:
+ break;
+ case ESRCH: case EINVAL:
+ /* these could be seen if the process is gone */
+ return -1;
+ case EFAULT: case EIO: case EPERM:
+ /* address space is inaccessible */
+ if (nread) {
+ perror_msg("umoven: short read (%d < %d) @0x%lx",
+ nread, nread + len, addr - nread);
+ }
+ return -1;
+ default:
+ /* all the rest is strange and should be reported */
+ perror_msg("umoven: PTRACE_PEEKDATA pid:%d @0x%lx",
+ pid, addr);
+ return -1;
}
- started = 1;
m = MIN(sizeof(long), len);
memcpy(laddr, u.x, m);
- addr += sizeof(long), laddr += m, len -= m;
+ addr += sizeof(long);
+ laddr += m;
+ nread += m;
+ len -= m;
}
return 0;
@@ -852,19 +907,29 @@
int
umovestr(struct tcb *tcp, long addr, int len, char *laddr)
{
- int started;
+#if SIZEOF_LONG == 4
+ const unsigned long x01010101 = 0x01010101ul;
+ const unsigned long x80808080 = 0x80808080ul;
+#elif SIZEOF_LONG == 8
+ const unsigned long x01010101 = 0x0101010101010101ul;
+ const unsigned long x80808080 = 0x8080808080808080ul;
+#else
+# error SIZEOF_LONG > 8
+#endif
+
int pid = tcp->pid;
- int i, n, m;
+ int n, m, nread;
union {
- long val;
+ unsigned long val;
char x[sizeof(long)];
} u;
-#if SUPPORTED_PERSONALITIES > 1
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
if (current_wordsize < sizeof(addr))
addr &= (1ul << 8 * current_wordsize) - 1;
#endif
+ nread = 0;
if (!process_vm_readv_not_supported) {
struct iovec local[1], remote[1];
@@ -891,68 +956,103 @@
chunk_len = r; /* chunk_len -= end_in_page */
local[0].iov_len = remote[0].iov_len = chunk_len;
- r = process_vm_readv(pid,
- local, 1,
- remote, 1,
- /*flags:*/ 0
- );
- if (r < 0) {
- if (errno == ENOSYS)
- process_vm_readv_not_supported = 1;
- else if (errno != EINVAL) /* EINVAL is seen if process is gone */
- /* strange... */
- perror("process_vm_readv");
- goto vm_readv_didnt_work;
+ r = process_vm_readv(pid, local, 1, remote, 1, 0);
+ if (r > 0) {
+ if (memchr(local[0].iov_base, '\0', r))
+ return 1;
+ local[0].iov_base += r;
+ remote[0].iov_base += r;
+ len -= r;
+ nread += r;
+ continue;
}
- if (memchr(local[0].iov_base, '\0', r))
- return 1;
- local[0].iov_base += r;
- remote[0].iov_base += r;
- len -= r;
+ switch (errno) {
+ case ENOSYS:
+ process_vm_readv_not_supported = 1;
+ goto vm_readv_didnt_work;
+ case ESRCH:
+ /* the process is gone */
+ return -1;
+ case EFAULT: case EIO: case EPERM:
+ /* address space is inaccessible */
+ if (nread) {
+ perror_msg("umovestr: short read (%d < %d) @0x%lx",
+ nread, nread + len, addr);
+ }
+ return -1;
+ default:
+ /* all the rest is strange and should be reported */
+ perror_msg("process_vm_readv");
+ return -1;
+ }
}
return 0;
}
vm_readv_didnt_work:
- started = 0;
if (addr & (sizeof(long) - 1)) {
/* addr not a multiple of sizeof(long) */
n = addr - (addr & -sizeof(long)); /* residue */
addr &= -sizeof(long); /* residue */
errno = 0;
u.val = ptrace(PTRACE_PEEKDATA, pid, (char *)addr, 0);
- if (errno) {
- if (addr != 0 && errno != EIO && errno != ESRCH)
- perror_msg("umovestr: PTRACE_PEEKDATA pid:%d @0x%lx", pid, addr);
- return -1;
+ switch (errno) {
+ case 0:
+ break;
+ case ESRCH: case EINVAL:
+ /* these could be seen if the process is gone */
+ return -1;
+ case EFAULT: case EIO: case EPERM:
+ /* address space is inaccessible */
+ return -1;
+ default:
+ /* all the rest is strange and should be reported */
+ perror_msg("umovestr: PTRACE_PEEKDATA pid:%d @0x%lx",
+ pid, addr);
+ return -1;
}
- started = 1;
m = MIN(sizeof(long) - n, len);
memcpy(laddr, &u.x[n], m);
while (n & (sizeof(long) - 1))
if (u.x[n++] == '\0')
return 1;
- addr += sizeof(long), laddr += m, len -= m;
+ addr += sizeof(long);
+ laddr += m;
+ nread += m;
+ len -= m;
}
+
while (len) {
errno = 0;
u.val = ptrace(PTRACE_PEEKDATA, pid, (char *)addr, 0);
- if (errno) {
- if (started && (errno==EPERM || errno==EIO)) {
- /* Ran into 'end of memory' - stupid "printpath" */
- return 0;
- }
- if (addr != 0 && errno != EIO && errno != ESRCH)
- perror_msg("umovestr: PTRACE_PEEKDATA pid:%d @0x%lx", pid, addr);
- return -1;
+ switch (errno) {
+ case 0:
+ break;
+ case ESRCH: case EINVAL:
+ /* these could be seen if the process is gone */
+ return -1;
+ case EFAULT: case EIO: case EPERM:
+ /* address space is inaccessible */
+ if (nread) {
+ perror_msg("umovestr: short read (%d < %d) @0x%lx",
+ nread, nread + len, addr - nread);
+ }
+ return -1;
+ default:
+ /* all the rest is strange and should be reported */
+ perror_msg("umovestr: PTRACE_PEEKDATA pid:%d @0x%lx",
+ pid, addr);
+ return -1;
}
- started = 1;
m = MIN(sizeof(long), len);
memcpy(laddr, u.x, m);
- for (i = 0; i < sizeof(long); i++)
- if (u.x[i] == '\0')
- return 1;
- addr += sizeof(long), laddr += m, len -= m;
+ /* "If a NUL char exists in this word" */
+ if ((u.val - x01010101) & ~u.val & x80808080)
+ return 1;
+ addr += sizeof(long);
+ laddr += m;
+ nread += m;
+ len -= m;
}
return 0;
}
@@ -974,162 +1074,12 @@
return 0;
}
-void
-printcall(struct tcb *tcp)
-{
-#define PRINTBADPC tprintf(sizeof(long) == 4 ? "[????????] " : \
- sizeof(long) == 8 ? "[????????????????] " : \
- NULL /* crash */)
-
-#if defined(I386)
- long eip;
-
- if (upeek(tcp, 4*EIP, &eip) < 0) {
- PRINTBADPC;
- return;
- }
- tprintf("[%08lx] ", eip);
-#elif defined(S390) || defined(S390X)
- long psw;
- if (upeek(tcp, PT_PSWADDR, &psw) < 0) {
- PRINTBADPC;
- return;
- }
-# ifdef S390
- tprintf("[%08lx] ", psw);
-# elif S390X
- tprintf("[%16lx] ", psw);
-# endif
-
-#elif defined(X86_64) || defined(X32)
- long rip;
-
- if (upeek(tcp, 8*RIP, &rip) < 0) {
- PRINTBADPC;
- return;
- }
- tprintf("[%16lx] ", rip);
-#elif defined(IA64)
- long ip;
-
- if (upeek(tcp, PT_B0, &ip) < 0) {
- PRINTBADPC;
- return;
- }
- tprintf("[%08lx] ", ip);
-#elif defined(POWERPC)
- long pc;
-
- if (upeek(tcp, sizeof(unsigned long)*PT_NIP, &pc) < 0) {
- PRINTBADPC;
- return;
- }
-# ifdef POWERPC64
- tprintf("[%016lx] ", pc);
-# else
- tprintf("[%08lx] ", pc);
-# endif
-#elif defined(M68K)
- long pc;
-
- if (upeek(tcp, 4*PT_PC, &pc) < 0) {
- tprints("[????????] ");
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(ALPHA)
- long pc;
-
- if (upeek(tcp, REG_PC, &pc) < 0) {
- tprints("[????????????????] ");
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(SPARC) || defined(SPARC64)
- struct pt_regs regs;
- if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)®s, 0) < 0) {
- PRINTBADPC;
- return;
- }
-# if defined(SPARC64)
- tprintf("[%08lx] ", regs.tpc);
-# else
- tprintf("[%08lx] ", regs.pc);
-# endif
-#elif defined(HPPA)
- long pc;
-
- if (upeek(tcp, PT_IAOQ0, &pc) < 0) {
- tprints("[????????] ");
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(MIPS)
- long pc;
-
- if (upeek(tcp, REG_EPC, &pc) < 0) {
- tprints("[????????] ");
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(SH)
- long pc;
-
- if (upeek(tcp, 4*REG_PC, &pc) < 0) {
- tprints("[????????] ");
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(SH64)
- long pc;
-
- if (upeek(tcp, REG_PC, &pc) < 0) {
- tprints("[????????????????] ");
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(ARM)
- long pc;
-
- if (upeek(tcp, 4*15, &pc) < 0) {
- PRINTBADPC;
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(AVR32)
- long pc;
-
- if (upeek(tcp, REG_PC, &pc) < 0) {
- tprints("[????????] ");
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(BFIN)
- long pc;
-
- if (upeek(tcp, PT_PC, &pc) < 0) {
- PRINTBADPC;
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(CRISV10)
- long pc;
-
- if (upeek(tcp, 4*PT_IRP, &pc) < 0) {
- PRINTBADPC;
- return;
- }
- tprintf("[%08lx] ", pc);
-#elif defined(CRISV32)
- long pc;
-
- if (upeek(tcp, 4*PT_ERP, &pc) < 0) {
- PRINTBADPC;
- return;
- }
- tprintf("[%08lx] ", pc);
-#endif /* architecture */
-}
+/* Note! On new kernels (about 2.5.46+), we use PTRACE_O_TRACECLONE
+ * and PTRACE_O_TRACE[V]FORK for tracing children.
+ * If you are adding a new arch which is only supported by newer kernels,
+ * you most likely don't need to add any code below
+ * beside a dummy "return 0" block in change_syscall().
+ */
/*
* These #if's are huge, please indent them correctly.
@@ -1148,116 +1098,6 @@
# define CLONE_VM 0x00000100
#endif
-static int
-change_syscall(struct tcb *tcp, int new)
-{
-#if defined(I386)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(ORIG_EAX * 4), new) < 0)
- return -1;
- return 0;
-#elif defined(X86_64) || defined(X32)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(ORIG_RAX * 8), new) < 0)
- return -1;
- return 0;
-#elif defined(POWERPC)
- if (ptrace(PTRACE_POKEUSER, tcp->pid,
- (char*)(sizeof(unsigned long)*PT_R0), new) < 0)
- return -1;
- return 0;
-#elif defined(S390) || defined(S390X)
- /* s390 linux after 2.4.7 has a hook in entry.S to allow this */
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_GPR2), new) < 0)
- return -1;
- return 0;
-#elif defined(M68K)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(4*PT_ORIG_D0), new) < 0)
- return -1;
- return 0;
-#elif defined(SPARC) || defined(SPARC64)
- struct pt_regs regs;
- if (ptrace(PTRACE_GETREGS, tcp->pid, (char*)®s, 0) < 0)
- return -1;
- regs.u_regs[U_REG_G1] = new;
- if (ptrace(PTRACE_SETREGS, tcp->pid, (char*)®s, 0) < 0)
- return -1;
- return 0;
-#elif defined(MIPS)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_V0), new) < 0)
- return -1;
- return 0;
-#elif defined(ALPHA)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_A3), new) < 0)
- return -1;
- return 0;
-#elif defined(AVR32)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_R8), new) < 0)
- return -1;
- return 0;
-#elif defined(BFIN)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_P0), new) < 0)
- return -1;
- return 0;
-#elif defined(IA64)
- if (ia32) {
- switch (new) {
- case 2:
- break; /* x86 SYS_fork */
- case SYS_clone:
- new = 120;
- break;
- default:
- fprintf(stderr, "%s: unexpected syscall %d\n",
- __FUNCTION__, new);
- return -1;
- }
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_R1), new) < 0)
- return -1;
- } else if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_R15), new) < 0)
- return -1;
- return 0;
-#elif defined(HPPA)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_GR20), new) < 0)
- return -1;
- return 0;
-#elif defined(SH)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(4*(REG_REG0+3)), new) < 0)
- return -1;
- return 0;
-#elif defined(SH64)
- /* Top half of reg encodes the no. of args n as 0x1n.
- Assume 0 args as kernel never actually checks... */
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_SYSCALL),
- 0x100000 | new) < 0)
- return -1;
- return 0;
-#elif defined(CRISV10) || defined(CRISV32)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(4*PT_R9), new) < 0)
- return -1;
- return 0;
-#elif defined(ARM)
- /* Some kernels support this, some (pre-2.6.16 or so) don't. */
-# ifndef PTRACE_SET_SYSCALL
-# define PTRACE_SET_SYSCALL 23
-# endif
- if (ptrace(PTRACE_SET_SYSCALL, tcp->pid, 0, new & 0xffff) != 0)
- return -1;
- return 0;
-#elif defined(TILE)
- if (ptrace(PTRACE_POKEUSER, tcp->pid,
- (char*)PTREGS_OFFSET_REG(0),
- new) != 0)
- return -1;
- return 0;
-#elif defined(MICROBLAZE)
- if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_GPR(0)), new) < 0)
- return -1;
- return 0;
-#else
-#warning Do not know how to handle change_syscall for this architecture
-#endif /* architecture */
- return -1;
-}
-
#ifdef IA64
typedef unsigned long *arg_setup_state;
@@ -1357,6 +1197,13 @@
#elif defined(SPARC) || defined(SPARC64)
+# if defined(SPARC64)
+# undef PTRACE_GETREGS
+# define PTRACE_GETREGS PTRACE_GETREGS64
+# undef PTRACE_SETREGS
+# define PTRACE_SETREGS PTRACE_SETREGS64
+# endif
+
typedef struct pt_regs arg_setup_state;
# define arg_setup(tcp, state) \
@@ -1386,9 +1233,6 @@
# elif defined(ALPHA) || defined(MIPS)
# define arg0_offset REG_A0
# define arg1_offset (REG_A0+1)
-# elif defined(AVR32)
-# define arg0_offset (REG_R12)
-# define arg1_offset (REG_R11)
# elif defined(POWERPC)
# define arg0_offset (sizeof(unsigned long)*PT_R3)
# define arg1_offset (sizeof(unsigned long)*PT_R4)
@@ -1455,6 +1299,119 @@
# define arg1_index 1
#endif
+static int
+change_syscall(struct tcb *tcp, arg_setup_state *state, int new)
+{
+#if defined(I386)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(ORIG_EAX * 4), new) < 0)
+ return -1;
+ return 0;
+#elif defined(X86_64)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(ORIG_RAX * 8), new) < 0)
+ return -1;
+ return 0;
+#elif defined(X32)
+ /* setbpt/clearbpt never used: */
+ /* X32 is only supported since about linux-3.0.30 */
+#elif defined(POWERPC)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid,
+ (char*)(sizeof(unsigned long)*PT_R0), new) < 0)
+ return -1;
+ return 0;
+#elif defined(S390) || defined(S390X)
+ /* s390 linux after 2.4.7 has a hook in entry.S to allow this */
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_GPR2), new) < 0)
+ return -1;
+ return 0;
+#elif defined(M68K)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(4*PT_ORIG_D0), new) < 0)
+ return -1;
+ return 0;
+#elif defined(SPARC) || defined(SPARC64)
+ state->u_regs[U_REG_G1] = new;
+ return 0;
+#elif defined(MIPS)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_V0), new) < 0)
+ return -1;
+ return 0;
+#elif defined(ALPHA)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_A3), new) < 0)
+ return -1;
+ return 0;
+#elif defined(AVR32)
+ /* setbpt/clearbpt never used: */
+ /* AVR32 is only supported since about linux-2.6.19 */
+#elif defined(BFIN)
+ /* setbpt/clearbpt never used: */
+ /* Blackfin is only supported since about linux-2.6.23 */
+#elif defined(IA64)
+ if (ia32) {
+ switch (new) {
+ case 2:
+ break; /* x86 SYS_fork */
+ case SYS_clone:
+ new = 120;
+ break;
+ default:
+ fprintf(stderr, "%s: unexpected syscall %d\n",
+ __FUNCTION__, new);
+ return -1;
+ }
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_R1), new) < 0)
+ return -1;
+ } else if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_R15), new) < 0)
+ return -1;
+ return 0;
+#elif defined(HPPA)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(PT_GR20), new) < 0)
+ return -1;
+ return 0;
+#elif defined(SH)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(4*(REG_REG0+3)), new) < 0)
+ return -1;
+ return 0;
+#elif defined(SH64)
+ /* Top half of reg encodes the no. of args n as 0x1n.
+ Assume 0 args as kernel never actually checks... */
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(REG_SYSCALL),
+ 0x100000 | new) < 0)
+ return -1;
+ return 0;
+#elif defined(CRISV10) || defined(CRISV32)
+ if (ptrace(PTRACE_POKEUSER, tcp->pid, (char*)(4*PT_R9), new) < 0)
+ return -1;
+ return 0;
+#elif defined(ARM)
+ /* Some kernels support this, some (pre-2.6.16 or so) don't. */
+# ifndef PTRACE_SET_SYSCALL
+# define PTRACE_SET_SYSCALL 23
+# endif
+ if (ptrace(PTRACE_SET_SYSCALL, tcp->pid, 0, new & 0xffff) != 0)
+ return -1;
+ return 0;
+#elif defined(AARCH64)
+ /* setbpt/clearbpt never used: */
+ /* AARCH64 is only supported since about linux-3.0.31 */
+#elif defined(TILE)
+ /* setbpt/clearbpt never used: */
+ /* Tilera CPUs are only supported since about linux-2.6.34 */
+#elif defined(MICROBLAZE)
+ /* setbpt/clearbpt never used: */
+ /* microblaze is only supported since about linux-2.6.30 */
+#elif defined(OR1K)
+ /* never reached; OR1K is only supported by kernels since 3.1.0. */
+#elif defined(METAG)
+ /* setbpt/clearbpt never used: */
+ /* Meta is only supported since linux-3.7 */
+#elif defined(XTENSA)
+ /* setbpt/clearbpt never used: */
+ /* Xtensa is only supported since linux 2.6.13 */
+#else
+#warning Do not know how to handle change_syscall for this architecture
+#endif /* architecture */
+ return -1;
+}
+
int
setbpt(struct tcb *tcp)
{
@@ -1480,12 +1437,13 @@
}
}
- if (sysent[tcp->scno].sys_func == sys_fork ||
- sysent[tcp->scno].sys_func == sys_vfork) {
+ if (tcp->s_ent->sys_func == sys_fork ||
+ tcp->s_ent->sys_func == sys_vfork) {
if (arg_setup(tcp, &state) < 0
|| get_arg0(tcp, &state, &tcp->inst[0]) < 0
|| get_arg1(tcp, &state, &tcp->inst[1]) < 0
- || change_syscall(tcp, clone_scno[current_personality]) < 0
+ || change_syscall(tcp, &state,
+ clone_scno[current_personality]) < 0
|| set_arg0(tcp, &state, CLONE_PTRACE|SIGCHLD) < 0
|| set_arg1(tcp, &state, 0) < 0
|| arg_finish_change(tcp, &state) < 0)
@@ -1496,7 +1454,7 @@
return 0;
}
- if (sysent[tcp->scno].sys_func == sys_clone) {
+ if (tcp->s_ent->sys_func == sys_clone) {
/* ia64 calls directly `clone (CLONE_VFORK | CLONE_VM)'
contrary to x86 vfork above. Even on x86 we turn the
vfork semantics into plain fork - each application must not
@@ -1512,9 +1470,9 @@
|| set_arg0(tcp, &state, new_arg0) < 0
|| arg_finish_change(tcp, &state) < 0)
return -1;
- tcp->flags |= TCB_BPTSET;
tcp->inst[0] = tcp->u_arg[arg0_index];
tcp->inst[1] = tcp->u_arg[arg1_index];
+ tcp->flags |= TCB_BPTSET;
return 0;
}
@@ -1528,6 +1486,7 @@
{
arg_setup_state state;
if (arg_setup(tcp, &state) < 0
+ || change_syscall(tcp, &state, tcp->scno) < 0
|| restore_arg0(tcp, &state, tcp->inst[0]) < 0
|| restore_arg1(tcp, &state, tcp->inst[1]) < 0
|| arg_finish_change(tcp, &state))
diff --git a/vsprintf.c b/vsprintf.c
index b66609a..f6019f0 100644
--- a/vsprintf.c
+++ b/vsprintf.c
@@ -759,8 +759,8 @@
int strace_vfprintf(FILE *fp, const char *fmt, va_list args)
{
- static char *buf;
- static unsigned buflen;
+ static char *buf = NULL;
+ static unsigned buflen = 0;
int r;
va_list a1;
@@ -773,6 +773,8 @@
buflen = len + 256;
free(buf);
buf = malloc(buflen);
+ if (!buf)
+ die_out_of_memory();
/*len =*/ kernel_vsnprintf(buf, buflen, fmt, args);
}