Merge remote-tracking branch 'strace/master' into HEAD
diff --git a/Makefile.am b/Makefile.am
index a789b8c..be05946 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,6 +14,8 @@
 AM_CFLAGS = $(WARN_CFLAGS)
 AM_CPPFLAGS = -I$(srcdir)/$(OS)/$(ARCH) -I$(srcdir)/$(OS) -I$(builddir)/$(OS)
 
+include xlat/Makemodule.am
+
 strace_SOURCES =	\
 	aio.c		\
 	bjm.c		\
@@ -52,6 +54,15 @@
 	util.c		\
 	vsprintf.c
 
+if USE_LIBUNWIND
+strace_SOURCES += unwind.c
+strace_CPPFLAGS = $(AM_CPPFLAGS) $(libunwind_CPPFLAGS)
+strace_LDFLAGS = $(libunwind_LDFLAGS)
+strace_LDADD = $(libunwind_LIBS)
+else
+strace_CPPFLAGS = $(AM_CPPFLAGS)
+endif
+
 noinst_HEADERS = defs.h
 # Enable this to get link map generated
 #strace_CFLAGS = $(AM_CFLAGS) -Wl,-Map=strace.mapfile
@@ -213,6 +224,9 @@
 	strace-log-merge		\
 	strace.spec			\
 	syscallent.sh			\
+	$(XLAT_INPUT_FILES)		\
+	$(XLAT_HEADER_FILES)		\
+	xlat/gen.sh			\
 	xlate.el
 
 .PHONY: srpm
diff --git a/NEWS b/NEWS
index eed78c2..3347236 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,42 @@
-Noteworthy changes in release ?.? (????-??-??)
+Noteworthy changes in release 4.9 (????-??-??)
 ==============================================
 
+* Changes in behavior
+  * Disabled OABI support on ARM EABI systems by default,
+    added --enable-arm-oabi option to enable it at configure time.
+
+* Improvements
+  * Added -k option to print stack trace after each traced syscall.
+  * Added -w option to produce stats on syscall latency.
+    (addresses Debian bug #457497).
+  * Added ARC architecture support.
+  * Added PTRACE_GETREGS API support on PowerPC.
+  * Enhanced Bionic libc and musl libc support.
+  * Enhanced tracing of x86 personality processes on x86_64 and x32.
+  * Enhanced tracing of ARM personality processes on AArch64.
+  * Enhanced 32/64bit personality detection on PowerPC.
+  * Robustified decoding of select, pselect, and io_submit syscalls.
+  * Enhanced decoding of delete_module, fcntl, setdomainname, sethostname,
+    setns, and sync_file_range syscalls.
+  * Enhanced decoding of signal bitmasks.
+  * Enhanced decoding of file descriptors.
+  * Enhanced siginfo_t decoding.
+  * Enhanced PF_NETLINK decoding.
+  * Updated CLOCK_* constants
+    (addresses Fedora bug #1088455).
+
+* Bug fixes
+  * Added shmat and shmdt to the set of memory mapping related syscalls.
+  * Fixed detaching from stopped processes.
+  * Fixed fanotify_mark decoding on 32bit architectures.
+  * Fixed offset decoding in preadv and pwritev syscalls.
+  * Fixed select decoding for glibc in _FORTIFY_SOURCE mode.
+  * Fixed decoding of epoll_ctl syscall with EPOLL_CTL_DEL argument.
+  * Fixed build when <sys/ptrace.h> and <linux/ptrace.h> conflict
+    (addresses Fedora bug #993384).
+  * Miscellaneous corrections in the manual page.
+    (Addresses Debian bug #725987).
+
 Noteworthy changes in release 4.8 (2013-06-03)
 ==============================================
 
diff --git a/bjm.c b/bjm.c
index d7acff0..b34c6ed 100644
--- a/bjm.c
+++ b/bjm.c
@@ -69,26 +69,9 @@
 	long usecount;
 };
 
-static const struct xlat which[] = {
-	XLAT(0),
-	XLAT(QM_MODULES),
-	XLAT(QM_DEPS),
-	XLAT(QM_REFS),
-	XLAT(QM_SYMBOLS),
-	XLAT(QM_INFO),
-	XLAT_END
-};
-
-static const struct xlat modflags[] = {
-	XLAT(MOD_UNINITIALIZED),
-	XLAT(MOD_RUNNING),
-	XLAT(MOD_DELETED),
-	XLAT(MOD_AUTOCLEAN),
-	XLAT(MOD_VISITED),
-	XLAT(MOD_USED_ONCE),
-	XLAT(MOD_JUST_FREED),
-	XLAT_END
-};
+#include "xlat/qm_which.h"
+#include "xlat/modflags.h"
+#include "xlat/delete_module_flags.h"
 
 int
 sys_query_module(struct tcb *tcp)
@@ -96,7 +79,7 @@
 	if (entering(tcp)) {
 		printstr(tcp, tcp->u_arg[0], -1);
 		tprints(", ");
-		printxval(which, tcp->u_arg[1], "QM_???");
+		printxval(qm_which, tcp->u_arg[1], "QM_???");
 		tprints(", ");
 	} else {
 		size_t ret;
@@ -192,6 +175,17 @@
 }
 
 int
+sys_delete_module(struct tcb *tcp)
+{
+	if (entering(tcp)) {
+		printstr(tcp, tcp->u_arg[0], -1);
+		tprints(", ");
+		printflags(delete_module_flags, tcp->u_arg[1], "O_???");
+	}
+	return 0;
+}
+
+int
 sys_init_module(struct tcb *tcp)
 {
 	if (entering(tcp)) {
@@ -204,11 +198,7 @@
 #define MODULE_INIT_IGNORE_MODVERSIONS  1
 #define MODULE_INIT_IGNORE_VERMAGIC     2
 
-static const struct xlat module_init_flags[] = {
-	XLAT(MODULE_INIT_IGNORE_MODVERSIONS),
-	XLAT(MODULE_INIT_IGNORE_VERMAGIC),
-	XLAT_END
-};
+#include "xlat/module_init_flags.h"
 
 int
 sys_finit_module(struct tcb *tcp)
diff --git a/block.c b/block.c
index 58f4215..b281b1a 100644
--- a/block.c
+++ b/block.c
@@ -79,11 +79,7 @@
 #define BLKSECDISCARD _IO(0x12,125)
 #endif
 
-static const struct xlat blkpg_ops[] = {
-	XLAT(BLKPG_ADD_PARTITION),
-	XLAT(BLKPG_DEL_PARTITION),
-	XLAT_END
-};
+#include "xlat/blkpg_ops.h"
 
 static void
 print_blkpg_req(struct tcb *tcp, struct blkpg_ioctl_arg *blkpg)
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 0000000..91d1a8f
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,3 @@
+#!/bin/sh
+./xlat/gen.sh
+exec autoreconf -f -i "$@"
diff --git a/build_static_example.sh b/build_static_example.sh
index 5c0e5fa..31ee264 100755
--- a/build_static_example.sh
+++ b/build_static_example.sh
@@ -24,6 +24,6 @@
  -Wl,-Map=strace.mapfile\
 "
 
-autoreconf -i -f
+./bootstrap
 ./configure $BUILDFLAG #--enable-maintainer-mode
 make CC="$CC" CFLAGS="$CFLAGS"
diff --git a/configure.ac b/configure.ac
index 0969173..9aeb3a6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -293,10 +293,328 @@
 ]),,, [#include <sys/ptrace.h>])
 
 AC_CHECK_DECLS(m4_normalize([
+	P_PID,
+	P_PPID,
+	P_PGID,
+	P_SID,
+	P_CID,
+	P_UID,
+	P_GID,
+	P_ALL,
+	P_LWPID
+]),,, [#include <sys/wait.h>])
+
+AC_CHECK_DECLS(m4_normalize([
+	LO_FLAGS_READ_ONLY,
 	LO_FLAGS_AUTOCLEAR,
 	LO_FLAGS_PARTSCAN
 ]),,, [#include <linux/loop.h>])
 
+AC_CHECK_DECLS(m4_normalize([
+	CTL_KERN,
+	CTL_VM,
+	CTL_NET,
+	CTL_PROC,
+	CTL_FS,
+	CTL_DEBUG,
+	CTL_DEV,
+	CTL_BUS,
+	CTL_ABI,
+	CTL_CPU,
+	CTL_ARLAN,
+	CTL_S390DBF,
+	CTL_SUNRPC,
+	CTL_PM,
+	CTL_FRV,
+	KERN_OSTYPE,
+	KERN_OSRELEASE,
+	KERN_OSREV,
+	KERN_VERSION,
+	KERN_SECUREMASK,
+	KERN_PROF,
+	KERN_NODENAME,
+	KERN_DOMAINNAME,
+	KERN_PANIC,
+	KERN_REALROOTDEV,
+	KERN_SPARC_REBOOT,
+	KERN_CTLALTDEL,
+	KERN_PRINTK,
+	KERN_NAMETRANS,
+	KERN_PPC_HTABRECLAIM,
+	KERN_PPC_ZEROPAGED,
+	KERN_PPC_POWERSAVE_NAP,
+	KERN_MODPROBE,
+	KERN_SG_BIG_BUFF,
+	KERN_ACCT,
+	KERN_PPC_L2CR,
+	KERN_RTSIGNR,
+	KERN_RTSIGMAX,
+	KERN_SHMMAX,
+	KERN_MSGMAX,
+	KERN_MSGMNB,
+	KERN_MSGPOOL,
+	KERN_SYSRQ,
+	KERN_MAX_THREADS,
+	KERN_RANDOM,
+	KERN_SHMALL,
+	KERN_MSGMNI,
+	KERN_SEM,
+	KERN_SPARC_STOP_A,
+	KERN_SHMMNI,
+	KERN_OVERFLOWUID,
+	KERN_OVERFLOWGID,
+	KERN_SHMPATH,
+	KERN_HOTPLUG,
+	KERN_IEEE_EMULATION_WARNINGS,
+	KERN_S390_USER_DEBUG_LOGGING,
+	KERN_CORE_USES_PID,
+	KERN_TAINTED,
+	KERN_CADPID,
+	KERN_PIDMAX,
+	KERN_CORE_PATTERN,
+	KERN_PANIC_ON_OOPS,
+	KERN_HPPA_PWRSW,
+	KERN_HPPA_UNALIGNED,
+	KERN_PRINTK_RATELIMIT,
+	KERN_PRINTK_RATELIMIT_BURST,
+	KERN_PTY,
+	KERN_NGROUPS_MAX,
+	KERN_SPARC_SCONS_PWROFF,
+	KERN_HZ_TIMER,
+	KERN_UNKNOWN_NMI_PANIC,
+	KERN_BOOTLOADER_TYPE,
+	KERN_RANDOMIZE,
+	KERN_SETUID_DUMPABLE,
+	KERN_SPIN_RETRY,
+	KERN_ACPI_VIDEO_FLAGS,
+	KERN_IA64_UNALIGNED,
+	KERN_COMPAT_LOG,
+	KERN_MAX_LOCK_DEPTH,
+	KERN_NMI_WATCHDOG,
+	KERN_PANIC_ON_NMI,
+	NET_CORE,
+	NET_ETHER,
+	NET_802,
+	NET_UNIX,
+	NET_IPV4,
+	NET_IPX,
+	NET_ATALK,
+	NET_NETROM,
+	NET_AX25,
+	NET_BRIDGE,
+	NET_ROSE,
+	NET_IPV6,
+	NET_X25,
+	NET_TR,
+	NET_DECNET,
+	NET_ECONET,
+	NET_SCTP,
+	NET_LLC,
+	NET_NETFILTER,
+	NET_DCCP,
+	NET_IRDA,
+	NET_CORE_WMEM_MAX,
+	NET_CORE_RMEM_MAX,
+	NET_CORE_WMEM_DEFAULT,
+	NET_CORE_RMEM_DEFAULT,
+	NET_CORE_DESTROY_DELAY,
+	NET_CORE_MAX_BACKLOG,
+	NET_CORE_FASTROUTE,
+	NET_CORE_MSG_COST,
+	NET_CORE_MSG_BURST,
+	NET_CORE_OPTMEM_MAX,
+	NET_CORE_HOT_LIST_LENGTH,
+	NET_CORE_DIVERT_VERSION,
+	NET_CORE_NO_CONG_THRESH,
+	NET_CORE_NO_CONG,
+	NET_CORE_LO_CONG,
+	NET_CORE_MOD_CONG,
+	NET_CORE_DEV_WEIGHT,
+	NET_CORE_SOMAXCONN,
+	NET_CORE_BUDGET,
+	NET_CORE_AEVENT_ETIME,
+	NET_CORE_AEVENT_RSEQTH,
+	NET_CORE_WARNINGS,
+	NET_IPV4_FORWARD,
+	NET_IPV4_DYNADDR,
+	NET_IPV4_CONF,
+	NET_IPV4_NEIGH,
+	NET_IPV4_ROUTE,
+	NET_IPV4_FIB_HASH,
+	NET_IPV4_NETFILTER,
+	NET_IPV4_TCP_TIMESTAMPS,
+	NET_IPV4_TCP_WINDOW_SCALING,
+	NET_IPV4_TCP_SACK,
+	NET_IPV4_TCP_RETRANS_COLLAPSE,
+	NET_IPV4_DEFAULT_TTL,
+	NET_IPV4_AUTOCONFIG,
+	NET_IPV4_NO_PMTU_DISC,
+	NET_IPV4_TCP_SYN_RETRIES,
+	NET_IPV4_IPFRAG_HIGH_THRESH,
+	NET_IPV4_IPFRAG_LOW_THRESH,
+	NET_IPV4_IPFRAG_TIME,
+	NET_IPV4_TCP_MAX_KA_PROBES,
+	NET_IPV4_TCP_KEEPALIVE_TIME,
+	NET_IPV4_TCP_KEEPALIVE_PROBES,
+	NET_IPV4_TCP_RETRIES1,
+	NET_IPV4_TCP_RETRIES2,
+	NET_IPV4_TCP_FIN_TIMEOUT,
+	NET_IPV4_IP_MASQ_DEBUG,
+	NET_TCP_SYNCOOKIES,
+	NET_TCP_STDURG,
+	NET_TCP_RFC1337,
+	NET_TCP_SYN_TAILDROP,
+	NET_TCP_MAX_SYN_BACKLOG,
+	NET_IPV4_LOCAL_PORT_RANGE,
+	NET_IPV4_ICMP_ECHO_IGNORE_ALL,
+	NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
+	NET_IPV4_ICMP_SOURCEQUENCH_RATE,
+	NET_IPV4_ICMP_DESTUNREACH_RATE,
+	NET_IPV4_ICMP_TIMEEXCEED_RATE,
+	NET_IPV4_ICMP_PARAMPROB_RATE,
+	NET_IPV4_ICMP_ECHOREPLY_RATE,
+	NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
+	NET_IPV4_IGMP_MAX_MEMBERSHIPS,
+	NET_TCP_TW_RECYCLE,
+	NET_IPV4_ALWAYS_DEFRAG,
+	NET_IPV4_TCP_KEEPALIVE_INTVL,
+	NET_IPV4_INET_PEER_THRESHOLD,
+	NET_IPV4_INET_PEER_MINTTL,
+	NET_IPV4_INET_PEER_MAXTTL,
+	NET_IPV4_INET_PEER_GC_MINTIME,
+	NET_IPV4_INET_PEER_GC_MAXTIME,
+	NET_TCP_ORPHAN_RETRIES,
+	NET_TCP_ABORT_ON_OVERFLOW,
+	NET_TCP_SYNACK_RETRIES,
+	NET_TCP_MAX_ORPHANS,
+	NET_TCP_MAX_TW_BUCKETS,
+	NET_TCP_FACK,
+	NET_TCP_REORDERING,
+	NET_TCP_ECN,
+	NET_TCP_DSACK,
+	NET_TCP_MEM,
+	NET_TCP_WMEM,
+	NET_TCP_RMEM,
+	NET_TCP_APP_WIN,
+	NET_TCP_ADV_WIN_SCALE,
+	NET_IPV4_NONLOCAL_BIND,
+	NET_IPV4_ICMP_RATELIMIT,
+	NET_IPV4_ICMP_RATEMASK,
+	NET_TCP_TW_REUSE,
+	NET_TCP_FRTO,
+	NET_TCP_LOW_LATENCY,
+	NET_IPV4_IPFRAG_SECRET_INTERVAL,
+	NET_IPV4_IGMP_MAX_MSF,
+	NET_TCP_NO_METRICS_SAVE,
+	NET_TCP_DEFAULT_WIN_SCALE,
+	NET_TCP_MODERATE_RCVBUF,
+	NET_TCP_TSO_WIN_DIVISOR,
+	NET_TCP_BIC_BETA,
+	NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
+	NET_TCP_CONG_CONTROL,
+	NET_TCP_ABC,
+	NET_IPV4_IPFRAG_MAX_DIST,
+	NET_TCP_MTU_PROBING,
+	NET_TCP_BASE_MSS,
+	NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS,
+	NET_TCP_DMA_COPYBREAK,
+	NET_TCP_SLOW_START_AFTER_IDLE,
+	NET_CIPSOV4_CACHE_ENABLE,
+	NET_CIPSOV4_CACHE_BUCKET_SIZE,
+	NET_CIPSOV4_RBM_OPTFMT,
+	NET_CIPSOV4_RBM_STRICTVALID,
+	NET_TCP_AVAIL_CONG_CONTROL,
+	NET_TCP_ALLOWED_CONG_CONTROL,
+	NET_TCP_MAX_SSTHRESH,
+	NET_TCP_FRTO_RESPONSE,
+	NET_IPV4_ROUTE_FLUSH,
+	NET_IPV4_ROUTE_MIN_DELAY,
+	NET_IPV4_ROUTE_MAX_DELAY,
+	NET_IPV4_ROUTE_GC_THRESH,
+	NET_IPV4_ROUTE_MAX_SIZE,
+	NET_IPV4_ROUTE_GC_MIN_INTERVAL,
+	NET_IPV4_ROUTE_GC_TIMEOUT,
+	NET_IPV4_ROUTE_GC_INTERVAL,
+	NET_IPV4_ROUTE_REDIRECT_LOAD,
+	NET_IPV4_ROUTE_REDIRECT_NUMBER,
+	NET_IPV4_ROUTE_REDIRECT_SILENCE,
+	NET_IPV4_ROUTE_ERROR_COST,
+	NET_IPV4_ROUTE_ERROR_BURST,
+	NET_IPV4_ROUTE_GC_ELASTICITY,
+	NET_IPV4_ROUTE_MTU_EXPIRES,
+	NET_IPV4_ROUTE_MIN_PMTU,
+	NET_IPV4_ROUTE_MIN_ADVMSS,
+	NET_IPV4_ROUTE_SECRET_INTERVAL,
+	NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS,
+	NET_IPV4_CONF_FORWARDING,
+	NET_IPV4_CONF_MC_FORWARDING,
+	NET_IPV4_CONF_PROXY_ARP,
+	NET_IPV4_CONF_ACCEPT_REDIRECTS,
+	NET_IPV4_CONF_SECURE_REDIRECTS,
+	NET_IPV4_CONF_SEND_REDIRECTS,
+	NET_IPV4_CONF_SHARED_MEDIA,
+	NET_IPV4_CONF_RP_FILTER,
+	NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE,
+	NET_IPV4_CONF_BOOTP_RELAY,
+	NET_IPV4_CONF_LOG_MARTIANS,
+	NET_IPV4_CONF_TAG,
+	NET_IPV4_CONF_ARPFILTER,
+	NET_IPV4_CONF_MEDIUM_ID,
+	NET_IPV4_CONF_NOXFRM,
+	NET_IPV4_CONF_NOPOLICY,
+	NET_IPV4_CONF_FORCE_IGMP_VERSION,
+	NET_IPV4_CONF_ARP_ANNOUNCE,
+	NET_IPV4_CONF_ARP_IGNORE,
+	NET_IPV4_CONF_PROMOTE_SECONDARIES,
+	NET_IPV4_CONF_ARP_ACCEPT,
+	NET_IPV4_CONF_ARP_NOTIFY,
+	NET_IPV6_CONF,
+	NET_IPV6_NEIGH,
+	NET_IPV6_ROUTE,
+	NET_IPV6_ICMP,
+	NET_IPV6_BINDV6ONLY,
+	NET_IPV6_IP6FRAG_HIGH_THRESH,
+	NET_IPV6_IP6FRAG_LOW_THRESH,
+	NET_IPV6_IP6FRAG_TIME,
+	NET_IPV6_IP6FRAG_SECRET_INTERVAL,
+	NET_IPV6_MLD_MAX_MSF,
+	NET_IPV6_ROUTE_FLUSH,
+	NET_IPV6_ROUTE_GC_THRESH,
+	NET_IPV6_ROUTE_MAX_SIZE,
+	NET_IPV6_ROUTE_GC_MIN_INTERVAL,
+	NET_IPV6_ROUTE_GC_TIMEOUT,
+	NET_IPV6_ROUTE_GC_INTERVAL,
+	NET_IPV6_ROUTE_GC_ELASTICITY,
+	NET_IPV6_ROUTE_MTU_EXPIRES,
+	NET_IPV6_ROUTE_MIN_ADVMSS,
+	NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS,
+	NET_UNIX_DESTROY_DELAY,
+	NET_UNIX_DELETE_DELAY,
+	NET_UNIX_MAX_DGRAM_QLEN,
+	VM_OVERCOMMIT_MEMORY,
+	VM_PAGE_CLUSTER,
+	VM_DIRTY_BACKGROUND,
+	VM_DIRTY_RATIO,
+	VM_DIRTY_WB_CS,
+	VM_DIRTY_EXPIRE_CS,
+	VM_NR_PDFLUSH_THREADS,
+	VM_OVERCOMMIT_RATIO,
+	VM_PAGEBUF,
+	VM_HUGETLB_PAGES,
+	VM_SWAPPINESS,
+	VM_LOWMEM_RESERVE_RATIO,
+	VM_MIN_FREE_KBYTES,
+	VM_MAX_MAP_COUNT,
+	VM_LAPTOP_MODE,
+	VM_BLOCK_DUMP,
+	VM_HUGETLB_GROUP,
+	VM_VFS_CACHE_PRESSURE,
+	VM_LEGACY_VA_LAYOUT,
+	VM_SWAP_TOKEN_TIMEOUT
+]),,,
+[#include <sys/types.h>
+#include <linux/sysctl.h>])
+
 AC_CACHE_CHECK([for BLKGETSIZE64], [ac_cv_have_blkgetsize64],
 	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <stdlib.h>
@@ -309,7 +627,6 @@
 AC_CHECK_SIZEOF([long])
 AC_CHECK_SIZEOF([long long])
 AC_CHECK_SIZEOF([off_t],,[#include <sys/types.h>])
-AC_CHECK_SIZEOF([rlim_t],,[#include <sys/resource.h>])
 
 AC_CACHE_CHECK([for SA_RESTORER], [st_cv_sa_restorer],
 	       [st_cv_sa_restorer="$(echo SA_RESTORER |
@@ -332,5 +649,94 @@
 
 AC_PATH_PROG([PERL], [perl])
 
+dnl stack trace with libunwind
+libunwind_CPPFLAGS=
+libunwind_LDFLAGS=
+libunwind_LIBS=
+AC_ARG_WITH([libunwind],
+            [AS_HELP_STRING([--with-libunwind],
+                            [use libunwind to implement stack tracing support])],
+            [case "${withval}" in
+             yes|no|check) ;;
+             *) with_libunwind=yes
+                libunwind_CPPFLAGS="-I${withval}/include"
+                libunwind_LDFLAGS="-L${withval}/lib" ;;
+             esac],
+            [with_libunwind=check]
+)
+
+use_libunwind=no
+AS_IF([test "x$with_libunwind" != xno],
+      [saved_CPPFLAGS="$CPPFLAGS"
+       CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
+
+       AC_CHECK_HEADERS([libunwind-ptrace.h],
+         [saved_LDFLAGS="$LDFLAGS"
+          LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
+
+          AC_CHECK_LIB([unwind], [backtrace],
+            [libunwind_LIBS="-lunwind $libunwind_LIBS"
+
+             AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
+             saved_LIBS="$LIBS"
+             LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
+
+             AC_LINK_IFELSE(
+               [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
+                                [[return !unw_create_addr_space(0, 0)]])
+               ],
+               [AC_MSG_RESULT([yes])
+                libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
+
+                AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
+                  [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
+                   use_libunwind=yes
+                  ],
+                  [if test "x$with_libunwind" != xcheck; then
+                     AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
+                   fi
+                  ],
+                  [$libunwind_LIBS]
+                )
+               ],
+               [AC_MSG_RESULT([no])
+                if test "x$with_libunwind" != xcheck; then
+                  AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
+                fi
+               ]
+             )
+
+             LIBS="$saved_LIBS"
+            ],
+            [if test "x$with_libunwind" != xcheck; then
+               AC_MSG_FAILURE([failed to find libunwind])
+             fi
+            ],
+            [$libunwind_LIBS]
+          )
+
+          LDFLAGS="$saved_LDFLAGS"
+         ],
+         [if test "x$with_libunwind" != xcheck; then
+            AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
+          fi
+         ]
+       )
+
+       CPPFLAGS="$saved_CPPFLAGS"
+      ]
+)
+
+dnl enable libunwind
+AC_MSG_CHECKING([whether to enable stack tracing support using libunwind])
+if test "x$use_libunwind" = xyes; then
+	AC_DEFINE([USE_LIBUNWIND], 1, [Compile stack tracing functionality])
+	AC_SUBST(libunwind_LIBS)
+	AC_SUBST(libunwind_LDFLAGS)
+	AC_SUBST(libunwind_CPPFLAGS)
+fi
+AM_CONDITIONAL([USE_LIBUNWIND], [test "x$use_libunwind" = xyes])
+AC_MSG_RESULT([$use_libunwind])
+
 AC_CONFIG_FILES([Makefile tests/Makefile])
 AC_OUTPUT
diff --git a/count.c b/count.c
index 8395466..e41994d 100644
--- a/count.c
+++ b/count.c
@@ -37,7 +37,7 @@
 
 /* Per-syscall stats structure */
 struct call_counts {
-	/* system time spent in syscall (not wall clock time) */
+	/* time may be total latency or system time */
 	struct timeval time;
 	int calls, errors;
 };
@@ -47,10 +47,11 @@
 
 static struct timeval shortest = { 1000000, 0 };
 
-/* On entry, tv is syscall exit timestamp */
 void
-count_syscall(struct tcb *tcp, struct timeval *tv)
+count_syscall(struct tcb *tcp, const struct timeval *syscall_exiting_tv)
 {
+	struct timeval wtv;
+	struct timeval *tv = &wtv;
 	struct call_counts *cc;
 	unsigned long scno = tcp->scno;
 
@@ -69,7 +70,7 @@
 		cc->errors++;
 
 	/* tv = wall clock time spent while in syscall */
-	tv_sub(tv, tv, &tcp->etime);
+	tv_sub(tv, syscall_exiting_tv, &tcp->etime);
 
 	/* Spent more wall clock time than spent system time? (usually yes) */
 	if (tv_cmp(tv, &tcp->dtime) > 0) {
@@ -90,18 +91,18 @@
 
 		if (tv_nz(&tcp->dtime))
 			/* tv = system time spent, if it isn't 0 */
-			*tv = tcp->dtime;
+			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;
+				tv = &shortest;
 			else
-				*tv = one_tick;
+				tv = &one_tick;
 		}
 	}
 	if (tv_cmp(tv, &shortest) < 0)
 		shortest = *tv;
-	tv_add(&cc->time, &cc->time, tv);
+	tv_add(&cc->time, &cc->time, count_wallclock ? &wtv : tv);
 }
 
 static int
diff --git a/debian/control b/debian/control
index 417a909..a7e36b1 100644
--- a/debian/control
+++ b/debian/control
@@ -7,7 +7,7 @@
 Homepage: http://sourceforge.net/projects/strace/
 
 Package: strace
-Architecture: alpha amd64 arm armeb armel armhf hppa i386 ia64 m68k mips mipsel powerpc powerpcspe ppc64 s390 s390x sh4 sparc sparc64
+Architecture: alpha amd64 arm64 armeb armel armhf hppa i386 ia64 m68k mips mipsel or1k powerpc powerpcspe ppc64 s390 s390x sh4 sparc sparc64 x32
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: A system call tracer
  strace is a system call tracer, i.e. a debugging tool which prints out
@@ -29,7 +29,7 @@
  The program to be traced need not be recompiled for this, so you can
  use it on binaries for which you don't have source.
  .
- This package containts the 64bit version of the binary, intended for
+ This package contains the 64bit version of the binary, intended for
  biarch systems with 32bit userland and 64bit kernel.
  .
  System calls and signals are events that happen at the user/kernel
@@ -40,7 +40,7 @@
 Section: debian-installer
 XC-Package-Type: udeb
 Priority: extra
-Architecture: alpha amd64 arm armeb armel armhf hppa i386 ia64 m68k mips mipsel powerpc powerpcspe ppc64 s390 sh4 sparc sparc64
+Architecture: alpha amd64 arm64 armeb armel armhf hppa i386 ia64 m68k mips mipsel or1k powerpc powerpcspe ppc64 s390 sh4 sparc sparc64 x32
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: A system call tracer
  strace is a system call tracer, i.e. a debugging tool which prints out
diff --git a/debian/rules b/debian/rules
index b997182..52220fa 100755
--- a/debian/rules
+++ b/debian/rules
@@ -2,7 +2,11 @@
 
 #export DH_VERBOSE=1
 
-CFLAGS = -Wall -g
+export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/buildflags.mk
+
+CFLAGS += -Wall -g
 
 ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
   CFLAGS += -O0
diff --git a/defs.h b/defs.h
index 074c8f0..1a3b483 100644
--- a/defs.h
+++ b/defs.h
@@ -370,7 +370,7 @@
 # define DEFAULT_PERSONALITY 0
 #endif
 #ifndef PERSONALITY0_WORDSIZE
-# define PERSONALITY0_WORDSIZE (int)(sizeof(long))
+# define PERSONALITY0_WORDSIZE SIZEOF_LONG
 #endif
 
 #if defined(I386) || defined(X86_64)
@@ -425,6 +425,14 @@
 	struct timeval etime;	/* Syscall entry time */
 				/* Support for tracing forked processes: */
 	long inst[2];		/* Saved clone args (badly named) */
+
+#ifdef USE_LIBUNWIND
+	struct UPT_info* libunwind_ui;
+	struct mmap_cache_t* mmap_cache;
+	unsigned int mmap_cache_size;
+	unsigned int mmap_cache_generation;
+	struct queue_t* queue;
+#endif
 };
 
 /* TCB flags */
@@ -525,10 +533,11 @@
 # endif
 # define RVAL_LUDECIMAL	007	/* long unsigned decimal format */
 #endif
-#define RVAL_MASK	007	/* mask for these values */
+#define RVAL_FD		010	/* file descriptor */
+#define RVAL_MASK	017	/* mask for these values */
 
-#define RVAL_STR	010	/* Print `auxstr' field after return val */
-#define RVAL_NONE	020	/* Print nothing */
+#define RVAL_STR	020	/* Print `auxstr' field after return val */
+#define RVAL_NONE	040	/* Print nothing */
 
 #define TRACE_FILE	001	/* Trace file-related syscalls. */
 #define TRACE_IPC	002	/* Trace IPC-related syscalls. */
@@ -538,6 +547,8 @@
 #define TRACE_DESC	040	/* Trace file descriptor-related syscalls. */
 #define TRACE_MEMORY	0100	/* Trace memory mapping-related syscalls. */
 #define SYSCALL_NEVER_FAILS	0200	/* Syscall is always successful. */
+#define STACKTRACE_INVALIDATE_CACHE 0400  /* Trigger proc/maps cache updating */
+#define STACKTRACE_CAPTURE_ON_ENTER 01000 /* Capture stacktrace on "entering" stage */
 
 typedef enum {
 	CFLAG_NONE = 0,
@@ -548,6 +559,7 @@
 extern bool debug_flag;
 extern bool Tflag;
 extern bool iflag;
+extern bool count_wallclock;
 extern unsigned int qflag;
 extern bool not_failing_only;
 extern bool show_fd_path;
@@ -558,6 +570,10 @@
 extern bool need_fork_exec_workarounds;
 extern unsigned xflag;
 extern unsigned followfork;
+#ifdef USE_LIBUNWIND
+/* if this is true do the stack trace for every system call */
+extern bool stack_trace_enabled;
+#endif
 extern unsigned ptrace_setoptions;
 extern unsigned max_strlen;
 extern unsigned os_release;
@@ -587,7 +603,7 @@
 extern void qualify(const char *);
 extern void print_pc(struct tcb *);
 extern int trace_syscall(struct tcb *);
-extern void count_syscall(struct tcb *, struct timeval *);
+extern void count_syscall(struct tcb *, const struct timeval *);
 extern void call_summary(FILE *);
 
 #if defined(AVR32) \
@@ -712,13 +728,22 @@
 extern int loop_ioctl(struct tcb *, long, long);
 extern int ptp_ioctl(struct tcb *, long, long);
 
-extern int tv_nz(struct timeval *);
-extern int tv_cmp(struct timeval *, struct timeval *);
-extern double tv_float(struct timeval *);
-extern void tv_add(struct timeval *, struct timeval *, struct timeval *);
-extern void tv_sub(struct timeval *, struct timeval *, struct timeval *);
-extern void tv_mul(struct timeval *, struct timeval *, int);
-extern void tv_div(struct timeval *, struct timeval *, int);
+extern int tv_nz(const struct timeval *);
+extern int tv_cmp(const struct timeval *, const struct timeval *);
+extern double tv_float(const struct timeval *);
+extern void tv_add(struct timeval *, const struct timeval *, const struct timeval *);
+extern void tv_sub(struct timeval *, const struct timeval *, const struct timeval *);
+extern void tv_mul(struct timeval *, const struct timeval *, int);
+extern void tv_div(struct timeval *, const struct timeval *, int);
+
+#ifdef USE_LIBUNWIND
+extern void unwind_init(void);
+extern void unwind_tcb_init(struct tcb *tcp);
+extern void unwind_tcb_fin(struct tcb *tcp);
+extern void unwind_cache_invalidate(struct tcb* tcp);
+extern void unwind_print_stacktrace(struct tcb* tcp);
+extern void unwind_capture_stacktrace(struct tcb* tcp);
+#endif
 
 /* Strace log generation machinery.
  *
diff --git a/desc.c b/desc.c
index a180f88..5b8869b 100644
--- a/desc.c
+++ b/desc.c
@@ -38,181 +38,12 @@
 # include  <linux/perf_event.h>
 #endif
 
-static const struct xlat fcntlcmds[] = {
-	XLAT(F_DUPFD),
-	XLAT(F_GETFD),
-	XLAT(F_SETFD),
-	XLAT(F_GETFL),
-	XLAT(F_SETFL),
-	XLAT(F_GETLK),
-	XLAT(F_SETLK),
-	XLAT(F_SETLKW),
-	XLAT(F_GETOWN),
-	XLAT(F_SETOWN),
-#ifdef F_RSETLK
-	XLAT(F_RSETLK),
-#endif
-#ifdef F_RSETLKW
-	XLAT(F_RSETLKW),
-#endif
-#ifdef F_RGETLK
-	XLAT(F_RGETLK),
-#endif
-#ifdef F_CNVT
-	XLAT(F_CNVT),
-#endif
-#ifdef F_SETSIG
-	XLAT(F_SETSIG),
-#endif
-#ifdef F_GETSIG
-	XLAT(F_GETSIG),
-#endif
-#ifdef F_CHKFL
-	XLAT(F_CHKFL),
-#endif
-#ifdef F_DUP2FD
-	XLAT(F_DUP2FD),
-#endif
-#ifdef F_ALLOCSP
-	XLAT(F_ALLOCSP),
-#endif
-#ifdef F_ISSTREAM
-	XLAT(F_ISSTREAM),
-#endif
-#ifdef F_PRIV
-	XLAT(F_PRIV),
-#endif
-#ifdef F_NPRIV
-	XLAT(F_NPRIV),
-#endif
-#ifdef F_QUOTACL
-	XLAT(F_QUOTACL),
-#endif
-#ifdef F_BLOCKS
-	XLAT(F_BLOCKS),
-#endif
-#ifdef F_BLKSIZE
-	XLAT(F_BLKSIZE),
-#endif
-#ifdef F_GETOWN
-	XLAT(F_GETOWN),
-#endif
-#ifdef F_SETOWN
-	XLAT(F_SETOWN),
-#endif
-#ifdef F_REVOKE
-	XLAT(F_REVOKE),
-#endif
-#ifdef F_SETLK
-	XLAT(F_SETLK),
-#endif
-#ifdef F_SETLKW
-	XLAT(F_SETLKW),
-#endif
-#ifdef F_GETLK
-	XLAT(F_GETLK),
-#endif
-#ifdef F_SETLK64
-	XLAT(F_SETLK64),
-#endif
-#ifdef F_SETLKW64
-	XLAT(F_SETLKW64),
-#endif
-#ifdef F_GETLK64
-	XLAT(F_GETLK64),
-#endif
-#ifdef F_SHARE
-	XLAT(F_SHARE),
-#endif
-#ifdef F_UNSHARE
-	XLAT(F_UNSHARE),
-#endif
-#ifdef F_SETLEASE
-	XLAT(F_SETLEASE),
-#endif
-#ifdef F_GETLEASE
-	XLAT(F_GETLEASE),
-#endif
-#ifdef F_NOTIFY
-	XLAT(F_NOTIFY),
-#endif
-#ifdef F_DUPFD_CLOEXEC
-	XLAT(F_DUPFD_CLOEXEC),
-#endif
-	XLAT_END
-};
-
-static const struct xlat fdflags[] = {
-#ifdef FD_CLOEXEC
-	XLAT(FD_CLOEXEC),
-#endif
-	XLAT_END
-};
-
-#ifdef LOCK_SH
-
-static const struct xlat flockcmds[] = {
-	XLAT(LOCK_SH),
-	XLAT(LOCK_EX),
-	XLAT(LOCK_NB),
-	XLAT(LOCK_UN),
-	XLAT_END
-};
-
-#endif /* LOCK_SH */
-
-static const struct xlat lockfcmds[] = {
-	XLAT(F_RDLCK),
-	XLAT(F_WRLCK),
-	XLAT(F_UNLCK),
-#ifdef F_EXLCK
-	XLAT(F_EXLCK),
-#endif
-#ifdef F_SHLCK
-	XLAT(F_SHLCK),
-#endif
-	XLAT_END
-};
-
-#ifdef F_NOTIFY
-static const struct xlat notifyflags[] = {
-#ifdef DN_ACCESS
-	XLAT(DN_ACCESS),
-#endif
-#ifdef DN_MODIFY
-	XLAT(DN_MODIFY),
-#endif
-#ifdef DN_CREATE
-	XLAT(DN_CREATE),
-#endif
-#ifdef DN_DELETE
-	XLAT(DN_DELETE),
-#endif
-#ifdef DN_RENAME
-	XLAT(DN_RENAME),
-#endif
-#ifdef DN_ATTRIB
-	XLAT(DN_ATTRIB),
-#endif
-#ifdef DN_MULTISHOT
-	XLAT(DN_MULTISHOT),
-#endif
-	XLAT_END
-};
-#endif
-
-static const struct xlat perf_event_open_flags[] = {
-#ifdef PERF_FLAG_FD_NO_GROUP
-	XLAT(PERF_FLAG_FD_NO_GROUP),
-#endif
-#ifdef PERF_FLAG_FD_OUTPUT
-	XLAT(PERF_FLAG_FD_OUTPUT),
-#endif
-#ifdef PERF_FLAG_PID_CGROUP
-	XLAT(PERF_FLAG_PID_CGROUP),
-#endif
-	XLAT_END
-};
+#include "xlat/fcntlcmds.h"
+#include "xlat/fdflags.h"
+#include "xlat/flockcmds.h"
+#include "xlat/lockfcmds.h"
+#include "xlat/notifyflags.h"
+#include "xlat/perf_event_open_flags.h"
 
 /*
  * Assume that F_SETLK64, F_SETLKW64, and F_GETLK64 are either defined
@@ -434,6 +265,15 @@
 	return 0;
 }
 
+int
+sys_dup(struct tcb *tcp)
+{
+	if (entering(tcp)) {
+		printfd(tcp, tcp->u_arg[0]);
+	}
+	return RVAL_FD;
+}
+
 static int
 do_dup2(struct tcb *tcp, int flags_arg)
 {
@@ -446,7 +286,7 @@
 			printflags(open_mode_flags, tcp->u_arg[flags_arg], "O_???");
 		}
 	}
-	return 0;
+	return RVAL_FD;
 }
 
 int
@@ -622,61 +462,9 @@
 }
 #endif
 
-static const struct xlat epollctls[] = {
-#ifdef EPOLL_CTL_ADD
-	XLAT(EPOLL_CTL_ADD),
-#endif
-#ifdef EPOLL_CTL_MOD
-	XLAT(EPOLL_CTL_MOD),
-#endif
-#ifdef EPOLL_CTL_DEL
-	XLAT(EPOLL_CTL_DEL),
-#endif
-	XLAT_END
-};
-
-static const struct xlat epollevents[] = {
-#ifdef EPOLLIN
-	XLAT(EPOLLIN),
-#endif
-#ifdef EPOLLPRI
-	XLAT(EPOLLPRI),
-#endif
-#ifdef EPOLLOUT
-	XLAT(EPOLLOUT),
-#endif
-#ifdef EPOLLRDNORM
-	XLAT(EPOLLRDNORM),
-#endif
-#ifdef EPOLLRDBAND
-	XLAT(EPOLLRDBAND),
-#endif
-#ifdef EPOLLWRNORM
-	XLAT(EPOLLWRNORM),
-#endif
-#ifdef EPOLLWRBAND
-	XLAT(EPOLLWRBAND),
-#endif
-#ifdef EPOLLMSG
-	XLAT(EPOLLMSG),
-#endif
-#ifdef EPOLLERR
-	XLAT(EPOLLERR),
-#endif
-#ifdef EPOLLHUP
-	XLAT(EPOLLHUP),
-#endif
-#ifdef EPOLLRDHUP
-	XLAT(EPOLLRDHUP),
-#endif
-#ifdef EPOLLONESHOT
-	XLAT(EPOLLONESHOT),
-#endif
-#ifdef EPOLLET
-	XLAT(EPOLLET),
-#endif
-	XLAT_END
-};
+#include "xlat/epollctls.h"
+#include "xlat/epollevents.h"
+#include "xlat/epollflags.h"
 
 /* Not aliased to printargs_ld: we want it to have a distinct address */
 int
@@ -685,16 +473,6 @@
 	return printargs_ld(tcp);
 }
 
-static const struct xlat epollflags[] = {
-#ifdef EPOLL_CLOEXEC
-	XLAT(EPOLL_CLOEXEC),
-#endif
-#ifdef EPOLL_NONBLOCK
-	XLAT(EPOLL_NONBLOCK),
-#endif
-	XLAT_END
-};
-
 int
 sys_epoll_create1(struct tcb *tcp)
 {
diff --git a/fanotify.c b/fanotify.c
index c8a7e37..32a3667 100644
--- a/fanotify.c
+++ b/fanotify.c
@@ -1,20 +1,8 @@
 #include "defs.h"
 #include <linux/fanotify.h>
 
-static const struct xlat fan_classes[] = {
-	XLAT(FAN_CLASS_NOTIF),
-	XLAT(FAN_CLASS_CONTENT),
-	XLAT(FAN_CLASS_PRE_CONTENT),
-	XLAT_END
-};
-
-static const struct xlat fan_init_flags[] = {
-	XLAT(FAN_CLOEXEC),
-	XLAT(FAN_NONBLOCK),
-	XLAT(FAN_UNLIMITED_QUEUE),
-	XLAT(FAN_UNLIMITED_MARKS),
-	XLAT_END
-};
+#include "xlat/fan_classes.h"
+#include "xlat/fan_init_flags.h"
 
 int
 sys_fanotify_init(struct tcb *tcp)
@@ -37,32 +25,8 @@
 	return 0;
 }
 
-static const struct xlat fan_mark_flags[] = {
-	XLAT(FAN_MARK_ADD),
-	XLAT(FAN_MARK_REMOVE),
-	XLAT(FAN_MARK_DONT_FOLLOW),
-	XLAT(FAN_MARK_ONLYDIR),
-	XLAT(FAN_MARK_MOUNT),
-	XLAT(FAN_MARK_IGNORED_MASK),
-	XLAT(FAN_MARK_IGNORED_SURV_MODIFY),
-	XLAT(FAN_MARK_FLUSH),
-	XLAT_END
-};
-
-static const struct xlat fan_event_flags[] = {
-	XLAT(FAN_ACCESS),
-	XLAT(FAN_MODIFY),
-	XLAT(FAN_CLOSE),
-	XLAT(FAN_CLOSE_WRITE),
-	XLAT(FAN_CLOSE_NOWRITE),
-	XLAT(FAN_OPEN),
-	XLAT(FAN_Q_OVERFLOW),
-	XLAT(FAN_OPEN_PERM),
-	XLAT(FAN_ACCESS_PERM),
-	XLAT(FAN_ONDIR),
-	XLAT(FAN_EVENT_ON_CHILD),
-	XLAT_END
-};
+#include "xlat/fan_mark_flags.h"
+#include "xlat/fan_event_flags.h"
 
 int
 sys_fanotify_mark(struct tcb *tcp)
diff --git a/file.c b/file.c
index b6cc135..a92a7dc 100644
--- a/file.c
+++ b/file.c
@@ -211,119 +211,19 @@
 	char            d_name[1];
 };
 
-const struct xlat open_access_modes[] = {
-	XLAT(O_RDONLY),
-	XLAT(O_WRONLY),
-	XLAT(O_RDWR),
-#ifdef O_ACCMODE
-	XLAT(O_ACCMODE),
-#endif
-	XLAT_END
-};
-
-const struct xlat open_mode_flags[] = {
-	XLAT(O_CREAT),
-	XLAT(O_EXCL),
-	XLAT(O_NOCTTY),
-	XLAT(O_TRUNC),
-	XLAT(O_APPEND),
-	XLAT(O_NONBLOCK),
-#ifdef O_SYNC
-	XLAT(O_SYNC),
-#endif
-#ifdef O_ASYNC
-	XLAT(O_ASYNC),
-#endif
-#ifdef O_DSYNC
-	XLAT(O_DSYNC),
-#endif
-#ifdef O_RSYNC
-	XLAT(O_RSYNC),
-#endif
-#if defined(O_NDELAY) && (O_NDELAY != O_NONBLOCK)
-	XLAT(O_NDELAY),
-#endif
-#ifdef O_PRIV
-	XLAT(O_PRIV),
-#endif
-#ifdef O_DIRECT
-	XLAT(O_DIRECT),
-#endif
 #ifdef O_LARGEFILE
-# if O_LARGEFILE == 0		/* biarch platforms in 64-bit mode */
+# if O_LARGEFILE == 0          /* biarch platforms in 64-bit mode */
 #  undef O_LARGEFILE
 #  ifdef SPARC64
-#   define O_LARGEFILE	0x40000
+#   define O_LARGEFILE 0x40000
 #  elif defined X86_64 || defined S390X
-#   define O_LARGEFILE	0100000
+#   define O_LARGEFILE 0100000
 #  endif
 # endif
-# ifdef O_LARGEFILE
-	XLAT(O_LARGEFILE),
-# endif
 #endif
-#ifdef O_DIRECTORY
-	XLAT(O_DIRECTORY),
-#endif
-#ifdef O_NOFOLLOW
-	XLAT(O_NOFOLLOW),
-#endif
-#ifdef O_NOATIME
-	XLAT(O_NOATIME),
-#endif
-#ifdef O_CLOEXEC
-	XLAT(O_CLOEXEC),
-#endif
-#ifdef O_PATH
-	XLAT(O_PATH),
-#endif
-#ifdef FNDELAY
-	XLAT(FNDELAY),
-#endif
-#ifdef FAPPEND
-	XLAT(FAPPEND),
-#endif
-#ifdef FMARK
-	XLAT(FMARK),
-#endif
-#ifdef FDEFER
-	XLAT(FDEFER),
-#endif
-#ifdef FASYNC
-	XLAT(FASYNC),
-#endif
-#ifdef FSHLOCK
-	XLAT(FSHLOCK),
-#endif
-#ifdef FEXLOCK
-	XLAT(FEXLOCK),
-#endif
-#ifdef FCREAT
-	XLAT(FCREAT),
-#endif
-#ifdef FTRUNC
-	XLAT(FTRUNC),
-#endif
-#ifdef FEXCL
-	XLAT(FEXCL),
-#endif
-#ifdef FNBIO
-	XLAT(FNBIO),
-#endif
-#ifdef FSYNC
-	XLAT(FSYNC),
-#endif
-#ifdef FNOCTTY
-	XLAT(FNOCTTY),
-#endif
-#ifdef O_SHLOCK
-	XLAT(O_SHLOCK),
-#endif
-#ifdef O_EXLOCK
-	XLAT(O_EXLOCK),
-#endif
-	XLAT_END
-};
+
+#include "xlat/open_access_modes.h"
+#include "xlat/open_mode_flags.h"
 
 #ifndef AT_FDCWD
 # define AT_FDCWD                -100
@@ -403,7 +303,7 @@
 			tprintf(", %#lo", tcp->u_arg[offset + 2]);
 		}
 	}
-	return 0;
+	return RVAL_FD;
 }
 
 int
@@ -421,23 +321,7 @@
 }
 
 #if defined(SPARC) || defined(SPARC64)
-static const struct xlat openmodessol[] = {
-	{ 0,		"O_RDWR"	},
-	{ 1,		"O_RDONLY"	},
-	{ 2,		"O_WRONLY"	},
-	{ 0x80,		"O_NONBLOCK"	},
-	{ 8,		"O_APPEND"	},
-	{ 0x100,	"O_CREAT"	},
-	{ 0x200,	"O_TRUNC"	},
-	{ 0x400,	"O_EXCL"	},
-	{ 0x800,	"O_NOCTTY"	},
-	{ 0x10,		"O_SYNC"	},
-	{ 0x40,		"O_DSYNC"	},
-	{ 0x8000,	"O_RSYNC"	},
-	{ 4,		"O_NDELAY"	},
-	{ 0x1000,	"O_PRIV"	},
-	XLAT_END
-};
+#include "xlat/openmodessol.h"
 
 int
 solaris_open(struct tcb *tcp)
@@ -464,22 +348,10 @@
 		printpath(tcp, tcp->u_arg[0]);
 		tprintf(", %#lo", tcp->u_arg[1]);
 	}
-	return 0;
+	return RVAL_FD;
 }
 
-static const struct xlat access_flags[] = {
-	XLAT(F_OK),
-	XLAT(R_OK),
-	XLAT(W_OK),
-	XLAT(X_OK),
-#ifdef EFF_ONLY_OK
-	XLAT(EFF_ONLY_OK),
-#endif
-#ifdef EX_OK
-	XLAT(EX_OK),
-#endif
-	XLAT_END
-};
+#include "xlat/access_flags.h"
 
 static int
 decode_access(struct tcb *tcp, int offset)
@@ -515,18 +387,7 @@
 	return RVAL_OCTAL;
 }
 
-const struct xlat whence_codes[] = {
-	XLAT(SEEK_SET),
-	XLAT(SEEK_CUR),
-	XLAT(SEEK_END),
-#ifdef SEEK_DATA
-	XLAT(SEEK_DATA),
-#endif
-#ifdef SEEK_HOLE
-	XLAT(SEEK_HOLE),
-#endif
-	XLAT_END
-};
+#include "xlat/whence_codes.h"
 
 /* Linux kernel has exactly one version of lseek:
  * fs/read_write.c::SYSCALL_DEFINE3(lseek, unsigned, fd, off_t, offset, unsigned, origin)
@@ -667,16 +528,7 @@
 
 /* several stats */
 
-static const struct xlat modetypes[] = {
-	XLAT(S_IFREG),
-	XLAT(S_IFSOCK),
-	XLAT(S_IFIFO),
-	XLAT(S_IFLNK),
-	XLAT(S_IFDIR),
-	XLAT(S_IFBLK),
-	XLAT(S_IFCHR),
-	XLAT_END
-};
+#include "xlat/modetypes.h"
 
 static const char *
 sprintmode(int mode)
@@ -907,9 +759,7 @@
 }
 #endif /* POWERPC64 */
 
-static const struct xlat fileflags[] = {
-	XLAT_END
-};
+#include "xlat/fileflags.h"
 
 static void
 realprintstat(struct tcb *tcp, struct stat *statbuf)
@@ -1338,14 +1188,7 @@
 # define AT_EMPTY_PATH		0x1000
 #endif
 
-static const struct xlat at_flags[] = {
-	XLAT(AT_SYMLINK_NOFOLLOW),
-	XLAT(AT_REMOVEDIR),
-	XLAT(AT_SYMLINK_FOLLOW),
-	XLAT(AT_NO_AUTOMOUNT),
-	XLAT(AT_EMPTY_PATH),
-	XLAT_END
-};
+#include "xlat/at_flags.h"
 
 int
 sys_newfstatat(struct tcb *tcp)
@@ -1511,27 +1354,7 @@
 
 #  include <sys/acl.h>
 
-static const struct xlat aclcmds[] = {
-#  ifdef SETACL
-	XLAT(SETACL),
-#  endif
-#  ifdef GETACL
-	XLAT(GETACL),
-#  endif
-#  ifdef GETACLCNT
-	XLAT(GETACLCNT),
-#  endif
-#  ifdef ACL_GET
-	XLAT(ACL_GET),
-#  endif
-#  ifdef ACL_SET
-	XLAT(ACL_SET),
-#  endif
-#  ifdef ACL_CNT
-	XLAT(ACL_CNT),
-#  endif
-	XLAT_END
-};
+#include "xlat/aclcmds.h"
 
 int
 sys_acl(struct tcb *tcp)
@@ -1572,18 +1395,7 @@
 	return 0;
 }
 
-static const struct xlat aclipc[] = {
-#  ifdef IPC_SHM
-	XLAT(IPC_SHM),
-#  endif
-#  ifdef IPC_SEM
-	XLAT(IPC_SEM),
-#  endif
-#  ifdef IPC_MSG
-	XLAT(IPC_MSG),
-#  endif
-	XLAT_END
-};
+#include "xlat/aclipc.h"
 
 int
 sys_aclipc(struct tcb *tcp)
@@ -1609,38 +1421,7 @@
 
 #endif /* SPARC[64] */
 
-static const struct xlat fsmagic[] = {
-	{ 0x73757245,	"CODA_SUPER_MAGIC"	},
-	{ 0x012ff7b7,	"COH_SUPER_MAGIC"	},
-	{ 0x1373,	"DEVFS_SUPER_MAGIC"	},
-	{ 0x1cd1,	"DEVPTS_SUPER_MAGIC"	},
-	{ 0x414A53,	"EFS_SUPER_MAGIC"	},
-	{ 0xef51,	"EXT2_OLD_SUPER_MAGIC"	},
-	{ 0xef53,	"EXT2_SUPER_MAGIC"	},
-	{ 0x137d,	"EXT_SUPER_MAGIC"	},
-	{ 0xf995e849,	"HPFS_SUPER_MAGIC"	},
-	{ 0x9660,	"ISOFS_SUPER_MAGIC"	},
-	{ 0x137f,	"MINIX_SUPER_MAGIC"	},
-	{ 0x138f,	"MINIX_SUPER_MAGIC2"	},
-	{ 0x2468,	"MINIX2_SUPER_MAGIC"	},
-	{ 0x2478,	"MINIX2_SUPER_MAGIC2"	},
-	{ 0x4d44,	"MSDOS_SUPER_MAGIC"	},
-	{ 0x564c,	"NCP_SUPER_MAGIC"	},
-	{ 0x6969,	"NFS_SUPER_MAGIC"	},
-	{ 0x9fa0,	"PROC_SUPER_MAGIC"	},
-	{ 0x002f,	"QNX4_SUPER_MAGIC"	},
-	{ 0x52654973,	"REISERFS_SUPER_MAGIC"	},
-	{ 0x02011994,	"SHMFS_SUPER_MAGIC"	},
-	{ 0x517b,	"SMB_SUPER_MAGIC"	},
-	{ 0x012ff7b6,	"SYSV2_SUPER_MAGIC"	},
-	{ 0x012ff7b5,	"SYSV4_SUPER_MAGIC"	},
-	{ 0x00011954,	"UFS_MAGIC"		},
-	{ 0x54190100,	"UFS_CIGAM"		},
-	{ 0x012ff7b4,	"XENIX_SUPER_MAGIC"	},
-	{ 0x012fd16d,	"XIAFS_SUPER_MAGIC"	},
-	{ 0x62656572,	"SYSFS_MAGIC"		},
-	XLAT_END
-};
+#include "xlat/fsmagic.h"
 
 static const char *
 sprintfstype(int magic)
@@ -2255,18 +2036,7 @@
 	return 0;
 }
 
-static const struct xlat direnttypes[] = {
-	XLAT(DT_UNKNOWN),
-	XLAT(DT_FIFO),
-	XLAT(DT_CHR),
-	XLAT(DT_DIR),
-	XLAT(DT_BLK),
-	XLAT(DT_REG),
-	XLAT(DT_LNK),
-	XLAT(DT_SOCK),
-	XLAT(DT_WHT),
-	XLAT_END
-};
+#include "xlat/direnttypes.h"
 
 int
 sys_getdents(struct tcb *tcp)
@@ -2478,13 +2248,7 @@
 
 #endif /* HAVE_SYS_ASYNCH_H */
 
-static const struct xlat xattrflags[] = {
-#ifdef XATTR_CREATE
-	XLAT(XATTR_CREATE),
-	XLAT(XATTR_REPLACE),
-#endif
-	XLAT_END
-};
+#include "xlat/xattrflags.h"
 
 static void
 print_xattr_val(struct tcb *tcp, int failed,
@@ -2647,15 +2411,7 @@
 	return 0;
 }
 
-static const struct xlat advise[] = {
-	XLAT(POSIX_FADV_NORMAL),
-	XLAT(POSIX_FADV_RANDOM),
-	XLAT(POSIX_FADV_SEQUENTIAL),
-	XLAT(POSIX_FADV_WILLNEED),
-	XLAT(POSIX_FADV_DONTNEED),
-	XLAT(POSIX_FADV_NOREUSE),
-	XLAT_END
-};
+#include "xlat/advise.h"
 
 int
 sys_fadvise64(struct tcb *tcp)
@@ -2687,12 +2443,7 @@
 	return 0;
 }
 
-static const struct xlat sync_file_range_flags[] = {
-	XLAT(SYNC_FILE_RANGE_WAIT_BEFORE),
-	XLAT(SYNC_FILE_RANGE_WRITE),
-	XLAT(SYNC_FILE_RANGE_WAIT_AFTER),
-	XLAT_END
-};
+#include "xlat/sync_file_range_flags.h"
 
 int
 sys_sync_file_range(struct tcb *tcp)
@@ -2741,11 +2492,7 @@
 #ifndef SWAP_FLAG_DISCARD
 # define SWAP_FLAG_DISCARD 0x10000
 #endif
-static const struct xlat swap_flags[] = {
-	XLAT(SWAP_FLAG_PREFER),
-	XLAT(SWAP_FLAG_DISCARD),
-	XLAT_END
-};
+#include "xlat/swap_flags.h"
 
 int
 sys_swapon(struct tcb *tcp)
diff --git a/generate_xlat_in.sh b/generate_xlat_in.sh
new file mode 100755
index 0000000..b5a633f
--- /dev/null
+++ b/generate_xlat_in.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+convert() {
+	sed -n '/^\(static \)\?const struct xlat '"$n"'\[\] = {$/,/^};$/{
+		s/^[[:space:]]*XLAT(\([^)]\+\)).*/\1/p
+		s/^[[:space:]]*{[[:space:]]*(\?\(1<<[^),[:space:]]\+\).*/\1/p
+		s/.*not NULL-terminated.*/#unterminated/p
+		s/^\([[:space:]]*{.*\)/\1/p
+		s/^\t*\( *[/*].*\)/\1/p}' "$f" >> xlat/"$n".in
+	sed -i '/^\(static \)\?const struct xlat '"$n"'\[\] = {$/,/^};$/c #include "xlat/'"$n"'.h"' "$f"
+}
+
+for f; do
+	for n in $(sed -n 's/^\(static \)\?const struct xlat \([a-z0-9_]\+\)\[\] = {$/\2/p' "$f"); do
+		case "$n" in
+			cacheflush_flags|struct_user_offsets) # skip
+				;;
+			ioprio_class|ioprio_who|mtd_mode_options|personality_options|syslog_action_type|ubi_volume_props|ubi_volume_types)
+				echo '#unconditional' > xlat/"$n".in
+				convert
+				;;
+			*)
+				> xlat/"$n".in
+				convert
+				;;
+		esac
+	done
+done
diff --git a/inotify.c b/inotify.c
index 03689b5..32f6b31 100644
--- a/inotify.c
+++ b/inotify.c
@@ -2,38 +2,8 @@
 #include <fcntl.h>
 #include <linux/inotify.h>
 
-static const struct xlat inotify_flags[] = {
-	XLAT(IN_ACCESS),
-	XLAT(IN_MODIFY),
-	XLAT(IN_ATTRIB),
-	XLAT(IN_CLOSE),
-	XLAT(IN_CLOSE_WRITE),
-	XLAT(IN_CLOSE_NOWRITE),
-	XLAT(IN_OPEN),
-	XLAT(IN_MOVE),
-	XLAT(IN_MOVED_FROM),
-	XLAT(IN_MOVED_TO),
-	XLAT(IN_CREATE),
-	XLAT(IN_DELETE),
-	XLAT(IN_DELETE_SELF),
-	XLAT(IN_MOVE_SELF),
-	XLAT(IN_UNMOUNT),
-	XLAT(IN_Q_OVERFLOW),
-	XLAT(IN_IGNORED),
-	XLAT(IN_ONLYDIR),
-	XLAT(IN_DONT_FOLLOW),
-	XLAT(IN_EXCL_UNLINK),
-	XLAT(IN_MASK_ADD),
-	XLAT(IN_ISDIR),
-	XLAT(IN_ONESHOT),
-	XLAT_END
-};
-
-static const struct xlat inotify_init_flags[] = {
-	XLAT(O_NONBLOCK),
-	XLAT(O_CLOEXEC),
-	XLAT_END
-};
+#include "xlat/inotify_flags.h"
+#include "xlat/inotify_init_flags.h"
 
 int
 sys_inotify_add_watch(struct tcb *tcp)
diff --git a/io.c b/io.c
index f5458f7..fea1218 100644
--- a/io.c
+++ b/io.c
@@ -317,21 +317,7 @@
 	return 0;
 }
 
-static const struct xlat splice_flags[] = {
-#ifdef SPLICE_F_MOVE
-	XLAT(SPLICE_F_MOVE),
-#endif
-#ifdef SPLICE_F_NONBLOCK
-	XLAT(SPLICE_F_NONBLOCK),
-#endif
-#ifdef SPLICE_F_MORE
-	XLAT(SPLICE_F_MORE),
-#endif
-#ifdef SPLICE_F_GIFT
-	XLAT(SPLICE_F_GIFT),
-#endif
-	XLAT_END
-};
+#include "xlat/splice_flags.h"
 
 int
 sys_tee(struct tcb *tcp)
diff --git a/ioprio.c b/ioprio.c
index 52c5a28..6826e56 100644
--- a/ioprio.c
+++ b/ioprio.c
@@ -6,12 +6,7 @@
 	IOPRIO_WHO_USER
 };
 
-static const struct xlat ioprio_who[] = {
-	XLAT(IOPRIO_WHO_PROCESS),
-	XLAT(IOPRIO_WHO_PGRP),
-	XLAT(IOPRIO_WHO_USER),
-	XLAT_END
-};
+#include "xlat/ioprio_who.h"
 
 enum {
 	IOPRIO_CLASS_NONE,
@@ -20,13 +15,7 @@
 	IOPRIO_CLASS_IDLE
 };
 
-static const struct xlat ioprio_class[] = {
-	XLAT(IOPRIO_CLASS_NONE),
-	XLAT(IOPRIO_CLASS_RT),
-	XLAT(IOPRIO_CLASS_BE),
-	XLAT(IOPRIO_CLASS_IDLE),
-	XLAT_END
-};
+#include "xlat/ioprio_class.h"
 
 #define IOPRIO_CLASS_SHIFT	(13)
 #define IOPRIO_PRIO_MASK	((1ul << IOPRIO_CLASS_SHIFT) - 1)
diff --git a/ipc.c b/ipc.c
index 144c52b..e04a618 100644
--- a/ipc.c
+++ b/ipc.c
@@ -63,84 +63,14 @@
 
 extern void printsigevent(struct tcb *tcp, long arg);
 
-static const struct xlat msgctl_flags[] = {
-	XLAT(IPC_RMID),
-	XLAT(IPC_SET),
-	XLAT(IPC_STAT),
-	XLAT(IPC_INFO),
-	XLAT(MSG_STAT),
-	XLAT(MSG_INFO),
-	XLAT_END
-};
-
-static const struct xlat semctl_flags[] = {
-	XLAT(IPC_RMID),
-	XLAT(IPC_SET),
-	XLAT(IPC_STAT),
-	XLAT(IPC_INFO),
-	XLAT(SEM_STAT),
-	XLAT(SEM_INFO),
-	XLAT(GETPID),
-	XLAT(GETVAL),
-	XLAT(GETALL),
-	XLAT(GETNCNT),
-	XLAT(GETZCNT),
-	XLAT(SETVAL),
-	XLAT(SETALL),
-	XLAT_END
-};
-
-static const struct xlat shmctl_flags[] = {
-	XLAT(IPC_RMID),
-	XLAT(IPC_SET),
-	XLAT(IPC_STAT),
-	XLAT(IPC_INFO),
-	XLAT(SHM_STAT),
-	XLAT(SHM_INFO),
-#ifdef SHM_LOCK
-	XLAT(SHM_LOCK),
-#endif
-#ifdef SHM_UNLOCK
-	XLAT(SHM_UNLOCK),
-#endif
-	XLAT_END
-};
-
-static const struct xlat resource_flags[] = {
-	XLAT(IPC_CREAT),
-	XLAT(IPC_EXCL),
-	XLAT(IPC_NOWAIT),
-	XLAT_END
-};
-
-static const struct xlat shm_resource_flags[] = {
-	XLAT(IPC_CREAT),
-	XLAT(IPC_EXCL),
-#ifdef SHM_HUGETLB
-	XLAT(SHM_HUGETLB),
-#endif
-	XLAT_END
-};
-
-static const struct xlat shm_flags[] = {
-	XLAT(SHM_REMAP),
-	XLAT(SHM_RDONLY),
-	XLAT(SHM_RND),
-	XLAT_END
-};
-
-static const struct xlat msg_flags[] = {
-	XLAT(MSG_NOERROR),
-	XLAT(MSG_EXCEPT),
-	XLAT(IPC_NOWAIT),
-	XLAT_END
-};
-
-static const struct xlat semop_flags[] = {
-	XLAT(SEM_UNDO),
-	XLAT(IPC_NOWAIT),
-	XLAT_END
-};
+#include "xlat/msgctl_flags.h"
+#include "xlat/semctl_flags.h"
+#include "xlat/shmctl_flags.h"
+#include "xlat/resource_flags.h"
+#include "xlat/shm_resource_flags.h"
+#include "xlat/shm_flags.h"
+#include "xlat/ipc_msg_flags.h"
+#include "xlat/semop_flags.h"
 
 int sys_msgget(struct tcb *tcp)
 {
@@ -203,7 +133,7 @@
 		tprints("}");
 	}
 	tprintf(", %lu, ", count);
-	printflags(msg_flags, flags, "MSG_???");
+	printflags(ipc_msg_flags, flags, "MSG_???");
 }
 
 int sys_msgsnd(struct tcb *tcp)
@@ -254,11 +184,11 @@
 				tprint_msgrcv(tcp, (long) tmp.msgp,
 					tcp->u_arg[1], tmp.msgtyp);
 			}
-			printflags(msg_flags, tcp->u_arg[2], "MSG_???");
+			printflags(ipc_msg_flags, tcp->u_arg[2], "MSG_???");
 		} else {
 			tprint_msgrcv(tcp, tcp->u_arg[1],
 				tcp->u_arg[2], tcp->u_arg[3]);
-			printflags(msg_flags, tcp->u_arg[4], "MSG_???");
+			printflags(ipc_msg_flags, tcp->u_arg[4], "MSG_???");
 		}
 	}
 	return 0;
diff --git a/kexec.c b/kexec.c
index e201937..f95bea2 100644
--- a/kexec.c
+++ b/kexec.c
@@ -1,26 +1,8 @@
 #include "defs.h"
 #include <linux/kexec.h>
 
-static const struct xlat kexec_arch_values[] = {
-	XLAT(KEXEC_ARCH_DEFAULT),
-	XLAT(KEXEC_ARCH_386),
-	XLAT(KEXEC_ARCH_X86_64),
-	XLAT(KEXEC_ARCH_PPC),
-	XLAT(KEXEC_ARCH_PPC64),
-	XLAT(KEXEC_ARCH_IA_64),
-	XLAT(KEXEC_ARCH_ARM),
-	XLAT(KEXEC_ARCH_S390),
-	XLAT(KEXEC_ARCH_SH),
-	XLAT(KEXEC_ARCH_MIPS_LE),
-	XLAT(KEXEC_ARCH_MIPS),
-	XLAT_END
-};
-
-static const struct xlat kexec_flags[] = {
-	XLAT(KEXEC_ON_CRASH),
-	XLAT(KEXEC_PRESERVE_CONTEXT),
-	XLAT_END
-};
+#include "xlat/kexec_arch_values.h"
+#include "xlat/kexec_flags.h"
 
 static void
 print_kexec_segments(struct tcb *tcp, unsigned long addr, unsigned long len)
diff --git a/keyctl.c b/keyctl.c
index fa4b7f5..a12bd54 100644
--- a/keyctl.c
+++ b/keyctl.c
@@ -3,17 +3,7 @@
 
 typedef int32_t key_serial_t;
 
-static const struct xlat key_spec[] = {
-	XLAT(KEY_SPEC_THREAD_KEYRING),
-	XLAT(KEY_SPEC_PROCESS_KEYRING),
-	XLAT(KEY_SPEC_SESSION_KEYRING),
-	XLAT(KEY_SPEC_USER_KEYRING),
-	XLAT(KEY_SPEC_USER_SESSION_KEYRING),
-	XLAT(KEY_SPEC_GROUP_KEYRING),
-	XLAT(KEY_SPEC_REQKEY_AUTH_KEY),
-	XLAT(KEY_SPEC_REQUESTOR_KEYRING),
-	XLAT_END
-};
+#include "xlat/key_spec.h"
 
 static void
 print_keyring_serial_number(key_serial_t id)
@@ -275,37 +265,7 @@
 #define KEY_OTH_SETATTR	0x00000020
 #define KEY_OTH_ALL	0x0000003f
 
-static const struct xlat key_perms[] = {
-	XLAT(KEY_POS_VIEW),
-	XLAT(KEY_POS_READ),
-	XLAT(KEY_POS_WRITE),
-	XLAT(KEY_POS_SEARCH),
-	XLAT(KEY_POS_LINK),
-	XLAT(KEY_POS_SETATTR),
-	XLAT(KEY_POS_ALL),
-	XLAT(KEY_USR_VIEW),
-	XLAT(KEY_USR_READ),
-	XLAT(KEY_USR_WRITE),
-	XLAT(KEY_USR_SEARCH),
-	XLAT(KEY_USR_LINK),
-	XLAT(KEY_USR_SETATTR),
-	XLAT(KEY_USR_ALL),
-	XLAT(KEY_GRP_VIEW),
-	XLAT(KEY_GRP_READ),
-	XLAT(KEY_GRP_WRITE),
-	XLAT(KEY_GRP_SEARCH),
-	XLAT(KEY_GRP_LINK),
-	XLAT(KEY_GRP_SETATTR),
-	XLAT(KEY_GRP_ALL),
-	XLAT(KEY_OTH_VIEW),
-	XLAT(KEY_OTH_READ),
-	XLAT(KEY_OTH_WRITE),
-	XLAT(KEY_OTH_SEARCH),
-	XLAT(KEY_OTH_LINK),
-	XLAT(KEY_OTH_SETATTR),
-	XLAT(KEY_OTH_ALL),
-	XLAT_END
-};
+#include "xlat/key_perms.h"
 
 static int
 keyctl_setperm_key(struct tcb *tcp, key_serial_t id, uint32_t perm)
@@ -319,18 +279,7 @@
 	return 0;
 }
 
-static const struct xlat key_reqkeys[] = {
-	XLAT(KEY_REQKEY_DEFL_NO_CHANGE),
-	XLAT(KEY_REQKEY_DEFL_DEFAULT),
-	XLAT(KEY_REQKEY_DEFL_THREAD_KEYRING),
-	XLAT(KEY_REQKEY_DEFL_PROCESS_KEYRING),
-	XLAT(KEY_REQKEY_DEFL_SESSION_KEYRING),
-	XLAT(KEY_REQKEY_DEFL_USER_KEYRING),
-	XLAT(KEY_REQKEY_DEFL_USER_SESSION_KEYRING),
-	XLAT(KEY_REQKEY_DEFL_GROUP_KEYRING),
-	XLAT(KEY_REQKEY_DEFL_REQUESTOR_KEYRING),
-	XLAT_END
-};
+#include "xlat/key_reqkeys.h"
 
 static int
 keyctl_set_reqkey_keyring(struct tcb *tcp, int reqkey)
@@ -342,32 +291,7 @@
 	return 0;
 }
 
-static const struct xlat keyctl_commands[] = {
-	XLAT(KEYCTL_GET_KEYRING_ID),
-	XLAT(KEYCTL_JOIN_SESSION_KEYRING),
-	XLAT(KEYCTL_UPDATE),
-	XLAT(KEYCTL_REVOKE),
-	XLAT(KEYCTL_CHOWN),
-	XLAT(KEYCTL_SETPERM),
-	XLAT(KEYCTL_DESCRIBE),
-	XLAT(KEYCTL_CLEAR),
-	XLAT(KEYCTL_LINK),
-	XLAT(KEYCTL_UNLINK),
-	XLAT(KEYCTL_SEARCH),
-	XLAT(KEYCTL_READ),
-	XLAT(KEYCTL_INSTANTIATE),
-	XLAT(KEYCTL_NEGATE),
-	XLAT(KEYCTL_SET_REQKEY_KEYRING),
-	XLAT(KEYCTL_SET_TIMEOUT),
-	XLAT(KEYCTL_ASSUME_AUTHORITY),
-	XLAT(KEYCTL_GET_SECURITY),
-	XLAT(KEYCTL_SESSION_TO_PARENT),
-	XLAT(KEYCTL_REJECT),
-	XLAT(KEYCTL_INSTANTIATE_IOV),
-	XLAT(KEYCTL_INVALIDATE),
-	XLAT(KEYCTL_GET_PERSISTENT),
-	XLAT_END
-};
+#include "xlat/keyctl_commands.h"
 
 int
 sys_keyctl(struct tcb *tcp)
diff --git a/linux/aarch64/syscallent1.h b/linux/aarch64/syscallent1.h
index e772a5e..ef23db3 100644
--- a/linux/aarch64/syscallent1.h
+++ b/linux/aarch64/syscallent1.h
@@ -91,8 +91,8 @@
 	{ 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 */
+	{ 1,	TP|SE,	sys_exit,			"exit"				}, /*   93 */
+	{ 1,	TP|SE,	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 */
@@ -194,8 +194,8 @@
 	{ 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 */
+	{ 4,	TI|TM|SI,	sys_shmat,			"shmat"				}, /*  196 */
+	{ 4,	TI|TM|SI,	sys_shmdt,			"shmdt"				}, /*  197 */
 	{ 3,	TN,	sys_socket,			"socket"			}, /*  198 */
 	{ 4,	TN,	sys_socketpair,			"socketpair"			}, /*  199 */
 	{ 3,	TN,	sys_bind,			"bind"				}, /*  200 */
@@ -212,19 +212,19 @@
 	{ 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 */
+	{ 1,	TM|SI,	sys_brk,			"brk"				}, /*  214 */
+	{ 2,	TM|SI,	sys_munmap,			"munmap"			}, /*  215 */
+	{ 5,	TM|SI,	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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,			"execve"			}, /*  221 */
+	{ 6,	TD|TM|SI,	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|SI,	sys_mprotect,			"mprotect"			}, /*  226 */
 	{ 3,	TM,	sys_msync,			"msync"				}, /*  227 */
 	{ 3,	TM,	sys_msync,			"msync"				}, /*  228 */
 	{ 2,	TM,	sys_munlock,			"munlock"			}, /*  229 */
@@ -232,7 +232,7 @@
 	{ 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 */
+	{ 5,	TM|SI,	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 */
@@ -306,7 +306,7 @@
 	{ 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 */
+	{ 6,	TD|TM|SI,	sys_mmap,			"mmap"				}, /* 1058 */
 	{ 1,	0,	sys_alarm,			"alarm"				}, /* 1059 */
 	{ 0,	0,	sys_getpgrp,			"getpgrp"			}, /* 1060 */
 	{ 0,	TS,	sys_pause,			"pause"				}, /* 1061 */
diff --git a/linux/alpha/syscallent.h b/linux/alpha/syscallent.h
index 28e2eeb..701b8fb 100644
--- a/linux/alpha/syscallent.h
+++ b/linux/alpha/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 6,	0,	printargs,		"osf_syscall"		}, /* 0, not implemented */
-	{ 1,	TP,	sys_exit,		"exit"			}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"exit"			}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"			}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"			}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"			}, /* 4 */
@@ -43,7 +43,7 @@
 	{ 3,	TF,	sys_mknod,		"mknod"			}, /* 14 */
 	{ 2,	TF,	sys_chmod,		"chmod"			}, /* 15 */
 	{ 3,	TF,	sys_chown,		"chown"			}, /* 16 */
-	{ 1,	TM,	sys_brk,		"brk"			}, /* 17 */
+	{ 1,	TM|SI,	sys_brk,		"brk"			}, /* 17 */
 	{ 5,	0,	printargs,		"osf_getfsstat"		}, /* 18, not implemented */
 	{ 3,	TD,	sys_lseek,		"lseek"			}, /* 19 */
 	{ 0,	0,	sys_getpid,		"getxpid"		}, /* 20 */
@@ -85,22 +85,22 @@
 	{ 5,	0,	printargs,		"osf_revoke"		}, /* 56, not implemented */
 	{ 2,	TF,	sys_symlink,		"symlink"		}, /* 57 */
 	{ 3,	TF,	sys_readlink,		"readlink"		}, /* 58 */
-	{ 3,	TF|TP,	sys_execve,		"execve"		}, /* 59 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"		}, /* 59 */
 	{ 1,	0,	sys_umask,		"umask"			}, /* 60 */
 	{ 1,	TF,	sys_chroot,		"chroot"		}, /* 61 */
 	{ 5,	0,	printargs,		"osf_old_fstat"		}, /* 62, not implemented */
 	{ 0,	0,	sys_getpgrp,		"getpgrp"		}, /* 63 */
 	{ 0,	0,	sys_getpagesize,	"getpagesize"		}, /* 64 */
 	{ 5,	TM,	printargs,		"osf_mremap"		}, /* 65, not implemented */
-	{ 0,	TP,	sys_fork,		"vfork"			}, /* 66 */
+	{ 0,	TP,	sys_vfork,		"vfork"			}, /* 66 */
 	{ 2,	TF,	sys_stat,		"stat"			}, /* 67 */
 	{ 2,	TF,	sys_lstat,		"lstat"			}, /* 68 */
 	{ 5,	TM,	printargs,		"osf_sbrk"		}, /* 69, not implemented */
 	{ 5,	0,	printargs,		"osf_sstk"		}, /* 70, not implemented */
-	{ 6,	TD|TM,	sys_mmap,		"mmap"			}, /* 71 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"			}, /* 71 */
 	{ 5,	0,	printargs,		"osf_old_vadvise"	}, /* 72, not implemented */
-	{ 2,	TM,	sys_munmap,		"munmap"		}, /* 73 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"		}, /* 74 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"		}, /* 73 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"		}, /* 74 */
 	{ 3,	TM,	sys_madvise,		"madvise"		}, /* 75 */
 	{ 0,	0,	sys_vhangup,		"vhangup"		}, /* 76 */
 	{ 5,	0,	printargs,		"osf_kmodcall"		}, /* 77, not implemented */
@@ -235,9 +235,9 @@
 	{ 4,	TI,	printargs,		"semop"			}, /* 206 */
 	{ 1,	0,	printargs,		"osf_utsname"		}, /* 207 */
 	{ 3,	TF,	sys_chown,		"lchown"		}, /* 208 */
-	{ 3,	TI,	printargs,		"osf_shmat"		}, /* 209 */
+	{ 3,	TI|TM,	printargs,		"osf_shmat"		}, /* 209 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"		}, /* 210 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"			}, /* 211 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"			}, /* 211 */
 	{ 4,	TI,	sys_shmget,		"shmget"		}, /* 212 */
 	{ 5,	0,	printargs,		"osf_mvalid"		}, /* 213, not implemented */
 	{ 5,	0,	printargs,		"osf_getaddressconf"	}, /* 214, not implemented */
@@ -367,7 +367,7 @@
 	{ 5,	0,	sys_afs_syscall,	"afs_syscall"		}, /* 338 */
 	{ 1,	0,	sys_uname,		"uname"			}, /* 339 */
 	{ 2,	0,	sys_nanosleep,		"nanosleep"		}, /* 340 */
-	{ 5,	TM,	sys_mremap,		"mremap"		}, /* 341 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"		}, /* 341 */
 	{ 3,	0,	sys_nfsservctl,		"nfsservctl"		}, /* 342 */
 	{ 3,	0,	sys_setresuid,		"setresuid"		}, /* 343 */
 	{ 3,	0,	sys_getresuid,		"getresuid"		}, /* 344 */
@@ -431,12 +431,12 @@
 	{ 3,	0,	sys_io_cancel,		"io_cancel"		}, /* 402 */
 	{ 5,	0,	NULL,			NULL			}, /* 403 */
 	{ 5,	0,	NULL,			NULL			}, /* 404 */
-	{ 1,	TP,	sys_exit,		"exit_group"		}, /* 405 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"		}, /* 405 */
 	{ 3,	0,	sys_lookup_dcookie,	"lookup_dcookie"	}, /* 406 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"		}, /* 407 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"		}, /* 408 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"		}, /* 409 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"	}, /* 410 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"	}, /* 410 */
 	{ 1,	0,	sys_set_tid_address,	"set_tid_address"	}, /* 411 */
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall"	}, /* 412 */
 	{ 4,	TD,	sys_fadvise64,		"fadvise"		}, /* 413 */
@@ -464,7 +464,7 @@
 	{ 5,	0,	sys_mq_timedreceive,	"mq_timedreceive"	}, /* 435 */
 	{ 2,	0,	sys_mq_notify,		"mq_notify"		}, /* 436 */
 	{ 3,	0,	sys_mq_getsetattr,	"mq_getsetattr"		}, /* 437 */
-	{ 4,	0,	printargs,		"waitid"		}, /* 438 */
+	{ 5,	TP,	sys_waitid,		"waitid"		}, /* 438 */
 	{ 5,	0,	sys_add_key,		"add_key"		}, /* 439 */
 	{ 4,	0,	sys_request_key,	"request_key"		}, /* 440 */
 	{ 5,	0,	sys_keyctl,		"keyctl"		}, /* 441 */
diff --git a/linux/arc/syscallent.h b/linux/arc/syscallent.h
index fd3171a..6bc9f27 100644
--- a/linux/arc/syscallent.h
+++ b/linux/arc/syscallent.h
@@ -91,8 +91,8 @@
 	{ 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 */
+	{ 1,	TP|SE,	sys_exit,			"exit"			}, /* 93 */
+	{ 1,	TP|SE,	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 */
@@ -194,8 +194,8 @@
 	{ 3,	TI,	sys_semop,			"semop"			}, /* 193 */
 	{ 3,	TI,	sys_shmget,			"shmget"		}, /* 194 */
 	{ 3,	TI,	sys_shmctl,			"shmctl"		}, /* 195 */
-	{ 3,	TI,	sys_shmat,			"shmat"			}, /* 196 */
-	{ 1,	TI,	sys_shmdt,			"shmdt"			}, /* 197 */
+	{ 3,	TI|TM|SI,	sys_shmat,			"shmat"			}, /* 196 */
+	{ 1,	TI|TM|SI,	sys_shmdt,			"shmdt"			}, /* 197 */
 	{ 3,	TN,	sys_socket,			"socket"		}, /* 198 */
 	{ 4,	TN,	sys_socketpair,			"socketpair"		}, /* 199 */
 	{ 3,	TN,	sys_bind,			"bind"			}, /* 200 */
@@ -212,19 +212,19 @@
 	{ 3,	TN,	sys_sendmsg,			"sendmsg"		}, /* 211 */
 	{ 3,	TN,	sys_recvmsg,			"recvmsg"		}, /* 212 */
 	{ 4,	TD,	sys_readahead,			"readahead"		}, /* 213 */
-	{ 1,	TM,	sys_brk,			"brk"			}, /* 214 */
-	{ 2,	TM,	sys_munmap,			"munmap"		}, /* 215 */
-	{ 5,	TM,	sys_mremap,			"mremap"		}, /* 216 */
+	{ 1,	TM|SI,	sys_brk,			"brk"			}, /* 214 */
+	{ 2,	TM|SI,	sys_munmap,			"munmap"		}, /* 215 */
+	{ 5,	TM|SI,	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,			"mmap2"			}, /* 222 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,			"execve"		}, /* 221 */
+	{ 6,	TD|TM|SI,	sys_mmap,			"mmap2"			}, /* 222 */
 	{ 6,	TD,	sys_fadvise64_64,		"fadvise64_64"		}, /* 223 */
 	{ 2,	TF,	sys_swapon,			"swapon"		}, /* 224 */
 	{ 1,	TF,	sys_swapoff,			"swapoff"		}, /* 225 */
-	{ 3,	TM,	sys_mprotect,			"mprotect"		}, /* 226 */
+	{ 3,	TM|SI,	sys_mprotect,			"mprotect"		}, /* 226 */
 	{ 3,	TM,	sys_msync,			"msync"			}, /* 227 */
 	{ 2,	TM,	sys_mlock,			"mlock"			}, /* 228 */
 	{ 2,	TM,	sys_munlock,			"munlock"		}, /* 229 */
@@ -232,7 +232,7 @@
 	{ 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 */
+	{ 5,	TM|SI,	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 */
diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h
index 4f556f4..1656af6 100644
--- a/linux/arm/syscallent.h
+++ b/linux/arm/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall"}, /* 0 */
-	{ 1,	TP,	sys_exit,		"exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -37,7 +37,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -71,7 +71,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	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 */
-	{ 1,	TD|TM,	sys_old_mmap,		"old_mmap"	}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 1,	TD|TM|SI,	sys_old_mmap,		"old_mmap"	}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -151,7 +151,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ 3,	0,	sys_modify_ldt,		"modify_ldt"	}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ 5,	0,	sys_vm86,		"vm86"		}, /* 166 */
@@ -219,7 +219,7 @@
 	{ 5,	0,	sys_putpmsg,		"putpmsg"	}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 2,	0,	sys_getrlimit,		"getrlimit"	}, /* 191 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
 	{ 4,	TF,	sys_truncate64,		"truncate64"	}, /* 193 */
 	{ 4,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -276,12 +276,12 @@
 	{ 5,	0,	sys_io_getevents,	"io_getevents"	}, /* 245 */
 	{ 3,	0,	sys_io_submit,		"io_submit"	}, /* 246 */
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 247 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 248 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 248 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 249 */
 	{ 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,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 253 */
+	{ 5,	TM|SI,	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 */
@@ -333,8 +333,8 @@
 	{ 4,	TI,	sys_msgrcv,		"msgrcv"	}, /* 302 */
 	{ 4,	TI,	sys_msgget,		"msgget"	}, /* 303 */
 	{ 4,	TI,	sys_msgctl,		"msgctl"	}, /* 304 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 305 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 306 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 305 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 306 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 307 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 308 */
 	{ 5,	0,	sys_add_key,		"add_key"	}, /* 309 */
@@ -478,8 +478,8 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 438 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 439 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 440 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 441 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 442 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 441 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 442 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 443 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 444 */
 # define ARM_LAST_ORDINARY_SYSCALL 444
diff --git a/linux/avr32/syscallent.h b/linux/avr32/syscallent.h
index 527d11a..b47653c 100644
--- a/linux/avr32/syscallent.h
+++ b/linux/avr32/syscallent.h
@@ -26,7 +26,7 @@
  */
 
 	{ 0,	0,	sys_setup,		"setup"		}, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -36,7 +36,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -70,7 +70,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 5,	TP,	sys_clone,		"clone"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	sys_brk,		"brk"		}, /* 45 */
 	{ 1,	0,	sys_setgid,		"setgid"	}, /* 46 */
 	{ 0,	NF,	sys_getgid,		"getgid"	}, /* 47 */
 	{ 2,	TF,	sys_getcwd,		"getcwd"	}, /* 48 */
@@ -82,7 +82,7 @@
 	{ 3,	TD,	sys_ioctl,		"ioctl"		}, /* 54 */
 	{ 3,	TD,	sys_fcntl,		"fcntl"		}, /* 55 */
 	{ 2,	0,	sys_setpgid,		"setpgid"	}, /* 56 */
-	{ 5,	TM,	sys_mremap,		"mremap"	}, /* 57 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 57 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 58 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 59 */
 	{ 2,	0,	sys_setreuid,		"setreuid"	}, /* 60 */
@@ -115,8 +115,8 @@
 	{ 5,	TD,	sys_pwrite,		"pwrite"	}, /* 87 */
 	{ 2,	TF,	sys_swapon,		"swapon"	}, /* 88 */
 	{ 4,	0,	sys_reboot,		"reboot"	}, /* 89 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap"		}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap"		}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -138,7 +138,7 @@
 	{ 2,	0,	sys_setdomainname,	"setdomainname"	}, /* 110 */
 	{ 1,	0,	sys_uname,		"uname"		}, /* 111 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 112 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 113 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"	}, /* 113 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 114 */
 	{ 3,	0,	sys_init_module,	"init_module"	}, /* 115 */
 	{ 2,	0,	sys_delete_module,	"delete_module"	}, /* 116 */
@@ -228,12 +228,12 @@
 	{ 3,	0,	sys_io_submit,		"io_submit"	}, /* 200 */
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 201 */
 	{ 5,	TD,	sys_fadvise64,		"fadvise64"	}, /* 202 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 203 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 203 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 204 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 205 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 206 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 207 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 208 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"}, /* 208 */
 	{ 1,	0,	sys_set_tid_address,	"set_tid_address"}, /* 209 */
 	{ 3,	0,	sys_timer_create,	"timer_create"	}, /* 210 */
 	{ 4,	0,	sys_timer_settime,	"timer_settime"	}, /* 211 */
@@ -299,9 +299,9 @@
 	{ 4,	TI,	sys_semop,		"semop"		}, /* 271 */
 	{ 4,	TI,	sys_semctl,		"semctl"	}, /* 272 */
 	{ 5,	TI,	sys_semtimedop,		"semtimedop"	}, /* 273 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 274 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 274 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 275 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 276 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 276 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 277 */
 	{ 4,	TD|TF,	sys_utimensat,		"utimensat"	}, /* 278 */
 	{ 3,	TD|TS,	sys_signalfd,		"signalfd"	}, /* 279 */
diff --git a/linux/bfin/syscallent.h b/linux/bfin/syscallent.h
index 64db1a9..8df6a4d 100644
--- a/linux/bfin/syscallent.h
+++ b/linux/bfin/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall"	}, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -37,7 +37,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -71,7 +71,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	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|TM,	printargs,		"old_mmap"	}, /* 90: not implemented in kernel */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 6,	TD|TM|SI,	printargs,		"old_mmap"	}, /* 90: not implemented in kernel */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -151,7 +151,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ 3,	0,	sys_modify_ldt,		"modify_ldt"	}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ 5,	0,	sys_vm86,		"vm86"		}, /* 166 */
@@ -218,7 +218,7 @@
 	{ 5,	0,	sys_putpmsg,		"putpmsg"	}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 2,	0,	sys_getrlimit,		"getrlimit"	}, /* 191 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
 	{ 3,	TF,	sys_truncate64,		"truncate64"	}, /* 193 */
 	{ 3,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -278,13 +278,13 @@
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 249 */
 	{ 5,	0,	printargs,		"alloc_hugepages"	}, /* 250 */
 	{ 1,	0,	printargs,		"free_hugepages"	}, /* 251 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 252 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 252 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"	}, /* 253 */
 	{ 1,	0,	printargs,		"bfin_spinlock"	}, /* 254 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 255 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 256 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 257 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"	}, /* 258 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"	}, /* 258 */
 	{ 1,	0,	sys_set_tid_address,	"set_tid_address"	}, /* 259 */
 	{ 3,	0,	sys_timer_create,	"timer_create"	}, /* 260 */
 	{ 4,	0,	sys_timer_settime,	"timer_settime"	}, /* 261 */
@@ -364,9 +364,9 @@
 	{ 4,	TI,	sys_msgget,		"msgget"	}, /* 335 */
 	{ 4,	TI,	sys_msgrcv,		"msgrcv"	}, /* 336 */
 	{ 4,	TI,	sys_msgsnd,		"msgsnd"	}, /* 337 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 338 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 338 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 339 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 340 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 340 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 341 */
 	{ 6,	TD,	sys_splice,		"splice"	}, /* 342 */
 	{ 6,	TD,	sys_sync_file_range,	"sync_file_range"	}, /* 343 */
diff --git a/linux/dummy.h b/linux/dummy.h
index 2fc3498..6068666 100644
--- a/linux/dummy.h
+++ b/linux/dummy.h
@@ -57,8 +57,6 @@
 #define	sys_acct		sys_chdir
 #define	sys_chroot		sys_chdir
 #define	sys_clock_getres	sys_clock_gettime
-#define	sys_delete_module	sys_open
-#define	sys_dup			sys_close
 #define	sys_fchdir		sys_close
 #define	sys_fdatasync		sys_close
 #define	sys_fsync		sys_close
@@ -79,7 +77,6 @@
 #define	sys_set_robust_list	sys_munmap
 #define	sys_setfsgid		sys_setfsuid
 #define	sys_setgid		sys_setuid
-#define	sys_setns		sys_inotify_rm_watch
 #define	sys_setregid		sys_setreuid
 #define	sys_setresgid		sys_setresuid
 #define	sys_swapoff		sys_chdir
@@ -88,6 +85,7 @@
 #define	sys_umount		sys_chdir
 #define	sys_unlink		sys_chdir
 #define	sys_uselib		sys_chdir
+#define	sys_vfork		sys_fork
 
 /* printargs does the right thing */
 #define	sys_getpgid		printargs
diff --git a/linux/hppa/syscallent.h b/linux/hppa/syscallent.h
index 21e4ae7..2548f46 100644
--- a/linux/hppa/syscallent.h
+++ b/linux/hppa/syscallent.h
@@ -3,7 +3,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall"	}, /* 0 */
-	{ 1,	TP,	sys_exit,		"exit"			}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"exit"			}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"			}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"			}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"			}, /* 4 */
@@ -13,7 +13,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"		}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"			}, /* 12 */
 	{ 1,	0,	sys_time,		"time"			}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"			}, /* 14 */
@@ -47,7 +47,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"			}, /* 42 */
 	{ 1,	0,	sys_times,		"times"			}, /* 43 */
 	{ 3,	TN,	sys_getsockname,	"getsockname"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"			}, /* 45 */
+	{ 1,	TM|SI,	sys_brk,		"brk"			}, /* 45 */
 	{ 1,	0,	sys_setgid,		"setgid"		}, /* 46 */
 	{ 0,	NF,	sys_getgid,		"getgid"		}, /* 47 */
 	{ 2,	TS,	sys_signal,		"signal"		}, /* 48 */
@@ -91,9 +91,9 @@
 	{ 1,	TF,	sys_uselib,		"uselib"		}, /* 86 */
 	{ 2,	TF,	sys_swapon,		"swapon"		}, /* 87 */
 	{ 4,	0,	sys_reboot,		"reboot"		}, /* 88 */
-	{ 6,	TD|TM,	sys_mmap_4koff,		"mmap2"			}, /* 89 */
-	{ 6,	TD|TM,	sys_mmap,		"mmap"			}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"		}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_mmap_4koff,		"mmap2"			}, /* 89 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"			}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"		}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"		}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"		}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"		}, /* 94 */
@@ -127,7 +127,7 @@
 	{ 4,	TD|TN,	sys_sendfile,		"sendfile"		}, /* 122 */
 	{ 6,	TN,	sys_recvfrom,		"recvfrom"		}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"		}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"		}, /* 125 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"		}, /* 125 */
 	{ 3,	TS,	sys_sigprocmask,	"sigprocmask"		}, /* 126 */
 	{ 2,	0,	sys_create_module,	"create_module"		}, /* 127 */
 	{ 4,	0,	sys_init_module,	"init_module"		}, /* 128 */
@@ -165,7 +165,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,	TM,	sys_mremap,		"mremap"		}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"		}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"		}, /* 164 */
 	{ 3,	0,	sys_setresuid,		"getresuid"		}, /* 165 */
 	{ 2,	TS,	sys_sigaltstack,	"sigaltstack"		}, /* 166 */
@@ -194,8 +194,8 @@
 	{ 4,	TI,	sys_msgrcv,		"msgrcv"		}, /* 189 */
 	{ 4,	TI,	sys_msgget,		"msgget"		}, /* 190 */
 	{ 4,	TI,	sys_msgctl,		"msgctl"		}, /* 191 */
-	{ 3,	TI,	sys_shmat,		"shmat"			}, /* 192 */
-	{ 1,	TI,	sys_shmdt,		"shmdt"			}, /* 193 */
+	{ 3,	TI|TM|SI,	sys_shmat,		"shmat"			}, /* 192 */
+	{ 1,	TI|TM|SI,	sys_shmdt,		"shmdt"			}, /* 193 */
 	{ 3,	TI,	sys_shmget,		"shmget"		}, /* 194 */
 	{ 3,	TI,	sys_shmctl,		"shmctl"		}, /* 195 */
 	{ 5,	0,	sys_getpmsg,		"getpmsg"		}, /* 196 */
@@ -224,12 +224,12 @@
 	{ 4,	0,	sys_io_cancel,		"io_cancel"		}, /* 219 */
 	{ 5,	0,	printargs,		"alloc_hugepages"	}, /* 220 */
 	{ 1,	0,	printargs,		"free_hugepages"	}, /* 221 */
-	{ 1,	TP,	sys_exit,		"exit_group"		}, /* 222 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"		}, /* 222 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"	}, /* 223 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"		}, /* 224 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"		}, /* 225 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"		}, /* 226 */
-	{ 5,	TM,	printargs,		"remap_file_pages"	}, /* 227 */
+	{ 5,	TM|SI,	printargs,		"remap_file_pages"	}, /* 227 */
 	{ 5,	TI,	sys_semtimedop,		"semtimedop"		}, /* 228 */
 	{ 5,	0,	printargs,		"mq_open"		}, /* 229 */
 	{ 5,	0,	printargs,		"mq_unlink"		}, /* 230 */
@@ -237,7 +237,7 @@
 	{ 5,	0,	printargs,		"mq_timedreceive"		}, /* 232 */
 	{ 5,	0,	printargs,		"mq_notify"		}, /* 233 */
 	{ 5,	0,	printargs,		"mq_getsetattr"		}, /* 234 */
-	{ 4,	0,	printargs,		"waitid"		}, /* 235 */
+	{ 5,	TP,	sys_waitid,		"waitid"		}, /* 235 */
 	{ 6,	TD,	sys_fadvise64_64,	"fadvise64_64"		}, /* 236 */
 	{ 5,	0,	sys_set_tid_address,	"set_tid_address"	}, /* 237 */
 	{ 5,	TF,	sys_setxattr,		"setxattr"		}, /* 238 */
diff --git a/linux/i386/syscallent.h b/linux/i386/syscallent.h
index 1f759e4..a8daacf 100644
--- a/linux/i386/syscallent.h
+++ b/linux/i386/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall" }, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -37,7 +37,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -71,7 +71,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	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|TM,	sys_old_mmap,		"old_mmap"	}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_old_mmap,		"old_mmap"	}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -151,7 +151,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ 3,	0,	sys_modify_ldt,		"modify_ldt"	}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ 5,	0,	sys_vm86,		"vm86"		}, /* 166 */
@@ -219,7 +219,7 @@
 	{ 5,	0,	sys_putpmsg,		"putpmsg"	}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 2,	0,	sys_getrlimit,		"getrlimit"	}, /* 191 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
 	{ 3,	TF,	sys_truncate64,		"truncate64"	}, /* 193 */
 	{ 3,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -280,12 +280,12 @@
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 249 */
 	{ 5,	TD,	sys_fadvise64,		"fadvise64"	}, /* 250 */
 	{ 6,	0,	NULL,			NULL		}, /* 251 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 252 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 252 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 253 */
 	{ 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,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 257 */
+	{ 5,	TM|SI,	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 */
@@ -475,7 +475,7 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 438 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 439 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 440 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 441 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 442 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 441 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 442 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 443 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 444 */
diff --git a/linux/ia64/syscallent.h b/linux/ia64/syscallent.h
index 0242280..5e59105 100644
--- a/linux/ia64/syscallent.h
+++ b/linux/ia64/syscallent.h
@@ -816,7 +816,7 @@
 	{ MA,	0,	NULL,			NULL		}, /* 1022 */
 	{ MA,	0,	NULL,			NULL		}, /* 1023 */
 	{ 0,	0,	printargs,		"ni_syscall"	}, /* 1024 */
-	{ 1,	TP,	sys_exit,		"exit"		}, /* 1025 */
+	{ 1,	TP|SE,	sys_exit,		"exit"		}, /* 1025 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 1026 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 1027 */
 	{ 3,	TD|TF,	sys_open,		"open"		}, /* 1028 */
@@ -824,7 +824,7 @@
 	{ 2,	TD|TF,	sys_creat,		"creat"		}, /* 1030 */
 	{ 2,	TF,	sys_link,		"link"		}, /* 1031 */
 	{ 1,	TF,	sys_unlink,		"unlink"	}, /* 1032 */
-	{ 3,	TF|TP,	sys_execve,		"execve"	}, /* 1033 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 1033 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 1034 */
 	{ 1,	TD,	sys_fchdir,		"fchdir"	}, /* 1035 */
 	{ 2,	TF,	sys_utimes,		"utimes"	}, /* 1036 */
@@ -851,7 +851,7 @@
 	{ 1,	TD,	sys_dup,		"dup"		}, /* 1057 */
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 1058 */
 	{ 1,	0,	sys_times,		"times"		}, /* 1059 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 1060 */
+	{ 1,	TM|SI,	sys_brk,		"brk"		}, /* 1060 */
 	{ 1,	0,	sys_setgid,		"setgid"	}, /* 1061 */
 	{ 0,	NF,	sys_getgid,		"getgid"	}, /* 1062 */
 	{ 0,	NF,	sys_getegid,		"getegid"	}, /* 1063 */
@@ -905,8 +905,8 @@
 	{ 5,	TI,	sys_msgrcv,		"msgrcv"	}, /* 1111 */
 	{ 3,	TI,	sys_msgctl,		"msgctl"	}, /* 1112 */
 	{ 3,	TI,	sys_shmget,		"shmget"	}, /* 1113 */
-	{ 3,	TI,	sys_shmat,		"shmat"		}, /* 1114 */
-	{ 1,	TI,	sys_shmdt,		"shmdt"		}, /* 1115 */
+	{ 3,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 1114 */
+	{ 1,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 1115 */
 	{ 3,	TI,	sys_shmctl,		"shmctl"	}, /* 1116 */
 	{ 3,	0,	sys_syslog,		"syslog"	}, /* 1117 */
 	{ 3,	0,	sys_setitimer,		"setitimer"	}, /* 1118 */
@@ -942,12 +942,12 @@
 	{ 4,	TD,	sys_pread,		"pread"		}, /* 1148 */
 	{ 4,	TD,	sys_pwrite,		"pwrite"	}, /* 1149 */
 	{ 1,	0,	printargs,		"_sysctl"	}, /* 1150 */
-	{ 6,	TD|TM,	sys_mmap,		"mmap"		}, /* 1151 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 1152 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"		}, /* 1151 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 1152 */
 	{ 2,	TM,	sys_mlock,		"mlock"		}, /* 1153 */
 	{ 1,	TM,	sys_mlockall,		"mlockall"	}, /* 1154 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 1155 */
-	{ 5,	TM,	sys_mremap,		"mremap"	}, /* 1156 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"	}, /* 1155 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 1156 */
 	{ 3,	TM,	sys_msync,		"msync"		}, /* 1157 */
 	{ 2,	TM,	sys_munlock,		"munlock"	}, /* 1158 */
 	{ 0,	TM,	sys_munlockall,		"munlockall"	}, /* 1159 */
@@ -963,7 +963,7 @@
 	{ 3,	0,	sys_nfsservctl,		"nfsservctl"	}, /* 1169 */
 	{ 5,	0,	sys_prctl,		"prctl"		}, /* 1170 */
 	{ 1,	0,	sys_getpagesize,	"getpagesize"	}, /* 1171 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap2"		}, /* 1172 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap2"		}, /* 1172 */
 	{ 5,	0,	printargs,		"pciconfig_read"}, /* 1173 */
 	{ 5,	0,	printargs,		"pciconfig_write"}, /* 1174 */
 	{ MA,	0,	printargs,		"perfmonctl"	}, /* 1175 */
@@ -1027,7 +1027,7 @@
 	{ 1,	0,	sys_set_tid_address,	"set_tid_address"}, /* 1233 */
 	{ 4,	TD,	sys_fadvise64,		"fadvise64"	}, /* 1234 */
 	{ 3,	TS,	sys_tgkill,		"tgkill"	}, /* 1235 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 1236 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 1236 */
 	{ 3,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 1237 */
 	{ 2,	0,	sys_io_setup,		"io_setup"	}, /* 1238 */
 	{ 1,	0,	sys_io_destroy,		"io_destroy"	}, /* 1239 */
diff --git a/linux/m68k/syscallent.h b/linux/m68k/syscallent.h
index adf9f5b..b227776 100644
--- a/linux/m68k/syscallent.h
+++ b/linux/m68k/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall" }, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -37,7 +37,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -71,7 +71,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	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 */
-	{ 1,	TD|TM,	sys_old_mmap,		"old_mmap"	}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 1,	TD|TM|SI,	sys_old_mmap,		"old_mmap"	}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -151,7 +151,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ 4,	0,	sys_cacheflush,		"cacheflush"	}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ 5,	0,	printargs,		"getpagesize"	}, /* 166 */
@@ -218,7 +218,7 @@
 	{ 5,	0,	sys_putpmsg,		"putpmsg"	}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 2,	0,	sys_getrlimit,		"getrlimit"	}, /* 191 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
 	{ 3,	TF,	sys_truncate64,		"truncate64"	}, /* 193 */
 	{ 3,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -273,12 +273,12 @@
 	{ 3,	0,	sys_io_submit,		"io_submit"	}, /* 244 */
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 245 */
 	{ 5,	TD,	sys_fadvise64,		"fadvise64"	}, /* 246 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 247 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 247 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 248 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 249 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 250 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 251 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 252 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"}, /* 252 */
 	{ 1,	0,	sys_set_tid_address,	"set_tid_address"}, /* 253 */
 	{ 3,	0,	sys_timer_create,	"timer_create"	}, /* 254 */
 	{ 4,	0,	sys_timer_settime,	"timer_settime"	}, /* 255 */
@@ -473,7 +473,7 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 438 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 439 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 440 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 441 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 442 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 441 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 442 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 443 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 444 */
diff --git a/linux/metag/syscallent.h b/linux/metag/syscallent.h
index 6216ac6..ac42cd2 100644
--- a/linux/metag/syscallent.h
+++ b/linux/metag/syscallent.h
@@ -91,8 +91,8 @@
 	{ 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 */
+	{ 1,	TP|SE,	sys_exit,			"exit"			}, /* 93 */
+	{ 1,	TP|SE,	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 */
@@ -194,8 +194,8 @@
 	{ 3,	TI,	sys_semop,			"semop"			}, /* 193 */
 	{ 3,	TI,	sys_shmget,			"shmget"		}, /* 194 */
 	{ 3,	TI,	sys_shmctl,			"shmctl"		}, /* 195 */
-	{ 3,	TI,	sys_shmat,			"shmat"			}, /* 196 */
-	{ 1,	TI,	sys_shmdt,			"shmdt"			}, /* 197 */
+	{ 3,	TI|TM|SI,	sys_shmat,			"shmat"			}, /* 196 */
+	{ 1,	TI|TM|SI,	sys_shmdt,			"shmdt"			}, /* 197 */
 	{ 3,	TN,	sys_socket,			"socket"		}, /* 198 */
 	{ 4,	TN,	sys_socketpair,			"socketpair"		}, /* 199 */
 	{ 3,	TN,	sys_bind,			"bind"			}, /* 200 */
@@ -212,19 +212,19 @@
 	{ 3,	TN,	sys_sendmsg,			"sendmsg"		}, /* 211 */
 	{ 3,	TN,	sys_recvmsg,			"recvmsg"		}, /* 212 */
 	{ 4,	TD,	sys_readahead,			"readahead"		}, /* 213 */
-	{ 1,	TM,	sys_brk,			"brk"			}, /* 214 */
-	{ 2,	TM,	sys_munmap,			"munmap"		}, /* 215 */
-	{ 5,	TM,	sys_mremap,			"mremap"		}, /* 216 */
+	{ 1,	TM|SI,	sys_brk,			"brk"			}, /* 214 */
+	{ 2,	TM|SI,	sys_munmap,			"munmap"		}, /* 215 */
+	{ 5,	TM|SI,	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,			"mmap2"			}, /* 222 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,			"execve"		}, /* 221 */
+	{ 6,	TD|TM|SI,	sys_mmap,			"mmap2"			}, /* 222 */
 	{ 6,	TD,	sys_fadvise64_64,		"fadvise64_64"		}, /* 223 */
 	{ 2,	TF,	sys_swapon,			"swapon"		}, /* 224 */
 	{ 1,	TF,	sys_swapoff,			"swapoff"		}, /* 225 */
-	{ 3,	TM,	sys_mprotect,			"mprotect"		}, /* 226 */
+	{ 3,	TM|SI,	sys_mprotect,			"mprotect"		}, /* 226 */
 	{ 3,	TM,	sys_msync,			"msync"			}, /* 227 */
 	{ 2,	TM,	sys_mlock,			"mlock"			}, /* 228 */
 	{ 2,	TM,	sys_munlock,			"munlock"		}, /* 229 */
@@ -232,7 +232,7 @@
 	{ 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 */
+	{ 5,	TM|SI,	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 */
diff --git a/linux/microblaze/syscallent.h b/linux/microblaze/syscallent.h
index 38f8bba..5c5be55 100644
--- a/linux/microblaze/syscallent.h
+++ b/linux/microblaze/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall" }, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -37,7 +37,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -71,7 +71,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	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|TM,	sys_mmap,		"old_mmap"	}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"old_mmap"	}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -151,7 +151,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ 3,	0,	sys_modify_ldt,		"modify_ldt"	}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ 5,	0,	sys_vm86,		"vm86"		}, /* 166 */
@@ -218,7 +218,7 @@
 	{ 5,	0,	sys_putpmsg,		"putpmsg"	}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 2,	0,	sys_getrlimit,		"getrlimit"	}, /* 191 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap2"		}, /* 192 */
 	{ 3,	TF,	sys_truncate64,		"truncate64"	}, /* 193 */
 	{ 3,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -278,12 +278,12 @@
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 249 */
 	{ 5,	TD,	sys_fadvise64,		"fadvise64"	}, /* 250 */
 	{ 0,	0,	NULL,			NULL		}, /* 251 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 252 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 252 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 253 */
 	{ 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,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 257 */
+	{ 5,	TM|SI,	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 */
@@ -361,9 +361,9 @@
 	{ 4,	TI,	sys_msgget,		"msgget"	}, /* 332 */
 	{ 4,	TI,	sys_msgrcv,		"msgrcv"	}, /* 333 */
 	{ 4,	TI,	sys_msgsnd,		"msgsnd"	}, /* 334 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 335 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 335 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 336 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 337 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 337 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 338 */
 	{ 4,	TD|TS,	printargs,		"signalfd4"	}, /* 339 */
 	{ 2,	TD,	printargs,		"eventfd2"	}, /* 340 */
diff --git a/linux/mips/syscallent-compat.h b/linux/mips/syscallent-compat.h
index 696108f..0902e40 100644
--- a/linux/mips/syscallent-compat.h
+++ b/linux/mips/syscallent-compat.h
@@ -113,9 +113,9 @@
 	{ 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,	TD|TM|SI,	printargs,		"svr4_mmap"	}, /*  0115 */
+	{ 0,	TM|SI,	printargs,		"svr4_mprotect"	}, /*  0116 */
+	{ 0,	TM|SI,	printargs,		"svr4_munmap"	}, /*  0117 */
 	{ 0,	0,	printargs,		"svr4_fpathconf"	}, /*  0118 */
 	{ 0,	0,	printargs,		"svr4_vfork"	}, /*  0119 */
 	{ 0,	0,	printargs,		"svr4_fchdir"	}, /*  0120 */
@@ -227,7 +227,7 @@
 	{ 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,	TM|SI,	printargs,		"sysv_brk"	}, /* 1017 */
 	{ 0,	0,	printargs,		"sysv_stat"	}, /* 1018 */
 	{ 0,	0,	printargs,		"sysv_lseek"	}, /* 1019 */
 	{ 0,	0,	printargs,		"sysv_getpid"	}, /* 1020 */
@@ -344,9 +344,9 @@
 	{ 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,	TD|TM|SI,	printargs,		"sysv_mmap"	}, /* 1134 */
+	{ 0,	TM|SI,	printargs,		"sysv_munmap"	}, /* 1135 */
+	{ 0,	TM|SI,	printargs,		"sysv_mprotect"	}, /* 1136 */
 	{ 0,	TM,	printargs,		"sysv_msync"	}, /* 1137 */
 	{ 0,	TM,	printargs,		"sysv_madvise"	}, /* 1138 */
 	{ 0,	0,	printargs,		"sysv_pagelock"	}, /* 1139 */
@@ -395,7 +395,7 @@
 	{ 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,	TD|TM|SI,	printargs,		"sysv_mmap64"	}, /* 1185 */
 	{ 0,	0,	printargs,		"sysv_dmi"	}, /* 1186 */
 	{ 0,	0,	printargs,		"sysv_pread"	}, /* 1187 */
 	{ 0,	0,	printargs,		"sysv_pwrite"	}, /* 1188 */
@@ -467,16 +467,16 @@
 	{ 0,	0,	printargs,		"bsd43_fstat"	}, /* 2062 */
 	{ 0,	0,	NULL,			NULL		}, /* 2063 */
 	{ 0,	0,	printargs,		"bsd43_getpagesize"	}, /* 2064 */
-	{ 0,	TM,	printargs,		"bsd43_mremap"	}, /* 2065 */
+	{ 0,	TM|SI,	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,	TM|SI,	printargs,		"bsd43_sbrk"	}, /* 2069 */
 	{ 0,	0,	printargs,		"bsd43_sstk"	}, /* 2070 */
-	{ 0,	TD|TM,	printargs,		"bsd43_mmap"	}, /* 2071 */
+	{ 0,	TD|TM|SI,	printargs,		"bsd43_mmap"	}, /* 2071 */
 	{ 0,	0,	printargs,		"bsd43_vadvise"	}, /* 2072 */
-	{ 0,	TM,	printargs,		"bsd43_munmap"	}, /* 2073 */
-	{ 0,	TM,	printargs,		"bsd43_mprotect"	}, /* 2074 */
+	{ 0,	TM|SI,	printargs,		"bsd43_munmap"	}, /* 2073 */
+	{ 0,	TM|SI,	printargs,		"bsd43_mprotect"	}, /* 2074 */
 	{ 0,	TM,	printargs,		"bsd43_madvise"	}, /* 2075 */
 	{ 0,	0,	printargs,		"bsd43_vhangup"	}, /* 2076 */
 	{ 0,	0,	printargs,		"bsd43_vlimit"	}, /* 2077 */
@@ -731,9 +731,9 @@
 	{ 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,	TD|TM|SI,	printargs,		"posix_SGI_mmap"	}, /* 3134 */
+	{ 0,	TM|SI,	printargs,		"posix_SGI_munmap"	}, /* 3135 */
+	{ 0,	TM|SI,	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 */
@@ -752,8 +752,8 @@
 	{ 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,	TD|TM|SI,	printargs,		"posix_mmap"	}, /* 3155 */
+	{ 0,	TM|SI,	printargs,		"posix_munmap"	}, /* 3156 */
 	{ 0,	TM,	printargs,		"posix_madvise"	}, /* 3157 */
 	{ 0,	0,	printargs,		"posix_BSD_getpagesize"	}, /* 3158 */
 	{ 0,	0,	printargs,		"posix_setreuid"	}, /* 3159 */
diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h
index 69453b1..4b0e6bc 100644
--- a/linux/mips/syscallent-n32.h
+++ b/linux/mips/syscallent-n32.h
@@ -9,10 +9,10 @@
 	{ 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 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"		}, /* 6009 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"	}, /* 6010 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 6011 */
+	{ 1,	TM|SI,	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 */
@@ -24,12 +24,12 @@
 	{ 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 */
+	{ 5,	TM|SI,	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|TM|SI,	sys_shmat,		"shmat"		}, /* 6029 */
 	{ 3,	TI,	sys_shmctl,		"shmctl"	}, /* 6030 */
 	{ 1,	TD,	sys_dup,		"dup"		}, /* 6031 */
 	{ 2,	TD,	sys_dup2,		"dup2"		}, /* 6032 */
@@ -55,17 +55,17 @@
 	{ 4,	TN,	sys_socketpair,		"socketpair"	}, /* 6052 */
 	{ 5,	TN,	sys_setsockopt,		"setsockopt"	}, /* 6053 */
 	{ 5,	TN,	sys_getsockopt,		"getsockopt"	}, /* 6054 */
-	{ 2,	TP,	sys_clone,		"clone"		}, /* 6055 */
+	{ 5,	TP,	sys_clone,		"clone"		}, /* 6055 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 6056 */
-	{ 3,	TF|TP,	sys_execve,		"execve"	}, /* 6057 */
-	{ 1,	TP,	sys_exit,		"exit"		}, /* 6058 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 6057 */
+	{ 1,	TP|SE,	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 */
+	{ 1,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 6065 */
 	{ 2,	TI,	sys_msgget,		"msgget"	}, /* 6066 */
 	{ 4,	TI,	sys_msgsnd,		"msgsnd"	}, /* 6067 */
 	{ 5,	TI,	sys_msgrcv,		"msgrcv"	}, /* 6068 */
@@ -205,12 +205,12 @@
 	{ 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 */
+	{ 1,	TP|SE,	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 */
+	{ 5,	TM|SI,	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 */
@@ -323,10 +323,10 @@
 	{ 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,	TD|TM|SI,	printargs,		"n32_mmap"		}, /* 6009 */
+	{ 0,	TM|SI,	printargs,		"n32_mprotect"		}, /* 6010 */
+	{ 0,	TM|SI,	printargs,		"n32_munmap"		}, /* 6011 */
+	{ 0,	TM|SI,	printargs,		"n32_brk"		}, /* 6012 */
 	{ 0,	0,	printargs,		"n32_rt_sigaction"	}, /* 6013 */
 	{ 0,	0,	printargs,		"n32_rt_sigprocmask"	}, /* 6014 */
 	{ 0,	0,	printargs,		"n32_ioctl"		}, /* 6015 */
@@ -338,12 +338,12 @@
 	{ 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|SI,	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,	TI|TM|SI,	printargs,		"n32_shmat"		}, /* 6029 */
 	{ 0,	0,	printargs,		"n32_shmctl"		}, /* 6030 */
 	{ 0,	0,	printargs,		"n32_dup"		}, /* 6031 */
 	{ 0,	0,	printargs,		"n32_dup2"		}, /* 6032 */
@@ -369,17 +369,17 @@
 	{ 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 */
+	{ 5,	TP,	printargs,		"n32_clone"		}, /* 6055 */
+	{ 0,	TP,	printargs,		"n32_fork"		}, /* 6056 */
+	{ 3,	TF|TP|SE|SI,	printargs,		"n32_execve"		}, /* 6057 */
+	{ 1,	TP|SE,	printargs,		"n32_exit"		}, /* 6058 */
+	{ 4,	TP,	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,	TI|TM|SI,	printargs,		"n32_shmdt"		}, /* 6065 */
 	{ 0,	0,	printargs,		"n32_msgget"		}, /* 6066 */
 	{ 0,	0,	printargs,		"n32_msgsnd"		}, /* 6067 */
 	{ 0,	0,	printargs,		"n32_msgrcv"		}, /* 6068 */
@@ -519,12 +519,12 @@
 	{ 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 */
+	{ 1,	TP|SE,	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,	TM|SI,	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 */
diff --git a/linux/mips/syscallent-n64.h b/linux/mips/syscallent-n64.h
index dd5da40..524f280 100644
--- a/linux/mips/syscallent-n64.h
+++ b/linux/mips/syscallent-n64.h
@@ -9,10 +9,10 @@
 	{ 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 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"		}, /* 5009 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"	}, /* 5010 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 5011 */
+	{ 1,	TM|SI,	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 */
@@ -24,12 +24,12 @@
 	{ 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 */
+	{ 5,	TM|SI,	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|TM|SI,	sys_shmat,		"shmat"		}, /* 5029 */
 	{ 3,	TI,	sys_shmctl,		"shmctl"	}, /* 5030 */
 	{ 1,	TD,	sys_dup,		"dup"		}, /* 5031 */
 	{ 2,	TD,	sys_dup2,		"dup2"		}, /* 5032 */
@@ -55,17 +55,17 @@
 	{ 4,	TN,	sys_socketpair,		"socketpair"	}, /* 5052 */
 	{ 5,	TN,	sys_setsockopt,		"setsockopt"	}, /* 5053 */
 	{ 5,	TN,	sys_getsockopt,		"getsockopt"	}, /* 5054 */
-	{ 2,	TP,	sys_clone,		"clone"		}, /* 5055 */
+	{ 5,	TP,	sys_clone,		"clone"		}, /* 5055 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 5056 */
-	{ 3,	TF|TP,	sys_execve,		"execve"	}, /* 5057 */
-	{ 1,	TP,	sys_exit,		"exit"		}, /* 5058 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 5057 */
+	{ 1,	TP|SE,	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 */
+	{ 1,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 5065 */
 	{ 2,	TI,	sys_msgget,		"msgget"	}, /* 5066 */
 	{ 4,	TI,	sys_msgsnd,		"msgsnd"	}, /* 5067 */
 	{ 5,	TI,	sys_msgrcv,		"msgrcv"	}, /* 5068 */
@@ -205,12 +205,12 @@
 	{ 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 */
+	{ 1,	TP|SE,	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 */
+	{ 5,	TM|SI,	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 */
@@ -318,10 +318,10 @@
 	{ 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,	TD|TM|SI,	printargs,		"n64_mmap"		}, /* 5009 */
+	{ 0,	TM|SI,	printargs,		"n64_mprotect"		}, /* 5010 */
+	{ 0,	TM|SI,	printargs,		"n64_munmap"		}, /* 5011 */
+	{ 0,	TM|SI,	printargs,		"n64_brk"		}, /* 5012 */
 	{ 0,	0,	printargs,		"n64_rt_sigaction"	}, /* 5013 */
 	{ 0,	0,	printargs,		"n64_rt_sigprocmask"	}, /* 5014 */
 	{ 0,	0,	printargs,		"n64_ioctl"		}, /* 5015 */
@@ -333,12 +333,12 @@
 	{ 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|SI,	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,	TI|TM|SI,	printargs,		"n64_shmat"		}, /* 5029 */
 	{ 0,	0,	printargs,		"n64_shmctl"		}, /* 5030 */
 	{ 0,	0,	printargs,		"n64_dup"		}, /* 5031 */
 	{ 0,	0,	printargs,		"n64_dup2"		}, /* 5032 */
@@ -364,17 +364,17 @@
 	{ 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 */
+	{ 5,	TP,	printargs,		"n64_clone"		}, /* 5055 */
+	{ 0,	TP,	printargs,		"n64_fork"		}, /* 5056 */
+	{ 3,	TF|TP|SE|SI,	printargs,		"n64_execve"		}, /* 5057 */
+	{ 1,	TP|SE,	printargs,		"n64_exit"		}, /* 5058 */
+	{ 4,	TP,	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,	TI|TM|SI,	printargs,		"n64_shmdt"		}, /* 5065 */
 	{ 0,	0,	printargs,		"n64_msgget"		}, /* 5066 */
 	{ 0,	0,	printargs,		"n64_msgsnd"		}, /* 5067 */
 	{ 0,	0,	printargs,		"n64_msgrcv"		}, /* 5068 */
@@ -514,12 +514,12 @@
 	{ 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 */
+	{ 1,	TP|SE,	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,	TM|SI,	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 */
@@ -546,7 +546,7 @@
 	{ 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 */
+	{ 5,	TP,	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 */
@@ -571,7 +571,7 @@
 	{ 0,	0,	printargs,		"n64_faccessat"		}, /* 5259 */
 	{ 0,	0,	printargs,		"n64_pselect6"		}, /* 5260 */
 	{ 0,	0,	printargs,		"n64_ppoll"		}, /* 5261 */
-	{ 0,	0,	printargs,		"n64_unshare"		}, /* 5262 */
+	{ 1,	TP,	printargs,		"n64_unshare"		}, /* 5262 */
 	{ 0,	0,	printargs,		"n64_splice"		}, /* 5263 */
 	{ 0,	0,	printargs,		"n64_sync_file_range"	}, /* 5264 */
 	{ 0,	0,	printargs,		"n64_tee"		}, /* 5265 */
@@ -600,7 +600,7 @@
 	{ 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 */
+	{ 4,	TP|TS,	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 */
diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h
index 859c618..a371fb1 100644
--- a/linux/mips/syscallent-o32.h
+++ b/linux/mips/syscallent-o32.h
@@ -1,7 +1,7 @@
 #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 */
+	{ 1,	TP|SE,	sys_exit,		"exit"		}, /* 4001 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 4002 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 4003 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4004 */
@@ -11,7 +11,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 4011 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 4012 */
 	{ 1,	0,	sys_time,		"time"		}, /* 4013 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 4014 */
@@ -45,7 +45,7 @@
 	{ 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,	TM|SI,	sys_brk,		"brk"		}, /* 4045 */
 	{ 1,	0,	sys_setgid,		"setgid"	}, /* 4046 */
 	{ 0,	NF,	sys_getgid,		"getgid"	}, /* 4047 */
 	{ 1,	TS,	sys_signal,		"signal"	}, /* 4048 */
@@ -90,8 +90,8 @@
 	{ 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 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"		}, /* 4090 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 4091 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 4092 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 4093 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 4094 */
@@ -125,7 +125,7 @@
 	{ 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,	TM|SI,	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 */
@@ -167,7 +167,7 @@
 	{ 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 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 4167 */
 	{ 3,	TN,	sys_accept,		"accept"	}, /* 4168 */
 	{ 3,	TN,	sys_bind,		"bind"		}, /* 4169 */
 	{ 3,	TN,	sys_connect,		"connect"	}, /* 4170 */
@@ -210,7 +210,7 @@
 	{ 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 */
+	{ 6,	TD|TM|SI,	sys_mmap_4koff,		"mmap2"		}, /* 4210 */
 	{ 4,	TF,	sys_truncate64,		"truncate64"	}, /* 4211 */
 	{ 4,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 4212 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 4213 */
@@ -246,12 +246,12 @@
 	{ 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 */
+	{ 1,	TP|SE,	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 */
+	{ 5,	TM|SI,	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 */
@@ -351,17 +351,17 @@
 	{ 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 */
+	{ 1,	TP|SE,	printargs,		"o32_exit"		}, /* 4001 */
+	{ 0,	TP,	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 */
+	{ 3,	TP,	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 */
+	{ 3,	TF|TP|SE|SI,	printargs,		"o32_execve"	}, /* 4011 */
 	{ 0,	0,	printargs,		"o32_chdir"		}, /* 4012 */
 	{ 0,	0,	printargs,		"o32_time"		}, /* 4013 */
 	{ 0,	0,	printargs,		"o32_mknod"		}, /* 4014 */
@@ -395,7 +395,7 @@
 	{ 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,	TM|SI,	printargs,		"o32_brk"		}, /* 4045 */
 	{ 0,	0,	printargs,		"o32_setgid"	}, /* 4046 */
 	{ 0,	0,	printargs,		"o32_getgid"	}, /* 4047 */
 	{ 0,	0,	printargs,		"o32_signal"	}, /* 4048 */
@@ -440,8 +440,8 @@
 	{ 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,	TD|TM|SI,	printargs,		"o32_mmap"	}, /* 4090 */
+	{ 0,	TM|SI,	printargs,		"o32_munmap"	}, /* 4091 */
 	{ 0,	0,	printargs,		"o32_truncate"	}, /* 4092 */
 	{ 0,	0,	printargs,		"o32_ftruncate"	}, /* 4093 */
 	{ 0,	0,	printargs,		"o32_fchmod"	}, /* 4094 */
@@ -464,18 +464,18 @@
 	{ 0,	0,	printargs,		"o32_vhangup"	}, /* 4111 */
 	{ 0,	0,	printargs,		"o32_idle"		}, /* 4112 */
 	{ 0,	0,	printargs,		"o32_vm86"		}, /* 4113 */
-	{ 0,	0,	printargs,		"o32_wait4"		}, /* 4114 */
+	{ 4,	TP,	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 */
+	{ 5,	TP,	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,	TM|SI,	printargs,		"o32_mprotect"	}, /* 4125 */
 	{ 0,	0,	printargs,		"o32_sigprocmask"	}, /* 4126 */
 	{ 0,	0,	printargs,		"o32_create_module"	}, /* 4127 */
 	{ 0,	0,	printargs,		"o32_init_module"	}, /* 4128 */
@@ -517,7 +517,7 @@
 	{ 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,	TM|SI,	printargs,		"o32_mremap"	}, /* 4167 */
 	{ 0,	0,	printargs,		"o32_accept"	}, /* 4168 */
 	{ 0,	0,	printargs,		"o32_bind"		}, /* 4169 */
 	{ 0,	0,	printargs,		"o32_connect"	}, /* 4170 */
@@ -560,7 +560,7 @@
 	{ 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 */
+	{ 6,	TD|TM|SI,	printargs,		"o32_mmap2"	}, /* 4210 */
 	{ 0,	0,	printargs,		"o32_truncate64"	}, /* 4211 */
 	{ 0,	0,	printargs,		"o32_ftruncate64"	}, /* 4212 */
 	{ 0,	0,	printargs,		"o32_stat64"	}, /* 4213 */
@@ -596,12 +596,12 @@
 	{ 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 */
+	{ 1,	TP|SE,	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 */
+	{ 5,	TM|SI,	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 */
diff --git a/linux/or1k/syscallent.h b/linux/or1k/syscallent.h
index a45c52f..c67bb5c 100644
--- a/linux/or1k/syscallent.h
+++ b/linux/or1k/syscallent.h
@@ -91,8 +91,8 @@
 	{ 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 */
+	{ 1,	TP|SE,	sys_exit,			"exit"			}, /* 93 */
+	{ 1,	TP|SE,	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 */
@@ -194,8 +194,8 @@
 	{ 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 */
+	{ 4,	TI|TM|SI,	sys_shmat,			"shmat"			}, /* 196 */
+	{ 4,	TI|TM|SI,	sys_shmdt,			"shmdt"			}, /* 197 */
 	{ 3,	TN,	sys_socket,			"socket"		}, /* 198 */
 	{ 4,	TN,	sys_socketpair,			"socketpair"		}, /* 199 */
 	{ 3,	TN,	sys_bind,			"bind"			}, /* 200 */
@@ -212,19 +212,19 @@
 	{ 3,	TN,	sys_sendmsg,			"sendmsg"		}, /* 211 */
 	{ 3,	TN,	sys_recvmsg,			"recvmsg"		}, /* 212 */
 	{ 4,	TD,	sys_readahead,			"readahead"		}, /* 213 */
-	{ 1,	TM,	sys_brk,			"brk"			}, /* 214 */
-	{ 2,	TM,	sys_munmap,			"munmap"		}, /* 215 */
-	{ 5,	TM,	sys_mremap,			"mremap"		}, /* 216 */
+	{ 1,	TM|SI,	sys_brk,			"brk"			}, /* 214 */
+	{ 2,	TM|SI,	sys_munmap,			"munmap"		}, /* 215 */
+	{ 5,	TM|SI,	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_pgoff,			"mmap2"			}, /* 222 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,			"execve"		}, /* 221 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,			"mmap2"			}, /* 222 */
 	{ 6,	TD,	sys_fadvise64_64,		"fadvise64_64"		}, /* 223 */
 	{ 2,	TF,	sys_swapon,			"swapon"		}, /* 224 */
 	{ 1,	TF,	sys_swapoff,			"swapoff"		}, /* 225 */
-	{ 3,	TM,	sys_mprotect,			"mprotect"		}, /* 226 */
+	{ 3,	TM|SI,	sys_mprotect,			"mprotect"		}, /* 226 */
 	{ 3,	TM,	sys_msync,			"msync"			}, /* 227 */
 	{ 2,	TM,	sys_mlock,			"mlock"			}, /* 228 */
 	{ 2,	TM,	sys_munlock,			"munlock"		}, /* 229 */
@@ -232,7 +232,7 @@
 	{ 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 */
+	{ 5,	TM|SI,	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 */
diff --git a/linux/powerpc/syscallent.h b/linux/powerpc/syscallent.h
index 8a50429..7d7825e 100644
--- a/linux/powerpc/syscallent.h
+++ b/linux/powerpc/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall"	}, /* 0 */
-	{ 1,	TP,	sys_exit,		"exit"			}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"exit"			}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"			}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"			}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"			}, /* 4 */
@@ -37,7 +37,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"		}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"			}, /* 12 */
 	{ 1,	0,	sys_time,		"time"			}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"			}, /* 14 */
@@ -71,7 +71,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"			}, /* 42 */
 	{ 1,	0,	sys_times,		"times"			}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"			}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"			}, /* 45 */
+	{ 1,	TM|SI,	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|TM,	sys_mmap,		"mmap"			}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"		}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"			}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"		}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"		}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"		}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"		}, /* 94 */
@@ -151,7 +151,7 @@
 	{ 1,	0,	sys_uname,		"uname"			}, /* 122 */
 	{ 5,	0,	printargs,		"modify_ldt"		}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"		}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"		}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -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,	TM,	sys_mremap,		"mremap"		}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"		}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"		}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"		}, /* 165 */
 	{ 5,	0,	sys_query_module,	"query_module"		}, /* 166 */
@@ -218,7 +218,7 @@
 	{ 0,	TP,	sys_vfork,		"vfork"			}, /* 189 */
 	{ 2,	0,	sys_getrlimit,		"getrlimit"		}, /* 190 */
 	{ 5,	TD,	sys_readahead,		"readahead"		}, /* 190 */
-	{ 6,	TD|TM,	sys_mmap_4koff,		"mmap2"			}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_4koff,		"mmap2"			}, /* 192 */
 	{ 4,	TF,	sys_truncate64,		"truncate64"		}, /* 193 */
 	{ 4,	TD,	sys_ftruncate64,	"ftruncate64"		}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"		}, /* 195 */
@@ -260,12 +260,12 @@
 	{ 3,	0,	sys_io_cancel,		"io_cancel"		}, /* 231 */
 	{ 1,	0,	sys_set_tid_address,	"set_tid_address"	}, /* 232 */
 	{ 6,	TD,	sys_fadvise64,		"fadvise64"		}, /* 233 */
-	{ 1,	TP,	sys_exit,		"exit_group"		}, /* 234 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"		}, /* 234 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"	}, /* 235 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"		}, /* 236 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"		}, /* 237 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"		}, /* 238 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"	}, /* 239 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"	}, /* 239 */
 	{ 3,	0,	sys_timer_create,	"timer_create"		}, /* 240 */
 	{ 4,	0,	sys_timer_settime,	"timer_settime"		}, /* 241 */
 	{ 2,	0,	sys_timer_gettime,	"timer_gettime"		}, /* 242 */
@@ -473,8 +473,8 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 438 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 439 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 440 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 441 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 442 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 441 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 442 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 443 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 444 */
 	{ 5,	0,	NULL,			NULL		}, /* 445 */
diff --git a/linux/s390/syscallent.h b/linux/s390/syscallent.h
index 2a0bc21..108e4c0 100644
--- a/linux/s390/syscallent.h
+++ b/linux/s390/syscallent.h
@@ -29,7 +29,7 @@
  */
 
 	{ 0,	0,	sys_setup,		"setup"		}, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -39,7 +39,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -73,7 +73,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ MA,	0,	NULL,			NULL		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	sys_brk,		"brk"		}, /* 45 */
 	{ MA,	0,	NULL,			NULL		}, /* 46 */
 	{ MA,	0,	NULL,			NULL		}, /* 47 */
 	{ 3,	TS,	sys_signal,		"signal"	}, /* 48 */
@@ -118,8 +118,8 @@
 	{ 2,	TF,	sys_swapon,		"swapon"	}, /* 87 */
 	{ 4,	0,	sys_reboot,		"reboot"	}, /* 88 */
 	{ 3,	TD,	sys_readdir,		"readdir"	}, /* 89 */
-	{ 6,	TD|TM,	sys_old_mmap,		"mmap"		}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_old_mmap,		"mmap"		}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -153,7 +153,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ MA,	0,	NULL,			NULL		}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -191,7 +191,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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ MA,	0,	NULL,			NULL		}, /* 166 */
@@ -220,7 +220,7 @@
 	{ 5,	0,	sys_putpmsg,		"putpmsg"	}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 2,	0,	sys_getrlimit,		"getrlimit"	}, /* 191 */
-	{ 1,	TD|TM,	sys_old_mmap_pgoff,	"mmap2"		}, /* 192 */
+	{ 1,	TD|TM|SI,	sys_old_mmap_pgoff,	"mmap2"		}, /* 192 */
 	{ 3,	TF,	sys_truncate64,		"truncate64"	}, /* 193 */
 	{ 3,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -276,7 +276,7 @@
 	{ 5,	0,	sys_io_getevents,	"io_getevents"	}, /* 245 */
 	{ 3,	0,	sys_io_submit,		"io_submit"	}, /* 246 */
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 247 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 248 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 248 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 249 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 250 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 251 */
@@ -295,7 +295,7 @@
 	{ 5,	TD,	printargs,		"fadvise64_64"	}, /* 264 */
 	{ 3,	TF,	sys_statfs64,		"statfs64"	}, /* 265 */
 	{ 3,	TD,	sys_fstatfs64,		"fstatfs64"	}, /* 266 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 267 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"}, /* 267 */
 	{ 6,	TM,	sys_mbind,		"mbind"		}, /* 268 */
 	{ 5,	TM,	sys_get_mempolicy,	"get_mempolicy"	}, /* 269 */
 	{ 3,	TM,	sys_set_mempolicy,	"set_mempolicy"	}, /* 270 */
@@ -475,7 +475,7 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 438 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 439 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 440 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 441 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 442 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 441 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 442 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 443 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 444 */
diff --git a/linux/s390x/syscallent.h b/linux/s390x/syscallent.h
index 66face5..3b93a80 100644
--- a/linux/s390x/syscallent.h
+++ b/linux/s390x/syscallent.h
@@ -28,7 +28,7 @@
  */
 
 	{ 0,	0,	sys_setup,		"setup"		}, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -38,7 +38,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ MA,	0,	NULL,			NULL		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -72,7 +72,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ MA,	0,	NULL,			NULL		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	sys_brk,		"brk"		}, /* 45 */
 	{ MA,	0,	NULL,			NULL		}, /* 46 */
 	{ MA,	0,	NULL,			NULL		}, /* 47 */
 	{ 3,	TS,	sys_signal,		"signal"	}, /* 48 */
@@ -117,8 +117,8 @@
 	{ 2,	TF,	sys_swapon,		"swapon"	}, /* 87 */
 	{ 4,	0,	sys_reboot,		"reboot"	}, /* 88 */
 	{ MA,	0,	NULL,			NULL		}, /* 89 */
-	{ 1,	TD|TM,	sys_old_mmap,		"mmap"		}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 1,	TD|TM|SI,	sys_old_mmap,		"mmap"		}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -152,7 +152,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ MA,	0,	NULL,			NULL		}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -190,7 +190,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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ MA,	0,	NULL,			NULL		}, /* 164 */
 	{ MA,	0,	NULL,			NULL		}, /* 165 */
 	{ MA,	0,	NULL,			NULL		}, /* 166 */
@@ -275,7 +275,7 @@
 	{ 5,	0,	sys_io_getevents,	"io_getevents"	}, /* 245 */
 	{ 3,	0,	sys_io_submit,		"io_submit"	}, /* 246 */
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 247 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 248 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 248 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 249 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 250 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 251 */
@@ -294,7 +294,7 @@
 	{ 4,	TD,	sys_fadvise64,		"fadvise64_64"	}, /* 264 */
 	{ 3,	TF,	sys_statfs64,		"statfs64"	}, /* 265 */
 	{ 3,	TD,	sys_fstatfs64,		"fstatfs64"	}, /* 266 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 267 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"}, /* 267 */
 	{ 6,	TM,	sys_mbind,		"mbind"		}, /* 268 */
 	{ 5,	TM,	sys_get_mempolicy,	"get_mempolicy"	}, /* 269 */
 	{ 3,	TM,	sys_set_mempolicy,	"set_mempolicy"	}, /* 270 */
@@ -474,7 +474,7 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 438 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 439 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 440 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 441 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 442 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 441 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 442 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 443 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 444 */
diff --git a/linux/sh/syscallent.h b/linux/sh/syscallent.h
index ed5812d..75c15f7 100644
--- a/linux/sh/syscallent.h
+++ b/linux/sh/syscallent.h
@@ -29,7 +29,7 @@
  */
 
 	{ 0,	0,	sys_restart_syscall,	"restart_syscall"}, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -39,7 +39,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -73,7 +73,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	sys_brk,		"brk"		}, /* 45 */
 	{ 1,	0,	sys_setgid,		"setgid"	}, /* 46 */
 	{ 0,	NF,	sys_getgid,		"getgid"	}, /* 47 */
 	{ 3,	TS,	sys_signal,		"signal"	}, /* 48 */
@@ -118,8 +118,8 @@
 	{ 2,	TF,	sys_swapon,		"swapon"	}, /* 87 */
 	{ 4,	0,	sys_reboot,		"reboot"	}, /* 88 */
 	{ 3,	TD,	sys_readdir,		"readdir"	}, /* 89 */
-	{ 6,	TD|TM,	sys_mmap,		"old_mmap"	}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"old_mmap"	}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -153,7 +153,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ 3,	0,	sys_cacheflush,		"cacheflush"	}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -191,7 +191,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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ 5,	0,	sys_vm86,		"vm86"		}, /* 166 */
@@ -221,7 +221,7 @@
 	{ 5,	0,	NULL,			NULL		}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 5,	0,	printargs,		"getrlimit"	}, /* 191 */
-	{ 6,	TD|TM,	sys_mmap_4koff,		"mmap2"		}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_4koff,		"mmap2"		}, /* 192 */
 	{ 3,	TF,	sys_truncate64,		"truncate64"	}, /* 193 */
 	{ 3,	TD,	sys_ftruncate64,	"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -282,12 +282,12 @@
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 249 */
 	{ 5,	TD,	sys_fadvise64,		"fadvise64"	}, /* 250 */
 	{ 0,	0,	NULL,			NULL		}, /* 251 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 252 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 252 */
 	{ 4,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 253 */
 	{ 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,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 257 */
+	{ 5,	TM|SI,	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 */
@@ -478,7 +478,7 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 438 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 439 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 440 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 441 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 442 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 441 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 442 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 443 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 444 */
diff --git a/linux/sh64/syscallent.h b/linux/sh64/syscallent.h
index e970147..5db52e2 100644
--- a/linux/sh64/syscallent.h
+++ b/linux/sh64/syscallent.h
@@ -27,7 +27,7 @@
  */
 
 	{ 0,	0,	sys_setup,		"setup"		}, /* 0 */
-	{ 1,	TP,	sys_exit,		"_exit"		}, /* 1 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		}, /* 1 */
 	{ 0,	TP,	sys_fork,		"fork"		}, /* 2 */
 	{ 3,	TD,	sys_read,		"read"		}, /* 3 */
 	{ 3,	TD,	sys_write,		"write"		}, /* 4 */
@@ -37,7 +37,7 @@
 	{ 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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 11 */
 	{ 1,	TF,	sys_chdir,		"chdir"		}, /* 12 */
 	{ 1,	0,	sys_time,		"time"		}, /* 13 */
 	{ 3,	TF,	sys_mknod,		"mknod"		}, /* 14 */
@@ -71,7 +71,7 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		}, /* 42 */
 	{ 1,	0,	sys_times,		"times"		}, /* 43 */
 	{ 0,	0,	sys_prof,		"prof"		}, /* 44 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 45 */
+	{ 1,	TM|SI,	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|TM,	sys_mmap,		"old_mmap"	}, /* 90 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 91 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"old_mmap"	}, /* 90 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 91 */
 	{ 2,	TF,	sys_truncate,		"truncate"	}, /* 92 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate"	}, /* 93 */
 	{ 2,	TD,	sys_fchmod,		"fchmod"	}, /* 94 */
@@ -151,7 +151,7 @@
 	{ 1,	0,	sys_uname,		"uname"		}, /* 122 */
 	{ 3,	0,	printargs,		"cacheflush"	}, /* 123 */
 	{ 1,	0,	sys_adjtimex,		"adjtimex"	}, /* 124 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 125 */
+	{ 3,	TM|SI,	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 */
@@ -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,	TM,	sys_mremap,		"mremap"	}, /* 163 */
+	{ 5,	TM|SI,	sys_mremap,		"mremap"	}, /* 163 */
 	{ 3,	0,	sys_setresuid,		"setresuid"	}, /* 164 */
 	{ 3,	0,	sys_getresuid,		"getresuid"	}, /* 165 */
 	{ 5,	0,	NULL,			NULL		}, /* 166 */
@@ -218,7 +218,7 @@
 	{ 5,	0,	NULL,			NULL		}, /* 189 */
 	{ 0,	TP,	sys_vfork,		"vfork"		}, /* 190 */
 	{ 2,	0,	printargs,		"getrlimit"	}, /* 191 */
-	{ 6,	TD|TM,	sys_mmap_4koff,		"mmap2"		}, /* 192 */
+	{ 6,	TD|TM|SI,	sys_mmap_4koff,		"mmap2"		}, /* 192 */
 	{ 2,	TF,	sys_truncate,		"truncate64"	}, /* 193 */
 	{ 2,	TD,	sys_ftruncate,		"ftruncate64"	}, /* 194 */
 	{ 2,	TF,	sys_stat64,		"stat64"	}, /* 195 */
@@ -270,8 +270,8 @@
 	{ 4,	TI,	sys_msgrcv,		"msgrcv"	}, /* 241 */
 	{ 4,	TI,	sys_msgget,		"msgget"	}, /* 242 */
 	{ 4,	TI,	sys_msgctl,		"msgctl"	}, /* 243 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 244 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 245 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 244 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 245 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 246 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 247 */
 	{ 3,	TD,	sys_getdents64,		"getdents64"	}, /* 248 */
@@ -306,12 +306,12 @@
 	{ 3,	0,	sys_io_cancel,		"io_cancel"	}, /* 277 */
 	{ 4,	TD,	sys_fadvise64,		"fadvise64"	}, /* 278 */
 	{ 5,	0,	NULL,			NULL		}, /* 279 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 280 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 280 */
 	{ 3,	0,	sys_lookup_dcookie,	"lookup_dcookie"}, /* 281 */
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 282 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 283 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 284 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 285 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"}, /* 285 */
 	{ 1,	0,	sys_set_tid_address,	"set_tid_address"}, /* 286 */
 	{ 3,	0,	sys_timer_create,	"timer_create"	}, /* 287 */
 	{ 4,	0,	sys_timer_settime,	"timer_settime"	}, /* 288 */
diff --git a/linux/sparc/syscallent.h b/linux/sparc/syscallent.h
index d5df8e1..0c5ab46 100644
--- a/linux/sparc/syscallent.h
+++ b/linux/sparc/syscallent.h
@@ -1,5 +1,5 @@
 	{ 0,	0,	sys_restart_syscall, "restart_syscall" },/* 0 */
-	{ 1,	TP,	sys_exit,	"exit" },		/* 1 */
+	{ 1,	TP|SE,	sys_exit,	"exit" },		/* 1 */
 	{ 0,	TP,	sys_fork,	"fork" },		/* 2 */
 	{ 3,	TD,	sys_read,	"read" },		/* 3 */
 	{ 3,	TD,	sys_write,	"write" },		/* 4 */
@@ -9,13 +9,13 @@
 	{ 2,	TD|TF,	sys_creat,	"creat" },		/* 8 */
 	{ 2,	TF,	sys_link,	"link" },		/* 9 */
 	{ 1,	TF,	sys_unlink,	"unlink" },		/* 10 */
-	{ 2,    TF|TP,	sys_execv,	"execv" },		/* 11 */
+	{ 2,    TF|TP|SE|SI,	sys_execv,	"execv" },		/* 11 */
 	{ 1,	TF,	sys_chdir,	"chdir" },		/* 12 */
 	{ 3,    TF,     sys_chown,      "chown"},		/* 13 */
 	{ 3,	TF,	sys_mknod,	"mknod" },		/* 14 */
 	{ 2,	TF,	sys_chmod,	"chmod" },		/* 15 */
 	{ 3,	TF,	sys_chown,	"lchown" },		/* 16 */
-	{ 1,	TM,	sys_brk,	"brk" },		/* 17 */
+	{ 1,	TM|SI,	sys_brk,	"brk" },		/* 17 */
 	{ 4,	0,	printargs,	"perfctr" },		/* 18 */
 	{ 3,	TD,	sys_lseek,	"lseek" },		/* 19 */
 	{ 0,	0,	sys_getpid,	"getpid" },		/* 20 */
@@ -54,10 +54,10 @@
 	{ 0,	NF,	sys_getgid,	"getgid32" },		/* 53 */
 	{ 3,	TD,	sys_ioctl,	"ioctl" },		/* 54 */
 	{ 4,	0,	sys_reboot,	"reboot" },		/* 55 */
-	{ 6,	TD|TM,	sys_mmap,	"mmap2" },		/* 56 */
+	{ 6,	TD|TM|SI,	sys_mmap,	"mmap2" },		/* 56 */
 	{ 2,	TF,	sys_symlink,	"symlink" },		/* 57 */
 	{ 3,	TF,	sys_readlink,	"readlink" },		/* 58 */
-	{ 3,	TF|TP,	sys_execve,	"execve" },		/* 59 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,	"execve" },		/* 59 */
 	{ 1,	0,	sys_umask,	"umask" },		/* 60 */
 	{ 1,	TF,	sys_chroot,	"chroot" },		/* 61 */
 	{ 2,	TD,	sys_fstat,	"fstat" },		/* 62 */
@@ -69,10 +69,10 @@
 	{ 5,	TD,	sys_pwrite,	"pwrite" },		/* 68 */
 	{ 0,    NF,	sys_geteuid,	"geteuid32" },		/* 69 */
 	{ 0,	NF,	sys_getegid,	"getegid32" },		/* 70 */
-	{ 6,	TD|TM,	sys_mmap,	"mmap" },		/* 71 */
+	{ 6,	TD|TM|SI,	sys_mmap,	"mmap" },		/* 71 */
 	{ 2,	0,	sys_setreuid,	"setreuid32" },		/* 72 */
-	{ 2,	TM,	sys_munmap,	"munmap" },		/* 73 */
-	{ 3,	TM,	sys_mprotect,	"mprotect" },		/* 74 */
+	{ 2,	TM|SI,	sys_munmap,	"munmap" },		/* 73 */
+	{ 3,	TM|SI,	sys_mprotect,	"mprotect" },		/* 74 */
 	{ 3,	TM,	sys_madvise,	"madvise" },		/* 75 */
 	{ 0,	0,	sys_vhangup,	"vhangup" },		/* 76 */
 	{ 3,	TF,	sys_truncate64,	"truncate64" },		/* 77 */
@@ -186,11 +186,11 @@
 	{ 2,	0,	sys_setpgid,	"setpgid" },		/* 185 */
 	{ 2,	TD,	sys_fremovexattr,"fremovexattr" },	/* 186 */
 	{ 2,	TS,	sys_kill,	"tkill" },		/* 187 */
-	{ 1,	TP,	sys_exit,	"exit_group" },		/* 188 */
+	{ 1,	TP|SE,	sys_exit,	"exit_group" },		/* 188 */
 	{ 1,	0,	sys_uname,	"uname" },		/* 189 */
 	{ 3,	0,	sys_init_module,"init_module" },	/* 190 */
 	{ 1,	0,	sys_personality,"personality" },	/* 191 */
-	{ 5,	TM,	sys_remap_file_pages,"remap_file_pages" },/* 192 */
+	{ 5,	TM|SI,	sys_remap_file_pages,"remap_file_pages" },/* 192 */
 	{ 1,	TD,	sys_epoll_create,"epoll_create" },	/* 193 */
 	{ 4,	TD,	sys_epoll_ctl,	"epoll_ctl" },		/* 194 */
 	{ 4,	TD,	sys_epoll_wait,	"epoll_wait" },		/* 195 */
@@ -248,7 +248,7 @@
 	{ 1,	0,	sys_sched_get_priority_min,"sched_get_priority_min"},/* 247 */
 	{ 2,	0,	sys_sched_rr_get_interval,"sched_rr_get_interval"},/* 248 */
 	{ 2,	0,	sys_nanosleep,	"nanosleep" },		/* 249 */
-	{ 5,	TM,	sys_mremap,	"mremap" },		/* 250 */
+	{ 5,	TM|SI,	sys_mremap,	"mremap" },		/* 250 */
 	{ 1,	0,	sys_sysctl,	"_sysctl" },		/* 251 */
 	{ 1,	0,	sys_getsid,	"getsid" },		/* 252 */
 	{ 1,	TD,	sys_fdatasync,	"fdatasync" },		/* 253 */
@@ -397,8 +397,8 @@
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 391 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 392 */
 	{ 4,	0,	printargs,		"ipc_subcall"	}, /* 393 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 394 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 395 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 394 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 395 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 396 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 397 */
 	{ 5,	0,	NULL,			NULL		}, /* 398 */
diff --git a/linux/sparc/syscallent1.h b/linux/sparc/syscallent1.h
index 9519e08..2e2805b 100644
--- a/linux/sparc/syscallent1.h
+++ b/linux/sparc/syscallent1.h
@@ -359,9 +359,9 @@
 	{ 6,	0,	NULL,			NULL		}, /* 328 */
 	{ 6,	0,	NULL,			NULL		}, /* 329 */
 
-	{ 6,	TI,	solaris_shmat,		"shmat"		}, /* 330 */
+	{ 6,	TI|TM,	solaris_shmat,		"shmat"		}, /* 330 */
 	{ 6,	TI,	solaris_shmctl,		"shmctl"	}, /* 331 */
-	{ 6,	TI,	solaris_shmdt,		"shmdt"		}, /* 332 */
+	{ 6,	TI|TM,	solaris_shmdt,		"shmdt"		}, /* 332 */
 	{ 6,	TI,	solaris_shmget,		"shmget"	}, /* 333 */
 	{ 6,	0,	NULL,			NULL		}, /* 334 */
 	{ 6,	0,	NULL,			NULL		}, /* 335 */
diff --git a/linux/syscall.h b/linux/syscall.h
index 8725040..38aa4bd 100644
--- a/linux/syscall.h
+++ b/linux/syscall.h
@@ -52,6 +52,8 @@
 int sys_connect();
 int sys_creat();
 int sys_create_module();
+int sys_delete_module();
+int sys_dup();
 int sys_dup2();
 int sys_dup3();
 int sys_epoll_create();
@@ -241,6 +243,7 @@
 int sys_setgroups32();
 int sys_sethostname();
 int sys_setitimer();
+int sys_setns();
 int sys_setpriority();
 int sys_setresuid();
 int sys_setreuid();
@@ -302,7 +305,6 @@
 int sys_utime();
 int sys_utimensat();
 int sys_utimes();
-int sys_vfork();
 int sys_vmsplice();
 int sys_wait4();
 int sys_waitid();
diff --git a/linux/tile/syscallent.h b/linux/tile/syscallent.h
index a069334..5c41539 100644
--- a/linux/tile/syscallent.h
+++ b/linux/tile/syscallent.h
@@ -91,8 +91,8 @@
 	{ 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 */
+	{ 1,	TP|SE,	sys_exit,			"exit"				}, /*   93 */
+	{ 1,	TP|SE,	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 */
@@ -194,8 +194,8 @@
 	{ 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 */
+	{ 4,	TI|TM|SI,	sys_shmat,			"shmat"				}, /*  196 */
+	{ 4,	TI|TM|SI,	sys_shmdt,			"shmdt"				}, /*  197 */
 	{ 3,	TN,	sys_socket,			"socket"			}, /*  198 */
 	{ 4,	TN,	sys_socketpair,			"socketpair"			}, /*  199 */
 	{ 3,	TN,	sys_bind,			"bind"				}, /*  200 */
@@ -212,19 +212,19 @@
 	{ 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 */
+	{ 1,	TM|SI,	sys_brk,			"brk"				}, /*  214 */
+	{ 2,	TM|SI,	sys_munmap,			"munmap"			}, /*  215 */
+	{ 5,	TM|SI,	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 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,			"execve"			}, /*  221 */
+	{ 6,	TD|TM|SI,	sys_mmap,			"mmap"				}, /*  222 */
 	{ 4,	TD,	sys_fadvise64,			"fadvise64"			}, /*  223 */
 	{ 1,	TF,	sys_swapon,			"swapon"			}, /*  224 */
 	{ 1,	TF,	sys_swapoff,			"swapoff"			}, /*  225 */
-	{ 3,	TM,	sys_mprotect,			"mprotect"			}, /*  226 */
+	{ 3,	TM|SI,	sys_mprotect,			"mprotect"			}, /*  226 */
 	{ 3,	TM,	sys_msync,			"msync"				}, /*  227 */
 	{ 2,	TM,	sys_mlock,			"mlock"				}, /*  228 */
 	{ 2,	TM,	sys_munlock,			"munlock"			}, /*  229 */
@@ -232,7 +232,7 @@
 	{ 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 */
+	{ 5,	TM|SI,	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 */
diff --git a/linux/tile/syscallent1.h b/linux/tile/syscallent1.h
index 94b7737..a1ac268 100644
--- a/linux/tile/syscallent1.h
+++ b/linux/tile/syscallent1.h
@@ -91,8 +91,8 @@
 	{ 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 */
+	{ 1,	TP|SE,	sys_exit,			"exit"				}, /*   93 */
+	{ 1,	TP|SE,	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 */
@@ -194,8 +194,8 @@
 	{ 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 */
+	{ 4,	TI|TM|SI,	sys_shmat,			"shmat"				}, /*  196 */
+	{ 4,	TI|TM|SI,	sys_shmdt,			"shmdt"				}, /*  197 */
 	{ 3,	TN,	sys_socket,			"socket"			}, /*  198 */
 	{ 4,	TN,	sys_socketpair,			"socketpair"			}, /*  199 */
 	{ 3,	TN,	sys_bind,			"bind"				}, /*  200 */
@@ -212,19 +212,19 @@
 	{ 3,	TN,	sys_sendmsg,			"sendmsg"			}, /*  211 */
 	{ 3,	TN,	sys_recvmsg,			"recvmsg"			}, /*  212 */
 	{ 4,	TD,	sys_readahead,			"readahead"			}, /*  213 */
-	{ 1,	TM,	sys_brk,			"brk"				}, /*  214 */
-	{ 2,	TM,	sys_munmap,			"munmap"			}, /*  215 */
-	{ 5,	TM,	sys_mremap,			"mremap"			}, /*  216 */
+	{ 1,	TM|SI,	sys_brk,			"brk"				}, /*  214 */
+	{ 2,	TM|SI,	sys_munmap,			"munmap"			}, /*  215 */
+	{ 5,	TM|SI,	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_4koff,			"mmap2"				}, /*  222 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,			"execve"			}, /*  221 */
+	{ 6,	TD|TM|SI,	sys_mmap_4koff,			"mmap2"				}, /*  222 */
 	{ 5,	TD,	sys_fadvise64,			"fadvise64"			}, /*  223 */
 	{ 1,	TF,	sys_swapon,			"swapon"			}, /*  224 */
 	{ 1,	TF,	sys_swapoff,			"swapoff"			}, /*  225 */
-	{ 3,	TM,	sys_mprotect,			"mprotect"			}, /*  226 */
+	{ 3,	TM|SI,	sys_mprotect,			"mprotect"			}, /*  226 */
 	{ 3,	TM,	sys_msync,			"msync"				}, /*  227 */
 	{ 2,	TM,	sys_mlock,			"mlock"				}, /*  228 */
 	{ 2,	TM,	sys_munlock,			"munlock"			}, /*  229 */
@@ -232,7 +232,7 @@
 	{ 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 */
+	{ 5,	TM|SI,	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 */
diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h
index 65df127..e71524a 100644
--- a/linux/x32/syscallent.h
+++ b/linux/x32/syscallent.h
@@ -7,10 +7,10 @@
 	{ 2,	TF,	sys_lstat,		"lstat"		},  /* 6 */
 	{ 3,	TD,	sys_poll,		"poll"		},  /* 7 */
 	{ 3,	TD,	sys_lseek,		"lseek"		},  /* 8 */
-	{ 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 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"		},  /* 9 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"	},  /* 10 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	},  /* 11 */
+	{ 1,	TM|SI,	sys_brk,		"brk"		},  /* 12 */
 	{ 4,	TS,	printargs,		"64:rt_sigaction"	},  /* 13 */
 	{ 4,	TS,	sys_rt_sigprocmask,	"rt_sigprocmask"},  /* 14 */
 	{ 0,	TS,	printargs,		"64:rt_sigreturn"	},  /* 15 */
@@ -23,12 +23,12 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		},  /* 22 */
 	{ 5,	TD,	sys_select,		"select"	},  /* 23 */
 	{ 0,	0,	sys_sched_yield,	"sched_yield"	},  /* 24 */
-	{ 5,	TM,	sys_mremap,		"mremap"	},  /* 25 */
+	{ 5,	TM|SI,	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|TM|SI,	sys_shmat,		"shmat"		},  /* 30 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	},  /* 31 */
 	{ 1,	TD,	sys_dup,		"dup"		},  /* 32 */
 	{ 2,	TD,	sys_dup2,		"dup2"		},  /* 33 */
@@ -57,15 +57,15 @@
 	{ 5,	TP,	sys_clone,		"clone"		},  /* 56 */
 	{ 0,	TP,	sys_fork,		"fork"		},  /* 57 */
 	{ 0,	TP,	sys_vfork,		"vfork"		},  /* 58 */
-	{ 3,	TF|TP,	printargs,		"64:execve"	},  /* 59 */
-	{ 1,	TP,	sys_exit,		"_exit"		},  /* 60 */
+	{ 3,	TF|TP|SE|SI,	printargs,		"64:execve"	},  /* 59 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		},  /* 60 */
 	{ 4,	TP,	sys_wait4,		"wait4"		},  /* 61 */
 	{ 2,	TS,	sys_kill,		"kill"		},  /* 62 */
 	{ 1,	0,	sys_uname,		"uname"		},  /* 63 */
 	{ 4,	TI,	sys_semget,		"semget"	},  /* 64 */
 	{ 4,	TI,	sys_semop,		"semop"		},  /* 65 */
 	{ 4,	TI,	sys_semctl,		"semctl"	},  /* 66 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		},  /* 67 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		},  /* 67 */
 	{ 4,	TI,	sys_msgget,		"msgget"	},  /* 68 */
 	{ 4,	TI,	sys_msgsnd,		"msgsnd"	},  /* 69 */
 	{ 5,	TI,	sys_msgrcv,		"msgrcv"	},  /* 70 */
@@ -214,7 +214,7 @@
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 213 */
 	{ 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 */
+	{ 5,	TM|SI,	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 */
@@ -229,7 +229,7 @@
 	{ 2,	0,	sys_clock_gettime,	"clock_gettime"	}, /* 228 */
 	{ 2,	0,	sys_clock_getres,	"clock_getres"	}, /* 229 */
 	{ 4,	0,	sys_clock_nanosleep,	"clock_nanosleep"}, /* 230 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 231 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 231 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 232 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 233 */
 	{ 3,	TS,	sys_tgkill,		"tgkill"	}, /* 234 */
@@ -323,7 +323,7 @@
 	{ 6,	TN,	sys_recvfrom,		"recvfrom"	},  /* 517 */
 	{ 3,	TN,	sys_sendmsg,		"sendmsg"	},  /* 518 */
 	{ 3,	TN,	sys_recvmsg,		"recvmsg"	},  /* 519 */
-	{ 3,	TF|TP,	sys_execve,		"execve"	},  /* 520 */
+	{ 3,	TF|TP|SE|SI,	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 */
diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h
index 8e3a200..10c4eeb 100644
--- a/linux/x86_64/syscallent.h
+++ b/linux/x86_64/syscallent.h
@@ -7,10 +7,10 @@
 	{ 2,	TF,	sys_lstat,		"lstat"		},  /* 6 */
 	{ 3,	TD,	sys_poll,		"poll"		},  /* 7 */
 	{ 3,	TD,	sys_lseek,		"lseek"		},  /* 8 */
-	{ 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 */
+	{ 6,	TD|TM|SI,	sys_mmap,		"mmap"		},  /* 9 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"	},  /* 10 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	},  /* 11 */
+	{ 1,	TM|SI,	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 */
@@ -23,12 +23,12 @@
 	{ 1,	TD,	sys_pipe,		"pipe"		},  /* 22 */
 	{ 5,	TD,	sys_select,		"select"	},  /* 23 */
 	{ 0,	0,	sys_sched_yield,	"sched_yield"	},  /* 24 */
-	{ 5,	TM,	sys_mremap,		"mremap"	},  /* 25 */
+	{ 5,	TM|SI,	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|TM|SI,	sys_shmat,		"shmat"		},  /* 30 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	},  /* 31 */
 	{ 1,	TD,	sys_dup,		"dup"		},  /* 32 */
 	{ 2,	TD,	sys_dup2,		"dup2"		},  /* 33 */
@@ -57,15 +57,15 @@
 	{ 5,	TP,	sys_clone,		"clone"		},  /* 56 */
 	{ 0,	TP,	sys_fork,		"fork"		},  /* 57 */
 	{ 0,	TP,	sys_vfork,		"vfork"		},  /* 58 */
-	{ 3,	TF|TP,	sys_execve,		"execve"	},  /* 59 */
-	{ 1,	TP,	sys_exit,		"_exit"		},  /* 60 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	},  /* 59 */
+	{ 1,	TP|SE,	sys_exit,		"_exit"		},  /* 60 */
 	{ 4,	TP,	sys_wait4,		"wait4"		},  /* 61 */
 	{ 2,	TS,	sys_kill,		"kill"		},  /* 62 */
 	{ 1,	0,	sys_uname,		"uname"		},  /* 63 */
 	{ 4,	TI,	sys_semget,		"semget"	},  /* 64 */
 	{ 4,	TI,	sys_semop,		"semop"		},  /* 65 */
 	{ 4,	TI,	sys_semctl,		"semctl"	},  /* 66 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		},  /* 67 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		},  /* 67 */
 	{ 4,	TI,	sys_msgget,		"msgget"	},  /* 68 */
 	{ 4,	TI,	sys_msgsnd,		"msgsnd"	},  /* 69 */
 	{ 5,	TI,	sys_msgrcv,		"msgrcv"	},  /* 70 */
@@ -214,7 +214,7 @@
 	{ 1,	TD,	sys_epoll_create,	"epoll_create"	}, /* 213 */
 	{ 4,	0,	printargs,		"epoll_ctl_old"	}, /* 214 */
 	{ 4,	0,	printargs,		"epoll_wait_old"}, /* 215 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 216 */
+	{ 5,	TM|SI,	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 */
@@ -229,7 +229,7 @@
 	{ 2,	0,	sys_clock_gettime,	"clock_gettime"	}, /* 228 */
 	{ 2,	0,	sys_clock_getres,	"clock_getres"	}, /* 229 */
 	{ 4,	0,	sys_clock_nanosleep,	"clock_nanosleep"}, /* 230 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 231 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 231 */
 	{ 4,	TD,	sys_epoll_wait,		"epoll_wait"	}, /* 232 */
 	{ 4,	TD,	sys_epoll_ctl,		"epoll_ctl"	}, /* 233 */
 	{ 3,	TS,	sys_tgkill,		"tgkill"	}, /* 234 */
diff --git a/linux/xtensa/syscallent.h b/linux/xtensa/syscallent.h
index 9034961..cc32cec 100644
--- a/linux/xtensa/syscallent.h
+++ b/linux/xtensa/syscallent.h
@@ -73,22 +73,22 @@
 	{ 4,	TD,	sys_fgetxattr,		"fgetxattr"	}, /* 77 */
 	{ 3,	TD,	sys_flistxattr,		"flistxattr"	}, /* 78 */
 	{ 2,	TD,	sys_fremovexattr,	"fremovexattr"	}, /* 79 */
-	{ 6,	TD|TM,	sys_mmap_pgoff,		"mmap2"		}, /* 80 */
-	{ 2,	TM,	sys_munmap,		"munmap"	}, /* 81 */
-	{ 3,	TM,	sys_mprotect,		"mprotect"	}, /* 82 */
-	{ 1,	TM,	sys_brk,		"brk"		}, /* 83 */
+	{ 6,	TD|TM|SI,	sys_mmap_pgoff,		"mmap2"		}, /* 80 */
+	{ 2,	TM|SI,	sys_munmap,		"munmap"	}, /* 81 */
+	{ 3,	TM|SI,	sys_mprotect,		"mprotect"	}, /* 82 */
+	{ 1,	TM|SI,	sys_brk,		"brk"		}, /* 83 */
 	{ 2,	TM,	sys_mlock,		"mlock"		}, /* 84 */
 	{ 2,	TM,	sys_munlock,		"munlock"	}, /* 85 */
 	{ 1,	TM,	sys_mlockall,		"mlockall"	}, /* 86 */
 	{ 0,	TM,	sys_munlockall,		"munlockall"	}, /* 87 */
-	{ 4,	TM,	sys_mremap,		"mremap"	}, /* 88 */
+	{ 4,	TM|SI,	sys_mremap,		"mremap"	}, /* 88 */
 	{ 3,	TM,	sys_msync,		"msync"		}, /* 89 */
 	{ 3,	TM,	sys_mincore,		"mincore"	}, /* 90 */
 	{ 3,	TM,	sys_madvise,		"madvise"	}, /* 91 */
 	{ 4,	TI,	sys_shmget,		"shmget"	}, /* 92 */
-	{ 4,	TI,	sys_shmat,		"shmat"		}, /* 93 */
+	{ 4,	TI|TM|SI,	sys_shmat,		"shmat"		}, /* 93 */
 	{ 4,	TI,	sys_shmctl,		"shmctl"	}, /* 94 */
-	{ 4,	TI,	sys_shmdt,		"shmdt"		}, /* 95 */
+	{ 4,	TI|TM|SI,	sys_shmdt,		"shmdt"		}, /* 95 */
 	{ 3,	TN,	sys_socket,		"socket"	}, /* 96 */
 	{ 5,	TN,	sys_setsockopt,		"setsockopt"	}, /* 97 */
 	{ 5,	TN,	sys_getsockopt,		"getsockopt"	}, /* 98 */
@@ -110,9 +110,9 @@
 	{ 4,	TD|TN,	sys_sendfile64,		"sendfile64"	}, /* 114 */
 	{ 4,	TN,	sys_sendmsg,		"sendmsg"	}, /* 115 */
 	{ 5,	TP,	sys_clone,		"clone"		}, /* 116 */
-	{ 3,	TF|TP,	sys_execve,		"execve"	}, /* 117 */
-	{ 1,	TP,	sys_exit,		"exit"		}, /* 118 */
-	{ 1,	TP,	sys_exit,		"exit_group"	}, /* 119 */
+	{ 3,	TF|TP|SE|SI,	sys_execve,		"execve"	}, /* 117 */
+	{ 1,	TP|SE,	sys_exit,		"exit"		}, /* 118 */
+	{ 1,	TP|SE,	sys_exit,		"exit_group"	}, /* 119 */
 	{ 0,	0,	sys_getpid,		"getpid"	}, /* 120 */
 	{ 4,	TP,	sys_wait4,		"wait4"		}, /* 121 */
 	{ 5,	TP,	sys_waitid,		"waitid"	}, /* 122 */
@@ -251,12 +251,12 @@
 	{ 5,	0,	printargs,		"keyctl"	}, /* 258 */
 	[259] = { },
 	{ 5,	TD,	sys_readahead,		"readahead"	}, /* 260 */
-	{ 5,	TM,	sys_remap_file_pages,	"remap_file_pages"}, /* 261 */
+	{ 5,	TM|SI,	sys_remap_file_pages,	"remap_file_pages"}, /* 261 */
 	{ 5,	TM,	sys_migrate_pages,	"migrate_pages"	}, /* 262 */
 	{ 0,	TM,	sys_mbind,		"mbind"		}, /* 263 */
 	{ 6,	TM,	sys_get_mempolicy,	"get_mempolicy"	}, /* 264 */
 	{ 5,	TM,	sys_set_mempolicy,	"set_mempolicy"	}, /* 265 */
-	{ 3,	TP,	sys_unshare,		"unshare"	}, /* 266 */
+	{ 1,	TP,	sys_unshare,		"unshare"	}, /* 266 */
 	{ 1,	TM,	sys_move_pages,		"move_pages"	}, /* 267 */
 	{ 0,	TD,	sys_splice,		"splice"	}, /* 268 */
 	{ 0,	TD,	sys_tee,		"tee"		}, /* 269 */
diff --git a/loop.c b/loop.c
index 495e3e2..2e16347 100644
--- a/loop.c
+++ b/loop.c
@@ -31,30 +31,8 @@
 
 #include <linux/loop.h>
 
-static const struct xlat loop_flags_options[] = {
-	XLAT(LO_FLAGS_READ_ONLY),
-#if HAVE_DECL_LO_FLAGS_AUTOCLEAR
-	XLAT(LO_FLAGS_AUTOCLEAR),
-#endif
-#if HAVE_DECL_LO_FLAGS_PARTSCAN
-	XLAT(LO_FLAGS_PARTSCAN),
-#endif
-	XLAT_END
-};
-
-static const struct xlat loop_crypt_type_options[] = {
-	XLAT(LO_CRYPT_NONE),
-	XLAT(LO_CRYPT_XOR),
-	XLAT(LO_CRYPT_DES),
-	XLAT(LO_CRYPT_FISH2),
-	XLAT(LO_CRYPT_BLOW),
-	XLAT(LO_CRYPT_CAST128),
-	XLAT(LO_CRYPT_IDEA),
-	XLAT(LO_CRYPT_DUMMY),
-	XLAT(LO_CRYPT_SKIPJACK),
-	XLAT(LO_CRYPT_CRYPTOAPI),
-	XLAT_END
-};
+#include "xlat/loop_flags_options.h"
+#include "xlat/loop_crypt_type_options.h"
 
 int loop_ioctl(struct tcb *tcp, long code, long arg)
 {
diff --git a/make-dist b/make-dist
index fffedfb..16c9797 100755
--- a/make-dist
+++ b/make-dist
@@ -16,7 +16,7 @@
 
 ./git-set-file-times
 
-autoreconf -i -f
+./bootstrap
 
 ./configure --enable-maintainer-mode
 
diff --git a/mem.c b/mem.c
index ce5ce51..6ecd363 100644
--- a/mem.c
+++ b/mem.c
@@ -53,120 +53,8 @@
 	return RVAL_HEX;
 }
 
-static const struct xlat mmap_prot[] = {
-	XLAT(PROT_NONE),
-	XLAT(PROT_READ),
-	XLAT(PROT_WRITE),
-	XLAT(PROT_EXEC),
-#ifdef PROT_SEM
-	XLAT(PROT_SEM),
-#endif
-#ifdef PROT_GROWSDOWN
-	XLAT(PROT_GROWSDOWN),
-#endif
-#ifdef PROT_GROWSUP
-	XLAT(PROT_GROWSUP),
-#endif
-#ifdef PROT_SAO
-	XLAT(PROT_SAO),
-#endif
-	XLAT_END
-};
-
-static const struct xlat mmap_flags[] = {
-	XLAT(MAP_SHARED),
-	XLAT(MAP_PRIVATE),
-	XLAT(MAP_FIXED),
-#ifdef MAP_ANONYMOUS
-	XLAT(MAP_ANONYMOUS),
-#endif
-#ifdef MAP_32BIT
-	XLAT(MAP_32BIT),
-#endif
-#ifdef MAP_RENAME
-	XLAT(MAP_RENAME),
-#endif
-#ifdef MAP_NORESERVE
-	XLAT(MAP_NORESERVE),
-#endif
-#ifdef MAP_POPULATE
-	XLAT(MAP_POPULATE),
-#endif
-#ifdef MAP_NONBLOCK
-	XLAT(MAP_NONBLOCK),
-#endif
-	/*
-	 * XXX - this was introduced in SunOS 4.x to distinguish between
-	 * the old pre-4.x "mmap()", which:
-	 *
-	 *	only let you map devices with an "mmap" routine (e.g.,
-	 *	frame buffers) in;
-	 *
-	 *	required you to specify the mapping address;
-	 *
-	 *	returned 0 on success and -1 on failure;
-	 *
-	 * memory and which, and the 4.x "mmap()" which:
-	 *
-	 *	can map plain files;
-	 *
-	 *	can be asked to pick where to map the file;
-	 *
-	 *	returns the address where it mapped the file on success
-	 *	and -1 on failure.
-	 *
-	 * It's not actually used in source code that calls "mmap()"; the
-	 * "mmap()" routine adds it for you.
-	 *
-	 * It'd be nice to come up with some way of eliminating it from
-	 * the flags, e.g. reporting calls *without* it as "old_mmap()"
-	 * and calls with it as "mmap()".
-	 */
-#ifdef _MAP_NEW
-	XLAT(_MAP_NEW),
-#endif
-#ifdef MAP_GROWSDOWN
-	XLAT(MAP_GROWSDOWN),
-#endif
-#ifdef MAP_DENYWRITE
-	XLAT(MAP_DENYWRITE),
-#endif
-#ifdef MAP_EXECUTABLE
-	XLAT(MAP_EXECUTABLE),
-#endif
-#ifdef MAP_INHERIT
-	XLAT(MAP_INHERIT),
-#endif
-#ifdef MAP_FILE
-	XLAT(MAP_FILE),
-#endif
-#ifdef MAP_LOCKED
-	XLAT(MAP_LOCKED),
-#endif
-	/* FreeBSD ones */
-#if defined(MAP_ANON) && (!defined(MAP_ANONYMOUS) || MAP_ANON != MAP_ANONYMOUS)
-	XLAT(MAP_ANON),
-#endif
-#ifdef MAP_HASSEMAPHORE
-	XLAT(MAP_HASSEMAPHORE),
-#endif
-#ifdef MAP_STACK
-	XLAT(MAP_STACK),
-#endif
-#ifdef MAP_HUGETLB
-	XLAT(MAP_HUGETLB),
-#endif
-#if defined MAP_UNINITIALIZED && MAP_UNINITIALIZED > 0
-	XLAT(MAP_UNINITIALIZED),
-#endif
-#ifdef MAP_NOSYNC
-	XLAT(MAP_NOSYNC),
-#endif
-#ifdef MAP_NOCORE
-	XLAT(MAP_NOCORE),
-#endif
-	XLAT_END
-};
+#include "xlat/mmap_prot.h"
+#include "xlat/mmap_flags.h"
 
 static int
 print_mmap(struct tcb *tcp, long *u_arg, unsigned long long offset)
@@ -315,13 +203,7 @@
 	return 0;
 }
 
-static const struct xlat mremap_flags[] = {
-	XLAT(MREMAP_MAYMOVE),
-#ifdef MREMAP_FIXED
-	XLAT(MREMAP_FIXED),
-#endif
-	XLAT_END
-};
+#include "xlat/mremap_flags.h"
 
 int
 sys_mremap(struct tcb *tcp)
@@ -339,57 +221,7 @@
 	return RVAL_HEX;
 }
 
-static const struct xlat madvise_cmds[] = {
-#ifdef MADV_NORMAL
-	XLAT(MADV_NORMAL),
-#endif
-#ifdef MADV_RANDOM
-	XLAT(MADV_RANDOM),
-#endif
-#ifdef MADV_SEQUENTIAL
-	XLAT(MADV_SEQUENTIAL),
-#endif
-#ifdef MADV_WILLNEED
-	XLAT(MADV_WILLNEED),
-#endif
-#ifdef MADV_DONTNEED
-	XLAT(MADV_DONTNEED),
-#endif
-#ifdef MADV_REMOVE
-	XLAT(MADV_REMOVE),
-#endif
-#ifdef MADV_DONTFORK
-	XLAT(MADV_DONTFORK),
-#endif
-#ifdef MADV_DOFORK
-	XLAT(MADV_DOFORK),
-#endif
-#ifdef MADV_HWPOISON
-	XLAT(MADV_HWPOISON),
-#endif
-#ifdef MADV_SOFT_OFFLINE
-	XLAT(MADV_SOFT_OFFLINE),
-#endif
-#ifdef MADV_MERGEABLE
-	XLAT(MADV_MERGEABLE),
-#endif
-#ifdef MADV_UNMERGEABLE
-	XLAT(MADV_UNMERGEABLE),
-#endif
-#ifdef MADV_HUGEPAGE
-	XLAT(MADV_HUGEPAGE),
-#endif
-#ifdef MADV_NOHUGEPAGE
-	XLAT(MADV_NOHUGEPAGE),
-#endif
-#ifdef MADV_DONTDUMP
-	XLAT(MADV_DONTDUMP),
-#endif
-#ifdef MADV_DODUMP
-	XLAT(MADV_DODUMP),
-#endif
-	XLAT_END
-};
+#include "xlat/madvise_cmds.h"
 
 int
 sys_madvise(struct tcb *tcp)
@@ -401,15 +233,7 @@
 	return 0;
 }
 
-static const struct xlat mlockall_flags[] = {
-#ifdef MCL_CURRENT
-	XLAT(MCL_CURRENT),
-#endif
-#ifdef MCL_FUTURE
-	XLAT(MCL_FUTURE),
-#endif
-	XLAT_END
-};
+#include "xlat/mlockall_flags.h"
 
 int
 sys_mlockall(struct tcb *tcp)
@@ -422,14 +246,7 @@
 
 #ifdef MS_ASYNC
 
-static const struct xlat mctl_sync[] = {
-#ifdef MS_SYNC
-	XLAT(MS_SYNC),
-#endif
-	XLAT(MS_ASYNC),
-	XLAT(MS_INVALIDATE),
-	XLAT_END
-};
+#include "xlat/mctl_sync.h"
 
 int
 sys_msync(struct tcb *tcp)
@@ -449,20 +266,8 @@
 
 #ifdef MC_SYNC
 
-static const struct xlat mctl_funcs[] = {
-	XLAT(MC_LOCK),
-	XLAT(MC_LOCKAS),
-	XLAT(MC_SYNC),
-	XLAT(MC_UNLOCK),
-	XLAT(MC_UNLOCKAS),
-	XLAT_END
-};
-
-static const struct xlat mctl_lockas[] = {
-	XLAT(MCL_CURRENT),
-	XLAT(MCL_FUTURE),
-	XLAT_END
-};
+#include "xlat/mctl_funcs.h"
+#include "xlat/mctl_lockas.h"
 
 int
 sys_mctl(struct tcb *tcp)
@@ -566,32 +371,10 @@
 #define MPOL_MF_MOVE	(1<<1)
 #define MPOL_MF_MOVE_ALL (1<<2)
 
-static const struct xlat policies[] = {
-	XLAT(MPOL_DEFAULT),
-	XLAT(MPOL_PREFERRED),
-	XLAT(MPOL_BIND),
-	XLAT(MPOL_INTERLEAVE),
-	XLAT_END
-};
-
-static const struct xlat mbindflags[] = {
-	XLAT(MPOL_MF_STRICT),
-	XLAT(MPOL_MF_MOVE),
-	XLAT(MPOL_MF_MOVE_ALL),
-	XLAT_END
-};
-
-static const struct xlat mempolicyflags[] = {
-	XLAT(MPOL_F_NODE),
-	XLAT(MPOL_F_ADDR),
-	XLAT_END
-};
-
-static const struct xlat move_pages_flags[] = {
-	XLAT(MPOL_MF_MOVE),
-	XLAT(MPOL_MF_MOVE_ALL),
-	XLAT_END
-};
+#include "xlat/policies.h"
+#include "xlat/mbindflags.h"
+#include "xlat/mempolicyflags.h"
+#include "xlat/move_pages_flags.h"
 
 static void
 get_nodes(struct tcb *tcp, unsigned long ptr, unsigned long maxnodes, int err)
diff --git a/mtd.c b/mtd.c
index 9f8cae1..8ba658b 100644
--- a/mtd.c
+++ b/mtd.c
@@ -41,48 +41,11 @@
 # include <mtd/ubi-user.h>
 #endif
 
-static const struct xlat mtd_mode_options[] = {
-	XLAT(MTD_OPS_PLACE_OOB),
-	XLAT(MTD_OPS_AUTO_OOB),
-	XLAT(MTD_OPS_RAW),
-	XLAT_END
-};
-
-static const struct xlat mtd_type_options[] = {
-	XLAT(MTD_ABSENT),
-	XLAT(MTD_RAM),
-	XLAT(MTD_ROM),
-	XLAT(MTD_NORFLASH),
-	XLAT(MTD_NANDFLASH),
-	XLAT(MTD_DATAFLASH),
-	XLAT(MTD_UBIVOLUME),
-	XLAT(MTD_MLCNANDFLASH),
-	XLAT_END
-};
-
-static const struct xlat mtd_flags_options[] = {
-	XLAT(MTD_WRITEABLE),
-	XLAT(MTD_BIT_WRITEABLE),
-	XLAT(MTD_NO_ERASE),
-	XLAT(MTD_POWERUP_LOCK),
-	XLAT_END
-};
-
-static const struct xlat mtd_otp_options[] = {
-	XLAT(MTD_OTP_OFF),
-	XLAT(MTD_OTP_FACTORY),
-	XLAT(MTD_OTP_USER),
-	XLAT_END
-};
-
-static const struct xlat mtd_nandecc_options[] = {
-	XLAT(MTD_NANDECC_OFF),
-	XLAT(MTD_NANDECC_PLACE),
-	XLAT(MTD_NANDECC_AUTOPLACE),
-	XLAT(MTD_NANDECC_PLACEONLY),
-	XLAT(MTD_NANDECC_AUTOPL_USR),
-	XLAT_END
-};
+#include "xlat/mtd_mode_options.h"
+#include "xlat/mtd_type_options.h"
+#include "xlat/mtd_flags_options.h"
+#include "xlat/mtd_otp_options.h"
+#include "xlat/mtd_nandecc_options.h"
 
 int mtd_ioctl(struct tcb *tcp, long code, long arg)
 {
@@ -286,16 +249,8 @@
 	}
 }
 
-static const struct xlat ubi_volume_types[] = {
-	XLAT(UBI_DYNAMIC_VOLUME),
-	XLAT(UBI_STATIC_VOLUME),
-	XLAT_END
-};
-
-static const struct xlat ubi_volume_props[] = {
-	XLAT(UBI_VOL_PROP_DIRECT_WRITE),
-	XLAT_END
-};
+#include "xlat/ubi_volume_types.h"
+#include "xlat/ubi_volume_props.h"
 
 int ubi_ioctl(struct tcb *tcp, long code, long arg)
 {
diff --git a/net.c b/net.c
index a466efe..08341ad 100644
--- a/net.c
+++ b/net.c
@@ -94,1150 +94,51 @@
 # define PF_UNSPEC AF_UNSPEC
 #endif
 
-static const struct xlat domains[] = {
-#ifdef PF_UNSPEC
-	XLAT(PF_UNSPEC),
-#endif
-#ifdef PF_LOCAL
-	XLAT(PF_LOCAL),
-#endif
-#ifdef PF_UNIX
-	XLAT(PF_UNIX),
-#endif
-#ifdef PF_INET
-	XLAT(PF_INET),
-#endif
-#ifdef PF_AX25
-	XLAT(PF_AX25),
-#endif
-#ifdef PF_IPX
-	XLAT(PF_IPX),
-#endif
-#ifdef PF_APPLETALK
-	XLAT(PF_APPLETALK),
-#endif
-#ifdef PF_NETROM
-	XLAT(PF_NETROM),
-#endif
-#ifdef PF_BRIDGE
-	XLAT(PF_BRIDGE),
-#endif
-#ifdef PF_ATMPVC
-	XLAT(PF_ATMPVC),
-#endif
-#ifdef PF_X25
-	XLAT(PF_X25),
-#endif
-#ifdef PF_INET6
-	XLAT(PF_INET6),
-#endif
-#ifdef PF_ROSE
-	XLAT(PF_ROSE),
-#endif
-#ifdef PF_DECnet
-	XLAT(PF_DECnet),
-#endif
-#ifdef PF_NETBEUI
-	XLAT(PF_NETBEUI),
-#endif
-#ifdef PF_SECURITY
-	XLAT(PF_SECURITY),
-#endif
-#ifdef PF_KEY
-	XLAT(PF_KEY),
-#endif
-#ifdef PF_NETLINK
-	XLAT(PF_NETLINK),
-#endif
-#ifdef PF_ROUTE
-	XLAT(PF_ROUTE),
-#endif
-#ifdef PF_PACKET
-	XLAT(PF_PACKET),
-#endif
-#ifdef PF_ASH
-	XLAT(PF_ASH),
-#endif
-#ifdef PF_ECONET
-	XLAT(PF_ECONET),
-#endif
-#ifdef PF_ATMSVC
-	XLAT(PF_ATMSVC),
-#endif
-#ifdef PF_RDS
-	XLAT(PF_RDS),
-#endif
-#ifdef PF_SNA
-	XLAT(PF_SNA),
-#endif
-#ifdef PF_IRDA
-	XLAT(PF_IRDA),
-#endif
-#ifdef PF_PPPOX
-	XLAT(PF_PPPOX),
-#endif
-#ifdef PF_WANPIPE
-	XLAT(PF_WANPIPE),
-#endif
-#ifdef PF_LLC
-	XLAT(PF_LLC),
-#endif
-#ifdef PF_CAN
-	XLAT(PF_CAN),
-#endif
-#ifdef PF_TIPC
-	XLAT(PF_TIPC),
-#endif
-#ifdef PF_BLUETOOTH
-	XLAT(PF_BLUETOOTH),
-#endif
-#ifdef PF_IUCV
-	XLAT(PF_IUCV),
-#endif
-#ifdef PF_RXRPC
-	XLAT(PF_RXRPC),
-#endif
-#ifdef PF_ISDN
-	XLAT(PF_ISDN),
-#endif
-#ifdef PF_PHONET
-	XLAT(PF_PHONET),
-#endif
-#ifdef PF_IEEE802154
-	XLAT(PF_IEEE802154),
-#endif
-#ifdef PF_CAIF
-	XLAT(PF_CAIF),
-#endif
-#ifdef PF_ALG
-	XLAT(PF_ALG),
-#endif
-#ifdef PF_NFC
-	XLAT(PF_NFC),
-#endif
-#ifdef PF_VSOCK
-	XLAT(PF_VSOCK),
-#endif
-	XLAT_END
-};
-const struct xlat addrfams[] = {
-#ifdef AF_UNSPEC
-	XLAT(AF_UNSPEC),
-#endif
-#ifdef AF_LOCAL
-	XLAT(AF_LOCAL),
-#endif
-#ifdef AF_UNIX
-	XLAT(AF_UNIX),
-#endif
-#ifdef AF_INET
-	XLAT(AF_INET),
-#endif
-#ifdef AF_AX25
-	XLAT(AF_AX25),
-#endif
-#ifdef AF_IPX
-	XLAT(AF_IPX),
-#endif
-#ifdef AF_APPLETALK
-	XLAT(AF_APPLETALK),
-#endif
-#ifdef AF_NETROM
-	XLAT(AF_NETROM),
-#endif
-#ifdef AF_BRIDGE
-	XLAT(AF_BRIDGE),
-#endif
-#ifdef AF_ATMPVC
-	XLAT(AF_ATMPVC),
-#endif
-#ifdef AF_X25
-	XLAT(AF_X25),
-#endif
-#ifdef AF_INET6
-	XLAT(AF_INET6),
-#endif
-#ifdef AF_ROSE
-	XLAT(AF_ROSE),
-#endif
-#ifdef AF_DECnet
-	XLAT(AF_DECnet),
-#endif
-#ifdef AF_NETBEUI
-	XLAT(AF_NETBEUI),
-#endif
-#ifdef AF_SECURITY
-	XLAT(AF_SECURITY),
-#endif
-#ifdef AF_KEY
-	XLAT(AF_KEY),
-#endif
-#ifdef AF_NETLINK
-	XLAT(AF_NETLINK),
-#endif
-#ifdef AF_ROUTE
-	XLAT(AF_ROUTE),
-#endif
-#ifdef AF_PACKET
-	XLAT(AF_PACKET),
-#endif
-#ifdef AF_ASH
-	XLAT(AF_ASH),
-#endif
-#ifdef AF_ECONET
-	XLAT(AF_ECONET),
-#endif
-#ifdef AF_ATMSVC
-	XLAT(AF_ATMSVC),
-#endif
-#ifdef AF_RDS
-	XLAT(AF_RDS),
-#endif
-#ifdef AF_SNA
-	XLAT(AF_SNA),
-#endif
-#ifdef AF_IRDA
-	XLAT(AF_IRDA),
-#endif
-#ifdef AF_PPPOX
-	XLAT(AF_PPPOX),
-#endif
-#ifdef AF_WANPIPE
-	XLAT(AF_WANPIPE),
-#endif
-#ifdef AF_LLC
-	XLAT(AF_LLC),
-#endif
-#ifdef AF_CAN
-	XLAT(AF_CAN),
-#endif
-#ifdef AF_TIPC
-	XLAT(AF_TIPC),
-#endif
-#ifdef AF_BLUETOOTH
-	XLAT(AF_BLUETOOTH),
-#endif
-#ifdef AF_IUCV
-	XLAT(AF_IUCV),
-#endif
-#ifdef AF_RXRPC
-	XLAT(AF_RXRPC),
-#endif
-#ifdef AF_ISDN
-	XLAT(AF_ISDN),
-#endif
-#ifdef AF_PHONET
-	XLAT(AF_PHONET),
-#endif
-#ifdef AF_IEEE802154
-	XLAT(AF_IEEE802154),
-#endif
-#ifdef AF_CAIF
-	XLAT(AF_CAIF),
-#endif
-#ifdef AF_ALG
-	XLAT(AF_ALG),
-#endif
-#ifdef AF_NFC
-	XLAT(AF_NFC),
-#endif
-#ifdef AF_VSOCK
-	XLAT(AF_VSOCK),
-#endif
-	XLAT_END
-};
-static const struct xlat socktypes[] = {
-	XLAT(SOCK_STREAM),
-	XLAT(SOCK_DGRAM),
-#ifdef SOCK_RAW
-	XLAT(SOCK_RAW),
-#endif
-#ifdef SOCK_RDM
-	XLAT(SOCK_RDM),
-#endif
-#ifdef SOCK_SEQPACKET
-	XLAT(SOCK_SEQPACKET),
-#endif
-#ifdef SOCK_DCCP
-	XLAT(SOCK_DCCP),
-#endif
-#ifdef SOCK_PACKET
-	XLAT(SOCK_PACKET),
-#endif
-	XLAT_END
-};
-static const struct xlat sock_type_flags[] = {
-#ifdef SOCK_CLOEXEC
-	XLAT(SOCK_CLOEXEC),
-#endif
-#ifdef SOCK_NONBLOCK
-	XLAT(SOCK_NONBLOCK),
-#endif
-	XLAT_END
-};
+#include "xlat/domains.h"
+#include "xlat/addrfams.h"
+#include "xlat/socktypes.h"
+#include "xlat/sock_type_flags.h"
 #ifndef SOCK_TYPE_MASK
 # define SOCK_TYPE_MASK 0xf
 #endif
-static const struct xlat socketlayers[] = {
-#if defined(SOL_IP)
-	XLAT(SOL_IP),
-#endif
-#if defined(SOL_ICMP)
-	XLAT(SOL_ICMP),
-#endif
-#if defined(SOL_TCP)
-	XLAT(SOL_TCP),
-#endif
-#if defined(SOL_UDP)
-	XLAT(SOL_UDP),
-#endif
-#if defined(SOL_IPV6)
-	XLAT(SOL_IPV6),
-#endif
-#if defined(SOL_ICMPV6)
-	XLAT(SOL_ICMPV6),
-#endif
-#if defined(SOL_SCTP)
-	XLAT(SOL_SCTP),
-#endif
-#if defined(SOL_UDPLITE)
-	XLAT(SOL_UDPLITE),
-#endif
-#if defined(SOL_RAW)
-	XLAT(SOL_RAW),
-#endif
-#if defined(SOL_IPX)
-	XLAT(SOL_IPX),
-#endif
-#if defined(SOL_AX25)
-	XLAT(SOL_AX25),
-#endif
-#if defined(SOL_ATALK)
-	XLAT(SOL_ATALK),
-#endif
-#if defined(SOL_NETROM)
-	XLAT(SOL_NETROM),
-#endif
-#if defined(SOL_ROSE)
-	XLAT(SOL_ROSE),
-#endif
-#if defined(SOL_DECNET)
-	XLAT(SOL_DECNET),
-#endif
-#if defined(SOL_X25)
-	XLAT(SOL_X25),
-#endif
-#if defined(SOL_PACKET)
-	XLAT(SOL_PACKET),
-#endif
-#if defined(SOL_ATM)
-	XLAT(SOL_ATM),
-#endif
-#if defined(SOL_AAL)
-	XLAT(SOL_AAL),
-#endif
-#if defined(SOL_IRDA)
-	XLAT(SOL_IRDA),
-#endif
-#if defined(SOL_NETBEUI)
-	XLAT(SOL_NETBEUI),
-#endif
-#if defined(SOL_LLC)
-	XLAT(SOL_LLC),
-#endif
-#if defined(SOL_DCCP)
-	XLAT(SOL_DCCP),
-#endif
-#if defined(SOL_NETLINK)
-	XLAT(SOL_NETLINK),
-#endif
-#if defined(SOL_TIPC)
-	XLAT(SOL_TIPC),
-#endif
-#if defined(SOL_RXRPC)
-	XLAT(SOL_RXRPC),
-#endif
-#if defined(SOL_PPPOL2TP)
-	XLAT(SOL_PPPOL2TP),
-#endif
-#if defined(SOL_BLUETOOTH)
-	XLAT(SOL_BLUETOOTH),
-#endif
-#if defined(SOL_PNPIPE)
-	XLAT(SOL_PNPIPE),
-#endif
-#if defined(SOL_RDS)
-	XLAT(SOL_RDS),
-#endif
-#if defined(SOL_IUVC)
-	XLAT(SOL_IUCV),
-#endif
-#if defined(SOL_CAIF)
-	XLAT(SOL_CAIF),
-#endif
-	XLAT(SOL_SOCKET),	/* Never used! */
-	/* The SOL_* array should remain not NULL-terminated. */
-};
+#include "xlat/socketlayers.h"
 /*** WARNING: DANGER WILL ROBINSON: NOTE "socketlayers" array above
      falls into "inet_protocols" array below!!!!   This is intended!!! ***/
-static const struct xlat inet_protocols[] = {
-	XLAT(IPPROTO_IP),
-	XLAT(IPPROTO_ICMP),
-	XLAT(IPPROTO_TCP),
-	XLAT(IPPROTO_UDP),
-#ifdef IPPROTO_IGMP
-	XLAT(IPPROTO_IGMP),
-#endif
-#ifdef IPPROTO_GGP
-	XLAT(IPPROTO_GGP),
-#endif
-#ifdef IPPROTO_IPIP
-	XLAT(IPPROTO_IPIP),
-#endif
-#ifdef IPPROTO_EGP
-	XLAT(IPPROTO_EGP),
-#endif
-#ifdef IPPROTO_PUP
-	XLAT(IPPROTO_PUP),
-#endif
-#ifdef IPPROTO_IDP
-	XLAT(IPPROTO_IDP),
-#endif
-#ifdef IPPROTO_TP
-	XLAT(IPPROTO_TP),
-#endif
-#ifdef IPPROTO_DCCP
-	XLAT(IPPROTO_DCCP),
-#endif
-#ifdef IPPROTO_IPV6
-	XLAT(IPPROTO_IPV6),
-#endif
-#ifdef IPPROTO_ROUTING
-	XLAT(IPPROTO_ROUTING),
-#endif
-#ifdef IPPROTO_FRAGMENT
-	XLAT(IPPROTO_FRAGMENT),
-#endif
-#ifdef IPPROTO_RSVP
-	XLAT(IPPROTO_RSVP),
-#endif
-#ifdef IPPROTO_GRE
-	XLAT(IPPROTO_GRE),
-#endif
-#ifdef IPPROTO_ESP
-	XLAT(IPPROTO_ESP),
-#endif
-#ifdef IPPROTO_AH
-	XLAT(IPPROTO_AH),
-#endif
-#ifdef IPPROTO_ICMPV6
-	XLAT(IPPROTO_ICMPV6),
-#endif
-#ifdef IPPROTO_NONE
-	XLAT(IPPROTO_NONE),
-#endif
-#ifdef IPPROTO_DSTOPTS
-	XLAT(IPPROTO_DSTOPTS),
-#endif
-#ifdef IPPROTO_HELLO
-	XLAT(IPPROTO_HELLO),
-#endif
-#ifdef IPPROTO_ND
-	XLAT(IPPROTO_ND),
-#endif
-#ifdef IPPROTO_MTP
-	XLAT(IPPROTO_MTP),
-#endif
-#ifdef IPPROTO_ENCAP
-	XLAT(IPPROTO_ENCAP),
-#endif
-#ifdef IPPROTO_PIM
-	XLAT(IPPROTO_PIM),
-#endif
-#ifdef IPPROTO_COMP
-	XLAT(IPPROTO_COMP),
-#endif
-#ifdef IPPROTO_SCTP
-	XLAT(IPPROTO_SCTP),
-#endif
-#ifdef IPPROTO_UDPLITE
-	XLAT(IPPROTO_UDPLITE),
-#endif
-#ifdef IPPROTO_RAW
-	XLAT(IPPROTO_RAW),
-#endif
-#ifdef IPPROTO_MAX
-	XLAT(IPPROTO_MAX),
-#endif
-	XLAT_END
-};
+#include "xlat/inet_protocols.h"
 
 #ifdef PF_NETLINK
-static const struct xlat netlink_protocols[] = {
-#ifdef NETLINK_ROUTE
-	XLAT(NETLINK_ROUTE),
-#endif
-#ifdef NETLINK_UNUSED
-	XLAT(NETLINK_UNUSED),
-#endif
-#ifdef NETLINK_USERSOCK
-	XLAT(NETLINK_USERSOCK),
-#endif
-#ifdef NETLINK_FIREWALL
-	XLAT(NETLINK_FIREWALL),
-#endif
-#ifdef NETLINK_SOCK_DIAG
-	XLAT(NETLINK_SOCK_DIAG),
-#endif
-#ifdef NETLINK_NFLOG
-	XLAT(NETLINK_NFLOG),
-#endif
-#ifdef NETLINK_XFRM
-	XLAT(NETLINK_XFRM),
-#endif
-#ifdef NETLINK_SELINUX
-	XLAT(NETLINK_SELINUX),
-#endif
-#ifdef NETLINK_ISCSI
-	XLAT(NETLINK_ISCSI),
-#endif
-#ifdef NETLINK_AUDIT
-	XLAT(NETLINK_AUDIT),
-#endif
-#ifdef NETLINK_FIB_LOOKUP
-	XLAT(NETLINK_FIB_LOOKUP),
-#endif
-#ifdef NETLINK_CONNECTOR
-	XLAT(NETLINK_CONNECTOR),
-#endif
-#ifdef NETLINK_NETFILTER
-	XLAT(NETLINK_NETFILTER),
-#endif
-#ifdef NETLINK_IP6_FW
-	XLAT(NETLINK_IP6_FW),
-#endif
-#ifdef NETLINK_DNRTMSG
-	XLAT(NETLINK_DNRTMSG),
-#endif
-#ifdef NETLINK_KOBJECT_UEVENT
-	XLAT(NETLINK_KOBJECT_UEVENT),
-#endif
-#ifdef NETLINK_GENERIC
-	XLAT(NETLINK_GENERIC),
-#endif
-#ifdef NETLINK_SCSITRANSPORT
-	XLAT(NETLINK_SCSITRANSPORT),
-#endif
-#ifdef NETLINK_ECRYPTFS
-	XLAT(NETLINK_ECRYPTFS),
-#endif
-#ifdef NETLINK_RDMA
-	XLAT(NETLINK_RDMA),
-#endif
-#ifdef NETLINK_CRYPTO
-	XLAT(NETLINK_CRYPTO),
-#endif
-	XLAT_END
-};
+#include "xlat/netlink_protocols.h"
 #endif
 
-static const struct xlat msg_flags[] = {
-	XLAT(MSG_OOB),
-#ifdef MSG_PEEK
-	XLAT(MSG_PEEK),
-#endif
-#ifdef MSG_DONTROUTE
-	XLAT(MSG_DONTROUTE),
-#endif
-#ifdef MSG_CTRUNC
-	XLAT(MSG_CTRUNC),
-#endif
-#ifdef MSG_PROBE
-	XLAT(MSG_PROBE),
-#endif
-#ifdef MSG_TRUNC
-	XLAT(MSG_TRUNC),
-#endif
-#ifdef MSG_DONTWAIT
-	XLAT(MSG_DONTWAIT),
-#endif
-#ifdef MSG_EOR
-	XLAT(MSG_EOR),
-#endif
-#ifdef MSG_WAITALL
-	XLAT(MSG_WAITALL),
-#endif
-#ifdef MSG_FIN
-	XLAT(MSG_FIN),
-#endif
-#ifdef MSG_SYN
-	XLAT(MSG_SYN),
-#endif
-#ifdef MSG_CONFIRM
-	XLAT(MSG_CONFIRM),
-#endif
-#ifdef MSG_RST
-	XLAT(MSG_RST),
-#endif
-#ifdef MSG_ERRQUEUE
-	XLAT(MSG_ERRQUEUE),
-#endif
-#ifdef MSG_NOSIGNAL
-	XLAT(MSG_NOSIGNAL),
-#endif
-#ifdef MSG_MORE
-	XLAT(MSG_MORE),
-#endif
-#ifdef MSG_WAITFORONE
-	XLAT(MSG_WAITFORONE),
-#endif
-#ifdef MSG_EOF
-	XLAT(MSG_EOF),
-#endif
-#ifdef MSG_FASTOPEN
-	XLAT(MSG_FASTOPEN),
-#endif
-#ifdef MSG_CMSG_CLOEXEC
-	XLAT(MSG_CMSG_CLOEXEC),
-#endif
-	XLAT_END
-};
-
-static const struct xlat sockoptions[] = {
-#ifdef SO_ACCEPTCONN
-	XLAT(SO_ACCEPTCONN),
-#endif
-#ifdef SO_ALLRAW
-	XLAT(SO_ALLRAW),
-#endif
-#ifdef SO_ATTACH_FILTER
-	XLAT(SO_ATTACH_FILTER),
-#endif
-#ifdef SO_BINDTODEVICE
-	XLAT(SO_BINDTODEVICE),
-#endif
-#ifdef SO_BROADCAST
-	XLAT(SO_BROADCAST),
-#endif
-#ifdef SO_BSDCOMPAT
-	XLAT(SO_BSDCOMPAT),
-#endif
-#ifdef SO_DEBUG
-	XLAT(SO_DEBUG),
-#endif
-#ifdef SO_DETACH_FILTER
-	XLAT(SO_DETACH_FILTER),
-#endif
-#ifdef SO_DONTROUTE
-	XLAT(SO_DONTROUTE),
-#endif
-#ifdef SO_ERROR
-	XLAT(SO_ERROR),
-#endif
-#ifdef SO_ICS
-	XLAT(SO_ICS),
-#endif
-#ifdef SO_IMASOCKET
-	XLAT(SO_IMASOCKET),
-#endif
-#ifdef SO_KEEPALIVE
-	XLAT(SO_KEEPALIVE),
-#endif
-#ifdef SO_LINGER
-	XLAT(SO_LINGER),
-#endif
-#ifdef SO_LISTENING
-	XLAT(SO_LISTENING),
-#endif
-#ifdef SO_MGMT
-	XLAT(SO_MGMT),
-#endif
-#ifdef SO_NO_CHECK
-	XLAT(SO_NO_CHECK),
-#endif
-#ifdef SO_OOBINLINE
-	XLAT(SO_OOBINLINE),
-#endif
-#ifdef SO_ORDREL
-	XLAT(SO_ORDREL),
-#endif
-#ifdef SO_PARALLELSVR
-	XLAT(SO_PARALLELSVR),
-#endif
-#ifdef SO_PASSCRED
-	XLAT(SO_PASSCRED),
-#endif
-#ifdef SO_PEERCRED
-	XLAT(SO_PEERCRED),
-#endif
-#ifdef SO_PEERNAME
-	XLAT(SO_PEERNAME),
-#endif
-#ifdef SO_PEERSEC
-	XLAT(SO_PEERSEC),
-#endif
-#ifdef SO_PRIORITY
-	XLAT(SO_PRIORITY),
-#endif
-#ifdef SO_PROTOTYPE
-	XLAT(SO_PROTOTYPE),
-#endif
-#ifdef SO_RCVBUF
-	XLAT(SO_RCVBUF),
-#endif
-#ifdef SO_RCVLOWAT
-	XLAT(SO_RCVLOWAT),
-#endif
-#ifdef SO_RCVTIMEO
-	XLAT(SO_RCVTIMEO),
-#endif
-#ifdef SO_RDWR
-	XLAT(SO_RDWR),
-#endif
-#ifdef SO_REUSEADDR
-	XLAT(SO_REUSEADDR),
-#endif
-#ifdef SO_REUSEPORT
-	XLAT(SO_REUSEPORT),
-#endif
-#ifdef SO_SECURITY_AUTHENTICATION
-	XLAT(SO_SECURITY_AUTHENTICATION),
-#endif
-#ifdef SO_SECURITY_ENCRYPTION_NETWORK
-	XLAT(SO_SECURITY_ENCRYPTION_NETWORK),
-#endif
-#ifdef SO_SECURITY_ENCRYPTION_TRANSPORT
-	XLAT(SO_SECURITY_ENCRYPTION_TRANSPORT),
-#endif
-#ifdef SO_SEMA
-	XLAT(SO_SEMA),
-#endif
-#ifdef SO_SNDBUF
-	XLAT(SO_SNDBUF),
-#endif
-#ifdef SO_SNDLOWAT
-	XLAT(SO_SNDLOWAT),
-#endif
-#ifdef SO_SNDTIMEO
-	XLAT(SO_SNDTIMEO),
-#endif
-#ifdef SO_TIMESTAMP
-	XLAT(SO_TIMESTAMP),
-#endif
-#ifdef SO_TYPE
-	XLAT(SO_TYPE),
-#endif
-#ifdef SO_USELOOPBACK
-	XLAT(SO_USELOOPBACK),
-#endif
-	XLAT_END
-};
+#include "xlat/msg_flags.h"
+#include "xlat/sockoptions.h"
 
 #if !defined(SOL_IP) && defined(IPPROTO_IP)
 #define SOL_IP IPPROTO_IP
 #endif
 
 #ifdef SOL_IP
-static const struct xlat sockipoptions[] = {
-#ifdef IP_TOS
-	XLAT(IP_TOS),
-#endif
-#ifdef IP_TTL
-	XLAT(IP_TTL),
-#endif
-#ifdef IP_HDRINCL
-	XLAT(IP_HDRINCL),
-#endif
-#ifdef IP_OPTIONS
-	XLAT(IP_OPTIONS),
-#endif
-#ifdef IP_ROUTER_ALERT
-	XLAT(IP_ROUTER_ALERT),
-#endif
-#ifdef IP_RECVOPTIONS
-	XLAT(IP_RECVOPTIONS),
-#endif
-#ifdef IP_RECVOPTS
-	XLAT(IP_RECVOPTS),
-#endif
-#ifdef IP_RECVRETOPTS
-	XLAT(IP_RECVRETOPTS),
-#endif
-#ifdef IP_RECVDSTADDR
-	XLAT(IP_RECVDSTADDR),
-#endif
-#ifdef IP_RETOPTS
-	XLAT(IP_RETOPTS),
-#endif
-#ifdef IP_PKTINFO
-	XLAT(IP_PKTINFO),
-#endif
-#ifdef IP_PKTOPTIONS
-	XLAT(IP_PKTOPTIONS),
-#endif
-#ifdef IP_MTU_DISCOVER
-	XLAT(IP_MTU_DISCOVER),
-#endif
-#ifdef IP_RECVERR
-	XLAT(IP_RECVERR),
-#endif
-#ifdef IP_RECVTTL
-	XLAT(IP_RECVTTL),
-#endif
-#ifdef IP_RECVTOS
-	XLAT(IP_RECVTOS),
-#endif
-#ifdef IP_MTU
-	XLAT(IP_MTU),
-#endif
-#ifdef IP_MULTICAST_IF
-	XLAT(IP_MULTICAST_IF),
-#endif
-#ifdef IP_MULTICAST_TTL
-	XLAT(IP_MULTICAST_TTL),
-#endif
-#ifdef IP_MULTICAST_LOOP
-	XLAT(IP_MULTICAST_LOOP),
-#endif
-#ifdef IP_ADD_MEMBERSHIP
-	XLAT(IP_ADD_MEMBERSHIP),
-#endif
-#ifdef IP_DROP_MEMBERSHIP
-	XLAT(IP_DROP_MEMBERSHIP),
-#endif
-#ifdef IP_BROADCAST_IF
-	XLAT(IP_BROADCAST_IF),
-#endif
-#ifdef IP_RECVIFINDEX
-	XLAT(IP_RECVIFINDEX),
-#endif
-#ifdef IP_MSFILTER
-	XLAT(IP_MSFILTER),
-#endif
-#ifdef MCAST_MSFILTER
-	XLAT(MCAST_MSFILTER),
-#endif
-#ifdef IP_FREEBIND
-	XLAT(IP_FREEBIND),
-#endif
-#ifdef IP_IPSEC_POLICY
-	XLAT(IP_IPSEC_POLICY),
-#endif
-#ifdef IP_XFRM_POLICY
-	XLAT(IP_XFRM_POLICY),
-#endif
-#ifdef IP_PASSSEC
-	XLAT(IP_PASSSEC),
-#endif
-#ifdef IP_TRANSPARENT
-	XLAT(IP_TRANSPARENT),
-#endif
-#ifdef IP_ORIGDSTADDR
-	XLAT(IP_ORIGDSTADDR),
-#endif
-#ifdef IP_RECVORIGDSTADDR
-	XLAT(IP_RECVORIGDSTADDR),
-#endif
-#ifdef IP_MINTTL
-	XLAT(IP_MINTTL),
-#endif
-#ifdef IP_NODEFRAG
-	XLAT(IP_NODEFRAG),
-#endif
-#ifdef IP_UNBLOCK_SOURCE
-	XLAT(IP_UNBLOCK_SOURCE),
-#endif
-#ifdef IP_BLOCK_SOURCE
-	XLAT(IP_BLOCK_SOURCE),
-#endif
-#ifdef IP_ADD_SOURCE_MEMBERSHIP
-	XLAT(IP_ADD_SOURCE_MEMBERSHIP),
-#endif
-#ifdef IP_DROP_SOURCE_MEMBERSHIP
-	XLAT(IP_DROP_SOURCE_MEMBERSHIP),
-#endif
-#ifdef MCAST_JOIN_GROUP
-	XLAT(MCAST_JOIN_GROUP),
-#endif
-#ifdef MCAST_BLOCK_SOURCE
-	XLAT(MCAST_BLOCK_SOURCE),
-#endif
-#ifdef MCAST_UNBLOCK_SOURCE
-	XLAT(MCAST_UNBLOCK_SOURCE),
-#endif
-#ifdef MCAST_LEAVE_GROUP
-	XLAT(MCAST_LEAVE_GROUP),
-#endif
-#ifdef MCAST_JOIN_SOURCE_GROUP
-	XLAT(MCAST_JOIN_SOURCE_GROUP),
-#endif
-#ifdef MCAST_LEAVE_SOURCE_GROUP
-	XLAT(MCAST_LEAVE_SOURCE_GROUP),
-#endif
-#ifdef IP_MULTICAST_ALL
-	XLAT(IP_MULTICAST_ALL),
-#endif
-#ifdef IP_UNICAST_IF
-	XLAT(IP_UNICAST_IF),
-#endif
-	XLAT_END
-};
+#include "xlat/sockipoptions.h"
 #endif /* SOL_IP */
 
 #ifdef SOL_IPV6
-static const struct xlat sockipv6options[] = {
-#ifdef IPV6_ADDRFORM
-	XLAT(IPV6_ADDRFORM),
-#endif
-#ifdef MCAST_FILTER
-	XLAT(MCAST_FILTER),
-#endif
-#ifdef IPV6_PKTOPTIONS
-	XLAT(IPV6_PKTOPTIONS),
-#endif
-#ifdef IPV6_MTU
-	XLAT(IPV6_MTU),
-#endif
-#ifdef IPV6_V6ONLY
-	XLAT(IPV6_V6ONLY),
-#endif
-#ifdef IPV6_PKTINFO
-	XLAT(IPV6_PKTINFO),
-#endif
-#ifdef IPV6_HOPLIMIT
-	XLAT(IPV6_HOPLIMIT),
-#endif
-#ifdef IPV6_RTHDR
-	XLAT(IPV6_RTHDR),
-#endif
-#ifdef IPV6_HOPOPTS
-	XLAT(IPV6_HOPOPTS),
-#endif
-#ifdef IPV6_DSTOPTS
-	XLAT(IPV6_DSTOPTS),
-#endif
-#ifdef IPV6_FLOWINFO
-	XLAT(IPV6_FLOWINFO),
-#endif
-#ifdef IPV6_UNICAST_HOPS
-	XLAT(IPV6_UNICAST_HOPS),
-#endif
-#ifdef IPV6_MULTICAST_HOPS
-	XLAT(IPV6_MULTICAST_HOPS),
-#endif
-#ifdef IPV6_MULTICAST_LOOP
-	XLAT(IPV6_MULTICAST_LOOP),
-#endif
-#ifdef IPV6_MULTICAST_IF
-	XLAT(IPV6_MULTICAST_IF),
-#endif
-#ifdef IPV6_MTU_DISCOVER
-	XLAT(IPV6_MTU_DISCOVER),
-#endif
-#ifdef IPV6_RECVERR
-	XLAT(IPV6_RECVERR),
-#endif
-#ifdef IPV6_FLOWINFO_SEND
-	XLAT(IPV6_FLOWINFO_SEND),
-#endif
-#ifdef IPV6_ADD_MEMBERSHIP
-	XLAT(IPV6_ADD_MEMBERSHIP),
-#endif
-#ifdef IPV6_DROP_MEMBERSHIP
-	XLAT(IPV6_DROP_MEMBERSHIP),
-#endif
-#ifdef IPV6_ROUTER_ALERT
-	XLAT(IPV6_ROUTER_ALERT),
-#endif
-	XLAT_END
-};
+#include "xlat/sockipv6options.h"
 #endif /* SOL_IPV6 */
 
 #ifdef SOL_IPX
-static const struct xlat sockipxoptions[] = {
-	XLAT(IPX_TYPE),
-	XLAT_END
-};
+#include "xlat/sockipxoptions.h"
 #endif /* SOL_IPX */
 
 #ifdef SOL_RAW
-static const struct xlat sockrawoptions[] = {
-#if defined(ICMP_FILTER)
-	XLAT(ICMP_FILTER),
-#endif
-	XLAT_END
-};
+#include "xlat/sockrawoptions.h"
 #endif /* SOL_RAW */
 
 #ifdef SOL_PACKET
-static const struct xlat sockpacketoptions[] = {
-#ifdef PACKET_ADD_MEMBERSHIP
-	XLAT(PACKET_ADD_MEMBERSHIP),
-#endif
-#ifdef PACKET_DROP_MEMBERSHIP
-	XLAT(PACKET_DROP_MEMBERSHIP),
-#endif
-#if defined(PACKET_RECV_OUTPUT)
-	XLAT(PACKET_RECV_OUTPUT),
-#endif
-#if defined(PACKET_RX_RING)
-	XLAT(PACKET_RX_RING),
-#endif
-#if defined(PACKET_STATISTICS)
-	XLAT(PACKET_STATISTICS),
-#endif
-#if defined(PACKET_COPY_THRESH)
-	XLAT(PACKET_COPY_THRESH),
-#endif
-#if defined(PACKET_AUXDATA)
-	XLAT(PACKET_AUXDATA),
-#endif
-#if defined(PACKET_ORIGDEV)
-	XLAT(PACKET_ORIGDEV),
-#endif
-#if defined(PACKET_VERSION)
-	XLAT(PACKET_VERSION),
-#endif
-#if defined(PACKET_HDRLEN)
-	XLAT(PACKET_HDRLEN),
-#endif
-#if defined(PACKET_RESERVE)
-	XLAT(PACKET_RESERVE),
-#endif
-#if defined(PACKET_TX_RING)
-	XLAT(PACKET_TX_RING),
-#endif
-#if defined(PACKET_LOSS)
-	XLAT(PACKET_LOSS),
-#endif
-	XLAT_END
-};
+#include "xlat/sockpacketoptions.h"
 #endif /* SOL_PACKET */
 
 #ifdef SOL_SCTP
-static const struct xlat socksctpoptions[] = {
-#if defined(SCTP_RTOINFO)
-	XLAT(SCTP_RTOINFO),
-#endif
-#if defined(SCTP_ASSOCINFO)
-	XLAT(SCTP_ASSOCINFO),
-#endif
-#if defined(SCTP_INITMSG)
-	XLAT(SCTP_INITMSG),
-#endif
-#if defined(SCTP_NODELAY)
-	XLAT(SCTP_NODELAY),
-#endif
-#if defined(SCTP_AUTOCLOSE)
-	XLAT(SCTP_AUTOCLOSE),
-#endif
-#if defined(SCTP_SET_PEER_PRIMARY_ADDR)
-	XLAT(SCTP_SET_PEER_PRIMARY_ADDR),
-#endif
-#if defined(SCTP_PRIMARY_ADDR)
-	XLAT(SCTP_PRIMARY_ADDR),
-#endif
-#if defined(SCTP_ADAPTATION_LAYER)
-	XLAT(SCTP_ADAPTATION_LAYER),
-#endif
-#if defined(SCTP_DISABLE_FRAGMENTS)
-	XLAT(SCTP_DISABLE_FRAGMENTS),
-#endif
-#if defined(SCTP_PEER_ADDR_PARAMS)
-	XLAT(SCTP_PEER_ADDR_PARAMS),
-#endif
-#if defined(SCTP_DEFAULT_SEND_PARAM)
-	XLAT(SCTP_DEFAULT_SEND_PARAM),
-#endif
-#if defined(SCTP_EVENTS)
-	XLAT(SCTP_EVENTS),
-#endif
-#if defined(SCTP_I_WANT_MAPPED_V4_ADDR)
-	XLAT(SCTP_I_WANT_MAPPED_V4_ADDR),
-#endif
-#if defined(SCTP_MAXSEG)
-	XLAT(SCTP_MAXSEG),
-#endif
-#if defined(SCTP_STATUS)
-	XLAT(SCTP_STATUS),
-#endif
-#if defined(SCTP_GET_PEER_ADDR_INFO)
-	XLAT(SCTP_GET_PEER_ADDR_INFO),
-#endif
-#if defined(SCTP_DELAYED_ACK)
-	XLAT(SCTP_DELAYED_ACK),
-#endif
-#if defined(SCTP_CONTEXT)
-	XLAT(SCTP_CONTEXT),
-#endif
-#if defined(SCTP_FRAGMENT_INTERLEAVE)
-	XLAT(SCTP_FRAGMENT_INTERLEAVE),
-#endif
-#if defined(SCTP_PARTIAL_DELIVERY_POINT)
-	XLAT(SCTP_PARTIAL_DELIVERY_POINT),
-#endif
-#if defined(SCTP_MAX_BURST)
-	XLAT(SCTP_MAX_BURST),
-#endif
-#if defined(SCTP_AUTH_CHUNK)
-	XLAT(SCTP_AUTH_CHUNK),
-#endif
-#if defined(SCTP_HMAC_IDENT)
-	XLAT(SCTP_HMAC_IDENT),
-#endif
-#if defined(SCTP_AUTH_KEY)
-	XLAT(SCTP_AUTH_KEY),
-#endif
-#if defined(SCTP_AUTH_ACTIVE_KEY)
-	XLAT(SCTP_AUTH_ACTIVE_KEY),
-#endif
-#if defined(SCTP_AUTH_DELETE_KEY)
-	XLAT(SCTP_AUTH_DELETE_KEY),
-#endif
-#if defined(SCTP_PEER_AUTH_CHUNKS)
-	XLAT(SCTP_PEER_AUTH_CHUNKS),
-#endif
-#if defined(SCTP_LOCAL_AUTH_CHUNKS)
-	XLAT(SCTP_LOCAL_AUTH_CHUNKS),
-#endif
-#if defined(SCTP_GET_ASSOC_NUMBER)
-	XLAT(SCTP_GET_ASSOC_NUMBER),
-#endif
-
-	/* linux specific things */
-#if defined(SCTP_SOCKOPT_BINDX_ADD)
-	XLAT(SCTP_SOCKOPT_BINDX_ADD),
-#endif
-#if defined(SCTP_SOCKOPT_BINDX_REM)
-	XLAT(SCTP_SOCKOPT_BINDX_REM),
-#endif
-#if defined(SCTP_SOCKOPT_PEELOFF)
-	XLAT(SCTP_SOCKOPT_PEELOFF),
-#endif
-#if defined(SCTP_GET_PEER_ADDRS_NUM_OLD)
-	XLAT(SCTP_GET_PEER_ADDRS_NUM_OLD),
-#endif
-#if defined(SCTP_GET_PEER_ADDRS_OLD)
-	XLAT(SCTP_GET_PEER_ADDRS_OLD),
-#endif
-#if defined(SCTP_GET_LOCAL_ADDRS_NUM_OLD)
-	XLAT(SCTP_GET_LOCAL_ADDRS_NUM_OLD),
-#endif
-#if defined(SCTP_GET_LOCAL_ADDRS_OLD)
-	XLAT(SCTP_GET_LOCAL_ADDRS_OLD),
-#endif
-#if defined(SCTP_SOCKOPT_CONNECTX_OLD)
-	XLAT(SCTP_SOCKOPT_CONNECTX_OLD),
-#endif
-#if defined(SCTP_GET_PEER_ADDRS)
-	XLAT(SCTP_GET_PEER_ADDRS),
-#endif
-#if defined(SCTP_GET_LOCAL_ADDRS)
-	XLAT(SCTP_GET_LOCAL_ADDRS),
-#endif
-
-	XLAT_END
-};
+#include "xlat/socksctpoptions.h"
 #endif
 
 #if !defined(SOL_TCP) && defined(IPPROTO_TCP)
@@ -1245,149 +146,15 @@
 #endif
 
 #ifdef SOL_TCP
-static const struct xlat socktcpoptions[] = {
-	XLAT(TCP_NODELAY),
-	XLAT(TCP_MAXSEG),
-#ifdef TCP_CORK
-	XLAT(TCP_CORK),
-#endif
-#ifdef TCP_KEEPIDLE
-	XLAT(TCP_KEEPIDLE),
-#endif
-#ifdef TCP_KEEPINTVL
-	XLAT(TCP_KEEPINTVL),
-#endif
-#ifdef TCP_KEEPCNT
-	XLAT(TCP_KEEPCNT),
-#endif
-#ifdef TCP_SYNCNT
-	XLAT(TCP_SYNCNT),
-#endif
-#ifdef TCP_LINGER2
-	XLAT(TCP_LINGER2),
-#endif
-#ifdef TCP_DEFER_ACCEPT
-	XLAT(TCP_DEFER_ACCEPT),
-#endif
-#ifdef TCP_WINDOW_CLAMP
-	XLAT(TCP_WINDOW_CLAMP),
-#endif
-#ifdef TCP_INFO
-	XLAT(TCP_INFO),
-#endif
-#ifdef TCP_QUICKACK
-	XLAT(TCP_QUICKACK),
-#endif
-#ifdef TCP_CONGESTION
-	XLAT(TCP_CONGESTION),
-#endif
-#ifdef TCP_MD5SIG
-	XLAT(TCP_MD5SIG),
-#endif
-#ifdef TCP_COOKIE_TRANSACTIONS
-	XLAT(TCP_COOKIE_TRANSACTIONS),
-#endif
-#ifdef TCP_THIN_LINEAR_TIMEOUTS
-	XLAT(TCP_THIN_LINEAR_TIMEOUTS),
-#endif
-#ifdef TCP_THIN_DUPACK
-	XLAT(TCP_THIN_DUPACK),
-#endif
-#ifdef TCP_USER_TIMEOUT
-	XLAT(TCP_USER_TIMEOUT),
-#endif
-#ifdef TCP_REPAIR
-	XLAT(TCP_REPAIR),
-#endif
-#ifdef TCP_REPAIR_QUEUE
-	XLAT(TCP_REPAIR_QUEUE),
-#endif
-#ifdef TCP_QUEUE_SEQ
-	XLAT(TCP_QUEUE_SEQ),
-#endif
-#ifdef TCP_REPAIR_OPTIONS
-	XLAT(TCP_REPAIR_OPTIONS),
-#endif
-#ifdef TCP_FASTOPEN
-	XLAT(TCP_FASTOPEN),
-#endif
-#ifdef TCP_TIMESTAMP
-	XLAT(TCP_TIMESTAMP),
-#endif
-	XLAT_END
-};
+#include "xlat/socktcpoptions.h"
 #endif /* SOL_TCP */
 
 #ifdef SOL_RAW
-static const struct xlat icmpfilterflags[] = {
-#if defined(ICMP_ECHOREPLY)
-	{ (1<<ICMP_ECHOREPLY),		"ICMP_ECHOREPLY"	},
-#endif
-#if defined(ICMP_DEST_UNREACH)
-	{ (1<<ICMP_DEST_UNREACH),	"ICMP_DEST_UNREACH"	},
-#endif
-#if defined(ICMP_SOURCE_QUENCH)
-	{ (1<<ICMP_SOURCE_QUENCH),	"ICMP_SOURCE_QUENCH"	},
-#endif
-#if defined(ICMP_REDIRECT)
-	{ (1<<ICMP_REDIRECT),		"ICMP_REDIRECT"		},
-#endif
-#if defined(ICMP_ECHO)
-	{ (1<<ICMP_ECHO),		"ICMP_ECHO"		},
-#endif
-#if defined(ICMP_TIME_EXCEEDED)
-	{ (1<<ICMP_TIME_EXCEEDED),	"ICMP_TIME_EXCEEDED"	},
-#endif
-#if defined(ICMP_PARAMETERPROB)
-	{ (1<<ICMP_PARAMETERPROB),	"ICMP_PARAMETERPROB"	},
-#endif
-#if defined(ICMP_TIMESTAMP)
-	{ (1<<ICMP_TIMESTAMP),		"ICMP_TIMESTAMP"	},
-#endif
-#if defined(ICMP_TIMESTAMPREPLY)
-	{ (1<<ICMP_TIMESTAMPREPLY),	"ICMP_TIMESTAMPREPLY"	},
-#endif
-#if defined(ICMP_INFO_REQUEST)
-	{ (1<<ICMP_INFO_REQUEST),	"ICMP_INFO_REQUEST"	},
-#endif
-#if defined(ICMP_INFO_REPLY)
-	{ (1<<ICMP_INFO_REPLY),		"ICMP_INFO_REPLY"	},
-#endif
-#if defined(ICMP_ADDRESS)
-	{ (1<<ICMP_ADDRESS),		"ICMP_ADDRESS"		},
-#endif
-#if defined(ICMP_ADDRESSREPLY)
-	{ (1<<ICMP_ADDRESSREPLY),	"ICMP_ADDRESSREPLY"	},
-#endif
-	XLAT_END
-};
+#include "xlat/icmpfilterflags.h"
 #endif /* SOL_RAW */
 
 #if defined(AF_PACKET) /* from e.g. linux/if_packet.h */
-static const struct xlat af_packet_types[] = {
-#if defined(PACKET_HOST)
-	XLAT(PACKET_HOST),
-#endif
-#if defined(PACKET_BROADCAST)
-	XLAT(PACKET_BROADCAST),
-#endif
-#if defined(PACKET_MULTICAST)
-	XLAT(PACKET_MULTICAST),
-#endif
-#if defined(PACKET_OTHERHOST)
-	XLAT(PACKET_OTHERHOST),
-#endif
-#if defined(PACKET_OUTGOING)
-	XLAT(PACKET_OUTGOING),
-#endif
-#if defined(PACKET_LOOPBACK)
-	XLAT(PACKET_LOOPBACK),
-#endif
-#if defined(PACKET_FASTROUTE)
-	XLAT(PACKET_FASTROUTE),
-#endif
-	XLAT_END
-};
+#include "xlat/af_packet_types.h"
 #endif /* defined(AF_PACKET) */
 
 void
@@ -1534,15 +301,7 @@
 }
 
 #if HAVE_SENDMSG
-static const struct xlat scmvals[] = {
-#ifdef SCM_RIGHTS
-	XLAT(SCM_RIGHTS),
-#endif
-#ifdef SCM_CREDENTIALS
-	XLAT(SCM_CREDENTIALS),
-#endif
-	XLAT_END
-};
+#include "xlat/scmvals.h"
 
 static void
 printcmsghdr(struct tcb *tcp, unsigned long addr, unsigned long len)
@@ -1574,7 +333,7 @@
 			while ((char *) fds < ((char *) cmsg + cmsg_len)) {
 				if (!first)
 					tprints(", ");
-				tprintf("%d", *fds++);
+				printfd(tcp, *fds++);
 				first = 0;
 			}
 			tprints("}}");
@@ -2052,12 +811,7 @@
 
 #endif /* HAVE_SENDMSG */
 
-static const struct xlat shutdown_modes[] = {
-	{ 0,	"SHUT_RD"	},
-	{ 1,	"SHUT_WR"	},
-	{ 2,	"SHUT_RDWR"	},
-	XLAT_END
-};
+#include "xlat/shutdown_modes.h"
 
 int
 sys_shutdown(struct tcb *tcp)
diff --git a/process.c b/process.c
index af203ea..a880f9e 100644
--- a/process.c
+++ b/process.c
@@ -105,178 +105,7 @@
 #ifdef HAVE_PRCTL
 # include <sys/prctl.h>
 
-static const struct xlat prctl_options[] = {
-#ifdef PR_MAXPROCS
-	XLAT(PR_MAXPROCS),
-#endif
-#ifdef PR_ISBLOCKED
-	XLAT(PR_ISBLOCKED),
-#endif
-#ifdef PR_SETSTACKSIZE
-	XLAT(PR_SETSTACKSIZE),
-#endif
-#ifdef PR_GETSTACKSIZE
-	XLAT(PR_GETSTACKSIZE),
-#endif
-#ifdef PR_MAXPPROCS
-	XLAT(PR_MAXPPROCS),
-#endif
-#ifdef PR_UNBLKONEXEC
-	XLAT(PR_UNBLKONEXEC),
-#endif
-#ifdef PR_ATOMICSIM
-	XLAT(PR_ATOMICSIM),
-#endif
-#ifdef PR_SETEXITSIG
-	XLAT(PR_SETEXITSIG),
-#endif
-#ifdef PR_RESIDENT
-	XLAT(PR_RESIDENT),
-#endif
-#ifdef PR_ATTACHADDR
-	XLAT(PR_ATTACHADDR),
-#endif
-#ifdef PR_DETACHADDR
-	XLAT(PR_DETACHADDR),
-#endif
-#ifdef PR_TERMCHILD
-	XLAT(PR_TERMCHILD),
-#endif
-#ifdef PR_GETSHMASK
-	XLAT(PR_GETSHMASK),
-#endif
-#ifdef PR_GETNSHARE
-	XLAT(PR_GETNSHARE),
-#endif
-#ifdef PR_COREPID
-	XLAT(PR_COREPID),
-#endif
-#ifdef PR_ATTACHADDRPERM
-	XLAT(PR_ATTACHADDRPERM),
-#endif
-#ifdef PR_PTHREADEXIT
-	XLAT(PR_PTHREADEXIT),
-#endif
-
-#ifdef PR_SET_PDEATHSIG
-	XLAT(PR_SET_PDEATHSIG),
-#endif
-#ifdef PR_GET_PDEATHSIG
-	XLAT(PR_GET_PDEATHSIG),
-#endif
-#ifdef PR_GET_DUMPABLE
-	XLAT(PR_GET_DUMPABLE),
-#endif
-#ifdef PR_SET_DUMPABLE
-	XLAT(PR_SET_DUMPABLE),
-#endif
-#ifdef PR_GET_UNALIGN
-	XLAT(PR_GET_UNALIGN),
-#endif
-#ifdef PR_SET_UNALIGN
-	XLAT(PR_SET_UNALIGN),
-#endif
-#ifdef PR_GET_KEEPCAPS
-	XLAT(PR_GET_KEEPCAPS),
-#endif
-#ifdef PR_SET_KEEPCAPS
-	XLAT(PR_SET_KEEPCAPS),
-#endif
-#ifdef PR_GET_FPEMU
-	XLAT(PR_GET_FPEMU),
-#endif
-#ifdef PR_SET_FPEMU
-	XLAT(PR_SET_FPEMU),
-#endif
-#ifdef PR_GET_FPEXC
-	XLAT(PR_GET_FPEXC),
-#endif
-#ifdef PR_SET_FPEXC
-	XLAT(PR_SET_FPEXC),
-#endif
-#ifdef PR_GET_TIMING
-	XLAT(PR_GET_TIMING),
-#endif
-#ifdef PR_SET_TIMING
-	XLAT(PR_SET_TIMING),
-#endif
-#ifdef PR_SET_NAME
-	XLAT(PR_SET_NAME),
-#endif
-#ifdef PR_GET_NAME
-	XLAT(PR_GET_NAME),
-#endif
-#ifdef PR_GET_ENDIAN
-	XLAT(PR_GET_ENDIAN),
-#endif
-#ifdef PR_SET_ENDIAN
-	XLAT(PR_SET_ENDIAN),
-#endif
-#ifdef PR_GET_SECCOMP
-	XLAT(PR_GET_SECCOMP),
-#endif
-#ifdef PR_SET_SECCOMP
-	XLAT(PR_SET_SECCOMP),
-#endif
-#ifdef PR_CAPBSET_READ
-	XLAT(PR_CAPBSET_READ),
-#endif
-#ifdef PR_CAPBSET_DROP
-	XLAT(PR_CAPBSET_DROP),
-#endif
-#ifdef PR_GET_TSC
-	XLAT(PR_GET_TSC),
-#endif
-#ifdef PR_SET_TSC
-	XLAT(PR_SET_TSC),
-#endif
-#ifdef PR_GET_SECUREBITS
-	XLAT(PR_GET_SECUREBITS),
-#endif
-#ifdef PR_SET_SECUREBITS
-	XLAT(PR_SET_SECUREBITS),
-#endif
-#ifdef PR_SET_TIMERSLACK
-	XLAT(PR_SET_TIMERSLACK),
-#endif
-#ifdef PR_GET_TIMERSLACK
-	XLAT(PR_GET_TIMERSLACK),
-#endif
-#ifdef PR_TASK_PERF_EVENTS_DISABLE
-	XLAT(PR_TASK_PERF_EVENTS_DISABLE),
-#endif
-#ifdef PR_TASK_PERF_EVENTS_ENABLE
-	XLAT(PR_TASK_PERF_EVENTS_ENABLE),
-#endif
-#ifdef PR_MCE_KILL
-	XLAT(PR_MCE_KILL),
-#endif
-#ifdef PR_MCE_KILL_GET
-	XLAT(PR_MCE_KILL_GET),
-#endif
-#ifdef PR_SET_MM
-	XLAT(PR_SET_MM),
-#endif
-#ifdef PR_SET_PTRACER
-	XLAT(PR_SET_PTRACER),
-#endif
-#ifdef PR_SET_CHILD_SUBREAPER
-	XLAT(PR_SET_CHILD_SUBREAPER),
-#endif
-#ifdef PR_GET_CHILD_SUBREAPER
-	XLAT(PR_GET_CHILD_SUBREAPER),
-#endif
-#ifdef PR_SET_NO_NEW_PRIVS
-	XLAT(PR_SET_NO_NEW_PRIVS),
-#endif
-#ifdef PR_GET_NO_NEW_PRIVS
-	XLAT(PR_GET_NO_NEW_PRIVS),
-#endif
-#ifdef PR_GET_TID_ADDRESS
-	XLAT(PR_GET_TID_ADDRESS),
-#endif
-	XLAT_END
-};
+#include "xlat/prctl_options.h"
 
 static const char *
 unalignctl_string(unsigned int ctl)
@@ -390,7 +219,7 @@
 sys_sethostname(struct tcb *tcp)
 {
 	if (entering(tcp)) {
-		printpathn(tcp, tcp->u_arg[0], tcp->u_arg[1]);
+		printstr(tcp, tcp->u_arg[0], tcp->u_arg[1]);
 		tprintf(", %lu", tcp->u_arg[1]);
 	}
 	return 0;
@@ -404,7 +233,7 @@
 		if (syserror(tcp))
 			tprintf("%#lx", tcp->u_arg[0]);
 		else
-			printpath(tcp, tcp->u_arg[0]);
+			printstr(tcp, tcp->u_arg[0], -1);
 		tprintf(", %lu", tcp->u_arg[1]);
 	}
 	return 0;
@@ -415,7 +244,7 @@
 sys_setdomainname(struct tcb *tcp)
 {
 	if (entering(tcp)) {
-		printpathn(tcp, tcp->u_arg[0], tcp->u_arg[1]);
+		printstr(tcp, tcp->u_arg[0], tcp->u_arg[1]);
 		tprintf(", %lu", tcp->u_arg[1]);
 	}
 	return 0;
@@ -464,32 +293,7 @@
 #define CLONE_NEWNET		0x40000000	/* New network namespace */
 #define CLONE_IO		0x80000000	/* Clone io context */
 
-static const struct xlat clone_flags[] = {
-	XLAT(CLONE_VM),
-	XLAT(CLONE_FS),
-	XLAT(CLONE_FILES),
-	XLAT(CLONE_SIGHAND),
-	XLAT(CLONE_IDLETASK),
-	XLAT(CLONE_PTRACE),
-	XLAT(CLONE_VFORK),
-	XLAT(CLONE_PARENT),
-	XLAT(CLONE_THREAD),
-	XLAT(CLONE_NEWNS),
-	XLAT(CLONE_SYSVSEM),
-	XLAT(CLONE_SETTLS),
-	XLAT(CLONE_PARENT_SETTID),
-	XLAT(CLONE_CHILD_CLEARTID),
-	XLAT(CLONE_UNTRACED),
-	XLAT(CLONE_CHILD_SETTID),
-	XLAT(CLONE_STOPPED),
-	XLAT(CLONE_NEWUTS),
-	XLAT(CLONE_NEWIPC),
-	XLAT(CLONE_NEWUSER),
-	XLAT(CLONE_NEWPID),
-	XLAT(CLONE_NEWNET),
-	XLAT(CLONE_IO),
-	XLAT_END
-};
+#include "xlat/clone_flags.h"
 
 #if defined I386 || defined X86_64 || defined X32
 extern void print_user_desc(struct tcb *, long);
@@ -585,6 +389,17 @@
 }
 
 int
+sys_setns(struct tcb *tcp)
+{
+	if (entering(tcp)) {
+		printfd(tcp, tcp->u_arg[0]);
+		tprints(", ");
+		printflags(clone_flags, tcp->u_arg[1], "CLONE_???");
+	}
+	return 0;
+}
+
+int
 sys_unshare(struct tcb *tcp)
 {
 	if (entering(tcp))
@@ -600,14 +415,6 @@
 	return 0;
 }
 
-int
-sys_vfork(struct tcb *tcp)
-{
-	if (exiting(tcp))
-		return RVAL_UDECIMAL;
-	return 0;
-}
-
 int sys_getuid(struct tcb *tcp)
 {
 	if (exiting(tcp))
@@ -1005,37 +812,7 @@
 #define __WCLONE	0x80000000
 #endif
 
-static const struct xlat wait4_options[] = {
-	XLAT(WNOHANG),
-#ifndef WSTOPPED
-	XLAT(WUNTRACED),
-#endif
-#ifdef WEXITED
-	XLAT(WEXITED),
-#endif
-#ifdef WTRAPPED
-	XLAT(WTRAPPED),
-#endif
-#ifdef WSTOPPED
-	XLAT(WSTOPPED),
-#endif
-#ifdef WCONTINUED
-	XLAT(WCONTINUED),
-#endif
-#ifdef WNOWAIT
-	XLAT(WNOWAIT),
-#endif
-#ifdef __WCLONE
-	XLAT(__WCLONE),
-#endif
-#ifdef __WALL
-	XLAT(__WALL),
-#endif
-#ifdef __WNOTHREAD
-	XLAT(__WNOTHREAD),
-#endif
-	XLAT_END
-};
+#include "xlat/wait4_options.h"
 
 #if !defined WCOREFLAG && defined WCOREFLG
 # define WCOREFLAG WCOREFLG
@@ -1160,30 +937,7 @@
 }
 #endif
 
-static const struct xlat waitid_types[] = {
-	XLAT(P_PID),
-#ifdef P_PPID
-	XLAT(P_PPID),
-#endif
-	XLAT(P_PGID),
-#ifdef P_SID
-	XLAT(P_SID),
-#endif
-#ifdef P_CID
-	XLAT(P_CID),
-#endif
-#ifdef P_UID
-	XLAT(P_UID),
-#endif
-#ifdef P_GID
-	XLAT(P_GID),
-#endif
-	XLAT(P_ALL),
-#ifdef P_LWPID
-	XLAT(P_LWPID),
-#endif
-	XLAT_END
-};
+#include "xlat/waitid_types.h"
 
 int
 sys_waitid(struct tcb *tcp)
@@ -1240,183 +994,9 @@
 	return 0;
 }
 
-static const struct xlat ptrace_cmds[] = {
-	XLAT(PTRACE_TRACEME),
-	XLAT(PTRACE_PEEKTEXT),
-	XLAT(PTRACE_PEEKDATA),
-	XLAT(PTRACE_PEEKUSER),
-	XLAT(PTRACE_POKETEXT),
-	XLAT(PTRACE_POKEDATA),
-	XLAT(PTRACE_POKEUSER),
-	XLAT(PTRACE_CONT),
-	XLAT(PTRACE_KILL),
-	XLAT(PTRACE_SINGLESTEP),
-	XLAT(PTRACE_ATTACH),
-	XLAT(PTRACE_DETACH),
-#ifdef PTRACE_GETREGS
-	XLAT(PTRACE_GETREGS),
-#endif
-#ifdef PTRACE_SETREGS
-	XLAT(PTRACE_SETREGS),
-#endif
-#ifdef PTRACE_GETFPREGS
-	XLAT(PTRACE_GETFPREGS),
-#endif
-#ifdef PTRACE_SETFPREGS
-	XLAT(PTRACE_SETFPREGS),
-#endif
-#ifdef PTRACE_GETFPXREGS
-	XLAT(PTRACE_GETFPXREGS),
-#endif
-#ifdef PTRACE_SETFPXREGS
-	XLAT(PTRACE_SETFPXREGS),
-#endif
-#ifdef PTRACE_GETVRREGS
-	XLAT(PTRACE_GETVRREGS),
-#endif
-#ifdef PTRACE_SETVRREGS
-	XLAT(PTRACE_SETVRREGS),
-#endif
-#ifdef PTRACE_SETOPTIONS
-	XLAT(PTRACE_SETOPTIONS),
-#endif
-#ifdef PTRACE_GETEVENTMSG
-	XLAT(PTRACE_GETEVENTMSG),
-#endif
-#ifdef PTRACE_GETSIGINFO
-	XLAT(PTRACE_GETSIGINFO),
-#endif
-#ifdef PTRACE_SETSIGINFO
-	XLAT(PTRACE_SETSIGINFO),
-#endif
-#ifdef PTRACE_GETREGSET
-	XLAT(PTRACE_GETREGSET),
-#endif
-#ifdef PTRACE_SETREGSET
-	XLAT(PTRACE_SETREGSET),
-#endif
-#ifdef PTRACE_SET_SYSCALL
-	XLAT(PTRACE_SET_SYSCALL),
-#endif
-#ifdef PTRACE_SEIZE
-	XLAT(PTRACE_SEIZE),
-#endif
-#ifdef PTRACE_INTERRUPT
-	XLAT(PTRACE_INTERRUPT),
-#endif
-#ifdef PTRACE_LISTEN
-	XLAT(PTRACE_LISTEN),
-#endif
-	XLAT(PTRACE_SYSCALL),
-
-	XLAT_END
-};
-
-#ifdef PTRACE_SETOPTIONS
-static const struct xlat ptrace_setoptions_flags[] = {
-# ifdef PTRACE_O_TRACESYSGOOD
-	XLAT(PTRACE_O_TRACESYSGOOD),
-# endif
-# ifdef PTRACE_O_TRACEFORK
-	XLAT(PTRACE_O_TRACEFORK),
-# endif
-# ifdef PTRACE_O_TRACEVFORK
-	XLAT(PTRACE_O_TRACEVFORK),
-# endif
-# ifdef PTRACE_O_TRACECLONE
-	XLAT(PTRACE_O_TRACECLONE),
-# endif
-# ifdef PTRACE_O_TRACEEXEC
-	XLAT(PTRACE_O_TRACEEXEC),
-# endif
-# ifdef PTRACE_O_TRACEVFORKDONE
-	XLAT(PTRACE_O_TRACEVFORKDONE),
-# endif
-# ifdef PTRACE_O_TRACEEXIT
-	XLAT(PTRACE_O_TRACEEXIT),
-# endif
-# ifdef PTRACE_O_TRACESECCOMP
-	XLAT(PTRACE_O_TRACESECCOMP),
-# endif
-# ifdef PTRACE_O_EXITKILL
-	XLAT(PTRACE_O_EXITKILL),
-# endif
-	XLAT_END
-};
-#endif /* PTRACE_SETOPTIONS */
-
-static const struct xlat nt_descriptor_types[] = {
-#ifdef NT_PRSTATUS
-	XLAT(NT_PRSTATUS),
-#endif
-#ifdef NT_FPREGSET
-	XLAT(NT_FPREGSET),
-#endif
-#ifdef NT_PRPSINFO
-	XLAT(NT_PRPSINFO),
-#endif
-#ifdef NT_PRXREG
-	XLAT(NT_PRXREG),
-#endif
-#ifdef NT_TASKSTRUCT
-	XLAT(NT_TASKSTRUCT),
-#endif
-#ifdef NT_PLATFORM
-	XLAT(NT_PLATFORM),
-#endif
-#ifdef NT_AUXV
-	XLAT(NT_AUXV),
-#endif
-#ifdef NT_GWINDOWS
-	XLAT(NT_GWINDOWS),
-#endif
-#ifdef NT_ASRS
-	XLAT(NT_ASRS),
-#endif
-#ifdef NT_PSTATUS
-	XLAT(NT_PSTATUS),
-#endif
-#ifdef NT_PSINFO
-	XLAT(NT_PSINFO),
-#endif
-#ifdef NT_PRCRED
-	XLAT(NT_PRCRED),
-#endif
-#ifdef NT_UTSNAME
-	XLAT(NT_UTSNAME),
-#endif
-#ifdef NT_LWPSTATUS
-	XLAT(NT_LWPSTATUS),
-#endif
-#ifdef NT_LWPSINFO
-	XLAT(NT_LWPSINFO),
-#endif
-#ifdef NT_PRFPXREG
-	XLAT(NT_PRFPXREG),
-#endif
-#ifdef NT_PRXFPREG
-	XLAT(NT_PRXFPREG),
-#endif
-#ifdef NT_PPC_VMX
-	XLAT(NT_PPC_VMX),
-#endif
-#ifdef NT_PPC_SPE
-	XLAT(NT_PPC_SPE),
-#endif
-#ifdef NT_PPC_VSX
-	XLAT(NT_PPC_VSX),
-#endif
-#ifdef NT_386_TLS
-	XLAT(NT_386_TLS),
-#endif
-#ifdef NT_386_IOPERM
-	XLAT(NT_386_IOPERM),
-#endif
-#ifdef NT_X86_XSTATE
-	XLAT(NT_X86_XSTATE),
-#endif
-	XLAT_END
-};
+#include "xlat/ptrace_cmds.h"
+#include "xlat/ptrace_setoptions_flags.h"
+#include "xlat/nt_descriptor_types.h"
 
 #define uoff(member)	offsetof(struct user, member)
 
@@ -2689,39 +2269,7 @@
 #ifndef FUTEX_CMP_REQUEUE_PI_PRIVATE
 # define FUTEX_CMP_REQUEUE_PI_PRIVATE	(FUTEX_CMP_REQUEUE_PI | FUTEX_PRIVATE_FLAG)
 #endif
-static const struct xlat futexops[] = {
-	XLAT(FUTEX_WAIT),
-	XLAT(FUTEX_WAKE),
-	XLAT(FUTEX_FD),
-	XLAT(FUTEX_REQUEUE),
-	XLAT(FUTEX_CMP_REQUEUE),
-	XLAT(FUTEX_WAKE_OP),
-	XLAT(FUTEX_LOCK_PI),
-	XLAT(FUTEX_UNLOCK_PI),
-	XLAT(FUTEX_TRYLOCK_PI),
-	XLAT(FUTEX_WAIT_BITSET),
-	XLAT(FUTEX_WAKE_BITSET),
-	XLAT(FUTEX_WAIT_REQUEUE_PI),
-	XLAT(FUTEX_CMP_REQUEUE_PI),
-	XLAT(FUTEX_WAIT_PRIVATE),
-	XLAT(FUTEX_WAKE_PRIVATE),
-	XLAT(FUTEX_FD|FUTEX_PRIVATE_FLAG),
-	XLAT(FUTEX_REQUEUE_PRIVATE),
-	XLAT(FUTEX_CMP_REQUEUE_PRIVATE),
-	XLAT(FUTEX_WAKE_OP_PRIVATE),
-	XLAT(FUTEX_LOCK_PI_PRIVATE),
-	XLAT(FUTEX_UNLOCK_PI_PRIVATE),
-	XLAT(FUTEX_TRYLOCK_PI_PRIVATE),
-	XLAT(FUTEX_WAIT_BITSET_PRIVATE),
-	XLAT(FUTEX_WAKE_BITSET_PRIVATE),
-	XLAT(FUTEX_WAIT_REQUEUE_PI_PRIVATE),
-	XLAT(FUTEX_CMP_REQUEUE_PI_PRIVATE),
-	XLAT(FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME),
-	XLAT(FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME),
-	XLAT(FUTEX_WAIT_REQUEUE_PI|FUTEX_CLOCK_REALTIME),
-	XLAT(FUTEX_WAIT_REQUEUE_PI_PRIVATE|FUTEX_CLOCK_REALTIME),
-	XLAT_END
-};
+#include "xlat/futexops.h"
 #ifndef FUTEX_OP_SET
 # define FUTEX_OP_SET		0
 # define FUTEX_OP_ADD		1
@@ -2735,23 +2283,8 @@
 # define FUTEX_OP_CMP_GT	4
 # define FUTEX_OP_CMP_GE	5
 #endif
-static const struct xlat futexwakeops[] = {
-	XLAT(FUTEX_OP_SET),
-	XLAT(FUTEX_OP_ADD),
-	XLAT(FUTEX_OP_OR),
-	XLAT(FUTEX_OP_ANDN),
-	XLAT(FUTEX_OP_XOR),
-	XLAT_END
-};
-static const struct xlat futexwakecmps[] = {
-	XLAT(FUTEX_OP_CMP_EQ),
-	XLAT(FUTEX_OP_CMP_NE),
-	XLAT(FUTEX_OP_CMP_LT),
-	XLAT(FUTEX_OP_CMP_LE),
-	XLAT(FUTEX_OP_CMP_GT),
-	XLAT(FUTEX_OP_CMP_GE),
-	XLAT_END
-};
+#include "xlat/futexwakeops.h"
+#include "xlat/futexwakecmps.h"
 
 int
 sys_futex(struct tcb *tcp)
@@ -2877,12 +2410,7 @@
 	return 0;
 }
 
-static const struct xlat schedulers[] = {
-	XLAT(SCHED_OTHER),
-	XLAT(SCHED_RR),
-	XLAT(SCHED_FIFO),
-	XLAT_END
-};
+#include "xlat/schedulers.h"
 
 int
 sys_sched_getscheduler(struct tcb *tcp)
@@ -2966,13 +2494,7 @@
 #if defined X86_64 || defined X32
 # include <asm/prctl.h>
 
-static const struct xlat archvals[] = {
-	XLAT(ARCH_SET_GS),
-	XLAT(ARCH_SET_FS),
-	XLAT(ARCH_GET_FS),
-	XLAT(ARCH_GET_GS),
-	XLAT_END
-};
+#include "xlat/archvals.h"
 
 int
 sys_arch_prctl(struct tcb *tcp)
diff --git a/ptp.c b/ptp.c
index 773f3d5..1d9cf24 100644
--- a/ptp.c
+++ b/ptp.c
@@ -2,13 +2,7 @@
 #include <sys/ioctl.h>
 #include <linux/ptp_clock.h>
 
-static const struct xlat ptp_flags_options[] = {
-	XLAT(PTP_ENABLE_FEATURE),
-	XLAT(PTP_RISING_EDGE),
-	XLAT(PTP_FALLING_EDGE),
-	XLAT_END
-};
-
+#include "xlat/ptp_flags_options.h"
 
 int ptp_ioctl(struct tcb *tcp, long code, long arg)
 {
diff --git a/qemu_multiarch_testing/README b/qemu_multiarch_testing/README
index 712b953..756da24 100644
--- a/qemu_multiarch_testing/README
+++ b/qemu_multiarch_testing/README
@@ -3,7 +3,7 @@
 * Put a autoconf'ed strace source tree into hdc.dir/strace dir.
 For example, this should work:
 git clone git://strace.git.sourceforge.net/gitroot/strace/strace &&
-cd strace && autoreconf -i -f
+cd strace && ./bootstrap
 
 * Run ./make-hdc-img.sh: it will generate ext2 image file,
 hdc.img, from hdc.dir/* data. This requires root for loop mount.
diff --git a/quota.c b/quota.c
index a13610f..f9a1bc5 100644
--- a/quota.c
+++ b/quota.c
@@ -76,64 +76,18 @@
 #define Q_XQUOTARM	XQM_CMD(0x6)
 #define Q_XQUOTASYNC	XQM_CMD(0x7)
 
-static const struct xlat quotacmds[] = {
-	XLAT(Q_V1_QUOTAON),
-	XLAT(Q_V1_QUOTAOFF),
-	XLAT(Q_V1_GETQUOTA),
-	XLAT(Q_V1_SETQUOTA),
-	XLAT(Q_V1_SETUSE),
-	XLAT(Q_V1_SYNC),
-	XLAT(Q_SETQLIM),
-	XLAT(Q_V1_GETSTATS),
-	XLAT(Q_V1_RSQUASH),
-
-	XLAT(Q_V2_GETQUOTA),
-	XLAT(Q_V2_SETQUOTA),
-	XLAT(Q_V2_SETUSE),
-	XLAT(Q_V2_GETINFO),
-	XLAT(Q_V2_SETINFO),
-	XLAT(Q_V2_SETGRACE),
-	XLAT(Q_V2_SETFLAGS),
-	XLAT(Q_V2_GETSTATS),
-
-	XLAT(Q_SYNC),
-	XLAT(Q_QUOTAON),
-	XLAT(Q_QUOTAOFF),
-	XLAT(Q_GETFMT),
-	XLAT(Q_GETINFO),
-	XLAT(Q_SETINFO),
-	XLAT(Q_GETQUOTA),
-	XLAT(Q_SETQUOTA),
-
-	XLAT(Q_XQUOTAON),
-	XLAT(Q_XQUOTAOFF),
-	XLAT(Q_XGETQUOTA),
-	XLAT(Q_XSETQLIM),
-	XLAT(Q_XGETQSTAT),
-	XLAT(Q_XQUOTARM),
-	XLAT(Q_XQUOTASYNC),
-
-	XLAT_END
-};
+#include "xlat/quotacmds.h"
 
 #define USRQUOTA 0
 #define GRPQUOTA 1
 
-static const struct xlat quotatypes[] = {
-	XLAT(USRQUOTA),
-	XLAT(GRPQUOTA),
-	XLAT_END
-};
+#include "xlat/quotatypes.h"
 
 /* Quota format identifiers */
 #define QFMT_VFS_OLD 1
 #define QFMT_VFS_V0  2
 
-static const struct xlat quota_formats[] = {
-	XLAT(QFMT_VFS_OLD),
-	XLAT(QFMT_VFS_V0),
-	XLAT_END
-};
+#include "xlat/quota_formats.h"
 
 #define XFS_QUOTA_UDQ_ACCT	(1<<0)	/* user quota accounting */
 #define XFS_QUOTA_UDQ_ENFD	(1<<1)	/* user quota limits enforcement */
@@ -144,20 +98,8 @@
 #define XFS_PROJ_QUOTA		(1<<1)	/* (IRIX) project quota type */
 #define XFS_GROUP_QUOTA		(1<<2)	/* group quota type */
 
-static const struct xlat xfs_quota_flags[] = {
-	XLAT(XFS_QUOTA_UDQ_ACCT),
-	XLAT(XFS_QUOTA_UDQ_ENFD),
-	XLAT(XFS_QUOTA_GDQ_ACCT),
-	XLAT(XFS_QUOTA_GDQ_ENFD),
-	XLAT_END
-};
-
-static const struct xlat xfs_dqblk_flags[] = {
-	XLAT(XFS_USER_QUOTA),
-	XLAT(XFS_PROJ_QUOTA),
-	XLAT(XFS_GROUP_QUOTA),
-	XLAT_END
-};
+#include "xlat/xfs_quota_flags.h"
+#include "xlat/xfs_dqblk_flags.h"
 
 /*
  * Following flags are used to specify which fields are valid
@@ -169,15 +111,7 @@
 #define QIF_BTIME	16
 #define QIF_ITIME	32
 
-static const struct xlat if_dqblk_valid[] = {
-	XLAT(QIF_BLIMITS),
-	XLAT(QIF_SPACE),
-	XLAT(QIF_ILIMITS),
-	XLAT(QIF_INODES),
-	XLAT(QIF_BTIME),
-	XLAT(QIF_ITIME),
-	XLAT_END
-};
+#include "xlat/if_dqblk_valid.h"
 
 struct if_dqblk
 {
@@ -249,12 +183,7 @@
 #define IIF_IGRACE	2
 #define IIF_FLAGS	4
 
-static const struct xlat if_dqinfo_valid[] = {
-	XLAT(IIF_BGRACE),
-	XLAT(IIF_IGRACE),
-	XLAT(IIF_FLAGS),
-	XLAT_END
-};
+#include "xlat/if_dqinfo_valid.h"
 
 struct if_dqinfo
 {
diff --git a/reboot.c b/reboot.c
index f8c3de7..397a126 100644
--- a/reboot.c
+++ b/reboot.c
@@ -1,30 +1,9 @@
 #include "defs.h"
 #include <linux/reboot.h>
 
-static const struct xlat bootflags1[] = {
-	XLAT(LINUX_REBOOT_MAGIC1),
-	XLAT_END
-};
-
-static const struct xlat bootflags2[] = {
-	XLAT(LINUX_REBOOT_MAGIC2),
-	XLAT(LINUX_REBOOT_MAGIC2A),
-	XLAT(LINUX_REBOOT_MAGIC2B),
-	XLAT(LINUX_REBOOT_MAGIC2C),
-	XLAT_END
-};
-
-static const struct xlat bootflags3[] = {
-	XLAT(LINUX_REBOOT_CMD_RESTART),
-	XLAT(LINUX_REBOOT_CMD_HALT),
-	XLAT(LINUX_REBOOT_CMD_CAD_ON),
-	XLAT(LINUX_REBOOT_CMD_CAD_OFF),
-	XLAT(LINUX_REBOOT_CMD_POWER_OFF),
-	XLAT(LINUX_REBOOT_CMD_RESTART2),
-	XLAT(LINUX_REBOOT_CMD_SW_SUSPEND),
-	XLAT(LINUX_REBOOT_CMD_KEXEC),
-	XLAT_END
-};
+#include "xlat/bootflags1.h"
+#include "xlat/bootflags2.h"
+#include "xlat/bootflags3.h"
 
 int
 sys_reboot(struct tcb *tcp)
diff --git a/resource.c b/resource.c
index 5f92b39..12e218f 100644
--- a/resource.c
+++ b/resource.c
@@ -33,64 +33,7 @@
 #include <sys/times.h>
 #include <linux/kernel.h>
 
-static const struct xlat resources[] = {
-#ifdef RLIMIT_AS
-	XLAT(RLIMIT_AS),
-#endif
-#ifdef RLIMIT_CORE
-	XLAT(RLIMIT_CORE),
-#endif
-#ifdef RLIMIT_CPU
-	XLAT(RLIMIT_CPU),
-#endif
-#ifdef RLIMIT_DATA
-	XLAT(RLIMIT_DATA),
-#endif
-#ifdef RLIMIT_FSIZE
-	XLAT(RLIMIT_FSIZE),
-#endif
-#ifdef RLIMIT_LOCKS
-	XLAT(RLIMIT_LOCKS),
-#endif
-#ifdef RLIMIT_MEMLOCK
-	XLAT(RLIMIT_MEMLOCK),
-#endif
-#ifdef RLIMIT_MSGQUEUE
-	XLAT(RLIMIT_MSGQUEUE),
-#endif
-#ifdef RLIMIT_NICE
-	XLAT(RLIMIT_NICE),
-#endif
-#ifdef RLIMIT_NOFILE
-	XLAT(RLIMIT_NOFILE),
-#endif
-#ifdef RLIMIT_NPROC
-	XLAT(RLIMIT_NPROC),
-#endif
-#ifdef RLIMIT_RSS
-	XLAT(RLIMIT_RSS),
-#endif
-#ifdef RLIMIT_RTPRIO
-	XLAT(RLIMIT_RTPRIO),
-#endif
-#ifdef RLIMIT_RTTIME
-	XLAT(RLIMIT_RTTIME),
-#endif
-#ifdef RLIMIT_SIGPENDING
-	XLAT(RLIMIT_SIGPENDING),
-#endif
-#ifdef RLIMIT_STACK
-	XLAT(RLIMIT_STACK),
-#endif
-#ifdef RLIMIT_VMEM
-	XLAT(RLIMIT_VMEM),
-#endif
-	XLAT_END
-};
-
-#if !(SIZEOF_RLIM_T == 4 || SIZEOF_RLIM_T == 8)
-# error "Unsupported SIZEOF_RLIM_T value"
-#endif
+#include "xlat/resources.h"
 
 static const char *
 sprint_rlim64(uint64_t lim)
@@ -135,7 +78,7 @@
 		print_rlimit64(tcp, addr);
 }
 
-#if SIZEOF_RLIM_T == 4 || SUPPORTED_PERSONALITIES > 1
+#if !defined(current_wordsize) || current_wordsize == 4
 
 static const char *
 sprint_rlim32(uint32_t lim)
@@ -176,22 +119,28 @@
 	else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)))
 		tprintf("%#lx", addr);
 	else {
-# if SIZEOF_RLIM_T == 4
-		print_rlimit32(tcp, addr);
+# if defined(X86_64) || defined(X32)
+		/*
+		 * i386 is the only personality on X86_64 and X32
+		 * with 32-bit rlim_t.
+		 * When current_personality is X32, current_wordsize
+		 * equals to 4 but rlim_t is 64-bit.
+		 */
+		if (current_personality == 1)
 # else
 		if (current_wordsize == 4)
+# endif
 			print_rlimit32(tcp, addr);
 		else
 			print_rlimit64(tcp, addr);
-# endif
 	}
 }
 
-#else /* SIZEOF_RLIM_T == 8 && SUPPORTED_PERSONALITIES == 1 */
+#else /* defined(current_wordsize) && current_wordsize != 4 */
 
 # define decode_rlimit decode_rlimit64
 
-#endif /* SIZEOF_RLIM_T == 4 || SUPPORTED_PERSONALITIES > 1 */
+#endif
 
 int
 sys_getrlimit(struct tcb *tcp)
@@ -232,14 +181,7 @@
 	return 0;
 }
 
-static const struct xlat usagewho[] = {
-	XLAT(RUSAGE_SELF),
-	XLAT(RUSAGE_CHILDREN),
-#ifdef RUSAGE_BOTH
-	XLAT(RUSAGE_BOTH),
-#endif
-	XLAT_END
-};
+#include "xlat/usagewho.h"
 
 #ifdef ALPHA
 void
@@ -386,12 +328,7 @@
 	return 0;
 }
 
-static const struct xlat priorities[] = {
-	XLAT(PRIO_PROCESS),
-	XLAT(PRIO_PGRP),
-	XLAT(PRIO_USER),
-	XLAT_END
-};
+#include "xlat/priorities.h"
 
 int
 sys_getpriority(struct tcb *tcp)
diff --git a/scsi.c b/scsi.c
index c49f954..2aa4c7b 100644
--- a/scsi.c
+++ b/scsi.c
@@ -33,13 +33,7 @@
 # include <sys/ioctl.h>
 # include <scsi/sg.h>
 
-static const struct xlat sg_io_dxfer_direction[] = {
-	XLAT(SG_DXFER_NONE),
-	XLAT(SG_DXFER_TO_DEV),
-	XLAT(SG_DXFER_FROM_DEV),
-	XLAT(SG_DXFER_TO_FROM_DEV),
-	XLAT_END
-};
+#include "xlat/sg_io_dxfer_direction.h"
 
 static void
 print_sg_io_buffer(struct tcb *tcp, unsigned char *addr, int len)
diff --git a/signal.c b/signal.c
index e3072f1..f013e0a 100644
--- a/signal.c
+++ b/signal.c
@@ -100,67 +100,8 @@
 # endif
 #endif
 
-static const struct xlat sigact_flags[] = {
-#ifdef SA_RESTORER
-	XLAT(SA_RESTORER),
-#endif
-#ifdef SA_STACK
-	XLAT(SA_STACK),
-#endif
-#ifdef SA_RESTART
-	XLAT(SA_RESTART),
-#endif
-#ifdef SA_INTERRUPT
-	XLAT(SA_INTERRUPT),
-#endif
-#ifdef SA_NODEFER
-	XLAT(SA_NODEFER),
-#endif
-#if defined SA_NOMASK && SA_NODEFER != SA_NOMASK
-	XLAT(SA_NOMASK),
-#endif
-#ifdef SA_RESETHAND
-	XLAT(SA_RESETHAND),
-#endif
-#if defined SA_ONESHOT && SA_ONESHOT != SA_RESETHAND
-	XLAT(SA_ONESHOT),
-#endif
-#ifdef SA_SIGINFO
-	XLAT(SA_SIGINFO),
-#endif
-#ifdef SA_RESETHAND
-	XLAT(SA_RESETHAND),
-#endif
-#ifdef SA_ONSTACK
-	XLAT(SA_ONSTACK),
-#endif
-#ifdef SA_NODEFER
-	XLAT(SA_NODEFER),
-#endif
-#ifdef SA_NOCLDSTOP
-	XLAT(SA_NOCLDSTOP),
-#endif
-#ifdef SA_NOCLDWAIT
-	XLAT(SA_NOCLDWAIT),
-#endif
-#ifdef _SA_BSDCALL
-	XLAT(_SA_BSDCALL),
-#endif
-#ifdef SA_NOPTRACE
-	XLAT(SA_NOPTRACE),
-#endif
-	XLAT_END
-};
-
-static const struct xlat sigprocmaskcmds[] = {
-	XLAT(SIG_BLOCK),
-	XLAT(SIG_UNBLOCK),
-	XLAT(SIG_SETMASK),
-#ifdef SIG_SETMASK32
-	XLAT(SIG_SETMASK32),
-#endif
-	XLAT_END
-};
+#include "xlat/sigact_flags.h"
+#include "xlat/sigprocmaskcmds.h"
 
 #endif /* HAVE_SIGACTION */
 
@@ -385,132 +326,25 @@
 # define SI_FROMUSER(sip)	((sip)->si_code <= 0)
 #endif
 
-static const struct xlat siginfo_codes[] = {
-#ifdef SI_KERNEL
-	XLAT(SI_KERNEL),
-#endif
-#ifdef SI_USER
-	XLAT(SI_USER),
-#endif
-#ifdef SI_QUEUE
-	XLAT(SI_QUEUE),
-#endif
-#ifdef SI_TIMER
-	XLAT(SI_TIMER),
-#endif
-#ifdef SI_MESGQ
-	XLAT(SI_MESGQ),
-#endif
-#ifdef SI_ASYNCIO
-	XLAT(SI_ASYNCIO),
-#endif
-#ifdef SI_SIGIO
-	XLAT(SI_SIGIO),
-#endif
-#ifdef SI_TKILL
-	XLAT(SI_TKILL),
-#endif
-#ifdef SI_DETHREAD
-	XLAT(SI_DETHREAD),
-#endif
-#ifdef SI_ASYNCNL
-	XLAT(SI_ASYNCNL),
-#endif
-#ifdef SI_NOINFO
-	XLAT(SI_NOINFO),
-#endif
-#ifdef SI_LWP
-	XLAT(SI_LWP),
-#endif
-	XLAT_END
-};
-
-static const struct xlat sigill_codes[] = {
-	XLAT(ILL_ILLOPC),
-	XLAT(ILL_ILLOPN),
-	XLAT(ILL_ILLADR),
-	XLAT(ILL_ILLTRP),
-	XLAT(ILL_PRVOPC),
-	XLAT(ILL_PRVREG),
-	XLAT(ILL_COPROC),
-	XLAT(ILL_BADSTK),
-	XLAT_END
-};
-
-static const struct xlat sigfpe_codes[] = {
-	XLAT(FPE_INTDIV),
-	XLAT(FPE_INTOVF),
-	XLAT(FPE_FLTDIV),
-	XLAT(FPE_FLTOVF),
-	XLAT(FPE_FLTUND),
-	XLAT(FPE_FLTRES),
-	XLAT(FPE_FLTINV),
-	XLAT(FPE_FLTSUB),
-	XLAT_END
-};
-
-static const struct xlat sigtrap_codes[] = {
-	XLAT(TRAP_BRKPT),
-	XLAT(TRAP_TRACE),
-	XLAT_END
-};
-
-static const struct xlat sigchld_codes[] = {
-	XLAT(CLD_EXITED),
-	XLAT(CLD_KILLED),
-	XLAT(CLD_DUMPED),
-	XLAT(CLD_TRAPPED),
-	XLAT(CLD_STOPPED),
-	XLAT(CLD_CONTINUED),
-	XLAT_END
-};
-
-static const struct xlat sigpoll_codes[] = {
-	XLAT(POLL_IN),
-	XLAT(POLL_OUT),
-	XLAT(POLL_MSG),
-	XLAT(POLL_ERR),
-	XLAT(POLL_PRI),
-	XLAT(POLL_HUP),
-	XLAT_END
-};
-
-static const struct xlat sigprof_codes[] = {
-#ifdef PROF_SIG
-	XLAT(PROF_SIG),
-#endif
-	XLAT_END
-};
+#include "xlat/siginfo_codes.h"
+#include "xlat/sigill_codes.h"
+#include "xlat/sigfpe_codes.h"
+#include "xlat/sigtrap_codes.h"
+#include "xlat/sigchld_codes.h"
+#include "xlat/sigpoll_codes.h"
+#include "xlat/sigprof_codes.h"
 
 #ifdef SIGEMT
-static const struct xlat sigemt_codes[] = {
-#ifdef EMT_TAGOVF
-	XLAT(EMT_TAGOVF),
-#endif
-	XLAT_END
-};
+#include "xlat/sigemt_codes.h"
 #endif
 
-static const struct xlat sigsegv_codes[] = {
-	XLAT(SEGV_MAPERR),
-	XLAT(SEGV_ACCERR),
-	XLAT_END
-};
-
-static const struct xlat sigbus_codes[] = {
-	XLAT(BUS_ADRALN),
-	XLAT(BUS_ADRERR),
-	XLAT(BUS_OBJERR),
-	XLAT_END
-};
+#include "xlat/sigsegv_codes.h"
+#include "xlat/sigbus_codes.h"
 
 #ifndef SYS_SECCOMP
 # define SYS_SECCOMP 1
 #endif
-static const struct xlat sigsys_codes[] = {
-	XLAT(SYS_SECCOMP),
-	XLAT_END
-};
+#include "xlat/sigsys_codes.h"
 
 static void
 printsigsource(const siginfo_t *sip)
@@ -1128,11 +962,7 @@
 #define SS_DISABLE      2
 #endif
 
-static const struct xlat sigaltstack_flags[] = {
-	XLAT(SS_ONSTACK),
-	XLAT(SS_DISABLE),
-	XLAT_END
-};
+#include "xlat/sigaltstack_flags.h"
 
 static void
 print_stack_t(struct tcb *tcp, unsigned long addr)
diff --git a/sock.c b/sock.c
index 3d4f0b6..d3a5b35 100644
--- a/sock.c
+++ b/sock.c
@@ -38,24 +38,7 @@
 #endif
 #include <net/if.h>
 
-static const struct xlat iffflags[] = {
-	XLAT(IFF_UP),
-	XLAT(IFF_BROADCAST),
-	XLAT(IFF_DEBUG),
-	XLAT(IFF_LOOPBACK),
-	XLAT(IFF_POINTOPOINT),
-	XLAT(IFF_NOTRAILERS),
-	XLAT(IFF_RUNNING),
-	XLAT(IFF_NOARP),
-	XLAT(IFF_PROMISC),
-	XLAT(IFF_ALLMULTI),
-	XLAT(IFF_MASTER),
-	XLAT(IFF_SLAVE),
-	XLAT(IFF_MULTICAST),
-	XLAT(IFF_PORTSEL),
-	XLAT(IFF_AUTOMEDIA),
-	XLAT_END
-};
+#include "xlat/iffflags.h"
 
 static void
 print_addr(struct tcb *tcp, long addr, struct ifreq *ifr)
diff --git a/strace.1 b/strace.1
index 6ca4bda..c310d65 100644
--- a/strace.1
+++ b/strace.1
@@ -34,12 +34,17 @@
 .fi
 .sp
 ..
+.\" Macro IX is not defined in the groff macros
+.if \n(.g \{\
+.  de IX
+..
+.\}
 .TH STRACE 1 "2010-03-30"
 .SH NAME
 strace \- trace system calls and signals
 .SH SYNOPSIS
 .B strace
-[\fB-CdffhiqrtttTvVxxy\fR]
+[\fB-CdffhikqrtttTvVxxy\fR]
 [\fB-I\fIn\fR]
 [\fB-b\fIexecve\fR]
 [\fB-e\fIexpr\fR]...
@@ -99,7 +104,7 @@
 Errors (typically a return value of \-1) have the errno symbol
 and error string appended.
 .CW
-open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)
+open("/foo/bar", O_RDONLY) = \-1 ENOENT (No such file or directory)
 .CE
 Signals are printed as signal symbol and decoded siginfo structure.
 An excerpt from stracing and interrupting the command "sleep 666" is:
@@ -159,7 +164,7 @@
 always be dereferenced.  For example, retrying the "ls \-l" example
 with a non-existent file produces the following line:
 .CW
-lstat("/foo/bar", 0xb004) = -1 ENOENT (No such file or directory)
+lstat("/foo/bar", 0xb004) = \-1 ENOENT (No such file or directory)
 .CE
 In this case the porch light is on but nobody is home.
 .LP
@@ -234,7 +239,7 @@
 .BR vfork (2)
 and
 .BR clone (2)
-system calls. Note that
+system calls.  Note that
 .B \-p
 .I PID
 .B \-f
@@ -262,6 +267,9 @@
 .B \-i
 Print the instruction pointer at the time of the system call.
 .TP
+.B \-k
+Print the execution stack trace of the traced processes after each system call.
+.TP
 .B \-q
 Suppress messages about attaching, detaching etc.  This happens
 automatically when output is redirected to a file and the command
@@ -287,9 +295,13 @@
 of seconds since the epoch.
 .TP
 .B \-T
-Show the time spent in system calls. This records the time
+Show the time spent in system calls.  This records the time
 difference between the beginning and the end of each system call.
 .TP
+.B \-w
+Summarise the time difference between the beginning and end of
+each system call.  The default is to summarise the system time.
+.TP
 .B \-v
 Print unabbreviated versions of environment, stat, termios, etc.
 calls.  These structures are very common in calls and so the default
@@ -316,7 +328,7 @@
 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
+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
@@ -325,7 +337,7 @@
 or how to trace them.  The format of the expression is:
 .RS 15
 .IP
-[\fIqualifier\fB=\fR][\fB!\fR]\fIvalue1\fR[\fB,\fIvalue2\fR]...
+[\,\fIqualifier\/\fB=\fR][\fB!\fR]\,\fIvalue1\/\fR[\fB,\,\fIvalue2\/\fR]...
 .RE
 .IP
 where
@@ -364,7 +376,7 @@
 expansion even inside quoted arguments.  If so, you must escape
 the exclamation point with a backslash.
 .TP
-\fB\-e\ trace\fR=\fIset\fR
+\fB\-e\ trace\fR=\,\fIset\fR
 Trace only the specified set of system calls.  The
 .B \-c
 option is useful for determining which system calls might be useful
@@ -405,7 +417,7 @@
 .BR "\-e\ trace" = memory
 Trace all memory mapping related system calls.
 .TP
-\fB\-e\ abbrev\fR=\fIset\fR
+\fB\-e\ abbrev\fR=\,\fIset\fR
 Abbreviate the output from printing each member of large structures.
 The default is
 .BR abbrev = all .
@@ -414,19 +426,19 @@
 option has the effect of
 .BR abbrev = none .
 .TP
-\fB\-e\ verbose\fR=\fIset\fR
+\fB\-e\ verbose\fR=\,\fIset\fR
 Dereference structures for the specified set of system calls.  The
 default is
 .BR verbose = all .
 .TP
-\fB\-e\ raw\fR=\fIset\fR
+\fB\-e\ raw\fR=\,\fIset\fR
 Print raw, undecoded arguments for the specified set of system calls.
 This option has the effect of causing all arguments to be printed
 in hexadecimal.  This is mostly useful if you don't trust the
 decoding or you need to know the actual numeric value of an
 argument.
 .TP
-\fB\-e\ signal\fR=\fIset\fR
+\fB\-e\ signal\fR=\,\fIset\fR
 Trace only the specified subset of signals.  The default is
 .BR signal = all .
 For example,
@@ -435,7 +447,7 @@
 .BR signal "=!" io )
 causes SIGIO signals not to be traced.
 .TP
-\fB\-e\ read\fR=\fIset\fR
+\fB\-e\ read\fR=\,\fIset\fR
 Perform a full hexadecimal and ASCII dump of all the data read from
 file descriptors listed in the specified set.  For example, to see
 all input activity on file descriptors
@@ -443,13 +455,13 @@
 and
 .I 5
 use
-\fB\-e\ read\fR=\fI3\fR,\fI5\fR.
+\fB\-e\ read\fR=\,\fI3\fR,\fI5\fR.
 Note that this is independent from the normal tracing of the
 .BR read (2)
 system call which is controlled by the option
 .BR -e "\ " trace = read .
 .TP
-\fB\-e\ write\fR=\fIset\fR
+\fB\-e\ write\fR=\,\fIset\fR
 Perform a full hexadecimal and ASCII dump of all the data written to
 file descriptors listed in the specified set.  For example, to see
 all output activity on file descriptors
@@ -457,7 +469,7 @@
 and
 .I 5
 use
-\fB\-e\ write\fR=\fI3\fR,\fI5\fR.
+\fB\-e\ write\fR=\,\fI3\fR,\,\fI5\fR.
 Note that this is independent from the normal tracing of the
 .BR write (2)
 system call which is controlled by the option
@@ -548,7 +560,7 @@
 Unless this option is used setuid and setgid programs are executed
 without effective privileges.
 .TP
-\fB\-E\ \fIvar\fR=\fIval\fR
+\fB\-E\ \fIvar\fR=\,\fIval\fR
 Run command with
 .IR var = val
 in its list of environment variables.
@@ -639,7 +651,7 @@
 On some platforms a process that is attached to with the
 .B \-p
 option may observe a spurious EINTR return from the current
-system call that is not restartable. (Ideally, all system calls
+system call that is not restartable.  (Ideally, all system calls
 should be restarted on strace attach, making the attach invisible
 to the traced process, but a few system calls aren't.
 Arguably, every instance of such behavior is a kernel bug.)
diff --git a/strace.c b/strace.c
index 8a49340..46c9d63 100644
--- a/strace.c
+++ b/strace.c
@@ -50,6 +50,10 @@
 extern int optind;
 extern char *optarg;
 
+#ifdef USE_LIBUNWIND
+/* if this is true do the stack trace for every system call */
+bool stack_trace_enabled = false;
+#endif
 
 #if defined __NR_tkill
 # define my_tkill(tid, sig) syscall(__NR_tkill, (tid), (sig))
@@ -78,6 +82,7 @@
 bool debug_flag = 0;
 bool Tflag = 0;
 bool iflag = 0;
+bool count_wallclock = 0;
 unsigned int qflag = 0;
 /* Which WSTOPSIG(status) value marks syscall traps? */
 static unsigned int syscall_trap_sig = SIGTRAP;
@@ -200,6 +205,7 @@
               -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]\n\
 -c -- count time, calls, and errors for each syscall and report summary\n\
 -C -- like -c but also print regular output\n\
+-w -- summarise syscall latency (default is system time)\n\
 -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\
@@ -231,6 +237,10 @@
 -E var -- remove var from the environment for command\n\
 -P path -- trace accesses to path\n\
 "
+#ifdef USE_LIBUNWIND
+"-k obtain stack trace between each syscall\n\
+"
+#endif
 /* ancient, no one should use it
 -F -- attempt to follow vforks (deprecated, use -f)\n\
  */
@@ -693,6 +703,12 @@
 #if SUPPORTED_PERSONALITIES > 1
 			tcp->currpers = current_personality;
 #endif
+
+#ifdef USE_LIBUNWIND
+			if (stack_trace_enabled)
+				unwind_tcb_init(tcp);
+#endif
+
 			nprocs++;
 			if (debug_flag)
 				fprintf(stderr, "new tcb for pid %d, active tcbs:%d\n", tcp->pid, nprocs);
@@ -708,6 +724,12 @@
 	if (tcp->pid == 0)
 		return;
 
+#ifdef USE_LIBUNWIND
+	if (stack_trace_enabled) {
+		unwind_tcb_fin(tcp);
+	}
+#endif
+
 	nprocs--;
 	if (debug_flag)
 		fprintf(stderr, "dropped tcb for pid %d, %d remain\n", tcp->pid, nprocs);
@@ -1650,7 +1672,10 @@
 #endif
 	qualify("signal=all");
 	while ((c = getopt(argc, argv,
-		"+b:cCdfFhiqrtTvVxyz"
+		"+b:cCdfFhiqrtTvVwxyz"
+#ifdef USE_LIBUNWIND
+		"k"
+#endif
 		"D"
 		"a:e:o:O:p:s:S:u:E:P:I:")) != EOF) {
 		switch (c) {
@@ -1702,6 +1727,9 @@
 		case 'T':
 			Tflag = 1;
 			break;
+		case 'w':
+			count_wallclock = 1;
+			break;
 		case 'x':
 			xflag++;
 			break;
@@ -1753,6 +1781,11 @@
 		case 'u':
 			username = strdup(optarg);
 			break;
+#ifdef USE_LIBUNWIND
+		case 'k':
+			stack_trace_enabled = true;
+			break;
+#endif
 		case 'E':
 			if (putenv(optarg) < 0)
 				die_out_of_memory();
@@ -1791,6 +1824,32 @@
 		error_msg_and_die("(-c or -C) and -ff are mutually exclusive");
 	}
 
+	if (count_wallclock && !cflag) {
+		error_msg_and_die("-w must be given with (-c or -C)");
+	}
+
+	if (cflag == CFLAG_ONLY_STATS) {
+		if (iflag)
+			error_msg("-%c has no effect with -c", 'i');
+#ifdef USE_LIBUNWIND
+		if (stack_trace_enabled)
+			error_msg("-%c has no effect with -c", 'k');
+#endif
+		if (rflag)
+			error_msg("-%c has no effect with -c", 'r');
+		if (tflag)
+			error_msg("-%c has no effect with -c", 't');
+		if (Tflag)
+			error_msg("-%c has no effect with -c", 'T');
+		if (show_fd_path)
+			error_msg("-%c has no effect with -c", 'y');
+	}
+
+#ifdef USE_LIBUNWIND
+	if (stack_trace_enabled)
+		unwind_init();
+#endif
+
 	/* See if they want to run as another user. */
 	if (username != NULL) {
 		struct passwd *pent;
diff --git a/stream.c b/stream.c
index a47eca2..ceb9e2d 100644
--- a/stream.c
+++ b/stream.c
@@ -55,10 +55,7 @@
 #  define MOREDATA 2
 # endif
 
-static const struct xlat msgflags[] = {
-	XLAT(RS_HIPRI),
-	XLAT_END
-};
+#include "xlat/msgflags.h"
 
 static void
 printstrbuf(struct tcb *tcp, struct strbuf *sbp, int getting)
@@ -153,18 +150,7 @@
 }
 
 # if defined SYS_putpmsg || defined SYS_getpmsg
-static const struct xlat pmsgflags[] = {
-#  ifdef MSG_HIPRI
-	XLAT(MSG_HIPRI),
-#  endif
-#  ifdef MSG_AND
-	XLAT(MSG_ANY),
-#  endif
-#  ifdef MSG_BAND
-	XLAT(MSG_BAND),
-#  endif
-	XLAT_END
-};
+#include "xlat/pmsgflags.h"
 #  ifdef SYS_putpmsg
 int
 sys_putpmsg(struct tcb *tcp)
@@ -242,29 +228,7 @@
 
 #ifdef HAVE_SYS_POLL_H
 
-static const struct xlat pollflags[] = {
-# ifdef POLLIN
-	XLAT(POLLIN),
-	XLAT(POLLPRI),
-	XLAT(POLLOUT),
-#  ifdef POLLRDNORM
-	XLAT(POLLRDNORM),
-#  endif
-#  ifdef POLLWRNORM
-	XLAT(POLLWRNORM),
-#  endif
-#  ifdef POLLRDBAND
-	XLAT(POLLRDBAND),
-#  endif
-#  ifdef POLLWRBAND
-	XLAT(POLLWRBAND),
-#  endif
-	XLAT(POLLERR),
-	XLAT(POLLHUP),
-	XLAT(POLLNVAL),
-# endif
-	XLAT_END
-};
+#include "xlat/pollflags.h"
 
 static int
 decode_poll(struct tcb *tcp, long pts)
diff --git a/syscall.c b/syscall.c
index 0a4e15d..b0ad47e 100644
--- a/syscall.c
+++ b/syscall.c
@@ -98,6 +98,8 @@
 #define TM TRACE_MEMORY
 #define NF SYSCALL_NEVER_FAILS
 #define MA MAX_ARGS
+#define SI STACKTRACE_INVALIDATE_CACHE
+#define SE STACKTRACE_CAPTURE_ON_ENTER
 
 const struct_sysent sysent0[] = {
 #include "syscallent.h"
@@ -125,6 +127,8 @@
 #undef TM
 #undef NF
 #undef MA
+#undef SI
+#undef SE
 
 /*
  * `ioctlent.h' may be generated from `ioctlent.raw' by the auxiliary
@@ -1708,7 +1712,6 @@
 	func = tcp->s_ent->sys_func;
 
 	if (   sys_fork == func
-	    || sys_vfork == func
 	    || sys_clone == func
 	   ) {
 		internal_fork(tcp);
@@ -2037,6 +2040,13 @@
 		goto ret;
 	}
 
+#ifdef USE_LIBUNWIND
+	if (stack_trace_enabled) {
+		if (tcp->s_ent->sys_flags & STACKTRACE_CAPTURE_ON_ENTER)
+			unwind_capture_stacktrace(tcp);
+	}
+#endif
+
 	printleader(tcp);
 	if (tcp->qual_flg & UNDEFINED_SCNO)
 		tprintf("%s(", undefined_scno_name(tcp));
@@ -2510,6 +2520,13 @@
 	if (Tflag || cflag)
 		gettimeofday(&tv, NULL);
 
+#ifdef USE_LIBUNWIND
+	if (stack_trace_enabled) {
+		if (tcp->s_ent->sys_flags & STACKTRACE_INVALIDATE_CACHE)
+			unwind_cache_invalidate(tcp);
+	}
+#endif
+
 #if SUPPORTED_PERSONALITIES > 1
 	update_personality(tcp, tcp->currpers);
 #endif
@@ -2524,8 +2541,7 @@
 	}
 
 	if (cflag) {
-		struct timeval t = tv;
-		count_syscall(tcp, &t);
+		count_syscall(tcp, &tv);
 		if (cflag == CFLAG_ONLY_STATS) {
 			goto ret;
 		}
@@ -2672,6 +2688,14 @@
 			case RVAL_DECIMAL:
 				tprintf("= %ld", tcp->u_rval);
 				break;
+			case RVAL_FD:
+				if (show_fd_path) {
+					tprints("= ");
+					printfd(tcp, tcp->u_rval);
+				}
+				else
+					tprintf("= %ld", tcp->u_rval);
+				break;
 #if defined(LINUX_MIPSN32) || defined(X32)
 			/*
 			case RVAL_LHEX:
@@ -2708,6 +2732,11 @@
 	dumpio(tcp);
 	line_ended();
 
+#ifdef USE_LIBUNWIND
+	if (stack_trace_enabled)
+		unwind_print_stacktrace(tcp);
+#endif
+
  ret:
 	tcp->flags &= ~TCB_INSYSCALL;
 	return 0;
diff --git a/system.c b/system.c
index 604988b..435e2c1 100644
--- a/system.c
+++ b/system.c
@@ -81,36 +81,7 @@
 #include <linux/sysctl.h>
 #include <linux/personality.h>
 
-static const struct xlat mount_flags[] = {
-	XLAT(MS_MGC_VAL),
-	XLAT(MS_RDONLY),
-	XLAT(MS_NOSUID),
-	XLAT(MS_NODEV),
-	XLAT(MS_NOEXEC),
-	XLAT(MS_SYNCHRONOUS),
-	XLAT(MS_REMOUNT),
-	XLAT(MS_RELATIME),
-	XLAT(MS_KERNMOUNT),
-	XLAT(MS_I_VERSION),
-	XLAT(MS_STRICTATIME),
-	XLAT(MS_NOSEC),
-	XLAT(MS_BORN),
-	XLAT(MS_MANDLOCK),
-	XLAT(MS_NOATIME),
-	XLAT(MS_NODIRATIME),
-	XLAT(MS_BIND),
-	XLAT(MS_MOVE),
-	XLAT(MS_REC),
-	XLAT(MS_SILENT),
-	XLAT(MS_POSIXACL),
-	XLAT(MS_UNBINDABLE),
-	XLAT(MS_PRIVATE),
-	XLAT(MS_SLAVE),
-	XLAT(MS_SHARED),
-	XLAT(MS_ACTIVE),
-	XLAT(MS_NOUSER),
-	XLAT_END
-};
+#include "xlat/mount_flags.h"
 
 int
 sys_mount(struct tcb *tcp)
@@ -155,12 +126,7 @@
 #define MNT_DETACH	0x00000002	/* Just detach from the tree */
 #define MNT_EXPIRE	0x00000004	/* Mark for expiry */
 
-static const struct xlat umount_flags[] = {
-	XLAT(MNT_FORCE),
-	XLAT(MNT_DETACH),
-	XLAT(MNT_EXPIRE),
-	XLAT_END
-};
+#include "xlat/umount_flags.h"
 
 int
 sys_umount2(struct tcb *tcp)
@@ -175,31 +141,7 @@
 
 /* These are not macros, but enums.  We just copy the values by hand
    from Linux 2.6.9 here.  */
-static const struct xlat personality_options[] = {
-	XLAT(PER_LINUX),
-	XLAT(PER_LINUX_32BIT),
-	XLAT(PER_LINUX_FDPIC),
-	XLAT(PER_SVR4),
-	XLAT(PER_SVR3),
-	XLAT(PER_SCOSVR3),
-	XLAT(PER_OSR5),
-	XLAT(PER_WYSEV386),
-	XLAT(PER_ISCR4),
-	XLAT(PER_BSD),
-	XLAT(PER_SUNOS),
-	XLAT(PER_XENIX),
-	XLAT(PER_LINUX32),
-	XLAT(PER_LINUX32_3GB),
-	XLAT(PER_IRIX32),
-	XLAT(PER_IRIXN32),
-	XLAT(PER_IRIX64),
-	XLAT(PER_RISCOS),
-	XLAT(PER_SOLARIS),
-	XLAT(PER_UW7),
-	XLAT(PER_OSF4),
-	XLAT(PER_HPUX),
-	XLAT_END
-};
+#include "xlat/personality_options.h"
 
 int
 sys_personality(struct tcb *tcp)
@@ -223,20 +165,7 @@
 	SYSLOG_ACTION_SIZE_BUFFER
 };
 
-static const struct xlat syslog_action_type[] = {
-	XLAT(SYSLOG_ACTION_CLOSE),
-	XLAT(SYSLOG_ACTION_OPEN),
-	XLAT(SYSLOG_ACTION_READ),
-	XLAT(SYSLOG_ACTION_READ_ALL),
-	XLAT(SYSLOG_ACTION_READ_CLEAR),
-	XLAT(SYSLOG_ACTION_CLEAR),
-	XLAT(SYSLOG_ACTION_CONSOLE_OFF),
-	XLAT(SYSLOG_ACTION_CONSOLE_ON),
-	XLAT(SYSLOG_ACTION_CONSOLE_LEVEL),
-	XLAT(SYSLOG_ACTION_SIZE_UNREAD),
-	XLAT(SYSLOG_ACTION_SIZE_BUFFER),
-	XLAT_END
-};
+#include "xlat/syslog_action_type.h"
 
 int
 sys_syslog(struct tcb *tcp)
@@ -276,18 +205,7 @@
 }
 
 #ifdef M68K
-static const struct xlat cacheflush_scope[] = {
-#ifdef FLUSH_SCOPE_LINE
-	XLAT(FLUSH_SCOPE_LINE),
-#endif
-#ifdef FLUSH_SCOPE_PAGE
-	XLAT(FLUSH_SCOPE_PAGE),
-#endif
-#ifdef FLUSH_SCOPE_ALL
-	XLAT(FLUSH_SCOPE_ALL),
-#endif
-	XLAT_END
-};
+#include "xlat/cacheflush_scope.h"
 
 static const struct xlat cacheflush_flags[] = {
 #ifdef FLUSH_CACHE_BOTH
@@ -324,14 +242,7 @@
 
 #include <bfin_sram.h>
 
-static const struct xlat sram_alloc_flags[] = {
-	XLAT(L1_INST_SRAM),
-	XLAT(L1_DATA_A_SRAM),
-	XLAT(L1_DATA_B_SRAM),
-	XLAT(L1_DATA_SRAM),
-	XLAT(L2_SRAM),
-	XLAT_END
-};
+#include "xlat/sram_alloc_flags.h"
 
 int
 sys_sram_alloc(struct tcb *tcp)
@@ -404,51 +315,7 @@
 
 #ifdef SYS_capget
 
-static const struct xlat capabilities[] = {
-	{ 1<<CAP_CHOWN,		"CAP_CHOWN"	},
-	{ 1<<CAP_DAC_OVERRIDE,	"CAP_DAC_OVERRIDE"},
-	{ 1<<CAP_DAC_READ_SEARCH,"CAP_DAC_READ_SEARCH"},
-	{ 1<<CAP_FOWNER,	"CAP_FOWNER"	},
-	{ 1<<CAP_FSETID,	"CAP_FSETID"	},
-	{ 1<<CAP_KILL,		"CAP_KILL"	},
-	{ 1<<CAP_SETGID,	"CAP_SETGID"	},
-	{ 1<<CAP_SETUID,	"CAP_SETUID"	},
-	{ 1<<CAP_SETPCAP,	"CAP_SETPCAP"	},
-	{ 1<<CAP_LINUX_IMMUTABLE,"CAP_LINUX_IMMUTABLE"},
-	{ 1<<CAP_NET_BIND_SERVICE,"CAP_NET_BIND_SERVICE"},
-	{ 1<<CAP_NET_BROADCAST,	"CAP_NET_BROADCAST"},
-	{ 1<<CAP_NET_ADMIN,	"CAP_NET_ADMIN"	},
-	{ 1<<CAP_NET_RAW,	"CAP_NET_RAW"	},
-	{ 1<<CAP_IPC_LOCK,	"CAP_IPC_LOCK"	},
-	{ 1<<CAP_IPC_OWNER,	"CAP_IPC_OWNER"	},
-	{ 1<<CAP_SYS_MODULE,	"CAP_SYS_MODULE"},
-	{ 1<<CAP_SYS_RAWIO,	"CAP_SYS_RAWIO"	},
-	{ 1<<CAP_SYS_CHROOT,	"CAP_SYS_CHROOT"},
-	{ 1<<CAP_SYS_PTRACE,	"CAP_SYS_PTRACE"},
-	{ 1<<CAP_SYS_PACCT,	"CAP_SYS_PACCT"	},
-	{ 1<<CAP_SYS_ADMIN,	"CAP_SYS_ADMIN"	},
-	{ 1<<CAP_SYS_BOOT,	"CAP_SYS_BOOT"	},
-	{ 1<<CAP_SYS_NICE,	"CAP_SYS_NICE"	},
-	{ 1<<CAP_SYS_RESOURCE,	"CAP_SYS_RESOURCE"},
-	{ 1<<CAP_SYS_TIME,	"CAP_SYS_TIME"	},
-	{ 1<<CAP_SYS_TTY_CONFIG,"CAP_SYS_TTY_CONFIG"},
-#ifdef CAP_MKNOD
-	{ 1<<CAP_MKNOD,		"CAP_MKNOD"	},
-#endif
-#ifdef CAP_LEASE
-	{ 1<<CAP_LEASE,		"CAP_LEASE"	},
-#endif
-#ifdef CAP_AUDIT_WRITE
-	{ 1<<CAP_AUDIT_WRITE,	"CAP_AUDIT_WRITE"},
-#endif
-#ifdef CAP_AUDIT_CONTROL
-	{ 1<<CAP_AUDIT_CONTROL,	"CAP_AUDIT_CONTROL"},
-#endif
-#ifdef CAP_SETFCAP
-	{ 1<<CAP_SETFCAP,	"CAP_SETFCAP"	},
-#endif
-	XLAT_END
-};
+#include "xlat/capabilities.h"
 
 #ifndef _LINUX_CAPABILITY_VERSION_1
 # define _LINUX_CAPABILITY_VERSION_1 0x19980330
@@ -460,12 +327,7 @@
 # define _LINUX_CAPABILITY_VERSION_3 0x20080522
 #endif
 
-static const struct xlat cap_version[] = {
-	XLAT(_LINUX_CAPABILITY_VERSION_1),
-	XLAT(_LINUX_CAPABILITY_VERSION_2),
-	XLAT(_LINUX_CAPABILITY_VERSION_3),
-	XLAT_END
-};
+#include "xlat/cap_version.h"
 
 static void
 print_cap_header(struct tcb *tcp, unsigned long addr)
@@ -548,250 +410,17 @@
 
 #endif
 
-/* Linux 2.6.18+ headers removed CTL_PROC enum.  */
-# define CTL_PROC 4
-# define CTL_CPU 10		/* older headers lack */
-static const struct xlat sysctl_root[] = {
-	XLAT(CTL_KERN),
-	XLAT(CTL_VM),
-	XLAT(CTL_NET),
-	XLAT(CTL_PROC),
-	XLAT(CTL_FS),
-	XLAT(CTL_DEBUG),
-	XLAT(CTL_DEV),
-	XLAT(CTL_BUS),
-	XLAT(CTL_ABI),
-	XLAT(CTL_CPU),
-	XLAT_END
-};
-
-static const struct xlat sysctl_kern[] = {
-	XLAT(KERN_OSTYPE),
-	XLAT(KERN_OSRELEASE),
-	XLAT(KERN_OSREV),
-	XLAT(KERN_VERSION),
-	XLAT(KERN_SECUREMASK),
-	XLAT(KERN_PROF),
-	XLAT(KERN_NODENAME),
-	XLAT(KERN_DOMAINNAME),
-#ifdef KERN_SECURELVL
-	XLAT(KERN_SECURELVL),
-#endif
-	XLAT(KERN_PANIC),
-#ifdef KERN_REALROOTDEV
-	XLAT(KERN_REALROOTDEV),
-#endif
-#ifdef KERN_JAVA_INTERPRETER
-	XLAT(KERN_JAVA_INTERPRETER),
-#endif
-#ifdef KERN_JAVA_APPLETVIEWER
-	XLAT(KERN_JAVA_APPLETVIEWER),
-#endif
-	XLAT(KERN_SPARC_REBOOT),
-	XLAT(KERN_CTLALTDEL),
-	XLAT(KERN_PRINTK),
-	XLAT(KERN_NAMETRANS),
-	XLAT(KERN_PPC_HTABRECLAIM),
-	XLAT(KERN_PPC_ZEROPAGED),
-	XLAT(KERN_PPC_POWERSAVE_NAP),
-	XLAT(KERN_MODPROBE),
-	XLAT(KERN_SG_BIG_BUFF),
-	XLAT(KERN_ACCT),
-	XLAT(KERN_PPC_L2CR),
-	XLAT(KERN_RTSIGNR),
-	XLAT(KERN_RTSIGMAX),
-	XLAT(KERN_SHMMAX),
-	XLAT(KERN_MSGMAX),
-	XLAT(KERN_MSGMNB),
-	XLAT(KERN_MSGPOOL),
-	XLAT_END
-};
-
-static const struct xlat sysctl_vm[] = {
-#ifdef VM_SWAPCTL
-	XLAT(VM_SWAPCTL),
-#endif
-#ifdef VM_UNUSED1
-	XLAT(VM_UNUSED1),
-#endif
-#ifdef VM_SWAPOUT
-	XLAT(VM_SWAPOUT),
-#endif
-#ifdef VM_UNUSED2
-	XLAT(VM_UNUSED2),
-#endif
-#ifdef VM_FREEPG
-	XLAT(VM_FREEPG),
-#endif
-#ifdef VM_UNUSED3
-	XLAT(VM_UNUSED3),
-#endif
-#ifdef VM_BDFLUSH
-	XLAT(VM_BDFLUSH),
-#endif
-#ifdef VM_UNUSED4
-	XLAT(VM_UNUSED4),
-#endif
-	XLAT(VM_OVERCOMMIT_MEMORY),
-#ifdef VM_BUFFERMEM
-	XLAT(VM_BUFFERMEM),
-#endif
-#ifdef VM_UNUSED5
-	XLAT(VM_UNUSED5),
-#endif
-#ifdef VM_PAGECACHE
-	XLAT(VM_PAGECACHE),
-#endif
-#ifdef VM_UNUSED7
-	XLAT(VM_UNUSED7),
-#endif
-#ifdef VM_PAGERDAEMON
-	XLAT(VM_PAGERDAEMON),
-#endif
-#ifdef VM_UNUSED8
-	XLAT(VM_UNUSED8),
-#endif
-#ifdef VM_PGT_CACHE
-	XLAT(VM_PGT_CACHE),
-#endif
-#ifdef VM_UNUSED9
-	XLAT(VM_UNUSED9),
-#endif
-	XLAT(VM_PAGE_CLUSTER),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net[] = {
-	XLAT(NET_CORE),
-	XLAT(NET_ETHER),
-	XLAT(NET_802),
-	XLAT(NET_UNIX),
-	XLAT(NET_IPV4),
-	XLAT(NET_IPX),
-	XLAT(NET_ATALK),
-	XLAT(NET_NETROM),
-	XLAT(NET_AX25),
-	XLAT(NET_BRIDGE),
-	XLAT(NET_ROSE),
-	XLAT(NET_IPV6),
-	XLAT(NET_X25),
-	XLAT(NET_TR),
-	XLAT(NET_DECNET),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net_core[] = {
-	XLAT(NET_CORE_WMEM_MAX),
-	XLAT(NET_CORE_RMEM_MAX),
-	XLAT(NET_CORE_WMEM_DEFAULT),
-	XLAT(NET_CORE_RMEM_DEFAULT),
-	XLAT(NET_CORE_MAX_BACKLOG),
-	XLAT(NET_CORE_FASTROUTE),
-	XLAT(NET_CORE_MSG_COST),
-	XLAT(NET_CORE_MSG_BURST),
-	XLAT(NET_CORE_OPTMEM_MAX),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net_unix[] = {
-	XLAT(NET_UNIX_DESTROY_DELAY),
-	XLAT(NET_UNIX_DELETE_DELAY),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net_ipv4[] = {
-	XLAT(NET_IPV4_FORWARD),
-	XLAT(NET_IPV4_DYNADDR),
-	XLAT(NET_IPV4_CONF),
-	XLAT(NET_IPV4_NEIGH),
-	XLAT(NET_IPV4_ROUTE),
-	XLAT(NET_IPV4_FIB_HASH),
-	XLAT(NET_IPV4_TCP_TIMESTAMPS),
-	XLAT(NET_IPV4_TCP_WINDOW_SCALING),
-	XLAT(NET_IPV4_TCP_SACK),
-	XLAT(NET_IPV4_TCP_RETRANS_COLLAPSE),
-	XLAT(NET_IPV4_DEFAULT_TTL),
-	XLAT(NET_IPV4_AUTOCONFIG),
-	XLAT(NET_IPV4_NO_PMTU_DISC),
-	XLAT(NET_IPV4_TCP_SYN_RETRIES),
-	XLAT(NET_IPV4_IPFRAG_HIGH_THRESH),
-	XLAT(NET_IPV4_IPFRAG_LOW_THRESH),
-	XLAT(NET_IPV4_IPFRAG_TIME),
-	XLAT(NET_IPV4_TCP_MAX_KA_PROBES),
-	XLAT(NET_IPV4_TCP_KEEPALIVE_TIME),
-	XLAT(NET_IPV4_TCP_KEEPALIVE_PROBES),
-	XLAT(NET_IPV4_TCP_RETRIES1),
-	XLAT(NET_IPV4_TCP_RETRIES2),
-	XLAT(NET_IPV4_TCP_FIN_TIMEOUT),
-	XLAT(NET_IPV4_IP_MASQ_DEBUG),
-	XLAT(NET_TCP_SYNCOOKIES),
-	XLAT(NET_TCP_STDURG),
-	XLAT(NET_TCP_RFC1337),
-	XLAT(NET_TCP_SYN_TAILDROP),
-	XLAT(NET_TCP_MAX_SYN_BACKLOG),
-	XLAT(NET_IPV4_LOCAL_PORT_RANGE),
-	XLAT(NET_IPV4_ICMP_ECHO_IGNORE_ALL),
-	XLAT(NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS),
-	XLAT(NET_IPV4_ICMP_SOURCEQUENCH_RATE),
-	XLAT(NET_IPV4_ICMP_DESTUNREACH_RATE),
-	XLAT(NET_IPV4_ICMP_TIMEEXCEED_RATE),
-	XLAT(NET_IPV4_ICMP_PARAMPROB_RATE),
-	XLAT(NET_IPV4_ICMP_ECHOREPLY_RATE),
-	XLAT(NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES),
-	XLAT(NET_IPV4_IGMP_MAX_MEMBERSHIPS),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net_ipv4_route[] = {
-	XLAT(NET_IPV4_ROUTE_FLUSH),
-	XLAT(NET_IPV4_ROUTE_MIN_DELAY),
-	XLAT(NET_IPV4_ROUTE_MAX_DELAY),
-	XLAT(NET_IPV4_ROUTE_GC_THRESH),
-	XLAT(NET_IPV4_ROUTE_MAX_SIZE),
-	XLAT(NET_IPV4_ROUTE_GC_MIN_INTERVAL),
-	XLAT(NET_IPV4_ROUTE_GC_TIMEOUT),
-	XLAT(NET_IPV4_ROUTE_GC_INTERVAL),
-	XLAT(NET_IPV4_ROUTE_REDIRECT_LOAD),
-	XLAT(NET_IPV4_ROUTE_REDIRECT_NUMBER),
-	XLAT(NET_IPV4_ROUTE_REDIRECT_SILENCE),
-	XLAT(NET_IPV4_ROUTE_ERROR_COST),
-	XLAT(NET_IPV4_ROUTE_ERROR_BURST),
-	XLAT(NET_IPV4_ROUTE_GC_ELASTICITY),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net_ipv4_conf[] = {
-	XLAT(NET_IPV4_CONF_FORWARDING),
-	XLAT(NET_IPV4_CONF_MC_FORWARDING),
-	XLAT(NET_IPV4_CONF_PROXY_ARP),
-	XLAT(NET_IPV4_CONF_ACCEPT_REDIRECTS),
-	XLAT(NET_IPV4_CONF_SECURE_REDIRECTS),
-	XLAT(NET_IPV4_CONF_SEND_REDIRECTS),
-	XLAT(NET_IPV4_CONF_SHARED_MEDIA),
-	XLAT(NET_IPV4_CONF_RP_FILTER),
-	XLAT(NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE),
-	XLAT(NET_IPV4_CONF_BOOTP_RELAY),
-	XLAT(NET_IPV4_CONF_LOG_MARTIANS),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net_ipv6[] = {
-	XLAT(NET_IPV6_CONF),
-	XLAT(NET_IPV6_NEIGH),
-	XLAT(NET_IPV6_ROUTE),
-	XLAT_END
-};
-
-static const struct xlat sysctl_net_ipv6_route[] = {
-	XLAT(NET_IPV6_ROUTE_FLUSH),
-	XLAT(NET_IPV6_ROUTE_GC_THRESH),
-	XLAT(NET_IPV6_ROUTE_MAX_SIZE),
-	XLAT(NET_IPV6_ROUTE_GC_MIN_INTERVAL),
-	XLAT(NET_IPV6_ROUTE_GC_TIMEOUT),
-	XLAT(NET_IPV6_ROUTE_GC_INTERVAL),
-	XLAT(NET_IPV6_ROUTE_GC_ELASTICITY),
-	XLAT_END
-};
+#include "xlat/sysctl_root.h"
+#include "xlat/sysctl_kern.h"
+#include "xlat/sysctl_vm.h"
+#include "xlat/sysctl_net.h"
+#include "xlat/sysctl_net_core.h"
+#include "xlat/sysctl_net_unix.h"
+#include "xlat/sysctl_net_ipv4.h"
+#include "xlat/sysctl_net_ipv4_route.h"
+#include "xlat/sysctl_net_ipv4_conf.h"
+#include "xlat/sysctl_net_ipv6.h"
+#include "xlat/sysctl_net_ipv6_route.h"
 
 int
 sys_sysctl(struct tcb *tcp)
@@ -954,14 +583,7 @@
 #define __NEW_UTS_LEN 64
 #endif
 
-static const struct xlat sysmips_operations[] = {
-	XLAT(SETNAME),
-	XLAT(FLUSH_CACHE),
-	XLAT(MIPS_FIXADE),
-	XLAT(MIPS_RDNVRAM),
-	XLAT(MIPS_ATOMIC_SET),
-	XLAT_END
-};
+#include "xlat/sysmips_operations.h"
 
 int sys_sysmips(struct tcb *tcp)
 {
@@ -1000,18 +622,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"		},
-	XLAT_END
-};
+#include "xlat/atomic_ops.h"
 
 int sys_or1k_atomic(struct tcb *tcp)
 {
diff --git a/term.c b/term.c
index 43a15c3..d1c9b65 100644
--- a/term.c
+++ b/term.c
@@ -35,134 +35,14 @@
 # include <sys/filio.h>
 #endif
 
-static const struct xlat tcxonc_options[] = {
-	XLAT(TCOOFF),
-	XLAT(TCOON),
-	XLAT(TCIOFF),
-	XLAT(TCION),
-	XLAT_END
-};
+#include "xlat/tcxonc_options.h"
 
 #ifdef TCLFLSH
-static const struct xlat tcflsh_options[] = {
-	XLAT(TCIFLUSH),
-	XLAT(TCOFLUSH),
-	XLAT(TCIOFLUSH),
-	XLAT_END
-};
+#include "xlat/tcflsh_options.h"
 #endif
 
-static const struct xlat baud_options[] = {
-	XLAT(B0),
-	XLAT(B50),
-	XLAT(B75),
-	XLAT(B110),
-	XLAT(B134),
-	XLAT(B150),
-	XLAT(B200),
-	XLAT(B300),
-	XLAT(B600),
-	XLAT(B1200),
-	XLAT(B1800),
-	XLAT(B2400),
-	XLAT(B4800),
-	XLAT(B9600),
-#ifdef B19200
-	XLAT(B19200),
-#endif
-#ifdef B38400
-	XLAT(B38400),
-#endif
-#ifdef B57600
-	XLAT(B57600),
-#endif
-#ifdef B115200
-	XLAT(B115200),
-#endif
-#ifdef B230400
-	XLAT(B230400),
-#endif
-#ifdef B460800
-	XLAT(B460800),
-#endif
-#ifdef B500000
-	XLAT(B500000),
-#endif
-#ifdef B576000
-	XLAT(B576000),
-#endif
-#ifdef B921600
-	XLAT(B921600),
-#endif
-#ifdef B1000000
-	XLAT(B1000000),
-#endif
-#ifdef B1152000
-	XLAT(B1152000),
-#endif
-#ifdef B1500000
-	XLAT(B1500000),
-#endif
-#ifdef B2000000
-	XLAT(B2000000),
-#endif
-#ifdef B2500000
-	XLAT(B2500000),
-#endif
-#ifdef B3000000
-	XLAT(B3000000),
-#endif
-#ifdef B3500000
-	XLAT(B3500000),
-#endif
-#ifdef B4000000
-	XLAT(B4000000),
-#endif
-#ifdef EXTA
-	XLAT(EXTA),
-#endif
-#ifdef EXTB
-	XLAT(EXTB),
-#endif
-	XLAT_END
-};
-
-static const struct xlat modem_flags[] = {
-#ifdef TIOCM_LE
-	XLAT(TIOCM_LE),
-#endif
-#ifdef TIOCM_DTR
-	XLAT(TIOCM_DTR),
-#endif
-#ifdef TIOCM_RTS
-	XLAT(TIOCM_RTS),
-#endif
-#ifdef TIOCM_ST
-	XLAT(TIOCM_ST),
-#endif
-#ifdef TIOCM_SR
-	XLAT(TIOCM_SR),
-#endif
-#ifdef TIOCM_CTS
-	XLAT(TIOCM_CTS),
-#endif
-#ifdef TIOCM_CAR
-	XLAT(TIOCM_CAR),
-#endif
-#ifdef TIOCM_CD
-	XLAT(TIOCM_CD),
-#endif
-#ifdef TIOCM_RNG
-	XLAT(TIOCM_RNG),
-#endif
-#ifdef TIOCM_RI
-	XLAT(TIOCM_RI),
-#endif
-#ifdef TIOCM_DSR
-	XLAT(TIOCM_DSR),
-#endif
-	XLAT_END
-};
+#include "xlat/baud_options.h"
+#include "xlat/modem_flags.h"
 
 int term_ioctl(struct tcb *tcp, long code, long arg)
 {
diff --git a/tests/.gitignore b/tests/.gitignore
index c400a79..e22e556 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,6 +1,9 @@
 net-accept-connect
+scm_rights
 set_ptracer_any
 sigaction
+stack-fcall
+uio
 *.log
 *.log.*
 *.o
diff --git a/tests/Makefile.am b/tests/Makefile.am
index c63c41f..efe646d 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -2,7 +2,13 @@
 
 AM_CFLAGS = $(WARN_CFLAGS)
 
-check_PROGRAMS = net-accept-connect set_ptracer_any sigaction uio
+check_PROGRAMS = \
+	net-accept-connect \
+	scm_rights \
+	set_ptracer_any \
+	sigaction \
+	stack-fcall \
+	uio
 
 uio_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64
 
@@ -10,14 +16,17 @@
 	ptrace_setoptions.test \
 	strace-f.test \
 	qual_syscall.test \
+	scm_rights-fd.test \
 	sigaction.test \
 	stat.test \
 	net.test \
 	net-fd.test \
 	uio.test \
+	count.test \
 	detach-sleeping.test \
 	detach-stopped.test \
-	detach-running.test
+	detach-running.test \
+	strace-k.test
 
 net-fd.log: net.log
 
diff --git a/tests/count.test b/tests/count.test
new file mode 100755
index 0000000..e9eafd9
--- /dev/null
+++ b/tests/count.test
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# Check whether -c and -w options work.
+
+. "${srcdir=.}/init.sh"
+
+check_prog sleep
+check_prog grep
+
+make_log()
+{
+	$STRACE $args > $LOG 2>&1 || {
+		cat $LOG
+		fail_ "$STRACE $args failed"
+	}
+}
+
+grep_log()
+{
+	LC_ALL=C grep -E -x -e "$*" $LOG > /dev/null || {
+		cat $LOG
+		fail_ "unexpected output from $STRACE $args"
+	}
+}
+
+args='-c sleep 1'
+make_log
+grep nanosleep $LOG > /dev/null ||
+	skip_ 'sleep does not use nanosleep'
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'
+
+args='-c -enanosleep sleep 1'
+make_log
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'
+
+args='-cw sleep 1'
+make_log
+grep_log ' *[^ ]+ +(1\.0|0\.99)[^n]*nanosleep'
+
+args='-cw -enanosleep sleep 1'
+make_log
+grep_log '100\.00 +(1\.0|0\.99)[^n]*nanosleep'
+
+exit 0
diff --git a/tests/scm_rights-fd.test b/tests/scm_rights-fd.test
new file mode 100755
index 0000000..5a847da
--- /dev/null
+++ b/tests/scm_rights-fd.test
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Check how SCM_RIGHTS control messages are decoded in -y mode.
+
+. "${srcdir=.}/init.sh"
+
+# strace -y is implemented using /proc/$pid/fd
+[ -d /proc/self/fd/ ] ||
+	framework_skip_ '/proc/self/fd/ is not available'
+
+check_prog grep
+check_prog rm
+
+rm -f $LOG.*
+
+./scm_rights ||
+	fail_ 'scm_rights failed'
+
+args="-tt -ff -y -xx -enetwork -o $LOG ./scm_rights"
+$STRACE $args ||
+	fail_ "$STRACE $args failed"
+
+"$srcdir"/../strace-log-merge $LOG > $LOG || {
+	cat $LOG
+	fail_ 'strace-log-merge failed'
+}
+rm -f $LOG.*
+
+grep_log()
+{
+	local syscall="$1"; shift
+	local prefix='[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +'
+
+	LC_ALL=C grep -E -x "$prefix$syscall$*" $LOG > /dev/null || {
+		cat $LOG
+		fail_ "$STRACE $args failed to trace \"$syscall\" properly"
+	}
+}
+
+grep_log sendmsg '\(1<socket:\[[0-9]+\]>, \{msg_name\(0\)=NULL, msg_iov\(1\)=\[\{"\\x00\\x00\\x00\\x00[^"]*", [1-9][0-9]*\}\], msg_controllen=[1-9][0-9]*, \{cmsg_len=[1-9][0-9]*, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, \{3</dev/null>\}\}, msg_flags=0\}, 0\) += [1-9][0-9]*'
+grep_log recvmsg '\(0<socket:\[[0-9]+\]>, \{msg_name\(0\)=NULL, msg_iov\(1\)=\[\{"\\x00\\x00\\x00\\x00[^"]*", [1-9][0-9]*\}\], msg_controllen=[1-9][0-9]*, \{cmsg_len=[1-9][0-9]*, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, \{3</dev/null>\}\}, msg_flags=0\}, 0\) += [1-9][0-9]*'
+
+exit 0
diff --git a/tests/scm_rights.c b/tests/scm_rights.c
new file mode 100644
index 0000000..0cced9b
--- /dev/null
+++ b/tests/scm_rights.c
@@ -0,0 +1,71 @@
+#include <assert.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+
+int main(void)
+{
+	union {
+		struct cmsghdr cmsghdr;
+		char buf[CMSG_SPACE(sizeof(int))];
+	} control = {};
+
+	int fd;
+	int data = 0;
+	struct iovec iov = {
+		.iov_base = &data,
+		.iov_len = sizeof(iov)
+	};
+
+	struct msghdr mh = {
+		.msg_iov = &iov,
+		.msg_iovlen = 1,
+		.msg_control = &control,
+		.msg_controllen = sizeof(control)
+	};
+
+	while ((fd = open("/dev/null", O_RDWR)) < 3)
+		assert(fd >= 0);
+	(void) close(3);
+
+	int sv[2];
+	assert(socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == 0);
+
+	pid_t pid = fork();
+	assert(pid >= 0);
+
+	if (pid) {
+		assert(close(sv[0]) == 0);
+		assert(dup2(sv[1], 1) == 1);
+		assert(close(sv[1]) == 0);
+
+		assert((fd = open("/dev/null", O_RDWR)) == 3);
+
+		struct cmsghdr *cmsg = CMSG_FIRSTHDR(&mh);
+		cmsg->cmsg_level = SOL_SOCKET;
+		cmsg->cmsg_type = SCM_RIGHTS;
+		cmsg->cmsg_len = CMSG_LEN(sizeof fd);
+		memcpy(CMSG_DATA(cmsg), &fd, sizeof fd);
+		mh.msg_controllen = cmsg->cmsg_len;
+
+		assert(sendmsg(1, &mh, 0) == sizeof(iov));
+		assert(close(1) == 0);
+
+                int status;
+		assert(waitpid(pid, &status, 0) == pid);
+		assert(status == 0);
+	} else {
+		assert(close(sv[1]) == 0);
+		assert(dup2(sv[0], 0) == 0);
+		assert(close(sv[0]) == 0);
+
+		assert(recvmsg(0, &mh, 0) == sizeof(iov));
+		assert(close(0) == 0);
+	}
+
+	return 0;
+}
diff --git a/tests/stack-fcall.c b/tests/stack-fcall.c
new file mode 100644
index 0000000..1c66fef
--- /dev/null
+++ b/tests/stack-fcall.c
@@ -0,0 +1,23 @@
+#include <unistd.h>
+#include <sys/types.h>
+
+/* Use "volatile" to avoid compiler optimization. */
+
+int f1(int i)
+{
+	static pid_t (* volatile g)(void) = getpid;
+	return g() + i;
+}
+
+int f0(volatile int i)
+{
+	static int (* volatile g)(int) = f1;
+	return g(i) - i;
+}
+
+int main(int argc, char** argv)
+{
+	static int (* volatile g)(int) = f0;
+	g(argc);
+	return 0;
+}
diff --git a/tests/strace-k.test b/tests/strace-k.test
new file mode 100755
index 0000000..3845c8c
--- /dev/null
+++ b/tests/strace-k.test
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# Ensure that strace -k works.
+
+. "${srcdir=.}/init.sh"
+
+# strace -k is implemented using /proc/$pid/maps
+[ -f /proc/self/maps ] ||
+	framework_skip_ '/proc/self/maps is not available'
+
+check_prog sed
+check_prog tr
+
+./stack-fcall ||
+	fail_ 'stack-fcall failed'
+
+$STRACE -h | grep '^-k' > /dev/null ||
+	skip_ 'strace -k is not available'
+
+args="-e getpid -k ./stack-fcall"
+$STRACE $args > $LOG 2>&1 || {
+	cat $LOG
+	fail_ "$STRACE $args failed"
+}
+
+expected='getpid f1 f0 main '
+result=$(sed -n '1,/(main+0x[a-f0-9]\+) .*/ s/^.*(\([^+]\+\)+0x[a-f0-9]\+) .*/\1/p' $LOG |
+	tr '\n' ' ')
+
+test "$result" = "$expected" || {
+	cat $LOG
+	echo "expected: \"$expected\""
+	echo "result: \"$result\""
+	fail_ "unexpected output from $STRACE $args"
+}
+
+exit 0
diff --git a/time.c b/time.c
index 174e2fc..1ad90d9 100644
--- a/time.c
+++ b/time.c
@@ -279,12 +279,7 @@
 	return 0;
 }
 
-static const struct xlat which[] = {
-	XLAT(ITIMER_REAL),
-	XLAT(ITIMER_VIRTUAL),
-	XLAT(ITIMER_PROF),
-	XLAT_END
-};
+#include "xlat/itimer_which.h"
 
 static void
 printitv_bitness(struct tcb *tcp, long addr, enum bitness_t bitness)
@@ -338,7 +333,7 @@
 sys_getitimer(struct tcb *tcp)
 {
 	if (entering(tcp)) {
-		printxval(which, tcp->u_arg[0], "ITIMER_???");
+		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
 		tprints(", ");
 	} else {
 		if (syserror(tcp))
@@ -354,7 +349,7 @@
 sys_osf_getitimer(struct tcb *tcp)
 {
 	if (entering(tcp)) {
-		printxval(which, tcp->u_arg[0], "ITIMER_???");
+		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
 		tprints(", ");
 	} else {
 		if (syserror(tcp))
@@ -370,7 +365,7 @@
 sys_setitimer(struct tcb *tcp)
 {
 	if (entering(tcp)) {
-		printxval(which, tcp->u_arg[0], "ITIMER_???");
+		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
 		tprints(", ");
 		printitv(tcp, tcp->u_arg[1]);
 		tprints(", ");
@@ -388,7 +383,7 @@
 sys_osf_setitimer(struct tcb *tcp)
 {
 	if (entering(tcp)) {
-		printxval(which, tcp->u_arg[0], "ITIMER_???");
+		printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
 		tprints(", ");
 		printitv_bitness(tcp, tcp->u_arg[1], BITNESS_32);
 		tprints(", ");
@@ -402,123 +397,9 @@
 }
 #endif
 
-static const struct xlat adjtimex_modes[] = {
-	XLAT(0),
-#ifdef ADJ_OFFSET
-	XLAT(ADJ_OFFSET),
-#endif
-#ifdef ADJ_FREQUENCY
-	XLAT(ADJ_FREQUENCY),
-#endif
-#ifdef ADJ_MAXERROR
-	XLAT(ADJ_MAXERROR),
-#endif
-#ifdef ADJ_ESTERROR
-	XLAT(ADJ_ESTERROR),
-#endif
-#ifdef ADJ_STATUS
-	XLAT(ADJ_STATUS),
-#endif
-#ifdef ADJ_TIMECONST
-	XLAT(ADJ_TIMECONST),
-#endif
-#ifdef ADJ_TAI
-	XLAT(ADJ_TAI),
-#endif
-#ifdef ADJ_SETOFFSET
-	XLAT(ADJ_SETOFFSET),
-#endif
-#ifdef ADJ_MICRO
-	XLAT(ADJ_MICRO),
-#endif
-#ifdef ADJ_NANO
-	XLAT(ADJ_NANO),
-#endif
-#ifdef ADJ_TICK
-	XLAT(ADJ_TICK),
-#endif
-#ifdef ADJ_OFFSET_SINGLESHOT
-	XLAT(ADJ_OFFSET_SINGLESHOT),
-#endif
-#ifdef ADJ_OFFSET_SS_READ
-	XLAT(ADJ_OFFSET_SS_READ),
-#endif
-	XLAT_END
-};
-
-static const struct xlat adjtimex_status[] = {
-#ifdef STA_PLL
-	XLAT(STA_PLL),
-#endif
-#ifdef STA_PPSFREQ
-	XLAT(STA_PPSFREQ),
-#endif
-#ifdef STA_PPSTIME
-	XLAT(STA_PPSTIME),
-#endif
-#ifdef STA_FLL
-	XLAT(STA_FLL),
-#endif
-#ifdef STA_INS
-	XLAT(STA_INS),
-#endif
-#ifdef STA_DEL
-	XLAT(STA_DEL),
-#endif
-#ifdef STA_UNSYNC
-	XLAT(STA_UNSYNC),
-#endif
-#ifdef STA_FREQHOLD
-	XLAT(STA_FREQHOLD),
-#endif
-#ifdef STA_PPSSIGNAL
-	XLAT(STA_PPSSIGNAL),
-#endif
-#ifdef STA_PPSJITTER
-	XLAT(STA_PPSJITTER),
-#endif
-#ifdef STA_PPSWANDER
-	XLAT(STA_PPSWANDER),
-#endif
-#ifdef STA_PPSERROR
-	XLAT(STA_PPSERROR),
-#endif
-#ifdef STA_CLOCKERR
-	XLAT(STA_CLOCKERR),
-#endif
-#ifdef STA_NANO
-	XLAT(STA_NANO),
-#endif
-#ifdef STA_MODE
-	XLAT(STA_MODE),
-#endif
-#ifdef STA_CLK
-	XLAT(STA_CLK),
-#endif
-	XLAT_END
-};
-
-static const struct xlat adjtimex_state[] = {
-#ifdef TIME_OK
-	XLAT(TIME_OK),
-#endif
-#ifdef TIME_INS
-	XLAT(TIME_INS),
-#endif
-#ifdef TIME_DEL
-	XLAT(TIME_DEL),
-#endif
-#ifdef TIME_OOP
-	XLAT(TIME_OOP),
-#endif
-#ifdef TIME_WAIT
-	XLAT(TIME_WAIT),
-#endif
-#ifdef TIME_ERROR
-	XLAT(TIME_ERROR),
-#endif
-	XLAT_END
-};
+#include "xlat/adjtimex_modes.h"
+#include "xlat/adjtimex_status.h"
+#include "xlat/adjtimex_state.h"
 
 #if SUPPORTED_PERSONALITIES > 1
 static int
@@ -638,64 +519,15 @@
 	return 0;
 }
 
-static const struct xlat clockflags[] = {
-	XLAT(TIMER_ABSTIME),
-	XLAT_END
-};
-
-static const struct xlat clocknames[] = {
-#ifdef CLOCK_REALTIME
-	XLAT(CLOCK_REALTIME),
-#endif
-#ifdef CLOCK_MONOTONIC
-	XLAT(CLOCK_MONOTONIC),
-#endif
-#ifdef CLOCK_PROCESS_CPUTIME_ID
-	XLAT(CLOCK_PROCESS_CPUTIME_ID),
-#endif
-#ifdef CLOCK_THREAD_CPUTIME_ID
-	XLAT(CLOCK_THREAD_CPUTIME_ID),
-#endif
-#ifdef CLOCK_MONOTONIC_RAW
-	XLAT(CLOCK_MONOTONIC_RAW),
-#endif
-#ifdef CLOCK_REALTIME_COARSE
-	XLAT(CLOCK_REALTIME_COARSE),
-#endif
-#ifdef CLOCK_MONOTONIC_COARSE
-	XLAT(CLOCK_MONOTONIC_COARSE),
-#endif
-#ifdef CLOCK_BOOTTIME
-	XLAT(CLOCK_BOOTTIME),
-#endif
-#ifdef CLOCK_REALTIME_ALARM
-	XLAT(CLOCK_REALTIME_ALARM),
-#endif
-#ifdef CLOCK_BOOTTIME_ALARM
-	XLAT(CLOCK_BOOTTIME_ALARM),
-#endif
-#ifdef CLOCK_SGI_CYCLE
-	XLAT(CLOCK_SGI_CYCLE),
-#endif
-#ifdef CLOCK_TAI
-	XLAT(CLOCK_TAI),
-#endif
-	XLAT_END
-};
-
-#ifdef CLOCKID_TO_FD
-static const struct xlat cpuclocknames[] = {
-	XLAT(CPUCLOCK_PROF),
-	XLAT(CPUCLOCK_VIRT),
-	XLAT(CPUCLOCK_SCHED),
-	XLAT_END
-};
-#endif
+#include "xlat/clockflags.h"
+#include "xlat/clocknames.h"
 
 static void
 printclockname(int clockid)
 {
 #ifdef CLOCKID_TO_FD
+# include "xlat/cpuclocknames.h"
+
 	if (clockid < 0) {
 		if ((clockid & CLOCKFD_MASK) == CLOCKFD)
 			tprintf("FD_TO_CLOCKID(%d)", CLOCKID_TO_FD(clockid));
@@ -771,13 +603,7 @@
 #ifndef SIGEV_THREAD_ID
 # define SIGEV_THREAD_ID 4
 #endif
-static const struct xlat sigev_value[] = {
-	XLAT(SIGEV_SIGNAL),
-	XLAT(SIGEV_NONE),
-	XLAT(SIGEV_THREAD),
-	XLAT(SIGEV_THREAD_ID),
-	XLAT_END
-};
+#include "xlat/sigev_value.h"
 
 #if SUPPORTED_PERSONALITIES > 1
 static void
@@ -1002,10 +828,7 @@
 #define TFD_TIMER_ABSTIME (1 << 0)
 #endif
 
-static const struct xlat timerfdflags[] = {
-	XLAT(TFD_TIMER_ABSTIME),
-	XLAT_END
-};
+#include "xlat/timerfdflags.h"
 
 int
 sys_timerfd(struct tcb *tcp)
diff --git a/unwind.c b/unwind.c
new file mode 100644
index 0000000..ba7b579
--- /dev/null
+++ b/unwind.c
@@ -0,0 +1,593 @@
+/*
+ * Copyright (c) 2013 Luca Clementi <luca.clementi@gmail.com>
+ *
+ * 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.
+ */
+
+#include "defs.h"
+#include <limits.h>
+#include <libunwind-ptrace.h>
+
+#ifdef _LARGEFILE64_SOURCE
+# ifdef HAVE_FOPEN64
+#  define fopen_for_input fopen64
+# else
+#  define fopen_for_input fopen
+# endif
+#else
+# define fopen_for_input fopen
+#endif
+
+#define DPRINTF(F, A, ...) if (debug_flag) fprintf(stderr, " [unwind(" A ")] " F "\n", __VA_ARGS__)
+
+/*
+ * Кeep a sorted array of cache entries,
+ * so that we can binary search through it.
+ */
+struct mmap_cache_t {
+	/**
+	 * example entry:
+	 * 7fabbb09b000-7fabbb09f000 r--p 00179000 fc:00 1180246 /lib/libc-2.11.1.so
+	 *
+	 * start_addr  is 0x7fabbb09b000
+	 * end_addr    is 0x7fabbb09f000
+	 * mmap_offset is 0x179000
+	 * binary_filename is "/lib/libc-2.11.1.so"
+	 */
+	unsigned long start_addr;
+	unsigned long end_addr;
+	unsigned long mmap_offset;
+	char* binary_filename;
+	bool deleted;
+};
+
+/*
+ * Type used in stacktrace walker
+ */
+typedef void (*call_action_fn)(void *data,
+			       char *binary_filename,
+			       char *symbol_name,
+			       unw_word_t function_offset,
+			       unsigned long true_offset);
+typedef void (*error_action_fn)(void *data,
+				const char *error,
+				unsigned long true_offset);
+
+/*
+ * Type used in stacktrace capturing
+ */
+struct call_t {
+       struct call_t* next;
+       char *output_line;
+};
+
+struct queue_t {
+       struct call_t *tail;
+       struct call_t *head;
+};
+
+static void queue_print(struct queue_t *queue);
+static void delete_mmap_cache(struct tcb *tcp, const char *caller);
+
+static unw_addr_space_t libunwind_as;
+static unsigned int mmap_cache_generation;
+
+void
+unwind_init(void)
+{
+	libunwind_as = unw_create_addr_space(&_UPT_accessors, 0);
+	if (!libunwind_as)
+		error_msg_and_die("failed to create address space for stack tracing");
+	unw_set_caching_policy(libunwind_as, UNW_CACHE_GLOBAL);
+}
+
+void
+unwind_tcb_init(struct tcb *tcp)
+{
+	tcp->libunwind_ui = _UPT_create(tcp->pid);
+	if (!tcp->libunwind_ui)
+		die_out_of_memory();
+
+	tcp->queue = malloc(sizeof(*tcp->queue));
+	if (!tcp->queue)
+		die_out_of_memory();
+	tcp->queue->head = NULL;
+	tcp->queue->tail = NULL;
+}
+
+void
+unwind_tcb_fin(struct tcb *tcp)
+{
+	queue_print(tcp->queue);
+	free(tcp->queue);
+	tcp->queue = NULL;
+
+	delete_mmap_cache(tcp, __FUNCTION__);
+
+	_UPT_destroy(tcp->libunwind_ui);
+	tcp->libunwind_ui = NULL;
+}
+
+/*
+ * caching of /proc/ID/maps for each process to speed up stack tracing
+ *
+ * The cache must be refreshed after some syscall: mmap, mprotect, munmap, execve
+ */
+static void
+build_mmap_cache(struct tcb* tcp)
+{
+	unsigned long start_addr, end_addr, mmap_offset;
+	char filename[sizeof ("/proc/0123456789/maps")];
+	char buffer[PATH_MAX + 80];
+	char binary_path[PATH_MAX];
+	struct mmap_cache_t *cur_entry, *prev_entry;
+	/* start with a small dynamically-allocated array and then expand it */
+	size_t cur_array_size = 10;
+	struct mmap_cache_t *cache_head;
+	FILE *fp;
+
+	const char *deleted = " (deleted)";
+	size_t blen;
+	size_t dlen;
+
+	unw_flush_cache (libunwind_as, 0, 0);
+
+	sprintf(filename, "/proc/%d/maps", tcp->pid);
+	fp = fopen_for_input(filename, "r");
+	if (!fp) {
+		perror_msg("fopen: %s", filename);
+		return;
+	}
+
+	cache_head = calloc(cur_array_size, sizeof(*cache_head));
+	if (!cache_head)
+		die_out_of_memory();
+
+	while (fgets(buffer, sizeof(buffer), fp) != NULL) {
+		binary_path[0] = '\0'; // 'reset' it just to be paranoid
+
+		sscanf(buffer, "%lx-%lx %*c%*c%*c%*c %lx %*x:%*x %*d %[^\n]",
+		       &start_addr, &end_addr, &mmap_offset, binary_path);
+
+		/* ignore special 'fake files' like "[vdso]", "[heap]", "[stack]", */
+		if (binary_path[0] == '[') {
+			continue;
+		}
+
+		if (binary_path[0] == '\0') {
+			continue;
+		}
+
+		if (end_addr < start_addr)
+			perror_msg_and_die("%s: unrecognized maps file format",
+					   filename);
+
+		cur_entry = &cache_head[tcp->mmap_cache_size];
+		cur_entry->start_addr = start_addr;
+		cur_entry->end_addr = end_addr;
+		cur_entry->mmap_offset = mmap_offset;
+		cur_entry->binary_filename = strdup(binary_path);
+
+		dlen = strlen(deleted);
+		blen = strlen(binary_path);
+		if (blen >= dlen && strcmp(binary_path + blen - dlen, deleted) == 0)
+			cur_entry->deleted = true;
+		else
+			cur_entry->deleted = false;
+
+		/*
+		 * sanity check to make sure that we're storing
+		 * non-overlapping regions in ascending order
+		 */
+		if (tcp->mmap_cache_size > 0) {
+			prev_entry = &cache_head[tcp->mmap_cache_size - 1];
+			if (prev_entry->start_addr >= cur_entry->start_addr)
+				perror_msg_and_die("Overlaying memory region in %s",
+						   filename);
+			if (prev_entry->end_addr > cur_entry->start_addr)
+				perror_msg_and_die("Overlaying memory region in %s",
+						   filename);
+		}
+		tcp->mmap_cache_size++;
+
+		/* resize doubling its size */
+		if (tcp->mmap_cache_size >= cur_array_size) {
+			cur_array_size *= 2;
+			cache_head = realloc(cache_head, cur_array_size * sizeof(*cache_head));
+			if (!cache_head)
+				die_out_of_memory();
+		}
+	}
+	fclose(fp);
+	tcp->mmap_cache = cache_head;
+	tcp->mmap_cache_generation = mmap_cache_generation;
+
+	DPRINTF("tgen=%u, ggen=%u, tcp=%p, cache=%p",
+		"cache-build",
+		tcp->mmap_cache_generation,
+		mmap_cache_generation,
+		tcp, tcp->mmap_cache);
+}
+
+/* deleting the cache */
+static void
+delete_mmap_cache(struct tcb *tcp, const char *caller)
+{
+	unsigned int i;
+
+	DPRINTF("tgen=%u, ggen=%u, tcp=%p, cache=%p, caller=%s",
+		"cache-delete",
+		tcp->mmap_cache_generation,
+		mmap_cache_generation,
+		tcp, tcp->mmap_cache, caller);
+
+	for (i = 0; i < tcp->mmap_cache_size; i++) {
+		free(tcp->mmap_cache[i].binary_filename);
+		tcp->mmap_cache[i].binary_filename = NULL;
+	}
+	free(tcp->mmap_cache);
+	tcp->mmap_cache = NULL;
+	tcp->mmap_cache_size = 0;
+}
+
+static bool
+rebuild_cache_if_invalid(struct tcb *tcp, const char *caller)
+{
+	if ((tcp->mmap_cache_generation != mmap_cache_generation)
+	    && tcp->mmap_cache)
+		delete_mmap_cache(tcp, caller);
+
+	if (!tcp->mmap_cache)
+		build_mmap_cache(tcp);
+
+	if (!tcp->mmap_cache || !tcp->mmap_cache_size)
+		return false;
+	else
+		return true;
+}
+
+void
+unwind_cache_invalidate(struct tcb* tcp)
+{
+	mmap_cache_generation++;
+	DPRINTF("tgen=%u, ggen=%u, tcp=%p, cache=%p", "increment",
+		tcp->mmap_cache_generation,
+		mmap_cache_generation,
+		tcp,
+		tcp->mmap_cache);
+}
+
+/*
+ * walking the stack
+ */
+static void
+stacktrace_walk(struct tcb *tcp,
+		call_action_fn call_action,
+		error_action_fn error_action,
+		void *data)
+{
+	unw_word_t ip;
+	unw_cursor_t cursor;
+	unw_word_t function_offset;
+	int stack_depth = 0, ret_val;
+	/* these are used for the binary search through the mmap_chace */
+	int lower, upper, mid;
+	size_t symbol_name_size = 40;
+	char * symbol_name;
+	struct mmap_cache_t* cur_mmap_cache;
+	unsigned long true_offset;
+	bool berror_expected = false;
+
+	if (!tcp->mmap_cache)
+		error_msg_and_die("bug: mmap_cache is NULL");
+	if (tcp->mmap_cache_size == 0)
+		error_msg_and_die("bug: mmap_cache is empty");
+
+	symbol_name = malloc(symbol_name_size);
+	if (!symbol_name)
+		die_out_of_memory();
+
+	if (unw_init_remote(&cursor, libunwind_as, tcp->libunwind_ui) < 0)
+		perror_msg_and_die("Can't initiate libunwind");
+
+	do {
+		/* looping on the stack frame */
+		if (unw_get_reg(&cursor, UNW_REG_IP, &ip) < 0) {
+			perror_msg("Can't walk the stack of process %d", tcp->pid);
+			break;
+		}
+
+		lower = 0;
+		upper = (int) tcp->mmap_cache_size - 1;
+
+		while (lower <= upper) {
+			/* find the mmap_cache and print the stack frame */
+			mid = (upper + lower) / 2;
+			cur_mmap_cache = &tcp->mmap_cache[mid];
+
+			if (ip >= cur_mmap_cache->start_addr &&
+			    ip < cur_mmap_cache->end_addr) {
+				for (;;) {
+					symbol_name[0] = '\0';
+					ret_val = unw_get_proc_name(&cursor, symbol_name,
+						symbol_name_size, &function_offset);
+					if (ret_val != -UNW_ENOMEM)
+						break;
+					symbol_name_size *= 2;
+					symbol_name = realloc(symbol_name, symbol_name_size);
+					if (!symbol_name)
+						die_out_of_memory();
+				}
+
+				if (cur_mmap_cache->deleted)
+					berror_expected = true;
+
+				true_offset = ip - cur_mmap_cache->start_addr +
+					cur_mmap_cache->mmap_offset;
+				if (symbol_name[0]) {
+					call_action(data,
+						    cur_mmap_cache->binary_filename,
+						    symbol_name,
+						    function_offset,
+						    true_offset);
+				} else {
+					call_action(data,
+						    cur_mmap_cache->binary_filename,
+						    symbol_name,
+						    0,
+						    true_offset);
+				}
+				break; /* stack frame printed */
+			}
+			else if (mid == 0) {
+				/*
+				 * there is a bug in libunwind >= 1.0
+				 * after a set_tid_address syscall
+				 * unw_get_reg returns IP == 0
+				 */
+				if(ip)
+					error_action(data,
+						     "backtracing_error", 0);
+				goto ret;
+			}
+			else if (ip < cur_mmap_cache->start_addr)
+				upper = mid - 1;
+			else
+				lower = mid + 1;
+
+		}
+		if (lower > upper) {
+			error_action(data,
+				     berror_expected
+				     ?"expected_backtracing_error"
+				     :"unexpected_backtracing_error",
+				     ip);
+			goto ret;
+		}
+
+		ret_val = unw_step(&cursor);
+
+		if (++stack_depth > 255) {
+			error_action(data,
+				     "too many stack frames", 0);
+			break;
+		}
+	} while (ret_val > 0);
+ret:
+	free(symbol_name);
+}
+
+/*
+ * printing an entry in stack to stream or buffer
+ */
+/*
+ * we want to keep the format used by backtrace_symbols from the glibc
+ *
+ * ./a.out() [0x40063d]
+ * ./a.out() [0x4006bb]
+ * ./a.out() [0x4006c6]
+ * /lib64/libc.so.6(__libc_start_main+0xed) [0x7fa2f8a5976d]
+ * ./a.out() [0x400569]
+ */
+#define STACK_ENTRY_SYMBOL_FMT			\
+	" > %s(%s+0x%lx) [0x%lx]\n",		\
+	binary_filename,			\
+	symbol_name,				\
+	(unsigned long) function_offset,	\
+	true_offset
+#define STACK_ENTRY_NOSYMBOL_FMT		\
+	" > %s() [0x%lx]\n",			\
+	binary_filename, true_offset
+#define STACK_ENTRY_BUG_FMT			\
+	" > BUG IN %s\n"
+#define STACK_ENTRY_ERROR_WITH_OFFSET_FMT	\
+	" > %s [0x%lx]\n", error, true_offset
+#define STACK_ENTRY_ERROR_FMT			\
+	" > %s\n", error
+
+static void
+print_call_cb(void *dummy,
+	      char *binary_filename,
+	      char *symbol_name,
+	      unw_word_t function_offset,
+	      unsigned long true_offset)
+{
+	if (symbol_name)
+		tprintf(STACK_ENTRY_SYMBOL_FMT);
+	else if (binary_filename)
+		tprintf(STACK_ENTRY_NOSYMBOL_FMT);
+	else
+		tprintf(STACK_ENTRY_BUG_FMT, __FUNCTION__);
+
+	line_ended();
+}
+
+static void
+print_error_cb(void *dummy,
+	       const char *error,
+	       unsigned long true_offset)
+{
+	if (true_offset)
+		tprintf(STACK_ENTRY_ERROR_WITH_OFFSET_FMT);
+	else
+		tprintf(STACK_ENTRY_ERROR_FMT);
+
+	line_ended();
+}
+
+static char *
+sprint_call_or_error(char *binary_filename,
+		     char *symbol_name,
+		     unw_word_t function_offset,
+		     unsigned long true_offset,
+		     const char *error)
+{
+       char *output_line = NULL;
+       int n;
+
+       if (symbol_name)
+               n = asprintf(&output_line, STACK_ENTRY_SYMBOL_FMT);
+       else if (binary_filename)
+               n = asprintf(&output_line, STACK_ENTRY_NOSYMBOL_FMT);
+       else if (error)
+               n = true_offset
+                       ? asprintf(&output_line, STACK_ENTRY_ERROR_WITH_OFFSET_FMT)
+                       : asprintf(&output_line, STACK_ENTRY_ERROR_FMT);
+       else
+               n = asprintf(&output_line, STACK_ENTRY_BUG_FMT, __FUNCTION__);
+
+       if (n < 0)
+               error_msg_and_die("error in asprintf");
+
+       return output_line;
+}
+
+/*
+ * queue manipulators
+ */
+static void
+queue_put(struct queue_t *queue,
+	  char *binary_filename,
+	  char *symbol_name,
+	  unw_word_t function_offset,
+	  unsigned long true_offset,
+	  const char *error)
+{
+	struct call_t *call;
+
+	call = malloc(sizeof(*call));
+	if (!call)
+		die_out_of_memory();
+
+	call->output_line = sprint_call_or_error(binary_filename,
+						 symbol_name,
+						 function_offset,
+						 true_offset,
+						 error);
+	call->next = NULL;
+
+	if (!queue->head) {
+		queue->head = call;
+		queue->tail = call;
+	} else {
+		queue->tail->next = call;
+		queue->tail = call;
+	}
+}
+
+static void
+queue_put_call(void *queue,
+	       char *binary_filename,
+	       char *symbol_name,
+	       unw_word_t function_offset,
+	       unsigned long true_offset)
+{
+	queue_put(queue,
+		  binary_filename,
+		  symbol_name,
+		  function_offset,
+		  true_offset,
+		  NULL);
+}
+
+static void
+queue_put_error(void *queue,
+		const char *error,
+		unsigned long ip)
+{
+	queue_put(queue, NULL, NULL, 0, ip, error);
+}
+
+static void
+queue_print(struct queue_t *queue)
+{
+	struct call_t *call, *tmp;
+
+	queue->tail = NULL;
+	call = queue->head;
+	queue->head = NULL;
+	while (call) {
+		tmp = call;
+		call = call->next;
+
+		tprints(tmp->output_line);
+		line_ended();
+
+		free(tmp->output_line);
+		tmp->output_line = NULL;
+		tmp->next = NULL;
+		free(tmp);
+	}
+}
+
+/*
+ * printing stack
+ */
+void
+unwind_print_stacktrace(struct tcb* tcp)
+{
+       if (tcp->queue->head) {
+	       DPRINTF("tcp=%p, queue=%p", "queueprint", tcp, tcp->queue->head);
+	       queue_print(tcp->queue);
+       }
+       else if (rebuild_cache_if_invalid(tcp, __FUNCTION__)) {
+               DPRINTF("tcp=%p, queue=%p", "stackprint", tcp, tcp->queue->head);
+               stacktrace_walk(tcp, print_call_cb, print_error_cb, NULL);
+       }
+}
+
+/*
+ * capturing stack
+ */
+void
+unwind_capture_stacktrace(struct tcb *tcp)
+{
+	if (tcp->queue->head)
+		error_msg_and_die("bug: unprinted entries in queue");
+
+	if (rebuild_cache_if_invalid(tcp, __FUNCTION__)) {
+		stacktrace_walk(tcp, queue_put_call, queue_put_error,
+				tcp->queue);
+		DPRINTF("tcp=%p, queue=%p", "captured", tcp, tcp->queue->head);
+	}
+}
diff --git a/util.c b/util.c
index d986f7c..33482d5 100644
--- a/util.c
+++ b/util.c
@@ -79,13 +79,13 @@
 }
 
 int
-tv_nz(struct timeval *a)
+tv_nz(const struct timeval *a)
 {
 	return a->tv_sec || a->tv_usec;
 }
 
 int
-tv_cmp(struct timeval *a, struct timeval *b)
+tv_cmp(const struct timeval *a, const struct timeval *b)
 {
 	if (a->tv_sec < b->tv_sec
 	    || (a->tv_sec == b->tv_sec && a->tv_usec < b->tv_usec))
@@ -97,13 +97,13 @@
 }
 
 double
-tv_float(struct timeval *tv)
+tv_float(const struct timeval *tv)
 {
 	return tv->tv_sec + tv->tv_usec/1000000.0;
 }
 
 void
-tv_add(struct timeval *tv, struct timeval *a, struct timeval *b)
+tv_add(struct timeval *tv, const struct timeval *a, const struct timeval *b)
 {
 	tv->tv_sec = a->tv_sec + b->tv_sec;
 	tv->tv_usec = a->tv_usec + b->tv_usec;
@@ -114,7 +114,7 @@
 }
 
 void
-tv_sub(struct timeval *tv, struct timeval *a, struct timeval *b)
+tv_sub(struct timeval *tv, const struct timeval *a, const struct timeval *b)
 {
 	tv->tv_sec = a->tv_sec - b->tv_sec;
 	tv->tv_usec = a->tv_usec - b->tv_usec;
@@ -125,7 +125,7 @@
 }
 
 void
-tv_div(struct timeval *tv, struct timeval *a, int n)
+tv_div(struct timeval *tv, const struct timeval *a, int n)
 {
 	tv->tv_usec = (a->tv_sec % n * 1000000 + a->tv_usec + n / 2) / n;
 	tv->tv_sec = a->tv_sec / n + tv->tv_usec / 1000000;
@@ -133,7 +133,7 @@
 }
 
 void
-tv_mul(struct timeval *tv, struct timeval *a, int n)
+tv_mul(struct timeval *tv, const struct timeval *a, int n)
 {
 	tv->tv_usec = a->tv_usec * n;
 	tv->tv_sec = a->tv_sec * n + tv->tv_usec / 1000000;
@@ -1492,8 +1492,7 @@
 			}
 	}
 
-	if (tcp->s_ent->sys_func == sys_fork ||
-	    tcp->s_ent->sys_func == sys_vfork) {
+	if (tcp->s_ent->sys_func == sys_fork) {
 		if (arg_setup(tcp, &state) < 0
 		    || get_arg0(tcp, &state, &tcp->inst[0]) < 0
 		    || get_arg1(tcp, &state, &tcp->inst[1]) < 0
diff --git a/xlat/access_flags.in b/xlat/access_flags.in
new file mode 100644
index 0000000..cc46ad5
--- /dev/null
+++ b/xlat/access_flags.in
@@ -0,0 +1,6 @@
+F_OK
+R_OK
+W_OK
+X_OK
+EFF_ONLY_OK
+EX_OK
diff --git a/xlat/aclcmds.in b/xlat/aclcmds.in
new file mode 100644
index 0000000..87559c6
--- /dev/null
+++ b/xlat/aclcmds.in
@@ -0,0 +1,6 @@
+SETACL
+GETACL
+GETACLCNT
+ACL_GET
+ACL_SET
+ACL_CNT
diff --git a/xlat/aclipc.in b/xlat/aclipc.in
new file mode 100644
index 0000000..fd4d61c
--- /dev/null
+++ b/xlat/aclipc.in
@@ -0,0 +1,3 @@
+IPC_SHM
+IPC_SEM
+IPC_MSG
diff --git a/xlat/addrfams.in b/xlat/addrfams.in
new file mode 100644
index 0000000..a869574
--- /dev/null
+++ b/xlat/addrfams.in
@@ -0,0 +1,41 @@
+AF_UNSPEC
+AF_LOCAL
+AF_UNIX
+AF_INET
+AF_AX25
+AF_IPX
+AF_APPLETALK
+AF_NETROM
+AF_BRIDGE
+AF_ATMPVC
+AF_X25
+AF_INET6
+AF_ROSE
+AF_DECnet
+AF_NETBEUI
+AF_SECURITY
+AF_KEY
+AF_NETLINK
+AF_ROUTE
+AF_PACKET
+AF_ASH
+AF_ECONET
+AF_ATMSVC
+AF_RDS
+AF_SNA
+AF_IRDA
+AF_PPPOX
+AF_WANPIPE
+AF_LLC
+AF_CAN
+AF_TIPC
+AF_BLUETOOTH
+AF_IUCV
+AF_RXRPC
+AF_ISDN
+AF_PHONET
+AF_IEEE802154
+AF_CAIF
+AF_ALG
+AF_NFC
+AF_VSOCK
diff --git a/xlat/adjtimex_modes.in b/xlat/adjtimex_modes.in
new file mode 100644
index 0000000..e2ca680
--- /dev/null
+++ b/xlat/adjtimex_modes.in
@@ -0,0 +1,14 @@
+0
+ADJ_OFFSET
+ADJ_FREQUENCY
+ADJ_MAXERROR
+ADJ_ESTERROR
+ADJ_STATUS
+ADJ_TIMECONST
+ADJ_TAI
+ADJ_SETOFFSET
+ADJ_MICRO
+ADJ_NANO
+ADJ_TICK
+ADJ_OFFSET_SINGLESHOT
+ADJ_OFFSET_SS_READ
diff --git a/xlat/adjtimex_state.in b/xlat/adjtimex_state.in
new file mode 100644
index 0000000..873b9a1
--- /dev/null
+++ b/xlat/adjtimex_state.in
@@ -0,0 +1,6 @@
+TIME_OK
+TIME_INS
+TIME_DEL
+TIME_OOP
+TIME_WAIT
+TIME_ERROR
diff --git a/xlat/adjtimex_status.in b/xlat/adjtimex_status.in
new file mode 100644
index 0000000..c6b6264
--- /dev/null
+++ b/xlat/adjtimex_status.in
@@ -0,0 +1,16 @@
+STA_PLL
+STA_PPSFREQ
+STA_PPSTIME
+STA_FLL
+STA_INS
+STA_DEL
+STA_UNSYNC
+STA_FREQHOLD
+STA_PPSSIGNAL
+STA_PPSJITTER
+STA_PPSWANDER
+STA_PPSERROR
+STA_CLOCKERR
+STA_NANO
+STA_MODE
+STA_CLK
diff --git a/xlat/advise.in b/xlat/advise.in
new file mode 100644
index 0000000..47540e0
--- /dev/null
+++ b/xlat/advise.in
@@ -0,0 +1,6 @@
+POSIX_FADV_NORMAL
+POSIX_FADV_RANDOM
+POSIX_FADV_SEQUENTIAL
+POSIX_FADV_WILLNEED
+POSIX_FADV_DONTNEED
+POSIX_FADV_NOREUSE
diff --git a/xlat/af_packet_types.in b/xlat/af_packet_types.in
new file mode 100644
index 0000000..18cf655
--- /dev/null
+++ b/xlat/af_packet_types.in
@@ -0,0 +1,7 @@
+PACKET_HOST
+PACKET_BROADCAST
+PACKET_MULTICAST
+PACKET_OTHERHOST
+PACKET_OUTGOING
+PACKET_LOOPBACK
+PACKET_FASTROUTE
diff --git a/xlat/archvals.in b/xlat/archvals.in
new file mode 100644
index 0000000..22ad7c1
--- /dev/null
+++ b/xlat/archvals.in
@@ -0,0 +1,4 @@
+ARCH_SET_GS
+ARCH_SET_FS
+ARCH_GET_FS
+ARCH_GET_GS
diff --git a/xlat/at_flags.in b/xlat/at_flags.in
new file mode 100644
index 0000000..1a790d5
--- /dev/null
+++ b/xlat/at_flags.in
@@ -0,0 +1,5 @@
+AT_SYMLINK_NOFOLLOW
+AT_REMOVEDIR
+AT_SYMLINK_FOLLOW
+AT_NO_AUTOMOUNT
+AT_EMPTY_PATH
diff --git a/xlat/atomic_ops.in b/xlat/atomic_ops.in
new file mode 100644
index 0000000..42261ea
--- /dev/null
+++ b/xlat/atomic_ops.in
@@ -0,0 +1,9 @@
+	{ 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"		},
diff --git a/xlat/baud_options.in b/xlat/baud_options.in
new file mode 100644
index 0000000..be7311a
--- /dev/null
+++ b/xlat/baud_options.in
@@ -0,0 +1,33 @@
+B0
+B50
+B75
+B110
+B134
+B150
+B200
+B300
+B600
+B1200
+B1800
+B2400
+B4800
+B9600
+B19200
+B38400
+B57600
+B115200
+B230400
+B460800
+B500000
+B576000
+B921600
+B1000000
+B1152000
+B1500000
+B2000000
+B2500000
+B3000000
+B3500000
+B4000000
+EXTA
+EXTB
diff --git a/xlat/blkpg_ops.in b/xlat/blkpg_ops.in
new file mode 100644
index 0000000..75f6f70
--- /dev/null
+++ b/xlat/blkpg_ops.in
@@ -0,0 +1,2 @@
+BLKPG_ADD_PARTITION
+BLKPG_DEL_PARTITION
diff --git a/xlat/bootflags1.in b/xlat/bootflags1.in
new file mode 100644
index 0000000..d2b5f9f
--- /dev/null
+++ b/xlat/bootflags1.in
@@ -0,0 +1 @@
+LINUX_REBOOT_MAGIC1
diff --git a/xlat/bootflags2.in b/xlat/bootflags2.in
new file mode 100644
index 0000000..56ad023
--- /dev/null
+++ b/xlat/bootflags2.in
@@ -0,0 +1,4 @@
+LINUX_REBOOT_MAGIC2
+LINUX_REBOOT_MAGIC2A
+LINUX_REBOOT_MAGIC2B
+LINUX_REBOOT_MAGIC2C
diff --git a/xlat/bootflags3.in b/xlat/bootflags3.in
new file mode 100644
index 0000000..d13ab87
--- /dev/null
+++ b/xlat/bootflags3.in
@@ -0,0 +1,8 @@
+LINUX_REBOOT_CMD_RESTART
+LINUX_REBOOT_CMD_HALT
+LINUX_REBOOT_CMD_CAD_ON
+LINUX_REBOOT_CMD_CAD_OFF
+LINUX_REBOOT_CMD_POWER_OFF
+LINUX_REBOOT_CMD_RESTART2
+LINUX_REBOOT_CMD_SW_SUSPEND
+LINUX_REBOOT_CMD_KEXEC
diff --git a/xlat/cacheflush_scope.in b/xlat/cacheflush_scope.in
new file mode 100644
index 0000000..5f91b90
--- /dev/null
+++ b/xlat/cacheflush_scope.in
@@ -0,0 +1,3 @@
+FLUSH_SCOPE_LINE
+FLUSH_SCOPE_PAGE
+FLUSH_SCOPE_ALL
diff --git a/xlat/cap_version.in b/xlat/cap_version.in
new file mode 100644
index 0000000..70d6cae
--- /dev/null
+++ b/xlat/cap_version.in
@@ -0,0 +1,3 @@
+_LINUX_CAPABILITY_VERSION_1
+_LINUX_CAPABILITY_VERSION_2
+_LINUX_CAPABILITY_VERSION_3
diff --git a/xlat/capabilities.in b/xlat/capabilities.in
new file mode 100644
index 0000000..59f24f7
--- /dev/null
+++ b/xlat/capabilities.in
@@ -0,0 +1,32 @@
+1<<CAP_CHOWN
+1<<CAP_DAC_OVERRIDE
+1<<CAP_DAC_READ_SEARCH
+1<<CAP_FOWNER
+1<<CAP_FSETID
+1<<CAP_KILL
+1<<CAP_SETGID
+1<<CAP_SETUID
+1<<CAP_SETPCAP
+1<<CAP_LINUX_IMMUTABLE
+1<<CAP_NET_BIND_SERVICE
+1<<CAP_NET_BROADCAST
+1<<CAP_NET_ADMIN
+1<<CAP_NET_RAW
+1<<CAP_IPC_LOCK
+1<<CAP_IPC_OWNER
+1<<CAP_SYS_MODULE
+1<<CAP_SYS_RAWIO
+1<<CAP_SYS_CHROOT
+1<<CAP_SYS_PTRACE
+1<<CAP_SYS_PACCT
+1<<CAP_SYS_ADMIN
+1<<CAP_SYS_BOOT
+1<<CAP_SYS_NICE
+1<<CAP_SYS_RESOURCE
+1<<CAP_SYS_TIME
+1<<CAP_SYS_TTY_CONFIG
+1<<CAP_MKNOD
+1<<CAP_LEASE
+1<<CAP_AUDIT_WRITE
+1<<CAP_AUDIT_CONTROL
+1<<CAP_SETFCAP
diff --git a/xlat/clockflags.in b/xlat/clockflags.in
new file mode 100644
index 0000000..2c3a82f
--- /dev/null
+++ b/xlat/clockflags.in
@@ -0,0 +1 @@
+TIMER_ABSTIME
diff --git a/xlat/clocknames.in b/xlat/clocknames.in
new file mode 100644
index 0000000..4485666
--- /dev/null
+++ b/xlat/clocknames.in
@@ -0,0 +1,12 @@
+CLOCK_REALTIME
+CLOCK_MONOTONIC
+CLOCK_PROCESS_CPUTIME_ID
+CLOCK_THREAD_CPUTIME_ID
+CLOCK_MONOTONIC_RAW
+CLOCK_REALTIME_COARSE
+CLOCK_MONOTONIC_COARSE
+CLOCK_BOOTTIME
+CLOCK_REALTIME_ALARM
+CLOCK_BOOTTIME_ALARM
+CLOCK_SGI_CYCLE
+CLOCK_TAI
diff --git a/xlat/clone_flags.in b/xlat/clone_flags.in
new file mode 100644
index 0000000..1a914b6
--- /dev/null
+++ b/xlat/clone_flags.in
@@ -0,0 +1,23 @@
+CLONE_VM
+CLONE_FS
+CLONE_FILES
+CLONE_SIGHAND
+CLONE_IDLETASK
+CLONE_PTRACE
+CLONE_VFORK
+CLONE_PARENT
+CLONE_THREAD
+CLONE_NEWNS
+CLONE_SYSVSEM
+CLONE_SETTLS
+CLONE_PARENT_SETTID
+CLONE_CHILD_CLEARTID
+CLONE_UNTRACED
+CLONE_CHILD_SETTID
+CLONE_STOPPED
+CLONE_NEWUTS
+CLONE_NEWIPC
+CLONE_NEWUSER
+CLONE_NEWPID
+CLONE_NEWNET
+CLONE_IO
diff --git a/xlat/cpuclocknames.in b/xlat/cpuclocknames.in
new file mode 100644
index 0000000..e61fa8f
--- /dev/null
+++ b/xlat/cpuclocknames.in
@@ -0,0 +1,3 @@
+CPUCLOCK_PROF
+CPUCLOCK_VIRT
+CPUCLOCK_SCHED
diff --git a/xlat/delete_module_flags.in b/xlat/delete_module_flags.in
new file mode 100644
index 0000000..8f02711
--- /dev/null
+++ b/xlat/delete_module_flags.in
@@ -0,0 +1,2 @@
+O_NONBLOCK
+O_TRUNC
diff --git a/xlat/direnttypes.in b/xlat/direnttypes.in
new file mode 100644
index 0000000..b16cc21
--- /dev/null
+++ b/xlat/direnttypes.in
@@ -0,0 +1,9 @@
+DT_UNKNOWN
+DT_FIFO
+DT_CHR
+DT_DIR
+DT_BLK
+DT_REG
+DT_LNK
+DT_SOCK
+DT_WHT
diff --git a/xlat/domains.in b/xlat/domains.in
new file mode 100644
index 0000000..bb216ba
--- /dev/null
+++ b/xlat/domains.in
@@ -0,0 +1,41 @@
+PF_UNSPEC
+PF_LOCAL
+PF_UNIX
+PF_INET
+PF_AX25
+PF_IPX
+PF_APPLETALK
+PF_NETROM
+PF_BRIDGE
+PF_ATMPVC
+PF_X25
+PF_INET6
+PF_ROSE
+PF_DECnet
+PF_NETBEUI
+PF_SECURITY
+PF_KEY
+PF_NETLINK
+PF_ROUTE
+PF_PACKET
+PF_ASH
+PF_ECONET
+PF_ATMSVC
+PF_RDS
+PF_SNA
+PF_IRDA
+PF_PPPOX
+PF_WANPIPE
+PF_LLC
+PF_CAN
+PF_TIPC
+PF_BLUETOOTH
+PF_IUCV
+PF_RXRPC
+PF_ISDN
+PF_PHONET
+PF_IEEE802154
+PF_CAIF
+PF_ALG
+PF_NFC
+PF_VSOCK
diff --git a/xlat/epollctls.in b/xlat/epollctls.in
new file mode 100644
index 0000000..45b573e
--- /dev/null
+++ b/xlat/epollctls.in
@@ -0,0 +1,3 @@
+EPOLL_CTL_ADD
+EPOLL_CTL_MOD
+EPOLL_CTL_DEL
diff --git a/xlat/epollevents.in b/xlat/epollevents.in
new file mode 100644
index 0000000..0448588
--- /dev/null
+++ b/xlat/epollevents.in
@@ -0,0 +1,13 @@
+EPOLLIN
+EPOLLPRI
+EPOLLOUT
+EPOLLRDNORM
+EPOLLRDBAND
+EPOLLWRNORM
+EPOLLWRBAND
+EPOLLMSG
+EPOLLERR
+EPOLLHUP
+EPOLLRDHUP
+EPOLLONESHOT
+EPOLLET
diff --git a/xlat/epollflags.in b/xlat/epollflags.in
new file mode 100644
index 0000000..a5ab4d0
--- /dev/null
+++ b/xlat/epollflags.in
@@ -0,0 +1,2 @@
+EPOLL_CLOEXEC
+EPOLL_NONBLOCK
diff --git a/xlat/fan_classes.in b/xlat/fan_classes.in
new file mode 100644
index 0000000..d9f24de
--- /dev/null
+++ b/xlat/fan_classes.in
@@ -0,0 +1,3 @@
+FAN_CLASS_NOTIF
+FAN_CLASS_CONTENT
+FAN_CLASS_PRE_CONTENT
diff --git a/xlat/fan_event_flags.in b/xlat/fan_event_flags.in
new file mode 100644
index 0000000..79c6b2b
--- /dev/null
+++ b/xlat/fan_event_flags.in
@@ -0,0 +1,11 @@
+FAN_ACCESS
+FAN_MODIFY
+FAN_CLOSE
+FAN_CLOSE_WRITE
+FAN_CLOSE_NOWRITE
+FAN_OPEN
+FAN_Q_OVERFLOW
+FAN_OPEN_PERM
+FAN_ACCESS_PERM
+FAN_ONDIR
+FAN_EVENT_ON_CHILD
diff --git a/xlat/fan_init_flags.in b/xlat/fan_init_flags.in
new file mode 100644
index 0000000..2752269
--- /dev/null
+++ b/xlat/fan_init_flags.in
@@ -0,0 +1,4 @@
+FAN_CLOEXEC
+FAN_NONBLOCK
+FAN_UNLIMITED_QUEUE
+FAN_UNLIMITED_MARKS
diff --git a/xlat/fan_mark_flags.in b/xlat/fan_mark_flags.in
new file mode 100644
index 0000000..4526665
--- /dev/null
+++ b/xlat/fan_mark_flags.in
@@ -0,0 +1,8 @@
+FAN_MARK_ADD
+FAN_MARK_REMOVE
+FAN_MARK_DONT_FOLLOW
+FAN_MARK_ONLYDIR
+FAN_MARK_MOUNT
+FAN_MARK_IGNORED_MASK
+FAN_MARK_IGNORED_SURV_MODIFY
+FAN_MARK_FLUSH
diff --git a/xlat/fcntlcmds.in b/xlat/fcntlcmds.in
new file mode 100644
index 0000000..7db4222
--- /dev/null
+++ b/xlat/fcntlcmds.in
@@ -0,0 +1,40 @@
+F_DUPFD
+F_GETFD
+F_SETFD
+F_GETFL
+F_SETFL
+F_GETLK
+F_SETLK
+F_SETLKW
+F_GETOWN
+F_SETOWN
+F_RSETLK
+F_RSETLKW
+F_RGETLK
+F_CNVT
+F_SETSIG
+F_GETSIG
+F_CHKFL
+F_DUP2FD
+F_ALLOCSP
+F_ISSTREAM
+F_PRIV
+F_NPRIV
+F_QUOTACL
+F_BLOCKS
+F_BLKSIZE
+F_GETOWN
+F_SETOWN
+F_REVOKE
+F_SETLK
+F_SETLKW
+F_GETLK
+F_SETLK64
+F_SETLKW64
+F_GETLK64
+F_SHARE
+F_UNSHARE
+F_SETLEASE
+F_GETLEASE
+F_NOTIFY
+F_DUPFD_CLOEXEC
diff --git a/xlat/fdflags.in b/xlat/fdflags.in
new file mode 100644
index 0000000..f6c02b4
--- /dev/null
+++ b/xlat/fdflags.in
@@ -0,0 +1 @@
+FD_CLOEXEC
diff --git a/xlat/fileflags.in b/xlat/fileflags.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xlat/fileflags.in
diff --git a/xlat/flockcmds.in b/xlat/flockcmds.in
new file mode 100644
index 0000000..50ef45d
--- /dev/null
+++ b/xlat/flockcmds.in
@@ -0,0 +1,4 @@
+LOCK_SH
+LOCK_EX
+LOCK_NB
+LOCK_UN
diff --git a/xlat/fsmagic.in b/xlat/fsmagic.in
new file mode 100644
index 0000000..24f8efa
--- /dev/null
+++ b/xlat/fsmagic.in
@@ -0,0 +1,29 @@
+	{ 0x73757245,	"CODA_SUPER_MAGIC"	},
+	{ 0x012ff7b7,	"COH_SUPER_MAGIC"	},
+	{ 0x1373,	"DEVFS_SUPER_MAGIC"	},
+	{ 0x1cd1,	"DEVPTS_SUPER_MAGIC"	},
+	{ 0x414A53,	"EFS_SUPER_MAGIC"	},
+	{ 0xef51,	"EXT2_OLD_SUPER_MAGIC"	},
+	{ 0xef53,	"EXT2_SUPER_MAGIC"	},
+	{ 0x137d,	"EXT_SUPER_MAGIC"	},
+	{ 0xf995e849,	"HPFS_SUPER_MAGIC"	},
+	{ 0x9660,	"ISOFS_SUPER_MAGIC"	},
+	{ 0x137f,	"MINIX_SUPER_MAGIC"	},
+	{ 0x138f,	"MINIX_SUPER_MAGIC2"	},
+	{ 0x2468,	"MINIX2_SUPER_MAGIC"	},
+	{ 0x2478,	"MINIX2_SUPER_MAGIC2"	},
+	{ 0x4d44,	"MSDOS_SUPER_MAGIC"	},
+	{ 0x564c,	"NCP_SUPER_MAGIC"	},
+	{ 0x6969,	"NFS_SUPER_MAGIC"	},
+	{ 0x9fa0,	"PROC_SUPER_MAGIC"	},
+	{ 0x002f,	"QNX4_SUPER_MAGIC"	},
+	{ 0x52654973,	"REISERFS_SUPER_MAGIC"	},
+	{ 0x02011994,	"SHMFS_SUPER_MAGIC"	},
+	{ 0x517b,	"SMB_SUPER_MAGIC"	},
+	{ 0x012ff7b6,	"SYSV2_SUPER_MAGIC"	},
+	{ 0x012ff7b5,	"SYSV4_SUPER_MAGIC"	},
+	{ 0x00011954,	"UFS_MAGIC"		},
+	{ 0x54190100,	"UFS_CIGAM"		},
+	{ 0x012ff7b4,	"XENIX_SUPER_MAGIC"	},
+	{ 0x012fd16d,	"XIAFS_SUPER_MAGIC"	},
+	{ 0x62656572,	"SYSFS_MAGIC"		},
diff --git a/xlat/futexops.in b/xlat/futexops.in
new file mode 100644
index 0000000..46bbc3e
--- /dev/null
+++ b/xlat/futexops.in
@@ -0,0 +1,30 @@
+FUTEX_WAIT
+FUTEX_WAKE
+FUTEX_FD
+FUTEX_REQUEUE
+FUTEX_CMP_REQUEUE
+FUTEX_WAKE_OP
+FUTEX_LOCK_PI
+FUTEX_UNLOCK_PI
+FUTEX_TRYLOCK_PI
+FUTEX_WAIT_BITSET
+FUTEX_WAKE_BITSET
+FUTEX_WAIT_REQUEUE_PI
+FUTEX_CMP_REQUEUE_PI
+FUTEX_WAIT_PRIVATE
+FUTEX_WAKE_PRIVATE
+FUTEX_FD|FUTEX_PRIVATE_FLAG
+FUTEX_REQUEUE_PRIVATE
+FUTEX_CMP_REQUEUE_PRIVATE
+FUTEX_WAKE_OP_PRIVATE
+FUTEX_LOCK_PI_PRIVATE
+FUTEX_UNLOCK_PI_PRIVATE
+FUTEX_TRYLOCK_PI_PRIVATE
+FUTEX_WAIT_BITSET_PRIVATE
+FUTEX_WAKE_BITSET_PRIVATE
+FUTEX_WAIT_REQUEUE_PI_PRIVATE
+FUTEX_CMP_REQUEUE_PI_PRIVATE
+FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME
+FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME
+FUTEX_WAIT_REQUEUE_PI|FUTEX_CLOCK_REALTIME
+FUTEX_WAIT_REQUEUE_PI_PRIVATE|FUTEX_CLOCK_REALTIME
diff --git a/xlat/futexwakecmps.in b/xlat/futexwakecmps.in
new file mode 100644
index 0000000..2afb9f5
--- /dev/null
+++ b/xlat/futexwakecmps.in
@@ -0,0 +1,6 @@
+FUTEX_OP_CMP_EQ
+FUTEX_OP_CMP_NE
+FUTEX_OP_CMP_LT
+FUTEX_OP_CMP_LE
+FUTEX_OP_CMP_GT
+FUTEX_OP_CMP_GE
diff --git a/xlat/futexwakeops.in b/xlat/futexwakeops.in
new file mode 100644
index 0000000..3d12929
--- /dev/null
+++ b/xlat/futexwakeops.in
@@ -0,0 +1,5 @@
+FUTEX_OP_SET
+FUTEX_OP_ADD
+FUTEX_OP_OR
+FUTEX_OP_ANDN
+FUTEX_OP_XOR
diff --git a/xlat/gen.sh b/xlat/gen.sh
new file mode 100755
index 0000000..f217840
--- /dev/null
+++ b/xlat/gen.sh
@@ -0,0 +1,133 @@
+#!/bin/sh
+
+usage() {
+	cat <<EOF
+Usage: $0 <input> <output>
+
+Generate xlat header files from <input> (a file or dir of files) and write
+the generated headers to <output>.
+EOF
+	exit 1
+}
+
+gen_header() {
+	local input="$1" output="$2" name="$3"
+	echo "generating ${output}"
+	(
+	local defs="${0%/*}/../defs.h"
+	local prefix
+	if grep -x "extern const struct xlat ${name}\\[\\];" "${defs}" > /dev/null; then
+		prefix=
+	else
+		prefix='static '
+	fi
+
+	cat <<-EOF
+		/* Generated by $0 from $1; do not edit. */
+
+		${prefix}const struct xlat ${name}[] = {
+	EOF
+	local unconditional= unterminated= line
+	while read line; do
+		LC_COLLATE=C
+		case ${line} in
+		'#unconditional')
+			unconditional=1
+			;;
+		'#unterminated')
+			unterminated=1
+			;;
+		[A-Z_]*)	# symbolic constants
+			local m="${line%%|*}"
+			[ -n "${unconditional}" ] ||
+				echo "#if defined(${m}) || (defined(HAVE_DECL_${m}) && HAVE_DECL_${m})"
+			echo "	XLAT(${line}),"
+			[ -n "${unconditional}" ] ||
+				echo "#endif"
+			;;
+		'1<<'[A-Z_]*)	# symbolic constants with shift
+			local m="${line#1<<}"
+			[ -n "${unconditional}" ] ||
+				echo "#if defined(${m}) || (defined(HAVE_DECL_${m}) && HAVE_DECL_${m})"
+			echo "	{ ${line}, \"${m}\" },"
+			[ -n "${unconditional}" ] ||
+				echo "#endif"
+			;;
+		[0-9]*)	# numeric constants
+			echo "	XLAT(${line}),"
+			;;
+		*)	# verbatim lines
+			echo "${line}"
+			;;
+		esac
+	done < "${input}"
+	if [ -n "${unterminated}" ]; then
+		echo "  /* this array should remain not NULL-terminated */"
+	else
+		echo "	XLAT_END"
+	fi
+	echo "};"
+	) >"${output}"
+}
+
+gen_make() {
+	local output="$1"
+	local name
+	shift
+	echo "generating ${output}"
+	(
+		printf "XLAT_INPUT_FILES = "
+		printf 'xlat/%s.in ' "$@"
+		echo
+		printf "XLAT_HEADER_FILES = "
+		printf 'xlat/%s.h ' "$@"
+		echo
+		for name; do
+			printf '$(top_srcdir)/xlat/%s.h: $(top_srcdir)/xlat/%s.in $(top_srcdir)/xlat/gen.sh\n' \
+				"${name}" "${name}"
+			echo '	$(AM_V_GEN)$(top_srcdir)/xlat/gen.sh $< $@'
+		done
+	) >"${output}"
+}
+
+gen_git() {
+	local output="$1"
+	shift
+	echo "generating ${output}"
+	(
+		printf '/%s\n' .gitignore Makemodule.am
+		printf '/%s.h\n' "$@"
+	) >"${output}"
+}
+
+main() {
+	case $# in
+	0) set -- "${0%/*}" "${0%/*}" ;;
+	2) ;;
+	*) usage ;;
+	esac
+
+	local input="$1"
+	local output="$2"
+	local name
+
+	if [ -d "${input}" ]; then
+		local f names=
+		for f in "${input}"/*.in; do
+			[ -f "${f}" ] || continue
+			name=${f##*/}
+			name=${name%.in}
+			gen_header "${f}" "${output}/${name}.h" "${name}" &
+			names="${names} ${name}"
+		done
+		gen_git "${output}/.gitignore" ${names}
+		gen_make "${output}/Makemodule.am" ${names}
+		wait
+	else
+		name=${input##*/}
+		name=${name%.in}
+		gen_header "${input}" "${output}" "${name}"
+	fi
+}
+
+main "$@"
diff --git a/xlat/icmpfilterflags.in b/xlat/icmpfilterflags.in
new file mode 100644
index 0000000..dac579e
--- /dev/null
+++ b/xlat/icmpfilterflags.in
@@ -0,0 +1,13 @@
+1<<ICMP_ECHOREPLY
+1<<ICMP_DEST_UNREACH
+1<<ICMP_SOURCE_QUENCH
+1<<ICMP_REDIRECT
+1<<ICMP_ECHO
+1<<ICMP_TIME_EXCEEDED
+1<<ICMP_PARAMETERPROB
+1<<ICMP_TIMESTAMP
+1<<ICMP_TIMESTAMPREPLY
+1<<ICMP_INFO_REQUEST
+1<<ICMP_INFO_REPLY
+1<<ICMP_ADDRESS
+1<<ICMP_ADDRESSREPLY
diff --git a/xlat/if_dqblk_valid.in b/xlat/if_dqblk_valid.in
new file mode 100644
index 0000000..05993cb
--- /dev/null
+++ b/xlat/if_dqblk_valid.in
@@ -0,0 +1,6 @@
+QIF_BLIMITS
+QIF_SPACE
+QIF_ILIMITS
+QIF_INODES
+QIF_BTIME
+QIF_ITIME
diff --git a/xlat/if_dqinfo_valid.in b/xlat/if_dqinfo_valid.in
new file mode 100644
index 0000000..9e9fc3d
--- /dev/null
+++ b/xlat/if_dqinfo_valid.in
@@ -0,0 +1,3 @@
+IIF_BGRACE
+IIF_IGRACE
+IIF_FLAGS
diff --git a/xlat/iffflags.in b/xlat/iffflags.in
new file mode 100644
index 0000000..a6249b0
--- /dev/null
+++ b/xlat/iffflags.in
@@ -0,0 +1,15 @@
+IFF_UP
+IFF_BROADCAST
+IFF_DEBUG
+IFF_LOOPBACK
+IFF_POINTOPOINT
+IFF_NOTRAILERS
+IFF_RUNNING
+IFF_NOARP
+IFF_PROMISC
+IFF_ALLMULTI
+IFF_MASTER
+IFF_SLAVE
+IFF_MULTICAST
+IFF_PORTSEL
+IFF_AUTOMEDIA
diff --git a/xlat/inet_protocols.in b/xlat/inet_protocols.in
new file mode 100644
index 0000000..6092f2b
--- /dev/null
+++ b/xlat/inet_protocols.in
@@ -0,0 +1,32 @@
+IPPROTO_IP
+IPPROTO_ICMP
+IPPROTO_TCP
+IPPROTO_UDP
+IPPROTO_IGMP
+IPPROTO_GGP
+IPPROTO_IPIP
+IPPROTO_EGP
+IPPROTO_PUP
+IPPROTO_IDP
+IPPROTO_TP
+IPPROTO_DCCP
+IPPROTO_IPV6
+IPPROTO_ROUTING
+IPPROTO_FRAGMENT
+IPPROTO_RSVP
+IPPROTO_GRE
+IPPROTO_ESP
+IPPROTO_AH
+IPPROTO_ICMPV6
+IPPROTO_NONE
+IPPROTO_DSTOPTS
+IPPROTO_HELLO
+IPPROTO_ND
+IPPROTO_MTP
+IPPROTO_ENCAP
+IPPROTO_PIM
+IPPROTO_COMP
+IPPROTO_SCTP
+IPPROTO_UDPLITE
+IPPROTO_RAW
+IPPROTO_MAX
diff --git a/xlat/inotify_flags.in b/xlat/inotify_flags.in
new file mode 100644
index 0000000..605b864
--- /dev/null
+++ b/xlat/inotify_flags.in
@@ -0,0 +1,23 @@
+IN_ACCESS
+IN_MODIFY
+IN_ATTRIB
+IN_CLOSE
+IN_CLOSE_WRITE
+IN_CLOSE_NOWRITE
+IN_OPEN
+IN_MOVE
+IN_MOVED_FROM
+IN_MOVED_TO
+IN_CREATE
+IN_DELETE
+IN_DELETE_SELF
+IN_MOVE_SELF
+IN_UNMOUNT
+IN_Q_OVERFLOW
+IN_IGNORED
+IN_ONLYDIR
+IN_DONT_FOLLOW
+IN_EXCL_UNLINK
+IN_MASK_ADD
+IN_ISDIR
+IN_ONESHOT
diff --git a/xlat/inotify_init_flags.in b/xlat/inotify_init_flags.in
new file mode 100644
index 0000000..fb0338b
--- /dev/null
+++ b/xlat/inotify_init_flags.in
@@ -0,0 +1,2 @@
+O_NONBLOCK
+O_CLOEXEC
diff --git a/xlat/ioprio_class.in b/xlat/ioprio_class.in
new file mode 100644
index 0000000..5020e5a
--- /dev/null
+++ b/xlat/ioprio_class.in
@@ -0,0 +1,5 @@
+#unconditional
+IOPRIO_CLASS_NONE
+IOPRIO_CLASS_RT
+IOPRIO_CLASS_BE
+IOPRIO_CLASS_IDLE
diff --git a/xlat/ioprio_who.in b/xlat/ioprio_who.in
new file mode 100644
index 0000000..20b1bd1
--- /dev/null
+++ b/xlat/ioprio_who.in
@@ -0,0 +1,4 @@
+#unconditional
+IOPRIO_WHO_PROCESS
+IOPRIO_WHO_PGRP
+IOPRIO_WHO_USER
diff --git a/xlat/ipc_msg_flags.in b/xlat/ipc_msg_flags.in
new file mode 100644
index 0000000..5aef101
--- /dev/null
+++ b/xlat/ipc_msg_flags.in
@@ -0,0 +1,3 @@
+MSG_NOERROR
+MSG_EXCEPT
+IPC_NOWAIT
diff --git a/xlat/itimer_which.in b/xlat/itimer_which.in
new file mode 100644
index 0000000..768b20f
--- /dev/null
+++ b/xlat/itimer_which.in
@@ -0,0 +1,3 @@
+ITIMER_REAL
+ITIMER_VIRTUAL
+ITIMER_PROF
diff --git a/xlat/kexec_arch_values.in b/xlat/kexec_arch_values.in
new file mode 100644
index 0000000..92ae8ae
--- /dev/null
+++ b/xlat/kexec_arch_values.in
@@ -0,0 +1,11 @@
+KEXEC_ARCH_DEFAULT
+KEXEC_ARCH_386
+KEXEC_ARCH_X86_64
+KEXEC_ARCH_PPC
+KEXEC_ARCH_PPC64
+KEXEC_ARCH_IA_64
+KEXEC_ARCH_ARM
+KEXEC_ARCH_S390
+KEXEC_ARCH_SH
+KEXEC_ARCH_MIPS_LE
+KEXEC_ARCH_MIPS
diff --git a/xlat/kexec_flags.in b/xlat/kexec_flags.in
new file mode 100644
index 0000000..43eb497
--- /dev/null
+++ b/xlat/kexec_flags.in
@@ -0,0 +1,2 @@
+KEXEC_ON_CRASH
+KEXEC_PRESERVE_CONTEXT
diff --git a/xlat/key_perms.in b/xlat/key_perms.in
new file mode 100644
index 0000000..f7e8edb
--- /dev/null
+++ b/xlat/key_perms.in
@@ -0,0 +1,28 @@
+KEY_POS_VIEW
+KEY_POS_READ
+KEY_POS_WRITE
+KEY_POS_SEARCH
+KEY_POS_LINK
+KEY_POS_SETATTR
+KEY_POS_ALL
+KEY_USR_VIEW
+KEY_USR_READ
+KEY_USR_WRITE
+KEY_USR_SEARCH
+KEY_USR_LINK
+KEY_USR_SETATTR
+KEY_USR_ALL
+KEY_GRP_VIEW
+KEY_GRP_READ
+KEY_GRP_WRITE
+KEY_GRP_SEARCH
+KEY_GRP_LINK
+KEY_GRP_SETATTR
+KEY_GRP_ALL
+KEY_OTH_VIEW
+KEY_OTH_READ
+KEY_OTH_WRITE
+KEY_OTH_SEARCH
+KEY_OTH_LINK
+KEY_OTH_SETATTR
+KEY_OTH_ALL
diff --git a/xlat/key_reqkeys.in b/xlat/key_reqkeys.in
new file mode 100644
index 0000000..6da0ff7
--- /dev/null
+++ b/xlat/key_reqkeys.in
@@ -0,0 +1,9 @@
+KEY_REQKEY_DEFL_NO_CHANGE
+KEY_REQKEY_DEFL_DEFAULT
+KEY_REQKEY_DEFL_THREAD_KEYRING
+KEY_REQKEY_DEFL_PROCESS_KEYRING
+KEY_REQKEY_DEFL_SESSION_KEYRING
+KEY_REQKEY_DEFL_USER_KEYRING
+KEY_REQKEY_DEFL_USER_SESSION_KEYRING
+KEY_REQKEY_DEFL_GROUP_KEYRING
+KEY_REQKEY_DEFL_REQUESTOR_KEYRING
diff --git a/xlat/key_spec.in b/xlat/key_spec.in
new file mode 100644
index 0000000..942b7ef
--- /dev/null
+++ b/xlat/key_spec.in
@@ -0,0 +1,8 @@
+KEY_SPEC_THREAD_KEYRING
+KEY_SPEC_PROCESS_KEYRING
+KEY_SPEC_SESSION_KEYRING
+KEY_SPEC_USER_KEYRING
+KEY_SPEC_USER_SESSION_KEYRING
+KEY_SPEC_GROUP_KEYRING
+KEY_SPEC_REQKEY_AUTH_KEY
+KEY_SPEC_REQUESTOR_KEYRING
diff --git a/xlat/keyctl_commands.in b/xlat/keyctl_commands.in
new file mode 100644
index 0000000..33daf51
--- /dev/null
+++ b/xlat/keyctl_commands.in
@@ -0,0 +1,23 @@
+KEYCTL_GET_KEYRING_ID
+KEYCTL_JOIN_SESSION_KEYRING
+KEYCTL_UPDATE
+KEYCTL_REVOKE
+KEYCTL_CHOWN
+KEYCTL_SETPERM
+KEYCTL_DESCRIBE
+KEYCTL_CLEAR
+KEYCTL_LINK
+KEYCTL_UNLINK
+KEYCTL_SEARCH
+KEYCTL_READ
+KEYCTL_INSTANTIATE
+KEYCTL_NEGATE
+KEYCTL_SET_REQKEY_KEYRING
+KEYCTL_SET_TIMEOUT
+KEYCTL_ASSUME_AUTHORITY
+KEYCTL_GET_SECURITY
+KEYCTL_SESSION_TO_PARENT
+KEYCTL_REJECT
+KEYCTL_INSTANTIATE_IOV
+KEYCTL_INVALIDATE
+KEYCTL_GET_PERSISTENT
diff --git a/xlat/lockfcmds.in b/xlat/lockfcmds.in
new file mode 100644
index 0000000..2d65ba9
--- /dev/null
+++ b/xlat/lockfcmds.in
@@ -0,0 +1,5 @@
+F_RDLCK
+F_WRLCK
+F_UNLCK
+F_EXLCK
+F_SHLCK
diff --git a/xlat/loop_crypt_type_options.in b/xlat/loop_crypt_type_options.in
new file mode 100644
index 0000000..e9b7bdd
--- /dev/null
+++ b/xlat/loop_crypt_type_options.in
@@ -0,0 +1,10 @@
+LO_CRYPT_NONE
+LO_CRYPT_XOR
+LO_CRYPT_DES
+LO_CRYPT_FISH2
+LO_CRYPT_BLOW
+LO_CRYPT_CAST128
+LO_CRYPT_IDEA
+LO_CRYPT_DUMMY
+LO_CRYPT_SKIPJACK
+LO_CRYPT_CRYPTOAPI
diff --git a/xlat/loop_flags_options.in b/xlat/loop_flags_options.in
new file mode 100644
index 0000000..9235dbb
--- /dev/null
+++ b/xlat/loop_flags_options.in
@@ -0,0 +1,3 @@
+LO_FLAGS_READ_ONLY
+LO_FLAGS_AUTOCLEAR
+LO_FLAGS_PARTSCAN
diff --git a/xlat/madvise_cmds.in b/xlat/madvise_cmds.in
new file mode 100644
index 0000000..dc2abff
--- /dev/null
+++ b/xlat/madvise_cmds.in
@@ -0,0 +1,16 @@
+MADV_NORMAL
+MADV_RANDOM
+MADV_SEQUENTIAL
+MADV_WILLNEED
+MADV_DONTNEED
+MADV_REMOVE
+MADV_DONTFORK
+MADV_DOFORK
+MADV_HWPOISON
+MADV_SOFT_OFFLINE
+MADV_MERGEABLE
+MADV_UNMERGEABLE
+MADV_HUGEPAGE
+MADV_NOHUGEPAGE
+MADV_DONTDUMP
+MADV_DODUMP
diff --git a/xlat/mbindflags.in b/xlat/mbindflags.in
new file mode 100644
index 0000000..105504e
--- /dev/null
+++ b/xlat/mbindflags.in
@@ -0,0 +1,3 @@
+MPOL_MF_STRICT
+MPOL_MF_MOVE
+MPOL_MF_MOVE_ALL
diff --git a/xlat/mctl_funcs.in b/xlat/mctl_funcs.in
new file mode 100644
index 0000000..1274cdd
--- /dev/null
+++ b/xlat/mctl_funcs.in
@@ -0,0 +1,5 @@
+MC_LOCK
+MC_LOCKAS
+MC_SYNC
+MC_UNLOCK
+MC_UNLOCKAS
diff --git a/xlat/mctl_lockas.in b/xlat/mctl_lockas.in
new file mode 100644
index 0000000..ba28847
--- /dev/null
+++ b/xlat/mctl_lockas.in
@@ -0,0 +1,2 @@
+MCL_CURRENT
+MCL_FUTURE
diff --git a/xlat/mctl_sync.in b/xlat/mctl_sync.in
new file mode 100644
index 0000000..1db4068
--- /dev/null
+++ b/xlat/mctl_sync.in
@@ -0,0 +1,3 @@
+MS_SYNC
+MS_ASYNC
+MS_INVALIDATE
diff --git a/xlat/mempolicyflags.in b/xlat/mempolicyflags.in
new file mode 100644
index 0000000..89c414b
--- /dev/null
+++ b/xlat/mempolicyflags.in
@@ -0,0 +1,2 @@
+MPOL_F_NODE
+MPOL_F_ADDR
diff --git a/xlat/mlockall_flags.in b/xlat/mlockall_flags.in
new file mode 100644
index 0000000..ba28847
--- /dev/null
+++ b/xlat/mlockall_flags.in
@@ -0,0 +1,2 @@
+MCL_CURRENT
+MCL_FUTURE
diff --git a/xlat/mmap_flags.in b/xlat/mmap_flags.in
new file mode 100644
index 0000000..e9fde44
--- /dev/null
+++ b/xlat/mmap_flags.in
@@ -0,0 +1,55 @@
+MAP_SHARED
+MAP_PRIVATE
+MAP_FIXED
+MAP_ANONYMOUS
+MAP_32BIT
+MAP_RENAME
+MAP_NORESERVE
+MAP_POPULATE
+MAP_NONBLOCK
+/*
+ * XXX - this was introduced in SunOS 4.x to distinguish between
+ * the old pre-4.x "mmap()", which:
+ *
+ *	only let you map devices with an "mmap" routine (e.g.,
+ *	frame buffers) in;
+ *
+ *	required you to specify the mapping address;
+ *
+ *	returned 0 on success and -1 on failure;
+ *
+ * memory and which, and the 4.x "mmap()" which:
+ *
+ *	can map plain files;
+ *
+ *	can be asked to pick where to map the file;
+ *
+ *	returns the address where it mapped the file on success
+ *	and -1 on failure.
+ *
+ * It's not actually used in source code that calls "mmap()"; the
+ * "mmap()" routine adds it for you.
+ *
+ * It'd be nice to come up with some way of eliminating it from
+ * the flags, e.g. reporting calls *without* it as "old_mmap()"
+ * and calls with it as "mmap()".
+ */
+_MAP_NEW
+MAP_GROWSDOWN
+MAP_DENYWRITE
+MAP_EXECUTABLE
+MAP_INHERIT
+MAP_FILE
+MAP_LOCKED
+/* FreeBSD ones */
+#if defined(MAP_ANON) && (!defined(MAP_ANONYMOUS) || MAP_ANON != MAP_ANONYMOUS)
+MAP_ANON
+#endif
+MAP_HASSEMAPHORE
+MAP_STACK
+MAP_HUGETLB
+#if defined MAP_UNINITIALIZED && MAP_UNINITIALIZED > 0
+MAP_UNINITIALIZED
+#endif
+MAP_NOSYNC
+MAP_NOCORE
diff --git a/xlat/mmap_prot.in b/xlat/mmap_prot.in
new file mode 100644
index 0000000..0589980
--- /dev/null
+++ b/xlat/mmap_prot.in
@@ -0,0 +1,8 @@
+PROT_NONE
+PROT_READ
+PROT_WRITE
+PROT_EXEC
+PROT_SEM
+PROT_GROWSDOWN
+PROT_GROWSUP
+PROT_SAO
diff --git a/xlat/modem_flags.in b/xlat/modem_flags.in
new file mode 100644
index 0000000..ad42d5e
--- /dev/null
+++ b/xlat/modem_flags.in
@@ -0,0 +1,11 @@
+TIOCM_LE
+TIOCM_DTR
+TIOCM_RTS
+TIOCM_ST
+TIOCM_SR
+TIOCM_CTS
+TIOCM_CAR
+TIOCM_CD
+TIOCM_RNG
+TIOCM_RI
+TIOCM_DSR
diff --git a/xlat/modetypes.in b/xlat/modetypes.in
new file mode 100644
index 0000000..602cb00
--- /dev/null
+++ b/xlat/modetypes.in
@@ -0,0 +1,7 @@
+S_IFREG
+S_IFSOCK
+S_IFIFO
+S_IFLNK
+S_IFDIR
+S_IFBLK
+S_IFCHR
diff --git a/xlat/modflags.in b/xlat/modflags.in
new file mode 100644
index 0000000..2edf7e9
--- /dev/null
+++ b/xlat/modflags.in
@@ -0,0 +1,7 @@
+MOD_UNINITIALIZED
+MOD_RUNNING
+MOD_DELETED
+MOD_AUTOCLEAN
+MOD_VISITED
+MOD_USED_ONCE
+MOD_JUST_FREED
diff --git a/xlat/module_init_flags.in b/xlat/module_init_flags.in
new file mode 100644
index 0000000..e672a59
--- /dev/null
+++ b/xlat/module_init_flags.in
@@ -0,0 +1,2 @@
+MODULE_INIT_IGNORE_MODVERSIONS
+MODULE_INIT_IGNORE_VERMAGIC
diff --git a/xlat/mount_flags.in b/xlat/mount_flags.in
new file mode 100644
index 0000000..8e72e58
--- /dev/null
+++ b/xlat/mount_flags.in
@@ -0,0 +1,27 @@
+MS_MGC_VAL
+MS_RDONLY
+MS_NOSUID
+MS_NODEV
+MS_NOEXEC
+MS_SYNCHRONOUS
+MS_REMOUNT
+MS_RELATIME
+MS_KERNMOUNT
+MS_I_VERSION
+MS_STRICTATIME
+MS_NOSEC
+MS_BORN
+MS_MANDLOCK
+MS_NOATIME
+MS_NODIRATIME
+MS_BIND
+MS_MOVE
+MS_REC
+MS_SILENT
+MS_POSIXACL
+MS_UNBINDABLE
+MS_PRIVATE
+MS_SLAVE
+MS_SHARED
+MS_ACTIVE
+MS_NOUSER
diff --git a/xlat/move_pages_flags.in b/xlat/move_pages_flags.in
new file mode 100644
index 0000000..03555b8
--- /dev/null
+++ b/xlat/move_pages_flags.in
@@ -0,0 +1,2 @@
+MPOL_MF_MOVE
+MPOL_MF_MOVE_ALL
diff --git a/xlat/mremap_flags.in b/xlat/mremap_flags.in
new file mode 100644
index 0000000..be13a6f
--- /dev/null
+++ b/xlat/mremap_flags.in
@@ -0,0 +1,2 @@
+MREMAP_MAYMOVE
+MREMAP_FIXED
diff --git a/xlat/msg_flags.in b/xlat/msg_flags.in
new file mode 100644
index 0000000..9369040
--- /dev/null
+++ b/xlat/msg_flags.in
@@ -0,0 +1,20 @@
+MSG_OOB
+MSG_PEEK
+MSG_DONTROUTE
+MSG_CTRUNC
+MSG_PROBE
+MSG_TRUNC
+MSG_DONTWAIT
+MSG_EOR
+MSG_WAITALL
+MSG_FIN
+MSG_SYN
+MSG_CONFIRM
+MSG_RST
+MSG_ERRQUEUE
+MSG_NOSIGNAL
+MSG_MORE
+MSG_WAITFORONE
+MSG_EOF
+MSG_FASTOPEN
+MSG_CMSG_CLOEXEC
diff --git a/xlat/msgctl_flags.in b/xlat/msgctl_flags.in
new file mode 100644
index 0000000..0d39e9e
--- /dev/null
+++ b/xlat/msgctl_flags.in
@@ -0,0 +1,6 @@
+IPC_RMID
+IPC_SET
+IPC_STAT
+IPC_INFO
+MSG_STAT
+MSG_INFO
diff --git a/xlat/msgflags.in b/xlat/msgflags.in
new file mode 100644
index 0000000..62e6bb7
--- /dev/null
+++ b/xlat/msgflags.in
@@ -0,0 +1 @@
+RS_HIPRI
diff --git a/xlat/mtd_flags_options.in b/xlat/mtd_flags_options.in
new file mode 100644
index 0000000..8b5a0a5
--- /dev/null
+++ b/xlat/mtd_flags_options.in
@@ -0,0 +1,4 @@
+MTD_WRITEABLE
+MTD_BIT_WRITEABLE
+MTD_NO_ERASE
+MTD_POWERUP_LOCK
diff --git a/xlat/mtd_mode_options.in b/xlat/mtd_mode_options.in
new file mode 100644
index 0000000..f0dcc8b
--- /dev/null
+++ b/xlat/mtd_mode_options.in
@@ -0,0 +1,4 @@
+#unconditional
+MTD_OPS_PLACE_OOB
+MTD_OPS_AUTO_OOB
+MTD_OPS_RAW
diff --git a/xlat/mtd_nandecc_options.in b/xlat/mtd_nandecc_options.in
new file mode 100644
index 0000000..cd96f3d
--- /dev/null
+++ b/xlat/mtd_nandecc_options.in
@@ -0,0 +1,5 @@
+MTD_NANDECC_OFF
+MTD_NANDECC_PLACE
+MTD_NANDECC_AUTOPLACE
+MTD_NANDECC_PLACEONLY
+MTD_NANDECC_AUTOPL_USR
diff --git a/xlat/mtd_otp_options.in b/xlat/mtd_otp_options.in
new file mode 100644
index 0000000..a00248f
--- /dev/null
+++ b/xlat/mtd_otp_options.in
@@ -0,0 +1,3 @@
+MTD_OTP_OFF
+MTD_OTP_FACTORY
+MTD_OTP_USER
diff --git a/xlat/mtd_type_options.in b/xlat/mtd_type_options.in
new file mode 100644
index 0000000..42643f9
--- /dev/null
+++ b/xlat/mtd_type_options.in
@@ -0,0 +1,8 @@
+MTD_ABSENT
+MTD_RAM
+MTD_ROM
+MTD_NORFLASH
+MTD_NANDFLASH
+MTD_DATAFLASH
+MTD_UBIVOLUME
+MTD_MLCNANDFLASH
diff --git a/xlat/netlink_protocols.in b/xlat/netlink_protocols.in
new file mode 100644
index 0000000..76383f3
--- /dev/null
+++ b/xlat/netlink_protocols.in
@@ -0,0 +1,21 @@
+NETLINK_ROUTE
+NETLINK_UNUSED
+NETLINK_USERSOCK
+NETLINK_FIREWALL
+NETLINK_SOCK_DIAG
+NETLINK_NFLOG
+NETLINK_XFRM
+NETLINK_SELINUX
+NETLINK_ISCSI
+NETLINK_AUDIT
+NETLINK_FIB_LOOKUP
+NETLINK_CONNECTOR
+NETLINK_NETFILTER
+NETLINK_IP6_FW
+NETLINK_DNRTMSG
+NETLINK_KOBJECT_UEVENT
+NETLINK_GENERIC
+NETLINK_SCSITRANSPORT
+NETLINK_ECRYPTFS
+NETLINK_RDMA
+NETLINK_CRYPTO
diff --git a/xlat/notifyflags.in b/xlat/notifyflags.in
new file mode 100644
index 0000000..e9f1492
--- /dev/null
+++ b/xlat/notifyflags.in
@@ -0,0 +1,7 @@
+DN_ACCESS
+DN_MODIFY
+DN_CREATE
+DN_DELETE
+DN_RENAME
+DN_ATTRIB
+DN_MULTISHOT
diff --git a/xlat/nt_descriptor_types.in b/xlat/nt_descriptor_types.in
new file mode 100644
index 0000000..5e47d66
--- /dev/null
+++ b/xlat/nt_descriptor_types.in
@@ -0,0 +1,23 @@
+NT_PRSTATUS
+NT_FPREGSET
+NT_PRPSINFO
+NT_PRXREG
+NT_TASKSTRUCT
+NT_PLATFORM
+NT_AUXV
+NT_GWINDOWS
+NT_ASRS
+NT_PSTATUS
+NT_PSINFO
+NT_PRCRED
+NT_UTSNAME
+NT_LWPSTATUS
+NT_LWPSINFO
+NT_PRFPXREG
+NT_PRXFPREG
+NT_PPC_VMX
+NT_PPC_SPE
+NT_PPC_VSX
+NT_386_TLS
+NT_386_IOPERM
+NT_X86_XSTATE
diff --git a/xlat/open_access_modes.in b/xlat/open_access_modes.in
new file mode 100644
index 0000000..423a29b
--- /dev/null
+++ b/xlat/open_access_modes.in
@@ -0,0 +1,4 @@
+O_RDONLY
+O_WRONLY
+O_RDWR
+O_ACCMODE
diff --git a/xlat/open_mode_flags.in b/xlat/open_mode_flags.in
new file mode 100644
index 0000000..b323f8b
--- /dev/null
+++ b/xlat/open_mode_flags.in
@@ -0,0 +1,36 @@
+O_CREAT
+O_EXCL
+O_NOCTTY
+O_TRUNC
+O_APPEND
+O_NONBLOCK
+O_SYNC
+O_ASYNC
+O_DSYNC
+O_RSYNC
+#if defined(O_NDELAY) && (O_NDELAY != O_NONBLOCK)
+O_NDELAY
+#endif
+O_PRIV
+O_DIRECT
+O_LARGEFILE
+O_DIRECTORY
+O_NOFOLLOW
+O_NOATIME
+O_CLOEXEC
+O_PATH
+FNDELAY
+FAPPEND
+FMARK
+FDEFER
+FASYNC
+FSHLOCK
+FEXLOCK
+FCREAT
+FTRUNC
+FEXCL
+FNBIO
+FSYNC
+FNOCTTY
+O_SHLOCK
+O_EXLOCK
diff --git a/xlat/openmodessol.in b/xlat/openmodessol.in
new file mode 100644
index 0000000..e42af6f
--- /dev/null
+++ b/xlat/openmodessol.in
@@ -0,0 +1,14 @@
+	{ 0,		"O_RDWR"	},
+	{ 1,		"O_RDONLY"	},
+	{ 2,		"O_WRONLY"	},
+	{ 0x80,		"O_NONBLOCK"	},
+	{ 8,		"O_APPEND"	},
+	{ 0x100,	"O_CREAT"	},
+	{ 0x200,	"O_TRUNC"	},
+	{ 0x400,	"O_EXCL"	},
+	{ 0x800,	"O_NOCTTY"	},
+	{ 0x10,		"O_SYNC"	},
+	{ 0x40,		"O_DSYNC"	},
+	{ 0x8000,	"O_RSYNC"	},
+	{ 4,		"O_NDELAY"	},
+	{ 0x1000,	"O_PRIV"	},
diff --git a/xlat/perf_event_open_flags.in b/xlat/perf_event_open_flags.in
new file mode 100644
index 0000000..66aefba
--- /dev/null
+++ b/xlat/perf_event_open_flags.in
@@ -0,0 +1,3 @@
+PERF_FLAG_FD_NO_GROUP
+PERF_FLAG_FD_OUTPUT
+PERF_FLAG_PID_CGROUP
diff --git a/xlat/personality_options.in b/xlat/personality_options.in
new file mode 100644
index 0000000..6832c65
--- /dev/null
+++ b/xlat/personality_options.in
@@ -0,0 +1,23 @@
+#unconditional
+PER_LINUX
+PER_LINUX_32BIT
+PER_LINUX_FDPIC
+PER_SVR4
+PER_SVR3
+PER_SCOSVR3
+PER_OSR5
+PER_WYSEV386
+PER_ISCR4
+PER_BSD
+PER_SUNOS
+PER_XENIX
+PER_LINUX32
+PER_LINUX32_3GB
+PER_IRIX32
+PER_IRIXN32
+PER_IRIX64
+PER_RISCOS
+PER_SOLARIS
+PER_UW7
+PER_OSF4
+PER_HPUX
diff --git a/xlat/pmsgflags.in b/xlat/pmsgflags.in
new file mode 100644
index 0000000..cae7c52
--- /dev/null
+++ b/xlat/pmsgflags.in
@@ -0,0 +1,3 @@
+MSG_HIPRI
+MSG_ANY
+MSG_BAND
diff --git a/xlat/policies.in b/xlat/policies.in
new file mode 100644
index 0000000..22599fd
--- /dev/null
+++ b/xlat/policies.in
@@ -0,0 +1,4 @@
+MPOL_DEFAULT
+MPOL_PREFERRED
+MPOL_BIND
+MPOL_INTERLEAVE
diff --git a/xlat/pollflags.in b/xlat/pollflags.in
new file mode 100644
index 0000000..db41909
--- /dev/null
+++ b/xlat/pollflags.in
@@ -0,0 +1,10 @@
+POLLIN
+POLLPRI
+POLLOUT
+POLLRDNORM
+POLLWRNORM
+POLLRDBAND
+POLLWRBAND
+POLLERR
+POLLHUP
+POLLNVAL
diff --git a/xlat/prctl_options.in b/xlat/prctl_options.in
new file mode 100644
index 0000000..9eabddd
--- /dev/null
+++ b/xlat/prctl_options.in
@@ -0,0 +1,56 @@
+PR_MAXPROCS
+PR_ISBLOCKED
+PR_SETSTACKSIZE
+PR_GETSTACKSIZE
+PR_MAXPPROCS
+PR_UNBLKONEXEC
+PR_ATOMICSIM
+PR_SETEXITSIG
+PR_RESIDENT
+PR_ATTACHADDR
+PR_DETACHADDR
+PR_TERMCHILD
+PR_GETSHMASK
+PR_GETNSHARE
+PR_COREPID
+PR_ATTACHADDRPERM
+PR_PTHREADEXIT
+PR_SET_PDEATHSIG
+PR_GET_PDEATHSIG
+PR_GET_DUMPABLE
+PR_SET_DUMPABLE
+PR_GET_UNALIGN
+PR_SET_UNALIGN
+PR_GET_KEEPCAPS
+PR_SET_KEEPCAPS
+PR_GET_FPEMU
+PR_SET_FPEMU
+PR_GET_FPEXC
+PR_SET_FPEXC
+PR_GET_TIMING
+PR_SET_TIMING
+PR_SET_NAME
+PR_GET_NAME
+PR_GET_ENDIAN
+PR_SET_ENDIAN
+PR_GET_SECCOMP
+PR_SET_SECCOMP
+PR_CAPBSET_READ
+PR_CAPBSET_DROP
+PR_GET_TSC
+PR_SET_TSC
+PR_GET_SECUREBITS
+PR_SET_SECUREBITS
+PR_SET_TIMERSLACK
+PR_GET_TIMERSLACK
+PR_TASK_PERF_EVENTS_DISABLE
+PR_TASK_PERF_EVENTS_ENABLE
+PR_MCE_KILL
+PR_MCE_KILL_GET
+PR_SET_MM
+PR_SET_PTRACER
+PR_SET_CHILD_SUBREAPER
+PR_GET_CHILD_SUBREAPER
+PR_SET_NO_NEW_PRIVS
+PR_GET_NO_NEW_PRIVS
+PR_GET_TID_ADDRESS
diff --git a/xlat/priorities.in b/xlat/priorities.in
new file mode 100644
index 0000000..d1eaaee
--- /dev/null
+++ b/xlat/priorities.in
@@ -0,0 +1,3 @@
+PRIO_PROCESS
+PRIO_PGRP
+PRIO_USER
diff --git a/xlat/ptp_flags_options.in b/xlat/ptp_flags_options.in
new file mode 100644
index 0000000..9e65c7d
--- /dev/null
+++ b/xlat/ptp_flags_options.in
@@ -0,0 +1,3 @@
+PTP_ENABLE_FEATURE
+PTP_RISING_EDGE
+PTP_FALLING_EDGE
diff --git a/xlat/ptrace_cmds.in b/xlat/ptrace_cmds.in
new file mode 100644
index 0000000..bf11ea4
--- /dev/null
+++ b/xlat/ptrace_cmds.in
@@ -0,0 +1,31 @@
+PTRACE_TRACEME
+PTRACE_PEEKTEXT
+PTRACE_PEEKDATA
+PTRACE_PEEKUSER
+PTRACE_POKETEXT
+PTRACE_POKEDATA
+PTRACE_POKEUSER
+PTRACE_CONT
+PTRACE_KILL
+PTRACE_SINGLESTEP
+PTRACE_ATTACH
+PTRACE_DETACH
+PTRACE_GETREGS
+PTRACE_SETREGS
+PTRACE_GETFPREGS
+PTRACE_SETFPREGS
+PTRACE_GETFPXREGS
+PTRACE_SETFPXREGS
+PTRACE_GETVRREGS
+PTRACE_SETVRREGS
+PTRACE_SETOPTIONS
+PTRACE_GETEVENTMSG
+PTRACE_GETSIGINFO
+PTRACE_SETSIGINFO
+PTRACE_GETREGSET
+PTRACE_SETREGSET
+PTRACE_SET_SYSCALL
+PTRACE_SEIZE
+PTRACE_INTERRUPT
+PTRACE_LISTEN
+PTRACE_SYSCALL
diff --git a/xlat/ptrace_setoptions_flags.in b/xlat/ptrace_setoptions_flags.in
new file mode 100644
index 0000000..d8cfa2f
--- /dev/null
+++ b/xlat/ptrace_setoptions_flags.in
@@ -0,0 +1,9 @@
+PTRACE_O_TRACESYSGOOD
+PTRACE_O_TRACEFORK
+PTRACE_O_TRACEVFORK
+PTRACE_O_TRACECLONE
+PTRACE_O_TRACEEXEC
+PTRACE_O_TRACEVFORKDONE
+PTRACE_O_TRACEEXIT
+PTRACE_O_TRACESECCOMP
+PTRACE_O_EXITKILL
diff --git a/xlat/qm_which.in b/xlat/qm_which.in
new file mode 100644
index 0000000..b032554
--- /dev/null
+++ b/xlat/qm_which.in
@@ -0,0 +1,6 @@
+0
+QM_MODULES
+QM_DEPS
+QM_REFS
+QM_SYMBOLS
+QM_INFO
diff --git a/xlat/quota_formats.in b/xlat/quota_formats.in
new file mode 100644
index 0000000..c02687d
--- /dev/null
+++ b/xlat/quota_formats.in
@@ -0,0 +1,2 @@
+QFMT_VFS_OLD
+QFMT_VFS_V0
diff --git a/xlat/quotacmds.in b/xlat/quotacmds.in
new file mode 100644
index 0000000..bb5de01
--- /dev/null
+++ b/xlat/quotacmds.in
@@ -0,0 +1,32 @@
+Q_V1_QUOTAON
+Q_V1_QUOTAOFF
+Q_V1_GETQUOTA
+Q_V1_SETQUOTA
+Q_V1_SETUSE
+Q_V1_SYNC
+Q_SETQLIM
+Q_V1_GETSTATS
+Q_V1_RSQUASH
+Q_V2_GETQUOTA
+Q_V2_SETQUOTA
+Q_V2_SETUSE
+Q_V2_GETINFO
+Q_V2_SETINFO
+Q_V2_SETGRACE
+Q_V2_SETFLAGS
+Q_V2_GETSTATS
+Q_SYNC
+Q_QUOTAON
+Q_QUOTAOFF
+Q_GETFMT
+Q_GETINFO
+Q_SETINFO
+Q_GETQUOTA
+Q_SETQUOTA
+Q_XQUOTAON
+Q_XQUOTAOFF
+Q_XGETQUOTA
+Q_XSETQLIM
+Q_XGETQSTAT
+Q_XQUOTARM
+Q_XQUOTASYNC
diff --git a/xlat/quotatypes.in b/xlat/quotatypes.in
new file mode 100644
index 0000000..26e77bd
--- /dev/null
+++ b/xlat/quotatypes.in
@@ -0,0 +1,2 @@
+USRQUOTA
+GRPQUOTA
diff --git a/xlat/resource_flags.in b/xlat/resource_flags.in
new file mode 100644
index 0000000..e7ce9c6
--- /dev/null
+++ b/xlat/resource_flags.in
@@ -0,0 +1,3 @@
+IPC_CREAT
+IPC_EXCL
+IPC_NOWAIT
diff --git a/xlat/resources.in b/xlat/resources.in
new file mode 100644
index 0000000..8c45b7f
--- /dev/null
+++ b/xlat/resources.in
@@ -0,0 +1,17 @@
+RLIMIT_AS
+RLIMIT_CORE
+RLIMIT_CPU
+RLIMIT_DATA
+RLIMIT_FSIZE
+RLIMIT_LOCKS
+RLIMIT_MEMLOCK
+RLIMIT_MSGQUEUE
+RLIMIT_NICE
+RLIMIT_NOFILE
+RLIMIT_NPROC
+RLIMIT_RSS
+RLIMIT_RTPRIO
+RLIMIT_RTTIME
+RLIMIT_SIGPENDING
+RLIMIT_STACK
+RLIMIT_VMEM
diff --git a/xlat/schedulers.in b/xlat/schedulers.in
new file mode 100644
index 0000000..f8718f4
--- /dev/null
+++ b/xlat/schedulers.in
@@ -0,0 +1,3 @@
+SCHED_OTHER
+SCHED_RR
+SCHED_FIFO
diff --git a/xlat/scmvals.in b/xlat/scmvals.in
new file mode 100644
index 0000000..04322e8
--- /dev/null
+++ b/xlat/scmvals.in
@@ -0,0 +1,2 @@
+SCM_RIGHTS
+SCM_CREDENTIALS
diff --git a/xlat/semctl_flags.in b/xlat/semctl_flags.in
new file mode 100644
index 0000000..e50d6d4
--- /dev/null
+++ b/xlat/semctl_flags.in
@@ -0,0 +1,13 @@
+IPC_RMID
+IPC_SET
+IPC_STAT
+IPC_INFO
+SEM_STAT
+SEM_INFO
+GETPID
+GETVAL
+GETALL
+GETNCNT
+GETZCNT
+SETVAL
+SETALL
diff --git a/xlat/semop_flags.in b/xlat/semop_flags.in
new file mode 100644
index 0000000..110eca6
--- /dev/null
+++ b/xlat/semop_flags.in
@@ -0,0 +1,2 @@
+SEM_UNDO
+IPC_NOWAIT
diff --git a/xlat/sg_io_dxfer_direction.in b/xlat/sg_io_dxfer_direction.in
new file mode 100644
index 0000000..ef2ebd3
--- /dev/null
+++ b/xlat/sg_io_dxfer_direction.in
@@ -0,0 +1,4 @@
+SG_DXFER_NONE
+SG_DXFER_TO_DEV
+SG_DXFER_FROM_DEV
+SG_DXFER_TO_FROM_DEV
diff --git a/xlat/shm_flags.in b/xlat/shm_flags.in
new file mode 100644
index 0000000..a620634
--- /dev/null
+++ b/xlat/shm_flags.in
@@ -0,0 +1,3 @@
+SHM_REMAP
+SHM_RDONLY
+SHM_RND
diff --git a/xlat/shm_resource_flags.in b/xlat/shm_resource_flags.in
new file mode 100644
index 0000000..f3fc0dc
--- /dev/null
+++ b/xlat/shm_resource_flags.in
@@ -0,0 +1,3 @@
+IPC_CREAT
+IPC_EXCL
+SHM_HUGETLB
diff --git a/xlat/shmctl_flags.in b/xlat/shmctl_flags.in
new file mode 100644
index 0000000..4a6ff78
--- /dev/null
+++ b/xlat/shmctl_flags.in
@@ -0,0 +1,8 @@
+IPC_RMID
+IPC_SET
+IPC_STAT
+IPC_INFO
+SHM_STAT
+SHM_INFO
+SHM_LOCK
+SHM_UNLOCK
diff --git a/xlat/shutdown_modes.in b/xlat/shutdown_modes.in
new file mode 100644
index 0000000..8ee550a
--- /dev/null
+++ b/xlat/shutdown_modes.in
@@ -0,0 +1,3 @@
+	{ 0,	"SHUT_RD"	},
+	{ 1,	"SHUT_WR"	},
+	{ 2,	"SHUT_RDWR"	},
diff --git a/xlat/sigact_flags.in b/xlat/sigact_flags.in
new file mode 100644
index 0000000..27bcff8
--- /dev/null
+++ b/xlat/sigact_flags.in
@@ -0,0 +1,20 @@
+SA_RESTORER
+SA_STACK
+SA_RESTART
+SA_INTERRUPT
+SA_NODEFER
+#if defined SA_NOMASK && SA_NODEFER != SA_NOMASK
+SA_NOMASK
+#endif
+SA_RESETHAND
+#if defined SA_ONESHOT && SA_ONESHOT != SA_RESETHAND
+SA_ONESHOT
+#endif
+SA_SIGINFO
+SA_RESETHAND
+SA_ONSTACK
+SA_NODEFER
+SA_NOCLDSTOP
+SA_NOCLDWAIT
+_SA_BSDCALL
+SA_NOPTRACE
diff --git a/xlat/sigaltstack_flags.in b/xlat/sigaltstack_flags.in
new file mode 100644
index 0000000..c27a931
--- /dev/null
+++ b/xlat/sigaltstack_flags.in
@@ -0,0 +1,2 @@
+SS_ONSTACK
+SS_DISABLE
diff --git a/xlat/sigbus_codes.in b/xlat/sigbus_codes.in
new file mode 100644
index 0000000..8d8a048
--- /dev/null
+++ b/xlat/sigbus_codes.in
@@ -0,0 +1,3 @@
+BUS_ADRALN
+BUS_ADRERR
+BUS_OBJERR
diff --git a/xlat/sigchld_codes.in b/xlat/sigchld_codes.in
new file mode 100644
index 0000000..40c93ce
--- /dev/null
+++ b/xlat/sigchld_codes.in
@@ -0,0 +1,6 @@
+CLD_EXITED
+CLD_KILLED
+CLD_DUMPED
+CLD_TRAPPED
+CLD_STOPPED
+CLD_CONTINUED
diff --git a/xlat/sigemt_codes.in b/xlat/sigemt_codes.in
new file mode 100644
index 0000000..63fe3a3
--- /dev/null
+++ b/xlat/sigemt_codes.in
@@ -0,0 +1 @@
+EMT_TAGOVF
diff --git a/xlat/sigev_value.in b/xlat/sigev_value.in
new file mode 100644
index 0000000..8b4c95e
--- /dev/null
+++ b/xlat/sigev_value.in
@@ -0,0 +1,4 @@
+SIGEV_SIGNAL
+SIGEV_NONE
+SIGEV_THREAD
+SIGEV_THREAD_ID
diff --git a/xlat/sigfpe_codes.in b/xlat/sigfpe_codes.in
new file mode 100644
index 0000000..ab86b26
--- /dev/null
+++ b/xlat/sigfpe_codes.in
@@ -0,0 +1,8 @@
+FPE_INTDIV
+FPE_INTOVF
+FPE_FLTDIV
+FPE_FLTOVF
+FPE_FLTUND
+FPE_FLTRES
+FPE_FLTINV
+FPE_FLTSUB
diff --git a/xlat/sigill_codes.in b/xlat/sigill_codes.in
new file mode 100644
index 0000000..6fb994e
--- /dev/null
+++ b/xlat/sigill_codes.in
@@ -0,0 +1,8 @@
+ILL_ILLOPC
+ILL_ILLOPN
+ILL_ILLADR
+ILL_ILLTRP
+ILL_PRVOPC
+ILL_PRVREG
+ILL_COPROC
+ILL_BADSTK
diff --git a/xlat/siginfo_codes.in b/xlat/siginfo_codes.in
new file mode 100644
index 0000000..115d3ab
--- /dev/null
+++ b/xlat/siginfo_codes.in
@@ -0,0 +1,12 @@
+SI_KERNEL
+SI_USER
+SI_QUEUE
+SI_TIMER
+SI_MESGQ
+SI_ASYNCIO
+SI_SIGIO
+SI_TKILL
+SI_DETHREAD
+SI_ASYNCNL
+SI_NOINFO
+SI_LWP
diff --git a/xlat/sigpoll_codes.in b/xlat/sigpoll_codes.in
new file mode 100644
index 0000000..f778fc6
--- /dev/null
+++ b/xlat/sigpoll_codes.in
@@ -0,0 +1,6 @@
+POLL_IN
+POLL_OUT
+POLL_MSG
+POLL_ERR
+POLL_PRI
+POLL_HUP
diff --git a/xlat/sigprocmaskcmds.in b/xlat/sigprocmaskcmds.in
new file mode 100644
index 0000000..d88a02d
--- /dev/null
+++ b/xlat/sigprocmaskcmds.in
@@ -0,0 +1,4 @@
+SIG_BLOCK
+SIG_UNBLOCK
+SIG_SETMASK
+SIG_SETMASK32
diff --git a/xlat/sigprof_codes.in b/xlat/sigprof_codes.in
new file mode 100644
index 0000000..64dac11
--- /dev/null
+++ b/xlat/sigprof_codes.in
@@ -0,0 +1 @@
+PROF_SIG
diff --git a/xlat/sigsegv_codes.in b/xlat/sigsegv_codes.in
new file mode 100644
index 0000000..bdf3d7e
--- /dev/null
+++ b/xlat/sigsegv_codes.in
@@ -0,0 +1,2 @@
+SEGV_MAPERR
+SEGV_ACCERR
diff --git a/xlat/sigsys_codes.in b/xlat/sigsys_codes.in
new file mode 100644
index 0000000..7eaa40a
--- /dev/null
+++ b/xlat/sigsys_codes.in
@@ -0,0 +1 @@
+SYS_SECCOMP
diff --git a/xlat/sigtrap_codes.in b/xlat/sigtrap_codes.in
new file mode 100644
index 0000000..41474fe
--- /dev/null
+++ b/xlat/sigtrap_codes.in
@@ -0,0 +1,2 @@
+TRAP_BRKPT
+TRAP_TRACE
diff --git a/xlat/sock_type_flags.in b/xlat/sock_type_flags.in
new file mode 100644
index 0000000..b99786b
--- /dev/null
+++ b/xlat/sock_type_flags.in
@@ -0,0 +1,2 @@
+SOCK_CLOEXEC
+SOCK_NONBLOCK
diff --git a/xlat/socketlayers.in b/xlat/socketlayers.in
new file mode 100644
index 0000000..419c305
--- /dev/null
+++ b/xlat/socketlayers.in
@@ -0,0 +1,34 @@
+SOL_IP
+SOL_ICMP
+SOL_TCP
+SOL_UDP
+SOL_IPV6
+SOL_ICMPV6
+SOL_SCTP
+SOL_UDPLITE
+SOL_RAW
+SOL_IPX
+SOL_AX25
+SOL_ATALK
+SOL_NETROM
+SOL_ROSE
+SOL_DECNET
+SOL_X25
+SOL_PACKET
+SOL_ATM
+SOL_AAL
+SOL_IRDA
+SOL_NETBEUI
+SOL_LLC
+SOL_DCCP
+SOL_NETLINK
+SOL_TIPC
+SOL_RXRPC
+SOL_PPPOL2TP
+SOL_BLUETOOTH
+SOL_PNPIPE
+SOL_RDS
+SOL_IUCV
+SOL_CAIF
+SOL_SOCKET
+#unterminated
diff --git a/xlat/sockipoptions.in b/xlat/sockipoptions.in
new file mode 100644
index 0000000..527d867
--- /dev/null
+++ b/xlat/sockipoptions.in
@@ -0,0 +1,47 @@
+IP_TOS
+IP_TTL
+IP_HDRINCL
+IP_OPTIONS
+IP_ROUTER_ALERT
+IP_RECVOPTIONS
+IP_RECVOPTS
+IP_RECVRETOPTS
+IP_RECVDSTADDR
+IP_RETOPTS
+IP_PKTINFO
+IP_PKTOPTIONS
+IP_MTU_DISCOVER
+IP_RECVERR
+IP_RECVTTL
+IP_RECVTOS
+IP_MTU
+IP_MULTICAST_IF
+IP_MULTICAST_TTL
+IP_MULTICAST_LOOP
+IP_ADD_MEMBERSHIP
+IP_DROP_MEMBERSHIP
+IP_BROADCAST_IF
+IP_RECVIFINDEX
+IP_MSFILTER
+MCAST_MSFILTER
+IP_FREEBIND
+IP_IPSEC_POLICY
+IP_XFRM_POLICY
+IP_PASSSEC
+IP_TRANSPARENT
+IP_ORIGDSTADDR
+IP_RECVORIGDSTADDR
+IP_MINTTL
+IP_NODEFRAG
+IP_UNBLOCK_SOURCE
+IP_BLOCK_SOURCE
+IP_ADD_SOURCE_MEMBERSHIP
+IP_DROP_SOURCE_MEMBERSHIP
+MCAST_JOIN_GROUP
+MCAST_BLOCK_SOURCE
+MCAST_UNBLOCK_SOURCE
+MCAST_LEAVE_GROUP
+MCAST_JOIN_SOURCE_GROUP
+MCAST_LEAVE_SOURCE_GROUP
+IP_MULTICAST_ALL
+IP_UNICAST_IF
diff --git a/xlat/sockipv6options.in b/xlat/sockipv6options.in
new file mode 100644
index 0000000..7808ae0
--- /dev/null
+++ b/xlat/sockipv6options.in
@@ -0,0 +1,21 @@
+IPV6_ADDRFORM
+MCAST_FILTER
+IPV6_PKTOPTIONS
+IPV6_MTU
+IPV6_V6ONLY
+IPV6_PKTINFO
+IPV6_HOPLIMIT
+IPV6_RTHDR
+IPV6_HOPOPTS
+IPV6_DSTOPTS
+IPV6_FLOWINFO
+IPV6_UNICAST_HOPS
+IPV6_MULTICAST_HOPS
+IPV6_MULTICAST_LOOP
+IPV6_MULTICAST_IF
+IPV6_MTU_DISCOVER
+IPV6_RECVERR
+IPV6_FLOWINFO_SEND
+IPV6_ADD_MEMBERSHIP
+IPV6_DROP_MEMBERSHIP
+IPV6_ROUTER_ALERT
diff --git a/xlat/sockipxoptions.in b/xlat/sockipxoptions.in
new file mode 100644
index 0000000..eba97fd
--- /dev/null
+++ b/xlat/sockipxoptions.in
@@ -0,0 +1 @@
+IPX_TYPE
diff --git a/xlat/sockoptions.in b/xlat/sockoptions.in
new file mode 100644
index 0000000..9778a85
--- /dev/null
+++ b/xlat/sockoptions.in
@@ -0,0 +1,42 @@
+SO_ACCEPTCONN
+SO_ALLRAW
+SO_ATTACH_FILTER
+SO_BINDTODEVICE
+SO_BROADCAST
+SO_BSDCOMPAT
+SO_DEBUG
+SO_DETACH_FILTER
+SO_DONTROUTE
+SO_ERROR
+SO_ICS
+SO_IMASOCKET
+SO_KEEPALIVE
+SO_LINGER
+SO_LISTENING
+SO_MGMT
+SO_NO_CHECK
+SO_OOBINLINE
+SO_ORDREL
+SO_PARALLELSVR
+SO_PASSCRED
+SO_PEERCRED
+SO_PEERNAME
+SO_PEERSEC
+SO_PRIORITY
+SO_PROTOTYPE
+SO_RCVBUF
+SO_RCVLOWAT
+SO_RCVTIMEO
+SO_RDWR
+SO_REUSEADDR
+SO_REUSEPORT
+SO_SECURITY_AUTHENTICATION
+SO_SECURITY_ENCRYPTION_NETWORK
+SO_SECURITY_ENCRYPTION_TRANSPORT
+SO_SEMA
+SO_SNDBUF
+SO_SNDLOWAT
+SO_SNDTIMEO
+SO_TIMESTAMP
+SO_TYPE
+SO_USELOOPBACK
diff --git a/xlat/sockpacketoptions.in b/xlat/sockpacketoptions.in
new file mode 100644
index 0000000..734ca10
--- /dev/null
+++ b/xlat/sockpacketoptions.in
@@ -0,0 +1,13 @@
+PACKET_ADD_MEMBERSHIP
+PACKET_DROP_MEMBERSHIP
+PACKET_RECV_OUTPUT
+PACKET_RX_RING
+PACKET_STATISTICS
+PACKET_COPY_THRESH
+PACKET_AUXDATA
+PACKET_ORIGDEV
+PACKET_VERSION
+PACKET_HDRLEN
+PACKET_RESERVE
+PACKET_TX_RING
+PACKET_LOSS
diff --git a/xlat/sockrawoptions.in b/xlat/sockrawoptions.in
new file mode 100644
index 0000000..b341134
--- /dev/null
+++ b/xlat/sockrawoptions.in
@@ -0,0 +1 @@
+ICMP_FILTER
diff --git a/xlat/socksctpoptions.in b/xlat/socksctpoptions.in
new file mode 100644
index 0000000..5ee7ad0
--- /dev/null
+++ b/xlat/socksctpoptions.in
@@ -0,0 +1,40 @@
+SCTP_RTOINFO
+SCTP_ASSOCINFO
+SCTP_INITMSG
+SCTP_NODELAY
+SCTP_AUTOCLOSE
+SCTP_SET_PEER_PRIMARY_ADDR
+SCTP_PRIMARY_ADDR
+SCTP_ADAPTATION_LAYER
+SCTP_DISABLE_FRAGMENTS
+SCTP_PEER_ADDR_PARAMS
+SCTP_DEFAULT_SEND_PARAM
+SCTP_EVENTS
+SCTP_I_WANT_MAPPED_V4_ADDR
+SCTP_MAXSEG
+SCTP_STATUS
+SCTP_GET_PEER_ADDR_INFO
+SCTP_DELAYED_ACK
+SCTP_CONTEXT
+SCTP_FRAGMENT_INTERLEAVE
+SCTP_PARTIAL_DELIVERY_POINT
+SCTP_MAX_BURST
+SCTP_AUTH_CHUNK
+SCTP_HMAC_IDENT
+SCTP_AUTH_KEY
+SCTP_AUTH_ACTIVE_KEY
+SCTP_AUTH_DELETE_KEY
+SCTP_PEER_AUTH_CHUNKS
+SCTP_LOCAL_AUTH_CHUNKS
+SCTP_GET_ASSOC_NUMBER
+/* linux specific things */
+SCTP_SOCKOPT_BINDX_ADD
+SCTP_SOCKOPT_BINDX_REM
+SCTP_SOCKOPT_PEELOFF
+SCTP_GET_PEER_ADDRS_NUM_OLD
+SCTP_GET_PEER_ADDRS_OLD
+SCTP_GET_LOCAL_ADDRS_NUM_OLD
+SCTP_GET_LOCAL_ADDRS_OLD
+SCTP_SOCKOPT_CONNECTX_OLD
+SCTP_GET_PEER_ADDRS
+SCTP_GET_LOCAL_ADDRS
diff --git a/xlat/socktcpoptions.in b/xlat/socktcpoptions.in
new file mode 100644
index 0000000..e83c382
--- /dev/null
+++ b/xlat/socktcpoptions.in
@@ -0,0 +1,24 @@
+TCP_NODELAY
+TCP_MAXSEG
+TCP_CORK
+TCP_KEEPIDLE
+TCP_KEEPINTVL
+TCP_KEEPCNT
+TCP_SYNCNT
+TCP_LINGER2
+TCP_DEFER_ACCEPT
+TCP_WINDOW_CLAMP
+TCP_INFO
+TCP_QUICKACK
+TCP_CONGESTION
+TCP_MD5SIG
+TCP_COOKIE_TRANSACTIONS
+TCP_THIN_LINEAR_TIMEOUTS
+TCP_THIN_DUPACK
+TCP_USER_TIMEOUT
+TCP_REPAIR
+TCP_REPAIR_QUEUE
+TCP_QUEUE_SEQ
+TCP_REPAIR_OPTIONS
+TCP_FASTOPEN
+TCP_TIMESTAMP
diff --git a/xlat/socktypes.in b/xlat/socktypes.in
new file mode 100644
index 0000000..4b3eadc
--- /dev/null
+++ b/xlat/socktypes.in
@@ -0,0 +1,7 @@
+SOCK_STREAM
+SOCK_DGRAM
+SOCK_RAW
+SOCK_RDM
+SOCK_SEQPACKET
+SOCK_DCCP
+SOCK_PACKET
diff --git a/xlat/splice_flags.in b/xlat/splice_flags.in
new file mode 100644
index 0000000..72e2c0b
--- /dev/null
+++ b/xlat/splice_flags.in
@@ -0,0 +1,4 @@
+SPLICE_F_MOVE
+SPLICE_F_NONBLOCK
+SPLICE_F_MORE
+SPLICE_F_GIFT
diff --git a/xlat/sram_alloc_flags.in b/xlat/sram_alloc_flags.in
new file mode 100644
index 0000000..8c06633
--- /dev/null
+++ b/xlat/sram_alloc_flags.in
@@ -0,0 +1,5 @@
+L1_INST_SRAM
+L1_DATA_A_SRAM
+L1_DATA_B_SRAM
+L1_DATA_SRAM
+L2_SRAM
diff --git a/xlat/swap_flags.in b/xlat/swap_flags.in
new file mode 100644
index 0000000..d93e2c1
--- /dev/null
+++ b/xlat/swap_flags.in
@@ -0,0 +1,2 @@
+SWAP_FLAG_PREFER
+SWAP_FLAG_DISCARD
diff --git a/xlat/sync_file_range_flags.in b/xlat/sync_file_range_flags.in
new file mode 100644
index 0000000..3a62f29
--- /dev/null
+++ b/xlat/sync_file_range_flags.in
@@ -0,0 +1,3 @@
+SYNC_FILE_RANGE_WAIT_BEFORE
+SYNC_FILE_RANGE_WRITE
+SYNC_FILE_RANGE_WAIT_AFTER
diff --git a/xlat/sysctl_kern.in b/xlat/sysctl_kern.in
new file mode 100644
index 0000000..93ebfe2
--- /dev/null
+++ b/xlat/sysctl_kern.in
@@ -0,0 +1,66 @@
+KERN_OSTYPE
+KERN_OSRELEASE
+KERN_OSREV
+KERN_VERSION
+KERN_SECUREMASK
+KERN_PROF
+KERN_NODENAME
+KERN_DOMAINNAME
+KERN_PANIC
+KERN_REALROOTDEV
+KERN_SPARC_REBOOT
+KERN_CTLALTDEL
+KERN_PRINTK
+KERN_NAMETRANS
+KERN_PPC_HTABRECLAIM
+KERN_PPC_ZEROPAGED
+KERN_PPC_POWERSAVE_NAP
+KERN_MODPROBE
+KERN_SG_BIG_BUFF
+KERN_ACCT
+KERN_PPC_L2CR
+KERN_RTSIGNR
+KERN_RTSIGMAX
+KERN_SHMMAX
+KERN_MSGMAX
+KERN_MSGMNB
+KERN_MSGPOOL
+KERN_SYSRQ
+KERN_MAX_THREADS
+KERN_RANDOM
+KERN_SHMALL
+KERN_MSGMNI
+KERN_SEM
+KERN_SPARC_STOP_A
+KERN_SHMMNI
+KERN_OVERFLOWUID
+KERN_OVERFLOWGID
+KERN_SHMPATH
+KERN_HOTPLUG
+KERN_IEEE_EMULATION_WARNINGS
+KERN_S390_USER_DEBUG_LOGGING
+KERN_CORE_USES_PID
+KERN_TAINTED
+KERN_CADPID
+KERN_PIDMAX
+KERN_CORE_PATTERN
+KERN_PANIC_ON_OOPS
+KERN_HPPA_PWRSW
+KERN_HPPA_UNALIGNED
+KERN_PRINTK_RATELIMIT
+KERN_PRINTK_RATELIMIT_BURST
+KERN_PTY
+KERN_NGROUPS_MAX
+KERN_SPARC_SCONS_PWROFF
+KERN_HZ_TIMER
+KERN_UNKNOWN_NMI_PANIC
+KERN_BOOTLOADER_TYPE
+KERN_RANDOMIZE
+KERN_SETUID_DUMPABLE
+KERN_SPIN_RETRY
+KERN_ACPI_VIDEO_FLAGS
+KERN_IA64_UNALIGNED
+KERN_COMPAT_LOG
+KERN_MAX_LOCK_DEPTH
+KERN_NMI_WATCHDOG
+KERN_PANIC_ON_NMI
diff --git a/xlat/sysctl_net.in b/xlat/sysctl_net.in
new file mode 100644
index 0000000..4e64a46
--- /dev/null
+++ b/xlat/sysctl_net.in
@@ -0,0 +1,21 @@
+NET_CORE
+NET_ETHER
+NET_802
+NET_UNIX
+NET_IPV4
+NET_IPX
+NET_ATALK
+NET_NETROM
+NET_AX25
+NET_BRIDGE
+NET_ROSE
+NET_IPV6
+NET_X25
+NET_TR
+NET_DECNET
+NET_ECONET
+NET_SCTP
+NET_LLC
+NET_NETFILTER
+NET_DCCP
+NET_IRDA
diff --git a/xlat/sysctl_net_core.in b/xlat/sysctl_net_core.in
new file mode 100644
index 0000000..d29dc50
--- /dev/null
+++ b/xlat/sysctl_net_core.in
@@ -0,0 +1,22 @@
+NET_CORE_WMEM_MAX
+NET_CORE_RMEM_MAX
+NET_CORE_WMEM_DEFAULT
+NET_CORE_RMEM_DEFAULT
+NET_CORE_DESTROY_DELAY
+NET_CORE_MAX_BACKLOG
+NET_CORE_FASTROUTE
+NET_CORE_MSG_COST
+NET_CORE_MSG_BURST
+NET_CORE_OPTMEM_MAX
+NET_CORE_HOT_LIST_LENGTH
+NET_CORE_DIVERT_VERSION
+NET_CORE_NO_CONG_THRESH
+NET_CORE_NO_CONG
+NET_CORE_LO_CONG
+NET_CORE_MOD_CONG
+NET_CORE_DEV_WEIGHT
+NET_CORE_SOMAXCONN
+NET_CORE_BUDGET
+NET_CORE_AEVENT_ETIME
+NET_CORE_AEVENT_RSEQTH
+NET_CORE_WARNINGS
diff --git a/xlat/sysctl_net_ipv4.in b/xlat/sysctl_net_ipv4.in
new file mode 100644
index 0000000..d700cc9
--- /dev/null
+++ b/xlat/sysctl_net_ipv4.in
@@ -0,0 +1,92 @@
+NET_IPV4_FORWARD
+NET_IPV4_DYNADDR
+NET_IPV4_CONF
+NET_IPV4_NEIGH
+NET_IPV4_ROUTE
+NET_IPV4_FIB_HASH
+NET_IPV4_NETFILTER
+NET_IPV4_TCP_TIMESTAMPS
+NET_IPV4_TCP_WINDOW_SCALING
+NET_IPV4_TCP_SACK
+NET_IPV4_TCP_RETRANS_COLLAPSE
+NET_IPV4_DEFAULT_TTL
+NET_IPV4_AUTOCONFIG
+NET_IPV4_NO_PMTU_DISC
+NET_IPV4_TCP_SYN_RETRIES
+NET_IPV4_IPFRAG_HIGH_THRESH
+NET_IPV4_IPFRAG_LOW_THRESH
+NET_IPV4_IPFRAG_TIME
+NET_IPV4_TCP_MAX_KA_PROBES
+NET_IPV4_TCP_KEEPALIVE_TIME
+NET_IPV4_TCP_KEEPALIVE_PROBES
+NET_IPV4_TCP_RETRIES1
+NET_IPV4_TCP_RETRIES2
+NET_IPV4_TCP_FIN_TIMEOUT
+NET_IPV4_IP_MASQ_DEBUG
+NET_TCP_SYNCOOKIES
+NET_TCP_STDURG
+NET_TCP_RFC1337
+NET_TCP_SYN_TAILDROP
+NET_TCP_MAX_SYN_BACKLOG
+NET_IPV4_LOCAL_PORT_RANGE
+NET_IPV4_ICMP_ECHO_IGNORE_ALL
+NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS
+NET_IPV4_ICMP_SOURCEQUENCH_RATE
+NET_IPV4_ICMP_DESTUNREACH_RATE
+NET_IPV4_ICMP_TIMEEXCEED_RATE
+NET_IPV4_ICMP_PARAMPROB_RATE
+NET_IPV4_ICMP_ECHOREPLY_RATE
+NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES
+NET_IPV4_IGMP_MAX_MEMBERSHIPS
+NET_TCP_TW_RECYCLE
+NET_IPV4_ALWAYS_DEFRAG
+NET_IPV4_TCP_KEEPALIVE_INTVL
+NET_IPV4_INET_PEER_THRESHOLD
+NET_IPV4_INET_PEER_MINTTL
+NET_IPV4_INET_PEER_MAXTTL
+NET_IPV4_INET_PEER_GC_MINTIME
+NET_IPV4_INET_PEER_GC_MAXTIME
+NET_TCP_ORPHAN_RETRIES
+NET_TCP_ABORT_ON_OVERFLOW
+NET_TCP_SYNACK_RETRIES
+NET_TCP_MAX_ORPHANS
+NET_TCP_MAX_TW_BUCKETS
+NET_TCP_FACK
+NET_TCP_REORDERING
+NET_TCP_ECN
+NET_TCP_DSACK
+NET_TCP_MEM
+NET_TCP_WMEM
+NET_TCP_RMEM
+NET_TCP_APP_WIN
+NET_TCP_ADV_WIN_SCALE
+NET_IPV4_NONLOCAL_BIND
+NET_IPV4_ICMP_RATELIMIT
+NET_IPV4_ICMP_RATEMASK
+NET_TCP_TW_REUSE
+NET_TCP_FRTO
+NET_TCP_LOW_LATENCY
+NET_IPV4_IPFRAG_SECRET_INTERVAL
+NET_IPV4_IGMP_MAX_MSF
+NET_TCP_NO_METRICS_SAVE
+NET_TCP_DEFAULT_WIN_SCALE
+NET_TCP_MODERATE_RCVBUF
+NET_TCP_TSO_WIN_DIVISOR
+NET_TCP_BIC_BETA
+NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR
+NET_TCP_CONG_CONTROL
+NET_TCP_ABC
+NET_IPV4_IPFRAG_MAX_DIST
+NET_TCP_MTU_PROBING
+NET_TCP_BASE_MSS
+NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS
+NET_TCP_DMA_COPYBREAK
+NET_TCP_SLOW_START_AFTER_IDLE
+NET_CIPSOV4_CACHE_ENABLE
+NET_CIPSOV4_CACHE_BUCKET_SIZE
+NET_CIPSOV4_RBM_OPTFMT
+NET_CIPSOV4_RBM_STRICTVALID
+NET_TCP_AVAIL_CONG_CONTROL
+NET_TCP_ALLOWED_CONG_CONTROL
+NET_TCP_MAX_SSTHRESH
+NET_TCP_FRTO_RESPONSE
diff --git a/xlat/sysctl_net_ipv4_conf.in b/xlat/sysctl_net_ipv4_conf.in
new file mode 100644
index 0000000..03ce527
--- /dev/null
+++ b/xlat/sysctl_net_ipv4_conf.in
@@ -0,0 +1,22 @@
+NET_IPV4_CONF_FORWARDING
+NET_IPV4_CONF_MC_FORWARDING
+NET_IPV4_CONF_PROXY_ARP
+NET_IPV4_CONF_ACCEPT_REDIRECTS
+NET_IPV4_CONF_SECURE_REDIRECTS
+NET_IPV4_CONF_SEND_REDIRECTS
+NET_IPV4_CONF_SHARED_MEDIA
+NET_IPV4_CONF_RP_FILTER
+NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE
+NET_IPV4_CONF_BOOTP_RELAY
+NET_IPV4_CONF_LOG_MARTIANS
+NET_IPV4_CONF_TAG
+NET_IPV4_CONF_ARPFILTER
+NET_IPV4_CONF_MEDIUM_ID
+NET_IPV4_CONF_NOXFRM
+NET_IPV4_CONF_NOPOLICY
+NET_IPV4_CONF_FORCE_IGMP_VERSION
+NET_IPV4_CONF_ARP_ANNOUNCE
+NET_IPV4_CONF_ARP_IGNORE
+NET_IPV4_CONF_PROMOTE_SECONDARIES
+NET_IPV4_CONF_ARP_ACCEPT
+NET_IPV4_CONF_ARP_NOTIFY
diff --git a/xlat/sysctl_net_ipv4_route.in b/xlat/sysctl_net_ipv4_route.in
new file mode 100644
index 0000000..fb06e9c
--- /dev/null
+++ b/xlat/sysctl_net_ipv4_route.in
@@ -0,0 +1,19 @@
+NET_IPV4_ROUTE_FLUSH
+NET_IPV4_ROUTE_MIN_DELAY
+NET_IPV4_ROUTE_MAX_DELAY
+NET_IPV4_ROUTE_GC_THRESH
+NET_IPV4_ROUTE_MAX_SIZE
+NET_IPV4_ROUTE_GC_MIN_INTERVAL
+NET_IPV4_ROUTE_GC_TIMEOUT
+NET_IPV4_ROUTE_GC_INTERVAL
+NET_IPV4_ROUTE_REDIRECT_LOAD
+NET_IPV4_ROUTE_REDIRECT_NUMBER
+NET_IPV4_ROUTE_REDIRECT_SILENCE
+NET_IPV4_ROUTE_ERROR_COST
+NET_IPV4_ROUTE_ERROR_BURST
+NET_IPV4_ROUTE_GC_ELASTICITY
+NET_IPV4_ROUTE_MTU_EXPIRES
+NET_IPV4_ROUTE_MIN_PMTU
+NET_IPV4_ROUTE_MIN_ADVMSS
+NET_IPV4_ROUTE_SECRET_INTERVAL
+NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS
diff --git a/xlat/sysctl_net_ipv6.in b/xlat/sysctl_net_ipv6.in
new file mode 100644
index 0000000..75e64ec
--- /dev/null
+++ b/xlat/sysctl_net_ipv6.in
@@ -0,0 +1,10 @@
+NET_IPV6_CONF
+NET_IPV6_NEIGH
+NET_IPV6_ROUTE
+NET_IPV6_ICMP
+NET_IPV6_BINDV6ONLY
+NET_IPV6_IP6FRAG_HIGH_THRESH
+NET_IPV6_IP6FRAG_LOW_THRESH
+NET_IPV6_IP6FRAG_TIME
+NET_IPV6_IP6FRAG_SECRET_INTERVAL
+NET_IPV6_MLD_MAX_MSF
diff --git a/xlat/sysctl_net_ipv6_route.in b/xlat/sysctl_net_ipv6_route.in
new file mode 100644
index 0000000..6395edd
--- /dev/null
+++ b/xlat/sysctl_net_ipv6_route.in
@@ -0,0 +1,10 @@
+NET_IPV6_ROUTE_FLUSH
+NET_IPV6_ROUTE_GC_THRESH
+NET_IPV6_ROUTE_MAX_SIZE
+NET_IPV6_ROUTE_GC_MIN_INTERVAL
+NET_IPV6_ROUTE_GC_TIMEOUT
+NET_IPV6_ROUTE_GC_INTERVAL
+NET_IPV6_ROUTE_GC_ELASTICITY
+NET_IPV6_ROUTE_MTU_EXPIRES
+NET_IPV6_ROUTE_MIN_ADVMSS
+NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS
diff --git a/xlat/sysctl_net_unix.in b/xlat/sysctl_net_unix.in
new file mode 100644
index 0000000..a442fee
--- /dev/null
+++ b/xlat/sysctl_net_unix.in
@@ -0,0 +1,3 @@
+NET_UNIX_DESTROY_DELAY
+NET_UNIX_DELETE_DELAY
+NET_UNIX_MAX_DGRAM_QLEN
diff --git a/xlat/sysctl_root.in b/xlat/sysctl_root.in
new file mode 100644
index 0000000..28bd49a
--- /dev/null
+++ b/xlat/sysctl_root.in
@@ -0,0 +1,15 @@
+CTL_KERN
+CTL_VM
+CTL_NET
+CTL_PROC
+CTL_FS
+CTL_DEBUG
+CTL_DEV
+CTL_BUS
+CTL_ABI
+CTL_CPU
+CTL_ARLAN
+CTL_S390DBF
+CTL_SUNRPC
+CTL_PM
+CTL_FRV
diff --git a/xlat/sysctl_vm.in b/xlat/sysctl_vm.in
new file mode 100644
index 0000000..6d476af
--- /dev/null
+++ b/xlat/sysctl_vm.in
@@ -0,0 +1,20 @@
+VM_OVERCOMMIT_MEMORY
+VM_PAGE_CLUSTER
+VM_DIRTY_BACKGROUND
+VM_DIRTY_RATIO
+VM_DIRTY_WB_CS
+VM_DIRTY_EXPIRE_CS
+VM_NR_PDFLUSH_THREADS
+VM_OVERCOMMIT_RATIO
+VM_PAGEBUF
+VM_HUGETLB_PAGES
+VM_SWAPPINESS
+VM_LOWMEM_RESERVE_RATIO
+VM_MIN_FREE_KBYTES
+VM_MAX_MAP_COUNT
+VM_LAPTOP_MODE
+VM_BLOCK_DUMP
+VM_HUGETLB_GROUP
+VM_VFS_CACHE_PRESSURE
+VM_LEGACY_VA_LAYOUT
+VM_SWAP_TOKEN_TIMEOUT
diff --git a/xlat/syslog_action_type.in b/xlat/syslog_action_type.in
new file mode 100644
index 0000000..6e0109a
--- /dev/null
+++ b/xlat/syslog_action_type.in
@@ -0,0 +1,12 @@
+#unconditional
+SYSLOG_ACTION_CLOSE
+SYSLOG_ACTION_OPEN
+SYSLOG_ACTION_READ
+SYSLOG_ACTION_READ_ALL
+SYSLOG_ACTION_READ_CLEAR
+SYSLOG_ACTION_CLEAR
+SYSLOG_ACTION_CONSOLE_OFF
+SYSLOG_ACTION_CONSOLE_ON
+SYSLOG_ACTION_CONSOLE_LEVEL
+SYSLOG_ACTION_SIZE_UNREAD
+SYSLOG_ACTION_SIZE_BUFFER
diff --git a/xlat/sysmips_operations.in b/xlat/sysmips_operations.in
new file mode 100644
index 0000000..3d367cb
--- /dev/null
+++ b/xlat/sysmips_operations.in
@@ -0,0 +1,5 @@
+SETNAME
+FLUSH_CACHE
+MIPS_FIXADE
+MIPS_RDNVRAM
+MIPS_ATOMIC_SET
diff --git a/xlat/tcflsh_options.in b/xlat/tcflsh_options.in
new file mode 100644
index 0000000..470a5a4
--- /dev/null
+++ b/xlat/tcflsh_options.in
@@ -0,0 +1,3 @@
+TCIFLUSH
+TCOFLUSH
+TCIOFLUSH
diff --git a/xlat/tcxonc_options.in b/xlat/tcxonc_options.in
new file mode 100644
index 0000000..733aee9
--- /dev/null
+++ b/xlat/tcxonc_options.in
@@ -0,0 +1,4 @@
+TCOOFF
+TCOON
+TCIOFF
+TCION
diff --git a/xlat/timerfdflags.in b/xlat/timerfdflags.in
new file mode 100644
index 0000000..cfd506d
--- /dev/null
+++ b/xlat/timerfdflags.in
@@ -0,0 +1 @@
+TFD_TIMER_ABSTIME
diff --git a/xlat/ubi_volume_props.in b/xlat/ubi_volume_props.in
new file mode 100644
index 0000000..78f2880
--- /dev/null
+++ b/xlat/ubi_volume_props.in
@@ -0,0 +1,2 @@
+#unconditional
+UBI_VOL_PROP_DIRECT_WRITE
diff --git a/xlat/ubi_volume_types.in b/xlat/ubi_volume_types.in
new file mode 100644
index 0000000..b4de52e
--- /dev/null
+++ b/xlat/ubi_volume_types.in
@@ -0,0 +1,3 @@
+#unconditional
+UBI_DYNAMIC_VOLUME
+UBI_STATIC_VOLUME
diff --git a/xlat/umount_flags.in b/xlat/umount_flags.in
new file mode 100644
index 0000000..4a7e366
--- /dev/null
+++ b/xlat/umount_flags.in
@@ -0,0 +1,3 @@
+MNT_FORCE
+MNT_DETACH
+MNT_EXPIRE
diff --git a/xlat/usagewho.in b/xlat/usagewho.in
new file mode 100644
index 0000000..e2153b3
--- /dev/null
+++ b/xlat/usagewho.in
@@ -0,0 +1,3 @@
+RUSAGE_SELF
+RUSAGE_CHILDREN
+RUSAGE_BOTH
diff --git a/xlat/wait4_options.in b/xlat/wait4_options.in
new file mode 100644
index 0000000..61219d3
--- /dev/null
+++ b/xlat/wait4_options.in
@@ -0,0 +1,12 @@
+WNOHANG
+#ifndef WSTOPPED
+WUNTRACED
+#endif
+WEXITED
+WTRAPPED
+WSTOPPED
+WCONTINUED
+WNOWAIT
+__WCLONE
+__WALL
+__WNOTHREAD
diff --git a/xlat/waitid_types.in b/xlat/waitid_types.in
new file mode 100644
index 0000000..99a3560
--- /dev/null
+++ b/xlat/waitid_types.in
@@ -0,0 +1,9 @@
+P_PID
+P_PPID
+P_PGID
+P_SID
+P_CID
+P_UID
+P_GID
+P_ALL
+P_LWPID
diff --git a/xlat/whence_codes.in b/xlat/whence_codes.in
new file mode 100644
index 0000000..c04d79a
--- /dev/null
+++ b/xlat/whence_codes.in
@@ -0,0 +1,5 @@
+SEEK_SET
+SEEK_CUR
+SEEK_END
+SEEK_DATA
+SEEK_HOLE
diff --git a/xlat/xattrflags.in b/xlat/xattrflags.in
new file mode 100644
index 0000000..41d1896
--- /dev/null
+++ b/xlat/xattrflags.in
@@ -0,0 +1,2 @@
+XATTR_CREATE
+XATTR_REPLACE
diff --git a/xlat/xfs_dqblk_flags.in b/xlat/xfs_dqblk_flags.in
new file mode 100644
index 0000000..3128e17
--- /dev/null
+++ b/xlat/xfs_dqblk_flags.in
@@ -0,0 +1,3 @@
+XFS_USER_QUOTA
+XFS_PROJ_QUOTA
+XFS_GROUP_QUOTA
diff --git a/xlat/xfs_quota_flags.in b/xlat/xfs_quota_flags.in
new file mode 100644
index 0000000..b9a53f0
--- /dev/null
+++ b/xlat/xfs_quota_flags.in
@@ -0,0 +1,4 @@
+XFS_QUOTA_UDQ_ACCT
+XFS_QUOTA_UDQ_ENFD
+XFS_QUOTA_GDQ_ACCT
+XFS_QUOTA_GDQ_ENFD